@bitgo/sdk-coin-polyx 1.17.2 → 1.19.0

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 (123) hide show
  1. package/dist/src/lib/batchStakingBuilder.d.ts.map +1 -1
  2. package/dist/src/lib/batchStakingBuilder.js +4 -1
  3. package/dist/src/lib/batchUnstakingBuilder.d.ts.map +1 -1
  4. package/dist/src/lib/batchUnstakingBuilder.js +3 -1
  5. package/dist/src/lib/bondExtraBuilder.d.ts.map +1 -1
  6. package/dist/src/lib/bondExtraBuilder.js +3 -1
  7. package/dist/src/lib/hexTokenTransferBuilder.d.ts +3 -0
  8. package/dist/src/lib/hexTokenTransferBuilder.d.ts.map +1 -1
  9. package/dist/src/lib/hexTokenTransferBuilder.js +4 -1
  10. package/dist/src/lib/hexTransferBuilder.d.ts +2 -0
  11. package/dist/src/lib/hexTransferBuilder.d.ts.map +1 -1
  12. package/dist/src/lib/hexTransferBuilder.js +3 -1
  13. package/dist/src/lib/iface.d.ts +113 -2
  14. package/dist/src/lib/iface.d.ts.map +1 -1
  15. package/dist/src/lib/iface.js +12 -1
  16. package/dist/src/lib/index.d.ts +14 -1
  17. package/dist/src/lib/index.d.ts.map +1 -1
  18. package/dist/src/lib/index.js +28 -2
  19. package/dist/src/lib/nominateBuilder.d.ts.map +1 -1
  20. package/dist/src/lib/nominateBuilder.js +3 -1
  21. package/dist/src/lib/preApproveAssetBuilder.d.ts.map +1 -1
  22. package/dist/src/lib/preApproveAssetBuilder.js +2 -2
  23. package/dist/src/lib/registerDidWithCDDBuilder.d.ts.map +1 -1
  24. package/dist/src/lib/registerDidWithCDDBuilder.js +4 -1
  25. package/dist/src/lib/tokenTransferBuilder.d.ts +7 -1
  26. package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -1
  27. package/dist/src/lib/tokenTransferBuilder.js +16 -7
  28. package/dist/src/lib/transaction.d.ts.map +1 -1
  29. package/dist/src/lib/transaction.js +24 -6
  30. package/dist/src/lib/transactionBuilderFactory.d.ts +32 -0
  31. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  32. package/dist/src/lib/transactionBuilderFactory.js +121 -5
  33. package/dist/src/lib/transferBuilder.d.ts.map +1 -1
  34. package/dist/src/lib/transferBuilder.js +3 -1
  35. package/dist/src/lib/txnSchema.d.ts +20 -0
  36. package/dist/src/lib/txnSchema.d.ts.map +1 -1
  37. package/dist/src/lib/txnSchema.js +81 -2
  38. package/dist/src/lib/unbondBuilder.d.ts.map +1 -1
  39. package/dist/src/lib/unbondBuilder.js +3 -1
  40. package/dist/src/lib/utils.d.ts +1 -0
  41. package/dist/src/lib/utils.d.ts.map +1 -1
  42. package/dist/src/lib/utils.js +6 -1
  43. package/dist/src/lib/v8BatchStakingBuilder.d.ts +85 -0
  44. package/dist/src/lib/v8BatchStakingBuilder.d.ts.map +1 -0
  45. package/dist/src/lib/v8BatchStakingBuilder.js +266 -0
  46. package/dist/src/lib/v8BatchUnstakingBuilder.d.ts +11 -0
  47. package/dist/src/lib/v8BatchUnstakingBuilder.d.ts.map +1 -0
  48. package/dist/src/lib/v8BatchUnstakingBuilder.js +21 -0
  49. package/dist/src/lib/v8BondExtraBuilder.d.ts +11 -0
  50. package/dist/src/lib/v8BondExtraBuilder.d.ts.map +1 -0
  51. package/dist/src/lib/v8BondExtraBuilder.js +21 -0
  52. package/dist/src/lib/v8HexTokenTransferBuilder.d.ts +20 -0
  53. package/dist/src/lib/v8HexTokenTransferBuilder.d.ts.map +1 -0
  54. package/dist/src/lib/v8HexTokenTransferBuilder.js +42 -0
  55. package/dist/src/lib/v8HexTransferBuilder.d.ts +11 -0
  56. package/dist/src/lib/v8HexTransferBuilder.d.ts.map +1 -0
  57. package/dist/src/lib/v8HexTransferBuilder.js +21 -0
  58. package/dist/src/lib/v8NominateBuilder.d.ts +11 -0
  59. package/dist/src/lib/v8NominateBuilder.d.ts.map +1 -0
  60. package/dist/src/lib/v8NominateBuilder.js +21 -0
  61. package/dist/src/lib/v8PreApproveAssetBuilder.d.ts +11 -0
  62. package/dist/src/lib/v8PreApproveAssetBuilder.d.ts.map +1 -0
  63. package/dist/src/lib/v8PreApproveAssetBuilder.js +21 -0
  64. package/dist/src/lib/v8RegisterDidBuilder.d.ts +47 -0
  65. package/dist/src/lib/v8RegisterDidBuilder.d.ts.map +1 -0
  66. package/dist/src/lib/v8RegisterDidBuilder.js +96 -0
  67. package/dist/src/lib/v8RegisterDidWithCDDBuilder.d.ts +11 -0
  68. package/dist/src/lib/v8RegisterDidWithCDDBuilder.d.ts.map +1 -0
  69. package/dist/src/lib/v8RegisterDidWithCDDBuilder.js +21 -0
  70. package/dist/src/lib/v8TokenTransferBuilder.d.ts +24 -0
  71. package/dist/src/lib/v8TokenTransferBuilder.d.ts.map +1 -0
  72. package/dist/src/lib/v8TokenTransferBuilder.js +101 -0
  73. package/dist/src/lib/v8TransferBuilder.d.ts +11 -0
  74. package/dist/src/lib/v8TransferBuilder.d.ts.map +1 -0
  75. package/dist/src/lib/v8TransferBuilder.js +21 -0
  76. package/dist/src/lib/v8UnbondBuilder.d.ts +11 -0
  77. package/dist/src/lib/v8UnbondBuilder.d.ts.map +1 -0
  78. package/dist/src/lib/v8UnbondBuilder.js +21 -0
  79. package/dist/src/lib/v8WithdrawUnbondedBuilder.d.ts +11 -0
  80. package/dist/src/lib/v8WithdrawUnbondedBuilder.d.ts.map +1 -0
  81. package/dist/src/lib/v8WithdrawUnbondedBuilder.js +21 -0
  82. package/dist/src/lib/withdrawUnbondedBuilder.d.ts.map +1 -1
  83. package/dist/src/lib/withdrawUnbondedBuilder.js +3 -1
  84. package/dist/src/resources/index.d.ts +2 -0
  85. package/dist/src/resources/index.d.ts.map +1 -1
  86. package/dist/src/resources/index.js +3 -1
  87. package/dist/src/resources/mainnetV8.d.ts +13 -0
  88. package/dist/src/resources/mainnetV8.d.ts.map +1 -0
  89. package/dist/src/resources/mainnetV8.js +19 -0
  90. package/dist/src/resources/testnetV8.d.ts +13 -0
  91. package/dist/src/resources/testnetV8.d.ts.map +1 -0
  92. package/dist/src/resources/testnetV8.js +16 -0
  93. package/dist/test/resources/index.d.ts +28 -1
  94. package/dist/test/resources/index.d.ts.map +1 -1
  95. package/dist/test/resources/index.js +31 -2
  96. package/dist/test/unit/transactionBuilder/batchStakingBuilder.js +30 -1
  97. package/dist/test/unit/transactionBuilder/nominateBuilder.js +58 -1
  98. package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.d.ts +2 -0
  99. package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.d.ts.map +1 -0
  100. package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.js +201 -0
  101. package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.d.ts +2 -0
  102. package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.d.ts.map +1 -0
  103. package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.js +90 -0
  104. package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.d.ts +2 -0
  105. package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.d.ts.map +1 -0
  106. package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.js +62 -0
  107. package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.d.ts +2 -0
  108. package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.d.ts.map +1 -0
  109. package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.js +45 -0
  110. package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.d.ts +2 -0
  111. package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.d.ts.map +1 -0
  112. package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.js +87 -0
  113. package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.d.ts +2 -0
  114. package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.d.ts.map +1 -0
  115. package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.js +45 -0
  116. package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.d.ts +2 -0
  117. package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.d.ts.map +1 -0
  118. package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.js +114 -0
  119. package/dist/test/unit/transactionBuilder/v8TransferBuilder.d.ts +2 -0
  120. package/dist/test/unit/transactionBuilder/v8TransferBuilder.d.ts.map +1 -0
  121. package/dist/test/unit/transactionBuilder/v8TransferBuilder.js +107 -0
  122. package/dist/tsconfig.tsbuildinfo +1 -1
  123. package/package.json +8 -8
@@ -0,0 +1,266 @@
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.V8BatchStakingBuilder = void 0;
7
+ const baseBuilder_1 = require("./baseBuilder");
8
+ const txwrapper_polkadot_1 = require("@substrate/txwrapper-polkadot");
9
+ const sdk_core_1 = require("@bitgo/sdk-core");
10
+ const txnSchema_1 = require("./txnSchema");
11
+ const utils_1 = __importDefault(require("./utils"));
12
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
13
+ /**
14
+ * Polymesh v8 batch staking builder.
15
+ *
16
+ * Polymesh v8 changed `staking.bond` from `bond(controller, value, payee)` to `bond(value, payee)`
17
+ * — the stash account is its own controller, so no `controller` leg is encoded. This builder
18
+ * constructs `utility.batchAll([bond, nominate])` with the 2-arg bond call against v8 chain
19
+ * metadata (v8 specVersion / txVersion).
20
+ *
21
+ * Behaviour is otherwise identical to the v7 {@link BatchStakingBuilder}, which is retained as the
22
+ * `[CLEANUP-V8-OLD]` rollback path.
23
+ */
24
+ class V8BatchStakingBuilder extends baseBuilder_1.PolyxBaseBuilder {
25
+ constructor(_coinConfig) {
26
+ super(_coinConfig);
27
+ // For nominate operation
28
+ this._validators = [];
29
+ this.material(utils_1.default.getV8Material(_coinConfig.network.type));
30
+ }
31
+ get transactionType() {
32
+ return sdk_core_1.TransactionType.Batch;
33
+ }
34
+ /**
35
+ * Build a batch transaction that combines bond and nominate operations
36
+ * Both operations are required and always atomic (using batchAll)
37
+ */
38
+ buildTransaction() {
39
+ // Ensure both bond and nominate operations are included
40
+ if (!this._amount || this._validators.length === 0) {
41
+ throw new sdk_core_1.InvalidTransactionError('Batch transaction must include both bond and nominate operations');
42
+ }
43
+ const baseTxInfo = this.createBaseTxInfo();
44
+ // Create the individual calls
45
+ const calls = [];
46
+ // Add bond call — v8 bond takes only { value, payee } (no controller)
47
+ const bondCall = txwrapper_polkadot_1.methods.staking.bond({
48
+ value: this._amount,
49
+ payee: this._payee || 'Staked',
50
+ }, baseTxInfo.baseTxInfo, baseTxInfo.options);
51
+ calls.push(bondCall.method);
52
+ // Add nominate call
53
+ const nominateCall = txwrapper_polkadot_1.methods.staking.nominate({
54
+ targets: this._validators,
55
+ }, baseTxInfo.baseTxInfo, baseTxInfo.options);
56
+ calls.push(nominateCall.method);
57
+ // Always use batchAll (atomic)
58
+ return txwrapper_polkadot_1.methods.utility.batchAll({
59
+ calls,
60
+ }, baseTxInfo.baseTxInfo, baseTxInfo.options);
61
+ }
62
+ /**
63
+ * Set the staking amount for bond
64
+ */
65
+ amount(amount) {
66
+ this.validateValue(new bignumber_js_1.default(amount));
67
+ this._amount = amount;
68
+ return this;
69
+ }
70
+ /**
71
+ * Get the staking amount
72
+ */
73
+ getAmount() {
74
+ return this._amount;
75
+ }
76
+ /**
77
+ * Set the rewards destination for bond ('Staked', 'Stash','Controller', or { Account: string })
78
+ */
79
+ payee(payee) {
80
+ this._payee = payee;
81
+ return this;
82
+ }
83
+ /**
84
+ * Get the payee
85
+ */
86
+ getPayee() {
87
+ return this._payee;
88
+ }
89
+ /**
90
+ * Set the validators to nominate
91
+ */
92
+ validators(validators) {
93
+ for (const address of validators) {
94
+ this.validateAddress({ address });
95
+ }
96
+ this._validators = validators;
97
+ return this;
98
+ }
99
+ /**
100
+ * Get the validators to nominate
101
+ */
102
+ getValidators() {
103
+ return this._validators;
104
+ }
105
+ /** @inheritdoc */
106
+ validateDecodedTransaction(decodedTxn) {
107
+ const methodName = decodedTxn.method?.name;
108
+ // batch bond and nominate
109
+ if (methodName === 'batchAll') {
110
+ const txMethod = decodedTxn.method.args;
111
+ const calls = txMethod.calls;
112
+ if (calls.length !== 2) {
113
+ throw new sdk_core_1.InvalidTransactionError(`Invalid batch staking transaction: expected 2 calls but got ${calls.length}`);
114
+ }
115
+ // Check that first call is bond
116
+ const firstCallMethod = utils_1.default.decodeMethodName(calls[0], this._registry);
117
+ if (firstCallMethod !== 'bond') {
118
+ throw new sdk_core_1.InvalidTransactionError(`Invalid batch staking transaction: first call should be bond but got ${firstCallMethod}`);
119
+ }
120
+ // Check that second call is nominate
121
+ const secondCallMethod = utils_1.default.decodeMethodName(calls[1], this._registry);
122
+ if (secondCallMethod !== 'nominate') {
123
+ throw new sdk_core_1.InvalidTransactionError(`Invalid batch staking transaction: second call should be nominate but got ${secondCallMethod}`);
124
+ }
125
+ // Validate bond arguments
126
+ const bondArgs = calls[0].args;
127
+ this.validateBondArgs(bondArgs);
128
+ // Validate nominate arguments
129
+ const nominateArgs = calls[1].args;
130
+ this.validateNominateArgs(nominateArgs);
131
+ }
132
+ else {
133
+ throw new sdk_core_1.InvalidTransactionError(`Invalid transaction type: ${methodName}`);
134
+ }
135
+ }
136
+ /**
137
+ * Normalize a decoded payee value into the construction-side shape.
138
+ */
139
+ normalizePayee(payeeValue) {
140
+ let normalizedPayee = payeeValue;
141
+ if (typeof payeeValue === 'object' && payeeValue !== null) {
142
+ const decodedPayee = payeeValue;
143
+ if (decodedPayee.staked !== undefined) {
144
+ normalizedPayee = 'Staked';
145
+ }
146
+ else if (decodedPayee.stash !== undefined) {
147
+ normalizedPayee = 'Stash';
148
+ }
149
+ else if (decodedPayee.controller !== undefined) {
150
+ normalizedPayee = 'Controller';
151
+ }
152
+ else if (decodedPayee.account) {
153
+ normalizedPayee = { Account: decodedPayee.account };
154
+ }
155
+ }
156
+ return normalizedPayee;
157
+ }
158
+ /**
159
+ * Validate v8 bond arguments (no controller)
160
+ */
161
+ validateBondArgs(args) {
162
+ // Handle both string and number formats for value
163
+ const amountValue = args.value;
164
+ const valueString = typeof amountValue === 'string' ? amountValue : amountValue.toString();
165
+ const normalizedPayee = this.normalizePayee(args.payee);
166
+ const validationResult = txnSchema_1.V8BatchTransactionSchema.validateBond({
167
+ value: valueString,
168
+ payee: normalizedPayee,
169
+ });
170
+ if (validationResult.error) {
171
+ throw new sdk_core_1.InvalidTransactionError(`Invalid bond args: ${validationResult.error.message}`);
172
+ }
173
+ }
174
+ /**
175
+ * Validate nominate arguments
176
+ */
177
+ validateNominateArgs(args) {
178
+ // Handle both string and object formats for targets
179
+ const targetAddresses = args.targets.map((target) => {
180
+ if (typeof target === 'string') {
181
+ return target;
182
+ }
183
+ else if (target && typeof target === 'object' && 'id' in target) {
184
+ return target.id;
185
+ }
186
+ throw new sdk_core_1.InvalidTransactionError(`Invalid target format: ${JSON.stringify(target)}`);
187
+ });
188
+ const validationResult = txnSchema_1.V8BatchTransactionSchema.validateNominate({
189
+ validators: targetAddresses,
190
+ });
191
+ if (validationResult.error) {
192
+ throw new sdk_core_1.InvalidTransactionError(`Invalid nominate args: ${validationResult.error.message}`);
193
+ }
194
+ }
195
+ /** @inheritdoc */
196
+ fromImplementation(rawTransaction) {
197
+ const tx = super.fromImplementation(rawTransaction);
198
+ // Check if the transaction is a batch transaction
199
+ if (this._method?.name !== 'batchAll') {
200
+ throw new sdk_core_1.InvalidTransactionError(`Invalid Transaction Type: ${this._method?.name}. Expected batchAll`);
201
+ }
202
+ if (this._method) {
203
+ const txMethod = this._method.args;
204
+ for (const call of txMethod.calls) {
205
+ const callMethod = utils_1.default.decodeMethodName(call, this._registry);
206
+ if (callMethod === 'bond') {
207
+ const bondArgs = call.args;
208
+ // Handle both string and number formats for value
209
+ const amountValue = bondArgs.value;
210
+ const valueString = typeof amountValue === 'string' ? amountValue : amountValue.toString();
211
+ this.amount(valueString);
212
+ // Handle different payee formats
213
+ this.payee(this.normalizePayee(bondArgs.payee));
214
+ }
215
+ else if (callMethod === 'nominate') {
216
+ const nominateArgs = call.args;
217
+ // Handle both string and object formats for targets
218
+ const targetAddresses = nominateArgs.targets.map((target) => {
219
+ if (typeof target === 'string') {
220
+ return target;
221
+ }
222
+ else if (target && typeof target === 'object' && 'id' in target) {
223
+ return target.id;
224
+ }
225
+ throw new sdk_core_1.InvalidTransactionError(`Invalid target format: ${JSON.stringify(target)}`);
226
+ });
227
+ this.validators(targetAddresses);
228
+ }
229
+ }
230
+ }
231
+ return tx;
232
+ }
233
+ /** @inheritdoc */
234
+ validateTransaction(tx) {
235
+ super.validateTransaction(tx);
236
+ this.validateFields();
237
+ }
238
+ /**
239
+ * Validate the builder fields
240
+ */
241
+ validateFields() {
242
+ // Ensure both bond and nominate operations are included
243
+ if (!this._amount || this._validators.length === 0) {
244
+ throw new sdk_core_1.InvalidTransactionError('Batch transaction must include both bond and nominate operations');
245
+ }
246
+ const validationResult = txnSchema_1.V8BatchTransactionSchema.validate({
247
+ amount: this._amount,
248
+ payee: this._payee,
249
+ validators: this._validators,
250
+ });
251
+ if (validationResult.error) {
252
+ throw new sdk_core_1.InvalidTransactionError(`Invalid transaction: ${validationResult.error.message}`);
253
+ }
254
+ }
255
+ testValidateFields() {
256
+ this.validateFields();
257
+ }
258
+ testValidateBondArgs(args) {
259
+ return this.validateBondArgs(args);
260
+ }
261
+ testValidateNominateArgs(args) {
262
+ return this.validateNominateArgs(args);
263
+ }
264
+ }
265
+ exports.V8BatchStakingBuilder = V8BatchStakingBuilder;
266
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjhCYXRjaFN0YWtpbmdCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi92OEJhdGNoU3Rha2luZ0J1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsK0NBQWlEO0FBRWpELHNFQUF3RDtBQUV4RCw4Q0FBMkU7QUFDM0UsMkNBQXVEO0FBQ3ZELG9EQUE0QjtBQUU1QixnRUFBcUM7QUFhckM7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQWEscUJBQXNCLFNBQVEsOEJBQWdCO0lBUXpELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBSnJCLHlCQUF5QjtRQUNmLGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBSW5DLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBSyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELElBQWMsZUFBZTtRQUMzQixPQUFPLDBCQUFlLENBQUMsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7O09BR0c7SUFDTyxnQkFBZ0I7UUFDeEIsd0RBQXdEO1FBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ25ELE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO1FBQ3hHLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUUzQyw4QkFBOEI7UUFDOUIsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO1FBRTNCLHNFQUFzRTtRQUN0RSxNQUFNLFFBQVEsR0FBRyw0QkFBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ25DO1lBQ0UsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ25CLEtBQUssRUFBRSxJQUFJLENB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LENBQUM7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssY0FBYztRQUNwQix3REFBd0Q7UUFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkQsTUFBTSxJQUFJLGtDQUF1QixDQUFDLGtFQUFrRSxDQUFDLENBQUM7UUFDeEcsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsb0NBQXdCLENBQUMsUUFBUSxDQUFDO1lBQ3pELE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNwQixLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbEIsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXO1NBQzdCLENBQUMsQ0FBQztRQUVILElBQUksZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLGtDQUF1QixDQUFDLHdCQUF3QixnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM5RixDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVNLG9CQUFvQixDQUFDLElBQWdCO1FBQzFDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTSx3QkFBd0IsQ0FBQyxJQUFrQjtRQUNoRCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0NBQ0Y7QUExU0Qsc0RBMFNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFBvbHl4QmFzZUJ1aWxkZXIgfSBmcm9tICcuL2Jhc2VCdWlsZGVyJztcbmltcG9ydCB7IERlY29kZWRTaWduZWRUeCwgRGVjb2RlZFNpZ25pbmdQYXlsb2FkLCBVbnNpZ25lZFRyYW5zYWN0aW9uIH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItY29yZSc7XG5pbXBvcnQgeyBtZXRob2RzIH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItcG9sa2Fkb3QnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IEludmFsaWRUcmFuc2FjdGlvbkVycm9yLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgVjhCYXRjaFRyYW5zYWN0aW9uU2NoZW1hIH0gZnJvbSAnLi90eG5TY2hlbWEnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgQmF0Y2hBcmdzLCBOb21pbmF0ZUFyZ3MsIFY4Qm9uZEFyZ3MgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcblxuLy8gVHlwZSBkZWZpbml0aW9ucyBmb3IgZGVjb2RlZCB0cmFuc2FjdGlvbiBmb3JtYXRzXG5pbnRlcmZhY2UgRGVjb2RlZFBheWVlIHtcbiAgc3Rha2VkPzogbnVsbDtcbiAgc3Rhc2g/OiBudWxsO1xuICBjb250cm9sbGVyPzogbnVsbDtcbiAgYWNjb3VudD86IHN0cmluZztcbn1cblxudHlwZSBQYXllZVZhbHVlID0gc3RyaW5nIHwgRGVjb2RlZFBheWVlO1xudHlwZSBBbW91bnRWYWx1ZSA9IHN0cmluZyB8IG51bWJlcjtcblxuLyoqXG4gKiBQb2x5bWVzaCB2OCBiYXRjaCBzdGFraW5nIGJ1aWxkZXIuXG4gKlxuICogUG9seW1lc2ggdjggY2hhbmdlZCBgc3Rha2luZy5ib25kYCBmcm9tIGBib25kKGNvbnRyb2xsZXIsIHZhbHVlLCBwYXllZSlgIHRvIGBib25kKHZhbHVlLCBwYXllZSlgXG4gKiDigJQgdGhlIHN0YXNoIGFjY291bnQgaXMgaXRzIG93biBjb250cm9sbGVyLCBzbyBubyBgY29udHJvbGxlcmAgbGVnIGlzIGVuY29kZWQuIFRoaXMgYnVpbGRlclxuICogY29uc3RydWN0cyBgdXRpbGl0eS5iYXRjaEFsbChbYm9uZCwgbm9taW5hdGVdKWAgd2l0aCB0aGUgMi1hcmcgYm9uZCBjYWxsIGFnYWluc3QgdjggY2hhaW5cbiAqIG1ldGFkYXRhICh2OCBzcGVjVmVyc2lvbiAvIHR4VmVyc2lvbikuXG4gKlxuICogQmVoYXZpb3VyIGlzIG90aGVyd2lzZSBpZGVudGljYWwgdG8gdGhlIHY3IHtAbGluayBCYXRjaFN0YWtpbmdCdWlsZGVyfSwgd2hpY2ggaXMgcmV0YWluZWQgYXMgdGhlXG4gKiBgW0NMRUFOVVAtVjgtT0xEXWAgcm9sbGJhY2sgcGF0aC5cbiAqL1xuZXhwb3J0IGNsYXNzIFY4QmF0Y2hTdGFraW5nQnVpbGRlciBleHRlbmRzIFBvbHl4QmFzZUJ1aWxkZXIge1xuICAvLyBGb3IgYm9uZCBvcGVyYXRpb25cbiAgcHJvdGVjdGVkIF9hbW91bnQ6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9wYXllZTogc3RyaW5nIHwgeyBBY2NvdW50OiBzdHJpbmcgfTtcblxuICAvLyBGb3Igbm9taW5hdGUgb3BlcmF0aW9uXG4gIHByb3RlY3RlZCBfdmFsaWRhdG9yczogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5tYXRlcmlhbCh1dGlscy5nZXRWOE1hdGVyaWFsKF9jb2luQ29uZmlnLm5ldHdvcmsudHlwZSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkJhdGNoO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgYmF0Y2ggdHJhbnNhY3Rpb24gdGhhdCBjb21iaW5lcyBib25kIGFuZCBub21pbmF0ZSBvcGVyYXRpb25zXG4gICAqIEJvdGggb3BlcmF0aW9ucyBhcmUgcmVxdWlyZWQgYW5kIGFsd2F5cyBhdG9taWMgKHVzaW5nIGJhdGNoQWxsKVxuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkVHJhbnNhY3Rpb24oKTogVW5zaWduZWRUcmFuc2FjdGlvbiB7XG4gICAgLy8gRW5zdXJlIGJvdGggYm9uZCBhbmQgbm9taW5hdGUgb3BlcmF0aW9ucyBhcmUgaW5jbHVkZWRcbiAgICBpZiAoIXRoaXMuX2Ftb3VudCB8fCB0aGlzLl92YWxpZGF0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdCYXRjaCB0cmFuc2FjdGlvbiBtdXN0IGluY2x1ZGUgYm90aCBib25kIGFuZCBub21pbmF0ZSBvcGVyYXRpb25zJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZVR4SW5mbyA9IHRoaXMuY3JlYXRlQmFzZVR4SW5mbygpO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBpbmRpdmlkdWFsIGNhbGxzXG4gICAgY29uc3QgY2FsbHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBBZGQgYm9uZCBjYWxsIOKAlCB2OCBib25kIHRha2VzIG9ubHkgeyB2YWx1ZSwgcGF5ZWUgfSAobm8gY29udHJvbGxlcilcbiAgICBjb25zdCBib25kQ2FsbCA9IG1ldGhvZHMuc3Rha2luZy5ib25kKFxuICAgICAge1xuICAgICAgICB2YWx1ZTogdGhpcy5fYW1vdW50LFxuICAgICAgICBwYXllZTogdGhpcy5fcGF5ZWUgfHwgJ1N0YWtlZCcsXG4gICAgICB9IGFzIHVua25vd24gYXMgeyBjb250cm9sbGVyOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmc7IHBheWVlOiBzdHJpbmcgfCB7IEFjY291bnQ6IHN0cmluZyB9IH0sXG4gICAgICBiYXNlVHhJbmZvLmJhc2VUeEluZm8sXG4gICAgICBiYXNlVHhJbmZvLm9wdGlvbnNcbiAgICApO1xuICAgIGNhbGxzLnB1c2goYm9uZENhbGwubWV0aG9kKTtcblxuICAgIC8vIEFkZCBub21pbmF0ZSBjYWxsXG4gICAgY29uc3Qgbm9taW5hdGVDYWxsID0gbWV0aG9kcy5zdGFraW5nLm5vbWluYXRlKFxuICAgICAge1xuICAgICAgICB0YXJnZXRzOiB0aGlzLl92YWxpZGF0b3JzLFxuICAgICAgfSxcbiAgICAgIGJhc2VUeEluZm8uYmFzZVR4SW5mbyxcbiAgICAgIGJhc2VUeEluZm8ub3B0aW9uc1xuICAgICk7XG4gICAgY2FsbHMucHVzaChub21pbmF0ZUNhbGwubWV0aG9kKTtcblxuICAgIC8vIEFsd2F5cyB1c2UgYmF0Y2hBbGwgKGF0b21pYylcbiAgICByZXR1cm4gbWV0aG9kcy51dGlsaXR5LmJhdGNoQWxsKFxuICAgICAge1xuICAgICAgICBjYWxscyxcbiAgICAgIH0sXG4gICAgICBiYXNlVHhJbmZvLmJhc2VUeEluZm8sXG4gICAgICBiYXNlVHhJbmZvLm9wdGlvbnNcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc3Rha2luZyBhbW91bnQgZm9yIGJvbmRcbiAgICovXG4gIGFtb3VudChhbW91bnQ6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVWYWx1ZShuZXcgQmlnTnVtYmVyKGFtb3VudCkpO1xuICAgIHRoaXMuX2Ftb3VudCA9IGFtb3VudDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0YWtpbmcgYW1vdW50XG4gICAqL1xuICBnZXRBbW91bnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYW1vdW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgcmV3YXJkcyBkZXN0aW5hdGlvbiBmb3IgYm9uZCAoJ1N0YWtlZCcsICdTdGFzaCcsJ0NvbnRyb2xsZXInLCBvciB7IEFjY291bnQ6IHN0cmluZyB9KVxuICAgKi9cbiAgcGF5ZWUocGF5ZWU6IHN0cmluZyB8IHsgQWNjb3VudDogc3RyaW5nIH0pOiB0aGlzIHtcbiAgICB0aGlzLl9wYXllZSA9IHBheWVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcGF5ZWVcbiAgICovXG4gIGdldFBheWVlKCk6IHN0cmluZyB8IHsgQWNjb3VudDogc3RyaW5nIH0ge1xuICAgIHJldHVybiB0aGlzLl9wYXllZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbGlkYXRvcnMgdG8gbm9taW5hdGVcbiAgICovXG4gIHZhbGlkYXRvcnModmFsaWRhdG9yczogc3RyaW5nW10pOiB0aGlzIHtcbiAgICBmb3IgKGNvbnN0IGFkZHJlc3Mgb2YgdmFsaWRhdG9ycykge1xuICAgICAgdGhpcy52YWxpZGF0ZUFkZHJlc3MoeyBhZGRyZXNzIH0pO1xuICAgIH1cbiAgICB0aGlzLl92YWxpZGF0b3JzID0gdmFsaWRhdG9ycztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHZhbGlkYXRvcnMgdG8gbm9taW5hdGVcbiAgICovXG4gIGdldFZhbGlkYXRvcnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl92YWxpZGF0b3JzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlRGVjb2RlZFRyYW5zYWN0aW9uKGRlY29kZWRUeG46IERlY29kZWRTaWduaW5nUGF5bG9hZCB8IERlY29kZWRTaWduZWRUeCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBkZWNvZGVkVHhuLm1ldGhvZD8ubmFtZSBhcyBzdHJpbmc7XG5cbiAgICAvLyBiYXRjaCBib25kIGFuZCBub21pbmF0ZVxuICAgIGlmIChtZXRob2ROYW1lID09PSAnYmF0Y2hBbGwnKSB7XG4gICAgICBjb25zdCB0eE1ldGhvZCA9IGRlY29kZWRUeG4ubWV0aG9kLmFyZ3MgYXMgdW5rbm93biBhcyBCYXRjaEFyZ3M7XG4gICAgICBjb25zdCBjYWxscyA9IHR4TWV0aG9kLmNhbGxzO1xuXG4gICAgICBpZiAoY2FsbHMubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgICBgSW52YWxpZCBiYXRjaCBzdGFraW5nIHRyYW5zYWN0aW9uOiBleHBlY3RlZCAyIGNhbGxzIGJ1dCBnb3QgJHtjYWxscy5sZW5ndGh9YFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayB0aGF0IGZpcnN0IGNhbGwgaXMgYm9uZFxuICAgICAgY29uc3QgZmlyc3RDYWxsTWV0aG9kID0gdXRpbHMuZGVjb2RlTWV0aG9kTmFtZShjYWxsc1swXSwgdGhpcy5fcmVnaXN0cnkpO1xuICAgICAgaWYgKGZpcnN0Q2FsbE1ldGhvZCAhPT0gJ2JvbmQnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgICBgSW52YWxpZCBiYXRjaCBzdGFraW5nIHRyYW5zYWN0aW9uOiBmaXJzdCBjYWxsIHNob3VsZCBiZSBib25kIGJ1dCBnb3QgJHtmaXJzdENhbGxNZXRob2R9YFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayB0aGF0IHNlY29uZCBjYWxsIGlzIG5vbWluYXRlXG4gICAgICBjb25zdCBzZWNvbmRDYWxsTWV0aG9kID0gdXRpbHMuZGVjb2RlTWV0aG9kTmFtZShjYWxsc1sxXSwgdGhpcy5fcmVnaXN0cnkpO1xuICAgICAgaWYgKHNlY29uZENhbGxNZXRob2QgIT09ICdub21pbmF0ZScpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICAgIGBJbnZhbGlkIGJhdGNoIHN0YWtpbmcgdHJhbnNhY3Rpb246IHNlY29uZCBjYWxsIHNob3VsZCBiZSBub21pbmF0ZSBidXQgZ290ICR7c2Vjb25kQ2FsbE1ldGhvZH1gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIGJvbmQgYXJndW1lbnRzXG4gICAgICBjb25zdCBib25kQXJncyA9IGNhbGxzWzBdLmFyZ3MgYXMgdW5rbm93biBhcyBWOEJvbmRBcmdzO1xuICAgICAgdGhpcy52YWxpZGF0ZUJvbmRBcmdzKGJvbmRBcmdzKTtcblxuICAgICAgLy8gVmFsaWRhdGUgbm9taW5hdGUgYXJndW1lbnRzXG4gICAgICBjb25zdCBub21pbmF0ZUFyZ3MgPSBjYWxsc1sxXS5hcmdzIGFzIHVua25vd24gYXMgTm9taW5hdGVBcmdzO1xuICAgICAgdGhpcy52YWxpZGF0ZU5vbWluYXRlQXJncyhub21pbmF0ZUFyZ3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgdHJhbnNhY3Rpb24gdHlwZTogJHttZXRob2ROYW1lfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemUgYSBkZWNvZGVkIHBheWVlIHZhbHVlIGludG8gdGhlIGNvbnN0cnVjdGlvbi1zaWRlIHNoYXBlLlxuICAgKi9cbiAgcHJpdmF0ZSBub3JtYWxpemVQYXllZShwYXllZVZhbHVlOiBQYXllZVZhbHVlKTogc3RyaW5nIHwgeyBBY2NvdW50OiBzdHJpbmcgfSB7XG4gICAgbGV0IG5vcm1hbGl6ZWRQYXllZTogc3RyaW5nIHwgeyBBY2NvdW50OiBzdHJpbmcgfSA9IHBheWVlVmFsdWUgYXMgc3RyaW5nO1xuICAgIGlmICh0eXBlb2YgcGF5ZWVWYWx1ZSA9PT0gJ29iamVjdCcgJiYgcGF5ZWVWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZGVjb2RlZFBheWVlID0gcGF5ZWVWYWx1ZSBhcyBEZWNvZGVkUGF5ZWU7XG4gICAgICBpZiAoZGVjb2RlZFBheWVlLnN0YWtlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vcm1hbGl6ZWRQYXllZSA9ICdTdGFrZWQnO1xuICAgICAgfSBlbHNlIGlmIChkZWNvZGVkUGF5ZWUuc3Rhc2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBub3JtYWxpemVkUGF5ZWUgPSAnU3Rhc2gnO1xuICAgICAgfSBlbHNlIGlmIChkZWNvZGVkUGF5ZWUuY29udHJvbGxlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vcm1hbGl6ZWRQYXllZSA9ICdDb250cm9sbGVyJztcbiAgICAgIH0gZWxzZSBpZiAoZGVjb2RlZFBheWVlLmFjY291bnQpIHtcbiAgICAgICAgbm9ybWFsaXplZFBheWVlID0geyBBY2NvdW50OiBkZWNvZGVkUGF5ZWUuYWNjb3VudCB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm9ybWFsaXplZFBheWVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHY4IGJvbmQgYXJndW1lbnRzIChubyBjb250cm9sbGVyKVxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUJvbmRBcmdzKGFyZ3M6IFY4Qm9uZEFyZ3MpOiB2b2lkIHtcbiAgICAvLyBIYW5kbGUgYm90aCBzdHJpbmcgYW5kIG51bWJlciBmb3JtYXRzIGZvciB2YWx1ZVxuICAgIGNvbnN0IGFtb3VudFZhbHVlID0gYXJncy52YWx1ZSBhcyBBbW91bnRWYWx1ZTtcbiAgICBjb25zdCB2YWx1ZVN0cmluZyA9IHR5cGVvZiBhbW91bnRWYWx1ZSA9PT0gJ3N0cmluZycgPyBhbW91bnRWYWx1ZSA6IGFtb3VudFZhbHVlLnRvU3RyaW5nKCk7XG5cbiAgICBjb25zdCBub3JtYWxpemVkUGF5ZWUgPSB0aGlzLm5vcm1hbGl6ZVBheWVlKGFyZ3MucGF5ZWUgYXMgUGF5ZWVWYWx1ZSk7XG5cbiAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gVjhCYXRjaFRyYW5zYWN0aW9uU2NoZW1hLnZhbGlkYXRlQm9uZCh7XG4gICAgICB2YWx1ZTogdmFsdWVTdHJpbmcsXG4gICAgICBwYXllZTogbm9ybWFsaXplZFBheWVlLFxuICAgIH0pO1xuXG4gICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCBib25kIGFyZ3M6ICR7dmFsaWRhdGlvblJlc3VsdC5lcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBub21pbmF0ZSBhcmd1bWVudHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVOb21pbmF0ZUFyZ3MoYXJnczogTm9taW5hdGVBcmdzKTogdm9pZCB7XG4gICAgLy8gSGFuZGxlIGJvdGggc3RyaW5nIGFuZCBvYmplY3QgZm9ybWF0cyBmb3IgdGFyZ2V0c1xuICAgIGNvbnN0IHRhcmdldEFkZHJlc3NlcyA9IGFyZ3MudGFyZ2V0cy5tYXAoKHRhcmdldCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICB9IGVsc2UgaWYgKHRhcmdldCAmJiB0eXBlb2YgdGFyZ2V0ID09PSAnb2JqZWN0JyAmJiAnaWQnIGluIHRhcmdldCkge1xuICAgICAgICByZXR1cm4gKHRhcmdldCBhcyB7IGlkOiBzdHJpbmcgfSkuaWQ7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgdGFyZ2V0IGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeSh0YXJnZXQpfWApO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IFY4QmF0Y2hUcmFuc2FjdGlvblNjaGVtYS52YWxpZGF0ZU5vbWluYXRlKHtcbiAgICAgIHZhbGlkYXRvcnM6IHRhcmdldEFkZHJlc3NlcyxcbiAgICB9KTtcblxuICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0LmVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgbm9taW5hdGUgYXJnczogJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0eCA9IHN1cGVyLmZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbik7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdHJhbnNhY3Rpb24gaXMgYSBiYXRjaCB0cmFuc2FjdGlvblxuICAgIGlmICgodGhpcy5fbWV0aG9kPy5uYW1lIGFzIHN0cmluZykgIT09ICdiYXRjaEFsbCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCBUcmFuc2FjdGlvbiBUeXBlOiAke3RoaXMuX21ldGhvZD8ubmFtZX0uIEV4cGVjdGVkIGJhdGNoQWxsYCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21ldGhvZCkge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSB0aGlzLl9tZXRob2QuYXJncyBhcyB1bmtub3duIGFzIEJhdGNoQXJncztcblxuICAgICAgZm9yIChjb25zdCBjYWxsIG9mIHR4TWV0aG9kLmNhbGxzKSB7XG4gICAgICAgIGNvbnN0IGNhbGxNZXRob2QgPSB1dGlscy5kZWNvZGVNZXRob2ROYW1lKGNhbGwsIHRoaXMuX3JlZ2lzdHJ5KTtcbiAgICAgICAgaWYgKGNhbGxNZXRob2QgPT09ICdib25kJykge1xuICAgICAgICAgIGNvbnN0IGJvbmRBcmdzID0gY2FsbC5hcmdzIGFzIHVua25vd24gYXMgVjhCb25kQXJncztcbiAgICAgICAgICAvLyBIYW5kbGUgYm90aCBzdHJpbmcgYW5kIG51bWJlciBmb3JtYXRzIGZvciB2YWx1ZVxuICAgICAgICAgIGNvbnN0IGFtb3VudFZhbHVlID0gYm9uZEFyZ3MudmFsdWUgYXMgQW1vdW50VmFsdWU7XG4gICAgICAgICAgY29uc3QgdmFsdWVTdHJpbmcgPSB0eXBlb2YgYW1vdW50VmFsdWUgPT09ICdzdHJpbmcnID8gYW1vdW50VmFsdWUgOiBhbW91bnRWYWx1ZS50b1N0cmluZygpO1xuICAgICAgICAgIHRoaXMuYW1vdW50KHZhbHVlU3RyaW5nKTtcblxuICAgICAgICAgIC8vIEhhbmRsZSBkaWZmZXJlbnQgcGF5ZWUgZm9ybWF0c1xuICAgICAgICAgIHRoaXMucGF5ZWUodGhpcy5ub3JtYWxpemVQYXllZShib25kQXJncy5wYXllZSBhcyBQYXllZVZhbHVlKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2FsbE1ldGhvZCA9PT0gJ25vbWluYXRlJykge1xuICAgICAgICAgIGNvbnN0IG5vbWluYXRlQXJncyA9IGNhbGwuYXJncyBhcyB1bmtub3duIGFzIE5vbWluYXRlQXJncztcblxuICAgICAgICAgIC8vIEhhbmRsZSBib3RoIHN0cmluZyBhbmQgb2JqZWN0IGZvcm1hdHMgZm9yIHRhcmdldHNcbiAgICAgICAgICBjb25zdCB0YXJnZXRBZGRyZXNzZXMgPSBub21pbmF0ZUFyZ3MudGFyZ2V0cy5tYXAoKHRhcmdldCkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCAmJiB0eXBlb2YgdGFyZ2V0ID09PSAnb2JqZWN0JyAmJiAnaWQnIGluIHRhcmdldCkge1xuICAgICAgICAgICAgICByZXR1cm4gKHRhcmdldCBhcyB7IGlkOiBzdHJpbmcgfSkuaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgdGFyZ2V0IGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeSh0YXJnZXQpfWApO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMudmFsaWRhdG9ycyh0YXJnZXRBZGRyZXNzZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHR4O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHg6IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgc3VwZXIudmFsaWRhdGVUcmFuc2FjdGlvbih0eCk7XG4gICAgdGhpcy52YWxpZGF0ZUZpZWxkcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoZSBidWlsZGVyIGZpZWxkc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUZpZWxkcygpOiB2b2lkIHtcbiAgICAvLyBFbnN1cmUgYm90aCBib25kIGFuZCBub21pbmF0ZSBvcGVyYXRpb25zIGFyZSBpbmNsdWRlZFxuICAgIGlmICghdGhpcy5fYW1vdW50IHx8IHRoaXMuX3ZhbGlkYXRvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0JhdGNoIHRyYW5zYWN0aW9uIG11c3QgaW5jbHVkZSBib3RoIGJvbmQgYW5kIG5vbWluYXRlIG9wZXJhdGlvbnMnKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gVjhCYXRjaFRyYW5zYWN0aW9uU2NoZW1hLnZhbGlkYXRlKHtcbiAgICAgIGFtb3VudDogdGhpcy5fYW1vdW50LFxuICAgICAgcGF5ZWU6IHRoaXMuX3BheWVlLFxuICAgICAgdmFsaWRhdG9yczogdGhpcy5fdmFsaWRhdG9ycyxcbiAgICB9KTtcblxuICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0LmVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgdHJhbnNhY3Rpb246ICR7dmFsaWRhdGlvblJlc3VsdC5lcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIHRlc3RWYWxpZGF0ZUZpZWxkcygpOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRlRmllbGRzKCk7XG4gIH1cblxuICBwdWJsaWMgdGVzdFZhbGlkYXRlQm9uZEFyZ3MoYXJnczogVjhCb25kQXJncyk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQm9uZEFyZ3MoYXJncyk7XG4gIH1cblxuICBwdWJsaWMgdGVzdFZhbGlkYXRlTm9taW5hdGVBcmdzKGFyZ3M6IE5vbWluYXRlQXJncyk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRlTm9taW5hdGVBcmdzKGFyZ3MpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,11 @@
1
+ import { BaseCoin as CoinConfig } from '@bitgo/statics';
2
+ import { BatchUnstakingBuilder } from './batchUnstakingBuilder';
3
+ /**
4
+ * Builds a `utility.batchAll([chill, unbond])` unstaking transaction against Polymesh v8 chain
5
+ * metadata. chill/unbond are unchanged between v7 and v8; only the material (specVersion /
6
+ * txVersion) differs from {@link BatchUnstakingBuilder}.
7
+ */
8
+ export declare class V8BatchUnstakingBuilder extends BatchUnstakingBuilder {
9
+ constructor(_coinConfig: Readonly<CoinConfig>);
10
+ }
11
+ //# sourceMappingURL=v8BatchUnstakingBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v8BatchUnstakingBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/v8BatchUnstakingBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGhE;;;;GAIG;AACH,qBAAa,uBAAwB,SAAQ,qBAAqB;gBACpD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;CAI9C"}
@@ -0,0 +1,21 @@
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.V8BatchUnstakingBuilder = void 0;
7
+ const batchUnstakingBuilder_1 = require("./batchUnstakingBuilder");
8
+ const utils_1 = __importDefault(require("./utils"));
9
+ /**
10
+ * Builds a `utility.batchAll([chill, unbond])` unstaking transaction against Polymesh v8 chain
11
+ * metadata. chill/unbond are unchanged between v7 and v8; only the material (specVersion /
12
+ * txVersion) differs from {@link BatchUnstakingBuilder}.
13
+ */
14
+ class V8BatchUnstakingBuilder extends batchUnstakingBuilder_1.BatchUnstakingBuilder {
15
+ constructor(_coinConfig) {
16
+ super(_coinConfig);
17
+ this.material(utils_1.default.getV8Material(_coinConfig.network.type));
18
+ }
19
+ }
20
+ exports.V8BatchUnstakingBuilder = V8BatchUnstakingBuilder;
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjhCYXRjaFVuc3Rha2luZ0J1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Y4QmF0Y2hVbnN0YWtpbmdCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLG1FQUFnRTtBQUNoRSxvREFBNEI7QUFFNUI7Ozs7R0FJRztBQUNILE1BQWEsdUJBQXdCLFNBQVEsNkNBQXFCO0lBQ2hFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBSyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztDQUNGO0FBTEQsMERBS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgQmF0Y2hVbnN0YWtpbmdCdWlsZGVyIH0gZnJvbSAnLi9iYXRjaFVuc3Rha2luZ0J1aWxkZXInO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGB1dGlsaXR5LmJhdGNoQWxsKFtjaGlsbCwgdW5ib25kXSlgIHVuc3Rha2luZyB0cmFuc2FjdGlvbiBhZ2FpbnN0IFBvbHltZXNoIHY4IGNoYWluXG4gKiBtZXRhZGF0YS4gY2hpbGwvdW5ib25kIGFyZSB1bmNoYW5nZWQgYmV0d2VlbiB2NyBhbmQgdjg7IG9ubHkgdGhlIG1hdGVyaWFsIChzcGVjVmVyc2lvbiAvXG4gKiB0eFZlcnNpb24pIGRpZmZlcnMgZnJvbSB7QGxpbmsgQmF0Y2hVbnN0YWtpbmdCdWlsZGVyfS5cbiAqL1xuZXhwb3J0IGNsYXNzIFY4QmF0Y2hVbnN0YWtpbmdCdWlsZGVyIGV4dGVuZHMgQmF0Y2hVbnN0YWtpbmdCdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMubWF0ZXJpYWwodXRpbHMuZ2V0VjhNYXRlcmlhbChfY29pbkNvbmZpZy5uZXR3b3JrLnR5cGUpKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,11 @@
1
+ import { BaseCoin as CoinConfig } from '@bitgo/statics';
2
+ import { BondExtraBuilder } from './bondExtraBuilder';
3
+ /**
4
+ * Builds a staking.bondExtra transaction against Polymesh v8 chain metadata. bondExtra is
5
+ * unchanged between v7 and v8 (`bondExtra(maxAdditional)`); only the material (specVersion /
6
+ * txVersion) differs from {@link BondExtraBuilder}.
7
+ */
8
+ export declare class V8BondExtraBuilder extends BondExtraBuilder {
9
+ constructor(_coinConfig: Readonly<CoinConfig>);
10
+ }
11
+ //# sourceMappingURL=v8BondExtraBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v8BondExtraBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/v8BondExtraBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,gBAAgB;gBAC1C,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;CAI9C"}
@@ -0,0 +1,21 @@
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.V8BondExtraBuilder = void 0;
7
+ const bondExtraBuilder_1 = require("./bondExtraBuilder");
8
+ const utils_1 = __importDefault(require("./utils"));
9
+ /**
10
+ * Builds a staking.bondExtra transaction against Polymesh v8 chain metadata. bondExtra is
11
+ * unchanged between v7 and v8 (`bondExtra(maxAdditional)`); only the material (specVersion /
12
+ * txVersion) differs from {@link BondExtraBuilder}.
13
+ */
14
+ class V8BondExtraBuilder extends bondExtraBuilder_1.BondExtraBuilder {
15
+ constructor(_coinConfig) {
16
+ super(_coinConfig);
17
+ this.material(utils_1.default.getV8Material(_coinConfig.network.type));
18
+ }
19
+ }
20
+ exports.V8BondExtraBuilder = V8BondExtraBuilder;
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjhCb25kRXh0cmFCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi92OEJvbmRFeHRyYUJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EseURBQXNEO0FBQ3RELG9EQUE0QjtBQUU1Qjs7OztHQUlHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSxtQ0FBZ0I7SUFDdEQsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFLLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0NBQ0Y7QUFMRCxnREFLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBCb25kRXh0cmFCdWlsZGVyIH0gZnJvbSAnLi9ib25kRXh0cmFCdWlsZGVyJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBCdWlsZHMgYSBzdGFraW5nLmJvbmRFeHRyYSB0cmFuc2FjdGlvbiBhZ2FpbnN0IFBvbHltZXNoIHY4IGNoYWluIG1ldGFkYXRhLiBib25kRXh0cmEgaXNcbiAqIHVuY2hhbmdlZCBiZXR3ZWVuIHY3IGFuZCB2OCAoYGJvbmRFeHRyYShtYXhBZGRpdGlvbmFsKWApOyBvbmx5IHRoZSBtYXRlcmlhbCAoc3BlY1ZlcnNpb24gL1xuICogdHhWZXJzaW9uKSBkaWZmZXJzIGZyb20ge0BsaW5rIEJvbmRFeHRyYUJ1aWxkZXJ9LlxuICovXG5leHBvcnQgY2xhc3MgVjhCb25kRXh0cmFCdWlsZGVyIGV4dGVuZHMgQm9uZEV4dHJhQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLm1hdGVyaWFsKHV0aWxzLmdldFY4TWF0ZXJpYWwoX2NvaW5Db25maWcubmV0d29yay50eXBlKSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,20 @@
1
+ import { BaseCoin as CoinConfig } from '@bitgo/statics';
2
+ import { V8TokenTransferBuilder } from './v8TokenTransferBuilder';
3
+ /**
4
+ * Builds a Polymesh settlement.addAndAffirmWithMediators transaction using the NEW
5
+ * (hex) memo encoding against Polymesh v8 chain metadata, with AssetHolder-wrapped
6
+ * legs/holderSet (see V8TokenTransferBuilder). Identical to V8TokenTransferBuilder;
7
+ * only the memo encoding differs.
8
+ */
9
+ export declare class V8HexTokenTransferBuilder extends V8TokenTransferBuilder {
10
+ constructor(_coinConfig: Readonly<CoinConfig>);
11
+ /**
12
+ * Encode memo using the NEW Polymesh format.
13
+ *
14
+ * If the value is already a 0x-prefixed 32-byte hex string (e.g. when decoding an
15
+ * existing NEW-encoded transaction via fromImplementation), it is stored as-is.
16
+ * Otherwise the text is converted to UTF-8 hex and right-padded with 0x00 to 32 bytes.
17
+ */
18
+ memo(memo: string): this;
19
+ }
20
+ //# sourceMappingURL=v8HexTokenTransferBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v8HexTokenTransferBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/v8HexTokenTransferBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAIlE;;;;;GAKG;AACH,qBAAa,yBAA0B,SAAQ,sBAAsB;gBACvD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C;;;;;;OAMG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAWzB"}
@@ -0,0 +1,42 @@
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.V8HexTokenTransferBuilder = void 0;
7
+ const sdk_core_1 = require("@bitgo/sdk-core");
8
+ const v8TokenTransferBuilder_1 = require("./v8TokenTransferBuilder");
9
+ const constants_1 = require("./constants");
10
+ const utils_1 = __importDefault(require("./utils"));
11
+ /**
12
+ * Builds a Polymesh settlement.addAndAffirmWithMediators transaction using the NEW
13
+ * (hex) memo encoding against Polymesh v8 chain metadata, with AssetHolder-wrapped
14
+ * legs/holderSet (see V8TokenTransferBuilder). Identical to V8TokenTransferBuilder;
15
+ * only the memo encoding differs.
16
+ */
17
+ class V8HexTokenTransferBuilder extends v8TokenTransferBuilder_1.V8TokenTransferBuilder {
18
+ constructor(_coinConfig) {
19
+ super(_coinConfig);
20
+ }
21
+ /**
22
+ * Encode memo using the NEW Polymesh format.
23
+ *
24
+ * If the value is already a 0x-prefixed 32-byte hex string (e.g. when decoding an
25
+ * existing NEW-encoded transaction via fromImplementation), it is stored as-is.
26
+ * Otherwise the text is converted to UTF-8 hex and right-padded with 0x00 to 32 bytes.
27
+ */
28
+ memo(memo) {
29
+ if (memo.startsWith('0x') && memo.length === 66) {
30
+ if (!constants_1.MEMO_HEX_REGEX.test(memo)) {
31
+ throw new sdk_core_1.InvalidTransactionError(`Invalid memo hex encoding: ${memo}`);
32
+ }
33
+ this._memo = memo;
34
+ }
35
+ else {
36
+ this._memo = utils_1.default.encodeMemoNew(memo);
37
+ }
38
+ return this;
39
+ }
40
+ }
41
+ exports.V8HexTokenTransferBuilder = V8HexTokenTransferBuilder;
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjhIZXhUb2tlblRyYW5zZmVyQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdjhIZXhUb2tlblRyYW5zZmVyQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSw4Q0FBMEQ7QUFDMUQscUVBQWtFO0FBQ2xFLDJDQUE2QztBQUM3QyxvREFBNEI7QUFFNUI7Ozs7O0dBS0c7QUFDSCxNQUFhLHlCQUEwQixTQUFRLCtDQUFzQjtJQUNuRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsSUFBSSxDQUFDLElBQVk7UUFDZixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsMEJBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxJQUFJLGtDQUF1QixDQUFDLDhCQUE4QixJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzFFLENBQUM7WUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNwQixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxLQUFLLEdBQUcsZUFBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0Y7QUF2QkQsOERBdUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IEludmFsaWRUcmFuc2FjdGlvbkVycm9yIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFY4VG9rZW5UcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL3Y4VG9rZW5UcmFuc2ZlckJ1aWxkZXInO1xuaW1wb3J0IHsgTUVNT19IRVhfUkVHRVggfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbi8qKlxuICogQnVpbGRzIGEgUG9seW1lc2ggc2V0dGxlbWVudC5hZGRBbmRBZmZpcm1XaXRoTWVkaWF0b3JzIHRyYW5zYWN0aW9uIHVzaW5nIHRoZSBORVdcbiAqIChoZXgpIG1lbW8gZW5jb2RpbmcgYWdhaW5zdCBQb2x5bWVzaCB2OCBjaGFpbiBtZXRhZGF0YSwgd2l0aCBBc3NldEhvbGRlci13cmFwcGVkXG4gKiBsZWdzL2hvbGRlclNldCAoc2VlIFY4VG9rZW5UcmFuc2ZlckJ1aWxkZXIpLiBJZGVudGljYWwgdG8gVjhUb2tlblRyYW5zZmVyQnVpbGRlcjtcbiAqIG9ubHkgdGhlIG1lbW8gZW5jb2RpbmcgZGlmZmVycy5cbiAqL1xuZXhwb3J0IGNsYXNzIFY4SGV4VG9rZW5UcmFuc2ZlckJ1aWxkZXIgZXh0ZW5kcyBWOFRva2VuVHJhbnNmZXJCdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY29kZSBtZW1vIHVzaW5nIHRoZSBORVcgUG9seW1lc2ggZm9ybWF0LlxuICAgKlxuICAgKiBJZiB0aGUgdmFsdWUgaXMgYWxyZWFkeSBhIDB4LXByZWZpeGVkIDMyLWJ5dGUgaGV4IHN0cmluZyAoZS5nLiB3aGVuIGRlY29kaW5nIGFuXG4gICAqIGV4aXN0aW5nIE5FVy1lbmNvZGVkIHRyYW5zYWN0aW9uIHZpYSBmcm9tSW1wbGVtZW50YXRpb24pLCBpdCBpcyBzdG9yZWQgYXMtaXMuXG4gICAqIE90aGVyd2lzZSB0aGUgdGV4dCBpcyBjb252ZXJ0ZWQgdG8gVVRGLTggaGV4IGFuZCByaWdodC1wYWRkZWQgd2l0aCAweDAwIHRvIDMyIGJ5dGVzLlxuICAgKi9cbiAgbWVtbyhtZW1vOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpZiAobWVtby5zdGFydHNXaXRoKCcweCcpICYmIG1lbW8ubGVuZ3RoID09PSA2Nikge1xuICAgICAgaWYgKCFNRU1PX0hFWF9SRUdFWC50ZXN0KG1lbW8pKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCBtZW1vIGhleCBlbmNvZGluZzogJHttZW1vfWApO1xuICAgICAgfVxuICAgICAgdGhpcy5fbWVtbyA9IG1lbW87XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX21lbW8gPSB1dGlscy5lbmNvZGVNZW1vTmV3KG1lbW8pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuIl19
@@ -0,0 +1,11 @@
1
+ import { BaseCoin as CoinConfig } from '@bitgo/statics';
2
+ import { HexTransferBuilder } from './hexTransferBuilder';
3
+ /**
4
+ * Builds a POLYX balances.transferWithMemo transaction using the hex
5
+ * (NEW) memo encoding against Polymesh v8 chain metadata. Identical
6
+ * behaviour to HexTransferBuilder; only the material differs.
7
+ */
8
+ export declare class V8HexTransferBuilder extends HexTransferBuilder {
9
+ constructor(_coinConfig: Readonly<CoinConfig>);
10
+ }
11
+ //# sourceMappingURL=v8HexTransferBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v8HexTransferBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/v8HexTransferBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,kBAAkB;gBAC9C,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;CAI9C"}
@@ -0,0 +1,21 @@
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.V8HexTransferBuilder = void 0;
7
+ const hexTransferBuilder_1 = require("./hexTransferBuilder");
8
+ const utils_1 = __importDefault(require("./utils"));
9
+ /**
10
+ * Builds a POLYX balances.transferWithMemo transaction using the hex
11
+ * (NEW) memo encoding against Polymesh v8 chain metadata. Identical
12
+ * behaviour to HexTransferBuilder; only the material differs.
13
+ */
14
+ class V8HexTransferBuilder extends hexTransferBuilder_1.HexTransferBuilder {
15
+ constructor(_coinConfig) {
16
+ super(_coinConfig);
17
+ this.material(utils_1.default.getV8Material(_coinConfig.network.type));
18
+ }
19
+ }
20
+ exports.V8HexTransferBuilder = V8HexTransferBuilder;
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjhIZXhUcmFuc2ZlckJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Y4SGV4VHJhbnNmZXJCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLDZEQUEwRDtBQUMxRCxvREFBNEI7QUFFNUI7Ozs7R0FJRztBQUNILE1BQWEsb0JBQXFCLFNBQVEsdUNBQWtCO0lBQzFELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBSyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztDQUNGO0FBTEQsb0RBS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgSGV4VHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi9oZXhUcmFuc2ZlckJ1aWxkZXInO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuXG4vKipcbiAqIEJ1aWxkcyBhIFBPTFlYIGJhbGFuY2VzLnRyYW5zZmVyV2l0aE1lbW8gdHJhbnNhY3Rpb24gdXNpbmcgdGhlIGhleFxuICogKE5FVykgbWVtbyBlbmNvZGluZyBhZ2FpbnN0IFBvbHltZXNoIHY4IGNoYWluIG1ldGFkYXRhLiBJZGVudGljYWxcbiAqIGJlaGF2aW91ciB0byBIZXhUcmFuc2ZlckJ1aWxkZXI7IG9ubHkgdGhlIG1hdGVyaWFsIGRpZmZlcnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBWOEhleFRyYW5zZmVyQnVpbGRlciBleHRlbmRzIEhleFRyYW5zZmVyQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLm1hdGVyaWFsKHV0aWxzLmdldFY4TWF0ZXJpYWwoX2NvaW5Db25maWcubmV0d29yay50eXBlKSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,11 @@
1
+ import { BaseCoin as CoinConfig } from '@bitgo/statics';
2
+ import { NominateBuilder } from './nominateBuilder';
3
+ /**
4
+ * Builds a staking.nominate transaction against Polymesh v8 chain metadata. nominate is unchanged
5
+ * between v7 and v8 (`nominate(targets)`); only the material (specVersion / txVersion) differs from
6
+ * {@link NominateBuilder}.
7
+ */
8
+ export declare class V8NominateBuilder extends NominateBuilder {
9
+ constructor(_coinConfig: Readonly<CoinConfig>);
10
+ }
11
+ //# sourceMappingURL=v8NominateBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v8NominateBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/v8NominateBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,eAAe;gBACxC,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;CAI9C"}
@@ -0,0 +1,21 @@
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.V8NominateBuilder = void 0;
7
+ const nominateBuilder_1 = require("./nominateBuilder");
8
+ const utils_1 = __importDefault(require("./utils"));
9
+ /**
10
+ * Builds a staking.nominate transaction against Polymesh v8 chain metadata. nominate is unchanged
11
+ * between v7 and v8 (`nominate(targets)`); only the material (specVersion / txVersion) differs from
12
+ * {@link NominateBuilder}.
13
+ */
14
+ class V8NominateBuilder extends nominateBuilder_1.NominateBuilder {
15
+ constructor(_coinConfig) {
16
+ super(_coinConfig);
17
+ this.material(utils_1.default.getV8Material(_coinConfig.network.type));
18
+ }
19
+ }
20
+ exports.V8NominateBuilder = V8NominateBuilder;
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjhOb21pbmF0ZUJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Y4Tm9taW5hdGVCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLHVEQUFvRDtBQUNwRCxvREFBNEI7QUFFNUI7Ozs7R0FJRztBQUNILE1BQWEsaUJBQWtCLFNBQVEsaUNBQWU7SUFDcEQsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFLLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0NBQ0Y7QUFMRCw4Q0FLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBOb21pbmF0ZUJ1aWxkZXIgfSBmcm9tICcuL25vbWluYXRlQnVpbGRlcic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbi8qKlxuICogQnVpbGRzIGEgc3Rha2luZy5ub21pbmF0ZSB0cmFuc2FjdGlvbiBhZ2FpbnN0IFBvbHltZXNoIHY4IGNoYWluIG1ldGFkYXRhLiBub21pbmF0ZSBpcyB1bmNoYW5nZWRcbiAqIGJldHdlZW4gdjcgYW5kIHY4IChgbm9taW5hdGUodGFyZ2V0cylgKTsgb25seSB0aGUgbWF0ZXJpYWwgKHNwZWNWZXJzaW9uIC8gdHhWZXJzaW9uKSBkaWZmZXJzIGZyb21cbiAqIHtAbGluayBOb21pbmF0ZUJ1aWxkZXJ9LlxuICovXG5leHBvcnQgY2xhc3MgVjhOb21pbmF0ZUJ1aWxkZXIgZXh0ZW5kcyBOb21pbmF0ZUJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5tYXRlcmlhbCh1dGlscy5nZXRWOE1hdGVyaWFsKF9jb2luQ29uZmlnLm5ldHdvcmsudHlwZSkpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,11 @@
1
+ import { BaseCoin as CoinConfig } from '@bitgo/statics';
2
+ import { PreApproveAssetBuilder } from './preApproveAssetBuilder';
3
+ /**
4
+ * Builds a Polymesh asset.preApproveAsset transaction against Polymesh v8
5
+ * chain metadata. Identical behaviour to PreApproveAssetBuilder; only the
6
+ * material differs.
7
+ */
8
+ export declare class V8PreApproveAssetBuilder extends PreApproveAssetBuilder {
9
+ constructor(_coinConfig: Readonly<CoinConfig>);
10
+ }
11
+ //# sourceMappingURL=v8PreApproveAssetBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v8PreApproveAssetBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/v8PreApproveAssetBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGlE;;;;GAIG;AACH,qBAAa,wBAAyB,SAAQ,sBAAsB;gBACtD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;CAI9C"}
@@ -0,0 +1,21 @@
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.V8PreApproveAssetBuilder = void 0;
7
+ const preApproveAssetBuilder_1 = require("./preApproveAssetBuilder");
8
+ const utils_1 = __importDefault(require("./utils"));
9
+ /**
10
+ * Builds a Polymesh asset.preApproveAsset transaction against Polymesh v8
11
+ * chain metadata. Identical behaviour to PreApproveAssetBuilder; only the
12
+ * material differs.
13
+ */
14
+ class V8PreApproveAssetBuilder extends preApproveAssetBuilder_1.PreApproveAssetBuilder {
15
+ constructor(_coinConfig) {
16
+ super(_coinConfig);
17
+ this.material(utils_1.default.getV8Material(_coinConfig.network.type));
18
+ }
19
+ }
20
+ exports.V8PreApproveAssetBuilder = V8PreApproveAssetBuilder;
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjhQcmVBcHByb3ZlQXNzZXRCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi92OFByZUFwcHJvdmVBc3NldEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EscUVBQWtFO0FBQ2xFLG9EQUE0QjtBQUU1Qjs7OztHQUlHO0FBQ0gsTUFBYSx3QkFBeUIsU0FBUSwrQ0FBc0I7SUFDbEUsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFLLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0NBQ0Y7QUFMRCw0REFLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBQcmVBcHByb3ZlQXNzZXRCdWlsZGVyIH0gZnJvbSAnLi9wcmVBcHByb3ZlQXNzZXRCdWlsZGVyJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBCdWlsZHMgYSBQb2x5bWVzaCBhc3NldC5wcmVBcHByb3ZlQXNzZXQgdHJhbnNhY3Rpb24gYWdhaW5zdCBQb2x5bWVzaCB2OFxuICogY2hhaW4gbWV0YWRhdGEuIElkZW50aWNhbCBiZWhhdmlvdXIgdG8gUHJlQXBwcm92ZUFzc2V0QnVpbGRlcjsgb25seSB0aGVcbiAqIG1hdGVyaWFsIGRpZmZlcnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBWOFByZUFwcHJvdmVBc3NldEJ1aWxkZXIgZXh0ZW5kcyBQcmVBcHByb3ZlQXNzZXRCdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMubWF0ZXJpYWwodXRpbHMuZ2V0VjhNYXRlcmlhbChfY29pbkNvbmZpZy5uZXR3b3JrLnR5cGUpKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,47 @@
1
+ import { PolyxBaseBuilder } from './baseBuilder';
2
+ import { DecodedSignedTx, DecodedSigningPayload, UnsignedTransaction } from '@substrate/txwrapper-core';
3
+ import { BaseCoin as CoinConfig } from '@bitgo/statics';
4
+ import { TransactionType, BaseAddress } from '@bitgo/sdk-core';
5
+ import { TxMethod } from './iface';
6
+ import { Transaction } from './transaction';
7
+ /**
8
+ * Builds a Polymesh identity.registerDid transaction (0x0718) — the v8 DID Registrar path.
9
+ * BitGo acts as a DID Registrar and signs with the platform key, same operational model as
10
+ * the v7 identity.cddRegisterDidWithCdd path (RegisterDidWithCDDBuilder): same signer, same
11
+ * HSM flow, only the extrinsic name/call index and initialized metadata differ.
12
+ *
13
+ * Unlike the v7 CDD path, registerDid takes only `targetAccount` — verified against the real
14
+ * testnetV8Material metadata (its call fields are `[target_account]` only). The migration plan's
15
+ * dry-run note claiming an identical {targetAccount, secondaryKeys, expiry} shape does not hold.
16
+ *
17
+ * Pre-condition (open question, see migration plan §6.2): BitGo's platform key must be
18
+ * permissioned on-chain as a DID Registrar before identity.registerDid is accepted.
19
+ */
20
+ export declare class V8RegisterDidBuilder extends PolyxBaseBuilder<TxMethod, Transaction> {
21
+ protected _to: string;
22
+ protected _method: TxMethod;
23
+ constructor(_coinConfig: Readonly<CoinConfig>);
24
+ protected get transactionType(): TransactionType;
25
+ protected buildTransaction(): UnsignedTransaction;
26
+ /**
27
+ *
28
+ * The destination address for transfer transaction.
29
+ *
30
+ * @param {string} dest
31
+ * @returns {V8RegisterDidBuilder} This register-did builder.
32
+ */
33
+ to({ address }: BaseAddress): this;
34
+ /** @inheritdoc */
35
+ protected fromImplementation(rawTransaction: string): Transaction;
36
+ /** @inheritdoc */
37
+ validateDecodedTransaction(decodedTxn: DecodedSigningPayload | DecodedSignedTx, rawTransaction?: string): void;
38
+ /**
39
+ * Construct a transaction to register a DID via the v8 DID Registrar path
40
+ *
41
+ * @param {RegisterDidArgs} args Arguments to be passed to the registerDid method
42
+ * @param {Interface.CreateBaseTxInfo} info Base txn info required to construct the DID registration txn
43
+ * @returns {UnsignedTransaction} an unsigned transaction for DID registration
44
+ */
45
+ private registerDid;
46
+ }
47
+ //# sourceMappingURL=v8RegisterDidBuilder.d.ts.map