@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.
- package/.mocharc.yml +1 -2
- package/CHANGELOG.md +897 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -2
- package/dist/src/lib/compareTransactionBlocks.d.ts +8 -0
- package/dist/src/lib/compareTransactionBlocks.d.ts.map +1 -0
- package/dist/src/lib/compareTransactionBlocks.js +12 -0
- package/dist/src/lib/constants.d.ts +11 -3
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +20 -3
- package/dist/src/lib/customTransaction.d.ts +57 -0
- package/dist/src/lib/customTransaction.d.ts.map +1 -0
- package/dist/src/lib/customTransaction.js +159 -0
- package/dist/src/lib/customTransactionBuilder.d.ts +46 -0
- package/dist/src/lib/customTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/customTransactionBuilder.js +117 -0
- package/dist/src/lib/iface.d.ts +86 -27
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +39 -10
- package/dist/src/lib/index.d.ts +10 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +44 -10
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +25 -21
- package/dist/src/lib/mystenlab/builder/Inputs.d.ts +6 -6
- package/dist/src/lib/mystenlab/builder/Inputs.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/Inputs.js +19 -20
- package/dist/src/lib/mystenlab/builder/TransactionBlock.d.ts +302 -0
- package/dist/src/lib/mystenlab/builder/TransactionBlock.d.ts.map +1 -0
- package/dist/src/lib/mystenlab/builder/TransactionBlock.js +255 -0
- package/dist/src/lib/mystenlab/builder/{TransactionData.d.ts → TransactionDataBlock.d.ts} +62 -62
- package/dist/src/lib/mystenlab/builder/TransactionDataBlock.d.ts.map +1 -0
- package/dist/src/lib/mystenlab/builder/TransactionDataBlock.js +168 -0
- package/dist/src/lib/mystenlab/builder/{Commands.d.ts → Transactions.d.ts} +103 -158
- package/dist/src/lib/mystenlab/builder/Transactions.d.ts.map +1 -0
- package/dist/src/lib/mystenlab/builder/Transactions.js +118 -0
- package/dist/src/lib/mystenlab/builder/bcs.d.ts +6 -6
- package/dist/src/lib/mystenlab/builder/bcs.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/bcs.js +16 -16
- package/dist/src/lib/mystenlab/builder/index.d.ts +2 -2
- package/dist/src/lib/mystenlab/builder/index.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/index.js +8 -4
- package/dist/src/lib/mystenlab/builder/serializer.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/serializer.js +6 -11
- package/dist/src/lib/mystenlab/builder/utils.d.ts +2 -5
- package/dist/src/lib/mystenlab/builder/utils.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/utils.js +5 -5
- package/dist/src/lib/mystenlab/cryptography/hash.js +3 -4
- package/dist/src/lib/mystenlab/framework/framework.d.ts +8 -7
- package/dist/src/lib/mystenlab/framework/framework.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/framework/framework.js +23 -27
- package/dist/src/lib/mystenlab/framework/index.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/framework/index.js +6 -4
- package/dist/src/lib/mystenlab/framework/sui-system-state.d.ts +4 -23
- package/dist/src/lib/mystenlab/framework/sui-system-state.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/framework/sui-system-state.js +11 -40
- package/dist/src/lib/mystenlab/txn-data-serializers/type-tag-serializer.d.ts.map +1 -0
- package/dist/src/lib/mystenlab/txn-data-serializers/type-tag-serializer.js +119 -0
- package/dist/src/lib/mystenlab/types/coin.d.ts +10 -10
- package/dist/src/lib/mystenlab/types/coin.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/coin.js +19 -19
- package/dist/src/lib/mystenlab/types/common.d.ts +8 -8
- package/dist/src/lib/mystenlab/types/common.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/common.js +22 -22
- package/dist/src/lib/mystenlab/types/events.d.ts +14 -14
- package/dist/src/lib/mystenlab/types/events.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/events.js +17 -17
- package/dist/src/lib/mystenlab/types/index.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/index.js +6 -5
- package/dist/src/lib/mystenlab/types/normalized.d.ts +21 -21
- package/dist/src/lib/mystenlab/types/normalized.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/normalized.js +42 -43
- package/dist/src/lib/mystenlab/types/objects.d.ts +95 -78
- package/dist/src/lib/mystenlab/types/objects.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/objects.js +98 -104
- package/dist/src/lib/mystenlab/types/option.d.ts +1 -1
- package/dist/src/lib/mystenlab/types/option.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/option.js +2 -3
- package/dist/src/lib/mystenlab/types/sui-bcs.d.ts +10 -9
- package/dist/src/lib/mystenlab/types/sui-bcs.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/sui-bcs.js +4 -4
- package/dist/src/lib/mystenlab/types/transactions.d.ts +3262 -1046
- package/dist/src/lib/mystenlab/types/transactions.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/transactions.js +209 -187
- package/dist/src/lib/mystenlab/types/validator.d.ts +641 -0
- package/dist/src/lib/mystenlab/types/validator.d.ts.map +1 -0
- package/dist/src/lib/mystenlab/types/validator.js +156 -0
- package/dist/src/lib/resources/walrusConfig.d.ts +22 -0
- package/dist/src/lib/resources/walrusConfig.d.ts.map +1 -0
- package/dist/src/lib/resources/walrusConfig.js +37 -0
- package/dist/src/lib/rpcClient.d.ts +5 -0
- package/dist/src/lib/rpcClient.d.ts.map +1 -0
- package/dist/src/lib/rpcClient.js +74 -0
- package/dist/src/lib/stakingBuilder.d.ts +15 -15
- package/dist/src/lib/stakingBuilder.d.ts.map +1 -1
- package/dist/src/lib/stakingBuilder.js +113 -44
- package/dist/src/lib/stakingTransaction.d.ts +2 -10
- package/dist/src/lib/stakingTransaction.d.ts.map +1 -1
- package/dist/src/lib/stakingTransaction.js +97 -35
- package/dist/src/lib/tokenTransferBuilder.d.ts +38 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/tokenTransferBuilder.js +132 -0
- package/dist/src/lib/tokenTransferTransaction.d.ts +57 -0
- package/dist/src/lib/tokenTransferTransaction.d.ts.map +1 -0
- package/dist/src/lib/tokenTransferTransaction.js +250 -0
- package/dist/src/lib/transaction.d.ts +16 -6
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +126 -26
- package/dist/src/lib/transactionBuilder.d.ts +2 -3
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +4 -4
- package/dist/src/lib/transactionBuilderFactory.d.ts +17 -2
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +52 -2
- package/dist/src/lib/transferBuilder.d.ts +3 -1
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +34 -11
- package/dist/src/lib/transferTransaction.d.ts +1 -1
- package/dist/src/lib/transferTransaction.d.ts.map +1 -1
- package/dist/src/lib/transferTransaction.js +33 -18
- package/dist/src/lib/unstakingBuilder.d.ts +62 -0
- package/dist/src/lib/unstakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/unstakingBuilder.js +227 -0
- package/dist/src/lib/unstakingTransaction.d.ts +75 -0
- package/dist/src/lib/unstakingTransaction.d.ts.map +1 -0
- package/dist/src/lib/unstakingTransaction.js +345 -0
- package/dist/src/lib/utils.d.ts +51 -7
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +362 -27
- package/dist/src/lib/walrusStakingBuilder.d.ts +66 -0
- package/dist/src/lib/walrusStakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/walrusStakingBuilder.js +200 -0
- package/dist/src/lib/walrusStakingTransaction.d.ts +52 -0
- package/dist/src/lib/walrusStakingTransaction.d.ts.map +1 -0
- package/dist/src/lib/walrusStakingTransaction.js +269 -0
- package/dist/src/lib/walrusWithdrawStakeBuilder.d.ts +36 -0
- package/dist/src/lib/walrusWithdrawStakeBuilder.d.ts.map +1 -0
- package/dist/src/lib/walrusWithdrawStakeBuilder.js +173 -0
- package/dist/src/lib/walrusWithdrawStakeTransaction.d.ts +21 -0
- package/dist/src/lib/walrusWithdrawStakeTransaction.d.ts.map +1 -0
- package/dist/src/lib/walrusWithdrawStakeTransaction.js +186 -0
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +5 -1
- package/dist/src/sui.d.ts +44 -8
- package/dist/src/sui.d.ts.map +1 -1
- package/dist/src/sui.js +484 -42
- package/dist/src/suiToken.d.ts +22 -0
- package/dist/src/suiToken.d.ts.map +1 -0
- package/dist/src/suiToken.js +61 -0
- package/dist/src/tsui.js +1 -1
- package/package.json +15 -12
- package/dist/src/lib/mystenlab/builder/Commands.d.ts.map +0 -1
- package/dist/src/lib/mystenlab/builder/Commands.js +0 -119
- package/dist/src/lib/mystenlab/builder/Transaction.d.ts +0 -609
- package/dist/src/lib/mystenlab/builder/Transaction.d.ts.map +0 -1
- package/dist/src/lib/mystenlab/builder/Transaction.js +0 -254
- package/dist/src/lib/mystenlab/builder/TransactionData.d.ts.map +0 -1
- package/dist/src/lib/mystenlab/builder/TransactionData.js +0 -171
- package/dist/src/lib/mystenlab/builder/type-tag-serializer.d.ts.map +0 -1
- package/dist/src/lib/mystenlab/builder/type-tag-serializer.js +0 -119
- /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 {
|
|
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
|
|
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
|
-
|
|
36
|
+
type GasConfig = Infer<typeof GasConfig>;
|
|
37
37
|
export declare const SerializedTransactionDataBuilder: import("superstruct").Struct<{
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
538
|
+
export type SerializedTransactionDataBuilder = Infer<typeof SerializedTransactionDataBuilder>;
|
|
539
539
|
export declare const TRANSACTION_DATA_MAX_SIZE: number;
|
|
540
|
-
export declare class
|
|
541
|
-
static fromKindBytes(bytes: Uint8Array):
|
|
542
|
-
static fromBytes(bytes: Uint8Array):
|
|
543
|
-
static restore(data: SerializedTransactionDataBuilder):
|
|
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:
|
|
556
|
-
|
|
557
|
-
constructor(clone?:
|
|
555
|
+
inputs: TransactionBlockInput[];
|
|
556
|
+
transactions: TransactionType[];
|
|
557
|
+
constructor(clone?: TransactionBlockDataBuilder);
|
|
558
558
|
build({ overrides, onlyTransactionKind, }?: {
|
|
559
|
-
overrides?: Pick<Partial<
|
|
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=
|
|
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
|