@transia/secret-numbers
Version:
Generate XRPL Accounts with a number-based secret: 8 chunks of 6 digits
76 lines • 2.33 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Account = void 0;
const ripple_keypairs_1 = require("@transia/ripple-keypairs");
const utils_1 = require("../utils");
class Account {
constructor(secretNumbers) {
this._account = {
familySeed: '',
address: '',
keypair: {
publicKey: '',
privateKey: '',
},
};
if (typeof secretNumbers === 'string') {
this._secret = (0, utils_1.parseSecretString)(secretNumbers);
}
else if (Array.isArray(secretNumbers)) {
this._secret = secretNumbers;
}
else if (secretNumbers instanceof Uint8Array) {
this._secret = (0, utils_1.entropyToSecret)(secretNumbers);
}
else {
this._secret = (0, utils_1.randomSecret)();
}
validateLengths(this._secret);
this.derive();
}
getSecret() {
return this._secret;
}
getSecretString() {
return this._secret.join(' ');
}
getAddress() {
return this._account.address;
}
getFamilySeed() {
return this._account.familySeed;
}
getKeypair() {
return this._account.keypair;
}
toString() {
return this.getSecretString();
}
derive() {
try {
const entropy = (0, utils_1.secretToEntropy)(this._secret);
this._account.familySeed = (0, ripple_keypairs_1.generateSeed)({ entropy });
this._account.keypair = (0, ripple_keypairs_1.deriveKeypair)(this._account.familySeed);
this._account.address = (0, ripple_keypairs_1.deriveAddress)(this._account.keypair.publicKey);
}
catch (error) {
let message = 'Unknown Error';
if (error instanceof Error) {
message = error.message;
}
throw new Error(message);
}
}
}
exports.Account = Account;
function validateLengths(secretNumbers) {
if (secretNumbers.length !== 8) {
throw new Error('Secret must have 8 numbers');
}
secretNumbers.forEach((num) => {
if (num.length !== 6) {
throw new Error('Each secret number must be 6 digits');
}
});
}
//# sourceMappingURL=Account.js.map