@bitgo/sdk-coin-xrp 2.1.19 → 3.0.0

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 CHANGED
@@ -3,6 +3,35 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [3.0.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-xrp@2.1.20...@bitgo/sdk-coin-xrp@3.0.0) (2024-10-08)
7
+
8
+ ### Build System
9
+
10
+ - **sdk-coin-xrp:** update ripple libs ([be7b887](https://github.com/BitGo/BitGoJS/commit/be7b887bf6f6d1c092fa0557165a8547191b765c))
11
+
12
+ ### Features
13
+
14
+ - **sdk-coin-xrp:** add Utils & KeyPair ([e92eec5](https://github.com/BitGo/BitGoJS/commit/e92eec5bd50626b7ca8f672b4ba6622b33ae8778))
15
+ - **sdk-coin-xrp:** add xrpToken skeleton ([441ec50](https://github.com/BitGo/BitGoJS/commit/441ec50e96675b7de550928e1192b37f4c9ef05c))
16
+
17
+ ### BREAKING CHANGES
18
+
19
+ - **sdk-coin-xrp:** Move following functions from `XRP` to `Utils`,
20
+
21
+ * `getAddressDetails`
22
+ * `normalizeAddress`
23
+
24
+ - **sdk-coin-xrp:** explainTransaction for XRP transactions now computes
25
+ a different transaction hash than previous versions. This is because
26
+ xrpl 2.x uses different hash prefixes for computing signed and
27
+ unsigned transaction hashes
28
+
29
+ Ticket: WIN-3541
30
+
31
+ ## [2.1.20](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-xrp@2.1.19...@bitgo/sdk-coin-xrp@2.1.20) (2024-10-04)
32
+
33
+ **Note:** Version bump only for package @bitgo/sdk-coin-xrp
34
+
6
35
  ## [2.1.19](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-xrp@2.1.18...@bitgo/sdk-coin-xrp@2.1.19) (2024-09-24)
7
36
 
8
37
  **Note:** Version bump only for package @bitgo/sdk-coin-xrp
@@ -1,4 +1,7 @@
1
1
  export * from './xrp';
2
2
  export * from './txrp';
3
3
  export * from './register';
4
+ export * from './lib/iface';
5
+ export * from './lib/utils';
6
+ export * from './xrpToken';
4
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
package/dist/src/index.js CHANGED
@@ -17,4 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./xrp"), exports);
18
18
  __exportStar(require("./txrp"), exports);
19
19
  __exportStar(require("./register"), exports);
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHdDQUFzQjtBQUN0Qix5Q0FBdUI7QUFDdkIsNkNBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi94cnAnO1xuZXhwb3J0ICogZnJvbSAnLi90eHJwJztcbmV4cG9ydCAqIGZyb20gJy4vcmVnaXN0ZXInO1xuIl19
20
+ __exportStar(require("./lib/iface"), exports);
21
+ __exportStar(require("./lib/utils"), exports);
22
+ __exportStar(require("./xrpToken"), exports);
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHdDQUFzQjtBQUN0Qix5Q0FBdUI7QUFDdkIsNkNBQTJCO0FBQzNCLDhDQUE0QjtBQUM1Qiw4Q0FBNEI7QUFDNUIsNkNBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi94cnAnO1xuZXhwb3J0ICogZnJvbSAnLi90eHJwJztcbmV4cG9ydCAqIGZyb20gJy4vcmVnaXN0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaWZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi94cnBUb2tlbic7XG4iXX0=
@@ -0,0 +1,54 @@
1
+ import { InitiateRecoveryOptions as BaseInitiateRecoveryOptions, SignTransactionOptions as BaseSignTransactionOptions, VerifyAddressOptions as BaseVerifyAddressOptions, TransactionExplanation, TransactionPrebuild } from '@bitgo/sdk-core';
2
+ export interface Address {
3
+ address: string;
4
+ destinationTag?: number;
5
+ }
6
+ export interface FeeInfo {
7
+ date: string;
8
+ height: number;
9
+ baseReserve: string;
10
+ baseFee: string;
11
+ }
12
+ export interface SignTransactionOptions extends BaseSignTransactionOptions {
13
+ txPrebuild: TransactionPrebuild;
14
+ prv: string;
15
+ isLastSignature?: boolean;
16
+ }
17
+ export interface ExplainTransactionOptions {
18
+ txHex?: string;
19
+ halfSigned?: {
20
+ txHex: string;
21
+ };
22
+ }
23
+ export interface VerifyAddressOptions extends BaseVerifyAddressOptions {
24
+ rootAddress: string;
25
+ }
26
+ export interface RecoveryInfo extends TransactionExplanation {
27
+ txHex: string;
28
+ backupKey?: string;
29
+ coin?: string;
30
+ }
31
+ export interface RecoveryTransaction {
32
+ txHex: string;
33
+ }
34
+ export interface InitiateRecoveryOptions extends BaseInitiateRecoveryOptions {
35
+ krsProvider?: string;
36
+ }
37
+ export interface RecoveryOptions {
38
+ backupKey: string;
39
+ userKey: string;
40
+ rootAddress: string;
41
+ recoveryDestination: string;
42
+ bitgoKey?: string;
43
+ walletPassphrase: string;
44
+ krsProvider?: string;
45
+ }
46
+ export interface HalfSignedTransaction {
47
+ halfSigned: {
48
+ txHex: string;
49
+ };
50
+ }
51
+ export interface SupplementGenerateWalletOptions {
52
+ rootPrivateKey?: string;
53
+ }
54
+ //# sourceMappingURL=iface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iface.d.ts","sourceRoot":"","sources":["../../../src/lib/iface.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,IAAI,2BAA2B,EACtD,sBAAsB,IAAI,0BAA0B,EACpD,oBAAoB,IAAI,wBAAwB,EAChD,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAuB,SAAQ,0BAA0B;IACxE,UAAU,EAAE,mBAAmB,CAAC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,oBAAqB,SAAQ,wBAAwB;IACpE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAa,SAAQ,sBAAsB;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAwB,SAAQ,2BAA2B;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,+BAA+B;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2lmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbml0aWF0ZVJlY292ZXJ5T3B0aW9ucyBhcyBCYXNlSW5pdGlhdGVSZWNvdmVyeU9wdGlvbnMsXG4gIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMgYXMgQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFZlcmlmeUFkZHJlc3NPcHRpb25zIGFzIEJhc2VWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbiAgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbiAgVHJhbnNhY3Rpb25QcmVidWlsZCxcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBBZGRyZXNzIHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBkZXN0aW5hdGlvblRhZz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGZWVJbmZvIHtcbiAgZGF0ZTogc3RyaW5nO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgYmFzZVJlc2VydmU6IHN0cmluZztcbiAgYmFzZUZlZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMgZXh0ZW5kcyBCYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ7XG4gIHBydjogc3RyaW5nO1xuICBpc0xhc3RTaWduYXR1cmU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnMge1xuICB0eEhleD86IHN0cmluZztcbiAgaGFsZlNpZ25lZD86IHtcbiAgICB0eEhleDogc3RyaW5nOyAvLyB0eEhleCBpcyBwb29ybHkgbmFtZWQgaGVyZTsgaXQgaXMganVzdCBhIHdyYXBwZWQgSlNPTiBvYmplY3RcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlBZGRyZXNzT3B0aW9ucyBleHRlbmRzIEJhc2VWZXJpZnlBZGRyZXNzT3B0aW9ucyB7XG4gIHJvb3RBZGRyZXNzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3ZlcnlJbmZvIGV4dGVuZHMgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gIHR4SGV4OiBzdHJpbmc7XG4gIGJhY2t1cEtleT86IHN0cmluZztcbiAgY29pbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWNvdmVyeVRyYW5zYWN0aW9uIHtcbiAgdHhIZXg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbml0aWF0ZVJlY292ZXJ5T3B0aW9ucyBleHRlbmRzIEJhc2VJbml0aWF0ZVJlY292ZXJ5T3B0aW9ucyB7XG4gIGtyc1Byb3ZpZGVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY292ZXJ5T3B0aW9ucyB7XG4gIGJhY2t1cEtleTogc3RyaW5nO1xuICB1c2VyS2V5OiBzdHJpbmc7XG4gIHJvb3RBZGRyZXNzOiBzdHJpbmc7XG4gIHJlY292ZXJ5RGVzdGluYXRpb246IHN0cmluZztcbiAgYml0Z29LZXk/OiBzdHJpbmc7XG4gIHdhbGxldFBhc3NwaHJhc2U6IHN0cmluZztcbiAga3JzUHJvdmlkZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFsZlNpZ25lZFRyYW5zYWN0aW9uIHtcbiAgaGFsZlNpZ25lZDoge1xuICAgIHR4SGV4OiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0T3B0aW9ucyB7XG4gIHJvb3RQcml2YXRlS2V5Pzogc3RyaW5nO1xufVxuIl19
@@ -0,0 +1,34 @@
1
+ /// <reference types="node" />
2
+ import { DefaultKeys, KeyPairOptions, Secp256k1ExtendedKeyPair } from '@bitgo/sdk-core';
3
+ /**
4
+ * XRP keys and address management.
5
+ */
6
+ export declare class KeyPair extends Secp256k1ExtendedKeyPair {
7
+ /**
8
+ * Public constructor. By default, creates a key pair with a random master seed.
9
+ *
10
+ * @param {KeyPairOptions} source Either a master seed, a private key, or a public key
11
+ */
12
+ constructor(source?: KeyPairOptions);
13
+ /** @inheritdoc */
14
+ getKeys(): DefaultKeys;
15
+ /** @inheritdoc */
16
+ getAddress(): string;
17
+ /**
18
+ * Generates a signature for an arbitrary string with the current private key using keccak256
19
+ * hashing algorithm. Throws if there is no private key.
20
+ *
21
+ * @param {string} message to produce a signature for
22
+ * @returns {Buffer} The signature as a buffer
23
+ */
24
+ signMessage(message: string): Buffer;
25
+ /**
26
+ * Verifies a message signature using the current public key.
27
+ *
28
+ * @param {string} message signed
29
+ * @param {Buffer} signature to verify
30
+ * @returns {boolean} True if the message was signed with the current key pair
31
+ */
32
+ verifySignature(message: string, signature: Buffer): boolean;
33
+ }
34
+ //# sourceMappingURL=keyPair.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyPair.d.ts","sourceRoot":"","sources":["../../../src/lib/keyPair.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,WAAW,EAIX,cAAc,EACd,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AAQzB;;GAEG;AACH,qBAAa,OAAQ,SAAQ,wBAAwB;IACnD;;;;OAIG;gBACS,MAAM,CAAC,EAAE,cAAc;IAoBnC,kBAAkB;IAClB,OAAO,IAAI,WAAW;IAOtB,kBAAkB;IAClB,UAAU,IAAI,MAAM;IAIpB;;;;;;OAMG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAUpC;;;;;;OAMG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAK7D"}
@@ -0,0 +1,109 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.KeyPair = void 0;
30
+ const sdk_core_1 = require("@bitgo/sdk-core");
31
+ const utxo_lib_1 = require("@bitgo/utxo-lib");
32
+ const crypto_1 = require("crypto");
33
+ const xrpl = __importStar(require("xrpl"));
34
+ const utils_1 = __importDefault(require("./utils"));
35
+ const DEFAULT_SEED_SIZE_BYTES = 32;
36
+ /**
37
+ * XRP keys and address management.
38
+ */
39
+ class KeyPair extends sdk_core_1.Secp256k1ExtendedKeyPair {
40
+ /**
41
+ * Public constructor. By default, creates a key pair with a random master seed.
42
+ *
43
+ * @param {KeyPairOptions} source Either a master seed, a private key, or a public key
44
+ */
45
+ constructor(source) {
46
+ super(source);
47
+ if (!source) {
48
+ const seed = (0, crypto_1.randomBytes)(DEFAULT_SEED_SIZE_BYTES);
49
+ this.hdNode = utxo_lib_1.bip32.fromSeed(seed);
50
+ }
51
+ else if ((0, sdk_core_1.isSeed)(source)) {
52
+ this.hdNode = utxo_lib_1.bip32.fromSeed(source.seed);
53
+ }
54
+ else if ((0, sdk_core_1.isPrivateKey)(source)) {
55
+ super.recordKeysFromPrivateKey(source.prv);
56
+ }
57
+ else if ((0, sdk_core_1.isPublicKey)(source)) {
58
+ super.recordKeysFromPublicKey(source.pub);
59
+ }
60
+ else {
61
+ throw new Error('Invalid key pair options');
62
+ }
63
+ if (this.hdNode) {
64
+ this.keyPair = sdk_core_1.Secp256k1ExtendedKeyPair.toKeyPair(this.hdNode);
65
+ }
66
+ }
67
+ /** @inheritdoc */
68
+ getKeys() {
69
+ var _a;
70
+ return {
71
+ pub: this.getPublicKey({ compressed: true }).toString('hex'),
72
+ prv: (_a = this.getPrivateKey()) === null || _a === void 0 ? void 0 : _a.toString('hex'),
73
+ };
74
+ }
75
+ /** @inheritdoc */
76
+ getAddress() {
77
+ return xrpl.deriveAddress(this.getKeys().pub);
78
+ }
79
+ /**
80
+ * Generates a signature for an arbitrary string with the current private key using keccak256
81
+ * hashing algorithm. Throws if there is no private key.
82
+ *
83
+ * @param {string} message to produce a signature for
84
+ * @returns {Buffer} The signature as a buffer
85
+ */
86
+ signMessage(message) {
87
+ const messageToSign = Buffer.from(message).toString('hex');
88
+ const { prv } = this.getKeys();
89
+ if (!prv) {
90
+ throw new Error('Missing private key');
91
+ }
92
+ const signature = utils_1.default.signString(messageToSign, prv);
93
+ return Buffer.from(signature, 'hex');
94
+ }
95
+ /**
96
+ * Verifies a message signature using the current public key.
97
+ *
98
+ * @param {string} message signed
99
+ * @param {Buffer} signature to verify
100
+ * @returns {boolean} True if the message was signed with the current key pair
101
+ */
102
+ verifySignature(message, signature) {
103
+ const messageToVerify = Buffer.from(message).toString('hex');
104
+ const pubKey = this.getKeys().pub;
105
+ return utils_1.default.verifySignature(messageToVerify, pubKey, signature.toString('hex'));
106
+ }
107
+ }
108
+ exports.KeyPair = KeyPair;
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIva2V5UGFpci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQU95QjtBQUN6Qiw4Q0FBd0M7QUFDeEMsbUNBQXFDO0FBQ3JDLDJDQUE2QjtBQUM3QixvREFBNEI7QUFFNUIsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLENBQUM7QUFFbkM7O0dBRUc7QUFDSCxNQUFhLE9BQVEsU0FBUSxtQ0FBd0I7SUFDbkQ7Ozs7T0FJRztJQUNILFlBQVksTUFBdUI7UUFDakMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE1BQU0sSUFBSSxHQUFHLElBQUEsb0JBQVcsRUFBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxNQUFNLEdBQUcsZ0JBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEM7YUFBTSxJQUFJLElBQUEsaUJBQU0sRUFBQyxNQUFNLENBQUMsRUFBRTtZQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLGdCQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMzQzthQUFNLElBQUksSUFBQSx1QkFBWSxFQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQy9CLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDNUM7YUFBTSxJQUFJLElBQUEsc0JBQVcsRUFBQyxNQUFNLENBQUMsRUFBRTtZQUM5QixLQUFLLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzNDO2FBQU07WUFDTCxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7U0FDN0M7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLG1DQUF3QixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDaEU7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLE9BQU87O1FBQ0wsT0FBTztZQUNMLEdBQUcsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUM1RCxHQUFHLEVBQUUsTUFBQSxJQUFJLENBQUMsYUFBYSxFQUFFLDBDQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUM7U0FDM0MsQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFdBQVcsQ0FBQyxPQUFlO1FBQ3pCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNELE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNSLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUN4QztRQUNELE1BQU0sU0FBUyxHQUFHLGVBQUssQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGVBQWUsQ0FBQyxPQUFlLEVBQUUsU0FBaUI7UUFDaEQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUNsQyxPQUFPLGVBQUssQ0FBQyxlQUFlLENBQUMsZUFBZSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbkYsQ0FBQztDQUNGO0FBcEVELDBCQW9FQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERlZmF1bHRLZXlzLFxuICBpc1ByaXZhdGVLZXksXG4gIGlzUHVibGljS2V5LFxuICBpc1NlZWQsXG4gIEtleVBhaXJPcHRpb25zLFxuICBTZWNwMjU2azFFeHRlbmRlZEtleVBhaXIsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBiaXAzMiB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyB4cnBsIGZyb20gJ3hycGwnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBERUZBVUxUX1NFRURfU0laRV9CWVRFUyA9IDMyO1xuXG4vKipcbiAqIFhSUCBrZXlzIGFuZCBhZGRyZXNzIG1hbmFnZW1lbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBLZXlQYWlyIGV4dGVuZHMgU2VjcDI1NmsxRXh0ZW5kZWRLZXlQYWlyIHtcbiAgLyoqXG4gICAqIFB1YmxpYyBjb25zdHJ1Y3Rvci4gQnkgZGVmYXVsdCwgY3JlYXRlcyBhIGtleSBwYWlyIHdpdGggYSByYW5kb20gbWFzdGVyIHNlZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7S2V5UGFpck9wdGlvbnN9IHNvdXJjZSBFaXRoZXIgYSBtYXN0ZXIgc2VlZCwgYSBwcml2YXRlIGtleSwgb3IgYSBwdWJsaWMga2V5XG4gICAqL1xuICBjb25zdHJ1Y3Rvcihzb3VyY2U/OiBLZXlQYWlyT3B0aW9ucykge1xuICAgIHN1cGVyKHNvdXJjZSk7XG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIGNvbnN0IHNlZWQgPSByYW5kb21CeXRlcyhERUZBVUxUX1NFRURfU0laRV9CWVRFUyk7XG4gICAgICB0aGlzLmhkTm9kZSA9IGJpcDMyLmZyb21TZWVkKHNlZWQpO1xuICAgIH0gZWxzZSBpZiAoaXNTZWVkKHNvdXJjZSkpIHtcbiAgICAgIHRoaXMuaGROb2RlID0gYmlwMzIuZnJvbVNlZWQoc291cmNlLnNlZWQpO1xuICAgIH0gZWxzZSBpZiAoaXNQcml2YXRlS2V5KHNvdXJjZSkpIHtcbiAgICAgIHN1cGVyLnJlY29yZEtleXNGcm9tUHJpdmF0ZUtleShzb3VyY2UucHJ2KTtcbiAgICB9IGVsc2UgaWYgKGlzUHVibGljS2V5KHNvdXJjZSkpIHtcbiAgICAgIHN1cGVyLnJlY29yZEtleXNGcm9tUHVibGljS2V5KHNvdXJjZS5wdWIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQga2V5IHBhaXIgb3B0aW9ucycpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhkTm9kZSkge1xuICAgICAgdGhpcy5rZXlQYWlyID0gU2VjcDI1NmsxRXh0ZW5kZWRLZXlQYWlyLnRvS2V5UGFpcih0aGlzLmhkTm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldEtleXMoKTogRGVmYXVsdEtleXMge1xuICAgIHJldHVybiB7XG4gICAgICBwdWI6IHRoaXMuZ2V0UHVibGljS2V5KHsgY29tcHJlc3NlZDogdHJ1ZSB9KS50b1N0cmluZygnaGV4JyksXG4gICAgICBwcnY6IHRoaXMuZ2V0UHJpdmF0ZUtleSgpPy50b1N0cmluZygnaGV4JyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBnZXRBZGRyZXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHhycGwuZGVyaXZlQWRkcmVzcyh0aGlzLmdldEtleXMoKS5wdWIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIHNpZ25hdHVyZSBmb3IgYW4gYXJiaXRyYXJ5IHN0cmluZyB3aXRoIHRoZSBjdXJyZW50IHByaXZhdGUga2V5IHVzaW5nIGtlY2NhazI1NlxuICAgKiBoYXNoaW5nIGFsZ29yaXRobS4gVGhyb3dzIGlmIHRoZXJlIGlzIG5vIHByaXZhdGUga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSB0byBwcm9kdWNlIGEgc2lnbmF0dXJlIGZvclxuICAgKiBAcmV0dXJucyB7QnVmZmVyfSBUaGUgc2lnbmF0dXJlIGFzIGEgYnVmZmVyXG4gICAqL1xuICBzaWduTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpOiBCdWZmZXIge1xuICAgIGNvbnN0IG1lc3NhZ2VUb1NpZ24gPSBCdWZmZXIuZnJvbShtZXNzYWdlKS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgeyBwcnYgfSA9IHRoaXMuZ2V0S2V5cygpO1xuICAgIGlmICghcHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcHJpdmF0ZSBrZXknKTtcbiAgICB9XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gdXRpbHMuc2lnblN0cmluZyhtZXNzYWdlVG9TaWduLCBwcnYpO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShzaWduYXR1cmUsICdoZXgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBhIG1lc3NhZ2Ugc2lnbmF0dXJlIHVzaW5nIHRoZSBjdXJyZW50IHB1YmxpYyBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIHNpZ25lZFxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gc2lnbmF0dXJlIHRvIHZlcmlmeVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWVzc2FnZSB3YXMgc2lnbmVkIHdpdGggdGhlIGN1cnJlbnQga2V5IHBhaXJcbiAgICovXG4gIHZlcmlmeVNpZ25hdHVyZShtZXNzYWdlOiBzdHJpbmcsIHNpZ25hdHVyZTogQnVmZmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWVzc2FnZVRvVmVyaWZ5ID0gQnVmZmVyLmZyb20obWVzc2FnZSkudG9TdHJpbmcoJ2hleCcpO1xuICAgIGNvbnN0IHB1YktleSA9IHRoaXMuZ2V0S2V5cygpLnB1YjtcbiAgICByZXR1cm4gdXRpbHMudmVyaWZ5U2lnbmF0dXJlKG1lc3NhZ2VUb1ZlcmlmeSwgcHViS2V5LCBzaWduYXR1cmUudG9TdHJpbmcoJ2hleCcpKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,35 @@
1
+ import { BaseUtils } from '@bitgo/sdk-core';
2
+ import { Address } from './iface';
3
+ declare class Utils implements BaseUtils {
4
+ isValidAddress(address: string): boolean;
5
+ isValidTransactionId(txId: string): boolean;
6
+ isValidPublicKey(key: string): boolean;
7
+ isValidPrivateKey(key: string): boolean;
8
+ isValidSignature(signature: string): boolean;
9
+ isValidBlockId(hash: string): boolean;
10
+ isValidHex(hex: string): boolean;
11
+ /**
12
+ * Parse an address string into address and destination tag
13
+ */
14
+ getAddressDetails(address: string): Address;
15
+ /**
16
+ * Construct a full, normalized address from an address and destination tag
17
+ */
18
+ normalizeAddress({ address, destinationTag }: Address): string;
19
+ /**
20
+ * @param message hex encoded string
21
+ * @param privateKey
22
+ * return hex encoded signature string, throws if any of the inputs are invalid
23
+ */
24
+ signString(message: string, privateKey: string): string;
25
+ /**
26
+ * @param message hex encoded string
27
+ * @param signature hex encooded signature string
28
+ * @param publicKey
29
+ * return boolean, throws if any of the inputs are invalid
30
+ */
31
+ verifySignature(message: string, signature: string, publicKey: string): boolean;
32
+ }
33
+ declare const utils: Utils;
34
+ export default utils;
35
+ //# 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,EAAE,SAAS,EAAmC,MAAM,iBAAiB,CAAC;AAK7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,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;CAgBvF;AAED,QAAA,MAAM,KAAK,OAAc,CAAC;AAE1B,eAAe,KAAK,CAAC"}
@@ -0,0 +1,170 @@
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/sdk-core");
27
+ const querystring = __importStar(require("querystring"));
28
+ const rippleKeypairs = __importStar(require("ripple-keypairs"));
29
+ const url = __importStar(require("url"));
30
+ const xrpl = __importStar(require("xrpl"));
31
+ const keyPair_1 = require("./keyPair");
32
+ class Utils {
33
+ isValidAddress(address) {
34
+ try {
35
+ const addressDetails = this.getAddressDetails(address);
36
+ return address === this.normalizeAddress(addressDetails);
37
+ }
38
+ catch (e) {
39
+ return false;
40
+ }
41
+ }
42
+ isValidTransactionId(txId) {
43
+ return this.isValidHex(txId);
44
+ }
45
+ isValidPublicKey(key) {
46
+ try {
47
+ new keyPair_1.KeyPair({ pub: key });
48
+ return true;
49
+ }
50
+ catch {
51
+ return false;
52
+ }
53
+ }
54
+ isValidPrivateKey(key) {
55
+ try {
56
+ new keyPair_1.KeyPair({ prv: key });
57
+ return true;
58
+ }
59
+ catch {
60
+ return false;
61
+ }
62
+ }
63
+ isValidSignature(signature) {
64
+ return this.isValidHex(signature);
65
+ }
66
+ isValidBlockId(hash) {
67
+ return this.isValidHex(hash);
68
+ }
69
+ isValidHex(hex) {
70
+ return /^([a-fA-F0-9])+$/.test(hex);
71
+ }
72
+ /**
73
+ * Parse an address string into address and destination tag
74
+ */
75
+ getAddressDetails(address) {
76
+ const destinationDetails = url.parse(address);
77
+ const destinationAddress = destinationDetails.pathname;
78
+ if (!destinationAddress || !xrpl.isValidClassicAddress(destinationAddress)) {
79
+ throw new sdk_core_1.InvalidAddressError(`destination address "${destinationAddress}" is not valid`);
80
+ }
81
+ // there are no other properties like destination tags
82
+ if (destinationDetails.pathname === address) {
83
+ return {
84
+ address: address,
85
+ destinationTag: undefined,
86
+ };
87
+ }
88
+ if (!destinationDetails.query) {
89
+ throw new sdk_core_1.InvalidAddressError('no query params present');
90
+ }
91
+ const queryDetails = querystring.parse(destinationDetails.query);
92
+ if (!queryDetails.dt) {
93
+ // if there are more properties, the query details need to contain the destination tag property.
94
+ throw new sdk_core_1.InvalidAddressError('destination tag missing');
95
+ }
96
+ if (Array.isArray(queryDetails.dt)) {
97
+ // if queryDetails.dt is an array, that means dt was given multiple times, which is not valid
98
+ throw new sdk_core_1.InvalidAddressError(`destination tag can appear at most once, but ${queryDetails.dt.length} destination tags were found`);
99
+ }
100
+ const parsedTag = parseInt(queryDetails.dt, 10);
101
+ if (!Number.isSafeInteger(parsedTag)) {
102
+ throw new sdk_core_1.InvalidAddressError('invalid destination tag');
103
+ }
104
+ if (parsedTag > 0xffffffff || parsedTag < 0) {
105
+ throw new sdk_core_1.InvalidAddressError('destination tag out of range');
106
+ }
107
+ return {
108
+ address: destinationAddress,
109
+ destinationTag: parsedTag,
110
+ };
111
+ }
112
+ /**
113
+ * Construct a full, normalized address from an address and destination tag
114
+ */
115
+ normalizeAddress({ address, destinationTag }) {
116
+ if (typeof address !== 'string') {
117
+ throw new sdk_core_1.InvalidAddressError('invalid address, expected string');
118
+ }
119
+ if (typeof destinationTag === 'undefined' || destinationTag === null) {
120
+ return address;
121
+ }
122
+ if (!Number.isInteger(destinationTag)) {
123
+ throw new sdk_core_1.InvalidAddressError('invalid destination tag, expected integer');
124
+ }
125
+ if (destinationTag > 0xffffffff || destinationTag < 0) {
126
+ throw new sdk_core_1.InvalidAddressError('destination tag out of range');
127
+ }
128
+ return `${address}?dt=${destinationTag}`;
129
+ }
130
+ /**
131
+ * @param message hex encoded string
132
+ * @param privateKey
133
+ * return hex encoded signature string, throws if any of the inputs are invalid
134
+ */
135
+ signString(message, privateKey) {
136
+ if (!this.isValidHex(message)) {
137
+ throw new sdk_core_1.UtilsError('message must be a hex encoded string');
138
+ }
139
+ if (!this.isValidPrivateKey(privateKey)) {
140
+ throw new sdk_core_1.UtilsError('invalid private key');
141
+ }
142
+ return rippleKeypairs.sign(message, privateKey);
143
+ }
144
+ /**
145
+ * @param message hex encoded string
146
+ * @param signature hex encooded signature string
147
+ * @param publicKey
148
+ * return boolean, throws if any of the inputs are invalid
149
+ */
150
+ verifySignature(message, signature, publicKey) {
151
+ if (!this.isValidHex(message)) {
152
+ throw new sdk_core_1.UtilsError('message must be a hex encoded string');
153
+ }
154
+ if (!this.isValidSignature(signature)) {
155
+ throw new sdk_core_1.UtilsError('invalid signature');
156
+ }
157
+ if (!this.isValidPublicKey(publicKey)) {
158
+ throw new sdk_core_1.UtilsError('invalid public key');
159
+ }
160
+ try {
161
+ return rippleKeypairs.verify(message, signature, publicKey);
162
+ }
163
+ catch (e) {
164
+ return false;
165
+ }
166
+ }
167
+ }
168
+ const utils = new Utils();
169
+ exports.default = utils;
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4Q0FBNkU7QUFDN0UseURBQTJDO0FBQzNDLGdFQUFrRDtBQUNsRCx5Q0FBMkI7QUFDM0IsMkNBQTZCO0FBRTdCLHVDQUFrRDtBQUVsRCxNQUFNLEtBQUs7SUFDVCxjQUFjLENBQUMsT0FBZTtRQUM1QixJQUFJO1lBQ0YsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZELE9BQU8sT0FBTyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUMxRDtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFZO1FBQy9CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBVztRQUMxQixJQUFJO1lBQ0YsSUFBSSxpQkFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDN0IsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUFDLE1BQU07WUFDTixPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLEdBQVc7UUFDM0IsSUFBSTtZQUNGLElBQUksaUJBQVUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFBQyxNQUFNO1lBQ04sT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxTQUFpQjtRQUNoQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENB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c2VVdGlscywgSW52YWxpZEFkZHJlc3NFcnJvciwgVXRpbHNFcnJvciB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyBxdWVyeXN0cmluZyBmcm9tICdxdWVyeXN0cmluZyc7XG5pbXBvcnQgKiBhcyByaXBwbGVLZXlwYWlycyBmcm9tICdyaXBwbGUta2V5cGFpcnMnO1xuaW1wb3J0ICogYXMgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgKiBhcyB4cnBsIGZyb20gJ3hycGwnO1xuaW1wb3J0IHsgQWRkcmVzcyB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgS2V5UGFpciBhcyBYcnBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcblxuY2xhc3MgVXRpbHMgaW1wbGVtZW50cyBCYXNlVXRpbHMge1xuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYWRkcmVzc0RldGFpbHMgPSB0aGlzLmdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3MpO1xuICAgICAgcmV0dXJuIGFkZHJlc3MgPT09IHRoaXMubm9ybWFsaXplQWRkcmVzcyhhZGRyZXNzRGV0YWlscyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlzVmFsaWRUcmFuc2FjdGlvbklkKHR4SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRIZXgodHhJZCk7XG4gIH1cblxuICBpc1ZhbGlkUHVibGljS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIG5ldyBYcnBLZXlQYWlyKHsgcHViOiBrZXkgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpc1ZhbGlkUHJpdmF0ZUtleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBuZXcgWHJwS2V5UGFpcih7IHBydjoga2V5IH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaXNWYWxpZFNpZ25hdHVyZShzaWduYXR1cmU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRIZXgoc2lnbmF0dXJlKTtcbiAgfVxuXG4gIGlzVmFsaWRCbG9ja0lkKGhhc2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRIZXgoaGFzaCk7XG4gIH1cblxuICBpc1ZhbGlkSGV4KGhleDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eKFthLWZBLUYwLTldKSskLy50ZXN0KGhleCk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYW4gYWRkcmVzcyBzdHJpbmcgaW50byBhZGRyZXNzIGFuZCBkZXN0aW5hdGlvbiB0YWdcbiAgICovXG4gIHB1YmxpYyBnZXRBZGRyZXNzRGV0YWlscyhhZGRyZXNzOiBzdHJpbmcpOiBBZGRyZXNzIHtcbiAgICBjb25zdCBkZXN0aW5hdGlvbkRldGFpbHMgPSB1cmwucGFyc2UoYWRkcmVzcyk7XG4gICAgY29uc3QgZGVzdGluYXRpb25BZGRyZXNzID0gZGVzdGluYXRpb25EZXRhaWxzLnBhdGhuYW1lO1xuICAgIGlmICghZGVzdGluYXRpb25BZGRyZXNzIHx8ICF4cnBsLmlzVmFsaWRDbGFzc2ljQWRkcmVzcyhkZXN0aW5hdGlvbkFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihgZGVzdGluYXRpb24gYWRkcmVzcyBcIiR7ZGVzdGluYXRpb25BZGRyZXNzfVwiIGlzIG5vdCB2YWxpZGApO1xuICAgIH1cbiAgICAvLyB0aGVyZSBhcmUgbm8gb3RoZXIgcHJvcGVydGllcyBsaWtlIGRlc3RpbmF0aW9uIHRhZ3NcbiAgICBpZiAoZGVzdGluYXRpb25EZXRhaWxzLnBhdGhuYW1lID09PSBhZGRyZXNzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhZGRyZXNzOiBhZGRyZXNzLFxuICAgICAgICBkZXN0aW5hdGlvblRhZzogdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIWRlc3RpbmF0aW9uRGV0YWlscy5xdWVyeSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoJ25vIHF1ZXJ5IHBhcmFtcyBwcmVzZW50Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlEZXRhaWxzID0gcXVlcnlzdHJpbmcucGFyc2UoZGVzdGluYXRpb25EZXRhaWxzLnF1ZXJ5KTtcbiAgICBpZiAoIXF1ZXJ5RGV0YWlscy5kdCkge1xuICAgICAgLy8gaWYgdGhlcmUgYXJlIG1vcmUgcHJvcGVydGllcywgdGhlIHF1ZXJ5IGRldGFpbHMgbmVlZCB0byBjb250YWluIHRoZSBkZXN0aW5hdGlvbiB0YWcgcHJvcGVydHkuXG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcignZGVzdGluYXRpb24gdGFnIG1pc3NpbmcnKTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShxdWVyeURldGFpbHMuZHQpKSB7XG4gICAgICAvLyBpZiBxdWVyeURldGFpbHMuZHQgaXMgYW4gYXJyYXksIHRoYXQgbWVhbnMgZHQgd2FzIGdpdmVuIG11bHRpcGxlIHRpbWVzLCB3aGljaCBpcyBub3QgdmFsaWRcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKFxuICAgICAgICBgZGVzdGluYXRpb24gdGFnIGNhbiBhcHBlYXIgYXQgbW9zdCBvbmNlLCBidXQgJHtxdWVyeURldGFpbHMuZHQubGVuZ3RofSBkZXN0aW5hdGlvbiB0YWdzIHdlcmUgZm91bmRgXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZFRhZyA9IHBhcnNlSW50KHF1ZXJ5RGV0YWlscy5kdCwgMTApO1xuICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIocGFyc2VkVGFnKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoJ2ludmFsaWQgZGVzdGluYXRpb24gdGFnJyk7XG4gICAgfVxuXG4gICAgaWYgKHBhcnNlZFRhZyA+IDB4ZmZmZmZmZmYgfHwgcGFyc2VkVGFnIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoJ2Rlc3RpbmF0aW9uIHRhZyBvdXQgb2YgcmFuZ2UnKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWRkcmVzczogZGVzdGluYXRpb25BZGRyZXNzLFxuICAgICAgZGVzdGluYXRpb25UYWc6IHBhcnNlZFRhZyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGZ1bGwsIG5vcm1hbGl6ZWQgYWRkcmVzcyBmcm9tIGFuIGFkZHJlc3MgYW5kIGRlc3RpbmF0aW9uIHRhZ1xuICAgKi9cbiAgcHVibGljIG5vcm1hbGl6ZUFkZHJlc3MoeyBhZGRyZXNzLCBkZXN0aW5hdGlvblRhZyB9OiBBZGRyZXNzKTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGFkZHJlc3MgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcignaW52YWxpZCBhZGRyZXNzLCBleHBlY3RlZCBzdHJpbmcnKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkZXN0aW5hdGlvblRhZyA9PT0gJ3VuZGVmaW5lZCcgfHwgZGVzdGluYXRpb25UYWcgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBhZGRyZXNzO1xuICAgIH1cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoZGVzdGluYXRpb25UYWcpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcignaW52YWxpZCBkZXN0aW5hdGlvbiB0YWcsIGV4cGVjdGVkIGludGVnZXInKTtcbiAgICB9XG4gICAgaWYgKGRlc3RpbmF0aW9uVGFnID4gMHhmZmZmZmZmZiB8fCBkZXN0aW5hdGlvblRhZyA8IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKCdkZXN0aW5hdGlvbiB0YWcgb3V0IG9mIHJhbmdlJyk7XG4gICAgfVxuICAgIHJldHVybiBgJHthZGRyZXNzfT9kdD0ke2Rlc3RpbmF0aW9uVGFnfWA7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIG1lc3NhZ2UgaGV4IGVuY29kZWQgc3RyaW5nXG4gICAqIEBwYXJhbSBwcml2YXRlS2V5XG4gICAqIHJldHVybiBoZXggZW5jb2RlZCBzaWduYXR1cmUgc3RyaW5nLCB0aHJvd3MgaWYgYW55IG9mIHRoZSBpbnB1dHMgYXJlIGludmFsaWRcbiAgICovXG4gIHB1YmxpYyBzaWduU3RyaW5nKG1lc3NhZ2U6IHN0cmluZywgcHJpdmF0ZUtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZEhleChtZXNzYWdlKSkge1xuICAgICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ21lc3NhZ2UgbXVzdCBiZSBhIGhleCBlbmNvZGVkIHN0cmluZycpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNWYWxpZFByaXZhdGVLZXkocHJpdmF0ZUtleSkpIHtcbiAgICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdpbnZhbGlkIHByaXZhdGUga2V5Jyk7XG4gICAgfVxuICAgIHJldHVybiByaXBwbGVLZXlwYWlycy5zaWduKG1lc3NhZ2UsIHByaXZhdGVLZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBtZXNzYWdlIGhleCBlbmNvZGVkIHN0cmluZ1xuICAgKiBAcGFyYW0gc2lnbmF0dXJlIGhleCBlbmNvb2RlZCBzaWduYXR1cmUgc3RyaW5nXG4gICAqIEBwYXJhbSBwdWJsaWNLZXlcbiAgICogcmV0dXJuIGJvb2xlYW4sIHRocm93cyBpZiBhbnkgb2YgdGhlIGlucHV0cyBhcmUgaW52YWxpZFxuICAgKi9cbiAgcHVibGljIHZlcmlmeVNpZ25hdHVyZShtZXNzYWdlOiBzdHJpbmcsIHNpZ25hdHVyZTogc3RyaW5nLCBwdWJsaWNLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkSGV4KG1lc3NhZ2UpKSB7XG4gICAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignbWVzc2FnZSBtdXN0IGJlIGEgaGV4IGVuY29kZWQgc3RyaW5nJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1ZhbGlkU2lnbmF0dXJlKHNpZ25hdHVyZSkpIHtcbiAgICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdpbnZhbGlkIHNpZ25hdHVyZScpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNWYWxpZFB1YmxpY0tleShwdWJsaWNLZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignaW52YWxpZCBwdWJsaWMga2V5Jyk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmlwcGxlS2V5cGFpcnMudmVyaWZ5KG1lc3NhZ2UsIHNpZ25hdHVyZSwgcHVibGljS2V5KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IHV0aWxzID0gbmV3IFV0aWxzKCk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0aWxzO1xuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,eAAO,MAAM,QAAQ,QAAS,SAAS,KAAG,IAGzC,CAAC"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAK5C,eAAO,MAAM,QAAQ,QAAS,SAAS,KAAG,IAMzC,CAAC"}
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsaUNBQThCO0FBQzlCLCtCQUE0QjtBQUVyQixNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQWMsRUFBUSxFQUFFO0lBQy9DLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFNBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4QyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxXQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDO0FBSFcsUUFBQSxRQUFRLFlBR25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFR4cnAgfSBmcm9tICcuL3R4cnAnO1xuaW1wb3J0IHsgWHJwIH0gZnJvbSAnLi94cnAnO1xuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXIgPSAoc2RrOiBCaXRHb0Jhc2UpOiB2b2lkID0+IHtcbiAgc2RrLnJlZ2lzdGVyKCd4cnAnLCBYcnAuY3JlYXRlSW5zdGFuY2UpO1xuICBzZGsucmVnaXN0ZXIoJ3R4cnAnLCBUeHJwLmNyZWF0ZUluc3RhbmNlKTtcbn07XG4iXX0=
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsaUNBQThCO0FBQzlCLCtCQUE0QjtBQUM1Qix5Q0FBc0M7QUFFL0IsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFjLEVBQVEsRUFBRTtJQUMvQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxTQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDeEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsV0FBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFDLG1CQUFRLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFO1FBQ3ZFLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBTlcsUUFBQSxRQUFRLFlBTW5CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFR4cnAgfSBmcm9tICcuL3R4cnAnO1xuaW1wb3J0IHsgWHJwIH0gZnJvbSAnLi94cnAnO1xuaW1wb3J0IHsgWHJwVG9rZW4gfSBmcm9tICcuL3hycFRva2VuJztcblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyID0gKHNkazogQml0R29CYXNlKTogdm9pZCA9PiB7XG4gIHNkay5yZWdpc3RlcigneHJwJywgWHJwLmNyZWF0ZUluc3RhbmNlKTtcbiAgc2RrLnJlZ2lzdGVyKCd0eHJwJywgVHhycC5jcmVhdGVJbnN0YW5jZSk7XG4gIFhycFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKCkuZm9yRWFjaCgoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4ge1xuICAgIHNkay5yZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpO1xuICB9KTtcbn07XG4iXX0=