@bitgo-beta/sdk-coin-sui 3.0.3-beta.172 → 3.0.3-beta.1721

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 +264 -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 +44 -1
  99. package/dist/src/lib/transferBuilder.d.ts.map +1 -1
  100. package/dist/src/lib/transferBuilder.js +208 -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 +125 -10
  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 +250 -20
  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 +463 -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 +774 -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 -390
@@ -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(Number(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+IDApIHtcbiAgICAgIHByb2dyYW1tYWJsZVR4QnVpbGRlci5tZXJnZUNvaW5zKG1lcmdlZE9iamVjdCwgaW5wdXRPYmplY3RzKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yZWNpcGllbnRzLmZvckVhY2goKHJlY2lwaWVudCkgPT4ge1xuICAgICAgY29uc3Qgc3BsaXRPYmplY3QgPSBwcm9ncmFtbWFibGVUeEJ1aWxkZXIuc3BsaXRDb2lucyhtZXJnZWRPYmplY3QsIFtcbiAgICAgICAgcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLnB1cmUoTnVtYmVyKHJlY2lwaWVudC5hbW91bnQpKSxcbiAgICAgIF0pO1xuICAgICAgcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLnRyYW5zZmVyT2JqZWN0cyhbc3BsaXRPYmplY3RdLCBwcm9ncmFtbWFibGVUeEJ1aWxkZXIub2JqZWN0KHJlY2lwaWVudC5hZGRyZXNzKSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0eERhdGEgPSBwcm9ncmFtbWFibGVUeEJ1aWxkZXIuYmxvY2tEYXRhO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiB0aGlzLl90eXBlLFxuICAgICAgc2VuZGVyOiB0aGlzLl9zZW5kZXIsXG4gICAgICB0eDoge1xuICAgICAgICBpbnB1dHM6IFsuLi50eERhdGEuaW5wdXRzXSxcbiAgICAgICAgdHJhbnNhY3Rpb25zOiBbLi4udHhEYXRhLnRyYW5zYWN0aW9uc10sXG4gICAgICB9LFxuICAgICAgZ2FzRGF0YToge1xuICAgICAgICAuLi50aGlzLl9nYXNEYXRhLFxuICAgICAgfSxcbiAgICAgIGV4cGlyYXRpb246IHRoaXMuX2V4cGlyYXRpb24sXG4gICAgICBmdW5kc0luQWRkcmVzc0JhbGFuY2U6IHRoaXMuX2Z1bmRzSW5BZGRyZXNzQmFsYW5jZS5ndCgwKSA/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;AAY9B,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;IAqB5B;;;;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;IAYhH;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;CAiC9B"}
@@ -0,0 +1,264 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.TokenTransferTransaction = void 0;
37
+ const transaction_1 = require("./transaction");
38
+ const constants_1 = require("./constants");
39
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
40
+ const types_1 = require("./mystenlab/types");
41
+ const utils_1 = __importStar(require("./utils"));
42
+ const builder_1 = require("./mystenlab/builder");
43
+ const bcs_1 = require("@mysten/bcs");
44
+ class TokenTransferTransaction extends transaction_1.Transaction {
45
+ constructor(_coinConfig) {
46
+ super(_coinConfig);
47
+ }
48
+ get suiTransaction() {
49
+ return this._suiTransaction;
50
+ }
51
+ setSuiTransaction(tx) {
52
+ this._suiTransaction = tx;
53
+ }
54
+ /** @inheritDoc */
55
+ get id() {
56
+ return this._id || constants_1.UNAVAILABLE_TEXT;
57
+ }
58
+ addSignature(publicKey, signature) {
59
+ this._signatures.push(signature.toString('hex'));
60
+ this._signature = { publicKey, signature };
61
+ this.serialize();
62
+ }
63
+ get suiSignature() {
64
+ return this._signature;
65
+ }
66
+ /** @inheritdoc */
67
+ canSign(key) {
68
+ return true;
69
+ }
70
+ /** @inheritdoc */
71
+ toBroadcastFormat() {
72
+ if (!this._suiTransaction) {
73
+ throw new sdk_core_1.InvalidTransactionError('Empty transaction');
74
+ }
75
+ return this.serialize();
76
+ }
77
+ /** @inheritdoc */
78
+ toJson() {
79
+ if (!this._suiTransaction) {
80
+ throw new sdk_core_1.ParseTransactionError('Empty transaction');
81
+ }
82
+ const tx = this._suiTransaction;
83
+ return {
84
+ id: this._id,
85
+ sender: tx.sender,
86
+ kind: { ProgrammableTransaction: tx.tx },
87
+ gasData: tx.gasData,
88
+ expiration: tx.expiration ?? { None: null },
89
+ inputObjects: this.getInputObjectsFromTx(tx.tx),
90
+ };
91
+ }
92
+ /** @inheritDoc */
93
+ explainTransaction() {
94
+ const result = this.toJson();
95
+ const displayOrder = ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'type'];
96
+ const outputs = [];
97
+ const explanationResult = {
98
+ displayOrder,
99
+ id: this.id,
100
+ outputs,
101
+ outputAmount: '0',
102
+ changeOutputs: [],
103
+ changeAmount: '0',
104
+ fee: { fee: this.suiTransaction.gasData.budget.toString() },
105
+ type: this.type,
106
+ };
107
+ switch (this.type) {
108
+ case sdk_core_1.TransactionType.Send:
109
+ return this.explainTokenTransferTransaction(result, explanationResult);
110
+ default:
111
+ throw new sdk_core_1.InvalidTransactionError('Transaction type not supported');
112
+ }
113
+ }
114
+ /**
115
+ * Set the transaction type.
116
+ *
117
+ * @param {TransactionType} transactionType The transaction type to be set.
118
+ */
119
+ transactionType(transactionType) {
120
+ this._type = transactionType;
121
+ }
122
+ /**
123
+ * Load the input and output data on this transaction.
124
+ */
125
+ loadInputsAndOutputs() {
126
+ if (!this.suiTransaction) {
127
+ return;
128
+ }
129
+ const recipients = utils_1.default.getRecipients(this._suiTransaction);
130
+ const totalAmount = recipients.reduce((accumulator, current) => accumulator + Number(current.amount), 0);
131
+ this._outputs = recipients.map((recipient) => ({
132
+ address: recipient.address,
133
+ value: recipient.amount,
134
+ coin: this._coinConfig.name,
135
+ }));
136
+ this._inputs = [
137
+ {
138
+ address: this.suiTransaction.sender,
139
+ value: totalAmount.toString(),
140
+ coin: this._coinConfig.name,
141
+ },
142
+ ];
143
+ }
144
+ /**
145
+ * Sets this transaction payload
146
+ *
147
+ * @param {string} rawTransaction
148
+ */
149
+ fromRawTransaction(rawTransaction) {
150
+ try {
151
+ utils_1.default.isValidRawTransaction(rawTransaction);
152
+ this._suiTransaction = transaction_1.Transaction.deserializeSuiTransaction(rawTransaction);
153
+ this._type = sdk_core_1.TransactionType.Send;
154
+ this._id = this._suiTransaction.id;
155
+ this.loadInputsAndOutputs();
156
+ }
157
+ catch (e) {
158
+ throw e;
159
+ }
160
+ }
161
+ /**
162
+ * Helper function for serialize() to get the correct txData with transaction type
163
+ *
164
+ * @return {TxData}
165
+ */
166
+ getTxData() {
167
+ if (!this._suiTransaction) {
168
+ throw new sdk_core_1.InvalidTransactionError('empty transaction');
169
+ }
170
+ const inputs = this._suiTransaction.tx.inputs.map((input) => {
171
+ if (input.hasOwnProperty('Object')) {
172
+ return input;
173
+ }
174
+ if (input.hasOwnProperty('Pure')) {
175
+ if (input.Pure.length === constants_1.SUI_ADDRESS_LENGTH) {
176
+ const address = (0, types_1.normalizeSuiAddress)(builder_1.builder.de(bcs_1.BCS.ADDRESS, Buffer.from(input.Pure).toString('base64'), 'base64'));
177
+ return builder_1.Inputs.Pure(address, bcs_1.BCS.ADDRESS);
178
+ }
179
+ else {
180
+ const amount = builder_1.builder.de(bcs_1.BCS.U64, Buffer.from(input.Pure).toString('base64'), 'base64');
181
+ return builder_1.Inputs.Pure(amount, bcs_1.BCS.U64);
182
+ }
183
+ }
184
+ if (input.hasOwnProperty('BalanceWithdrawal')) {
185
+ return input;
186
+ }
187
+ if (input.kind === 'Input' &&
188
+ (input.value.hasOwnProperty('Object') ||
189
+ input.value.hasOwnProperty('Pure') ||
190
+ input.value.hasOwnProperty('BalanceWithdrawal'))) {
191
+ return input.value;
192
+ }
193
+ return builder_1.Inputs.Pure(input.value, input.type === 'pure' ? bcs_1.BCS.U64 : bcs_1.BCS.ADDRESS);
194
+ });
195
+ const programmableTx = {
196
+ inputs,
197
+ transactions: this._suiTransaction.tx.transactions,
198
+ };
199
+ return {
200
+ sender: this._suiTransaction.sender,
201
+ expiration: this._suiTransaction.expiration ?? { None: null },
202
+ gasData: this._suiTransaction.gasData,
203
+ kind: {
204
+ ProgrammableTransaction: programmableTx,
205
+ },
206
+ };
207
+ }
208
+ /**
209
+ * Returns a complete explanation for a transfer transaction
210
+ * @param {TxData} json The transaction data in json format
211
+ * @param {TransactionExplanation} explanationResult The transaction explanation to be completed
212
+ * @returns {TransactionExplanation}
213
+ */
214
+ explainTokenTransferTransaction(json, explanationResult) {
215
+ const recipients = utils_1.default.getRecipients(this.suiTransaction);
216
+ const outputs = recipients.map((recipient) => recipient);
217
+ const outputAmount = recipients.reduce((accumulator, current) => accumulator + Number(current.amount), 0);
218
+ return {
219
+ ...explanationResult,
220
+ outputAmount,
221
+ outputs,
222
+ };
223
+ }
224
+ /**
225
+ * Extracts the objects that were provided as inputs while building the transaction.
226
+ * Handles both the simple case (MergeCoins/SplitCoins first) and the address-balance
227
+ * case where MoveCall(redeem_funds) may precede MergeCoins/SplitCoins.
228
+ * @param tx
229
+ * @returns {SuiObjectRef[]} Objects that are inputs for the transaction
230
+ */
231
+ getInputObjectsFromTx(tx) {
232
+ const inputs = tx.inputs;
233
+ // Scan all transactions to find the first MergeCoins or SplitCoins,
234
+ // which holds references to the coin object inputs.
235
+ let args = [];
236
+ for (const txn of tx.transactions) {
237
+ const transaction = txn;
238
+ if (transaction.kind === 'MergeCoins') {
239
+ const { destination, sources } = transaction;
240
+ args = [destination, ...sources];
241
+ break;
242
+ }
243
+ else if (transaction.kind === 'SplitCoins') {
244
+ args = [transaction.coin];
245
+ break;
246
+ }
247
+ }
248
+ const inputObjects = [];
249
+ args.forEach((arg) => {
250
+ if (arg.kind === 'Input') {
251
+ let input = inputs[arg.index];
252
+ if ('value' in input) {
253
+ input = input.value;
254
+ }
255
+ if ('Object' in input && (0, utils_1.isImmOrOwnedObj)(input.Object)) {
256
+ inputObjects.push(input.Object.ImmOrOwned);
257
+ }
258
+ }
259
+ });
260
+ return inputObjects;
261
+ }
262
+ }
263
+ exports.TokenTransferTransaction = TokenTransferTransaction;
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5UcmFuc2ZlclRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90b2tlblRyYW5zZmVyVHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsK0NBQTRDO0FBQzVDLDJDQUFtRTtBQUNuRSxtREFROEI7QUFDOUIsNkNBQStFO0FBQy9FLGlEQUFpRDtBQUNqRCxpREFNNkI7QUFDN0IscUNBQWtDO0FBRWxDLE1BQWEsd0JBQXlCLFNBQVEseUJBQWlEO0lBQzdGLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUF3RDtRQUN4RSxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQUksRUFBRTtRQUNKLE9BQU8sSUFBSSxDQUFDLEdBQUcsSUFBSSw0QkFBZ0IsQ0FBQztJQUN0QyxDQUFDO0lBRUQsWUFBWSxDQUFDLFNBQXdCLEVBQUUsU0FBaUI7UUFDdEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixPQUFPLENBQUMsR0FBWTtRQUNsQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFF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SyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDN0MsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7Q0FDRjtBQXRQRCw0REFzUEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWlUcmFuc2FjdGlvbiwgVG9rZW5UcmFuc2ZlclByb2dyYW1tYWJsZVRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLCBUeERhdGEgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBTVUlfQUREUkVTU19MRU5HVEgsIFVOQVZBSUxBQkxFX1RFWFQgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBCYXNlS2V5LFxuICBQdWJsaWNLZXkgYXMgQmFzZVB1YmxpY0tleSxcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbiAgU2lnbmF0dXJlLFxuICBUcmFuc2FjdGlvblJlY2lwaWVudCxcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBDYWxsQXJnLCBub3JtYWxpemVTdWlBZGRyZXNzLCBTdWlPYmplY3RSZWYgfSBmcm9tICcuL215c3RlbmxhYi90eXBlcyc7XG5pbXBvcnQgdXRpbHMsIHsgaXNJbW1Pck93bmVkT2JqIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQge1xuICBidWlsZGVyLFxuICBJbnB1dHMsXG4gIFRyYW5zYWN0aW9uQXJndW1lbnQsXG4gIFRyYW5zYWN0aW9uQmxvY2tJbnB1dCxcbiAgVHJhbnNhY3Rpb25UeXBlIGFzIFN1aVRyYW5zYWN0aW9uQmxvY2tUeXBlLFxufSBmcm9tICcuL215c3RlbmxhYi9idWlsZGVyJztcbmltcG9ydCB7IEJDUyB9IGZyb20gJ0BteXN0ZW4vYmNzJztcblxuZXhwb3J0IGNsYXNzIFRva2VuVHJhbnNmZXJUcmFuc2FjdGlvbiBleHRlbmRzIFRyYW5zYWN0aW9uPFRva2VuVHJhbnNmZXJQcm9ncmFtbWFibGVUcmFuc2FjdGlvbj4ge1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICBnZXQgc3VpVHJhbnNhY3Rpb24oKTogU3VpVHJhbnNhY3Rpb248VG9rZW5UcmFuc2ZlclByb2dyYW1tYWJsZVRyYW5zYWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3N1aVRyYW5zYWN0aW9uO1xuICB9XG5cbiAgc2V0U3VpVHJhbnNhY3Rpb24odHg6IFN1aVRyYW5zYWN0aW9uPFRva2VuVHJhbnNmZXJQcm9ncmFtbWFibGVUcmFuc2FjdGlvbj4pOiB2b2lkIHtcbiAgICB0aGlzLl9zdWlUcmFuc2FjdGlvbiA9IHR4O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9pZCB8fCBVTkFWQUlMQUJMRV9URVhUO1xuICB9XG5cbiAgYWRkU2lnbmF0dXJlKHB1YmxpY0tleTogQmFzZVB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2goc2lnbmF0dXJlLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgdGhpcy5fc2lnbmF0dXJlID0geyBwdWJsaWNLZXksIHNpZ25hdHVyZSB9O1xuICAgIHRoaXMuc2VyaWFsaXplKCk7XG4gIH1cblxuICBnZXQgc3VpU2lnbmF0dXJlKCk6IFNpZ25hdHVyZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpZ25hdHVyZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBjYW5TaWduKGtleTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvQnJvYWRjYXN0Rm9ybWF0KCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLl9zdWlUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemUoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0pzb24oKTogVHhEYXRhIHtcbiAgICBpZiAoIXRoaXMuX3N1aVRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHR4ID0gdGhpcy5fc3VpVHJhbnNhY3Rpb247XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLl9pZCxcbiAgICAgIHNlbmRlcjogdHguc2VuZGVyLFxuICAgICAga2luZDogeyBQcm9ncmFtbWFibGVUcmFuc2FjdGlvbjogdHgudHggfSxcbiAgICAgIGdhc0RhdGE6IHR4Lmdhc0RhdGEsXG4gICAgICBleHBpcmF0aW9uOiB0eC5leHBpcmF0aW9uID8/IHsgTm9uZTogbnVsbCB9LFxuICAgICAgaW5wdXRPYmplY3RzOiB0aGlzLmdldElucHV0T2JqZWN0c0Zyb21UeCh0eC50eCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBleHBsYWluVHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy50b0pzb24oKTtcbiAgICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbJ2lkJywgJ291dHB1dHMnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZU91dHB1dHMnLCAnY2hhbmdlQW1vdW50JywgJ2ZlZScsICd0eXBlJ107XG4gICAgY29uc3Qgb3V0cHV0czogVHJhbnNhY3Rpb25SZWNpcGllbnRbXSA9IFtdO1xuXG4gICAgY29uc3QgZXhwbGFuYXRpb25SZXN1bHQ6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gPSB7XG4gICAgICBkaXNwbGF5T3JkZXIsXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG91dHB1dHMsXG4gICAgICBvdXRwdXRBbW91bnQ6ICcwJyxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICBmZWU6IHsgZmVlOiB0aGlzLnN1aVRyYW5zYWN0aW9uLmdhc0RhdGEuYnVkZ2V0LnRvU3RyaW5nKCkgfSxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICB9O1xuXG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNlbmQ6XG4gICAgICAgIHJldHVybiB0aGlzLmV4cGxhaW5Ub2tlblRyYW5zZmVyVHJhbnNhY3Rpb24ocmVzdWx0LCBleHBsYW5hdGlvblJlc3VsdCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIHR5cGUgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zYWN0aW9uIHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25UeXBlfSB0cmFuc2FjdGlvblR5cGUgVGhlIHRyYW5zYWN0aW9uIHR5cGUgdG8gYmUgc2V0LlxuICAgKi9cbiAgdHJhbnNhY3Rpb25UeXBlKHRyYW5zYWN0aW9uVHlwZTogVHJhbnNhY3Rpb25UeXBlKTogdm9pZCB7XG4gICAgdGhpcy5fdHlwZSA9IHRyYW5zYWN0aW9uVHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgb24gdGhpcyB0cmFuc2FjdGlvbi5cbiAgICovXG4gIGxvYWRJbnB1dHNBbmRPdXRwdXRzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zdWlUcmFuc2FjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlY2lwaWVudHMgPSB1dGlscy5nZXRSZWNpcGllbnRzKHRoaXMuX3N1aVRyYW5zYWN0aW9uKTtcbiAgICBjb25zdCB0b3RhbEFtb3VudCA9IHJlY2lwaWVudHMucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudCkgPT4gYWNjdW11bGF0b3IgKyBOdW1iZXIoY3VycmVudC5hbW91bnQpLCAwKTtcbiAgICB0aGlzLl9vdXRwdXRzID0gcmVjaXBpZW50cy5tYXAoKHJlY2lwaWVudCkgPT4gKHtcbiAgICAgIGFkZHJlc3M6IHJlY2lwaWVudC5hZGRyZXNzLFxuICAgICAgdmFsdWU6IHJlY2lwaWVudC5hbW91bnQsXG4gICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgfSkpO1xuICAgIHRoaXMuX2lucHV0cyA9IFtcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczogdGhpcy5zdWlUcmFuc2FjdGlvbi5zZW5kZXIsXG4gICAgICAgIHZhbHVlOiB0b3RhbEFtb3VudC50b1N0cmluZygpLFxuICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGlzIHRyYW5zYWN0aW9uIHBheWxvYWRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJhd1RyYW5zYWN0aW9uXG4gICAqL1xuICBmcm9tUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICB1dGlscy5pc1ZhbGlkUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgICAgdGhpcy5fc3VpVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbi5kZXNlcmlhbGl6ZVN1aVRyYW5zYWN0aW9uKFxuICAgICAgICByYXdUcmFuc2FjdGlvblxuICAgICAgKSBhcyBTdWlUcmFuc2FjdGlvbjxUb2tlblRyYW5zZmVyUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24+O1xuICAgICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TZW5kO1xuICAgICAgdGhpcy5faWQgPSB0aGlzLl9zdWlUcmFuc2FjdGlvbi5pZDtcbiAgICAgIHRoaXMubG9hZElucHV0c0FuZE91dHB1dHMoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHNlcmlhbGl6ZSgpIHRvIGdldCB0aGUgY29ycmVjdCB0eERhdGEgd2l0aCB0cmFuc2FjdGlvbiB0eXBlXG4gICAqXG4gICAqIEByZXR1cm4ge1R4RGF0YX1cbiAgICovXG4gIHB1YmxpYyBnZXRUeERhdGEoKTogVHhEYXRhIHtcbiAgICBpZiAoIXRoaXMuX3N1aVRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ2VtcHR5IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGNvbnN0IGlucHV0czogQ2FsbEFyZ1tdIHwgVHJhbnNhY3Rpb25CbG9ja0lucHV0W10gPSB0aGlzLl9zdWlUcmFuc2FjdGlvbi50eC5pbnB1dHMubWFwKChpbnB1dCkgPT4ge1xuICAgICAgaWYgKGlucHV0Lmhhc093blByb3BlcnR5KCdPYmplY3QnKSkge1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICB9XG4gICAgICBpZiAoaW5wdXQuaGFzT3duUHJvcGVydHkoJ1B1cmUnKSkge1xuICAgICAgICBpZiAoaW5wdXQuUHVyZS5sZW5ndGggPT09IFNVSV9BRERSRVNTX0xFTkdUSCkge1xuICAgICAgICAgIGNvbnN0IGFkZHJlc3MgPSBub3JtYWxpemVTdWlBZGRyZXNzKFxuICAgICAgICAgICAgYnVpbGRlci5kZShCQ1MuQUREUkVTUywgQnVmZmVyLmZyb20oaW5wdXQuUHVyZSkudG9TdHJpbmcoJ2Jhc2U2NCcpLCAnYmFzZTY0JylcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBJbnB1dHMuUHVyZShhZGRyZXNzLCBCQ1MuQUREUkVTUyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgYW1vdW50ID0gYnVpbGRlci5kZShCQ1MuVTY0LCBCdWZmZXIuZnJvbShpbnB1dC5QdXJlKS50b1N0cmluZygnYmFzZTY0JyksICdiYXNlNjQnKTtcbiAgICAgICAgICByZXR1cm4gSW5wdXRzLlB1cmUoYW1vdW50LCBCQ1MuVTY0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlucHV0Lmhhc093blByb3BlcnR5KCdCYWxhbmNlV2l0aGRyYXdhbCcpKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgaW5wdXQua2luZCA9PT0gJ0lucHV0JyAmJlxuICAgICAgICAoaW5wdXQudmFsdWUuaGFzT3duUHJvcGVydHkoJ09iamVjdCcpIHx8XG4gICAgICAgICAgaW5wdXQudmFsdWUuaGFzT3duUHJvcGVydHkoJ1B1cmUnKSB8fFxuICAgICAgICAgIGlucHV0LnZhbHVlLmhhc093blByb3BlcnR5KCdCYWxhbmNlV2l0aGRyYXdhbCcpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBpbnB1dC52YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBJbnB1dHMuUHVyZShpbnB1dC52YWx1ZSwgaW5wdXQudHlwZSA9PT0gJ3B1cmUnID8gQkNTLlU2NCA6IEJDUy5BRERSRVNTKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHByb2dyYW1tYWJsZVR4ID0ge1xuICAgICAgaW5wdXRzLFxuICAgICAgdHJhbnNhY3Rpb25zOiB0aGlzLl9zdWlUcmFuc2FjdGlvbi50eC50cmFuc2FjdGlvbnMsXG4gICAgfSBhcyBUb2tlblRyYW5zZmVyUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb247XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2VuZGVyOiB0aGlzLl9zdWlUcmFuc2FjdGlvbi5zZW5kZXIsXG4gICAgICBleHBpcmF0aW9uOiB0aGlzLl9zdWlUcmFuc2FjdGlvbi5leHBpcmF0aW9uID8/IHsgTm9uZTogbnVsbCB9LFxuICAgICAgZ2FzRGF0YTogdGhpcy5fc3VpVHJhbnNhY3Rpb24uZ2FzRGF0YSxcbiAgICAgIGtpbmQ6IHtcbiAgICAgICAgUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb246IHByb2dyYW1tYWJsZVR4LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBjb21wbGV0ZSBleHBsYW5hdGlvbiBmb3IgYSB0cmFuc2ZlciB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge1R4RGF0YX0ganNvbiBUaGUgdHJhbnNhY3Rpb24gZGF0YSBpbiBqc29uIGZvcm1hdFxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uRXhwbGFuYXRpb259IGV4cGxhbmF0aW9uUmVzdWx0IFRoZSB0cmFuc2FjdGlvbiBleHBsYW5hdGlvbiB0byBiZSBjb21wbGV0ZWRcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uRXhwbGFuYXRpb259XG4gICAqL1xuICBleHBsYWluVG9rZW5UcmFuc2ZlclRyYW5zYWN0aW9uKGpzb246IFR4RGF0YSwgZXhwbGFuYXRpb25SZXN1bHQ6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24pOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgICBjb25zdCByZWNpcGllbnRzID0gdXRpbHMuZ2V0UmVjaXBpZW50cyh0aGlzLnN1aVRyYW5zYWN0aW9uKTtcbiAgICBjb25zdCBvdXRwdXRzOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdID0gcmVjaXBpZW50cy5tYXAoKHJlY2lwaWVudCkgPT4gcmVjaXBpZW50KTtcbiAgICBjb25zdCBvdXRwdXRBbW91bnQgPSByZWNpcGllbnRzLnJlZHVjZSgoYWNjdW11bGF0b3IsIGN1cnJlbnQpID0+IGFjY3VtdWxhdG9yICsgTnVtYmVyKGN1cnJlbnQuYW1vdW50KSwgMCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZXhwbGFuYXRpb25SZXN1bHQsXG4gICAgICBvdXRwdXRBbW91bnQsXG4gICAgICBvdXRwdXRzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgdGhlIG9iamVjdHMgdGhhdCB3ZXJlIHByb3ZpZGVkIGFzIGlucHV0cyB3aGlsZSBidWlsZGluZyB0aGUgdHJhbnNhY3Rpb24uXG4gICAqIEhhbmRsZXMgYm90aCB0aGUgc2ltcGxlIGNhc2UgKE1lcmdlQ29pbnMvU3BsaXRDb2lucyBmaXJzdCkgYW5kIHRoZSBhZGRyZXNzLWJhbGFuY2VcbiAgICogY2FzZSB3aGVyZSBNb3ZlQ2FsbChyZWRlZW1fZnVuZHMpIG1heSBwcmVjZWRlIE1lcmdlQ29pbnMvU3BsaXRDb2lucy5cbiAgICogQHBhcmFtIHR4XG4gICAqIEByZXR1cm5zIHtTdWlPYmplY3RSZWZbXX0gT2JqZWN0cyB0aGF0IGFyZSBpbnB1dHMgZm9yIHRoZSB0cmFuc2FjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBnZXRJbnB1dE9iamVjdHNGcm9tVHgodHg6IFRva2VuVHJhbnNmZXJQcm9ncmFtbWFibGVUcmFuc2FjdGlvbik6IFN1aU9iamVjdFJlZltdIHtcbiAgICBjb25zdCBpbnB1dHMgPSB0eC5pbnB1dHM7XG5cbiAgICAvLyBTY2FuIGFsbCB0cmFuc2FjdGlvbnMgdG8gZmluZCB0aGUgZmlyc3QgTWVyZ2VDb2lucyBvciBTcGxpdENvaW5zLFxuICAgIC8vIHdoaWNoIGhvbGRzIHJlZmVyZW5jZXMgdG8gdGhlIGNvaW4gb2JqZWN0IGlucHV0cy5cbiAgICBsZXQgYXJnczogVHJhbnNhY3Rpb25Bcmd1bWVudFtdID0gW107XG4gICAgZm9yIChjb25zdCB0eG4gb2YgdHgudHJhbnNhY3Rpb25zKSB7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHR4biBhcyBTdWlUcmFuc2FjdGlvbkJsb2NrVHlwZTtcbiAgICAgIGlmICh0cmFuc2FjdGlvbi5raW5kID09PSAnTWVyZ2VDb2lucycpIHtcbiAgICAgICAgY29uc3QgeyBkZXN0aW5hdGlvbiwgc291cmNlcyB9ID0gdHJhbnNhY3Rpb247XG4gICAgICAgIGFyZ3MgPSBbZGVzdGluYXRpb24sIC4uLnNvdXJjZXNdO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAodHJhbnNhY3Rpb24ua2luZCA9PT0gJ1NwbGl0Q29pbnMnKSB7XG4gICAgICAgIGFyZ3MgPSBbdHJhbnNhY3Rpb24uY29pbl07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGlucHV0T2JqZWN0czogU3VpT2JqZWN0UmVmW10gPSBbXTtcbiAgICBhcmdzLmZvckVhY2goKGFyZykgPT4ge1xuICAgICAgaWYgKGFyZy5raW5kID09PSAnSW5wdXQnKSB7XG4gICAgICAgIGxldCBpbnB1dCA9IGlucHV0c1thcmcuaW5kZXhdO1xuICAgICAgICBpZiAoJ3ZhbHVlJyBpbiBpbnB1dCkge1xuICAgICAgICAgIGlucHV0ID0gaW5wdXQudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCdPYmplY3QnIGluIGlucHV0ICYmIGlzSW1tT3JPd25lZE9iaihpbnB1dC5PYmplY3QpKSB7XG4gICAgICAgICAgaW5wdXRPYmplY3RzLnB1c2goaW5wdXQuT2JqZWN0LkltbU9yT3duZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaW5wdXRPYmplY3RzO1xuICB9XG59XG4iXX0=