@bitgo-beta/sdk-coin-sui 1.4.1-alpha.31 → 1.4.1-alpha.310

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 (162) hide show
  1. package/.mocharc.yml +1 -2
  2. package/CHANGELOG.md +897 -0
  3. package/dist/src/index.d.ts +1 -0
  4. package/dist/src/index.d.ts.map +1 -1
  5. package/dist/src/index.js +7 -2
  6. package/dist/src/lib/compareTransactionBlocks.d.ts +8 -0
  7. package/dist/src/lib/compareTransactionBlocks.d.ts.map +1 -0
  8. package/dist/src/lib/compareTransactionBlocks.js +12 -0
  9. package/dist/src/lib/constants.d.ts +11 -3
  10. package/dist/src/lib/constants.d.ts.map +1 -1
  11. package/dist/src/lib/constants.js +20 -3
  12. package/dist/src/lib/customTransaction.d.ts +57 -0
  13. package/dist/src/lib/customTransaction.d.ts.map +1 -0
  14. package/dist/src/lib/customTransaction.js +159 -0
  15. package/dist/src/lib/customTransactionBuilder.d.ts +46 -0
  16. package/dist/src/lib/customTransactionBuilder.d.ts.map +1 -0
  17. package/dist/src/lib/customTransactionBuilder.js +117 -0
  18. package/dist/src/lib/iface.d.ts +86 -27
  19. package/dist/src/lib/iface.d.ts.map +1 -1
  20. package/dist/src/lib/iface.js +39 -10
  21. package/dist/src/lib/index.d.ts +10 -0
  22. package/dist/src/lib/index.d.ts.map +1 -1
  23. package/dist/src/lib/index.js +44 -10
  24. package/dist/src/lib/keyPair.d.ts.map +1 -1
  25. package/dist/src/lib/keyPair.js +25 -21
  26. package/dist/src/lib/mystenlab/builder/Inputs.d.ts +6 -6
  27. package/dist/src/lib/mystenlab/builder/Inputs.d.ts.map +1 -1
  28. package/dist/src/lib/mystenlab/builder/Inputs.js +19 -20
  29. package/dist/src/lib/mystenlab/builder/TransactionBlock.d.ts +302 -0
  30. package/dist/src/lib/mystenlab/builder/TransactionBlock.d.ts.map +1 -0
  31. package/dist/src/lib/mystenlab/builder/TransactionBlock.js +255 -0
  32. package/dist/src/lib/mystenlab/builder/{TransactionData.d.ts → TransactionDataBlock.d.ts} +62 -62
  33. package/dist/src/lib/mystenlab/builder/TransactionDataBlock.d.ts.map +1 -0
  34. package/dist/src/lib/mystenlab/builder/TransactionDataBlock.js +168 -0
  35. package/dist/src/lib/mystenlab/builder/{Commands.d.ts → Transactions.d.ts} +103 -158
  36. package/dist/src/lib/mystenlab/builder/Transactions.d.ts.map +1 -0
  37. package/dist/src/lib/mystenlab/builder/Transactions.js +118 -0
  38. package/dist/src/lib/mystenlab/builder/bcs.d.ts +6 -6
  39. package/dist/src/lib/mystenlab/builder/bcs.d.ts.map +1 -1
  40. package/dist/src/lib/mystenlab/builder/bcs.js +16 -16
  41. package/dist/src/lib/mystenlab/builder/index.d.ts +2 -2
  42. package/dist/src/lib/mystenlab/builder/index.d.ts.map +1 -1
  43. package/dist/src/lib/mystenlab/builder/index.js +8 -4
  44. package/dist/src/lib/mystenlab/builder/serializer.d.ts.map +1 -1
  45. package/dist/src/lib/mystenlab/builder/serializer.js +6 -11
  46. package/dist/src/lib/mystenlab/builder/utils.d.ts +2 -5
  47. package/dist/src/lib/mystenlab/builder/utils.d.ts.map +1 -1
  48. package/dist/src/lib/mystenlab/builder/utils.js +5 -5
  49. package/dist/src/lib/mystenlab/cryptography/hash.js +3 -4
  50. package/dist/src/lib/mystenlab/framework/framework.d.ts +8 -7
  51. package/dist/src/lib/mystenlab/framework/framework.d.ts.map +1 -1
  52. package/dist/src/lib/mystenlab/framework/framework.js +23 -27
  53. package/dist/src/lib/mystenlab/framework/index.d.ts.map +1 -1
  54. package/dist/src/lib/mystenlab/framework/index.js +6 -4
  55. package/dist/src/lib/mystenlab/framework/sui-system-state.d.ts +4 -23
  56. package/dist/src/lib/mystenlab/framework/sui-system-state.d.ts.map +1 -1
  57. package/dist/src/lib/mystenlab/framework/sui-system-state.js +11 -40
  58. package/dist/src/lib/mystenlab/txn-data-serializers/type-tag-serializer.d.ts.map +1 -0
  59. package/dist/src/lib/mystenlab/txn-data-serializers/type-tag-serializer.js +119 -0
  60. package/dist/src/lib/mystenlab/types/coin.d.ts +10 -10
  61. package/dist/src/lib/mystenlab/types/coin.d.ts.map +1 -1
  62. package/dist/src/lib/mystenlab/types/coin.js +19 -19
  63. package/dist/src/lib/mystenlab/types/common.d.ts +8 -8
  64. package/dist/src/lib/mystenlab/types/common.d.ts.map +1 -1
  65. package/dist/src/lib/mystenlab/types/common.js +22 -22
  66. package/dist/src/lib/mystenlab/types/events.d.ts +14 -14
  67. package/dist/src/lib/mystenlab/types/events.d.ts.map +1 -1
  68. package/dist/src/lib/mystenlab/types/events.js +17 -17
  69. package/dist/src/lib/mystenlab/types/index.d.ts.map +1 -1
  70. package/dist/src/lib/mystenlab/types/index.js +6 -5
  71. package/dist/src/lib/mystenlab/types/normalized.d.ts +21 -21
  72. package/dist/src/lib/mystenlab/types/normalized.d.ts.map +1 -1
  73. package/dist/src/lib/mystenlab/types/normalized.js +42 -43
  74. package/dist/src/lib/mystenlab/types/objects.d.ts +95 -78
  75. package/dist/src/lib/mystenlab/types/objects.d.ts.map +1 -1
  76. package/dist/src/lib/mystenlab/types/objects.js +98 -104
  77. package/dist/src/lib/mystenlab/types/option.d.ts +1 -1
  78. package/dist/src/lib/mystenlab/types/option.d.ts.map +1 -1
  79. package/dist/src/lib/mystenlab/types/option.js +2 -3
  80. package/dist/src/lib/mystenlab/types/sui-bcs.d.ts +10 -9
  81. package/dist/src/lib/mystenlab/types/sui-bcs.d.ts.map +1 -1
  82. package/dist/src/lib/mystenlab/types/sui-bcs.js +4 -4
  83. package/dist/src/lib/mystenlab/types/transactions.d.ts +3262 -1046
  84. package/dist/src/lib/mystenlab/types/transactions.d.ts.map +1 -1
  85. package/dist/src/lib/mystenlab/types/transactions.js +209 -187
  86. package/dist/src/lib/mystenlab/types/validator.d.ts +641 -0
  87. package/dist/src/lib/mystenlab/types/validator.d.ts.map +1 -0
  88. package/dist/src/lib/mystenlab/types/validator.js +156 -0
  89. package/dist/src/lib/resources/walrusConfig.d.ts +22 -0
  90. package/dist/src/lib/resources/walrusConfig.d.ts.map +1 -0
  91. package/dist/src/lib/resources/walrusConfig.js +37 -0
  92. package/dist/src/lib/rpcClient.d.ts +5 -0
  93. package/dist/src/lib/rpcClient.d.ts.map +1 -0
  94. package/dist/src/lib/rpcClient.js +74 -0
  95. package/dist/src/lib/stakingBuilder.d.ts +15 -15
  96. package/dist/src/lib/stakingBuilder.d.ts.map +1 -1
  97. package/dist/src/lib/stakingBuilder.js +113 -44
  98. package/dist/src/lib/stakingTransaction.d.ts +2 -10
  99. package/dist/src/lib/stakingTransaction.d.ts.map +1 -1
  100. package/dist/src/lib/stakingTransaction.js +97 -35
  101. package/dist/src/lib/tokenTransferBuilder.d.ts +38 -0
  102. package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -0
  103. package/dist/src/lib/tokenTransferBuilder.js +132 -0
  104. package/dist/src/lib/tokenTransferTransaction.d.ts +57 -0
  105. package/dist/src/lib/tokenTransferTransaction.d.ts.map +1 -0
  106. package/dist/src/lib/tokenTransferTransaction.js +250 -0
  107. package/dist/src/lib/transaction.d.ts +16 -6
  108. package/dist/src/lib/transaction.d.ts.map +1 -1
  109. package/dist/src/lib/transaction.js +126 -26
  110. package/dist/src/lib/transactionBuilder.d.ts +2 -3
  111. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  112. package/dist/src/lib/transactionBuilder.js +4 -4
  113. package/dist/src/lib/transactionBuilderFactory.d.ts +17 -2
  114. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  115. package/dist/src/lib/transactionBuilderFactory.js +52 -2
  116. package/dist/src/lib/transferBuilder.d.ts +3 -1
  117. package/dist/src/lib/transferBuilder.d.ts.map +1 -1
  118. package/dist/src/lib/transferBuilder.js +34 -11
  119. package/dist/src/lib/transferTransaction.d.ts +1 -1
  120. package/dist/src/lib/transferTransaction.d.ts.map +1 -1
  121. package/dist/src/lib/transferTransaction.js +33 -18
  122. package/dist/src/lib/unstakingBuilder.d.ts +62 -0
  123. package/dist/src/lib/unstakingBuilder.d.ts.map +1 -0
  124. package/dist/src/lib/unstakingBuilder.js +227 -0
  125. package/dist/src/lib/unstakingTransaction.d.ts +75 -0
  126. package/dist/src/lib/unstakingTransaction.d.ts.map +1 -0
  127. package/dist/src/lib/unstakingTransaction.js +345 -0
  128. package/dist/src/lib/utils.d.ts +51 -7
  129. package/dist/src/lib/utils.d.ts.map +1 -1
  130. package/dist/src/lib/utils.js +362 -27
  131. package/dist/src/lib/walrusStakingBuilder.d.ts +66 -0
  132. package/dist/src/lib/walrusStakingBuilder.d.ts.map +1 -0
  133. package/dist/src/lib/walrusStakingBuilder.js +200 -0
  134. package/dist/src/lib/walrusStakingTransaction.d.ts +52 -0
  135. package/dist/src/lib/walrusStakingTransaction.d.ts.map +1 -0
  136. package/dist/src/lib/walrusStakingTransaction.js +269 -0
  137. package/dist/src/lib/walrusWithdrawStakeBuilder.d.ts +36 -0
  138. package/dist/src/lib/walrusWithdrawStakeBuilder.d.ts.map +1 -0
  139. package/dist/src/lib/walrusWithdrawStakeBuilder.js +173 -0
  140. package/dist/src/lib/walrusWithdrawStakeTransaction.d.ts +21 -0
  141. package/dist/src/lib/walrusWithdrawStakeTransaction.d.ts.map +1 -0
  142. package/dist/src/lib/walrusWithdrawStakeTransaction.js +186 -0
  143. package/dist/src/register.d.ts.map +1 -1
  144. package/dist/src/register.js +5 -1
  145. package/dist/src/sui.d.ts +44 -8
  146. package/dist/src/sui.d.ts.map +1 -1
  147. package/dist/src/sui.js +484 -42
  148. package/dist/src/suiToken.d.ts +22 -0
  149. package/dist/src/suiToken.d.ts.map +1 -0
  150. package/dist/src/suiToken.js +61 -0
  151. package/dist/src/tsui.js +1 -1
  152. package/package.json +15 -12
  153. package/dist/src/lib/mystenlab/builder/Commands.d.ts.map +0 -1
  154. package/dist/src/lib/mystenlab/builder/Commands.js +0 -119
  155. package/dist/src/lib/mystenlab/builder/Transaction.d.ts +0 -609
  156. package/dist/src/lib/mystenlab/builder/Transaction.d.ts.map +0 -1
  157. package/dist/src/lib/mystenlab/builder/Transaction.js +0 -254
  158. package/dist/src/lib/mystenlab/builder/TransactionData.d.ts.map +0 -1
  159. package/dist/src/lib/mystenlab/builder/TransactionData.js +0 -171
  160. package/dist/src/lib/mystenlab/builder/type-tag-serializer.d.ts.map +0 -1
  161. package/dist/src/lib/mystenlab/builder/type-tag-serializer.js +0 -119
  162. /package/dist/src/lib/mystenlab/{builder → txn-data-serializers}/type-tag-serializer.d.ts +0 -0
@@ -1,11 +1,11 @@
1
1
  import { Infer } from 'superstruct';
2
- import { TransactionCommand, TransactionInput } from './Commands';
2
+ import { TransactionType, TransactionBlockInput } from './Transactions';
3
3
  export declare const TransactionExpiration: import("superstruct").Struct<{
4
4
  Epoch: number;
5
5
  } | {
6
6
  None: true | null;
7
7
  } | null | undefined, null>;
8
- export declare type TransactionExpiration = Infer<typeof TransactionExpiration>;
8
+ export type TransactionExpiration = Infer<typeof TransactionExpiration>;
9
9
  declare const GasConfig: import("superstruct").Struct<{
10
10
  budget?: string | undefined;
11
11
  price?: string | undefined;
@@ -33,18 +33,11 @@ declare const GasConfig: import("superstruct").Struct<{
33
33
  }>>;
34
34
  owner: import("superstruct").Struct<string | undefined, null>;
35
35
  }>;
36
- declare type GasConfig = Infer<typeof GasConfig>;
36
+ type GasConfig = Infer<typeof GasConfig>;
37
37
  export declare const SerializedTransactionDataBuilder: import("superstruct").Struct<{
38
- inputs: {
39
- kind: "Input";
40
- index: number;
41
- value?: any;
42
- type?: "object" | "pure" | undefined;
43
- }[];
44
- commands: ({
45
- kind: "MoveCall";
38
+ version: 1;
39
+ transactions: ({
46
40
  target: `${string}::${string}::${string}`;
47
- typeArguments: string[];
48
41
  arguments: ({
49
42
  kind: "Input";
50
43
  index: number;
@@ -56,12 +49,13 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
56
49
  kind: "Result";
57
50
  index: number;
58
51
  } | {
52
+ resultIndex: number;
59
53
  kind: "NestedResult";
60
54
  index: number;
61
- resultIndex: number;
62
55
  })[];
56
+ kind: "MoveCall";
57
+ typeArguments: string[];
63
58
  } | {
64
- kind: "TransferObjects";
65
59
  objects: ({
66
60
  kind: "Input";
67
61
  index: number;
@@ -73,10 +67,11 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
73
67
  kind: "Result";
74
68
  index: number;
75
69
  } | {
70
+ resultIndex: number;
76
71
  kind: "NestedResult";
77
72
  index: number;
78
- resultIndex: number;
79
73
  })[];
74
+ kind: "TransferObjects";
80
75
  address: {
81
76
  kind: "Input";
82
77
  index: number;
@@ -88,12 +83,11 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
88
83
  kind: "Result";
89
84
  index: number;
90
85
  } | {
86
+ resultIndex: number;
91
87
  kind: "NestedResult";
92
88
  index: number;
93
- resultIndex: number;
94
89
  };
95
90
  } | {
96
- kind: "SplitCoins";
97
91
  coin: {
98
92
  kind: "Input";
99
93
  index: number;
@@ -105,10 +99,11 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
105
99
  kind: "Result";
106
100
  index: number;
107
101
  } | {
102
+ resultIndex: number;
108
103
  kind: "NestedResult";
109
104
  index: number;
110
- resultIndex: number;
111
105
  };
106
+ kind: "SplitCoins";
112
107
  amounts: ({
113
108
  kind: "Input";
114
109
  index: number;
@@ -120,9 +115,9 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
120
115
  kind: "Result";
121
116
  index: number;
122
117
  } | {
118
+ resultIndex: number;
123
119
  kind: "NestedResult";
124
120
  index: number;
125
- resultIndex: number;
126
121
  })[];
127
122
  } | {
128
123
  kind: "MergeCoins";
@@ -137,9 +132,9 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
137
132
  kind: "Result";
138
133
  index: number;
139
134
  } | {
135
+ resultIndex: number;
140
136
  kind: "NestedResult";
141
137
  index: number;
142
- resultIndex: number;
143
138
  };
144
139
  sources: ({
145
140
  kind: "Input";
@@ -152,16 +147,15 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
152
147
  kind: "Result";
153
148
  index: number;
154
149
  } | {
150
+ resultIndex: number;
155
151
  kind: "NestedResult";
156
152
  index: number;
157
- resultIndex: number;
158
153
  })[];
159
154
  } | {
160
155
  kind: "Publish";
161
156
  modules: number[][];
162
157
  dependencies: string[];
163
158
  } | {
164
- kind: "MakeMoveVec";
165
159
  objects: ({
166
160
  kind: "Input";
167
161
  index: number;
@@ -173,17 +167,23 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
173
167
  kind: "Result";
174
168
  index: number;
175
169
  } | {
170
+ resultIndex: number;
176
171
  kind: "NestedResult";
177
172
  index: number;
178
- resultIndex: number;
179
173
  })[];
174
+ kind: "MakeMoveVec";
180
175
  type?: {
181
176
  None: null;
182
177
  } | {
183
178
  Some: string;
184
179
  } | undefined;
185
180
  })[];
186
- version: 1;
181
+ inputs: {
182
+ kind: "Input";
183
+ index: number;
184
+ value?: any;
185
+ type?: "object" | "pure" | undefined;
186
+ }[];
187
187
  gasConfig: {
188
188
  budget?: string | undefined;
189
189
  price?: string | undefined;
@@ -251,10 +251,8 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
251
251
  value: import("superstruct").Struct<any, null>;
252
252
  type: import("superstruct").Struct<"object" | "pure" | undefined, null>;
253
253
  }>>;
254
- commands: import("superstruct").Struct<({
255
- kind: "MoveCall";
254
+ transactions: import("superstruct").Struct<({
256
255
  target: `${string}::${string}::${string}`;
257
- typeArguments: string[];
258
256
  arguments: ({
259
257
  kind: "Input";
260
258
  index: number;
@@ -266,12 +264,13 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
266
264
  kind: "Result";
267
265
  index: number;
268
266
  } | {
267
+ resultIndex: number;
269
268
  kind: "NestedResult";
270
269
  index: number;
271
- resultIndex: number;
272
270
  })[];
271
+ kind: "MoveCall";
272
+ typeArguments: string[];
273
273
  } | {
274
- kind: "TransferObjects";
275
274
  objects: ({
276
275
  kind: "Input";
277
276
  index: number;
@@ -283,10 +282,11 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
283
282
  kind: "Result";
284
283
  index: number;
285
284
  } | {
285
+ resultIndex: number;
286
286
  kind: "NestedResult";
287
287
  index: number;
288
- resultIndex: number;
289
288
  })[];
289
+ kind: "TransferObjects";
290
290
  address: {
291
291
  kind: "Input";
292
292
  index: number;
@@ -298,12 +298,11 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
298
298
  kind: "Result";
299
299
  index: number;
300
300
  } | {
301
+ resultIndex: number;
301
302
  kind: "NestedResult";
302
303
  index: number;
303
- resultIndex: number;
304
304
  };
305
305
  } | {
306
- kind: "SplitCoins";
307
306
  coin: {
308
307
  kind: "Input";
309
308
  index: number;
@@ -315,10 +314,11 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
315
314
  kind: "Result";
316
315
  index: number;
317
316
  } | {
317
+ resultIndex: number;
318
318
  kind: "NestedResult";
319
319
  index: number;
320
- resultIndex: number;
321
320
  };
321
+ kind: "SplitCoins";
322
322
  amounts: ({
323
323
  kind: "Input";
324
324
  index: number;
@@ -330,9 +330,9 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
330
330
  kind: "Result";
331
331
  index: number;
332
332
  } | {
333
+ resultIndex: number;
333
334
  kind: "NestedResult";
334
335
  index: number;
335
- resultIndex: number;
336
336
  })[];
337
337
  } | {
338
338
  kind: "MergeCoins";
@@ -347,9 +347,9 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
347
347
  kind: "Result";
348
348
  index: number;
349
349
  } | {
350
+ resultIndex: number;
350
351
  kind: "NestedResult";
351
352
  index: number;
352
- resultIndex: number;
353
353
  };
354
354
  sources: ({
355
355
  kind: "Input";
@@ -362,16 +362,15 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
362
362
  kind: "Result";
363
363
  index: number;
364
364
  } | {
365
+ resultIndex: number;
365
366
  kind: "NestedResult";
366
367
  index: number;
367
- resultIndex: number;
368
368
  })[];
369
369
  } | {
370
370
  kind: "Publish";
371
371
  modules: number[][];
372
372
  dependencies: string[];
373
373
  } | {
374
- kind: "MakeMoveVec";
375
374
  objects: ({
376
375
  kind: "Input";
377
376
  index: number;
@@ -383,19 +382,18 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
383
382
  kind: "Result";
384
383
  index: number;
385
384
  } | {
385
+ resultIndex: number;
386
386
  kind: "NestedResult";
387
387
  index: number;
388
- resultIndex: number;
389
388
  })[];
389
+ kind: "MakeMoveVec";
390
390
  type?: {
391
391
  None: null;
392
392
  } | {
393
393
  Some: string;
394
394
  } | undefined;
395
395
  })[], import("superstruct").Struct<{
396
- kind: "MoveCall";
397
396
  target: `${string}::${string}::${string}`;
398
- typeArguments: string[];
399
397
  arguments: ({
400
398
  kind: "Input";
401
399
  index: number;
@@ -407,12 +405,13 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
407
405
  kind: "Result";
408
406
  index: number;
409
407
  } | {
408
+ resultIndex: number;
410
409
  kind: "NestedResult";
411
410
  index: number;
412
- resultIndex: number;
413
411
  })[];
412
+ kind: "MoveCall";
413
+ typeArguments: string[];
414
414
  } | {
415
- kind: "TransferObjects";
416
415
  objects: ({
417
416
  kind: "Input";
418
417
  index: number;
@@ -424,10 +423,11 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
424
423
  kind: "Result";
425
424
  index: number;
426
425
  } | {
426
+ resultIndex: number;
427
427
  kind: "NestedResult";
428
428
  index: number;
429
- resultIndex: number;
430
429
  })[];
430
+ kind: "TransferObjects";
431
431
  address: {
432
432
  kind: "Input";
433
433
  index: number;
@@ -439,12 +439,11 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
439
439
  kind: "Result";
440
440
  index: number;
441
441
  } | {
442
+ resultIndex: number;
442
443
  kind: "NestedResult";
443
444
  index: number;
444
- resultIndex: number;
445
445
  };
446
446
  } | {
447
- kind: "SplitCoins";
448
447
  coin: {
449
448
  kind: "Input";
450
449
  index: number;
@@ -456,10 +455,11 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
456
455
  kind: "Result";
457
456
  index: number;
458
457
  } | {
458
+ resultIndex: number;
459
459
  kind: "NestedResult";
460
460
  index: number;
461
- resultIndex: number;
462
461
  };
462
+ kind: "SplitCoins";
463
463
  amounts: ({
464
464
  kind: "Input";
465
465
  index: number;
@@ -471,9 +471,9 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
471
471
  kind: "Result";
472
472
  index: number;
473
473
  } | {
474
+ resultIndex: number;
474
475
  kind: "NestedResult";
475
476
  index: number;
476
- resultIndex: number;
477
477
  })[];
478
478
  } | {
479
479
  kind: "MergeCoins";
@@ -488,9 +488,9 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
488
488
  kind: "Result";
489
489
  index: number;
490
490
  } | {
491
+ resultIndex: number;
491
492
  kind: "NestedResult";
492
493
  index: number;
493
- resultIndex: number;
494
494
  };
495
495
  sources: ({
496
496
  kind: "Input";
@@ -503,16 +503,15 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
503
503
  kind: "Result";
504
504
  index: number;
505
505
  } | {
506
+ resultIndex: number;
506
507
  kind: "NestedResult";
507
508
  index: number;
508
- resultIndex: number;
509
509
  })[];
510
510
  } | {
511
511
  kind: "Publish";
512
512
  modules: number[][];
513
513
  dependencies: string[];
514
514
  } | {
515
- kind: "MakeMoveVec";
516
515
  objects: ({
517
516
  kind: "Input";
518
517
  index: number;
@@ -524,10 +523,11 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
524
523
  kind: "Result";
525
524
  index: number;
526
525
  } | {
526
+ resultIndex: number;
527
527
  kind: "NestedResult";
528
528
  index: number;
529
- resultIndex: number;
530
529
  })[];
530
+ kind: "MakeMoveVec";
531
531
  type?: {
532
532
  None: null;
533
533
  } | {
@@ -535,12 +535,12 @@ export declare const SerializedTransactionDataBuilder: import("superstruct").Str
535
535
  } | undefined;
536
536
  }, null>>;
537
537
  }>;
538
- export declare type SerializedTransactionDataBuilder = Infer<typeof SerializedTransactionDataBuilder>;
538
+ export type SerializedTransactionDataBuilder = Infer<typeof SerializedTransactionDataBuilder>;
539
539
  export declare const TRANSACTION_DATA_MAX_SIZE: number;
540
- export declare class TransactionDataBuilder {
541
- static fromKindBytes(bytes: Uint8Array): TransactionDataBuilder;
542
- static fromBytes(bytes: Uint8Array): TransactionDataBuilder;
543
- static restore(data: SerializedTransactionDataBuilder): TransactionDataBuilder;
540
+ export declare class TransactionBlockDataBuilder {
541
+ static fromKindBytes(bytes: Uint8Array): TransactionBlockDataBuilder;
542
+ static fromBytes(bytes: Uint8Array): TransactionBlockDataBuilder;
543
+ static restore(data: SerializedTransactionDataBuilder): TransactionBlockDataBuilder;
544
544
  /**
545
545
  * Generate transaction digest.
546
546
  *
@@ -552,15 +552,15 @@ export declare class TransactionDataBuilder {
552
552
  sender?: string;
553
553
  expiration?: TransactionExpiration;
554
554
  gasConfig: GasConfig;
555
- inputs: TransactionInput[];
556
- commands: TransactionCommand[];
557
- constructor(clone?: TransactionDataBuilder);
555
+ inputs: TransactionBlockInput[];
556
+ transactions: TransactionType[];
557
+ constructor(clone?: TransactionBlockDataBuilder);
558
558
  build({ overrides, onlyTransactionKind, }?: {
559
- overrides?: Pick<Partial<TransactionDataBuilder>, 'sender' | 'gasConfig' | 'expiration'>;
559
+ overrides?: Pick<Partial<TransactionBlockDataBuilder>, 'sender' | 'gasConfig' | 'expiration'>;
560
560
  onlyTransactionKind?: boolean;
561
- }): Uint8Array;
561
+ }): Uint8Array<ArrayBufferLike>;
562
562
  getDigest(): string;
563
563
  snapshot(): SerializedTransactionDataBuilder;
564
564
  }
565
565
  export {};
566
- //# sourceMappingURL=TransactionData.d.ts.map
566
+ //# sourceMappingURL=TransactionDataBlock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransactionDataBlock.d.ts","sourceRoot":"","sources":["../../../../../src/lib/mystenlab/builder/TransactionDataBlock.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,EASN,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAIxE,eAAO,MAAM,qBAAqB;;;;2BAEjC,CAAC;AACF,MAAM,MAAM,qBAAqB,GAAG,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAexE,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;EAKb,CAAC;AACH,KAAK,SAAS,GAAG,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAEzC,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAO3C,CAAC;AACH,MAAM,MAAM,gCAAgC,GAAG,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAC;AAQ9F,eAAO,MAAM,yBAAyB,QAAa,CAAC;AAEpD,qBAAa,2BAA2B;IACtC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU;IA8BtC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU;IAiClC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,gCAAgC;IAOrD;;;;;OAKG;IACH,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,UAAU;IAK3C,OAAO,EAAG,CAAC,CAAU;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAChC,YAAY,EAAE,eAAe,EAAE,CAAC;gBAEpB,KAAK,CAAC,EAAE,2BAA2B;IAQ/C,KAAK,CAAC,EACJ,SAAS,EACT,mBAAmB,GACpB,GAAE;QACD,SAAS,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC,CAAC;QAC9F,mBAAmB,CAAC,EAAE,OAAO,CAAC;KAC1B;IA0DN,SAAS;IAKT,QAAQ,IAAI,gCAAgC;CAG7C"}
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TransactionBlockDataBuilder = exports.TRANSACTION_DATA_MAX_SIZE = exports.SerializedTransactionDataBuilder = exports.TransactionExpiration = void 0;
4
+ const bcs_1 = require("@mysten/bcs");
5
+ const superstruct_1 = require("superstruct");
6
+ const hash_1 = require("../cryptography/hash");
7
+ const types_1 = require("../types");
8
+ const bcs_2 = require("./bcs");
9
+ const Transactions_1 = require("./Transactions");
10
+ const Inputs_1 = require("./Inputs");
11
+ const utils_1 = require("./utils");
12
+ exports.TransactionExpiration = (0, superstruct_1.optional)((0, superstruct_1.nullable)((0, superstruct_1.union)([(0, superstruct_1.object)({ Epoch: (0, superstruct_1.integer)() }), (0, superstruct_1.object)({ None: (0, superstruct_1.union)([(0, superstruct_1.literal)(true), (0, superstruct_1.literal)(null)]) })])));
13
+ const SuiAddress = (0, superstruct_1.string)();
14
+ const StringEncodedBigint = (0, superstruct_1.define)('StringEncodedBigint', (val) => {
15
+ if (!['string', 'number', 'bigint'].includes(typeof val))
16
+ return false;
17
+ try {
18
+ BigInt(val);
19
+ return true;
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ });
25
+ const GasConfig = (0, superstruct_1.object)({
26
+ budget: (0, superstruct_1.optional)(StringEncodedBigint),
27
+ price: (0, superstruct_1.optional)(StringEncodedBigint),
28
+ payment: (0, superstruct_1.optional)((0, superstruct_1.array)(types_1.SuiObjectRef)),
29
+ owner: (0, superstruct_1.optional)(SuiAddress),
30
+ });
31
+ exports.SerializedTransactionDataBuilder = (0, superstruct_1.object)({
32
+ version: (0, superstruct_1.literal)(1),
33
+ sender: (0, superstruct_1.optional)(SuiAddress),
34
+ expiration: exports.TransactionExpiration,
35
+ gasConfig: GasConfig,
36
+ inputs: (0, superstruct_1.array)(Transactions_1.TransactionBlockInput),
37
+ transactions: (0, superstruct_1.array)(Transactions_1.TransactionType),
38
+ });
39
+ function prepareSuiAddress(address) {
40
+ return (0, types_1.normalizeSuiAddress)(address).replace('0x', '');
41
+ }
42
+ // NOTE: This value should be kept in sync with the corresponding value in
43
+ // crates/sui-protocol-config/src/lib.rs
44
+ exports.TRANSACTION_DATA_MAX_SIZE = 128 * 1024;
45
+ class TransactionBlockDataBuilder {
46
+ static fromKindBytes(bytes) {
47
+ const kind = bcs_2.builder.de('TransactionKind', bytes);
48
+ const programmableTx = kind?.ProgrammableTransaction;
49
+ if (!programmableTx) {
50
+ throw new Error('Unable to deserialize from bytes.');
51
+ }
52
+ const serialized = (0, utils_1.create)({
53
+ version: 1,
54
+ gasConfig: {},
55
+ inputs: programmableTx.inputs.map((value, index) => (0, utils_1.create)({
56
+ kind: 'Input',
57
+ value,
58
+ index,
59
+ type: (0, superstruct_1.is)(value, Inputs_1.PureCallArg) ? 'pure' : 'object',
60
+ }, Transactions_1.TransactionBlockInput)),
61
+ transactions: programmableTx.transactions,
62
+ }, exports.SerializedTransactionDataBuilder);
63
+ return TransactionBlockDataBuilder.restore(serialized);
64
+ }
65
+ static fromBytes(bytes) {
66
+ const rawData = bcs_2.builder.de('TransactionData', bytes);
67
+ const data = rawData?.V1;
68
+ const programmableTx = data?.kind?.ProgrammableTransaction;
69
+ if (!data || !programmableTx) {
70
+ throw new Error('Unable to deserialize from bytes.');
71
+ }
72
+ const serialized = (0, utils_1.create)({
73
+ version: 1,
74
+ sender: data.sender,
75
+ expiration: data.expiration,
76
+ gasConfig: data.gasData,
77
+ inputs: programmableTx.inputs.map((value, index) => (0, utils_1.create)({
78
+ kind: 'Input',
79
+ value,
80
+ index,
81
+ type: (0, superstruct_1.is)(value, Inputs_1.PureCallArg) ? 'pure' : 'object',
82
+ }, Transactions_1.TransactionBlockInput)),
83
+ transactions: programmableTx.transactions,
84
+ }, exports.SerializedTransactionDataBuilder);
85
+ return TransactionBlockDataBuilder.restore(serialized);
86
+ }
87
+ static restore(data) {
88
+ (0, superstruct_1.assert)(data, exports.SerializedTransactionDataBuilder);
89
+ const transactionData = new TransactionBlockDataBuilder();
90
+ Object.assign(transactionData, data);
91
+ return transactionData;
92
+ }
93
+ /**
94
+ * Generate transaction digest.
95
+ *
96
+ * @param bytes BCS serialized transaction data
97
+ * @returns transaction digest.
98
+ */
99
+ static getDigestFromBytes(bytes) {
100
+ const hash = (0, hash_1.hashTypedData)('TransactionData', bytes);
101
+ return (0, bcs_1.toB58)(hash);
102
+ }
103
+ constructor(clone) {
104
+ this.version = 1;
105
+ this.sender = clone?.sender;
106
+ this.expiration = clone?.expiration;
107
+ this.gasConfig = clone?.gasConfig ?? {};
108
+ this.inputs = clone?.inputs ?? [];
109
+ this.transactions = clone?.transactions ?? [];
110
+ }
111
+ build({ overrides, onlyTransactionKind, } = {}) {
112
+ // Resolve inputs down to values:
113
+ const inputs = this.inputs.map((input) => {
114
+ (0, superstruct_1.assert)(input.value, Inputs_1.BuilderCallArg);
115
+ return input.value;
116
+ });
117
+ const kind = {
118
+ ProgrammableTransaction: {
119
+ inputs,
120
+ transactions: this.transactions,
121
+ },
122
+ };
123
+ if (onlyTransactionKind) {
124
+ return bcs_2.builder.ser('TransactionKind', kind, { maxSize: exports.TRANSACTION_DATA_MAX_SIZE }).toBytes();
125
+ }
126
+ const expiration = overrides?.expiration ?? this.expiration;
127
+ const sender = overrides?.sender ?? this.sender;
128
+ const gasConfig = { ...this.gasConfig, ...overrides?.gasConfig };
129
+ if (!sender) {
130
+ throw new Error('Missing transaction sender');
131
+ }
132
+ if (!gasConfig.budget) {
133
+ throw new Error('Missing gas budget');
134
+ }
135
+ if (!gasConfig.payment) {
136
+ throw new Error('Missing gas payment');
137
+ }
138
+ if (!gasConfig.price) {
139
+ throw new Error('Missing gas price');
140
+ }
141
+ const transactionData = {
142
+ sender: prepareSuiAddress(sender),
143
+ expiration: expiration ? expiration : { None: true },
144
+ gasData: {
145
+ payment: gasConfig.payment,
146
+ owner: prepareSuiAddress(this.gasConfig.owner ?? sender),
147
+ price: BigInt(gasConfig.price),
148
+ budget: BigInt(gasConfig.budget),
149
+ },
150
+ kind: {
151
+ ProgrammableTransaction: {
152
+ inputs,
153
+ transactions: this.transactions,
154
+ },
155
+ },
156
+ };
157
+ return bcs_2.builder.ser('TransactionData', { V1: transactionData }, { maxSize: exports.TRANSACTION_DATA_MAX_SIZE }).toBytes();
158
+ }
159
+ getDigest() {
160
+ const bytes = this.build({ onlyTransactionKind: false });
161
+ return TransactionBlockDataBuilder.getDigestFromBytes(bytes);
162
+ }
163
+ snapshot() {
164
+ return (0, utils_1.create)(this, exports.SerializedTransactionDataBuilder);
165
+ }
166
+ }
167
+ exports.TransactionBlockDataBuilder = TransactionBlockDataBuilder;
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNhY3Rpb25EYXRhQmxvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL215c3RlbmxhYi9idWlsZGVyL1RyYW5zYWN0aW9uRGF0YUJsb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUFvQztBQUNwQyw2Q0FhcUI7QUFDckIsK0NBQXFEO0FBQ3JELG9DQUE2RDtBQUM3RCwrQkFBZ0M7QUFDaEMsaURBQXdFO0FBQ3hFLHFDQUF1RDtBQUN2RCxtQ0FBaUM7QUFFcEIsUUFBQSxxQkFBcUIsR0FBRyxJQUFBLHNCQUFRLEVBQzNDLElBQUEsc0JBQVEsRUFBQyxJQUFBLG1CQUFLLEVBQUMsQ0FBQyxJQUFBLG9CQUFNLEVBQUMsRUFBRSxLQUFLLEVBQUUsSUFBQSxxQkFBTyxHQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUEsb0JBQU0sRUFBQyxFQUFFLElBQUksRUFBRSxJQUFBLG1CQUFLLEVBQUMsQ0FBQyxJQUFBLHFCQUFPLEVBQUMsSUFBSSxDQUFDLEVBQUUsSUFBQSxxQkFBTyxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3pHLENBQUM7QUFHRixNQUFNLFVBQVUsR0FBRyxJQUFBLG9CQUFNLEdBQUUsQ0FBQztBQUU1QixNQUFNLG1CQUFtQixHQUFHLElBQUEsb0JBQU0sRUFBUyxxQkFBcUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO0lBQ3hFLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFdkUsSUFBSSxDQUFDO1FBQ0gsTUFBTSxDQUFDLEdBQWEsQ0FBQyxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztB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QU8sRUFBRSxpQ0FBeUIsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkgsQ0FBQztJQUVELFNBQVM7UUFDUCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN6RCxPQUFPLDJCQUEyQixDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFBLGNBQU0sRUFBQyxJQUFJLEVBQUUsd0NBQWdDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0NBQ0Y7QUF6S0Qsa0VBeUtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdG9CNTggfSBmcm9tICdAbXlzdGVuL2Jjcyc7XG5pbXBvcnQge1xuICBhcnJheSxcbiAgYXNzZXJ0LFxuICBkZWZpbmUsXG4gIEluZmVyLFxuICBpbnRlZ2VyLFxuICBpcyxcbiAgbGl0ZXJhbCxcbiAgbnVsbGFibGUsXG4gIG9iamVjdCxcbiAgb3B0aW9uYWwsXG4gIHN0cmluZyxcbiAgdW5pb24sXG59IGZyb20gJ3N1cGVyc3RydWN0JztcbmltcG9ydCB7IGhhc2hUeXBlZERhdGEgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkvaGFzaCc7XG5pbXBvcnQgeyBub3JtYWxpemVTdWlBZGRyZXNzLCBTdWlPYmplY3RSZWYgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBidWlsZGVyIH0gZnJvbSAnLi9iY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlLCBUcmFuc2FjdGlvbkJsb2NrSW5wdXQgfSBmcm9tICcuL1RyYW5zYWN0aW9ucyc7XG5pbXBvcnQgeyBCdWlsZGVyQ2FsbEFyZywgUHVyZUNhbGxBcmcgfSBmcm9tICcuL0lucHV0cyc7XG5pbXBvcnQgeyBjcmVhdGUgfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IFRyYW5zYWN0aW9uRXhwaXJhdGlvbiA9IG9wdGlvbmFsKFxuICBudWxsYWJsZSh1bmlvbihbb2JqZWN0KHsgRXBvY2g6IGludGVnZXIoKSB9KSwgb2JqZWN0KHsgTm9uZTogdW5pb24oW2xpdGVyYWwodHJ1ZSksIGxpdGVyYWwobnVsbCldKSB9KV0pKVxuKTtcbmV4cG9ydCB0eXBlIFRyYW5zYWN0aW9uRXhwaXJhdGlvbiA9IEluZmVyPHR5cGVvZiBUcmFuc2FjdGlvbkV4cGlyYXRpb24+O1xuXG5jb25zdCBTdWlBZGRyZXNzID0gc3RyaW5nKCk7XG5cbmNvbnN0IFN0cmluZ0VuY29kZWRCaWdpbnQgPSBkZWZpbmU8c3RyaW5nPignU3RyaW5nRW5jb2RlZEJpZ2ludCcsICh2YWwpID0+IHtcbiAgaWYgKCFbJ3N0cmluZycsICdudW1iZXInLCAnYmlnaW50J10uaW5jbHVkZXModHlwZW9mIHZhbCkpIHJldHVybiBmYWxzZTtcblxuICB0cnkge1xuICAgIEJpZ0ludCh2YWwgYXMgc3RyaW5nKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59KTtcblxuY29uc3QgR2FzQ29uZmlnID0gb2JqZWN0KHtcbiAgYnVkZ2V0OiBvcHRpb25hbChTdHJpbmdFbmNvZGVkQmlnaW50KSxcbiAgcHJpY2U6IG9wdGlvbmFsKFN0cmluZ0VuY29kZWRCaWdpbnQpLFxuICBwYXltZW50OiBvcHRpb25hbChhcnJheShTdWlPYmplY3RSZWYpKSxcbiAgb3duZXI6IG9wdGlvbmFsKFN1aUFkZHJlc3MpLFxufSk7XG50eXBlIEdhc0NvbmZpZyA9IEluZmVyPHR5cGVvZiBHYXNDb25maWc+O1xuXG5leHBvcnQgY29uc3QgU2VyaWFsaXplZFRyYW5zYWN0aW9uRGF0YUJ1aWxkZXIgPSBvYmplY3Qoe1xuICB2ZXJzaW9uOiBsaXRlcmFsKDEpLFxuICBzZW5kZXI6IG9wdGlvbmFsKFN1aUFkZHJlc3MpLFxuICBleHBpcmF0aW9uOiBUcmFuc2FjdGlvbkV4cGlyYXRpb24sXG4gIGdhc0NvbmZpZzogR2FzQ29uZmlnLFxuICBpbnB1dHM6IGFycmF5KFRyYW5zYWN0aW9uQmxvY2tJbnB1dCksXG4gIHRyYW5zYWN0aW9uczogYXJyYXkoVHJhbnNhY3Rpb25UeXBlKSxcbn0pO1xuZXhwb3J0IHR5cGUgU2VyaWFsaXplZFRyYW5zYWN0aW9uRGF0YUJ1aWxkZXIgPSBJbmZlcjx0eXBlb2YgU2VyaWFsaXplZFRyYW5zYWN0aW9uRGF0YUJ1aWxkZXI+O1xuXG5mdW5jdGlvbiBwcmVwYXJlU3VpQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZVN1aUFkZHJlc3MoYWRkcmVzcykucmVwbGFjZSgnMHgnLCAnJyk7XG59XG5cbi8vIE5PVEU6IFRoaXMgdmFsdWUgc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGluXG4vLyBjcmF0ZXMvc3VpLXByb3RvY29sLWNvbmZpZy9zcmMvbGliLnJzXG5leHBvcnQgY29uc3QgVFJBTlNBQ1RJT05fREFUQV9NQVhfU0laRSA9IDEyOCAqIDEwMjQ7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkJsb2NrRGF0YUJ1aWxkZXIge1xuICBzdGF0aWMgZnJvbUtpbmRCeXRlcyhieXRlczogVWludDhBcnJheSkge1xuICAgIGNvbnN0IGtpbmQgPSBidWlsZGVyLmRlKCdUcmFuc2FjdGlvbktpbmQnLCBieXRlcyk7XG4gICAgY29uc3QgcHJvZ3JhbW1hYmxlVHggPSBraW5kPy5Qcm9ncmFtbWFibGVUcmFuc2FjdGlvbjtcbiAgICBpZiAoIXByb2dyYW1tYWJsZVR4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBkZXNlcmlhbGl6ZSBmcm9tIGJ5dGVzLicpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBjcmVhdGUoXG4gICAgICB7XG4gICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgIGdhc0NvbmZpZzoge30sXG4gICAgICAgIGlucHV0czogcHJvZ3JhbW1hYmxlVHguaW5wdXRzLm1hcCgodmFsdWU6IHVua25vd24sIGluZGV4OiBudW1iZXIpID0+XG4gICAgICAgICAgY3JlYXRlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBraW5kOiAnSW5wdXQnLFxuICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIHR5cGU6IGlzKHZhbHVlLCBQdXJlQ2FsbEFyZykgPyAncHVyZScgOiAnb2JqZWN0JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBUcmFuc2FjdGlvbkJsb2NrSW5wdXRcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHRyYW5zYWN0aW9uczogcHJvZ3JhbW1hYmxlVHgudHJhbnNhY3Rpb25zLFxuICAgICAgfSxcbiAgICAgIFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkRhdGFCdWlsZGVyXG4gICAgKTtcblxuICAgIHJldHVybiBUcmFuc2FjdGlvbkJsb2NrRGF0YUJ1aWxkZXIucmVzdG9yZShzZXJpYWxpemVkKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQnl0ZXMoYnl0ZXM6IFVpbnQ4QXJyYXkpIHtcbiAgICBjb25zdCByYXdEYXRhID0gYnVpbGRlci5kZSgnVHJhbnNhY3Rpb25EYXRhJywgYnl0ZXMpO1xuICAgIGNvbnN0IGRhdGEgPSByYXdEYXRhPy5WMTtcbiAgICBjb25zdCBwcm9ncmFtbWFibGVUeCA9IGRhdGE/LmtpbmQ/LlByb2dyYW1tYWJsZVRyYW5zYWN0aW9uO1xuICAgIGlmICghZGF0YSB8fCAhcHJvZ3JhbW1hYmxlVHgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGRlc2VyaWFsaXplIGZyb20gYnl0ZXMuJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IGNyZWF0ZShcbiAgICAgIHtcbiAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgc2VuZGVyOiBkYXRhLnNlbmRlcixcbiAgICAgICAgZXhwaXJhdGlvbjogZGF0YS5leHBpcmF0aW9uLFxuICAgICAgICBnYXNDb25maWc6IGRhdGEuZ2FzRGF0YSxcbiAgICAgICAgaW5wdXRzOiBwcm9ncmFtbWFibGVUeC5pbnB1dHMubWFwKCh2YWx1ZTogdW5rbm93biwgaW5kZXg6IG51bWJlcikgPT5cbiAgICAgICAgICBjcmVhdGUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGtpbmQ6ICdJbnB1dCcsXG4gICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgdHlwZTogaXModmFsdWUsIFB1cmVDYWxsQXJnKSA/ICdwdXJlJyA6ICdvYmplY3QnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFRyYW5zYWN0aW9uQmxvY2tJbnB1dFxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgdHJhbnNhY3Rpb25zOiBwcm9ncmFtbWFibGVUeC50cmFuc2FjdGlvbnMsXG4gICAgICB9LFxuICAgICAgU2VyaWFsaXplZFRyYW5zYWN0aW9uRGF0YUJ1aWxkZXJcbiAgICApO1xuXG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uQmxvY2tEYXRhQnVpbGRlci5yZXN0b3JlKHNlcmlhbGl6ZWQpO1xuICB9XG5cbiAgc3RhdGljIHJlc3RvcmUoZGF0YTogU2VyaWFsaXplZFRyYW5zYWN0aW9uRGF0YUJ1aWxkZXIpIHtcbiAgICBhc3NlcnQoZGF0YSwgU2VyaWFsaXplZFRyYW5zYWN0aW9uRGF0YUJ1aWxkZXIpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uRGF0YSA9IG5ldyBUcmFuc2FjdGlvbkJsb2NrRGF0YUJ1aWxkZXIoKTtcbiAgICBPYmplY3QuYXNzaWduKHRyYW5zYWN0aW9uRGF0YSwgZGF0YSk7XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0cmFuc2FjdGlvbiBkaWdlc3QuXG4gICAqXG4gICAqIEBwYXJhbSBieXRlcyBCQ1Mgc2VyaWFsaXplZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqIEByZXR1cm5zIHRyYW5zYWN0aW9uIGRpZ2VzdC5cbiAgICovXG4gIHN0YXRpYyBnZXREaWdlc3RGcm9tQnl0ZXMoYnl0ZXM6IFVpbnQ4QXJyYXkpIHtcbiAgICBjb25zdCBoYXNoID0gaGFzaFR5cGVkRGF0YSgnVHJhbnNhY3Rpb25EYXRhJywgYnl0ZXMpO1xuICAgIHJldHVybiB0b0I1OChoYXNoKTtcbiAgfVxuXG4gIHZlcnNpb24gPSAxIGFzIGNvbnN0O1xuICBzZW5kZXI/OiBzdHJpbmc7XG4gIGV4cGlyYXRpb24/OiBUcmFuc2FjdGlvbkV4cGlyYXRpb247XG4gIGdhc0NvbmZpZzogR2FzQ29uZmlnO1xuICBpbnB1dHM6IFRyYW5zYWN0aW9uQmxvY2tJbnB1dFtdO1xuICB0cmFuc2FjdGlvbnM6IFRyYW5zYWN0aW9uVHlwZVtdO1xuXG4gIGNvbnN0cnVjdG9yKGNsb25lPzogVHJhbnNhY3Rpb25CbG9ja0RhdGFCdWlsZGVyKSB7XG4gICAgdGhpcy5zZW5kZXIgPSBjbG9uZT8uc2VuZGVyO1xuICAgIHRoaXMuZXhwaXJhdGlvbiA9IGNsb25lPy5leHBpcmF0aW9uO1xuICAgIHRoaXMuZ2FzQ29uZmlnID0gY2xvbmU/Lmdhc0NvbmZpZyA/PyB7fTtcbiAgICB0aGlzLmlucHV0cyA9IGNsb25lPy5pbnB1dHMgPz8gW107XG4gICAgdGhpcy50cmFuc2FjdGlvbnMgPSBjbG9uZT8udHJhbnNhY3Rpb25zID8/IFtdO1xuICB9XG5cbiAgYnVpbGQoe1xuICAgIG92ZXJyaWRlcyxcbiAgICBvbmx5VHJhbnNhY3Rpb25LaW5kLFxuICB9OiB7XG4gICAgb3ZlcnJpZGVzPzogUGljazxQYXJ0aWFsPFRyYW5zYWN0aW9uQmxvY2tEYXRhQnVpbGRlcj4sICdzZW5kZXInIHwgJ2dhc0NvbmZpZycgfCAnZXhwaXJhdGlvbic+O1xuICAgIG9ubHlUcmFuc2FjdGlvbktpbmQ/OiBib29sZWFuO1xuICB9ID0ge30pIHtcbiAgICAvLyBSZXNvbHZlIGlucHV0cyBkb3duIHRvIHZhbHVlczpcbiAgICBjb25zdCBpbnB1dHMgPSB0aGlzLmlucHV0cy5tYXAoKGlucHV0KSA9PiB7XG4gICAgICBhc3NlcnQoaW5wdXQudmFsdWUsIEJ1aWxkZXJDYWxsQXJnKTtcbiAgICAgIHJldHVybiBpbnB1dC52YWx1ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGtpbmQgPSB7XG4gICAgICBQcm9ncmFtbWFibGVUcmFuc2FjdGlvbjoge1xuICAgICAgICBpbnB1dHMsXG4gICAgICAgIHRyYW5zYWN0aW9uczogdGhpcy50cmFuc2FjdGlvbnMsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBpZiAob25seVRyYW5zYWN0aW9uS2luZCkge1xuICAgICAgcmV0dXJuIGJ1aWxkZXIuc2VyKCdUcmFuc2FjdGlvbktpbmQnLCBraW5kLCB7IG1heFNpemU6IFRSQU5TQUNUSU9OX0RBVEFfTUFYX1NJWkUgfSkudG9CeXRlcygpO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cGlyYXRpb24gPSBvdmVycmlkZXM/LmV4cGlyYXRpb24gPz8gdGhpcy5leHBpcmF0aW9uO1xuICAgIGNvbnN0IHNlbmRlciA9IG92ZXJyaWRlcz8uc2VuZGVyID8/IHRoaXMuc2VuZGVyO1xuICAgIGNvbnN0IGdhc0NvbmZpZyA9IHsgLi4udGhpcy5nYXNDb25maWcsIC4uLm92ZXJyaWRlcz8uZ2FzQ29uZmlnIH07XG5cbiAgICBpZiAoIXNlbmRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHRyYW5zYWN0aW9uIHNlbmRlcicpO1xuICAgIH1cblxuICAgIGlmICghZ2FzQ29uZmlnLmJ1ZGdldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGdhcyBidWRnZXQnKTtcbiAgICB9XG5cbiAgICBpZiAoIWdhc0NvbmZpZy5wYXltZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgZ2FzIHBheW1lbnQnKTtcbiAgICB9XG5cbiAgICBpZiAoIWdhc0NvbmZpZy5wcmljZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGdhcyBwcmljZScpO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uRGF0YSA9IHtcbiAgICAgIHNlbmRlcjogcHJlcGFyZVN1aUFkZHJlc3Moc2VuZGVyKSxcbiAgICAgIGV4cGlyYXRpb246IGV4cGlyYXRpb24gPyBleHBpcmF0aW9uIDogeyBOb25lOiB0cnVlIH0sXG4gICAgICBnYXNEYXRhOiB7XG4gICAgICAgIHBheW1lbnQ6IGdhc0NvbmZpZy5wYXltZW50LFxuICAgICAgICBvd25lcjogcHJlcGFyZVN1aUFkZHJlc3ModGhpcy5nYXNDb25maWcub3duZXIgPz8gc2VuZGVyKSxcbiAgICAgICAgcHJpY2U6IEJpZ0ludChnYXNDb25maWcucHJpY2UpLFxuICAgICAgICBidWRnZXQ6IEJpZ0ludChnYXNDb25maWcuYnVkZ2V0KSxcbiAgICAgIH0sXG4gICAgICBraW5kOiB7XG4gICAgICAgIFByb2dyYW1tYWJsZVRyYW5zYWN0aW9uOiB7XG4gICAgICAgICAgaW5wdXRzLFxuICAgICAgICAgIHRyYW5zYWN0aW9uczogdGhpcy50cmFuc2FjdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICByZXR1cm4gYnVpbGRlci5zZXIoJ1RyYW5zYWN0aW9uRGF0YScsIHsgVjE6IHRyYW5zYWN0aW9uRGF0YSB9LCB7IG1heFNpemU6IFRSQU5TQUNUSU9OX0RBVEFfTUFYX1NJWkUgfSkudG9CeXRlcygpO1xuICB9XG5cbiAgZ2V0RGlnZXN0KCkge1xuICAgIGNvbnN0IGJ5dGVzID0gdGhpcy5idWlsZCh7IG9ubHlUcmFuc2FjdGlvbktpbmQ6IGZhbHNlIH0pO1xuICAgIHJldHVybiBUcmFuc2FjdGlvbkJsb2NrRGF0YUJ1aWxkZXIuZ2V0RGlnZXN0RnJvbUJ5dGVzKGJ5dGVzKTtcbiAgfVxuXG4gIHNuYXBzaG90KCk6IFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkRhdGFCdWlsZGVyIHtcbiAgICByZXR1cm4gY3JlYXRlKHRoaXMsIFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkRhdGFCdWlsZGVyKTtcbiAgfVxufVxuIl19