hyperdrive-publisher
v3.1.2
Published
CLI for publishing a new change to your hyperdrive and syncing it with remote peers
Downloads
9
Maintainers
Readme
hyperdrive-publisher
CLI for publishing a new change to your hyperdrive and syncing it with remote peers
How it works
- Generates a seed for the hyperdrive
- Uses the seed to generate hypercores for Hyperdrive and set up metadata
- Whenever you want to sync your drive, you can pass in the secret and a folder path
- It'll then sync with a remote peer (probably a dat-store instance)
How to use it
Setup:
npm i -g hyperdrive-publisher
- Set up a pinning service like dat-store or hyperdrive-daemon
Creation
- Run
hyperdrive-publisher create
- Add the URL to your
dat-store
instance or whatever backups you use - Wait for the script to upload data to your backup
- Save the Seed somewhere to reuse later when you publish
- Make sure you don't lose the seed because you cannot recover it
Sync
- Whenever you want to update your hyperdrive
- Run
hyperdrive-publisher sync <seed> [fsPath] [drivePath]
- E.g.
hyperdrive-publisher sync f1c681ad2caf09aac2d38adc6a1cc213e7880a9bdfbbc94d81537f3768bc9728 ./example /somewhere
- This will:
- Wait to connect to a peer for your drive
- Make sure the metadata has been synced with a peer
- Sync data from the
./public
folder on your filesystem to the/website
folder in the hyperdrive - Optionally create a
tag
- Count every block that got uploaded to a remote peer, wait for all the new files to have been uploaded
- Exit
Get URL
- In case you forget your URL you can re-generate it from the seed
- Run
hyperdrive-publisher getURL <seed>
- E.g.
hyperdrive-publisher getURL f1c681ad2caf09aac2d38adc6a1cc213e7880a9bdfbbc94d81537f3768bc9728
JavaScript API
npm i --save hyperdrive-publisher
const {create, sync, getURL} = require('hyperdrive-publisher')
// You can generate a seed yourself
const seed = require('crypto').randomBytes(32)
// Before creating or syncing, make sure to add this URL to a dat-store
const url = await getURL({seed})
// You can do this via the dat-storage-client API
// https://github.com/RangerMauve/dat-storage-client
const DatStorageClient = require('dat-storage-client')
const client = new DatStorageClient(SERVICE_URL)
await client.login(username, password)
await client.add({url})
// This is how you create a hyperdrive
// The URL gets returned in case you need it
const {url} = await create({seed})
// You can run a sync programmatically, too
// The returned diff is an array of changes
const {diff, url} = await sync({
seed,
fsPath: './',
drivePath: '/'
})
const {url} = await getURL({seed, verbose=false})
seed
must be provided and should be a Buffer with 32 bytes.url
will be thehyper://
URL of the hyperdrive that got generated for this seedverbose
controls whether there will be console output. By default it's false so that you don't have junk in your logs
const {seed, url} = await create({seed = crypto.randomBytes(32), title, verbose=false})
Creates a Hyperdrive and waits for the initial sync with a peer.
You'll need to use getURL
and add it to a dat-store
beforehand otherwise it'll get stuck on waiting to get a peer.
seed
is the seed used to generate the Hyperdrive, this will be auto-generated if you don't provide it, the seed will also be in the return value so you can save iturl
will be thehyper://
URL of the hyperdrive that got generated for this seedtitle
will be set to the title inside the generatedindex.json
which is used by tools like dat-store to show human readable titles for dirves.verbose
controls whether there will be console output. By default it's false so that you don't have junk in your logs
const {diff, url} = await sync({seed, fsPath='./', drivePath='/', tag=undefined, ignore=['.git/**'], verbose=false})
seed
is the seed used to generate the Hyperdrive, ths must be provided.url
will be thehyper://
URL of the hyperdrive that got generated for this seedfsPath
is the file path (relative to the current working directory) to sync files fromdrivePath
is the folder inside the hyperdrive you'd like files to be synced totag
is an optional name to tag the drive with so that you can get back to it in the history.ignore
is an optional array of strings for files and folders to ignore. Uses anymatch syntax.verbose
controls whether there will be console output. By default it's false so that you don't have junk in your logs
Use with Github Actions
You can place [./publish.yml] in your .github/workflows/
folder and add your seed as a secret key called PUBLISHER_KEY
in order to publish changes on every push.
Make sure you have the appropriate branch set in the config, the default is default
.