CLI for publishing a new change to your hyperdrive and syncing it with remote peers
npm install hyperdrive-publisher- 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)
- npm i -g hyperdrive-publisher
- Set up a pinning service like dat-store or hyperdrive-daemon
- 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
- Whenever you want to update your hyperdrive
- Run hyperdrive-publisher sync
- 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
- In case you forget your URL you can re-generate it from the seed
- Run hyperdrive-publisher getURL
- E.g. hyperdrive-publisher getURL f1c681ad2caf09aac2d38adc6a1cc213e7880a9bdfbbc94d81537f3768bc9728
npm i --save hyperdrive-publisher
``JavaScript
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: '/'
})
`
- seed must be provided and should be a Buffer with 32 bytes.url
- will be the hyper:// 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
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 the hyper:// URL of the hyperdrive that got generated for this seedtitle
- will be set to the title inside the generated index.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
- seed is the seed used to generate the Hyperdrive, ths must be provided.url
- will be the hyper:// 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
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`.