@memetic-block/ao-encrypted-messages
Version:
Send encrypted messages on AO. Like an encrypted voicemail.
92 lines (91 loc) • 6.36 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const commander_1 = require("commander");
const node_fs_1 = require("node:fs");
const encrypted_messages_1 = require("../common/encrypted-messages");
commander_1.program.command('spawn')
.description('Spawn a new EncryptedMessages process')
.requiredOption('-w, --wallet <path-to-jwk>', 'wallet is required')
.action((args) => __awaiter(void 0, void 0, void 0, function* () {
const wallet = JSON.parse((0, node_fs_1.readFileSync)(args.wallet).toString());
console.log(`Spawning new EncryptedMessages process`);
const encryptedMessages = yield encrypted_messages_1.EncryptedMessages.spawn(wallet);
console.log(`Spawned new EncryptedMessages process at ${encryptedMessages.processId}`);
}));
commander_1.program.command('set-encryption-key')
.description('Set the encryption public key on an EncryptedMessage process')
.requiredOption('-w, --wallet <path-to-jwk>', 'wallet is required')
.requiredOption('-p, --process <process-id>', 'process id is required')
.option('-pk, --publickey', 'The encryption public key to set')
.action((args) => __awaiter(void 0, void 0, void 0, function* () {
const wallet = JSON.parse((0, node_fs_1.readFileSync)(args.wallet).toString());
const encryptedMessages = new encrypted_messages_1.EncryptedMessages(args.process, wallet);
console.log(`Setting encryption key ${args.publickey}`
+ ` on EncryptedMessage process ${args.process}`);
const result = yield encryptedMessages.setEncryptionPublicKey(args.publickey);
console.log(`Set encryption key ${result.publicKey}`
+ ` on EncryptedMessage process ${args.process}`, result);
}));
commander_1.program.command('get-encryption-key')
.description('Get the encryption public key froim an EncryptedMessage process')
.requiredOption('-w, --wallet <path-to-jwk>', 'wallet is required')
.requiredOption('-p, --process <process-id>', 'process id is required')
.action((args) => __awaiter(void 0, void 0, void 0, function* () {
const wallet = JSON.parse((0, node_fs_1.readFileSync)(args.wallet).toString());
const encryptedMessages = new encrypted_messages_1.EncryptedMessages(args.process, wallet);
console.log(`Getting encryption key from EncryptedMessage process ${args.process}`);
const { publicKey, messageId } = yield encryptedMessages.getEncryptionPublicKey();
console.log(`Got encryption public key ${publicKey} with message ${messageId}`);
}));
commander_1.program.command('send-encrypted-message')
.description('Send a message to the EncryptedMessage process')
.requiredOption('-w, --wallet <path-to-jwk>', 'wallet is required')
.requiredOption('-p, --process <process-id>', 'process id is required')
.option('-sk, --secretkey', 'optional secret key to use for encryption - will be generated if undefined')
.option('-n, --nonce', 'optional nonce to use for encryption - will be generated if undefined')
.argument('<message>', 'The message to encrypt and send')
.action((message, opts) => __awaiter(void 0, void 0, void 0, function* () {
const wallet = JSON.parse((0, node_fs_1.readFileSync)(opts.wallet).toString());
const encryptedMessages = new encrypted_messages_1.EncryptedMessages(opts.process, wallet);
console.log(`Sending message to EncryptedMessage process ${opts.process}`);
const { messageId } = yield encryptedMessages.sendEncryptedMessage(message, { secretKey: opts.secretkey, nonce: opts.nonce });
console.log(`Sent message ${messageId} to process ${opts.process}`);
}));
commander_1.program.command('list-encrypted-messages')
.description('List encrypted messages sent to the EncryptedMessage process')
.requiredOption('-w, --wallet <path-to-jwk>', 'wallet is required')
.requiredOption('-p, --process <process-id>', 'process id is required')
.action((args) => __awaiter(void 0, void 0, void 0, function* () {
const wallet = JSON.parse((0, node_fs_1.readFileSync)(args.wallet).toString());
const encryptedMessages = new encrypted_messages_1.EncryptedMessages(args.process, wallet);
console.log(`Listing encrypted messages from EncryptedMessage process ${args.process}`);
const { messages, messageId } = yield encryptedMessages.listEncryptedMessages();
console.log(`Got ${Object.keys(messages).length} encrypted messages`
+ ` with message ${messageId}`);
console.log(messages);
}));
commander_1.program.command('get-encrypted-message')
.description('Gets an encrypted message and optionally decrypts it')
.requiredOption('-w, --wallet <path-to-jwk>', 'wallet is required')
.requiredOption('-p, --process <process-id>', 'process id is required')
.requiredOption('-m, --message <message-id>', 'message id of the original encrypted message')
.option('-sk, --secretkey <secret-key>', 'optional secret key to decrypt messages with')
.action((args) => __awaiter(void 0, void 0, void 0, function* () {
const wallet = JSON.parse((0, node_fs_1.readFileSync)(args.wallet).toString());
const encryptedMessages = new encrypted_messages_1.EncryptedMessages(args.process, wallet);
console.log(`Getting message with messageId ${args.message} from EncryptedMessages`
+ ` process ${args.process}`
+ ` with secretKey ${args.secretkey}`);
const { message, nonce, publicKey, recipientPublicKey } = yield encryptedMessages.getEncryptedMessage(args.message, args.secretkey);
console.log('Got EncryptedMessage', '\nnonce', nonce, '\npublicKey', publicKey, '\nrecipientPublicKey', recipientPublicKey, '\nmessage', message);
}));
commander_1.program.parse();