@bitgo-beta/sdk-coin-sui 3.0.3-beta.182 → 3.0.3-beta.1821

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 (196) hide show
  1. package/dist/src/index.d.ts +1 -0
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +7 -2
  4. package/dist/src/lib/compareTransactionBlocks.js +2 -3
  5. package/dist/src/lib/constants.d.ts +9 -2
  6. package/dist/src/lib/constants.d.ts.map +1 -1
  7. package/dist/src/lib/constants.js +18 -2
  8. package/dist/src/lib/customTransaction.js +3 -3
  9. package/dist/src/lib/customTransactionBuilder.js +5 -5
  10. package/dist/src/lib/iface.d.ts +80 -12
  11. package/dist/src/lib/iface.d.ts.map +1 -1
  12. package/dist/src/lib/iface.js +34 -5
  13. package/dist/src/lib/index.d.ts +6 -0
  14. package/dist/src/lib/index.d.ts.map +1 -1
  15. package/dist/src/lib/index.js +36 -10
  16. package/dist/src/lib/keyPair.js +24 -10
  17. package/dist/src/lib/mystenlab/builder/Inputs.d.ts +64 -11
  18. package/dist/src/lib/mystenlab/builder/Inputs.d.ts.map +1 -1
  19. package/dist/src/lib/mystenlab/builder/Inputs.js +63 -19
  20. package/dist/src/lib/mystenlab/builder/TransactionBlock.d.ts +88 -355
  21. package/dist/src/lib/mystenlab/builder/TransactionBlock.d.ts.map +1 -1
  22. package/dist/src/lib/mystenlab/builder/TransactionBlock.js +44 -25
  23. package/dist/src/lib/mystenlab/builder/TransactionDataBlock.d.ts +152 -77
  24. package/dist/src/lib/mystenlab/builder/TransactionDataBlock.d.ts.map +1 -1
  25. package/dist/src/lib/mystenlab/builder/TransactionDataBlock.js +54 -44
  26. package/dist/src/lib/mystenlab/builder/Transactions.d.ts +133 -188
  27. package/dist/src/lib/mystenlab/builder/Transactions.d.ts.map +1 -1
  28. package/dist/src/lib/mystenlab/builder/Transactions.js +52 -53
  29. package/dist/src/lib/mystenlab/builder/bcs.d.ts +1 -1
  30. package/dist/src/lib/mystenlab/builder/bcs.d.ts.map +1 -1
  31. package/dist/src/lib/mystenlab/builder/bcs.js +2 -2
  32. package/dist/src/lib/mystenlab/builder/index.js +6 -2
  33. package/dist/src/lib/mystenlab/builder/serializer.js +6 -8
  34. package/dist/src/lib/mystenlab/builder/utils.d.ts +1 -1
  35. package/dist/src/lib/mystenlab/builder/utils.d.ts.map +1 -1
  36. package/dist/src/lib/mystenlab/builder/utils.js +4 -4
  37. package/dist/src/lib/mystenlab/cryptography/hash.js +3 -4
  38. package/dist/src/lib/mystenlab/framework/framework.d.ts +6 -6
  39. package/dist/src/lib/mystenlab/framework/framework.d.ts.map +1 -1
  40. package/dist/src/lib/mystenlab/framework/framework.js +22 -25
  41. package/dist/src/lib/mystenlab/framework/index.js +6 -2
  42. package/dist/src/lib/mystenlab/framework/sui-system-state.js +2 -2
  43. package/dist/src/lib/mystenlab/txn-data-serializers/type-tag-serializer.js +2 -2
  44. package/dist/src/lib/mystenlab/types/coin.d.ts +13 -11
  45. package/dist/src/lib/mystenlab/types/coin.d.ts.map +1 -1
  46. package/dist/src/lib/mystenlab/types/coin.js +20 -19
  47. package/dist/src/lib/mystenlab/types/common.d.ts +8 -8
  48. package/dist/src/lib/mystenlab/types/common.d.ts.map +1 -1
  49. package/dist/src/lib/mystenlab/types/common.js +22 -22
  50. package/dist/src/lib/mystenlab/types/events.d.ts +15 -15
  51. package/dist/src/lib/mystenlab/types/events.d.ts.map +1 -1
  52. package/dist/src/lib/mystenlab/types/events.js +17 -17
  53. package/dist/src/lib/mystenlab/types/index.js +6 -2
  54. package/dist/src/lib/mystenlab/types/normalized.d.ts +21 -21
  55. package/dist/src/lib/mystenlab/types/normalized.d.ts.map +1 -1
  56. package/dist/src/lib/mystenlab/types/normalized.js +41 -41
  57. package/dist/src/lib/mystenlab/types/objects.d.ts +51 -51
  58. package/dist/src/lib/mystenlab/types/objects.d.ts.map +1 -1
  59. package/dist/src/lib/mystenlab/types/objects.js +96 -106
  60. package/dist/src/lib/mystenlab/types/option.d.ts +1 -1
  61. package/dist/src/lib/mystenlab/types/option.d.ts.map +1 -1
  62. package/dist/src/lib/mystenlab/types/option.js +2 -3
  63. package/dist/src/lib/mystenlab/types/sui-bcs.d.ts +55 -29
  64. package/dist/src/lib/mystenlab/types/sui-bcs.d.ts.map +1 -1
  65. package/dist/src/lib/mystenlab/types/sui-bcs.js +29 -5
  66. package/dist/src/lib/mystenlab/types/transactions.d.ts +625 -625
  67. package/dist/src/lib/mystenlab/types/transactions.d.ts.map +1 -1
  68. package/dist/src/lib/mystenlab/types/transactions.js +178 -194
  69. package/dist/src/lib/mystenlab/types/validator.d.ts +13 -13
  70. package/dist/src/lib/mystenlab/types/validator.d.ts.map +1 -1
  71. package/dist/src/lib/mystenlab/types/validator.js +124 -124
  72. package/dist/src/lib/resources/walrusConfig.d.ts +22 -0
  73. package/dist/src/lib/resources/walrusConfig.d.ts.map +1 -0
  74. package/dist/src/lib/resources/walrusConfig.js +37 -0
  75. package/dist/src/lib/rpcClient.d.ts +5 -0
  76. package/dist/src/lib/rpcClient.d.ts.map +1 -0
  77. package/dist/src/lib/rpcClient.js +74 -0
  78. package/dist/src/lib/stakingBuilder.d.ts.map +1 -1
  79. package/dist/src/lib/stakingBuilder.js +23 -7
  80. package/dist/src/lib/stakingTransaction.d.ts +0 -1
  81. package/dist/src/lib/stakingTransaction.d.ts.map +1 -1
  82. package/dist/src/lib/stakingTransaction.js +26 -15
  83. package/dist/src/lib/tokenTransferBuilder.d.ts +66 -0
  84. package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -0
  85. package/dist/src/lib/tokenTransferBuilder.js +202 -0
  86. package/dist/src/lib/tokenTransferTransaction.d.ts +59 -0
  87. package/dist/src/lib/tokenTransferTransaction.d.ts.map +1 -0
  88. package/dist/src/lib/tokenTransferTransaction.js +272 -0
  89. package/dist/src/lib/transaction.d.ts +21 -4
  90. package/dist/src/lib/transaction.d.ts.map +1 -1
  91. package/dist/src/lib/transaction.js +129 -17
  92. package/dist/src/lib/transactionBuilder.d.ts +13 -4
  93. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  94. package/dist/src/lib/transactionBuilder.js +34 -4
  95. package/dist/src/lib/transactionBuilderFactory.d.ts +11 -2
  96. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  97. package/dist/src/lib/transactionBuilderFactory.js +32 -1
  98. package/dist/src/lib/transferBuilder.d.ts +58 -1
  99. package/dist/src/lib/transferBuilder.d.ts.map +1 -1
  100. package/dist/src/lib/transferBuilder.js +310 -24
  101. package/dist/src/lib/transferTransaction.d.ts +6 -1
  102. package/dist/src/lib/transferTransaction.d.ts.map +1 -1
  103. package/dist/src/lib/transferTransaction.js +129 -12
  104. package/dist/src/lib/unstakingBuilder.js +6 -6
  105. package/dist/src/lib/unstakingTransaction.d.ts +0 -1
  106. package/dist/src/lib/unstakingTransaction.d.ts.map +1 -1
  107. package/dist/src/lib/unstakingTransaction.js +31 -17
  108. package/dist/src/lib/utils.d.ts +24 -3
  109. package/dist/src/lib/utils.d.ts.map +1 -1
  110. package/dist/src/lib/utils.js +254 -21
  111. package/dist/src/lib/walrusStakingBuilder.d.ts +66 -0
  112. package/dist/src/lib/walrusStakingBuilder.d.ts.map +1 -0
  113. package/dist/src/lib/walrusStakingBuilder.js +200 -0
  114. package/dist/src/lib/walrusStakingTransaction.d.ts +52 -0
  115. package/dist/src/lib/walrusStakingTransaction.d.ts.map +1 -0
  116. package/dist/src/lib/walrusStakingTransaction.js +269 -0
  117. package/dist/src/lib/walrusWithdrawStakeBuilder.d.ts +36 -0
  118. package/dist/src/lib/walrusWithdrawStakeBuilder.d.ts.map +1 -0
  119. package/dist/src/lib/walrusWithdrawStakeBuilder.js +173 -0
  120. package/dist/src/lib/walrusWithdrawStakeTransaction.d.ts +21 -0
  121. package/dist/src/lib/walrusWithdrawStakeTransaction.d.ts.map +1 -0
  122. package/dist/src/lib/walrusWithdrawStakeTransaction.js +190 -0
  123. package/dist/src/register.d.ts.map +1 -1
  124. package/dist/src/register.js +5 -1
  125. package/dist/src/sui.d.ts +46 -8
  126. package/dist/src/sui.d.ts.map +1 -1
  127. package/dist/src/sui.js +525 -37
  128. package/dist/src/suiToken.d.ts +22 -0
  129. package/dist/src/suiToken.d.ts.map +1 -0
  130. package/dist/src/suiToken.js +61 -0
  131. package/dist/src/tsui.js +1 -1
  132. package/dist/test/integration/index.d.ts +1 -0
  133. package/dist/test/integration/index.d.ts.map +1 -0
  134. package/dist/test/integration/index.js +1 -0
  135. package/dist/test/local_fullnode/RpcClient.d.ts +60 -0
  136. package/dist/test/local_fullnode/RpcClient.d.ts.map +1 -0
  137. package/dist/test/local_fullnode/RpcClient.js +111 -0
  138. package/dist/test/local_fullnode/faucet.d.ts +6 -0
  139. package/dist/test/local_fullnode/faucet.d.ts.map +1 -0
  140. package/dist/test/local_fullnode/faucet.js +17 -0
  141. package/dist/test/local_fullnode/transactions.d.ts +2 -0
  142. package/dist/test/local_fullnode/transactions.d.ts.map +1 -0
  143. package/dist/test/local_fullnode/transactions.js +190 -0
  144. package/dist/test/resources/sui.d.ts +458 -0
  145. package/dist/test/resources/sui.d.ts.map +1 -0
  146. package/dist/test/resources/sui.js +632 -0
  147. package/dist/test/unit/compareTransactionBlocks.d.ts +2 -0
  148. package/dist/test/unit/compareTransactionBlocks.d.ts.map +1 -0
  149. package/dist/test/unit/compareTransactionBlocks.js +64 -0
  150. package/dist/test/unit/getBuilderFactory.d.ts +3 -0
  151. package/dist/test/unit/getBuilderFactory.d.ts.map +1 -0
  152. package/dist/test/unit/getBuilderFactory.js +10 -0
  153. package/dist/test/unit/keyPair.d.ts +2 -0
  154. package/dist/test/unit/keyPair.d.ts.map +1 -0
  155. package/dist/test/unit/keyPair.js +72 -0
  156. package/dist/test/unit/sui.d.ts +2 -0
  157. package/dist/test/unit/sui.d.ts.map +1 -0
  158. package/dist/test/unit/sui.js +2423 -0
  159. package/dist/test/unit/suiToken.d.ts +2 -0
  160. package/dist/test/unit/suiToken.d.ts.map +1 -0
  161. package/dist/test/unit/suiToken.js +39 -0
  162. package/dist/test/unit/transactionBuilder/customTransactionBuilder.d.ts +2 -0
  163. package/dist/test/unit/transactionBuilder/customTransactionBuilder.d.ts.map +1 -0
  164. package/dist/test/unit/transactionBuilder/customTransactionBuilder.js +106 -0
  165. package/dist/test/unit/transactionBuilder/stakingBuilder.d.ts +2 -0
  166. package/dist/test/unit/transactionBuilder/stakingBuilder.d.ts.map +1 -0
  167. package/dist/test/unit/transactionBuilder/stakingBuilder.js +152 -0
  168. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts +2 -0
  169. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
  170. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +255 -0
  171. package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts +2 -0
  172. package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
  173. package/dist/test/unit/transactionBuilder/transactionBuilder.js +639 -0
  174. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
  175. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  176. package/dist/test/unit/transactionBuilder/transferBuilder.js +1055 -0
  177. package/dist/test/unit/transactionBuilder/unstakingBuilder.d.ts +2 -0
  178. package/dist/test/unit/transactionBuilder/unstakingBuilder.d.ts.map +1 -0
  179. package/dist/test/unit/transactionBuilder/unstakingBuilder.js +115 -0
  180. package/dist/test/unit/transactionBuilder/walrusStakingBuilder.d.ts +2 -0
  181. package/dist/test/unit/transactionBuilder/walrusStakingBuilder.d.ts.map +1 -0
  182. package/dist/test/unit/transactionBuilder/walrusStakingBuilder.js +162 -0
  183. package/dist/test/unit/transactionBuilder/walrusWithdrawBuilder.d.ts +2 -0
  184. package/dist/test/unit/transactionBuilder/walrusWithdrawBuilder.d.ts.map +1 -0
  185. package/dist/test/unit/transactionBuilder/walrusWithdrawBuilder.js +181 -0
  186. package/dist/test/unit/transferTransaction.d.ts +2 -0
  187. package/dist/test/unit/transferTransaction.d.ts.map +1 -0
  188. package/dist/test/unit/transferTransaction.js +94 -0
  189. package/dist/test/unit/utils.d.ts +2 -0
  190. package/dist/test/unit/utils.d.ts.map +1 -0
  191. package/dist/test/unit/utils.js +186 -0
  192. package/dist/tsconfig.tsbuildinfo +1 -0
  193. package/package.json +16 -12
  194. package/.eslintignore +0 -6
  195. package/.mocharc.yml +0 -7
  196. package/CHANGELOG.md +0 -420
@@ -0,0 +1,202 @@
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.TokenTransferBuilder = void 0;
7
+ const assert_1 = __importDefault(require("assert"));
8
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
9
+ const iface_1 = require("./iface");
10
+ const transactionBuilder_1 = require("./transactionBuilder");
11
+ const tokenTransferTransaction_1 = require("./tokenTransferTransaction");
12
+ const utils_1 = __importDefault(require("./utils"));
13
+ const builder_1 = require("./mystenlab/builder");
14
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
15
+ class TokenTransferBuilder extends transactionBuilder_1.TransactionBuilder {
16
+ constructor(_coinConfig) {
17
+ super(_coinConfig);
18
+ /**
19
+ * Balance held in the address balance system for the token being transferred.
20
+ * When set, this amount is included in the total available balance.
21
+ * At execution time, tx.withdrawal() + 0x2::coin::redeem_funds converts it
22
+ * to a Coin<T> that is merged with any coin objects before splitting.
23
+ */
24
+ this._fundsInAddressBalance = new bignumber_js_1.default(0);
25
+ this._transaction = new tokenTransferTransaction_1.TokenTransferTransaction(_coinConfig);
26
+ }
27
+ get transactionType() {
28
+ return sdk_core_1.TransactionType.Send;
29
+ }
30
+ /**
31
+ * The full coin type string derived from the coin config (e.g. `0xabc::my_token::MY_TOKEN`).
32
+ */
33
+ get tokenCoinType() {
34
+ const config = this._coinConfig;
35
+ return `${config.packageId}::${config.module}::${config.symbol}`;
36
+ }
37
+ /** @inheritdoc */
38
+ validateTransaction(transaction) {
39
+ if (!transaction.suiTransaction) {
40
+ return;
41
+ }
42
+ this.validateTransactionFields();
43
+ }
44
+ /** @inheritdoc */
45
+ sign(key) {
46
+ this.transaction.setSuiTransaction(this.buildSuiTransaction());
47
+ super.sign(key);
48
+ }
49
+ /** @inheritdoc */
50
+ fromImplementation(rawTransaction) {
51
+ const tx = new tokenTransferTransaction_1.TokenTransferTransaction(this._coinConfig);
52
+ this.validateRawTransaction(rawTransaction);
53
+ tx.fromRawTransaction(rawTransaction);
54
+ this.initBuilder(tx);
55
+ return this.transaction;
56
+ }
57
+ /** @inheritdoc */
58
+ async buildImplementation() {
59
+ this.transaction.setSuiTransaction(this.buildSuiTransaction());
60
+ this.transaction.transactionType(this.transactionType);
61
+ if (this._signer) {
62
+ this.transaction.sign(this._signer);
63
+ }
64
+ this._signatures.forEach((signature) => {
65
+ this.transaction.addSignature(signature.publicKey, signature.signature);
66
+ });
67
+ this.transaction.loadInputsAndOutputs();
68
+ return this.transaction;
69
+ }
70
+ /** @inheritdoc */
71
+ initBuilder(tx) {
72
+ this._transaction = tx;
73
+ if (tx.signature && tx.signature.length > 0) {
74
+ this._signatures = [tx.suiSignature];
75
+ }
76
+ const txData = tx.toJson();
77
+ this.type(iface_1.SuiTransactionType.TokenTransfer);
78
+ this.sender(txData.sender);
79
+ this.gasData(txData.gasData);
80
+ // Only restore meaningful expirations (Epoch or ValidDuring) — ignore None.
81
+ if (txData.expiration && !('None' in txData.expiration)) {
82
+ this._expiration = txData.expiration;
83
+ }
84
+ const recipients = utils_1.default.getRecipients(tx.suiTransaction);
85
+ this.send(recipients);
86
+ // Reconstruct fundsInAddressBalance from BalanceWithdrawal input if present.
87
+ // After BCS deserialization inputs are CallArg format: { BalanceWithdrawal: {...} }
88
+ // During building they are TransactionBlockInput format: { kind:'Input', value: { BalanceWithdrawal: {...} } }
89
+ const withdrawalInput = tx.suiTransaction?.tx?.inputs?.find((input) => (input !== null && typeof input === 'object' && 'BalanceWithdrawal' in input) ||
90
+ (input?.value !== null && typeof input?.value === 'object' && 'BalanceWithdrawal' in (input.value ?? {})));
91
+ if (withdrawalInput) {
92
+ const bw = withdrawalInput.BalanceWithdrawal ?? withdrawalInput.value?.BalanceWithdrawal;
93
+ this._fundsInAddressBalance = new bignumber_js_1.default(String(bw.reservation?.MaxAmountU64 ?? bw.amount));
94
+ }
95
+ if (txData.inputObjects && txData.inputObjects.length > 0) {
96
+ this.inputObjects(txData.inputObjects);
97
+ }
98
+ }
99
+ send(recipients) {
100
+ this.validateRecipients(recipients);
101
+ this._recipients = recipients;
102
+ return this;
103
+ }
104
+ inputObjects(inputObject) {
105
+ this.validateInputObjectRefs(inputObject);
106
+ this._inputObjects = inputObject;
107
+ return this;
108
+ }
109
+ /**
110
+ * Set the amount of token funds held in the Sui address balance system for this sender.
111
+ *
112
+ * @param {string} amount - amount in base units held in address balance
113
+ */
114
+ fundsInAddressBalance(amount) {
115
+ this._fundsInAddressBalance = new bignumber_js_1.default(amount);
116
+ return this;
117
+ }
118
+ /**
119
+ * Validates all fields are defined correctly
120
+ */
121
+ validateTransactionFields() {
122
+ (0, assert_1.default)(this._type, new sdk_core_1.BuildTransactionError('type is required before building'));
123
+ (0, assert_1.default)(this._sender, new sdk_core_1.BuildTransactionError('sender is required before building'));
124
+ (0, assert_1.default)(this._recipients && this._recipients.length > 0, new sdk_core_1.BuildTransactionError('at least one recipient is required before building'));
125
+ (0, assert_1.default)(this._gasData, new sdk_core_1.BuildTransactionError('gasData is required before building'));
126
+ this.validateGasData(this._gasData);
127
+ // Must have at least coin objects OR address balance
128
+ (0, assert_1.default)((this._inputObjects && this._inputObjects.length > 0) || this._fundsInAddressBalance.gt(0), new sdk_core_1.BuildTransactionError('input objects or fundsInAddressBalance required before building'));
129
+ if (this._inputObjects && this._inputObjects.length > 0) {
130
+ this.validateInputObjectRefs(this._inputObjects);
131
+ }
132
+ }
133
+ /** Validates the individual object refs (does not require non-empty array). */
134
+ validateInputObjectRefs(inputObjects) {
135
+ if (inputObjects) {
136
+ inputObjects.forEach((inputObject) => {
137
+ this.validateSuiObjectRef(inputObject, 'input object');
138
+ });
139
+ }
140
+ }
141
+ /**
142
+ * Build SuiTransaction.
143
+ *
144
+ * Two build paths:
145
+ *
146
+ * Path A — coin objects only (fundsInAddressBalance = 0):
147
+ * MergeCoins(inputObject[0], [inputObject[1..]]) → SplitCoins → TransferObjects
148
+ *
149
+ * Path B — coin objects + address balance (or address balance only):
150
+ * MoveCall(0x2::coin::redeem_funds, [withdrawal(amount, coinType)]) → Coin<T>
151
+ * MergeCoins(inputObject[0] | addrCoin, [rest...]) → SplitCoins → TransferObjects
152
+ *
153
+ * @return {SuiTransaction<TokenTransferProgrammableTransaction>}
154
+ * @protected
155
+ */
156
+ buildSuiTransaction() {
157
+ this.validateTransactionFields();
158
+ const programmableTxBuilder = new builder_1.TransactionBlock();
159
+ const inputObjects = (this._inputObjects ?? []).map((object) => programmableTxBuilder.object(builder_1.Inputs.ObjectRef(object)));
160
+ // If address balance is available, withdraw it as Coin<T> and add to the pool
161
+ if (this._fundsInAddressBalance.gt(0)) {
162
+ const coinType = this.tokenCoinType;
163
+ const [addrCoin] = programmableTxBuilder.moveCall({
164
+ target: '0x2::coin::redeem_funds',
165
+ typeArguments: [coinType],
166
+ arguments: [
167
+ programmableTxBuilder.withdrawal({
168
+ amount: BigInt(this._fundsInAddressBalance.toFixed()),
169
+ type: coinType,
170
+ }),
171
+ ],
172
+ });
173
+ inputObjects.push(addrCoin);
174
+ }
175
+ const mergedObject = inputObjects.shift();
176
+ if (inputObjects.length > 0) {
177
+ programmableTxBuilder.mergeCoins(mergedObject, inputObjects);
178
+ }
179
+ this._recipients.forEach((recipient) => {
180
+ const splitObject = programmableTxBuilder.splitCoins(mergedObject, [
181
+ programmableTxBuilder.pure(BigInt(recipient.amount)),
182
+ ]);
183
+ programmableTxBuilder.transferObjects([splitObject], programmableTxBuilder.object(recipient.address));
184
+ });
185
+ const txData = programmableTxBuilder.blockData;
186
+ return {
187
+ type: this._type,
188
+ sender: this._sender,
189
+ tx: {
190
+ inputs: [...txData.inputs],
191
+ transactions: [...txData.transactions],
192
+ },
193
+ gasData: {
194
+ ...this._gasData,
195
+ },
196
+ expiration: this._expiration,
197
+ fundsInAddressBalance: this._fundsInAddressBalance.gt(0) ? this._fundsInAddressBalance.toFixed() : undefined,
198
+ };
199
+ }
200
+ }
201
+ exports.TokenTransferBuilder = TokenTransferBuilder;
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5UcmFuc2ZlckJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Rva2VuVHJhbnNmZXJCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixtREFBa0c7QUFFbEcsbUNBQW1HO0FBRW5HLDZEQUEwRDtBQUMxRCx5RUFBc0U7QUFFdEUsb0RBQTRCO0FBQzVCLGlEQUk2QjtBQUM3QixnRUFBcUM7QUFFckMsTUFBYSxvQkFBcUIsU0FBUSx1Q0FBd0Q7SUFXaEcsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFUckI7Ozs7O1dBS0c7UUFDTywyQkFBc0IsR0FBYyxJQUFJLHNCQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFJN0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLG1EQUF3QixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFZLGFBQWE7UUFDdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQXNCLENBQUM7UUFDM0MsT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEtBQUssTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbkUsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixtQkFBbUIsQ0FBQyxXQUFxQztRQUN2RCxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ2hDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFJLENBQUMsR0FBWTtRQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLG1C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QUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNyQyxNQUFNLFdBQVcsR0FBRyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFO2dCQUNqRSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNyRCxDQUFDLENBQUM7WUFDSCxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDeEcsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxTQUFTLENBQUM7UUFDL0MsT0FBTztZQUNMLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSztZQUNoQixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDcEIsRUFBRSxFQUFFO2dCQUNGLE1BQU0sRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFDMUIsWUFBWSxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO2FBQ3ZDO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLEdBQUcsSUFBSSxDQUFDLFFBQVE7YUFDakI7WUFDRCxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDNUIscUJBQXFCLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQzdHLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFuT0Qsb0RBbU9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlLCBSZWNpcGllbnQsIEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgQmFzZUtleSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcsIFN1aUNvaW4gfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFN1aVRyYW5zYWN0aW9uLCBTdWlUcmFuc2FjdGlvblR5cGUsIFRva2VuVHJhbnNmZXJQcm9ncmFtbWFibGVUcmFuc2FjdGlvbiB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IFRva2VuVHJhbnNmZXJUcmFuc2FjdGlvbiB9IGZyb20gJy4vdG9rZW5UcmFuc2ZlclRyYW5zYWN0aW9uJztcbmltcG9ydCB7IFN1aU9iamVjdFJlZiB9IGZyb20gJy4vbXlzdGVubGFiL3R5cGVzJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7XG4gIElucHV0cyxcbiAgVHJhbnNhY3Rpb25CbG9jayBhcyBQcm9ncmFtbWluZ1RyYW5zYWN0aW9uQmxvY2tCdWlsZGVyLFxuICBUcmFuc2FjdGlvbkFyZ3VtZW50LFxufSBmcm9tICcuL215c3RlbmxhYi9idWlsZGVyJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcblxuZXhwb3J0IGNsYXNzIFRva2VuVHJhbnNmZXJCdWlsZGVyIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyPFRva2VuVHJhbnNmZXJQcm9ncmFtbWFibGVUcmFuc2FjdGlvbj4ge1xuICBwcm90ZWN0ZWQgX3JlY2lwaWVudHM6IFJlY2lwaWVudFtdO1xuICBwcm90ZWN0ZWQgX2lucHV0T2JqZWN0czogU3VpT2JqZWN0UmVmW107XG4gIC8qKlxuICAgKiBCYWxhbmNlIGhlbGQgaW4gdGhlIGFkZHJlc3MgYmFsYW5jZSBzeXN0ZW0gZm9yIHRoZSB0b2tlbiBiZWluZyB0cmFuc2ZlcnJlZC5cbiAgICogV2hlbiBzZXQsIHRoaXMgYW1vdW50IGlzIGluY2x1ZGVkIGluIHRoZSB0b3RhbCBhdmFpbGFibGUgYmFsYW5jZS5cbiAgICogQXQgZXhlY3V0aW9uIHRpbWUsIHR4LndpdGhkcmF3YWwoKSArIDB4Mjo6Y29pbjo6cmVkZWVtX2Z1bmRzIGNvbnZlcnRzIGl0XG4gICAqIHRvIGEgQ29pbjxUPiB0aGF0IGlzIG1lcmdlZCB3aXRoIGFueSBjb2luIG9iamVjdHMgYmVmb3JlIHNwbGl0dGluZy5cbiAgICovXG4gIHByb3RlY3RlZCBfZnVuZHNJbkFkZHJlc3NCYWxhbmNlOiBCaWdOdW1iZXIgPSBuZXcgQmlnTnVtYmVyKDApO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IG5ldyBUb2tlblRyYW5zZmVyVHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlNlbmQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZ1bGwgY29pbiB0eXBlIHN0cmluZyBkZXJpdmVkIGZyb20gdGhlIGNvaW4gY29uZmlnIChlLmcuIGAweGFiYzo6bXlfdG9rZW46Ok1ZX1RPS0VOYCkuXG4gICAqL1xuICBwcml2YXRlIGdldCB0b2tlbkNvaW5UeXBlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5fY29pbkNvbmZpZyBhcyBTdWlDb2luO1xuICAgIHJldHVybiBgJHtjb25maWcucGFja2FnZUlkfTo6JHtjb25maWcubW9kdWxlfTo6JHtjb25maWcuc3ltYm9sfWA7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVG9rZW5UcmFuc2ZlclRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgaWYgKCF0cmFuc2FjdGlvbi5zdWlUcmFuc2FjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlVHJhbnNhY3Rpb25GaWVsZHMoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBzaWduKGtleTogQmFzZUtleSk6IHZvaWQge1xuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0U3VpVHJhbnNhY3Rpb24odGhpcy5idWlsZFN1aVRyYW5zYWN0aW9uKCkpO1xuICAgIHN1cGVyLnNpZ24oa2V5KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbjxUb2tlblRyYW5zZmVyUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0eCA9IG5ldyBUb2tlblRyYW5zZmVyVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZyk7XG4gICAgdGhpcy52YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICB0eC5mcm9tUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIHRoaXMuaW5pdEJ1aWxkZXIodHgpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb248VG9rZW5UcmFuc2ZlclByb2dyYW1tYWJsZVRyYW5zYWN0aW9uPj4ge1xuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0U3VpVHJhbnNhY3Rpb24odGhpcy5idWlsZFN1aVRyYW5zYWN0aW9uKCkpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24udHJhbnNhY3Rpb25UeXBlKHRoaXMudHJhbnNhY3Rpb25UeXBlKTtcblxuICAgIGlmICh0aGlzLl9zaWduZXIpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uc2lnbih0aGlzLl9zaWduZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3NpZ25hdHVyZXMuZm9yRWFjaCgoc2lnbmF0dXJlKSA9PiB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLmFkZFNpZ25hdHVyZShzaWduYXR1cmUucHVibGljS2V5LCBzaWduYXR1cmUuc2lnbmF0dXJlKTtcbiAgICB9KTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24ubG9hZElucHV0c0FuZE91dHB1dHMoKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpbml0QnVpbGRlcih0eDogVG9rZW5UcmFuc2ZlclRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0eDtcblxuICAgIGlmICh0eC5zaWduYXR1cmUgJiYgdHguc2lnbmF0dXJlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX3NpZ25hdHVyZXMgPSBbdHguc3VpU2lnbmF0dXJlXTtcbiAgICB9XG4gICAgY29uc3QgdHhEYXRhID0gdHgudG9Kc29uKCk7XG4gICAgdGhpcy50eXBlKFN1aVRyYW5zYWN0aW9uVHlwZS5Ub2tlblRyYW5zZmVyKTtcbiAgICB0aGlzLnNlbmRlcih0eERhdGEuc2VuZGVyKTtcbiAgICB0aGlzLmdhc0RhdGEodHhEYXRhLmdhc0RhdGEpO1xuXG4gICAgLy8gT25seSByZXN0b3JlIG1lYW5pbmdmdWwgZXhwaXJhdGlvbnMgKEVwb2NoIG9yIFZhbGlkRHVyaW5nKSDigJQgaWdub3JlIE5vbmUuXG4gICAgaWYgKHR4RGF0YS5leHBpcmF0aW9uICYmICEoJ05vbmUnIGluIHR4RGF0YS5leHBpcmF0aW9uKSkge1xuICAgICAgdGhpcy5fZXhwaXJhdGlvbiA9IHR4RGF0YS5leHBpcmF0aW9uO1xuICAgIH1cblxuICAgIGNvbnN0IHJlY2lwaWVudHMgPSB1dGlscy5nZXRSZWNpcGllbnRzKHR4LnN1aVRyYW5zYWN0aW9uKTtcbiAgICB0aGlzLnNlbmQocmVjaXBpZW50cyk7XG5cbiAgICAvLyBSZWNvbnN0cnVjdCBmdW5kc0luQWRkcmVzc0JhbGFuY2UgZnJvbSBCYWxhbmNlV2l0aGRyYXdhbCBpbnB1dCBpZiBwcmVzZW50LlxuICAgIC8vIEFmdGVyIEJDUyBkZXNlcmlhbGl6YXRpb24gaW5wdXRzIGFyZSBDYWxsQXJnIGZvcm1hdDogeyBCYWxhbmNlV2l0aGRyYXdhbDogey4uLn0gfVxuICAgIC8vIER1cmluZyBidWlsZGluZyB0aGV5IGFyZSBUcmFuc2FjdGlvbkJsb2NrSW5wdXQgZm9ybWF0OiB7IGtpbmQ6J0lucHV0JywgdmFsdWU6IHsgQmFsYW5jZVdpdGhkcmF3YWw6IHsuLi59IH0gfVxuICAgIGNvbnN0IHdpdGhkcmF3YWxJbnB1dCA9ICh0eC5zdWlUcmFuc2FjdGlvbj8udHg/LmlucHV0cyBhcyBhbnlbXSk/LmZpbmQoXG4gICAgICAoaW5wdXQ6IGFueSkgPT5cbiAgICAgICAgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgJ0JhbGFuY2VXaXRoZHJhd2FsJyBpbiBpbnB1dCkgfHxcbiAgICAgICAgKGlucHV0Py52YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgaW5wdXQ/LnZhbHVlID09PSAnb2JqZWN0JyAmJiAnQmFsYW5jZVdpdGhkcmF3YWwnIGluIChpbnB1dC52YWx1ZSA/PyB7fSkpXG4gICAgKTtcbiAgICBpZiAod2l0aGRyYXdhbElucHV0KSB7XG4gICAgICBjb25zdCBidyA9IHdpdGhkcmF3YWxJbnB1dC5CYWxhbmNlV2l0aGRyYXdhbCA/PyB3aXRoZHJhd2FsSW5wdXQudmFsdWU/LkJhbGFuY2VXaXRoZHJhd2FsO1xuICAgICAgdGhpcy5fZnVuZHNJbkFkZHJlc3NCYWxhbmNlID0gbmV3IEJpZ051bWJlcihTdHJpbmcoYncucmVzZXJ2YXRpb24/Lk1heEFtb3VudFU2NCA/PyBidy5hbW91bnQpKTtcbiAgICB9XG5cbiAgICBpZiAodHhEYXRhLmlucHV0T2JqZWN0cyAmJiB0eERhdGEuaW5wdXRPYmplY3RzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuaW5wdXRPYmplY3RzKHR4RGF0YS5pbnB1dE9iamVjdHMpO1xuICAgIH1cbiAgfVxuXG4gIHNlbmQocmVjaXBpZW50czogUmVjaXBpZW50W10pOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlUmVjaXBpZW50cyhyZWNpcGllbnRzKTtcbiAgICB0aGlzLl9yZWNpcGllbnRzID0gcmVjaXBpZW50cztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlucHV0T2JqZWN0cyhpbnB1dE9iamVjdDogU3VpT2JqZWN0UmVmW10pOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlSW5wdXRPYmplY3RSZWZzKGlucHV0T2JqZWN0KTtcbiAgICB0aGlzLl9pbnB1dE9iamVjdHMgPSBpbnB1dE9iamVjdDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGFtb3VudCBvZiB0b2tlbiBmdW5kcyBoZWxkIGluIHRoZSBTdWkgYWRkcmVzcyBiYWxhbmNlIHN5c3RlbSBmb3IgdGhpcyBzZW5kZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbW91bnQgLSBhbW91bnQgaW4gYmFzZSB1bml0cyBoZWxkIGluIGFkZHJlc3MgYmFsYW5jZVxuICAgKi9cbiAgZnVuZHNJbkFkZHJlc3NCYWxhbmNlKGFtb3VudDogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5fZnVuZHNJbkFkZHJlc3NCYWxhbmNlID0gbmV3IEJpZ051bWJlcihhbW91bnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhbGwgZmllbGRzIGFyZSBkZWZpbmVkIGNvcnJlY3RseVxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVRyYW5zYWN0aW9uRmllbGRzKCk6IHZvaWQge1xuICAgIGFzc2VydCh0aGlzLl90eXBlLCBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCd0eXBlIGlzIHJlcXVpcmVkIGJlZm9yZSBidWlsZGluZycpKTtcbiAgICBhc3NlcnQodGhpcy5fc2VuZGVyLCBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdzZW5kZXIgaXMgcmVxdWlyZWQgYmVmb3JlIGJ1aWxkaW5nJykpO1xuICAgIGFzc2VydChcbiAgICAgIHRoaXMuX3JlY2lwaWVudHMgJiYgdGhpcy5fcmVjaXBpZW50cy5sZW5ndGggPiAwLFxuICAgICAgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignYXQgbGVhc3Qgb25lIHJlY2lwaWVudCBpcyByZXF1aXJlZCBiZWZvcmUgYnVpbGRpbmcnKVxuICAgICk7XG4gICAgYXNzZXJ0KHRoaXMuX2dhc0RhdGEsIG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ2dhc0RhdGEgaXMgcmVxdWlyZWQgYmVmb3JlIGJ1aWxkaW5nJykpO1xuICAgIHRoaXMudmFsaWRhdGVHYXNEYXRhKHRoaXMuX2dhc0RhdGEpO1xuXG4gICAgLy8gTXVzdCBoYXZlIGF0IGxlYXN0IGNvaW4gb2JqZWN0cyBPUiBhZGRyZXNzIGJhbGFuY2VcbiAgICBhc3NlcnQoXG4gICAgICAodGhpcy5faW5wdXRPYmplY3RzICYmIHRoaXMuX2lucHV0T2JqZWN0cy5sZW5ndGggPiAwKSB8fCB0aGlzLl9mdW5kc0luQWRkcmVzc0JhbGFuY2UuZ3QoMCksXG4gICAgICBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdpbnB1dCBvYmplY3RzIG9yIGZ1bmRzSW5BZGRyZXNzQmFsYW5jZSByZXF1aXJlZCBiZWZvcmUgYnVpbGRpbmcnKVxuICAgICk7XG4gICAgaWYgKHRoaXMuX2lucHV0T2JqZWN0cyAmJiB0aGlzLl9pbnB1dE9iamVjdHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy52YWxpZGF0ZUlucHV0T2JqZWN0UmVmcyh0aGlzLl9pbnB1dE9iamVjdHMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBWYWxpZGF0ZXMgdGhlIGluZGl2aWR1YWwgb2JqZWN0IHJlZnMgKGRvZXMgbm90IHJlcXVpcmUgbm9uLWVtcHR5IGFycmF5KS4gKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUlucHV0T2JqZWN0UmVmcyhpbnB1dE9iamVjdHM6IFN1aU9iamVjdFJlZltdKTogdm9pZCB7XG4gICAgaWYgKGlucHV0T2JqZWN0cykge1xuICAgICAgaW5wdXRPYmplY3RzLmZvckVhY2goKGlucHV0T2JqZWN0KSA9PiB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVTdWlPYmplY3RSZWYoaW5wdXRPYmplY3QsICdpbnB1dCBvYmplY3QnKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBTdWlUcmFuc2FjdGlvbi5cbiAgICpcbiAgICogVHdvIGJ1aWxkIHBhdGhzOlxuICAgKlxuICAgKiBQYXRoIEEg4oCUIGNvaW4gb2JqZWN0cyBvbmx5IChmdW5kc0luQWRkcmVzc0JhbGFuY2UgPSAwKTpcbiAgICogICBNZXJnZUNvaW5zKGlucHV0T2JqZWN0WzBdLCBbaW5wdXRPYmplY3RbMS4uXV0pIOKGkiBTcGxpdENvaW5zIOKGkiBUcmFuc2Zlck9iamVjdHNcbiAgICpcbiAgICogUGF0aCBCIOKAlCBjb2luIG9iamVjdHMgKyBhZGRyZXNzIGJhbGFuY2UgKG9yIGFkZHJlc3MgYmFsYW5jZSBvbmx5KTpcbiAgICogICBNb3ZlQ2FsbCgweDI6OmNvaW46OnJlZGVlbV9mdW5kcywgW3dpdGhkcmF3YWwoYW1vdW50LCBjb2luVHlwZSldKSDihpIgQ29pbjxUPlxuICAgKiAgIE1lcmdlQ29pbnMoaW5wdXRPYmplY3RbMF0gfCBhZGRyQ29pbiwgW3Jlc3QuLi5dKSDihpIgU3BsaXRDb2lucyDihpIgVHJhbnNmZXJPYmplY3RzXG4gICAqXG4gICAqIEByZXR1cm4ge1N1aVRyYW5zYWN0aW9uPFRva2VuVHJhbnNmZXJQcm9ncmFtbWFibGVUcmFuc2FjdGlvbj59XG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBidWlsZFN1aVRyYW5zYWN0aW9uKCk6IFN1aVRyYW5zYWN0aW9uPFRva2VuVHJhbnNmZXJQcm9ncmFtbWFibGVUcmFuc2FjdGlvbj4ge1xuICAgIHRoaXMudmFsaWRhdGVUcmFuc2FjdGlvbkZpZWxkcygpO1xuXG4gICAgY29uc3QgcHJvZ3JhbW1hYmxlVHhCdWlsZGVyID0gbmV3IFByb2dyYW1taW5nVHJhbnNhY3Rpb25CbG9ja0J1aWxkZXIoKTtcblxuICAgIGNvbnN0IGlucHV0T2JqZWN0czogVHJhbnNhY3Rpb25Bcmd1bWVudFtdID0gKHRoaXMuX2lucHV0T2JqZWN0cyA/PyBbXSkubWFwKChvYmplY3QpID0+XG4gICAgICBwcm9ncmFtbWFibGVUeEJ1aWxkZXIub2JqZWN0KElucHV0cy5PYmplY3RSZWYob2JqZWN0KSlcbiAgICApO1xuXG4gICAgLy8gSWYgYWRkcmVzcyBiYWxhbmNlIGlzIGF2YWlsYWJsZSwgd2l0aGRyYXcgaXQgYXMgQ29pbjxUPiBhbmQgYWRkIHRvIHRoZSBwb29sXG4gICAgaWYgKHRoaXMuX2Z1bmRzSW5BZGRyZXNzQmFsYW5jZS5ndCgwKSkge1xuICAgICAgY29uc3QgY29pblR5cGUgPSB0aGlzLnRva2VuQ29pblR5cGU7XG4gICAgICBjb25zdCBbYWRkckNvaW5dID0gcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLm1vdmVDYWxsKHtcbiAgICAgICAgdGFyZ2V0OiAnMHgyOjpjb2luOjpyZWRlZW1fZnVuZHMnLFxuICAgICAgICB0eXBlQXJndW1lbnRzOiBbY29pblR5cGVdLFxuICAgICAgICBhcmd1bWVudHM6IFtcbiAgICAgICAgICBwcm9ncmFtbWFibGVUeEJ1aWxkZXIud2l0aGRyYXdhbCh7XG4gICAgICAgICAgICBhbW91bnQ6IEJpZ0ludCh0aGlzLl9mdW5kc0luQWRkcmVzc0JhbGFuY2UudG9GaXhlZCgpKSxcbiAgICAgICAgICAgIHR5cGU6IGNvaW5UeXBlLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgICBpbnB1dE9iamVjdHMucHVzaChhZGRyQ29pbik7XG4gICAgfVxuXG4gICAgY29uc3QgbWVyZ2VkT2JqZWN0ID0gaW5wdXRPYmplY3RzLnNoaWZ0KCkgYXMgVHJhbnNhY3Rpb25Bcmd1bWVudDtcbiAgICBpZiAoaW5wdXRPYmplY3RzLmxlbmd0aCA+IDApIHtcbiAgICAgIHByb2dyYW1tYWJsZVR4QnVpbGRlci5tZXJnZUNvaW5zKG1lcmdlZE9iamVjdCwgaW5wdXRPYmplY3RzKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yZWNpcGllbnRzLmZvckVhY2goKHJlY2lwaWVudCkgPT4ge1xuICAgICAgY29uc3Qgc3BsaXRPYmplY3QgPSBwcm9ncmFtbWFibGVUeEJ1aWxkZXIuc3BsaXRDb2lucyhtZXJnZWRPYmplY3QsIFtcbiAgICAgICAgcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLnB1cmUoQmlnSW50KHJlY2lwaWVudC5hbW91bnQpKSxcbiAgICAgIF0pO1xuICAgICAgcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLnRyYW5zZmVyT2JqZWN0cyhbc3BsaXRPYmplY3RdLCBwcm9ncmFtbWFibGVUeEJ1aWxkZXIub2JqZWN0KHJlY2lwaWVudC5hZGRyZXNzKSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0eERhdGEgPSBwcm9ncmFtbWFibGVUeEJ1aWxkZXIuYmxvY2tEYXRhO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiB0aGlzLl90eXBlLFxuICAgICAgc2VuZGVyOiB0aGlzLl9zZW5kZXIsXG4gICAgICB0eDoge1xuICAgICAgICBpbnB1dHM6IFsuLi50eERhdGEuaW5wdXRzXSxcbiAgICAgICAgdHJhbnNhY3Rpb25zOiBbLi4udHhEYXRhLnRyYW5zYWN0aW9uc10sXG4gICAgICB9LFxuICAgICAgZ2FzRGF0YToge1xuICAgICAgICAuLi50aGlzLl9nYXNEYXRhLFxuICAgICAgfSxcbiAgICAgIGV4cGlyYXRpb246IHRoaXMuX2V4cGlyYXRpb24sXG4gICAgICBmdW5kc0luQWRkcmVzc0JhbGFuY2U6IHRoaXMuX2Z1bmRzSW5BZGRyZXNzQmFsYW5jZS5ndCgwKSA/IHRoaXMuX2Z1bmRzSW5BZGRyZXNzQmFsYW5jZS50b0ZpeGVkKCkgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,59 @@
1
+ import { SuiTransaction, TokenTransferProgrammableTransaction, TransactionExplanation, TxData } from './iface';
2
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
+ import { Transaction } from './transaction';
4
+ import { BaseKey, PublicKey as BasePublicKey, Signature, TransactionType } from '@bitgo-beta/sdk-core';
5
+ export declare class TokenTransferTransaction extends Transaction<TokenTransferProgrammableTransaction> {
6
+ constructor(_coinConfig: Readonly<CoinConfig>);
7
+ get suiTransaction(): SuiTransaction<TokenTransferProgrammableTransaction>;
8
+ setSuiTransaction(tx: SuiTransaction<TokenTransferProgrammableTransaction>): void;
9
+ /** @inheritDoc */
10
+ get id(): string;
11
+ addSignature(publicKey: BasePublicKey, signature: Buffer): void;
12
+ get suiSignature(): Signature;
13
+ /** @inheritdoc */
14
+ canSign(key: BaseKey): boolean;
15
+ /** @inheritdoc */
16
+ toBroadcastFormat(): string;
17
+ /** @inheritdoc */
18
+ toJson(): TxData;
19
+ /** @inheritDoc */
20
+ explainTransaction(): TransactionExplanation;
21
+ /**
22
+ * Set the transaction type.
23
+ *
24
+ * @param {TransactionType} transactionType The transaction type to be set.
25
+ */
26
+ transactionType(transactionType: TransactionType): void;
27
+ /**
28
+ * Load the input and output data on this transaction.
29
+ */
30
+ loadInputsAndOutputs(): void;
31
+ /**
32
+ * Sets this transaction payload
33
+ *
34
+ * @param {string} rawTransaction
35
+ */
36
+ fromRawTransaction(rawTransaction: string): void;
37
+ /**
38
+ * Helper function for serialize() to get the correct txData with transaction type
39
+ *
40
+ * @return {TxData}
41
+ */
42
+ getTxData(): TxData;
43
+ /**
44
+ * Returns a complete explanation for a transfer transaction
45
+ * @param {TxData} json The transaction data in json format
46
+ * @param {TransactionExplanation} explanationResult The transaction explanation to be completed
47
+ * @returns {TransactionExplanation}
48
+ */
49
+ explainTokenTransferTransaction(json: TxData, explanationResult: TransactionExplanation): TransactionExplanation;
50
+ /**
51
+ * Extracts the objects that were provided as inputs while building the transaction.
52
+ * Handles both the simple case (MergeCoins/SplitCoins first) and the address-balance
53
+ * case where MoveCall(redeem_funds) may precede MergeCoins/SplitCoins.
54
+ * @param tx
55
+ * @returns {SuiObjectRef[]} Objects that are inputs for the transaction
56
+ */
57
+ private getInputObjectsFromTx;
58
+ }
59
+ //# sourceMappingURL=tokenTransferTransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenTransferTransaction.d.ts","sourceRoot":"","sources":["../../../src/lib/tokenTransferTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,oCAAoC,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC/G,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EACL,OAAO,EACP,SAAS,IAAI,aAAa,EAG1B,SAAS,EAET,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAa9B,qBAAa,wBAAyB,SAAQ,WAAW,CAAC,oCAAoC,CAAC;gBACjF,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,IAAI,cAAc,IAAI,cAAc,CAAC,oCAAoC,CAAC,CAEzE;IAED,iBAAiB,CAAC,EAAE,EAAE,cAAc,CAAC,oCAAoC,CAAC,GAAG,IAAI;IAIjF,kBAAkB;IAClB,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAM/D,IAAI,YAAY,IAAI,SAAS,CAE5B;IAED,kBAAkB;IAClB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI9B,kBAAkB;IAClB,iBAAiB,IAAI,MAAM;IAO3B,kBAAkB;IAClB,MAAM,IAAI,MAAM;IAgBhB,kBAAkB;IAClB,kBAAkB,IAAI,sBAAsB;IAwB5C;;;;OAIG;IACH,eAAe,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI;IAIvD;;OAEG;IACH,oBAAoB,IAAI,IAAI;IAuB5B;;;;OAIG;IACH,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAchD;;;;OAIG;IACI,SAAS,IAAI,MAAM;IAgD1B;;;;;OAKG;IACH,+BAA+B,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,sBAAsB,GAAG,sBAAsB;IAchH;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;CAiC9B"}
@@ -0,0 +1,272 @@
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
+ exports.TokenTransferTransaction = void 0;
40
+ const transaction_1 = require("./transaction");
41
+ const constants_1 = require("./constants");
42
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
43
+ const types_1 = require("./mystenlab/types");
44
+ const utils_1 = __importStar(require("./utils"));
45
+ const builder_1 = require("./mystenlab/builder");
46
+ const bcs_1 = require("@mysten/bcs");
47
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
48
+ class TokenTransferTransaction extends transaction_1.Transaction {
49
+ constructor(_coinConfig) {
50
+ super(_coinConfig);
51
+ }
52
+ get suiTransaction() {
53
+ return this._suiTransaction;
54
+ }
55
+ setSuiTransaction(tx) {
56
+ this._suiTransaction = tx;
57
+ }
58
+ /** @inheritDoc */
59
+ get id() {
60
+ return this._id || constants_1.UNAVAILABLE_TEXT;
61
+ }
62
+ addSignature(publicKey, signature) {
63
+ this._signatures.push(signature.toString('hex'));
64
+ this._signature = { publicKey, signature };
65
+ this.serialize();
66
+ }
67
+ get suiSignature() {
68
+ return this._signature;
69
+ }
70
+ /** @inheritdoc */
71
+ canSign(key) {
72
+ return true;
73
+ }
74
+ /** @inheritdoc */
75
+ toBroadcastFormat() {
76
+ if (!this._suiTransaction) {
77
+ throw new sdk_core_1.InvalidTransactionError('Empty transaction');
78
+ }
79
+ return this.serialize();
80
+ }
81
+ /** @inheritdoc */
82
+ toJson() {
83
+ if (!this._suiTransaction) {
84
+ throw new sdk_core_1.ParseTransactionError('Empty transaction');
85
+ }
86
+ const tx = this._suiTransaction;
87
+ return {
88
+ id: this._id,
89
+ sender: tx.sender,
90
+ kind: { ProgrammableTransaction: tx.tx },
91
+ gasData: tx.gasData,
92
+ expiration: tx.expiration ?? { None: null },
93
+ inputObjects: this.getInputObjectsFromTx(tx.tx),
94
+ };
95
+ }
96
+ /** @inheritDoc */
97
+ explainTransaction() {
98
+ const result = this.toJson();
99
+ const displayOrder = ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'type'];
100
+ const outputs = [];
101
+ const explanationResult = {
102
+ displayOrder,
103
+ id: this.id,
104
+ outputs,
105
+ outputAmount: '0',
106
+ changeOutputs: [],
107
+ changeAmount: '0',
108
+ fee: { fee: this.suiTransaction.gasData.budget.toString() },
109
+ type: this.type,
110
+ };
111
+ switch (this.type) {
112
+ case sdk_core_1.TransactionType.Send:
113
+ return this.explainTokenTransferTransaction(result, explanationResult);
114
+ default:
115
+ throw new sdk_core_1.InvalidTransactionError('Transaction type not supported');
116
+ }
117
+ }
118
+ /**
119
+ * Set the transaction type.
120
+ *
121
+ * @param {TransactionType} transactionType The transaction type to be set.
122
+ */
123
+ transactionType(transactionType) {
124
+ this._type = transactionType;
125
+ }
126
+ /**
127
+ * Load the input and output data on this transaction.
128
+ */
129
+ loadInputsAndOutputs() {
130
+ if (!this.suiTransaction) {
131
+ return;
132
+ }
133
+ const recipients = utils_1.default.getRecipients(this._suiTransaction);
134
+ // Use BigNumber: token consolidation amounts can exceed 2^53 and a Number-based sum
135
+ // would lose precision.
136
+ const totalAmount = recipients.reduce((accumulator, current) => accumulator.plus(current.amount), new bignumber_js_1.default(0));
137
+ this._outputs = recipients.map((recipient) => ({
138
+ address: recipient.address,
139
+ value: recipient.amount,
140
+ coin: this._coinConfig.name,
141
+ }));
142
+ this._inputs = [
143
+ {
144
+ address: this.suiTransaction.sender,
145
+ value: totalAmount.toFixed(),
146
+ coin: this._coinConfig.name,
147
+ },
148
+ ];
149
+ }
150
+ /**
151
+ * Sets this transaction payload
152
+ *
153
+ * @param {string} rawTransaction
154
+ */
155
+ fromRawTransaction(rawTransaction) {
156
+ try {
157
+ utils_1.default.isValidRawTransaction(rawTransaction);
158
+ this._suiTransaction = transaction_1.Transaction.deserializeSuiTransaction(rawTransaction);
159
+ this._type = sdk_core_1.TransactionType.Send;
160
+ this._id = this._suiTransaction.id;
161
+ this.loadInputsAndOutputs();
162
+ }
163
+ catch (e) {
164
+ throw e;
165
+ }
166
+ }
167
+ /**
168
+ * Helper function for serialize() to get the correct txData with transaction type
169
+ *
170
+ * @return {TxData}
171
+ */
172
+ getTxData() {
173
+ if (!this._suiTransaction) {
174
+ throw new sdk_core_1.InvalidTransactionError('empty transaction');
175
+ }
176
+ const inputs = this._suiTransaction.tx.inputs.map((input) => {
177
+ if (input.hasOwnProperty('Object')) {
178
+ return input;
179
+ }
180
+ if (input.hasOwnProperty('Pure')) {
181
+ if (input.Pure.length === constants_1.SUI_ADDRESS_LENGTH) {
182
+ const address = (0, types_1.normalizeSuiAddress)(builder_1.builder.de(bcs_1.BCS.ADDRESS, Buffer.from(input.Pure).toString('base64'), 'base64'));
183
+ return builder_1.Inputs.Pure(address, bcs_1.BCS.ADDRESS);
184
+ }
185
+ else {
186
+ const amount = builder_1.builder.de(bcs_1.BCS.U64, Buffer.from(input.Pure).toString('base64'), 'base64');
187
+ return builder_1.Inputs.Pure(amount, bcs_1.BCS.U64);
188
+ }
189
+ }
190
+ if (input.hasOwnProperty('BalanceWithdrawal')) {
191
+ return input;
192
+ }
193
+ if (input.kind === 'Input' &&
194
+ (input.value.hasOwnProperty('Object') ||
195
+ input.value.hasOwnProperty('Pure') ||
196
+ input.value.hasOwnProperty('BalanceWithdrawal'))) {
197
+ return input.value;
198
+ }
199
+ return builder_1.Inputs.Pure(input.value, input.type === 'pure' ? bcs_1.BCS.U64 : bcs_1.BCS.ADDRESS);
200
+ });
201
+ const programmableTx = {
202
+ inputs,
203
+ transactions: this._suiTransaction.tx.transactions,
204
+ };
205
+ return {
206
+ sender: this._suiTransaction.sender,
207
+ expiration: this._suiTransaction.expiration ?? { None: null },
208
+ gasData: this._suiTransaction.gasData,
209
+ kind: {
210
+ ProgrammableTransaction: programmableTx,
211
+ },
212
+ };
213
+ }
214
+ /**
215
+ * Returns a complete explanation for a transfer transaction
216
+ * @param {TxData} json The transaction data in json format
217
+ * @param {TransactionExplanation} explanationResult The transaction explanation to be completed
218
+ * @returns {TransactionExplanation}
219
+ */
220
+ explainTokenTransferTransaction(json, explanationResult) {
221
+ const recipients = utils_1.default.getRecipients(this.suiTransaction);
222
+ const outputs = recipients.map((recipient) => recipient);
223
+ const outputAmount = recipients
224
+ .reduce((accumulator, current) => accumulator.plus(current.amount), new bignumber_js_1.default(0))
225
+ .toFixed();
226
+ return {
227
+ ...explanationResult,
228
+ outputAmount,
229
+ outputs,
230
+ };
231
+ }
232
+ /**
233
+ * Extracts the objects that were provided as inputs while building the transaction.
234
+ * Handles both the simple case (MergeCoins/SplitCoins first) and the address-balance
235
+ * case where MoveCall(redeem_funds) may precede MergeCoins/SplitCoins.
236
+ * @param tx
237
+ * @returns {SuiObjectRef[]} Objects that are inputs for the transaction
238
+ */
239
+ getInputObjectsFromTx(tx) {
240
+ const inputs = tx.inputs;
241
+ // Scan all transactions to find the first MergeCoins or SplitCoins,
242
+ // which holds references to the coin object inputs.
243
+ let args = [];
244
+ for (const txn of tx.transactions) {
245
+ const transaction = txn;
246
+ if (transaction.kind === 'MergeCoins') {
247
+ const { destination, sources } = transaction;
248
+ args = [destination, ...sources];
249
+ break;
250
+ }
251
+ else if (transaction.kind === 'SplitCoins') {
252
+ args = [transaction.coin];
253
+ break;
254
+ }
255
+ }
256
+ const inputObjects = [];
257
+ args.forEach((arg) => {
258
+ if (arg.kind === 'Input') {
259
+ let input = inputs[arg.index];
260
+ if ('value' in input) {
261
+ input = input.value;
262
+ }
263
+ if ('Object' in input && (0, utils_1.isImmOrOwnedObj)(input.Object)) {
264
+ inputObjects.push(input.Object.ImmOrOwned);
265
+ }
266
+ }
267
+ });
268
+ return inputObjects;
269
+ }
270
+ }
271
+ exports.TokenTransferTransaction = TokenTransferTransaction;
272
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5UcmFuc2ZlclRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90b2tlblRyYW5zZmVyVHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsK0NBQTRDO0FBQzVDLDJDQUFtRTtBQUNuRSxtREFROEI7QUFDOUIsNkNBQStFO0FBQy9FLGlEQUFpRDtBQUNqRCxpREFNNkI7QUFDN0IscUNBQWtDO0FBQ2xDLGdFQUFxQztBQUVyQyxNQUFhLHdCQUF5QixTQUFRLHlCQUFpRDtJQUM3RixZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBd0Q7UUFDeEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFJLEVBQUU7UUFDSixPQUFPLElBQUksQ0FBQyxHQUFHLElBQUksNEJBQWdCLENBQUM7SUFDdEMsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUF3QixFQUFFLFNBQWlCO1FBQ3RELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsT0FBTyxDQUFDLEdBQVk7UUFDbEIsT0FBTyxJQUFJLENB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QUFJLFFBQVEsSUFBSSxLQUFLLElBQUksSUFBQSx1QkFBZSxFQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUN2RCxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzdDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0NBQ0Y7QUExUEQsNERBMFBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3VpVHJhbnNhY3Rpb24sIFRva2VuVHJhbnNmZXJQcm9ncmFtbWFibGVUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiwgVHhEYXRhIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgU1VJX0FERFJFU1NfTEVOR1RILCBVTkFWQUlMQUJMRV9URVhUIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgQmFzZUtleSxcbiAgUHVibGljS2V5IGFzIEJhc2VQdWJsaWNLZXksXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBQYXJzZVRyYW5zYWN0aW9uRXJyb3IsXG4gIFNpZ25hdHVyZSxcbiAgVHJhbnNhY3Rpb25SZWNpcGllbnQsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQ2FsbEFyZywgbm9ybWFsaXplU3VpQWRkcmVzcywgU3VpT2JqZWN0UmVmIH0gZnJvbSAnLi9teXN0ZW5sYWIvdHlwZXMnO1xuaW1wb3J0IHV0aWxzLCB7IGlzSW1tT3JPd25lZE9iaiB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHtcbiAgYnVpbGRlcixcbiAgSW5wdXRzLFxuICBUcmFuc2FjdGlvbkFyZ3VtZW50LFxuICBUcmFuc2FjdGlvbkJsb2NrSW5wdXQsXG4gIFRyYW5zYWN0aW9uVHlwZSBhcyBTdWlUcmFuc2FjdGlvbkJsb2NrVHlwZSxcbn0gZnJvbSAnLi9teXN0ZW5sYWIvYnVpbGRlcic7XG5pbXBvcnQgeyBCQ1MgfSBmcm9tICdAbXlzdGVuL2Jjcyc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5cbmV4cG9ydCBjbGFzcyBUb2tlblRyYW5zZmVyVHJhbnNhY3Rpb24gZXh0ZW5kcyBUcmFuc2FjdGlvbjxUb2tlblRyYW5zZmVyUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24+IHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgZ2V0IHN1aVRyYW5zYWN0aW9uKCk6IFN1aVRyYW5zYWN0aW9uPFRva2VuVHJhbnNmZXJQcm9ncmFtbWFibGVUcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl9zdWlUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIHNldFN1aVRyYW5zYWN0aW9uKHR4OiBTdWlUcmFuc2FjdGlvbjxUb2tlblRyYW5zZmVyUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24+KTogdm9pZCB7XG4gICAgdGhpcy5fc3VpVHJhbnNhY3Rpb24gPSB0eDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faWQgfHwgVU5BVkFJTEFCTEVfVEVYVDtcbiAgfVxuXG4gIGFkZFNpZ25hdHVyZShwdWJsaWNLZXk6IEJhc2VQdWJsaWNLZXksIHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHNpZ25hdHVyZS50b1N0cmluZygnaGV4JykpO1xuICAgIHRoaXMuX3NpZ25hdHVyZSA9IHsgcHVibGljS2V5LCBzaWduYXR1cmUgfTtcbiAgICB0aGlzLnNlcmlhbGl6ZSgpO1xuICB9XG5cbiAgZ2V0IHN1aVNpZ25hdHVyZSgpOiBTaWduYXR1cmUge1xuICAgIHJldHVybiB0aGlzLl9zaWduYXR1cmU7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgY2FuU2lnbihrZXk6IEJhc2VLZXkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fc3VpVHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplKCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Kc29uKCk6IFR4RGF0YSB7XG4gICAgaWYgKCF0aGlzLl9zdWlUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBjb25zdCB0eCA9IHRoaXMuX3N1aVRyYW5zYWN0aW9uO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5faWQsXG4gICAgICBzZW5kZXI6IHR4LnNlbmRlcixcbiAgICAgIGtpbmQ6IHsgUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb246IHR4LnR4IH0sXG4gICAgICBnYXNEYXRhOiB0eC5nYXNEYXRhLFxuICAgICAgZXhwaXJhdGlvbjogdHguZXhwaXJhdGlvbiA/PyB7IE5vbmU6IG51bGwgfSxcbiAgICAgIGlucHV0T2JqZWN0czogdGhpcy5nZXRJbnB1dE9iamVjdHNGcm9tVHgodHgudHgpLFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudG9Kc29uKCk7XG4gICAgY29uc3QgZGlzcGxheU9yZGVyID0gWydpZCcsICdvdXRwdXRzJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdmZWUnLCAndHlwZSddO1xuICAgIGNvbnN0IG91dHB1dHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W10gPSBbXTtcblxuICAgIGNvbnN0IGV4cGxhbmF0aW9uUmVzdWx0OiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uID0ge1xuICAgICAgZGlzcGxheU9yZGVyLFxuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBvdXRwdXRzLFxuICAgICAgb3V0cHV0QW1vdW50OiAnMCcsXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgZmVlOiB7IGZlZTogdGhpcy5zdWlUcmFuc2FjdGlvbi5nYXNEYXRhLmJ1ZGdldC50b1N0cmluZygpIH0sXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgfTtcblxuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TZW5kOlxuICAgICAgICByZXR1cm4gdGhpcy5leHBsYWluVG9rZW5UcmFuc2ZlclRyYW5zYWN0aW9uKHJlc3VsdCwgZXhwbGFuYXRpb25SZXN1bHQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiB0eXBlIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uVHlwZX0gdHJhbnNhY3Rpb25UeXBlIFRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIGJlIHNldC5cbiAgICovXG4gIHRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvblR5cGU6IFRyYW5zYWN0aW9uVHlwZSk6IHZvaWQge1xuICAgIHRoaXMuX3R5cGUgPSB0cmFuc2FjdGlvblR5cGU7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgaW5wdXQgYW5kIG91dHB1dCBkYXRhIG9uIHRoaXMgdHJhbnNhY3Rpb24uXG4gICAqL1xuICBsb2FkSW5wdXRzQW5kT3V0cHV0cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3VpVHJhbnNhY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZWNpcGllbnRzID0gdXRpbHMuZ2V0UmVjaXBpZW50cyh0aGlzLl9zdWlUcmFuc2FjdGlvbik7XG4gICAgLy8gVXNlIEJpZ051bWJlcjogdG9rZW4gY29uc29saWRhdGlvbiBhbW91bnRzIGNhbiBleGNlZWQgMl41MyBhbmQgYSBOdW1iZXItYmFzZWQgc3VtXG4gICAgLy8gd291bGQgbG9zZSBwcmVjaXNpb24uXG4gICAgY29uc3QgdG90YWxBbW91bnQgPSByZWNpcGllbnRzLnJlZHVjZSgoYWNjdW11bGF0b3IsIGN1cnJlbnQpID0+IGFjY3VtdWxhdG9yLnBsdXMoY3VycmVudC5hbW91bnQpLCBuZXcgQmlnTnVtYmVyKDApKTtcbiAgICB0aGlzLl9vdXRwdXRzID0gcmVjaXBpZW50cy5tYXAoKHJlY2lwaWVudCkgPT4gKHtcbiAgICAgIGFkZHJlc3M6IHJlY2lwaWVudC5hZGRyZXNzLFxuICAgICAgdmFsdWU6IHJlY2lwaWVudC5hbW91bnQsXG4gICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgfSkpO1xuICAgIHRoaXMuX2lucHV0cyA9IFtcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczogdGhpcy5zdWlUcmFuc2FjdGlvbi5zZW5kZXIsXG4gICAgICAgIHZhbHVlOiB0b3RhbEFtb3VudC50b0ZpeGVkKCksXG4gICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoaXMgdHJhbnNhY3Rpb24gcGF5bG9hZFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmF3VHJhbnNhY3Rpb25cbiAgICovXG4gIGZyb21SYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIHV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgICB0aGlzLl9zdWlUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uLmRlc2VyaWFsaXplU3VpVHJhbnNhY3Rpb24oXG4gICAgICAgIHJhd1RyYW5zYWN0aW9uXG4gICAgICApIGFzIFN1aVRyYW5zYWN0aW9uPFRva2VuVHJhbnNmZXJQcm9ncmFtbWFibGVUcmFuc2FjdGlvbj47XG4gICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlNlbmQ7XG4gICAgICB0aGlzLl9pZCA9IHRoaXMuX3N1aVRyYW5zYWN0aW9uLmlkO1xuICAgICAgdGhpcy5sb2FkSW5wdXRzQW5kT3V0cHV0cygpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBmdW5jdGlvbiBmb3Igc2VyaWFsaXplKCkgdG8gZ2V0IHRoZSBjb3JyZWN0IHR4RGF0YSB3aXRoIHRyYW5zYWN0aW9uIHR5cGVcbiAgICpcbiAgICogQHJldHVybiB7VHhEYXRhfVxuICAgKi9cbiAgcHVibGljIGdldFR4RGF0YSgpOiBUeERhdGEge1xuICAgIGlmICghdGhpcy5fc3VpVHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignZW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgY29uc3QgaW5wdXRzOiBDYWxsQXJnW10gfCBUcmFuc2FjdGlvbkJsb2NrSW5wdXRbXSA9IHRoaXMuX3N1aVRyYW5zYWN0aW9uLnR4LmlucHV0cy5tYXAoKGlucHV0KSA9PiB7XG4gICAgICBpZiAoaW5wdXQuaGFzT3duUHJvcGVydHkoJ09iamVjdCcpKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgIH1cbiAgICAgIGlmIChpbnB1dC5oYXNPd25Qcm9wZXJ0eSgnUHVyZScpKSB7XG4gICAgICAgIGlmIChpbnB1dC5QdXJlLmxlbmd0aCA9PT0gU1VJX0FERFJFU1NfTEVOR1RIKSB7XG4gICAgICAgICAgY29uc3QgYWRkcmVzcyA9IG5vcm1hbGl6ZVN1aUFkZHJlc3MoXG4gICAgICAgICAgICBidWlsZGVyLmRlKEJDUy5BRERSRVNTLCBCdWZmZXIuZnJvbShpbnB1dC5QdXJlKS50b1N0cmluZygnYmFzZTY0JyksICdiYXNlNjQnKVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIElucHV0cy5QdXJlKGFkZHJlc3MsIEJDUy5BRERSRVNTKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBhbW91bnQgPSBidWlsZGVyLmRlKEJDUy5VNjQsIEJ1ZmZlci5mcm9tKGlucHV0LlB1cmUpLnRvU3RyaW5nKCdiYXNlNjQnKSwgJ2Jhc2U2NCcpO1xuICAgICAgICAgIHJldHVybiBJbnB1dHMuUHVyZShhbW91bnQsIEJDUy5VNjQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaW5wdXQuaGFzT3duUHJvcGVydHkoJ0JhbGFuY2VXaXRoZHJhd2FsJykpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBpbnB1dC5raW5kID09PSAnSW5wdXQnICYmXG4gICAgICAgIChpbnB1dC52YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnT2JqZWN0JykgfHxcbiAgICAgICAgICBpbnB1dC52YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnUHVyZScpIHx8XG4gICAgICAgICAgaW5wdXQudmFsdWUuaGFzT3duUHJvcGVydHkoJ0JhbGFuY2VXaXRoZHJhd2FsJykpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGlucHV0LnZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIElucHV0cy5QdXJlKGlucHV0LnZhbHVlLCBpbnB1dC50eXBlID09PSAncHVyZScgPyBCQ1MuVTY0IDogQkNTLkFERFJFU1MpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcHJvZ3JhbW1hYmxlVHggPSB7XG4gICAgICBpbnB1dHMsXG4gICAgICB0cmFuc2FjdGlvbnM6IHRoaXMuX3N1aVRyYW5zYWN0aW9uLnR4LnRyYW5zYWN0aW9ucyxcbiAgICB9IGFzIFRva2VuVHJhbnNmZXJQcm9ncmFtbWFibGVUcmFuc2FjdGlvbjtcblxuICAgIHJldHVybiB7XG4gICAgICBzZW5kZXI6IHRoaXMuX3N1aVRyYW5zYWN0aW9uLnNlbmRlcixcbiAgICAgIGV4cGlyYXRpb246IHRoaXMuX3N1aVRyYW5zYWN0aW9uLmV4cGlyYXRpb24gPz8geyBOb25lOiBudWxsIH0sXG4gICAgICBnYXNEYXRhOiB0aGlzLl9zdWlUcmFuc2FjdGlvbi5nYXNEYXRhLFxuICAgICAga2luZDoge1xuICAgICAgICBQcm9ncmFtbWFibGVUcmFuc2FjdGlvbjogcHJvZ3JhbW1hYmxlVHgsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGNvbXBsZXRlIGV4cGxhbmF0aW9uIGZvciBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7VHhEYXRhfSBqc29uIFRoZSB0cmFuc2FjdGlvbiBkYXRhIGluIGpzb24gZm9ybWF0XG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25FeHBsYW5hdGlvbn0gZXhwbGFuYXRpb25SZXN1bHQgVGhlIHRyYW5zYWN0aW9uIGV4cGxhbmF0aW9uIHRvIGJlIGNvbXBsZXRlZFxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25FeHBsYW5hdGlvbn1cbiAgICovXG4gIGV4cGxhaW5Ub2tlblRyYW5zZmVyVHJhbnNhY3Rpb24oanNvbjogVHhEYXRhLCBleHBsYW5hdGlvblJlc3VsdDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbik6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGNvbnN0IHJlY2lwaWVudHMgPSB1dGlscy5nZXRSZWNpcGllbnRzKHRoaXMuc3VpVHJhbnNhY3Rpb24pO1xuICAgIGNvbnN0IG91dHB1dHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W10gPSByZWNpcGllbnRzLm1hcCgocmVjaXBpZW50KSA9PiByZWNpcGllbnQpO1xuICAgIGNvbnN0IG91dHB1dEFtb3VudCA9IHJlY2lwaWVudHNcbiAgICAgIC5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50KSA9PiBhY2N1bXVsYXRvci5wbHVzKGN1cnJlbnQuYW1vdW50KSwgbmV3IEJpZ051bWJlcigwKSlcbiAgICAgIC50b0ZpeGVkKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZXhwbGFuYXRpb25SZXN1bHQsXG4gICAgICBvdXRwdXRBbW91bnQsXG4gICAgICBvdXRwdXRzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgdGhlIG9iamVjdHMgdGhhdCB3ZXJlIHByb3ZpZGVkIGFzIGlucHV0cyB3aGlsZSBidWlsZGluZyB0aGUgdHJhbnNhY3Rpb24uXG4gICAqIEhhbmRsZXMgYm90aCB0aGUgc2ltcGxlIGNhc2UgKE1lcmdlQ29pbnMvU3BsaXRDb2lucyBmaXJzdCkgYW5kIHRoZSBhZGRyZXNzLWJhbGFuY2VcbiAgICogY2FzZSB3aGVyZSBNb3ZlQ2FsbChyZWRlZW1fZnVuZHMpIG1heSBwcmVjZWRlIE1lcmdlQ29pbnMvU3BsaXRDb2lucy5cbiAgICogQHBhcmFtIHR4XG4gICAqIEByZXR1cm5zIHtTdWlPYmplY3RSZWZbXX0gT2JqZWN0cyB0aGF0IGFyZSBpbnB1dHMgZm9yIHRoZSB0cmFuc2FjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBnZXRJbnB1dE9iamVjdHNGcm9tVHgodHg6IFRva2VuVHJhbnNmZXJQcm9ncmFtbWFibGVUcmFuc2FjdGlvbik6IFN1aU9iamVjdFJlZltdIHtcbiAgICBjb25zdCBpbnB1dHMgPSB0eC5pbnB1dHM7XG5cbiAgICAvLyBTY2FuIGFsbCB0cmFuc2FjdGlvbnMgdG8gZmluZCB0aGUgZmlyc3QgTWVyZ2VDb2lucyBvciBTcGxpdENvaW5zLFxuICAgIC8vIHdoaWNoIGhvbGRzIHJlZmVyZW5jZXMgdG8gdGhlIGNvaW4gb2JqZWN0IGlucHV0cy5cbiAgICBsZXQgYXJnczogVHJhbnNhY3Rpb25Bcmd1bWVudFtdID0gW107XG4gICAgZm9yIChjb25zdCB0eG4gb2YgdHgudHJhbnNhY3Rpb25zKSB7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHR4biBhcyBTdWlUcmFuc2FjdGlvbkJsb2NrVHlwZTtcbiAgICAgIGlmICh0cmFuc2FjdGlvbi5raW5kID09PSAnTWVyZ2VDb2lucycpIHtcbiAgICAgICAgY29uc3QgeyBkZXN0aW5hdGlvbiwgc291cmNlcyB9ID0gdHJhbnNhY3Rpb247XG4gICAgICAgIGFyZ3MgPSBbZGVzdGluYXRpb24sIC4uLnNvdXJjZXNdO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAodHJhbnNhY3Rpb24ua2luZCA9PT0gJ1NwbGl0Q29pbnMnKSB7XG4gICAgICAgIGFyZ3MgPSBbdHJhbnNhY3Rpb24uY29pbl07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGlucHV0T2JqZWN0czogU3VpT2JqZWN0UmVmW10gPSBbXTtcbiAgICBhcmdzLmZvckVhY2goKGFyZykgPT4ge1xuICAgICAgaWYgKGFyZy5raW5kID09PSAnSW5wdXQnKSB7XG4gICAgICAgIGxldCBpbnB1dCA9IGlucHV0c1thcmcuaW5kZXhdO1xuICAgICAgICBpZiAoJ3ZhbHVlJyBpbiBpbnB1dCkge1xuICAgICAgICAgIGlucHV0ID0gaW5wdXQudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCdPYmplY3QnIGluIGlucHV0ICYmIGlzSW1tT3JPd25lZE9iaihpbnB1dC5PYmplY3QpKSB7XG4gICAgICAgICAgaW5wdXRPYmplY3RzLnB1c2goaW5wdXQuT2JqZWN0LkltbU9yT3duZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaW5wdXRPYmplY3RzO1xuICB9XG59XG4iXX0=