Initial commit
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
/**
|
||||
* Updates an existing IPNS record or creates a new IPNS record using w3name.
|
||||
* @param {string} cid The CID to publish to IPNS
|
||||
* @param {string} keyPath The path to the signing key
|
||||
* @param {boolean} newIpns Whether to create a new IPNS record
|
||||
* @param {boolean} verbose Whether to print verbose output
|
||||
*/
|
||||
|
||||
import * as Name from 'w3name';
|
||||
import fs from 'fs';
|
||||
import minimist from 'minimist';
|
||||
import process from 'process';
|
||||
|
||||
const SIGNING_KEY_PATH = '.web3name.key';
|
||||
|
||||
async function saveSigningKey(name, outputFilename = SIGNING_KEY_PATH) {
|
||||
const bytes = name.key.bytes;
|
||||
await fs.promises.writeFile(outputFilename, bytes);
|
||||
}
|
||||
|
||||
async function loadSigningKey(filename) {
|
||||
const bytes = await fs.promises.readFile(filename);
|
||||
const name = await Name.from(bytes);
|
||||
return name;
|
||||
}
|
||||
|
||||
const {
|
||||
cid,
|
||||
key: keyPath,
|
||||
newIpns,
|
||||
verbose,
|
||||
} = minimist(process.argv.slice(2), {
|
||||
string: ['cid', 'key'],
|
||||
boolean: ['newIpns', 'verbose'],
|
||||
default: { verbose: false },
|
||||
alias: { c: 'cid', k: 'key' },
|
||||
});
|
||||
|
||||
if (!cid) {
|
||||
console.error('Error: Provide the CID with the --cid flag.');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
if (!keyPath && !newIpns) {
|
||||
console.error(
|
||||
'Error: To update an existing IPNS record, provide the path to the key file with the --key flag or create a new IPNS record with the --newIpns flag.'
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
let name;
|
||||
let newRevision;
|
||||
|
||||
if (newIpns) {
|
||||
if (verbose) console.log(`Creating new IPNS record with cid ${cid}...`);
|
||||
name = await Name.create();
|
||||
newRevision = await Name.v0(name, `/ipfs/${cid}`);
|
||||
|
||||
await saveSigningKey(name, keyPath);
|
||||
if (verbose)
|
||||
console.log(`The associated signing key is saved to ${keyPath ?? SIGNING_KEY_PATH}`);
|
||||
} else {
|
||||
if (verbose) console.log(`Updating existing IPNS record with cid ${cid}...`);
|
||||
name = await loadSigningKey(keyPath);
|
||||
const latestRevision = await Name.resolve(name);
|
||||
newRevision = await Name.increment(latestRevision, `/ipfs/${cid}`);
|
||||
}
|
||||
|
||||
if (verbose) console.log('Publishing...');
|
||||
await Name.publish(newRevision, name.key);
|
||||
|
||||
console.log(`ipns://${name.toString()}`);
|
||||
Reference in New Issue
Block a user