@bitgo-beta/sdk-coin-xrp 1.3.3-alpha.43 → 1.3.3-alpha.430

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 (61) hide show
  1. package/dist/src/index.d.ts +4 -2
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +10 -4
  4. package/dist/src/lib/accountSetBuilder.d.ts +18 -0
  5. package/dist/src/lib/accountSetBuilder.d.ts.map +1 -0
  6. package/dist/src/lib/accountSetBuilder.js +63 -0
  7. package/dist/src/lib/constants.d.ts +8 -0
  8. package/dist/src/lib/constants.d.ts.map +1 -0
  9. package/dist/src/lib/constants.js +30 -0
  10. package/dist/src/lib/iface.d.ts +109 -0
  11. package/dist/src/lib/iface.d.ts.map +1 -0
  12. package/dist/src/lib/iface.js +11 -0
  13. package/dist/src/lib/index.d.ts +14 -0
  14. package/dist/src/lib/index.d.ts.map +1 -0
  15. package/dist/src/lib/index.js +43 -0
  16. package/dist/src/lib/keyPair.d.ts +33 -0
  17. package/dist/src/lib/keyPair.d.ts.map +1 -0
  18. package/dist/src/lib/keyPair.js +118 -0
  19. package/dist/src/lib/tokenTransferBuilder.d.ts +29 -0
  20. package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -0
  21. package/dist/src/lib/tokenTransferBuilder.js +91 -0
  22. package/dist/src/lib/transaction.d.ts +62 -0
  23. package/dist/src/lib/transaction.d.ts.map +1 -0
  24. package/dist/src/lib/transaction.js +381 -0
  25. package/dist/src/lib/transactionBuilder.d.ts +72 -0
  26. package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
  27. package/dist/src/lib/transactionBuilder.js +263 -0
  28. package/dist/src/lib/transactionBuilderFactory.d.ts +39 -0
  29. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
  30. package/dist/src/lib/transactionBuilderFactory.js +97 -0
  31. package/dist/src/lib/transferBuilder.d.ts +28 -0
  32. package/dist/src/lib/transferBuilder.d.ts.map +1 -0
  33. package/dist/src/lib/transferBuilder.js +82 -0
  34. package/dist/src/lib/trustsetBuilder.d.ts +21 -0
  35. package/dist/src/lib/trustsetBuilder.d.ts.map +1 -0
  36. package/dist/src/lib/trustsetBuilder.js +72 -0
  37. package/dist/src/lib/utils.d.ts +78 -0
  38. package/dist/src/lib/utils.d.ts.map +1 -0
  39. package/dist/src/lib/utils.js +304 -0
  40. package/dist/src/lib/walletInitializationBuilder.d.ts +19 -0
  41. package/dist/src/lib/walletInitializationBuilder.d.ts.map +1 -0
  42. package/dist/src/lib/walletInitializationBuilder.js +76 -0
  43. package/dist/src/register.d.ts.map +1 -1
  44. package/dist/src/register.js +5 -1
  45. package/dist/src/ripple.d.ts +112 -2
  46. package/dist/src/ripple.d.ts.map +1 -1
  47. package/dist/src/ripple.js +57 -22
  48. package/dist/src/txrp.d.ts +3 -2
  49. package/dist/src/txrp.d.ts.map +1 -1
  50. package/dist/src/txrp.js +5 -5
  51. package/dist/src/xrp.d.ts +25 -64
  52. package/dist/src/xrp.d.ts.map +1 -1
  53. package/dist/src/xrp.js +375 -159
  54. package/dist/src/xrpToken.d.ts +22 -0
  55. package/dist/src/xrpToken.d.ts.map +1 -0
  56. package/dist/src/xrpToken.js +61 -0
  57. package/dist/tsconfig.tsbuildinfo +1 -8867
  58. package/package.json +15 -12
  59. package/.eslintignore +0 -5
  60. package/.mocharc.yml +0 -8
  61. package/CHANGELOG.md +0 -200
@@ -0,0 +1,82 @@
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.TransferBuilder = void 0;
7
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
8
+ const transactionBuilder_1 = require("./transactionBuilder");
9
+ const utils_1 = __importDefault(require("./utils"));
10
+ class TransferBuilder extends transactionBuilder_1.TransactionBuilder {
11
+ constructor(_coinConfig) {
12
+ super(_coinConfig);
13
+ }
14
+ get transactionType() {
15
+ return sdk_core_1.TransactionType.Send;
16
+ }
17
+ get xrpTransactionType() {
18
+ return 'Payment';
19
+ }
20
+ initBuilder(tx) {
21
+ super.initBuilder(tx);
22
+ const { destination, amount, destinationTag } = tx.toJson();
23
+ if (!destination) {
24
+ throw new sdk_core_1.BuildTransactionError('Missing destination');
25
+ }
26
+ if (!amount) {
27
+ throw new sdk_core_1.BuildTransactionError('Missing amount');
28
+ }
29
+ const normalizeAddress = utils_1.default.normalizeAddress({ address: destination, destinationTag });
30
+ this.to(normalizeAddress);
31
+ if (typeof amount !== 'string') {
32
+ throw new sdk_core_1.BuildTransactionError('Invalid Amount');
33
+ }
34
+ this.amount(amount);
35
+ }
36
+ /**
37
+ * Set the receiver address
38
+ * @param {string} address - the address with optional destination tag
39
+ * @returns {TransactionBuilder} This transaction builder
40
+ */
41
+ to(address) {
42
+ const { address: xrpAddress, destinationTag } = utils_1.default.getAddressDetails(address);
43
+ this._destination = xrpAddress;
44
+ this._destinationTag = destinationTag;
45
+ return this;
46
+ }
47
+ /**
48
+ * Set the amount to send
49
+ * @param {string} amount - the amount sent
50
+ * @returns {TransactionBuilder} This transaction builder
51
+ */
52
+ amount(amount) {
53
+ if (typeof amount !== 'string') {
54
+ throw new Error(`amount type ${typeof amount} must be a string`);
55
+ }
56
+ const amountBigInt = BigInt(amount);
57
+ if (amountBigInt < 0) {
58
+ throw new Error(`amount ${amount} is not valid`);
59
+ }
60
+ this._amount = amount;
61
+ return this;
62
+ }
63
+ /** @inheritdoc */
64
+ async buildImplementation() {
65
+ if (!this._sender) {
66
+ throw new sdk_core_1.BuildTransactionError('Sender must be set before building the transaction');
67
+ }
68
+ const transferFields = {
69
+ TransactionType: this.xrpTransactionType,
70
+ Account: this._sender,
71
+ Destination: this._destination,
72
+ Amount: this._amount,
73
+ };
74
+ if (typeof this._destinationTag === 'number') {
75
+ transferFields.DestinationTag = this._destinationTag;
76
+ }
77
+ this._specificFields = transferFields;
78
+ return await super.buildImplementation();
79
+ }
80
+ }
81
+ exports.TransferBuilder = TransferBuilder;
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBQThFO0FBSTlFLDZEQUEwRDtBQUMxRCxvREFBNEI7QUFFNUIsTUFBYSxlQUFnQixTQUFRLHVDQUFrQjtJQUtyRCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBYyxlQUFlO1FBQzNCLE9BQU8sMEJBQWUsQ0FBQyxJQUFJLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQWMsa0JBQWtCO1FBQzlCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxXQUFXLENBQUMsRUFBZTtRQUN6QixLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXRCLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM1RCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDekQsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLGVBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUMxRixJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDMUIsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUksZ0NBQXFCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEVBQUUsQ0FBQyxPQUFlO1FBQ2hCLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxHQUFHLGVBQUssQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQztRQUMvQixJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQztRQUN0QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLE1BQWM7UUFDbkIsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsT0FBTyxNQUFNLG1CQUFtQixDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUNELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxJQUFJLFlBQVksR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsTUFBTSxlQUFlLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCO0lBQ1IsS0FBSyxDQUFDLG1CQUFtQjtRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBWTtZQUM5QixlQUFlLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtZQUN4QyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsV0FBVyxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQzlCLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTztTQUNyQixDQUFDO1FBRUYsSUFBSSxPQUFPLElBQUksQ0FBQyxlQUFlLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDN0MsY0FBYyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ3ZELENBQUM7UUFFRCxJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQztRQUV0QyxPQUFPLE1BQU0sS0FBSyxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDM0MsQ0FBQztDQUNGO0FBdEZELDBDQXNGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgQW1vdW50LCBQYXltZW50IH0gZnJvbSAneHJwbCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNmZXJCdWlsZGVyIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJpdmF0ZSBfYW1vdW50OiBBbW91bnQ7XG4gIHByaXZhdGUgX2Rlc3RpbmF0aW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Rlc3RpbmF0aW9uVGFnPzogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TZW5kO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB4cnBUcmFuc2FjdGlvblR5cGUoKTogJ1BheW1lbnQnIHtcbiAgICByZXR1cm4gJ1BheW1lbnQnO1xuICB9XG5cbiAgaW5pdEJ1aWxkZXIodHg6IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgc3VwZXIuaW5pdEJ1aWxkZXIodHgpO1xuXG4gICAgY29uc3QgeyBkZXN0aW5hdGlvbiwgYW1vdW50LCBkZXN0aW5hdGlvblRhZyB9ID0gdHgudG9Kc29uKCk7XG4gICAgaWYgKCFkZXN0aW5hdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTWlzc2luZyBkZXN0aW5hdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIWFtb3VudCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTWlzc2luZyBhbW91bnQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxpemVBZGRyZXNzID0gdXRpbHMubm9ybWFsaXplQWRkcmVzcyh7IGFkZHJlc3M6IGRlc3RpbmF0aW9uLCBkZXN0aW5hdGlvblRhZyB9KTtcbiAgICB0aGlzLnRvKG5vcm1hbGl6ZUFkZHJlc3MpO1xuICAgIGlmICh0eXBlb2YgYW1vdW50ICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBBbW91bnQnKTtcbiAgICB9XG4gICAgdGhpcy5hbW91bnQoYW1vdW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgU2V0IHRoZSByZWNlaXZlciBhZGRyZXNzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzIC0gdGhlIGFkZHJlc3Mgd2l0aCBvcHRpb25hbCBkZXN0aW5hdGlvbiB0YWdcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICB0byhhZGRyZXNzOiBzdHJpbmcpOiBUcmFuc2ZlckJ1aWxkZXIge1xuICAgIGNvbnN0IHsgYWRkcmVzczogeHJwQWRkcmVzcywgZGVzdGluYXRpb25UYWcgfSA9IHV0aWxzLmdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3MpO1xuICAgIHRoaXMuX2Rlc3RpbmF0aW9uID0geHJwQWRkcmVzcztcbiAgICB0aGlzLl9kZXN0aW5hdGlvblRhZyA9IGRlc3RpbmF0aW9uVGFnO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqICBTZXQgdGhlIGFtb3VudCB0byBzZW5kXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbW91bnQgLSB0aGUgYW1vdW50IHNlbnRcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBhbW91bnQoYW1vdW50OiBzdHJpbmcpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIGlmICh0eXBlb2YgYW1vdW50ICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBhbW91bnQgdHlwZSAke3R5cGVvZiBhbW91bnR9IG11c3QgYmUgYSBzdHJpbmdgKTtcbiAgICB9XG4gICAgY29uc3QgYW1vdW50QmlnSW50ID0gQmlnSW50KGFtb3VudCk7XG4gICAgaWYgKGFtb3VudEJpZ0ludCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgYW1vdW50ICR7YW1vdW50fSBpcyBub3QgdmFsaWRgKTtcbiAgICB9XG4gICAgdGhpcy5fYW1vdW50ID0gYW1vdW50O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBpZiAoIXRoaXMuX3NlbmRlcikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignU2VuZGVyIG11c3QgYmUgc2V0IGJlZm9yZSBidWlsZGluZyB0aGUgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2ZlckZpZWxkczogUGF5bWVudCA9IHtcbiAgICAgIFRyYW5zYWN0aW9uVHlwZTogdGhpcy54cnBUcmFuc2FjdGlvblR5cGUsXG4gICAgICBBY2NvdW50OiB0aGlzLl9zZW5kZXIsXG4gICAgICBEZXN0aW5hdGlvbjogdGhpcy5fZGVzdGluYXRpb24sXG4gICAgICBBbW91bnQ6IHRoaXMuX2Ftb3VudCxcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLl9kZXN0aW5hdGlvblRhZyA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRyYW5zZmVyRmllbGRzLkRlc3RpbmF0aW9uVGFnID0gdGhpcy5fZGVzdGluYXRpb25UYWc7XG4gICAgfVxuXG4gICAgdGhpcy5fc3BlY2lmaWNGaWVsZHMgPSB0cmFuc2ZlckZpZWxkcztcblxuICAgIHJldHVybiBhd2FpdCBzdXBlci5idWlsZEltcGxlbWVudGF0aW9uKCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,21 @@
1
+ import { TransactionType } from '@bitgo-beta/sdk-core';
2
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
+ import { XrpTransactionType } from './iface';
4
+ import { Transaction } from './transaction';
5
+ import { TransactionBuilder } from './transactionBuilder';
6
+ export declare class TrustSetBuilder extends TransactionBuilder {
7
+ private _amount;
8
+ constructor(_coinConfig: Readonly<CoinConfig>);
9
+ protected get transactionType(): TransactionType;
10
+ protected get xrpTransactionType(): XrpTransactionType.TrustSet;
11
+ initBuilder(tx: Transaction): void;
12
+ /**
13
+ * Set the amount to send
14
+ * @param {string} amount - the amount sent
15
+ * @returns {TransactionBuilder} This transaction builder
16
+ */
17
+ amount(amount: string): TransactionBuilder;
18
+ /** @inheritdoc */
19
+ protected buildImplementation(): Promise<Transaction>;
20
+ }
21
+ //# sourceMappingURL=trustsetBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trustsetBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/trustsetBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,qBAAa,eAAgB,SAAQ,kBAAkB;IACrD,OAAO,CAAC,OAAO,CAAuB;gBAE1B,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED,SAAS,KAAK,kBAAkB,IAAI,kBAAkB,CAAC,QAAQ,CAE9D;IAED,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAelC;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB;IAkB1C,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;CAe5D"}
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1c3RzZXRCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cnVzdHNldEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBQThFO0FBRTlFLGdFQUFxQztBQUVyQyxtQ0FBNkM7QUFFN0MsNkRBQTBEO0FBQzFELG9EQUE0QjtBQUU1QixNQUFhLGVBQWdCLFNBQVEsdUNBQWtCO0lBR3JELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLFNBQVMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBYyxrQkFBa0I7UUFDOUIsT0FBTywwQkFBa0IsQ0FBQyxRQUFRLENBQUM7SUFDckMsQ0FBQztJQUVELFdBQVcsQ0FBQyxFQUFlO1FBQ3pCLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdEIsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLElBQUksZ0NBQXFCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQUssQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFDRCxpR0FBaUc7UUFDakcsTUFBTSxZQUFZLEdBQUcsSUFBQSxzQkFBUyxFQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN2RixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLE1BQWM7UUFDbkIsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsT0FBTyxNQUFNLG1CQUFtQixDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUNELE1BQU0sWUFBWSxHQUFHLElBQUEsc0JBQVMsRUFBQyxNQUFNLENBQUMsQ0FBQztRQUN2QyxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsTUFBTSxlQUFlLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsTUFBTSxRQUFRLEdBQUcsZUFBSyxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUUsMkVBQTJFO1FBQzNFLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwRixJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ2IsS0FBSyxFQUFFLEtBQUs7WUFDWixHQUFHLFFBQVE7U0FDWixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCO0lBQ1IsS0FBSyxDQUFDLG1CQUFtQjtRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBYTtZQUMvQixlQUFlLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtZQUN4QyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQzFCLENBQUM7UUFFRixJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQztRQUV0QyxPQUFPLE1BQU0sS0FBSyxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDM0MsQ0FBQztDQUNGO0FBckVELDBDQXFFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgSXNzdWVkQ3VycmVuY3lBbW91bnQsIFRydXN0U2V0IH0gZnJvbSAneHJwbCc7XG5pbXBvcnQgeyBYcnBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBUcnVzdFNldEJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcml2YXRlIF9hbW91bnQ6IElzc3VlZEN1cnJlbmN5QW1vdW50O1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5UcnVzdExpbmU7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHhycFRyYW5zYWN0aW9uVHlwZSgpOiBYcnBUcmFuc2FjdGlvblR5cGUuVHJ1c3RTZXQge1xuICAgIHJldHVybiBYcnBUcmFuc2FjdGlvblR5cGUuVHJ1c3RTZXQ7XG4gIH1cblxuICBpbml0QnVpbGRlcih0eDogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBzdXBlci5pbml0QnVpbGRlcih0eCk7XG5cbiAgICBjb25zdCB7IGFtb3VudCB9ID0gdHgudG9Kc29uKCk7XG4gICAgaWYgKCFhbW91bnQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ01pc3NpbmcgYW1vdW50Jyk7XG4gICAgfVxuICAgIGlmICghdXRpbHMuaXNJc3N1ZWRDdXJyZW5jeUFtb3VudChhbW91bnQpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIExpbWl0IEFtb3VudCcpO1xuICAgIH1cbiAgICAvLyBUaGUgYW1vdW50IGlzIHJlcHJlc2VudGVkIGluIGRlY2ltYWwgbm90YXRpb24sIHNvIHdlIG5lZWQgdG8gbXVsdGlwbHkgaXQgYnkgdGhlIGRlY2ltYWwgcGxhY2VzXG4gICAgY29uc3QgYW1vdW50QmlnTnVtID0gQmlnTnVtYmVyKGFtb3VudC52YWx1ZSkuc2hpZnRlZEJ5KHRoaXMuX2NvaW5Db25maWcuZGVjaW1hbFBsYWNlcyk7XG4gICAgdGhpcy5hbW91bnQoYW1vdW50QmlnTnVtLnRvRml4ZWQoKSk7XG4gIH1cblxuICAvKipcbiAgICogIFNldCB0aGUgYW1vdW50IHRvIHNlbmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFtb3VudCAtIHRoZSBhbW91bnQgc2VudFxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIGFtb3VudChhbW91bnQ6IHN0cmluZyk6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgaWYgKHR5cGVvZiBhbW91bnQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGFtb3VudCB0eXBlICR7dHlwZW9mIGFtb3VudH0gbXVzdCBiZSBhIHN0cmluZ2ApO1xuICAgIH1cbiAgICBjb25zdCBhbW91bnRCaWdOdW0gPSBCaWdOdW1iZXIoYW1vdW50KTtcbiAgICBpZiAoYW1vdW50QmlnTnVtLmx0KDApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGFtb3VudCAke2Ftb3VudH0gaXMgbm90IHZhbGlkYCk7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbmN5ID0gdXRpbHMuZ2V0WHJwQ3VycmVuY3lGcm9tVG9rZW5OYW1lKHRoaXMuX2NvaW5Db25maWcubmFtZSk7XG4gICAgLy8gVW5saWtlIG1vc3QgY29pbnMsIFhSUCBUb2tlbiBhbW91bnRzIGFyZSByZXByZXNlbnRlZCBpbiBkZWNpbWFsIG5vdGF0aW9uXG4gICAgY29uc3QgdmFsdWUgPSBhbW91bnRCaWdOdW0uc2hpZnRlZEJ5KC0xICogdGhpcy5fY29pbkNvbmZpZy5kZWNpbWFsUGxhY2VzKS50b0ZpeGVkKCk7XG4gICAgdGhpcy5fYW1vdW50ID0ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgLi4uY3VycmVuY3ksXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgaWYgKCF0aGlzLl9zZW5kZXIpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1NlbmRlciBtdXN0IGJlIHNldCBiZWZvcmUgYnVpbGRpbmcgdGhlIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJ1c3RTZXRGaWVsZHM6IFRydXN0U2V0ID0ge1xuICAgICAgVHJhbnNhY3Rpb25UeXBlOiB0aGlzLnhycFRyYW5zYWN0aW9uVHlwZSxcbiAgICAgIEFjY291bnQ6IHRoaXMuX3NlbmRlcixcbiAgICAgIExpbWl0QW1vdW50OiB0aGlzLl9hbW91bnQsXG4gICAgfTtcblxuICAgIHRoaXMuX3NwZWNpZmljRmllbGRzID0gdHJ1c3RTZXRGaWVsZHM7XG5cbiAgICByZXR1cm4gYXdhaXQgc3VwZXIuYnVpbGRJbXBsZW1lbnRhdGlvbigpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,78 @@
1
+ import { BaseUtils } from '@bitgo-beta/sdk-core';
2
+ import { BaseCoin } from '@bitgo-beta/statics';
3
+ import * as xrpl from 'xrpl';
4
+ import { Amount, IssuedCurrencyAmount } from 'xrpl';
5
+ import { Address, SignerDetails } from './iface';
6
+ declare class Utils implements BaseUtils {
7
+ isValidAddress(address: string): boolean;
8
+ isValidTransactionId(txId: string): boolean;
9
+ isValidPublicKey(key: string): boolean;
10
+ isValidPrivateKey(key: string): boolean;
11
+ isValidSignature(signature: string): boolean;
12
+ isValidBlockId(hash: string): boolean;
13
+ isValidHex(hex: string): boolean;
14
+ /**
15
+ * Parse an address string into address and destination tag
16
+ */
17
+ getAddressDetails(address: string): Address;
18
+ /**
19
+ * Construct a full, normalized address from an address and destination tag
20
+ */
21
+ normalizeAddress({ address, destinationTag }: Address): string;
22
+ /**
23
+ * @param message hex encoded string
24
+ * @param privateKey
25
+ * return hex encoded signature string, throws if any of the inputs are invalid
26
+ */
27
+ signString(message: string, privateKey: string): string;
28
+ /**
29
+ * @param message hex encoded string
30
+ * @param signature hex encooded signature string
31
+ * @param publicKey
32
+ * return boolean, throws if any of the inputs are invalid
33
+ */
34
+ verifySignature(message: string, signature: string, publicKey: string): boolean;
35
+ /**
36
+ * Check the raw transaction has a valid format in the blockchain context, throw otherwise.
37
+ *
38
+ * @param {string} rawTransaction - Transaction in hex string format
39
+ */
40
+ validateRawTransaction(rawTransaction: string): void;
41
+ /**
42
+ * Checks if raw transaction can be deserialized
43
+ *
44
+ * @param {string} rawTransaction - transaction in base64 string format
45
+ * @returns {boolean} - the validation result
46
+ */
47
+ isValidRawTransaction(rawTransaction: string): boolean;
48
+ validateAccountSetFlag(setFlag: number): void;
49
+ validateSigner(signer: SignerDetails): void;
50
+ /**
51
+ * Determines if the provided `amount` is for a token payment
52
+ */
53
+ isIssuedCurrencyAmount(amount: Amount): amount is IssuedCurrencyAmount;
54
+ /**
55
+ * Get the associated XRP Currency details from token name. Throws an error if token is unsupported
56
+ * @param {string} tokenName - The token name
57
+ */
58
+ getXrpCurrencyFromTokenName(tokenName: string): xrpl.IssuedCurrency;
59
+ /**
60
+ * Decodes a serialized XRPL transaction.
61
+ *
62
+ * @param {string} txHex - The serialized transaction in hex.
63
+ * @returns {Object} - Decoded transaction object.
64
+ * @throws {Error} - If decoding fails or input is invalid.
65
+ */
66
+ decodeTransaction(txHex: string): Record<string, unknown>;
67
+ /**
68
+ * Get the statics coin object matching a given Xrp token issuer address and currency code if it exists
69
+ *
70
+ * @param issuerAddress The token issuer address to match against
71
+ * @param currencyCode The token currency code to match against
72
+ * @returns statics BaseCoin object for the matching token
73
+ */
74
+ getXrpToken(issuerAddress: any, currencyCode: any): Readonly<BaseCoin> | undefined;
75
+ }
76
+ declare const utils: Utils;
77
+ export default utils;
78
+ //# 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;AAC9B,OAAO,EAAE,QAAQ,EAAkB,MAAM,qBAAqB,CAAC;AAI/D,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;AAIjD,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;IAWtC;;;;;;OAMG;IACI,WAAW,CAAC,aAAa,KAAA,EAAE,YAAY,KAAA,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS;CAehF;AAED,QAAA,MAAM,KAAK,OAAc,CAAC;AAE1B,eAAe,KAAK,CAAC"}
@@ -0,0 +1,304 @@
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 () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
40
+ const statics_1 = require("@bitgo-beta/statics");
41
+ const querystring = __importStar(require("querystring"));
42
+ const rippleKeypairs = __importStar(require("ripple-keypairs"));
43
+ const url = __importStar(require("url"));
44
+ const xrpl = __importStar(require("xrpl"));
45
+ const constants_1 = require("./constants");
46
+ const keyPair_1 = require("./keyPair");
47
+ const assert_1 = __importDefault(require("assert"));
48
+ class Utils {
49
+ isValidAddress(address) {
50
+ try {
51
+ const addressDetails = this.getAddressDetails(address);
52
+ return address === this.normalizeAddress(addressDetails);
53
+ }
54
+ catch (e) {
55
+ return false;
56
+ }
57
+ }
58
+ isValidTransactionId(txId) {
59
+ return this.isValidHex(txId);
60
+ }
61
+ isValidPublicKey(key) {
62
+ try {
63
+ new keyPair_1.KeyPair({ pub: key });
64
+ return true;
65
+ }
66
+ catch {
67
+ return false;
68
+ }
69
+ }
70
+ isValidPrivateKey(key) {
71
+ try {
72
+ new keyPair_1.KeyPair({ prv: key });
73
+ return true;
74
+ }
75
+ catch {
76
+ return false;
77
+ }
78
+ }
79
+ isValidSignature(signature) {
80
+ return this.isValidHex(signature);
81
+ }
82
+ isValidBlockId(hash) {
83
+ return this.isValidHex(hash);
84
+ }
85
+ isValidHex(hex) {
86
+ return /^([a-fA-F0-9])+$/.test(hex);
87
+ }
88
+ /**
89
+ * Parse an address string into address and destination tag
90
+ */
91
+ getAddressDetails(address) {
92
+ const destinationDetails = url.parse(address);
93
+ const destinationAddress = destinationDetails.pathname;
94
+ if (!destinationAddress || !xrpl.isValidClassicAddress(destinationAddress)) {
95
+ throw new sdk_core_1.InvalidAddressError(`destination address "${destinationAddress}" is not valid`);
96
+ }
97
+ // there are no other properties like destination tags
98
+ if (destinationDetails.pathname === address) {
99
+ return {
100
+ address: address,
101
+ destinationTag: undefined,
102
+ };
103
+ }
104
+ if (!destinationDetails.query) {
105
+ throw new sdk_core_1.InvalidAddressError('no query params present');
106
+ }
107
+ const queryDetails = querystring.parse(destinationDetails.query);
108
+ if (!queryDetails.dt) {
109
+ // if there are more properties, the query details need to contain the destination tag property.
110
+ throw new sdk_core_1.InvalidAddressError('destination tag missing');
111
+ }
112
+ if (Array.isArray(queryDetails.dt)) {
113
+ // if queryDetails.dt is an array, that means dt was given multiple times, which is not valid
114
+ throw new sdk_core_1.InvalidAddressError(`destination tag can appear at most once, but ${queryDetails.dt.length} destination tags were found`);
115
+ }
116
+ const parsedTag = parseInt(queryDetails.dt, 10);
117
+ if (!Number.isSafeInteger(parsedTag)) {
118
+ throw new sdk_core_1.InvalidAddressError('invalid destination tag');
119
+ }
120
+ if (parsedTag > 0xffffffff || parsedTag < 0) {
121
+ throw new sdk_core_1.InvalidAddressError('destination tag out of range');
122
+ }
123
+ return {
124
+ address: destinationAddress,
125
+ destinationTag: parsedTag,
126
+ };
127
+ }
128
+ /**
129
+ * Construct a full, normalized address from an address and destination tag
130
+ */
131
+ normalizeAddress({ address, destinationTag }) {
132
+ if (typeof address !== 'string') {
133
+ throw new sdk_core_1.InvalidAddressError('invalid address, expected string');
134
+ }
135
+ if (typeof destinationTag === 'undefined' || destinationTag === null) {
136
+ return address;
137
+ }
138
+ if (!Number.isInteger(destinationTag)) {
139
+ throw new sdk_core_1.InvalidAddressError('invalid destination tag, expected integer');
140
+ }
141
+ if (destinationTag > 0xffffffff || destinationTag < 0) {
142
+ throw new sdk_core_1.InvalidAddressError('destination tag out of range');
143
+ }
144
+ return `${address}?dt=${destinationTag}`;
145
+ }
146
+ /**
147
+ * @param message hex encoded string
148
+ * @param privateKey
149
+ * return hex encoded signature string, throws if any of the inputs are invalid
150
+ */
151
+ signString(message, privateKey) {
152
+ if (!this.isValidHex(message)) {
153
+ throw new sdk_core_1.UtilsError('message must be a hex encoded string');
154
+ }
155
+ if (!this.isValidPrivateKey(privateKey)) {
156
+ throw new sdk_core_1.UtilsError('invalid private key');
157
+ }
158
+ return rippleKeypairs.sign(message, privateKey);
159
+ }
160
+ /**
161
+ * @param message hex encoded string
162
+ * @param signature hex encooded signature string
163
+ * @param publicKey
164
+ * return boolean, throws if any of the inputs are invalid
165
+ */
166
+ verifySignature(message, signature, publicKey) {
167
+ if (!this.isValidHex(message)) {
168
+ throw new sdk_core_1.UtilsError('message must be a hex encoded string');
169
+ }
170
+ if (!this.isValidSignature(signature)) {
171
+ throw new sdk_core_1.UtilsError('invalid signature');
172
+ }
173
+ if (!this.isValidPublicKey(publicKey)) {
174
+ throw new sdk_core_1.UtilsError('invalid public key');
175
+ }
176
+ try {
177
+ return rippleKeypairs.verify(message, signature, publicKey);
178
+ }
179
+ catch (e) {
180
+ return false;
181
+ }
182
+ }
183
+ /**
184
+ * Check the raw transaction has a valid format in the blockchain context, throw otherwise.
185
+ *
186
+ * @param {string} rawTransaction - Transaction in hex string format
187
+ */
188
+ validateRawTransaction(rawTransaction) {
189
+ if (!rawTransaction) {
190
+ throw new sdk_core_1.InvalidTransactionError('Invalid raw transaction: Undefined');
191
+ }
192
+ if (!this.isValidHex(rawTransaction)) {
193
+ throw new sdk_core_1.InvalidTransactionError('Invalid raw transaction: Hex string expected');
194
+ }
195
+ if (!this.isValidRawTransaction(rawTransaction)) {
196
+ throw new sdk_core_1.InvalidTransactionError('Invalid raw transaction');
197
+ }
198
+ }
199
+ /**
200
+ * Checks if raw transaction can be deserialized
201
+ *
202
+ * @param {string} rawTransaction - transaction in base64 string format
203
+ * @returns {boolean} - the validation result
204
+ */
205
+ isValidRawTransaction(rawTransaction) {
206
+ try {
207
+ const jsonTx = xrpl.decode(rawTransaction);
208
+ xrpl.validate(jsonTx);
209
+ return true;
210
+ }
211
+ catch (e) {
212
+ return false;
213
+ }
214
+ }
215
+ validateAccountSetFlag(setFlag) {
216
+ if (typeof setFlag !== 'number') {
217
+ throw new sdk_core_1.UtilsError(`setFlag ${setFlag} is not valid`);
218
+ }
219
+ if (!constants_1.VALID_ACCOUNT_SET_FLAGS.includes(setFlag)) {
220
+ throw new sdk_core_1.UtilsError(`setFlag ${setFlag} is not a valid account set flag`);
221
+ }
222
+ }
223
+ validateSigner(signer) {
224
+ if (!signer.address) {
225
+ throw new sdk_core_1.UtilsError('signer must have an address');
226
+ }
227
+ if (!this.isValidAddress(signer.address)) {
228
+ throw new sdk_core_1.UtilsError(`signer address ${signer.address} is invalid`);
229
+ }
230
+ if (typeof signer.weight !== 'number' || signer.weight < 0) {
231
+ throw new sdk_core_1.UtilsError(`signer weight ${signer.weight} is not valid`);
232
+ }
233
+ }
234
+ /**
235
+ * Determines if the provided `amount` is for a token payment
236
+ */
237
+ isIssuedCurrencyAmount(amount) {
238
+ return (!!amount &&
239
+ typeof amount === 'object' &&
240
+ typeof amount.currency === 'string' &&
241
+ typeof amount.issuer === 'string' &&
242
+ typeof amount.value === 'string');
243
+ }
244
+ /**
245
+ * Get the associated XRP Currency details from token name. Throws an error if token is unsupported
246
+ * @param {string} tokenName - The token name
247
+ */
248
+ getXrpCurrencyFromTokenName(tokenName) {
249
+ if (!statics_1.coins.has(tokenName)) {
250
+ throw new sdk_core_1.UnsupportedTokenError(`${tokenName} is not supported`);
251
+ }
252
+ const token = statics_1.coins.get(tokenName);
253
+ if (!token.isToken || !(token instanceof statics_1.XrpCoin)) {
254
+ throw new sdk_core_1.UnsupportedTokenError(`${tokenName} is not an XRP token`);
255
+ }
256
+ return {
257
+ currency: token.currencyCode,
258
+ issuer: token.issuerAddress,
259
+ };
260
+ }
261
+ /**
262
+ * Decodes a serialized XRPL transaction.
263
+ *
264
+ * @param {string} txHex - The serialized transaction in hex.
265
+ * @returns {Object} - Decoded transaction object.
266
+ * @throws {Error} - If decoding fails or input is invalid.
267
+ */
268
+ decodeTransaction(txHex) {
269
+ if (typeof txHex !== 'string' || txHex.trim() === '') {
270
+ throw new Error('Invalid transaction hex. Expected a non-empty string.');
271
+ }
272
+ try {
273
+ return xrpl.decode(txHex);
274
+ }
275
+ catch (error) {
276
+ throw new Error(`Failed to decode transaction: ${error.message}`);
277
+ }
278
+ }
279
+ /**
280
+ * Get the statics coin object matching a given Xrp token issuer address and currency code if it exists
281
+ *
282
+ * @param issuerAddress The token issuer address to match against
283
+ * @param currencyCode The token currency code to match against
284
+ * @returns statics BaseCoin object for the matching token
285
+ */
286
+ getXrpToken(issuerAddress, currencyCode) {
287
+ const tokens = statics_1.coins.filter((coin) => {
288
+ if (coin instanceof statics_1.XrpCoin) {
289
+ return coin.issuerAddress === issuerAddress && coin.currencyCode === currencyCode;
290
+ }
291
+ return false;
292
+ });
293
+ const tokensArray = tokens.map((token) => token);
294
+ if (tokensArray.length >= 1) {
295
+ // there should never be two tokens with the same issuer address and currency code, so we assert that here
296
+ (0, assert_1.default)(tokensArray.length === 1);
297
+ return tokensArray[0];
298
+ }
299
+ return undefined;
300
+ }
301
+ }
302
+ const utils = new Utils();
303
+ exports.default = utils;
304
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbURBTThCO0FBQzlCLGlEQUErRDtBQUMvRCx5REFBMkM7QUFDM0MsZ0VBQWtEO0FBQ2xELHlDQUEyQjtBQUMzQiwyQ0FBNkI7QUFFN0IsMkNBQXNEO0FBRXRELHVDQUFrRDtBQUNsRCxvREFBNEI7QUFFNUIsTUFBTSxLQUFLO0lBQ1QsY0FBYyxDQUFDLE9BQWU7UUFDNUIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZELE9BQU8sT0FBTyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFZO1FBQy9CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBVztRQUMxQixJQUFJLENBQUM7WUFDSCxJQUFJLGlCQUFVLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUM3QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsR0FBVztRQUMzQixJQUFJLENBQUM7WUFDSCxJQUFJLGlCQUFVLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUM3QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFBQyxNQUFN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QztZQUNwRixDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pELElBQUksV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM1QiwwR0FBMEc7WUFDMUcsSUFBQSxnQkFBTSxFQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDakMsT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEIsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQUVELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFFMUIsa0JBQWUsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmFzZVV0aWxzLFxuICBJbnZhbGlkQWRkcmVzc0Vycm9yLFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgVW5zdXBwb3J0ZWRUb2tlbkVycm9yLFxuICBVdGlsc0Vycm9yLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiwgY29pbnMsIFhycENvaW4gfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCAqIGFzIHF1ZXJ5c3RyaW5nIGZyb20gJ3F1ZXJ5c3RyaW5nJztcbmltcG9ydCAqIGFzIHJpcHBsZUtleXBhaXJzIGZyb20gJ3JpcHBsZS1rZXlwYWlycyc7XG5pbXBvcnQgKiBhcyB1cmwgZnJvbSAndXJsJztcbmltcG9ydCAqIGFzIHhycGwgZnJvbSAneHJwbCc7XG5pbXBvcnQgeyBBbW91bnQsIElzc3VlZEN1cnJlbmN5QW1vdW50IH0gZnJvbSAneHJwbCc7XG5pbXBvcnQgeyBWQUxJRF9BQ0NPVU5UX1NFVF9GTEFHUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IEFkZHJlc3MsIFNpZ25lckRldGFpbHMgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEtleVBhaXIgYXMgWHJwS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmNsYXNzIFV0aWxzIGltcGxlbWVudHMgQmFzZVV0aWxzIHtcbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFkZHJlc3NEZXRhaWxzID0gdGhpcy5nZXRBZGRyZXNzRGV0YWlscyhhZGRyZXNzKTtcbiAgICAgIHJldHVybiBhZGRyZXNzID09PSB0aGlzLm5vcm1hbGl6ZUFkZHJlc3MoYWRkcmVzc0RldGFpbHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkSGV4KHR4SWQpO1xuICB9XG5cbiAgaXNWYWxpZFB1YmxpY0tleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBuZXcgWHJwS2V5UGFpcih7IHB1Yjoga2V5IH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaXNWYWxpZFByaXZhdGVLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgbmV3IFhycEtleVBhaXIoeyBwcnY6IGtleSB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlzVmFsaWRTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkSGV4KHNpZ25hdHVyZSk7XG4gIH1cblxuICBpc1ZhbGlkQmxvY2tJZChoYXNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkSGV4KGhhc2gpO1xuICB9XG5cbiAgaXNWYWxpZEhleChoZXg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXihbYS1mQS1GMC05XSkrJC8udGVzdChoZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGFuIGFkZHJlc3Mgc3RyaW5nIGludG8gYWRkcmVzcyBhbmQgZGVzdGluYXRpb24gdGFnXG4gICAqL1xuICBwdWJsaWMgZ2V0QWRkcmVzc0RldGFpbHMoYWRkcmVzczogc3RyaW5nKTogQWRkcmVzcyB7XG4gICAgY29uc3QgZGVzdGluYXRpb25EZXRhaWxzID0gdXJsLnBhcnNlKGFkZHJlc3MpO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uQWRkcmVzcyA9IGRlc3RpbmF0aW9uRGV0YWlscy5wYXRobmFtZTtcbiAgICBpZiAoIWRlc3RpbmF0aW9uQWRkcmVzcyB8fCAheHJwbC5pc1ZhbGlkQ2xhc3NpY0FkZHJlc3MoZGVzdGluYXRpb25BZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYGRlc3RpbmF0aW9uIGFkZHJlc3MgXCIke2Rlc3RpbmF0aW9uQWRkcmVzc31cIiBpcyBub3QgdmFsaWRgKTtcbiAgICB9XG4gICAgLy8gdGhlcmUgYXJlIG5vIG90aGVyIHByb3BlcnRpZXMgbGlrZSBkZXN0aW5hdGlvbiB0YWdzXG4gICAgaWYgKGRlc3RpbmF0aW9uRGV0YWlscy5wYXRobmFtZSA9PT0gYWRkcmVzcykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWRkcmVzczogYWRkcmVzcyxcbiAgICAgICAgZGVzdGluYXRpb25UYWc6IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCFkZXN0aW5hdGlvbkRldGFpbHMucXVlcnkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKCdubyBxdWVyeSBwYXJhbXMgcHJlc2VudCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5RGV0YWlscyA9IHF1ZXJ5c3RyaW5nLnBhcnNlKGRlc3RpbmF0aW9uRGV0YWlscy5xdWVyeSk7XG4gICAgaWYgKCFxdWVyeURldGFpbHMuZHQpIHtcbiAgICAgIC8vIGlmIHRoZXJlIGFyZSBtb3JlIHByb3BlcnRpZXMsIHRoZSBxdWVyeSBkZXRhaWxzIG5lZWQgdG8gY29udGFpbiB0aGUgZGVzdGluYXRpb24gdGFnIHByb3BlcnR5LlxuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoJ2Rlc3RpbmF0aW9uIHRhZyBtaXNzaW5nJyk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocXVlcnlEZXRhaWxzLmR0KSkge1xuICAgICAgLy8gaWYgcXVlcnlEZXRhaWxzLmR0IGlzIGFuIGFycmF5LCB0aGF0IG1lYW5zIGR0IHdhcyBnaXZlbiBtdWx0aXBsZSB0aW1lcywgd2hpY2ggaXMgbm90IHZhbGlkXG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihcbiAgICAgICAgYGRlc3RpbmF0aW9uIHRhZyBjYW4gYXBwZWFyIGF0IG1vc3Qgb25jZSwgYnV0ICR7cXVlcnlEZXRhaWxzLmR0Lmxlbmd0aH0gZGVzdGluYXRpb24gdGFncyB3ZXJlIGZvdW5kYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRUYWcgPSBwYXJzZUludChxdWVyeURldGFpbHMuZHQsIDEwKTtcbiAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHBhcnNlZFRhZykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKCdpbnZhbGlkIGRlc3RpbmF0aW9uIHRhZycpO1xuICAgIH1cblxuICAgIGlmIChwYXJzZWRUYWcgPiAweGZmZmZmZmZmIHx8IHBhcnNlZFRhZyA8IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKCdkZXN0aW5hdGlvbiB0YWcgb3V0IG9mIHJhbmdlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFkZHJlc3M6IGRlc3RpbmF0aW9uQWRkcmVzcyxcbiAgICAgIGRlc3RpbmF0aW9uVGFnOiBwYXJzZWRUYWcsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBmdWxsLCBub3JtYWxpemVkIGFkZHJlc3MgZnJvbSBhbiBhZGRyZXNzIGFuZCBkZXN0aW5hdGlvbiB0YWdcbiAgICovXG4gIHB1YmxpYyBub3JtYWxpemVBZGRyZXNzKHsgYWRkcmVzcywgZGVzdGluYXRpb25UYWcgfTogQWRkcmVzcyk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBhZGRyZXNzICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoJ2ludmFsaWQgYWRkcmVzcywgZXhwZWN0ZWQgc3RyaW5nJyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGVzdGluYXRpb25UYWcgPT09ICd1bmRlZmluZWQnIHx8IGRlc3RpbmF0aW9uVGFnID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gYWRkcmVzcztcbiAgICB9XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGRlc3RpbmF0aW9uVGFnKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoJ2ludmFsaWQgZGVzdGluYXRpb24gdGFnLCBleHBlY3RlZCBpbnRlZ2VyJyk7XG4gICAgfVxuICAgIGlmIChkZXN0aW5hdGlvblRhZyA+IDB4ZmZmZmZmZmYgfHwgZGVzdGluYXRpb25UYWcgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcignZGVzdGluYXRpb24gdGFnIG91dCBvZiByYW5nZScpO1xuICAgIH1cbiAgICByZXR1cm4gYCR7YWRkcmVzc30/ZHQ9JHtkZXN0aW5hdGlvblRhZ31gO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBtZXNzYWdlIGhleCBlbmNvZGVkIHN0cmluZ1xuICAgKiBAcGFyYW0gcHJpdmF0ZUtleVxuICAgKiByZXR1cm4gaGV4IGVuY29kZWQgc2lnbmF0dXJlIHN0cmluZywgdGhyb3dzIGlmIGFueSBvZiB0aGUgaW5wdXRzIGFyZSBpbnZhbGlkXG4gICAqL1xuICBwdWJsaWMgc2lnblN0cmluZyhtZXNzYWdlOiBzdHJpbmcsIHByaXZhdGVLZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRIZXgobWVzc2FnZSkpIHtcbiAgICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdtZXNzYWdlIG11c3QgYmUgYSBoZXggZW5jb2RlZCBzdHJpbmcnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRQcml2YXRlS2V5KHByaXZhdGVLZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignaW52YWxpZCBwcml2YXRlIGtleScpO1xuICAgIH1cbiAgICByZXR1cm4gcmlwcGxlS2V5cGFpcnMuc2lnbihtZXNzYWdlLCBwcml2YXRlS2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gbWVzc2FnZSBoZXggZW5jb2RlZCBzdHJpbmdcbiAgICogQHBhcmFtIHNpZ25hdHVyZSBoZXggZW5jb29kZWQgc2lnbmF0dXJlIHN0cmluZ1xuICAgKiBAcGFyYW0gcHVibGljS2V5XG4gICAqIHJldHVybiBib29sZWFuLCB0aHJvd3MgaWYgYW55IG9mIHRoZSBpbnB1dHMgYXJlIGludmFsaWRcbiAgICovXG4gIHB1YmxpYyB2ZXJpZnlTaWduYXR1cmUobWVzc2FnZTogc3RyaW5nLCBzaWduYXR1cmU6IHN0cmluZywgcHVibGljS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZEhleChtZXNzYWdlKSkge1xuICAgICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ21lc3NhZ2UgbXVzdCBiZSBhIGhleCBlbmNvZGVkIHN0cmluZycpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNWYWxpZFNpZ25hdHVyZShzaWduYXR1cmUpKSB7XG4gICAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignaW52YWxpZCBzaWduYXR1cmUnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRQdWJsaWNLZXkocHVibGljS2V5KSkge1xuICAgICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ2ludmFsaWQgcHVibGljIGtleScpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJpcHBsZUtleXBhaXJzLnZlcmlmeShtZXNzYWdlLCBzaWduYXR1cmUsIHB1YmxpY0tleSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGUgcmF3IHRyYW5zYWN0aW9uIGhhcyBhIHZhbGlkIGZvcm1hdCBpbiB0aGUgYmxvY2tjaGFpbiBjb250ZXh0LCB0aHJvdyBvdGhlcndpc2UuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByYXdUcmFuc2FjdGlvbiAtIFRyYW5zYWN0aW9uIGluIGhleCBzdHJpbmcgZm9ybWF0XG4gICAqL1xuICBwdWJsaWMgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFyYXdUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHJhdyB0cmFuc2FjdGlvbjogVW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1ZhbGlkSGV4KHJhd1RyYW5zYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHJhdyB0cmFuc2FjdGlvbjogSGV4IHN0cmluZyBleHBlY3RlZCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHJhdyB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgcmF3IHRyYW5zYWN0aW9uIGNhbiBiZSBkZXNlcmlhbGl6ZWRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJhd1RyYW5zYWN0aW9uIC0gdHJhbnNhY3Rpb24gaW4gYmFzZTY0IHN0cmluZyBmb3JtYXRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gdGhlIHZhbGlkYXRpb24gcmVzdWx0XG4gICAqL1xuICBwdWJsaWMgaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QganNvblR4ID0geHJwbC5kZWNvZGUocmF3VHJhbnNhY3Rpb24pO1xuICAgICAgeHJwbC52YWxpZGF0ZShqc29uVHgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZUFjY291bnRTZXRGbGFnKHNldEZsYWc6IG51bWJlcikge1xuICAgIGlmICh0eXBlb2Ygc2V0RmxhZyAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKGBzZXRGbGFnICR7c2V0RmxhZ30gaXMgbm90IHZhbGlkYCk7XG4gICAgfVxuICAgIGlmICghVkFMSURfQUNDT1VOVF9TRVRfRkxBR1MuaW5jbHVkZXMoc2V0RmxhZykpIHtcbiAgICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKGBzZXRGbGFnICR7c2V0RmxhZ30gaXMgbm90IGEgdmFsaWQgYWNjb3VudCBzZXQgZmxhZ2ApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZVNpZ25lcihzaWduZXI6IFNpZ25lckRldGFpbHMpOiB2b2lkIHtcbiAgICBpZiAoIXNpZ25lci5hZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignc2lnbmVyIG11c3QgaGF2ZSBhbiBhZGRyZXNzJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhzaWduZXIuYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKGBzaWduZXIgYWRkcmVzcyAke3NpZ25lci5hZGRyZXNzfSBpcyBpbnZhbGlkYCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygc2lnbmVyLndlaWdodCAhPT0gJ251bWJlcicgfHwgc2lnbmVyLndlaWdodCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKGBzaWduZXIgd2VpZ2h0ICR7c2lnbmVyLndlaWdodH0gaXMgbm90IHZhbGlkYCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIHByb3ZpZGVkIGBhbW91bnRgIGlzIGZvciBhIHRva2VuIHBheW1lbnRcbiAgICovXG4gIHB1YmxpYyBpc0lzc3VlZEN1cnJlbmN5QW1vdW50KGFtb3VudDogQW1vdW50KTogYW1vdW50IGlzIElzc3VlZEN1cnJlbmN5QW1vdW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgISFhbW91bnQgJiZcbiAgICAgIHR5cGVvZiBhbW91bnQgPT09ICdvYmplY3QnICYmXG4gICAgICB0eXBlb2YgYW1vdW50LmN1cnJlbmN5ID09PSAnc3RyaW5nJyAmJlxuICAgICAgdHlwZW9mIGFtb3VudC5pc3N1ZXIgPT09ICdzdHJpbmcnICYmXG4gICAgICB0eXBlb2YgYW1vdW50LnZhbHVlID09PSAnc3RyaW5nJ1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBhc3NvY2lhdGVkIFhSUCBDdXJyZW5jeSBkZXRhaWxzIGZyb20gdG9rZW4gbmFtZS4gVGhyb3dzIGFuIGVycm9yIGlmIHRva2VuIGlzIHVuc3VwcG9ydGVkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlbk5hbWUgLSBUaGUgdG9rZW4gbmFtZVxuICAgKi9cbiAgcHVibGljIGdldFhycEN1cnJlbmN5RnJvbVRva2VuTmFtZSh0b2tlbk5hbWU6IHN0cmluZyk6IHhycGwuSXNzdWVkQ3VycmVuY3kge1xuICAgIGlmICghY29pbnMuaGFzKHRva2VuTmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZFRva2VuRXJyb3IoYCR7dG9rZW5OYW1lfSBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gICAgfVxuICAgIGNvbnN0IHRva2VuID0gY29pbnMuZ2V0KHRva2VuTmFtZSk7XG4gICAgaWYgKCF0b2tlbi5pc1Rva2VuIHx8ICEodG9rZW4gaW5zdGFuY2VvZiBYcnBDb2luKSkge1xuICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkVG9rZW5FcnJvcihgJHt0b2tlbk5hbWV9IGlzIG5vdCBhbiBYUlAgdG9rZW5gKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbmN5OiB0b2tlbi5jdXJyZW5jeUNvZGUsXG4gICAgICBpc3N1ZXI6IHRva2VuLmlzc3VlckFkZHJlc3MsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGVzIGEgc2VyaWFsaXplZCBYUlBMIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHhIZXggLSBUaGUgc2VyaWFsaXplZCB0cmFuc2FjdGlvbiBpbiBoZXguXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IC0gRGVjb2RlZCB0cmFuc2FjdGlvbiBvYmplY3QuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSAtIElmIGRlY29kaW5nIGZhaWxzIG9yIGlucHV0IGlzIGludmFsaWQuXG4gICAqL1xuICBwdWJsaWMgZGVjb2RlVHJhbnNhY3Rpb24odHhIZXg6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgdHhIZXggIT09ICdzdHJpbmcnIHx8IHR4SGV4LnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbiBoZXguIEV4cGVjdGVkIGEgbm9uLWVtcHR5IHN0cmluZy4nKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB4cnBsLmRlY29kZSh0eEhleCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGRlY29kZSB0cmFuc2FjdGlvbjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0YXRpY3MgY29pbiBvYmplY3QgbWF0Y2hpbmcgYSBnaXZlbiBYcnAgdG9rZW4gaXNzdWVyIGFkZHJlc3MgYW5kIGN1cnJlbmN5IGNvZGUgaWYgaXQgZXhpc3RzXG4gICAqXG4gICAqIEBwYXJhbSBpc3N1ZXJBZGRyZXNzIFRoZSB0b2tlbiBpc3N1ZXIgYWRkcmVzcyB0byBtYXRjaCBhZ2FpbnN0XG4gICAqIEBwYXJhbSBjdXJyZW5jeUNvZGUgVGhlIHRva2VuIGN1cnJlbmN5IGNvZGUgdG8gbWF0Y2ggYWdhaW5zdFxuICAgKiBAcmV0dXJucyBzdGF0aWNzIEJhc2VDb2luIG9iamVjdCBmb3IgdGhlIG1hdGNoaW5nIHRva2VuXG4gICAqL1xuICBwdWJsaWMgZ2V0WHJwVG9rZW4oaXNzdWVyQWRkcmVzcywgY3VycmVuY3lDb2RlKTogUmVhZG9ubHk8QmFzZUNvaW4+IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB0b2tlbnMgPSBjb2lucy5maWx0ZXIoKGNvaW4pID0+IHtcbiAgICAgIGlmIChjb2luIGluc3RhbmNlb2YgWHJwQ29pbikge1xuICAgICAgICByZXR1cm4gY29pbi5pc3N1ZXJBZGRyZXNzID09PSBpc3N1ZXJBZGRyZXNzICYmIGNvaW4uY3VycmVuY3lDb2RlID09PSBjdXJyZW5jeUNvZGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gICAgY29uc3QgdG9rZW5zQXJyYXkgPSB0b2tlbnMubWFwKCh0b2tlbikgPT4gdG9rZW4pO1xuICAgIGlmICh0b2tlbnNBcnJheS5sZW5ndGggPj0gMSkge1xuICAgICAgLy8gdGhlcmUgc2hvdWxkIG5ldmVyIGJlIHR3byB0b2tlbnMgd2l0aCB0aGUgc2FtZSBpc3N1ZXIgYWRkcmVzcyBhbmQgY3VycmVuY3kgY29kZSwgc28gd2UgYXNzZXJ0IHRoYXQgaGVyZVxuICAgICAgYXNzZXJ0KHRva2Vuc0FycmF5Lmxlbmd0aCA9PT0gMSk7XG4gICAgICByZXR1cm4gdG9rZW5zQXJyYXlbMF07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuY29uc3QgdXRpbHMgPSBuZXcgVXRpbHMoKTtcblxuZXhwb3J0IGRlZmF1bHQgdXRpbHM7XG4iXX0=
@@ -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"}