@bitgo-beta/sdk-coin-xrp 1.3.3-alpha.23 → 1.3.3-alpha.231
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +451 -0
- package/dist/src/index.d.ts +4 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +10 -4
- package/dist/src/lib/accountSetBuilder.d.ts +18 -0
- package/dist/src/lib/accountSetBuilder.d.ts.map +1 -0
- package/dist/src/lib/accountSetBuilder.js +63 -0
- package/dist/src/lib/constants.d.ts +8 -0
- package/dist/src/lib/constants.d.ts.map +1 -0
- package/dist/src/lib/constants.js +30 -0
- package/dist/src/lib/iface.d.ts +108 -0
- package/dist/src/lib/iface.d.ts.map +1 -0
- package/dist/src/lib/iface.js +11 -0
- package/dist/src/lib/index.d.ts +14 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +43 -0
- package/dist/src/lib/keyPair.d.ts +35 -0
- package/dist/src/lib/keyPair.d.ts.map +1 -0
- package/dist/src/lib/keyPair.js +109 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts +29 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/tokenTransferBuilder.js +91 -0
- package/dist/src/lib/transaction.d.ts +62 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +371 -0
- package/dist/src/lib/transactionBuilder.d.ts +72 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder.js +253 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +39 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilderFactory.js +97 -0
- package/dist/src/lib/transferBuilder.d.ts +28 -0
- package/dist/src/lib/transferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferBuilder.js +82 -0
- package/dist/src/lib/trustsetBuilder.d.ts +21 -0
- package/dist/src/lib/trustsetBuilder.d.ts.map +1 -0
- package/dist/src/lib/trustsetBuilder.js +72 -0
- package/dist/src/lib/utils.d.ts +61 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +250 -0
- package/dist/src/lib/walletInitializationBuilder.d.ts +19 -0
- package/dist/src/lib/walletInitializationBuilder.d.ts.map +1 -0
- package/dist/src/lib/walletInitializationBuilder.js +76 -0
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +5 -1
- package/dist/src/ripple.d.ts +112 -2
- package/dist/src/ripple.d.ts.map +1 -1
- package/dist/src/ripple.js +17 -14
- package/dist/src/txrp.d.ts +3 -2
- package/dist/src/txrp.d.ts.map +1 -1
- package/dist/src/txrp.js +5 -5
- package/dist/src/xrp.d.ts +11 -60
- package/dist/src/xrp.d.ts.map +1 -1
- package/dist/src/xrp.js +244 -132
- package/dist/src/xrpToken.d.ts +21 -0
- package/dist/src/xrpToken.d.ts.map +1 -0
- package/dist/src/xrpToken.js +58 -0
- package/dist/tsconfig.tsbuildinfo +1 -8595
- package/package.json +11 -11
- package/.mocharc.yml +0 -8
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.TrustSetBuilder = void 0;
|
|
7
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
8
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
9
|
+
const iface_1 = require("./iface");
|
|
10
|
+
const transactionBuilder_1 = require("./transactionBuilder");
|
|
11
|
+
const utils_1 = __importDefault(require("./utils"));
|
|
12
|
+
class TrustSetBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
13
|
+
constructor(_coinConfig) {
|
|
14
|
+
super(_coinConfig);
|
|
15
|
+
}
|
|
16
|
+
get transactionType() {
|
|
17
|
+
return sdk_core_1.TransactionType.TrustLine;
|
|
18
|
+
}
|
|
19
|
+
get xrpTransactionType() {
|
|
20
|
+
return iface_1.XrpTransactionType.TrustSet;
|
|
21
|
+
}
|
|
22
|
+
initBuilder(tx) {
|
|
23
|
+
super.initBuilder(tx);
|
|
24
|
+
const { amount } = tx.toJson();
|
|
25
|
+
if (!amount) {
|
|
26
|
+
throw new sdk_core_1.BuildTransactionError('Missing amount');
|
|
27
|
+
}
|
|
28
|
+
if (!utils_1.default.isIssuedCurrencyAmount(amount)) {
|
|
29
|
+
throw new sdk_core_1.BuildTransactionError('Invalid Limit Amount');
|
|
30
|
+
}
|
|
31
|
+
// The amount is represented in decimal notation, so we need to multiply it by the decimal places
|
|
32
|
+
const amountBigNum = (0, bignumber_js_1.default)(amount.value).shiftedBy(this._coinConfig.decimalPlaces);
|
|
33
|
+
this.amount(amountBigNum.toFixed());
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Set the amount to send
|
|
37
|
+
* @param {string} amount - the amount sent
|
|
38
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
39
|
+
*/
|
|
40
|
+
amount(amount) {
|
|
41
|
+
if (typeof amount !== 'string') {
|
|
42
|
+
throw new Error(`amount type ${typeof amount} must be a string`);
|
|
43
|
+
}
|
|
44
|
+
const amountBigNum = (0, bignumber_js_1.default)(amount);
|
|
45
|
+
if (amountBigNum.lt(0)) {
|
|
46
|
+
throw new Error(`amount ${amount} is not valid`);
|
|
47
|
+
}
|
|
48
|
+
const currency = utils_1.default.getXrpCurrencyFromTokenName(this._coinConfig.name);
|
|
49
|
+
// Unlike most coins, XRP Token amounts are represented in decimal notation
|
|
50
|
+
const value = amountBigNum.shiftedBy(-1 * this._coinConfig.decimalPlaces).toFixed();
|
|
51
|
+
this._amount = {
|
|
52
|
+
value: value,
|
|
53
|
+
...currency,
|
|
54
|
+
};
|
|
55
|
+
return this;
|
|
56
|
+
}
|
|
57
|
+
/** @inheritdoc */
|
|
58
|
+
async buildImplementation() {
|
|
59
|
+
if (!this._sender) {
|
|
60
|
+
throw new sdk_core_1.BuildTransactionError('Sender must be set before building the transaction');
|
|
61
|
+
}
|
|
62
|
+
const trustSetFields = {
|
|
63
|
+
TransactionType: this.xrpTransactionType,
|
|
64
|
+
Account: this._sender,
|
|
65
|
+
LimitAmount: this._amount,
|
|
66
|
+
};
|
|
67
|
+
this._specificFields = trustSetFields;
|
|
68
|
+
return await super.buildImplementation();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.TrustSetBuilder = TrustSetBuilder;
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1c3RzZXRCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cnVzdHNldEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBQThFO0FBRTlFLGdFQUFxQztBQUVyQyxtQ0FBNkM7QUFFN0MsNkRBQTBEO0FBQzFELG9EQUE0QjtBQUU1QixNQUFhLGVBQWdCLFNBQVEsdUNBQWtCO0lBR3JELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLFNBQVMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBYyxrQkFBa0I7UUFDOUIsT0FBTywwQkFBa0IsQ0FBQyxRQUFRLENBQUM7SUFDckMsQ0FBQztJQUVELFdBQVcsQ0FBQyxFQUFlO1FBQ3pCLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdEIsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsTUFBTSxJQUFJLGdDQUFxQixDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDbkQ7UUFDRCxJQUFJLENBQUMsZUFBSyxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3pDLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1NBQ3pEO1FBQ0QsaUdBQWlHO1FBQ2pHLE1BQU0sWUFBWSxHQUFHLElBQUEsc0JBQVMsRUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxNQUFjO1FBQ25CLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxPQUFPLE1BQU0sbUJBQW1CLENBQUMsQ0FBQztTQUNsRTtRQUNELE1BQU0sWUFBWSxHQUFHLElBQUEsc0JBQVMsRUFBQyxNQUFNLENBQUMsQ0FBQztRQUN2QyxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLE1BQU0sZUFBZSxDQUFDLENBQUM7U0FDbEQ7UUFDRCxNQUFNLFFBQVEsR0FBRyxlQUFLLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRSwyRUFBMkU7UUFDM0UsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BGLElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixLQUFLLEVBQUUsS0FBSztZQUNaLEdBQUcsUUFBUTtTQUNaLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxrQkFBa0I7SUFDUixLQUFLLENBQUMsbUJBQW1CO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2pCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1NBQ3ZGO1FBRUQsTUFBTSxjQUFjLEdBQWE7WUFDL0IsZUFBZSxFQUFFLElBQUksQ0FBQyxrQkFBa0I7WUFDeEMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTztTQUMxQixDQUFDO1FBRUYsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUM7UUFFdEMsT0FBTyxNQUFNLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzNDLENBQUM7Q0FDRjtBQXJFRCwwQ0FxRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IElzc3VlZEN1cnJlbmN5QW1vdW50LCBUcnVzdFNldCB9IGZyb20gJ3hycGwnO1xuaW1wb3J0IHsgWHJwVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgVHJ1c3RTZXRCdWlsZGVyIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJpdmF0ZSBfYW1vdW50OiBJc3N1ZWRDdXJyZW5jeUFtb3VudDtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuVHJ1c3RMaW5lO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB4cnBUcmFuc2FjdGlvblR5cGUoKTogWHJwVHJhbnNhY3Rpb25UeXBlLlRydXN0U2V0IHtcbiAgICByZXR1cm4gWHJwVHJhbnNhY3Rpb25UeXBlLlRydXN0U2V0O1xuICB9XG5cbiAgaW5pdEJ1aWxkZXIodHg6IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgc3VwZXIuaW5pdEJ1aWxkZXIodHgpO1xuXG4gICAgY29uc3QgeyBhbW91bnQgfSA9IHR4LnRvSnNvbigpO1xuICAgIGlmICghYW1vdW50KSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdNaXNzaW5nIGFtb3VudCcpO1xuICAgIH1cbiAgICBpZiAoIXV0aWxzLmlzSXNzdWVkQ3VycmVuY3lBbW91bnQoYW1vdW50KSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBMaW1pdCBBbW91bnQnKTtcbiAgICB9XG4gICAgLy8gVGhlIGFtb3VudCBpcyByZXByZXNlbnRlZCBpbiBkZWNpbWFsIG5vdGF0aW9uLCBzbyB3ZSBuZWVkIHRvIG11bHRpcGx5IGl0IGJ5IHRoZSBkZWNpbWFsIHBsYWNlc1xuICAgIGNvbnN0IGFtb3VudEJpZ051bSA9IEJpZ051bWJlcihhbW91bnQudmFsdWUpLnNoaWZ0ZWRCeSh0aGlzLl9jb2luQ29uZmlnLmRlY2ltYWxQbGFjZXMpO1xuICAgIHRoaXMuYW1vdW50KGFtb3VudEJpZ051bS50b0ZpeGVkKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqICBTZXQgdGhlIGFtb3VudCB0byBzZW5kXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbW91bnQgLSB0aGUgYW1vdW50IHNlbnRcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBhbW91bnQoYW1vdW50OiBzdHJpbmcpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIGlmICh0eXBlb2YgYW1vdW50ICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBhbW91bnQgdHlwZSAke3R5cGVvZiBhbW91bnR9IG11c3QgYmUgYSBzdHJpbmdgKTtcbiAgICB9XG4gICAgY29uc3QgYW1vdW50QmlnTnVtID0gQmlnTnVtYmVyKGFtb3VudCk7XG4gICAgaWYgKGFtb3VudEJpZ051bS5sdCgwKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBhbW91bnQgJHthbW91bnR9IGlzIG5vdCB2YWxpZGApO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW5jeSA9IHV0aWxzLmdldFhycEN1cnJlbmN5RnJvbVRva2VuTmFtZSh0aGlzLl9jb2luQ29uZmlnLm5hbWUpO1xuICAgIC8vIFVubGlrZSBtb3N0IGNvaW5zLCBYUlAgVG9rZW4gYW1vdW50cyBhcmUgcmVwcmVzZW50ZWQgaW4gZGVjaW1hbCBub3RhdGlvblxuICAgIGNvbnN0IHZhbHVlID0gYW1vdW50QmlnTnVtLnNoaWZ0ZWRCeSgtMSAqIHRoaXMuX2NvaW5Db25maWcuZGVjaW1hbFBsYWNlcykudG9GaXhlZCgpO1xuICAgIHRoaXMuX2Ftb3VudCA9IHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIC4uLmN1cnJlbmN5LFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGlmICghdGhpcy5fc2VuZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdTZW5kZXIgbXVzdCBiZSBzZXQgYmVmb3JlIGJ1aWxkaW5nIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHRydXN0U2V0RmllbGRzOiBUcnVzdFNldCA9IHtcbiAgICAgIFRyYW5zYWN0aW9uVHlwZTogdGhpcy54cnBUcmFuc2FjdGlvblR5cGUsXG4gICAgICBBY2NvdW50OiB0aGlzLl9zZW5kZXIsXG4gICAgICBMaW1pdEFtb3VudDogdGhpcy5fYW1vdW50LFxuICAgIH07XG5cbiAgICB0aGlzLl9zcGVjaWZpY0ZpZWxkcyA9IHRydXN0U2V0RmllbGRzO1xuXG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLmJ1aWxkSW1wbGVtZW50YXRpb24oKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { BaseUtils } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import * as xrpl from 'xrpl';
|
|
3
|
+
import { Amount, IssuedCurrencyAmount } from 'xrpl';
|
|
4
|
+
import { Address, SignerDetails } from './iface';
|
|
5
|
+
declare class Utils implements BaseUtils {
|
|
6
|
+
isValidAddress(address: string): boolean;
|
|
7
|
+
isValidTransactionId(txId: string): boolean;
|
|
8
|
+
isValidPublicKey(key: string): boolean;
|
|
9
|
+
isValidPrivateKey(key: string): boolean;
|
|
10
|
+
isValidSignature(signature: string): boolean;
|
|
11
|
+
isValidBlockId(hash: string): boolean;
|
|
12
|
+
isValidHex(hex: string): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Parse an address string into address and destination tag
|
|
15
|
+
*/
|
|
16
|
+
getAddressDetails(address: string): Address;
|
|
17
|
+
/**
|
|
18
|
+
* Construct a full, normalized address from an address and destination tag
|
|
19
|
+
*/
|
|
20
|
+
normalizeAddress({ address, destinationTag }: Address): string;
|
|
21
|
+
/**
|
|
22
|
+
* @param message hex encoded string
|
|
23
|
+
* @param privateKey
|
|
24
|
+
* return hex encoded signature string, throws if any of the inputs are invalid
|
|
25
|
+
*/
|
|
26
|
+
signString(message: string, privateKey: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* @param message hex encoded string
|
|
29
|
+
* @param signature hex encooded signature string
|
|
30
|
+
* @param publicKey
|
|
31
|
+
* return boolean, throws if any of the inputs are invalid
|
|
32
|
+
*/
|
|
33
|
+
verifySignature(message: string, signature: string, publicKey: string): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Check the raw transaction has a valid format in the blockchain context, throw otherwise.
|
|
36
|
+
*
|
|
37
|
+
* @param {string} rawTransaction - Transaction in hex string format
|
|
38
|
+
*/
|
|
39
|
+
validateRawTransaction(rawTransaction: string): void;
|
|
40
|
+
/**
|
|
41
|
+
* Checks if raw transaction can be deserialized
|
|
42
|
+
*
|
|
43
|
+
* @param {string} rawTransaction - transaction in base64 string format
|
|
44
|
+
* @returns {boolean} - the validation result
|
|
45
|
+
*/
|
|
46
|
+
isValidRawTransaction(rawTransaction: string): boolean;
|
|
47
|
+
validateAccountSetFlag(setFlag: number): void;
|
|
48
|
+
validateSigner(signer: SignerDetails): void;
|
|
49
|
+
/**
|
|
50
|
+
* Determines if the provided `amount` is for a token payment
|
|
51
|
+
*/
|
|
52
|
+
isIssuedCurrencyAmount(amount: Amount): amount is IssuedCurrencyAmount;
|
|
53
|
+
/**
|
|
54
|
+
* Get the associated XRP Currency details from token name. Throws an error if token is unsupported
|
|
55
|
+
* @param {string} tokenName - The token name
|
|
56
|
+
*/
|
|
57
|
+
getXrpCurrencyFromTokenName(tokenName: string): xrpl.IssuedCurrency;
|
|
58
|
+
}
|
|
59
|
+
declare const utils: Utils;
|
|
60
|
+
export default utils;
|
|
61
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAKV,MAAM,sBAAsB,CAAC;AAK9B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,MAAM,CAAC;AAEpD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGjD,cAAM,KAAM,YAAW,SAAS;IAC9B,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IASxC,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI3C,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAStC,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IASvC,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI5C,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIhC;;OAEG;IACI,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IA8ClD;;OAEG;IACI,gBAAgB,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,OAAO,GAAG,MAAM;IAgBrE;;;;OAIG;IACI,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAU9D;;;;;OAKG;IACI,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAiBtF;;;;OAIG;IACI,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAY3D;;;;;OAKG;IACI,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO;IAUtD,sBAAsB,CAAC,OAAO,EAAE,MAAM;IAStC,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAYlD;;OAEG;IACI,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,oBAAoB;IAU7E;;;OAGG;IACI,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,cAAc;CAa3E;AAED,QAAA,MAAM,KAAK,OAAc,CAAC;AAE1B,eAAe,KAAK,CAAC"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
27
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
28
|
+
const querystring = __importStar(require("querystring"));
|
|
29
|
+
const rippleKeypairs = __importStar(require("ripple-keypairs"));
|
|
30
|
+
const url = __importStar(require("url"));
|
|
31
|
+
const xrpl = __importStar(require("xrpl"));
|
|
32
|
+
const constants_1 = require("./constants");
|
|
33
|
+
const keyPair_1 = require("./keyPair");
|
|
34
|
+
class Utils {
|
|
35
|
+
isValidAddress(address) {
|
|
36
|
+
try {
|
|
37
|
+
const addressDetails = this.getAddressDetails(address);
|
|
38
|
+
return address === this.normalizeAddress(addressDetails);
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
isValidTransactionId(txId) {
|
|
45
|
+
return this.isValidHex(txId);
|
|
46
|
+
}
|
|
47
|
+
isValidPublicKey(key) {
|
|
48
|
+
try {
|
|
49
|
+
new keyPair_1.KeyPair({ pub: key });
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
isValidPrivateKey(key) {
|
|
57
|
+
try {
|
|
58
|
+
new keyPair_1.KeyPair({ prv: key });
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
isValidSignature(signature) {
|
|
66
|
+
return this.isValidHex(signature);
|
|
67
|
+
}
|
|
68
|
+
isValidBlockId(hash) {
|
|
69
|
+
return this.isValidHex(hash);
|
|
70
|
+
}
|
|
71
|
+
isValidHex(hex) {
|
|
72
|
+
return /^([a-fA-F0-9])+$/.test(hex);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Parse an address string into address and destination tag
|
|
76
|
+
*/
|
|
77
|
+
getAddressDetails(address) {
|
|
78
|
+
const destinationDetails = url.parse(address);
|
|
79
|
+
const destinationAddress = destinationDetails.pathname;
|
|
80
|
+
if (!destinationAddress || !xrpl.isValidClassicAddress(destinationAddress)) {
|
|
81
|
+
throw new sdk_core_1.InvalidAddressError(`destination address "${destinationAddress}" is not valid`);
|
|
82
|
+
}
|
|
83
|
+
// there are no other properties like destination tags
|
|
84
|
+
if (destinationDetails.pathname === address) {
|
|
85
|
+
return {
|
|
86
|
+
address: address,
|
|
87
|
+
destinationTag: undefined,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
if (!destinationDetails.query) {
|
|
91
|
+
throw new sdk_core_1.InvalidAddressError('no query params present');
|
|
92
|
+
}
|
|
93
|
+
const queryDetails = querystring.parse(destinationDetails.query);
|
|
94
|
+
if (!queryDetails.dt) {
|
|
95
|
+
// if there are more properties, the query details need to contain the destination tag property.
|
|
96
|
+
throw new sdk_core_1.InvalidAddressError('destination tag missing');
|
|
97
|
+
}
|
|
98
|
+
if (Array.isArray(queryDetails.dt)) {
|
|
99
|
+
// if queryDetails.dt is an array, that means dt was given multiple times, which is not valid
|
|
100
|
+
throw new sdk_core_1.InvalidAddressError(`destination tag can appear at most once, but ${queryDetails.dt.length} destination tags were found`);
|
|
101
|
+
}
|
|
102
|
+
const parsedTag = parseInt(queryDetails.dt, 10);
|
|
103
|
+
if (!Number.isSafeInteger(parsedTag)) {
|
|
104
|
+
throw new sdk_core_1.InvalidAddressError('invalid destination tag');
|
|
105
|
+
}
|
|
106
|
+
if (parsedTag > 0xffffffff || parsedTag < 0) {
|
|
107
|
+
throw new sdk_core_1.InvalidAddressError('destination tag out of range');
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
address: destinationAddress,
|
|
111
|
+
destinationTag: parsedTag,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Construct a full, normalized address from an address and destination tag
|
|
116
|
+
*/
|
|
117
|
+
normalizeAddress({ address, destinationTag }) {
|
|
118
|
+
if (typeof address !== 'string') {
|
|
119
|
+
throw new sdk_core_1.InvalidAddressError('invalid address, expected string');
|
|
120
|
+
}
|
|
121
|
+
if (typeof destinationTag === 'undefined' || destinationTag === null) {
|
|
122
|
+
return address;
|
|
123
|
+
}
|
|
124
|
+
if (!Number.isInteger(destinationTag)) {
|
|
125
|
+
throw new sdk_core_1.InvalidAddressError('invalid destination tag, expected integer');
|
|
126
|
+
}
|
|
127
|
+
if (destinationTag > 0xffffffff || destinationTag < 0) {
|
|
128
|
+
throw new sdk_core_1.InvalidAddressError('destination tag out of range');
|
|
129
|
+
}
|
|
130
|
+
return `${address}?dt=${destinationTag}`;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* @param message hex encoded string
|
|
134
|
+
* @param privateKey
|
|
135
|
+
* return hex encoded signature string, throws if any of the inputs are invalid
|
|
136
|
+
*/
|
|
137
|
+
signString(message, privateKey) {
|
|
138
|
+
if (!this.isValidHex(message)) {
|
|
139
|
+
throw new sdk_core_1.UtilsError('message must be a hex encoded string');
|
|
140
|
+
}
|
|
141
|
+
if (!this.isValidPrivateKey(privateKey)) {
|
|
142
|
+
throw new sdk_core_1.UtilsError('invalid private key');
|
|
143
|
+
}
|
|
144
|
+
return rippleKeypairs.sign(message, privateKey);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* @param message hex encoded string
|
|
148
|
+
* @param signature hex encooded signature string
|
|
149
|
+
* @param publicKey
|
|
150
|
+
* return boolean, throws if any of the inputs are invalid
|
|
151
|
+
*/
|
|
152
|
+
verifySignature(message, signature, publicKey) {
|
|
153
|
+
if (!this.isValidHex(message)) {
|
|
154
|
+
throw new sdk_core_1.UtilsError('message must be a hex encoded string');
|
|
155
|
+
}
|
|
156
|
+
if (!this.isValidSignature(signature)) {
|
|
157
|
+
throw new sdk_core_1.UtilsError('invalid signature');
|
|
158
|
+
}
|
|
159
|
+
if (!this.isValidPublicKey(publicKey)) {
|
|
160
|
+
throw new sdk_core_1.UtilsError('invalid public key');
|
|
161
|
+
}
|
|
162
|
+
try {
|
|
163
|
+
return rippleKeypairs.verify(message, signature, publicKey);
|
|
164
|
+
}
|
|
165
|
+
catch (e) {
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Check the raw transaction has a valid format in the blockchain context, throw otherwise.
|
|
171
|
+
*
|
|
172
|
+
* @param {string} rawTransaction - Transaction in hex string format
|
|
173
|
+
*/
|
|
174
|
+
validateRawTransaction(rawTransaction) {
|
|
175
|
+
if (!rawTransaction) {
|
|
176
|
+
throw new sdk_core_1.InvalidTransactionError('Invalid raw transaction: Undefined');
|
|
177
|
+
}
|
|
178
|
+
if (!this.isValidHex(rawTransaction)) {
|
|
179
|
+
throw new sdk_core_1.InvalidTransactionError('Invalid raw transaction: Hex string expected');
|
|
180
|
+
}
|
|
181
|
+
if (!this.isValidRawTransaction(rawTransaction)) {
|
|
182
|
+
throw new sdk_core_1.InvalidTransactionError('Invalid raw transaction');
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Checks if raw transaction can be deserialized
|
|
187
|
+
*
|
|
188
|
+
* @param {string} rawTransaction - transaction in base64 string format
|
|
189
|
+
* @returns {boolean} - the validation result
|
|
190
|
+
*/
|
|
191
|
+
isValidRawTransaction(rawTransaction) {
|
|
192
|
+
try {
|
|
193
|
+
const jsonTx = xrpl.decode(rawTransaction);
|
|
194
|
+
xrpl.validate(jsonTx);
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
catch (e) {
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
validateAccountSetFlag(setFlag) {
|
|
202
|
+
if (typeof setFlag !== 'number') {
|
|
203
|
+
throw new sdk_core_1.UtilsError(`setFlag ${setFlag} is not valid`);
|
|
204
|
+
}
|
|
205
|
+
if (!constants_1.VALID_ACCOUNT_SET_FLAGS.includes(setFlag)) {
|
|
206
|
+
throw new sdk_core_1.UtilsError(`setFlag ${setFlag} is not a valid account set flag`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
validateSigner(signer) {
|
|
210
|
+
if (!signer.address) {
|
|
211
|
+
throw new sdk_core_1.UtilsError('signer must have an address');
|
|
212
|
+
}
|
|
213
|
+
if (!this.isValidAddress(signer.address)) {
|
|
214
|
+
throw new sdk_core_1.UtilsError(`signer address ${signer.address} is invalid`);
|
|
215
|
+
}
|
|
216
|
+
if (typeof signer.weight !== 'number' || signer.weight < 0) {
|
|
217
|
+
throw new sdk_core_1.UtilsError(`signer weight ${signer.weight} is not valid`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Determines if the provided `amount` is for a token payment
|
|
222
|
+
*/
|
|
223
|
+
isIssuedCurrencyAmount(amount) {
|
|
224
|
+
return (!!amount &&
|
|
225
|
+
typeof amount === 'object' &&
|
|
226
|
+
typeof amount.currency === 'string' &&
|
|
227
|
+
typeof amount.issuer === 'string' &&
|
|
228
|
+
typeof amount.value === 'string');
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Get the associated XRP Currency details from token name. Throws an error if token is unsupported
|
|
232
|
+
* @param {string} tokenName - The token name
|
|
233
|
+
*/
|
|
234
|
+
getXrpCurrencyFromTokenName(tokenName) {
|
|
235
|
+
if (!statics_1.coins.has(tokenName)) {
|
|
236
|
+
throw new sdk_core_1.UnsupportedTokenError(`${tokenName} is not supported`);
|
|
237
|
+
}
|
|
238
|
+
const token = statics_1.coins.get(tokenName);
|
|
239
|
+
if (!token.isToken || !(token instanceof statics_1.XrpCoin)) {
|
|
240
|
+
throw new sdk_core_1.UnsupportedTokenError(`${tokenName} is not an XRP token`);
|
|
241
|
+
}
|
|
242
|
+
return {
|
|
243
|
+
currency: token.currencyCode,
|
|
244
|
+
issuer: token.issuerAddress,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
const utils = new Utils();
|
|
249
|
+
exports.default = utils;
|
|
250
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFNOEI7QUFDOUIsaURBQXFEO0FBQ3JELHlEQUEyQztBQUMzQyxnRUFBa0Q7QUFDbEQseUNBQTJCO0FBQzNCLDJDQUE2QjtBQUU3QiwyQ0FBc0Q7QUFFdEQsdUNBQWtEO0FBRWxELE1BQU0sS0FBSztJQUNULGNBQWMsQ0FBQyxPQUFlO1FBQzVCLElBQUk7WUFDRixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkQsT0FBTyxPQUFPLEtBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQzFEO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQVk7UUFDL0IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUFXO1FBQzFCLElBQUk7WUFDRixJQUFJLGlCQUFVLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUM3QixPQUFPLElBQUksQ0FBQztTQUNiO1FBQUMsTUFBTTtZQUNOLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsR0FBVztRQUMzQixJQUFJO1lBQ0YsSUFBSSxpQkFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDN0IsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUFDLE1BQU07WUFDTixPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLFNBQWlCO1FBQ2hDLE9BQU8sSUFBSSxD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QUFFMUIsa0JBQWUsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmFzZVV0aWxzLFxuICBJbnZhbGlkQWRkcmVzc0Vycm9yLFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgVW5zdXBwb3J0ZWRUb2tlbkVycm9yLFxuICBVdGlsc0Vycm9yLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBjb2lucywgWHJwQ29pbiB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0ICogYXMgcXVlcnlzdHJpbmcgZnJvbSAncXVlcnlzdHJpbmcnO1xuaW1wb3J0ICogYXMgcmlwcGxlS2V5cGFpcnMgZnJvbSAncmlwcGxlLWtleXBhaXJzJztcbmltcG9ydCAqIGFzIHVybCBmcm9tICd1cmwnO1xuaW1wb3J0ICogYXMgeHJwbCBmcm9tICd4cnBsJztcbmltcG9ydCB7IEFtb3VudCwgSXNzdWVkQ3VycmVuY3lBbW91bnQgfSBmcm9tICd4cnBsJztcbmltcG9ydCB7IFZBTElEX0FDQ09VTlRfU0VUX0ZMQUdTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQWRkcmVzcywgU2lnbmVyRGV0YWlscyB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgS2V5UGFpciBhcyBYcnBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcblxuY2xhc3MgVXRpbHMgaW1wbGVtZW50cyBCYXNlVXRpbHMge1xuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYWRkcmVzc0RldGFpbHMgPSB0aGlzLmdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3MpO1xuICAgICAgcmV0dXJuIGFkZHJlc3MgPT09IHRoaXMubm9ybWFsaXplQWRkcmVzcyhhZGRyZXNzRGV0YWlscyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlzVmFsaWRUcmFuc2FjdGlvbklkKHR4SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRIZXgodHhJZCk7XG4gIH1cblxuICBpc1ZhbGlkUHVibGljS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIG5ldyBYcnBLZXlQYWlyKHsgcHViOiBrZXkgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpc1ZhbGlkUHJpdmF0ZUtleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBuZXcgWHJwS2V5UGFpcih7IHBydjoga2V5IH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaXNWYWxpZFNpZ25hdHVyZShzaWduYXR1cmU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRIZXgoc2lnbmF0dXJlKTtcbiAgfVxuXG4gIGlzVmFsaWRCbG9ja0lkKGhhc2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRIZXgoaGFzaCk7XG4gIH1cblxuICBpc1ZhbGlkSGV4KGhleDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eKFthLWZBLUYwLTldKSskLy50ZXN0KGhleCk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYW4gYWRkcmVzcyBzdHJpbmcgaW50byBhZGRyZXNzIGFuZCBkZXN0aW5hdGlvbiB0YWdcbiAgICovXG4gIHB1YmxpYyBnZXRBZGRyZXNzRGV0YWlscyhhZGRyZXNzOiBzdHJpbmcpOiBBZGRyZXNzIHtcbiAgICBjb25zdCBkZXN0aW5hdGlvbkRldGFpbHMgPSB1cmwucGFyc2UoYWRkcmVzcyk7XG4gICAgY29uc3QgZGVzdGluYXRpb25BZGRyZXNzID0gZGVzdGluYXRpb25EZXRhaWxzLnBhdGhuYW1lO1xuICAgIGlmICghZGVzdGluYXRpb25BZGRyZXNzIHx8ICF4cnBsLmlzVmFsaWRDbGFzc2ljQWRkcmVzcyhkZXN0aW5hdGlvbkFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihgZGVzdGluYXRpb24gYWRkcmVzcyBcIiR7ZGVzdGluYXRpb25BZGRyZXNzfVwiIGlzIG5vdCB2YWxpZGApO1xuICAgIH1cbiAgICAvLyB0aGVyZSBhcmUgbm8gb3RoZXIgcHJvcGVydGllcyBsaWtlIGRlc3RpbmF0aW9uIHRhZ3NcbiAgICBpZiAoZGVzdGluYXRpb25EZXRhaWxzLnBhdGhuYW1lID09PSBhZGRyZXNzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhZGRyZXNzOiBhZGRyZXNzLFxuICAgICAgICBkZXN0aW5hdGlvblRhZzogdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIWRlc3RpbmF0aW9uRGV0YWlscy5xdWVyeSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoJ25vIHF1ZXJ5IHBhcmFtcyBwcmVzZW50Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlEZXRhaWxzID0gcXVlcnlzdHJpbmcucGFyc2UoZGVzdGluYXRpb25EZXRhaWxzLnF1ZXJ5KTtcbiAgICBpZiAoIXF1ZXJ5RGV0YWlscy5kdCkge1xuICAgICAgLy8gaWYgdGhlcmUgYXJlIG1vcmUgcHJvcGVydGllcywgdGhlIHF1ZXJ5IGRldGFpbHMgbmVlZCB0byBjb250YWluIHRoZSBkZXN0aW5hdGlvbiB0YWcgcHJvcGVydHkuXG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcignZGVzdGluYXRpb24gdGFnIG1pc3NpbmcnKTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShxdWVyeURldGFpbHMuZHQpKSB7XG4gICAgICAvLyBpZiBxdWVyeURldGFpbHMuZHQgaXMgYW4gYXJyYXksIHRoYXQgbWVhbnMgZHQgd2FzIGdpdmVuIG11bHRpcGxlIHRpbWVzLCB3aGljaCBpcyBub3QgdmFsaWRcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKFxuICAgICAgICBgZGVzdGluYXRpb24gdGFnIGNhbiBhcHBlYXIgYXQgbW9zdCBvbmNlLCBidXQgJHtxdWVyeURldGFpbHMuZHQubGVuZ3RofSBkZXN0aW5hdGlvbiB0YWdzIHdlcmUgZm91bmRgXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZFRhZyA9IHBhcnNlSW50KHF1ZXJ5RGV0YWlscy5kdCwgMTApO1xuICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIocGFyc2VkVGFnKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoJ2ludmFsaWQgZGVzdGluYXRpb24gdGFnJyk7XG4gICAgfVxuXG4gICAgaWYgKHBhcnNlZFRhZyA+IDB4ZmZmZmZmZmYgfHwgcGFyc2VkVGFnIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoJ2Rlc3RpbmF0aW9uIHRhZyBvdXQgb2YgcmFuZ2UnKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWRkcmVzczogZGVzdGluYXRpb25BZGRyZXNzLFxuICAgICAgZGVzdGluYXRpb25UYWc6IHBhcnNlZFRhZyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGZ1bGwsIG5vcm1hbGl6ZWQgYWRkcmVzcyBmcm9tIGFuIGFkZHJlc3MgYW5kIGRlc3RpbmF0aW9uIHRhZ1xuICAgKi9cbiAgcHVibGljIG5vcm1hbGl6ZUFkZHJlc3MoeyBhZGRyZXNzLCBkZXN0aW5hdGlvblRhZyB9OiBBZGRyZXNzKTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGFkZHJlc3MgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcignaW52YWxpZCBhZGRyZXNzLCBleHBlY3RlZCBzdHJpbmcnKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkZXN0aW5hdGlvblRhZyA9PT0gJ3VuZGVmaW5lZCcgfHwgZGVzdGluYXRpb25UYWcgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBhZGRyZXNzO1xuICAgIH1cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoZGVzdGluYXRpb25UYWcpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcignaW52YWxpZCBkZXN0aW5hdGlvbiB0YWcsIGV4cGVjdGVkIGludGVnZXInKTtcbiAgICB9XG4gICAgaWYgKGRlc3RpbmF0aW9uVGFnID4gMHhmZmZmZmZmZiB8fCBkZXN0aW5hdGlvblRhZyA8IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKCdkZXN0aW5hdGlvbiB0YWcgb3V0IG9mIHJhbmdlJyk7XG4gICAgfVxuICAgIHJldHVybiBgJHthZGRyZXNzfT9kdD0ke2Rlc3RpbmF0aW9uVGFnfWA7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIG1lc3NhZ2UgaGV4IGVuY29kZWQgc3RyaW5nXG4gICAqIEBwYXJhbSBwcml2YXRlS2V5XG4gICAqIHJldHVybiBoZXggZW5jb2RlZCBzaWduYXR1cmUgc3RyaW5nLCB0aHJvd3MgaWYgYW55IG9mIHRoZSBpbnB1dHMgYXJlIGludmFsaWRcbiAgICovXG4gIHB1YmxpYyBzaWduU3RyaW5nKG1lc3NhZ2U6IHN0cmluZywgcHJpdmF0ZUtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZEhleChtZXNzYWdlKSkge1xuICAgICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ21lc3NhZ2UgbXVzdCBiZSBhIGhleCBlbmNvZGVkIHN0cmluZycpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNWYWxpZFByaXZhdGVLZXkocHJpdmF0ZUtleSkpIHtcbiAgICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdpbnZhbGlkIHByaXZhdGUga2V5Jyk7XG4gICAgfVxuICAgIHJldHVybiByaXBwbGVLZXlwYWlycy5zaWduKG1lc3NhZ2UsIHByaXZhdGVLZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBtZXNzYWdlIGhleCBlbmNvZGVkIHN0cmluZ1xuICAgKiBAcGFyYW0gc2lnbmF0dXJlIGhleCBlbmNvb2RlZCBzaWduYXR1cmUgc3RyaW5nXG4gICAqIEBwYXJhbSBwdWJsaWNLZXlcbiAgICogcmV0dXJuIGJvb2xlYW4sIHRocm93cyBpZiBhbnkgb2YgdGhlIGlucHV0cyBhcmUgaW52YWxpZFxuICAgKi9cbiAgcHVibGljIHZlcmlmeVNpZ25hdHVyZShtZXNzYWdlOiBzdHJpbmcsIHNpZ25hdHVyZTogc3RyaW5nLCBwdWJsaWNLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkSGV4KG1lc3NhZ2UpKSB7XG4gICAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignbWVzc2FnZSBtdXN0IGJlIGEgaGV4IGVuY29kZWQgc3RyaW5nJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1ZhbGlkU2lnbmF0dXJlKHNpZ25hdHVyZSkpIHtcbiAgICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdpbnZhbGlkIHNpZ25hdHVyZScpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNWYWxpZFB1YmxpY0tleShwdWJsaWNLZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignaW52YWxpZCBwdWJsaWMga2V5Jyk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmlwcGxlS2V5cGFpcnMudmVyaWZ5KG1lc3NhZ2UsIHNpZ25hdHVyZSwgcHVibGljS2V5KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSByYXcgdHJhbnNhY3Rpb24gaGFzIGEgdmFsaWQgZm9ybWF0IGluIHRoZSBibG9ja2NoYWluIGNvbnRleHQsIHRocm93IG90aGVyd2lzZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJhd1RyYW5zYWN0aW9uIC0gVHJhbnNhY3Rpb24gaW4gaGV4IHN0cmluZyBmb3JtYXRcbiAgICovXG4gIHB1YmxpYyB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXJhd1RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgcmF3IHRyYW5zYWN0aW9uOiBVbmRlZmluZWQnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRIZXgocmF3VHJhbnNhY3Rpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgcmF3IHRyYW5zYWN0aW9uOiBIZXggc3RyaW5nIGV4cGVjdGVkJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1ZhbGlkUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiByYXcgdHJhbnNhY3Rpb24gY2FuIGJlIGRlc2VyaWFsaXplZFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmF3VHJhbnNhY3Rpb24gLSB0cmFuc2FjdGlvbiBpbiBiYXNlNjQgc3RyaW5nIGZvcm1hdFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB0aGUgdmFsaWRhdGlvbiByZXN1bHRcbiAgICovXG4gIHB1YmxpYyBpc1ZhbGlkUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBqc29uVHggPSB4cnBsLmRlY29kZShyYXdUcmFuc2FjdGlvbik7XG4gICAgICB4cnBsLnZhbGlkYXRlKGpzb25UeCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlQWNjb3VudFNldEZsYWcoc2V0RmxhZzogbnVtYmVyKSB7XG4gICAgaWYgKHR5cGVvZiBzZXRGbGFnICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoYHNldEZsYWcgJHtzZXRGbGFnfSBpcyBub3QgdmFsaWRgKTtcbiAgICB9XG4gICAgaWYgKCFWQUxJRF9BQ0NPVU5UX1NFVF9GTEFHUy5pbmNsdWRlcyhzZXRGbGFnKSkge1xuICAgICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoYHNldEZsYWcgJHtzZXRGbGFnfSBpcyBub3QgYSB2YWxpZCBhY2NvdW50IHNldCBmbGFnYCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlU2lnbmVyKHNpZ25lcjogU2lnbmVyRGV0YWlscyk6IHZvaWQge1xuICAgIGlmICghc2lnbmVyLmFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdzaWduZXIgbXVzdCBoYXZlIGFuIGFkZHJlc3MnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKHNpZ25lci5hZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoYHNpZ25lciBhZGRyZXNzICR7c2lnbmVyLmFkZHJlc3N9IGlzIGludmFsaWRgKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzaWduZXIud2VpZ2h0ICE9PSAnbnVtYmVyJyB8fCBzaWduZXIud2VpZ2h0IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoYHNpZ25lciB3ZWlnaHQgJHtzaWduZXIud2VpZ2h0fSBpcyBub3QgdmFsaWRgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgcHJvdmlkZWQgYGFtb3VudGAgaXMgZm9yIGEgdG9rZW4gcGF5bWVudFxuICAgKi9cbiAgcHVibGljIGlzSXNzdWVkQ3VycmVuY3lBbW91bnQoYW1vdW50OiBBbW91bnQpOiBhbW91bnQgaXMgSXNzdWVkQ3VycmVuY3lBbW91bnQge1xuICAgIHJldHVybiAoXG4gICAgICAhIWFtb3VudCAmJlxuICAgICAgdHlwZW9mIGFtb3VudCA9PT0gJ29iamVjdCcgJiZcbiAgICAgIHR5cGVvZiBhbW91bnQuY3VycmVuY3kgPT09ICdzdHJpbmcnICYmXG4gICAgICB0eXBlb2YgYW1vdW50Lmlzc3VlciA9PT0gJ3N0cmluZycgJiZcbiAgICAgIHR5cGVvZiBhbW91bnQudmFsdWUgPT09ICdzdHJpbmcnXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGFzc29jaWF0ZWQgWFJQIEN1cnJlbmN5IGRldGFpbHMgZnJvbSB0b2tlbiBuYW1lLiBUaHJvd3MgYW4gZXJyb3IgaWYgdG9rZW4gaXMgdW5zdXBwb3J0ZWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRva2VuTmFtZSAtIFRoZSB0b2tlbiBuYW1lXG4gICAqL1xuICBwdWJsaWMgZ2V0WHJwQ3VycmVuY3lGcm9tVG9rZW5OYW1lKHRva2VuTmFtZTogc3RyaW5nKTogeHJwbC5Jc3N1ZWRDdXJyZW5jeSB7XG4gICAgaWYgKCFjb2lucy5oYXModG9rZW5OYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkVG9rZW5FcnJvcihgJHt0b2tlbk5hbWV9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICB9XG4gICAgY29uc3QgdG9rZW4gPSBjb2lucy5nZXQodG9rZW5OYW1lKTtcbiAgICBpZiAoIXRva2VuLmlzVG9rZW4gfHwgISh0b2tlbiBpbnN0YW5jZW9mIFhycENvaW4pKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRUb2tlbkVycm9yKGAke3Rva2VuTmFtZX0gaXMgbm90IGFuIFhSUCB0b2tlbmApO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVuY3k6IHRva2VuLmN1cnJlbmN5Q29kZSxcbiAgICAgIGlzc3VlcjogdG9rZW4uaXNzdWVyQWRkcmVzcyxcbiAgICB9O1xuICB9XG59XG5cbmNvbnN0IHV0aWxzID0gbmV3IFV0aWxzKCk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0aWxzO1xuIl19
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { TransactionType } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
|
+
import { SignerEntry } from 'xrpl/dist/npm/models/common';
|
|
4
|
+
import { SignerDetails } from './iface';
|
|
5
|
+
import { Transaction } from './transaction';
|
|
6
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
7
|
+
export declare class WalletInitializationBuilder extends TransactionBuilder {
|
|
8
|
+
protected _signerQuorum: number;
|
|
9
|
+
protected _signerEntries: SignerEntry[];
|
|
10
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
11
|
+
protected get transactionType(): TransactionType;
|
|
12
|
+
protected get xrpTransactionType(): 'SignerListSet';
|
|
13
|
+
signerQuorum(quorum: number): TransactionBuilder;
|
|
14
|
+
signer(signer: SignerDetails): TransactionBuilder;
|
|
15
|
+
initBuilder(tx: Transaction): void;
|
|
16
|
+
/** @inheritdoc */
|
|
17
|
+
protected buildImplementation(): Promise<Transaction>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=walletInitializationBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walletInitializationBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/walletInitializationBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,qBAAa,2BAA4B,SAAQ,kBAAkB;IACjE,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,cAAc,EAAE,WAAW,EAAE,CAAM;gBACjC,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED,SAAS,KAAK,kBAAkB,IAAI,eAAe,CAElD;IAED,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB;IAQhD,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,kBAAkB;IAWjD,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAkBlC,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;CAuB5D"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.WalletInitializationBuilder = void 0;
|
|
7
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
8
|
+
const constants_1 = require("./constants");
|
|
9
|
+
const transactionBuilder_1 = require("./transactionBuilder");
|
|
10
|
+
const utils_1 = __importDefault(require("./utils"));
|
|
11
|
+
class WalletInitializationBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
12
|
+
constructor(_coinConfig) {
|
|
13
|
+
super(_coinConfig);
|
|
14
|
+
this._signerEntries = [];
|
|
15
|
+
}
|
|
16
|
+
get transactionType() {
|
|
17
|
+
return sdk_core_1.TransactionType.WalletInitialization;
|
|
18
|
+
}
|
|
19
|
+
get xrpTransactionType() {
|
|
20
|
+
return 'SignerListSet';
|
|
21
|
+
}
|
|
22
|
+
signerQuorum(quorum) {
|
|
23
|
+
if (typeof quorum !== 'number' || quorum < 1) {
|
|
24
|
+
throw new Error(`quorum must be a valid number greater than 0, got: ${quorum}`);
|
|
25
|
+
}
|
|
26
|
+
this._signerQuorum = quorum;
|
|
27
|
+
return this;
|
|
28
|
+
}
|
|
29
|
+
signer(signer) {
|
|
30
|
+
if (this._signerEntries.length > constants_1.MAX_SIGNERS) {
|
|
31
|
+
throw new sdk_core_1.BuildTransactionError(`Cannot have more than ${constants_1.MAX_SIGNERS} signers`);
|
|
32
|
+
}
|
|
33
|
+
utils_1.default.validateSigner(signer);
|
|
34
|
+
this._signerEntries.push({
|
|
35
|
+
SignerEntry: { Account: signer.address, SignerWeight: signer.weight },
|
|
36
|
+
});
|
|
37
|
+
return this;
|
|
38
|
+
}
|
|
39
|
+
initBuilder(tx) {
|
|
40
|
+
super.initBuilder(tx);
|
|
41
|
+
const { signerEntries, signerQuorum } = tx.toJson();
|
|
42
|
+
if (signerQuorum) {
|
|
43
|
+
this.signerQuorum(signerQuorum);
|
|
44
|
+
}
|
|
45
|
+
if (signerEntries === null || signerEntries === void 0 ? void 0 : signerEntries.length) {
|
|
46
|
+
signerEntries.forEach((signer) => this.signer({
|
|
47
|
+
address: signer.SignerEntry.Account,
|
|
48
|
+
weight: signer.SignerEntry.SignerWeight,
|
|
49
|
+
}));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** @inheritdoc */
|
|
53
|
+
async buildImplementation() {
|
|
54
|
+
if (!this._sender) {
|
|
55
|
+
throw new sdk_core_1.BuildTransactionError('Sender must be set before building the transaction');
|
|
56
|
+
}
|
|
57
|
+
if (!this._signerQuorum || this._signerQuorum < constants_1.MIN_SIGNER_QUORUM) {
|
|
58
|
+
throw new sdk_core_1.BuildTransactionError('Signer quorum must be set before building the transaction');
|
|
59
|
+
}
|
|
60
|
+
if (!this._signerEntries) {
|
|
61
|
+
throw new sdk_core_1.BuildTransactionError('Signers must be set before building the transaction');
|
|
62
|
+
}
|
|
63
|
+
if (this._signerEntries.length < constants_1.MIN_SIGNERS || this._signerEntries.length > constants_1.MAX_SIGNERS) {
|
|
64
|
+
throw new sdk_core_1.BuildTransactionError(`Signers must be between ${constants_1.MIN_SIGNERS} and ${constants_1.MAX_SIGNERS}`);
|
|
65
|
+
}
|
|
66
|
+
this._specificFields = {
|
|
67
|
+
TransactionType: this.xrpTransactionType,
|
|
68
|
+
Account: this._sender,
|
|
69
|
+
SignerQuorum: this._signerQuorum,
|
|
70
|
+
SignerEntries: this._signerEntries,
|
|
71
|
+
};
|
|
72
|
+
return await super.buildImplementation();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.WalletInitializationBuilder = WalletInitializationBuilder;
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi93YWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBQThFO0FBRzlFLDJDQUEwRTtBQUcxRSw2REFBMEQ7QUFDMUQsb0RBQTRCO0FBRTVCLE1BQWEsMkJBQTRCLFNBQVEsdUNBQWtCO0lBR2pFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRlgsbUJBQWMsR0FBa0IsRUFBRSxDQUFDO0lBRzdDLENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLG9CQUFvQixDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFjLGtCQUFrQjtRQUM5QixPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQWM7UUFDekIsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQ2pGO1FBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQXFCO1FBQzFCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsdUJBQVcsRUFBRTtZQUM1QyxNQUFNLElBQUksZ0NBQXFCLENBQUMseUJBQXlCLHVCQUFXLFVBQVUsQ0FBQyxDQUFDO1NBQ2pGO1FBQ0QsZUFBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztZQUN2QixXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRTtTQUN0RSxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxXQUFXLENBQUMsRUFBZTtRQUN6QixLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXRCLE1BQU0sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BELElBQUksWUFBWSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDakM7UUFFRCxJQUFJLGFBQWEsYUFBYixhQUFhLHVCQUFiLGFBQWEsQ0FBRSxNQUFNLEVBQUU7WUFDekIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQy9CLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ1YsT0FBTyxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTztnQkFDbkMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsWUFBWTthQUN4QyxDQUFDLENBQ0gsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNSLEtBQUssQ0FBQyxtQkFBbUI7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDakIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLG9EQUFvRCxDQUFDLENBQUM7U0FDdkY7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLDZCQUFpQixFQUFFO1lBQ2pFLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1NBQzlGO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDeEIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLHFEQUFxRCxDQUFDLENBQUM7U0FDeEY7UUFFRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLHVCQUFXLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsdUJBQVcsRUFBRTtZQUN4RixNQUFNLElBQUksZ0NBQXFCLENBQUMsMkJBQTJCLHVCQUFXLFFBQVEsdUJBQVcsRUFBRSxDQUFDLENBQUM7U0FDOUY7UUFFRCxJQUFJLENBQUMsZUFBZSxHQUFHO1lBQ3JCLGVBQWUsRUFBRSxJQUFJLENBQUMsa0JBQWtCO1lBQ3hDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDaEMsYUFBYSxFQUFFLElBQUksQ0FBQyxjQUFjO1NBQ25DLENBQUM7UUFDRixPQUFPLE1BQU0sS0FBSyxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDM0MsQ0FBQztDQUNGO0FBNUVELGtFQTRFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgU2lnbmVyRW50cnkgfSBmcm9tICd4cnBsL2Rpc3QvbnBtL21vZGVscy9jb21tb24nO1xuaW1wb3J0IHsgTUFYX1NJR05FUlMsIE1JTl9TSUdORVJfUVVPUlVNLCBNSU5fU0lHTkVSUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IFNpZ25lckRldGFpbHMgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX3NpZ25lclF1b3J1bTogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX3NpZ25lckVudHJpZXM6IFNpZ25lckVudHJ5W10gPSBbXTtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLldhbGxldEluaXRpYWxpemF0aW9uO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB4cnBUcmFuc2FjdGlvblR5cGUoKTogJ1NpZ25lckxpc3RTZXQnIHtcbiAgICByZXR1cm4gJ1NpZ25lckxpc3RTZXQnO1xuICB9XG5cbiAgc2lnbmVyUXVvcnVtKHF1b3J1bTogbnVtYmVyKTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICBpZiAodHlwZW9mIHF1b3J1bSAhPT0gJ251bWJlcicgfHwgcXVvcnVtIDwgMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBxdW9ydW0gbXVzdCBiZSBhIHZhbGlkIG51bWJlciBncmVhdGVyIHRoYW4gMCwgZ290OiAke3F1b3J1bX1gKTtcbiAgICB9XG4gICAgdGhpcy5fc2lnbmVyUXVvcnVtID0gcXVvcnVtO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2lnbmVyKHNpZ25lcjogU2lnbmVyRGV0YWlscyk6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgaWYgKHRoaXMuX3NpZ25lckVudHJpZXMubGVuZ3RoID4gTUFYX1NJR05FUlMpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYENhbm5vdCBoYXZlIG1vcmUgdGhhbiAke01BWF9TSUdORVJTfSBzaWduZXJzYCk7XG4gICAgfVxuICAgIHV0aWxzLnZhbGlkYXRlU2lnbmVyKHNpZ25lcik7XG4gICAgdGhpcy5fc2lnbmVyRW50cmllcy5wdXNoKHtcbiAgICAgIFNpZ25lckVudHJ5OiB7IEFjY291bnQ6IHNpZ25lci5hZGRyZXNzLCBTaWduZXJXZWlnaHQ6IHNpZ25lci53ZWlnaHQgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHN1cGVyLmluaXRCdWlsZGVyKHR4KTtcblxuICAgIGNvbnN0IHsgc2lnbmVyRW50cmllcywgc2lnbmVyUXVvcnVtIH0gPSB0eC50b0pzb24oKTtcbiAgICBpZiAoc2lnbmVyUXVvcnVtKSB7XG4gICAgICB0aGlzLnNpZ25lclF1b3J1bShzaWduZXJRdW9ydW0pO1xuICAgIH1cblxuICAgIGlmIChzaWduZXJFbnRyaWVzPy5sZW5ndGgpIHtcbiAgICAgIHNpZ25lckVudHJpZXMuZm9yRWFjaCgoc2lnbmVyKSA9PlxuICAgICAgICB0aGlzLnNpZ25lcih7XG4gICAgICAgICAgYWRkcmVzczogc2lnbmVyLlNpZ25lckVudHJ5LkFjY291bnQsXG4gICAgICAgICAgd2VpZ2h0OiBzaWduZXIuU2lnbmVyRW50cnkuU2lnbmVyV2VpZ2h0LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGlmICghdGhpcy5fc2VuZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdTZW5kZXIgbXVzdCBiZSBzZXQgYmVmb3JlIGJ1aWxkaW5nIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3NpZ25lclF1b3J1bSB8fCB0aGlzLl9zaWduZXJRdW9ydW0gPCBNSU5fU0lHTkVSX1FVT1JVTSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignU2lnbmVyIHF1b3J1bSBtdXN0IGJlIHNldCBiZWZvcmUgYnVpbGRpbmcgdGhlIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fc2lnbmVyRW50cmllcykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignU2lnbmVycyBtdXN0IGJlIHNldCBiZWZvcmUgYnVpbGRpbmcgdGhlIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3NpZ25lckVudHJpZXMubGVuZ3RoIDwgTUlOX1NJR05FUlMgfHwgdGhpcy5fc2lnbmVyRW50cmllcy5sZW5ndGggPiBNQVhfU0lHTkVSUykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgU2lnbmVycyBtdXN0IGJlIGJldHdlZW4gJHtNSU5fU0lHTkVSU30gYW5kICR7TUFYX1NJR05FUlN9YCk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3BlY2lmaWNGaWVsZHMgPSB7XG4gICAgICBUcmFuc2FjdGlvblR5cGU6IHRoaXMueHJwVHJhbnNhY3Rpb25UeXBlLFxuICAgICAgQWNjb3VudDogdGhpcy5fc2VuZGVyLFxuICAgICAgU2lnbmVyUXVvcnVtOiB0aGlzLl9zaWduZXJRdW9ydW0sXG4gICAgICBTaWduZXJFbnRyaWVzOiB0aGlzLl9zaWduZXJFbnRyaWVzLFxuICAgIH07XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLmJ1aWxkSW1wbGVtZW50YXRpb24oKTtcbiAgfVxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAKjD,eAAO,MAAM,QAAQ,QAAS,SAAS,KAAG,IAMzC,CAAC"}
|
package/dist/src/register.js
CHANGED
|
@@ -3,9 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.register = void 0;
|
|
4
4
|
const txrp_1 = require("./txrp");
|
|
5
5
|
const xrp_1 = require("./xrp");
|
|
6
|
+
const xrpToken_1 = require("./xrpToken");
|
|
6
7
|
const register = (sdk) => {
|
|
7
8
|
sdk.register('xrp', xrp_1.Xrp.createInstance);
|
|
8
9
|
sdk.register('txrp', txrp_1.Txrp.createInstance);
|
|
10
|
+
xrpToken_1.XrpToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
|
|
11
|
+
sdk.register(name, coinConstructor);
|
|
12
|
+
});
|
|
9
13
|
};
|
|
10
14
|
exports.register = register;
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsaUNBQThCO0FBQzlCLCtCQUE0QjtBQUM1Qix5Q0FBc0M7QUFFL0IsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFjLEVBQVEsRUFBRTtJQUMvQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxTQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDeEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsV0FBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFDLG1CQUFRLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFO1FBQ3ZFLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBTlcsUUFBQSxRQUFRLFlBTW5CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHhycCB9IGZyb20gJy4vdHhycCc7XG5pbXBvcnQgeyBYcnAgfSBmcm9tICcuL3hycCc7XG5pbXBvcnQgeyBYcnBUb2tlbiB9IGZyb20gJy4veHJwVG9rZW4nO1xuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXIgPSAoc2RrOiBCaXRHb0Jhc2UpOiB2b2lkID0+IHtcbiAgc2RrLnJlZ2lzdGVyKCd4cnAnLCBYcnAuY3JlYXRlSW5zdGFuY2UpO1xuICBzZGsucmVnaXN0ZXIoJ3R4cnAnLCBUeHJwLmNyZWF0ZUluc3RhbmNlKTtcbiAgWHJwVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoKS5mb3JFYWNoKCh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgc2RrLnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gIH0pO1xufTtcbiJdfQ==
|