@bitgo-beta/sdk-coin-xrp 1.3.3-alpha.23 → 1.3.3-alpha.230

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.
Files changed (60) hide show
  1. package/CHANGELOG.md +445 -0
  2. package/dist/src/index.d.ts +4 -2
  3. package/dist/src/index.d.ts.map +1 -1
  4. package/dist/src/index.js +10 -4
  5. package/dist/src/lib/accountSetBuilder.d.ts +18 -0
  6. package/dist/src/lib/accountSetBuilder.d.ts.map +1 -0
  7. package/dist/src/lib/accountSetBuilder.js +63 -0
  8. package/dist/src/lib/constants.d.ts +8 -0
  9. package/dist/src/lib/constants.d.ts.map +1 -0
  10. package/dist/src/lib/constants.js +30 -0
  11. package/dist/src/lib/iface.d.ts +108 -0
  12. package/dist/src/lib/iface.d.ts.map +1 -0
  13. package/dist/src/lib/iface.js +11 -0
  14. package/dist/src/lib/index.d.ts +14 -0
  15. package/dist/src/lib/index.d.ts.map +1 -0
  16. package/dist/src/lib/index.js +43 -0
  17. package/dist/src/lib/keyPair.d.ts +35 -0
  18. package/dist/src/lib/keyPair.d.ts.map +1 -0
  19. package/dist/src/lib/keyPair.js +109 -0
  20. package/dist/src/lib/tokenTransferBuilder.d.ts +29 -0
  21. package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -0
  22. package/dist/src/lib/tokenTransferBuilder.js +91 -0
  23. package/dist/src/lib/transaction.d.ts +62 -0
  24. package/dist/src/lib/transaction.d.ts.map +1 -0
  25. package/dist/src/lib/transaction.js +371 -0
  26. package/dist/src/lib/transactionBuilder.d.ts +72 -0
  27. package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
  28. package/dist/src/lib/transactionBuilder.js +253 -0
  29. package/dist/src/lib/transactionBuilderFactory.d.ts +39 -0
  30. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
  31. package/dist/src/lib/transactionBuilderFactory.js +97 -0
  32. package/dist/src/lib/transferBuilder.d.ts +28 -0
  33. package/dist/src/lib/transferBuilder.d.ts.map +1 -0
  34. package/dist/src/lib/transferBuilder.js +82 -0
  35. package/dist/src/lib/trustsetBuilder.d.ts +21 -0
  36. package/dist/src/lib/trustsetBuilder.d.ts.map +1 -0
  37. package/dist/src/lib/trustsetBuilder.js +72 -0
  38. package/dist/src/lib/utils.d.ts +69 -0
  39. package/dist/src/lib/utils.d.ts.map +1 -0
  40. package/dist/src/lib/utils.js +268 -0
  41. package/dist/src/lib/walletInitializationBuilder.d.ts +19 -0
  42. package/dist/src/lib/walletInitializationBuilder.d.ts.map +1 -0
  43. package/dist/src/lib/walletInitializationBuilder.js +76 -0
  44. package/dist/src/register.d.ts.map +1 -1
  45. package/dist/src/register.js +5 -1
  46. package/dist/src/ripple.d.ts +112 -2
  47. package/dist/src/ripple.d.ts.map +1 -1
  48. package/dist/src/ripple.js +17 -14
  49. package/dist/src/txrp.d.ts +3 -2
  50. package/dist/src/txrp.d.ts.map +1 -1
  51. package/dist/src/txrp.js +5 -5
  52. package/dist/src/xrp.d.ts +14 -60
  53. package/dist/src/xrp.d.ts.map +1 -1
  54. package/dist/src/xrp.js +260 -144
  55. package/dist/src/xrpToken.d.ts +21 -0
  56. package/dist/src/xrpToken.d.ts.map +1 -0
  57. package/dist/src/xrpToken.js +58 -0
  58. package/dist/tsconfig.tsbuildinfo +1 -8595
  59. package/package.json +11 -11
  60. 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,69 @@
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
+ * Decodes a serialized XRPL transaction.
60
+ *
61
+ * @param {string} txHex - The serialized transaction in hex.
62
+ * @returns {Object} - Decoded transaction object.
63
+ * @throws {Error} - If decoding fails or input is invalid.
64
+ */
65
+ decodeTransaction(txHex: string): Record<string, unknown>;
66
+ }
67
+ declare const utils: Utils;
68
+ export default utils;
69
+ //# 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;IAc1E;;;;;;OAMG;IACI,iBAAiB,CAAC,KAAK,EAAE,MAAM;CAUvC;AAED,QAAA,MAAM,KAAK,OAAc,CAAC;AAE1B,eAAe,KAAK,CAAC"}
@@ -0,0 +1,268 @@
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
+ * Decodes a serialized XRPL transaction.
249
+ *
250
+ * @param {string} txHex - The serialized transaction in hex.
251
+ * @returns {Object} - Decoded transaction object.
252
+ * @throws {Error} - If decoding fails or input is invalid.
253
+ */
254
+ decodeTransaction(txHex) {
255
+ if (typeof txHex !== 'string' || txHex.trim() === '') {
256
+ throw new Error('Invalid transaction hex. Expected a non-empty string.');
257
+ }
258
+ try {
259
+ return xrpl.decode(txHex);
260
+ }
261
+ catch (error) {
262
+ throw new Error(`Failed to decode transaction: ${error.message}`);
263
+ }
264
+ }
265
+ }
266
+ const utils = new Utils();
267
+ exports.default = utils;
268
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFNOEI7QUFDOUIsaURBQXFEO0FBQ3JELHlEQUEyQztBQUMzQyxnRUFBa0Q7QUFDbEQseUNBQTJCO0FBQzNCLDJDQUE2QjtBQUU3QiwyQ0FBc0Q7QUFFdEQsdUNBQWtEO0FBRWxELE1BQU0sS0FBSztJQUNULGNBQWMsQ0FBQyxPQUFlO1FBQzVCLElBQUk7WUFDRixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkQsT0FBTyxPQUFPLEtBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQzFEO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQVk7UUFDL0IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUFXO1FBQzFCLElBQUk7WUFDRixJQUFJLGlCQUFVLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUM3QixPQUFPLElBQUksQ0FBQztTQUNiO1FBQUMsTUFBTTtZQUNOLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsR0FBVztRQUMzQixJQUFJO1lBQ0YsSUFBSSxpQkFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDN0IsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUFDLE1BQU07WUFDTixPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLFNBQWlCO1FBQ2hDLE9BQU8sSUFBSSxD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QUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDcEQsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1NBQzFFO1FBQ0QsSUFBSTtZQUNGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMzQjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDbkU7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBRTFCLGtCQUFlLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VVdGlscyxcbiAgSW52YWxpZEFkZHJlc3NFcnJvcixcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFVuc3VwcG9ydGVkVG9rZW5FcnJvcixcbiAgVXRpbHNFcnJvcixcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgY29pbnMsIFhycENvaW4gfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCAqIGFzIHF1ZXJ5c3RyaW5nIGZyb20gJ3F1ZXJ5c3RyaW5nJztcbmltcG9ydCAqIGFzIHJpcHBsZUtleXBhaXJzIGZyb20gJ3JpcHBsZS1rZXlwYWlycyc7XG5pbXBvcnQgKiBhcyB1cmwgZnJvbSAndXJsJztcbmltcG9ydCAqIGFzIHhycGwgZnJvbSAneHJwbCc7XG5pbXBvcnQgeyBBbW91bnQsIElzc3VlZEN1cnJlbmN5QW1vdW50IH0gZnJvbSAneHJwbCc7XG5pbXBvcnQgeyBWQUxJRF9BQ0NPVU5UX1NFVF9GTEFHUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IEFkZHJlc3MsIFNpZ25lckRldGFpbHMgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEtleVBhaXIgYXMgWHJwS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5cbmNsYXNzIFV0aWxzIGltcGxlbWVudHMgQmFzZVV0aWxzIHtcbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFkZHJlc3NEZXRhaWxzID0gdGhpcy5nZXRBZGRyZXNzRGV0YWlscyhhZGRyZXNzKTtcbiAgICAgIHJldHVybiBhZGRyZXNzID09PSB0aGlzLm5vcm1hbGl6ZUFkZHJlc3MoYWRkcmVzc0RldGFpbHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkSGV4KHR4SWQpO1xuICB9XG5cbiAgaXNWYWxpZFB1YmxpY0tleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBuZXcgWHJwS2V5UGFpcih7IHB1Yjoga2V5IH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaXNWYWxpZFByaXZhdGVLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgbmV3IFhycEtleVBhaXIoeyBwcnY6IGtleSB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlzVmFsaWRTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkSGV4KHNpZ25hdHVyZSk7XG4gIH1cblxuICBpc1ZhbGlkQmxvY2tJZChoYXNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkSGV4KGhhc2gpO1xuICB9XG5cbiAgaXNWYWxpZEhleChoZXg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXihbYS1mQS1GMC05XSkrJC8udGVzdChoZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGFuIGFkZHJlc3Mgc3RyaW5nIGludG8gYWRkcmVzcyBhbmQgZGVzdGluYXRpb24gdGFnXG4gICAqL1xuICBwdWJsaWMgZ2V0QWRkcmVzc0RldGFpbHMoYWRkcmVzczogc3RyaW5nKTogQWRkcmVzcyB7XG4gICAgY29uc3QgZGVzdGluYXRpb25EZXRhaWxzID0gdXJsLnBhcnNlKGFkZHJlc3MpO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uQWRkcmVzcyA9IGRlc3RpbmF0aW9uRGV0YWlscy5wYXRobmFtZTtcbiAgICBpZiAoIWRlc3RpbmF0aW9uQWRkcmVzcyB8fCAheHJwbC5pc1ZhbGlkQ2xhc3NpY0FkZHJlc3MoZGVzdGluYXRpb25BZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYGRlc3RpbmF0aW9uIGFkZHJlc3MgXCIke2Rlc3RpbmF0aW9uQWRkcmVzc31cIiBpcyBub3QgdmFsaWRgKTtcbiAgICB9XG4gICAgLy8gdGhlcmUgYXJlIG5vIG90aGVyIHByb3BlcnRpZXMgbGlrZSBkZXN0aW5hdGlvbiB0YWdzXG4gICAgaWYgKGRlc3RpbmF0aW9uRGV0YWlscy5wYXRobmFtZSA9PT0gYWRkcmVzcykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWRkcmVzczogYWRkcmVzcyxcbiAgICAgICAgZGVzdGluYXRpb25UYWc6IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCFkZXN0aW5hdGlvbkRldGFpbHMucXVlcnkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKCdubyBxdWVyeSBwYXJhbXMgcHJlc2VudCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5RGV0YWlscyA9IHF1ZXJ5c3RyaW5nLnBhcnNlKGRlc3RpbmF0aW9uRGV0YWlscy5xdWVyeSk7XG4gICAgaWYgKCFxdWVyeURldGFpbHMuZHQpIHtcbiAgICAgIC8vIGlmIHRoZXJlIGFyZSBtb3JlIHByb3BlcnRpZXMsIHRoZSBxdWVyeSBkZXRhaWxzIG5lZWQgdG8gY29udGFpbiB0aGUgZGVzdGluYXRpb24gdGFnIHByb3BlcnR5LlxuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoJ2Rlc3RpbmF0aW9uIHRhZyBtaXNzaW5nJyk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocXVlcnlEZXRhaWxzLmR0KSkge1xuICAgICAgLy8gaWYgcXVlcnlEZXRhaWxzLmR0IGlzIGFuIGFycmF5LCB0aGF0IG1lYW5zIGR0IHdhcyBnaXZlbiBtdWx0aXBsZSB0aW1lcywgd2hpY2ggaXMgbm90IHZhbGlkXG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihcbiAgICAgICAgYGRlc3RpbmF0aW9uIHRhZyBjYW4gYXBwZWFyIGF0IG1vc3Qgb25jZSwgYnV0ICR7cXVlcnlEZXRhaWxzLmR0Lmxlbmd0aH0gZGVzdGluYXRpb24gdGFncyB3ZXJlIGZvdW5kYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRUYWcgPSBwYXJzZUludChxdWVyeURldGFpbHMuZHQsIDEwKTtcbiAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHBhcnNlZFRhZykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKCdpbnZhbGlkIGRlc3RpbmF0aW9uIHRhZycpO1xuICAgIH1cblxuICAgIGlmIChwYXJzZWRUYWcgPiAweGZmZmZmZmZmIHx8IHBhcnNlZFRhZyA8IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKCdkZXN0aW5hdGlvbiB0YWcgb3V0IG9mIHJhbmdlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFkZHJlc3M6IGRlc3RpbmF0aW9uQWRkcmVzcyxcbiAgICAgIGRlc3RpbmF0aW9uVGFnOiBwYXJzZWRUYWcsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBmdWxsLCBub3JtYWxpemVkIGFkZHJlc3MgZnJvbSBhbiBhZGRyZXNzIGFuZCBkZXN0aW5hdGlvbiB0YWdcbiAgICovXG4gIHB1YmxpYyBub3JtYWxpemVBZGRyZXNzKHsgYWRkcmVzcywgZGVzdGluYXRpb25UYWcgfTogQWRkcmVzcyk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBhZGRyZXNzICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoJ2ludmFsaWQgYWRkcmVzcywgZXhwZWN0ZWQgc3RyaW5nJyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGVzdGluYXRpb25UYWcgPT09ICd1bmRlZmluZWQnIHx8IGRlc3RpbmF0aW9uVGFnID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gYWRkcmVzcztcbiAgICB9XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGRlc3RpbmF0aW9uVGFnKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoJ2ludmFsaWQgZGVzdGluYXRpb24gdGFnLCBleHBlY3RlZCBpbnRlZ2VyJyk7XG4gICAgfVxuICAgIGlmIChkZXN0aW5hdGlvblRhZyA+IDB4ZmZmZmZmZmYgfHwgZGVzdGluYXRpb25UYWcgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcignZGVzdGluYXRpb24gdGFnIG91dCBvZiByYW5nZScpO1xuICAgIH1cbiAgICByZXR1cm4gYCR7YWRkcmVzc30/ZHQ9JHtkZXN0aW5hdGlvblRhZ31gO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBtZXNzYWdlIGhleCBlbmNvZGVkIHN0cmluZ1xuICAgKiBAcGFyYW0gcHJpdmF0ZUtleVxuICAgKiByZXR1cm4gaGV4IGVuY29kZWQgc2lnbmF0dXJlIHN0cmluZywgdGhyb3dzIGlmIGFueSBvZiB0aGUgaW5wdXRzIGFyZSBpbnZhbGlkXG4gICAqL1xuICBwdWJsaWMgc2lnblN0cmluZyhtZXNzYWdlOiBzdHJpbmcsIHByaXZhdGVLZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRIZXgobWVzc2FnZSkpIHtcbiAgICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdtZXNzYWdlIG11c3QgYmUgYSBoZXggZW5jb2RlZCBzdHJpbmcnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRQcml2YXRlS2V5KHByaXZhdGVLZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignaW52YWxpZCBwcml2YXRlIGtleScpO1xuICAgIH1cbiAgICByZXR1cm4gcmlwcGxlS2V5cGFpcnMuc2lnbihtZXNzYWdlLCBwcml2YXRlS2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gbWVzc2FnZSBoZXggZW5jb2RlZCBzdHJpbmdcbiAgICogQHBhcmFtIHNpZ25hdHVyZSBoZXggZW5jb29kZWQgc2lnbmF0dXJlIHN0cmluZ1xuICAgKiBAcGFyYW0gcHVibGljS2V5XG4gICAqIHJldHVybiBib29sZWFuLCB0aHJvd3MgaWYgYW55IG9mIHRoZSBpbnB1dHMgYXJlIGludmFsaWRcbiAgICovXG4gIHB1YmxpYyB2ZXJpZnlTaWduYXR1cmUobWVzc2FnZTogc3RyaW5nLCBzaWduYXR1cmU6IHN0cmluZywgcHVibGljS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZEhleChtZXNzYWdlKSkge1xuICAgICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ21lc3NhZ2UgbXVzdCBiZSBhIGhleCBlbmNvZGVkIHN0cmluZycpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNWYWxpZFNpZ25hdHVyZShzaWduYXR1cmUpKSB7XG4gICAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignaW52YWxpZCBzaWduYXR1cmUnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRQdWJsaWNLZXkocHVibGljS2V5KSkge1xuICAgICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ2ludmFsaWQgcHVibGljIGtleScpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJpcHBsZUtleXBhaXJzLnZlcmlmeShtZXNzYWdlLCBzaWduYXR1cmUsIHB1YmxpY0tleSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGUgcmF3IHRyYW5zYWN0aW9uIGhhcyBhIHZhbGlkIGZvcm1hdCBpbiB0aGUgYmxvY2tjaGFpbiBjb250ZXh0LCB0aHJvdyBvdGhlcndpc2UuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByYXdUcmFuc2FjdGlvbiAtIFRyYW5zYWN0aW9uIGluIGhleCBzdHJpbmcgZm9ybWF0XG4gICAqL1xuICBwdWJsaWMgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFyYXdUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHJhdyB0cmFuc2FjdGlvbjogVW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1ZhbGlkSGV4KHJhd1RyYW5zYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHJhdyB0cmFuc2FjdGlvbjogSGV4IHN0cmluZyBleHBlY3RlZCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHJhdyB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgcmF3IHRyYW5zYWN0aW9uIGNhbiBiZSBkZXNlcmlhbGl6ZWRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJhd1RyYW5zYWN0aW9uIC0gdHJhbnNhY3Rpb24gaW4gYmFzZTY0IHN0cmluZyBmb3JtYXRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gdGhlIHZhbGlkYXRpb24gcmVzdWx0XG4gICAqL1xuICBwdWJsaWMgaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QganNvblR4ID0geHJwbC5kZWNvZGUocmF3VHJhbnNhY3Rpb24pO1xuICAgICAgeHJwbC52YWxpZGF0ZShqc29uVHgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZUFjY291bnRTZXRGbGFnKHNldEZsYWc6IG51bWJlcikge1xuICAgIGlmICh0eXBlb2Ygc2V0RmxhZyAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKGBzZXRGbGFnICR7c2V0RmxhZ30gaXMgbm90IHZhbGlkYCk7XG4gICAgfVxuICAgIGlmICghVkFMSURfQUNDT1VOVF9TRVRfRkxBR1MuaW5jbHVkZXMoc2V0RmxhZykpIHtcbiAgICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKGBzZXRGbGFnICR7c2V0RmxhZ30gaXMgbm90IGEgdmFsaWQgYWNjb3VudCBzZXQgZmxhZ2ApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZVNpZ25lcihzaWduZXI6IFNpZ25lckRldGFpbHMpOiB2b2lkIHtcbiAgICBpZiAoIXNpZ25lci5hZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignc2lnbmVyIG11c3QgaGF2ZSBhbiBhZGRyZXNzJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhzaWduZXIuYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKGBzaWduZXIgYWRkcmVzcyAke3NpZ25lci5hZGRyZXNzfSBpcyBpbnZhbGlkYCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygc2lnbmVyLndlaWdodCAhPT0gJ251bWJlcicgfHwgc2lnbmVyLndlaWdodCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKGBzaWduZXIgd2VpZ2h0ICR7c2lnbmVyLndlaWdodH0gaXMgbm90IHZhbGlkYCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIHByb3ZpZGVkIGBhbW91bnRgIGlzIGZvciBhIHRva2VuIHBheW1lbnRcbiAgICovXG4gIHB1YmxpYyBpc0lzc3VlZEN1cnJlbmN5QW1vdW50KGFtb3VudDogQW1vdW50KTogYW1vdW50IGlzIElzc3VlZEN1cnJlbmN5QW1vdW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgISFhbW91bnQgJiZcbiAgICAgIHR5cGVvZiBhbW91bnQgPT09ICdvYmplY3QnICYmXG4gICAgICB0eXBlb2YgYW1vdW50LmN1cnJlbmN5ID09PSAnc3RyaW5nJyAmJlxuICAgICAgdHlwZW9mIGFtb3VudC5pc3N1ZXIgPT09ICdzdHJpbmcnICYmXG4gICAgICB0eXBlb2YgYW1vdW50LnZhbHVlID09PSAnc3RyaW5nJ1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBhc3NvY2lhdGVkIFhSUCBDdXJyZW5jeSBkZXRhaWxzIGZyb20gdG9rZW4gbmFtZS4gVGhyb3dzIGFuIGVycm9yIGlmIHRva2VuIGlzIHVuc3VwcG9ydGVkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlbk5hbWUgLSBUaGUgdG9rZW4gbmFtZVxuICAgKi9cbiAgcHVibGljIGdldFhycEN1cnJlbmN5RnJvbVRva2VuTmFtZSh0b2tlbk5hbWU6IHN0cmluZyk6IHhycGwuSXNzdWVkQ3VycmVuY3kge1xuICAgIGlmICghY29pbnMuaGFzKHRva2VuTmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZFRva2VuRXJyb3IoYCR7dG9rZW5OYW1lfSBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gICAgfVxuICAgIGNvbnN0IHRva2VuID0gY29pbnMuZ2V0KHRva2VuTmFtZSk7XG4gICAgaWYgKCF0b2tlbi5pc1Rva2VuIHx8ICEodG9rZW4gaW5zdGFuY2VvZiBYcnBDb2luKSkge1xuICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkVG9rZW5FcnJvcihgJHt0b2tlbk5hbWV9IGlzIG5vdCBhbiBYUlAgdG9rZW5gKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbmN5OiB0b2tlbi5jdXJyZW5jeUNvZGUsXG4gICAgICBpc3N1ZXI6IHRva2VuLmlzc3VlckFkZHJlc3MsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGVzIGEgc2VyaWFsaXplZCBYUlBMIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHhIZXggLSBUaGUgc2VyaWFsaXplZCB0cmFuc2FjdGlvbiBpbiBoZXguXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IC0gRGVjb2RlZCB0cmFuc2FjdGlvbiBvYmplY3QuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSAtIElmIGRlY29kaW5nIGZhaWxzIG9yIGlucHV0IGlzIGludmFsaWQuXG4gICAqL1xuICBwdWJsaWMgZGVjb2RlVHJhbnNhY3Rpb24odHhIZXg6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgdHhIZXggIT09ICdzdHJpbmcnIHx8IHR4SGV4LnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbiBoZXguIEV4cGVjdGVkIGEgbm9uLWVtcHR5IHN0cmluZy4nKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB4cnBsLmRlY29kZSh0eEhleCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGRlY29kZSB0cmFuc2FjdGlvbjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCB1dGlscyA9IG5ldyBVdGlscygpO1xuXG5leHBvcnQgZGVmYXVsdCB1dGlscztcbiJdfQ==
@@ -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;AAIjD,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,sBAAsB,CAAC;AAKjD,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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsaUNBQThCO0FBQzlCLCtCQUE0QjtBQUVyQixNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQWMsRUFBUSxFQUFFO0lBQy9DLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFNBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4QyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxXQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDO0FBSFcsUUFBQSxRQUFRLFlBR25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHhycCB9IGZyb20gJy4vdHhycCc7XG5pbXBvcnQgeyBYcnAgfSBmcm9tICcuL3hycCc7XG5cbmV4cG9ydCBjb25zdCByZWdpc3RlciA9IChzZGs6IEJpdEdvQmFzZSk6IHZvaWQgPT4ge1xuICBzZGsucmVnaXN0ZXIoJ3hycCcsIFhycC5jcmVhdGVJbnN0YW5jZSk7XG4gIHNkay5yZWdpc3RlcigndHhycCcsIFR4cnAuY3JlYXRlSW5zdGFuY2UpO1xufTtcbiJdfQ==
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsaUNBQThCO0FBQzlCLCtCQUE0QjtBQUM1Qix5Q0FBc0M7QUFFL0IsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFjLEVBQVEsRUFBRTtJQUMvQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxTQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDeEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsV0FBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFDLG1CQUFRLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFO1FBQ3ZFLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBTlcsUUFBQSxRQUFRLFlBTW5CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHhycCB9IGZyb20gJy4vdHhycCc7XG5pbXBvcnQgeyBYcnAgfSBmcm9tICcuL3hycCc7XG5pbXBvcnQgeyBYcnBUb2tlbiB9IGZyb20gJy4veHJwVG9rZW4nO1xuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXIgPSAoc2RrOiBCaXRHb0Jhc2UpOiB2b2lkID0+IHtcbiAgc2RrLnJlZ2lzdGVyKCd4cnAnLCBYcnAuY3JlYXRlSW5zdGFuY2UpO1xuICBzZGsucmVnaXN0ZXIoJ3R4cnAnLCBUeHJwLmNyZWF0ZUluc3RhbmNlKTtcbiAgWHJwVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoKS5mb3JFYWNoKCh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgc2RrLnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gIH0pO1xufTtcbiJdfQ==