lightning
Version:
Lightning Network client library
71 lines (56 loc) • 1.97 kB
JavaScript
const asyncAuto = require('async/auto');
const {returnResult} = require('asyncjs-util');
const {isLnd} = require('./../../lnd_requests');
const connectionFailure = '14 UNAVAILABLE: Connect Failed';
const expectedMnemonicLength = 24;
const {isArray} = Array;
const method = 'genSeed';
const type = 'unlocker';
const utf8AsBuffer = utf8 => Buffer.from(utf8, 'utf8');
/** Create a wallet seed
Requires unlocked lnd and unauthenticated LND API Object
{
lnd: <Unauthenticated LND API Object>
[passphrase]: <Seed Passphrase String>
}
@returns via cbk or Promise
{
seed: <Cipher Seed Mnemonic String>
}
*/
module.exports = ({lnd, passphrase}, cbk) => {
return new Promise((resolve, reject) => {
return asyncAuto({
// Check arguments
validate: cbk => {
if (!isLnd({lnd, method, type})) {
return cbk([400, 'ExpectedNonAuthenticatedLndForSeedCreation']);
}
return cbk();
},
// Create seed
createSeed: ['validate', ({}, cbk) => {
const pass = !passphrase ? undefined : utf8AsBuffer(passphrase);
return lnd[type][method]({aezeed_passphrase: pass}, (err, res) => {
if (!!err && err.message === connectionFailure) {
return cbk([503, 'UnexpectedConnectionFailure']);
}
if (!!err) {
return cbk([503, 'UnexpectedCreateSeedError', {err}]);
}
if (!res) {
return cbk([503, 'ExpectedResponseForSeedCreation']);
}
if (!isArray(res.cipher_seed_mnemonic)) {
return cbk([503, 'ExpectedCipherSeedMnemonic']);
}
if (res.cipher_seed_mnemonic.length !== expectedMnemonicLength) {
return cbk([503, 'UnexpectedCipherSeedMnemonicLength']);
}
return cbk(null, {seed: res.cipher_seed_mnemonic.join(' ')});
});
}],
},
returnResult({reject, resolve, of: 'createSeed'}, cbk));
});
};