@bitgo-beta/sdk-coin-dot 2.2.8-beta.166 → 2.2.8-beta.1660
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/dist/{src → cjs/src}/dot.d.ts +8 -19
- package/dist/cjs/src/dot.d.ts.map +1 -0
- package/dist/cjs/src/dot.js +623 -0
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/index.js +6 -2
- package/dist/cjs/src/lib/addressInitializationBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/addressInitializationBuilder.js +182 -0
- package/dist/{src → cjs/src}/lib/batchTransactionBuilder.d.ts +1 -0
- package/dist/cjs/src/lib/batchTransactionBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/batchTransactionBuilder.js +229 -0
- package/dist/cjs/src/lib/claimBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/claimBuilder.js +117 -0
- package/dist/cjs/src/lib/errors.d.ts.map +1 -0
- package/dist/cjs/src/lib/errors.js +19 -0
- package/dist/{src → cjs/src}/lib/iface.d.ts +16 -13
- package/dist/cjs/src/lib/iface.d.ts.map +1 -0
- package/dist/cjs/src/lib/iface.js +128 -0
- package/dist/cjs/src/lib/iface_utils.d.ts.map +1 -0
- package/dist/cjs/src/lib/iface_utils.js +92 -0
- package/dist/{src → cjs/src}/lib/index.d.ts +2 -0
- package/dist/cjs/src/lib/index.d.ts.map +1 -0
- package/dist/cjs/src/lib/index.js +73 -0
- package/dist/{src → cjs/src}/lib/keyPair.d.ts +7 -0
- package/dist/cjs/src/lib/keyPair.d.ts.map +1 -0
- package/dist/cjs/src/lib/keyPair.js +117 -0
- package/dist/cjs/src/lib/nativeTransferBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/nativeTransferBuilder.js +219 -0
- package/dist/cjs/src/lib/proxyBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/proxyBuilder.js +116 -0
- package/dist/cjs/src/lib/singletonRegistry.d.ts.map +1 -0
- package/dist/cjs/src/lib/singletonRegistry.js +20 -0
- package/dist/cjs/src/lib/stakingBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/stakingBuilder.js +167 -0
- package/dist/{src → cjs/src}/lib/transaction.d.ts +0 -1
- package/dist/cjs/src/lib/transaction.d.ts.map +1 -0
- package/dist/cjs/src/lib/transaction.js +624 -0
- package/dist/{src → cjs/src}/lib/transactionBuilder.d.ts +0 -1
- package/dist/cjs/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/transactionBuilder.js +351 -0
- package/dist/cjs/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/cjs/src/lib/transactionBuilderFactory.js +104 -0
- package/dist/cjs/src/lib/transferBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/transferBuilder.js +11 -0
- package/dist/cjs/src/lib/txnSchema.d.ts.map +1 -0
- package/dist/cjs/src/lib/txnSchema.js +117 -0
- package/dist/cjs/src/lib/unnominateBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/unnominateBuilder.js +48 -0
- package/dist/cjs/src/lib/unstakeBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/unstakeBuilder.js +87 -0
- package/dist/{src → cjs/src}/lib/utils.d.ts +10 -2
- package/dist/cjs/src/lib/utils.d.ts.map +1 -0
- package/dist/cjs/src/lib/utils.js +491 -0
- package/dist/cjs/src/lib/wasmParser.d.ts +57 -0
- package/dist/cjs/src/lib/wasmParser.d.ts.map +1 -0
- package/dist/cjs/src/lib/wasmParser.js +345 -0
- package/dist/cjs/src/lib/withdrawUnstakedBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/withdrawUnstakedBuilder.js +88 -0
- package/dist/cjs/src/register.d.ts.map +1 -0
- package/dist/cjs/src/register.js +11 -0
- package/dist/cjs/src/resources/index.d.ts +5 -0
- package/dist/cjs/src/resources/index.d.ts.map +1 -0
- package/dist/cjs/src/resources/index.js +21 -0
- package/dist/cjs/src/resources/mainnet.d.ts.map +1 -0
- package/dist/cjs/src/resources/mainnet.js +5 -0
- package/dist/cjs/src/resources/polkadotAssetHub.d.ts +2 -0
- package/dist/cjs/src/resources/polkadotAssetHub.d.ts.map +1 -0
- package/dist/cjs/src/resources/polkadotAssetHub.js +5 -0
- package/dist/cjs/src/resources/westend.d.ts.map +1 -0
- package/dist/cjs/src/resources/westend.js +5 -0
- package/dist/cjs/src/resources/westendAssetHub.d.ts +2 -0
- package/dist/cjs/src/resources/westendAssetHub.d.ts.map +1 -0
- package/dist/cjs/src/resources/westendAssetHub.js +5 -0
- package/dist/cjs/src/tdot.d.ts.map +1 -0
- package/dist/cjs/src/tdot.js +27 -0
- package/dist/cjs/test/fixtures.d.ts +283 -0
- package/dist/cjs/test/fixtures.d.ts.map +1 -0
- package/dist/cjs/test/fixtures.js +439 -0
- package/dist/cjs/test/resources/index.d.ts +141 -0
- package/dist/cjs/test/resources/index.d.ts.map +1 -0
- package/dist/cjs/test/resources/index.js +157 -0
- package/dist/cjs/test/resources/materialData.json +8 -0
- package/dist/cjs/test/resources/materialDataModified.json +8 -0
- package/dist/cjs/test/resources/testnet.d.ts +2 -0
- package/dist/cjs/test/resources/testnet.d.ts.map +1 -0
- package/dist/{src/resources/westend.js → cjs/test/resources/testnet.js} +3 -3
- package/dist/cjs/test/unit/address.d.ts +2 -0
- package/dist/cjs/test/unit/address.d.ts.map +1 -0
- package/dist/cjs/test/unit/address.js +45 -0
- package/dist/cjs/test/unit/dot.d.ts +2 -0
- package/dist/cjs/test/unit/dot.d.ts.map +1 -0
- package/dist/cjs/test/unit/dot.js +944 -0
- package/dist/cjs/test/unit/keypair.d.ts +2 -0
- package/dist/cjs/test/unit/keypair.d.ts.map +1 -0
- package/dist/cjs/test/unit/keypair.js +111 -0
- package/dist/cjs/test/unit/transaction.d.ts +2 -0
- package/dist/cjs/test/unit/transaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction.js +269 -0
- package/dist/cjs/test/unit/transactionBuilder/addressInitializationBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/addressInitializationBuilder.js +265 -0
- package/dist/cjs/test/unit/transactionBuilder/base.d.ts +8 -0
- package/dist/cjs/test/unit/transactionBuilder/base.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/base.js +233 -0
- package/dist/cjs/test/unit/transactionBuilder/batchTransactionBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/batchTransactionBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/batchTransactionBuilder.js +521 -0
- package/dist/cjs/test/unit/transactionBuilder/claimBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/claimBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/claimBuilder.js +129 -0
- package/dist/cjs/test/unit/transactionBuilder/proxyBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/proxyBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/proxyBuilder.js +88 -0
- package/dist/cjs/test/unit/transactionBuilder/singeltonRegistry.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/singeltonRegistry.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/singeltonRegistry.js +59 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingBuilder.js +235 -0
- package/dist/cjs/test/unit/transactionBuilder/transactionBuilderFactory.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/transactionBuilderFactory.js +107 -0
- package/dist/cjs/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/transferBuilder.js +437 -0
- package/dist/cjs/test/unit/transactionBuilder/unnominateBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/unnominateBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/unnominateBuilder.js +97 -0
- package/dist/cjs/test/unit/transactionBuilder/unstakeBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/unstakeBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/unstakeBuilder.js +116 -0
- package/dist/cjs/test/unit/transactionBuilder/withdrawUnstakedBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/withdrawUnstakedBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/withdrawUnstakedBuilder.js +115 -0
- package/dist/cjs/test/unit/utils.d.ts +2 -0
- package/dist/cjs/test/unit/utils.d.ts.map +1 -0
- package/dist/cjs/test/unit/utils.js +117 -0
- package/dist/cjs/test/unit/wasmBuilderByteComparison.d.ts +22 -0
- package/dist/cjs/test/unit/wasmBuilderByteComparison.d.ts.map +1 -0
- package/dist/cjs/test/unit/wasmBuilderByteComparison.js +197 -0
- package/dist/cjs/test/unit/wasmParserExplanation.d.ts +15 -0
- package/dist/cjs/test/unit/wasmParserExplanation.d.ts.map +1 -0
- package/dist/cjs/test/unit/wasmParserExplanation.js +147 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/dot.d.ts +147 -0
- package/dist/esm/dot.d.ts.map +1 -0
- package/dist/esm/dot.js +583 -0
- package/dist/esm/index.d.ts +5 -0
- package/dist/esm/index.js +5 -0
- package/dist/esm/lib/addressInitializationBuilder.d.ts +79 -0
- package/dist/esm/lib/addressInitializationBuilder.js +175 -0
- package/dist/esm/lib/batchTransactionBuilder.d.ts +62 -0
- package/dist/{src → esm}/lib/batchTransactionBuilder.d.ts.map +1 -1
- package/dist/esm/lib/batchTransactionBuilder.js +222 -0
- package/dist/esm/lib/claimBuilder.d.ts +58 -0
- package/dist/esm/lib/claimBuilder.js +110 -0
- package/dist/esm/lib/errors.d.ts +8 -0
- package/dist/esm/lib/errors.js +14 -0
- package/dist/esm/lib/iface.d.ts +337 -0
- package/dist/esm/lib/iface.d.ts.map +1 -0
- package/dist/esm/lib/iface.js +125 -0
- package/dist/esm/lib/iface_utils.d.ts +59 -0
- package/dist/esm/lib/iface_utils.js +83 -0
- package/dist/esm/lib/index.d.ts +21 -0
- package/dist/{src → esm}/lib/index.d.ts.map +1 -1
- package/dist/esm/lib/index.js +20 -0
- package/dist/esm/lib/keyPair.d.ts +38 -0
- package/dist/esm/lib/keyPair.d.ts.map +1 -0
- package/dist/esm/lib/keyPair.js +77 -0
- package/dist/esm/lib/nativeTransferBuilder.d.ts +84 -0
- package/dist/esm/lib/nativeTransferBuilder.js +212 -0
- package/dist/esm/lib/proxyBuilder.d.ts +54 -0
- package/dist/esm/lib/proxyBuilder.js +109 -0
- package/dist/esm/lib/singletonRegistry.d.ts +7 -0
- package/dist/esm/lib/singletonRegistry.js +16 -0
- package/dist/esm/lib/stakingBuilder.d.ts +66 -0
- package/dist/esm/lib/stakingBuilder.js +160 -0
- package/dist/esm/lib/transaction.d.ts +83 -0
- package/dist/esm/lib/transaction.d.ts.map +1 -0
- package/dist/esm/lib/transaction.js +584 -0
- package/dist/esm/lib/transactionBuilder.d.ts +131 -0
- package/dist/esm/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/esm/lib/transactionBuilder.js +311 -0
- package/dist/esm/lib/transactionBuilderFactory.d.ts +28 -0
- package/dist/esm/lib/transactionBuilderFactory.js +97 -0
- package/dist/esm/lib/transferBuilder.d.ts +11 -0
- package/dist/esm/lib/transferBuilder.js +7 -0
- package/dist/esm/lib/txnSchema.d.ts +15 -0
- package/dist/esm/lib/txnSchema.js +111 -0
- package/dist/esm/lib/unnominateBuilder.d.ts +24 -0
- package/dist/esm/lib/unnominateBuilder.js +44 -0
- package/dist/esm/lib/unstakeBuilder.d.ts +38 -0
- package/dist/esm/lib/unstakeBuilder.js +80 -0
- package/dist/esm/lib/utils.d.ts +261 -0
- package/dist/esm/lib/utils.d.ts.map +1 -0
- package/dist/esm/lib/utils.js +451 -0
- package/dist/esm/lib/wasmParser.d.ts +57 -0
- package/dist/esm/lib/wasmParser.d.ts.map +1 -0
- package/dist/esm/lib/wasmParser.js +341 -0
- package/dist/esm/lib/withdrawUnstakedBuilder.d.ts +38 -0
- package/dist/esm/lib/withdrawUnstakedBuilder.js +81 -0
- package/dist/esm/register.d.ts +3 -0
- package/dist/esm/register.js +7 -0
- package/dist/esm/resources/index.d.ts +5 -0
- package/dist/{src → esm}/resources/index.d.ts.map +1 -1
- package/dist/esm/resources/index.js +5 -0
- package/dist/esm/resources/mainnet.d.ts +2 -0
- package/dist/esm/resources/mainnet.js +2 -0
- package/dist/esm/resources/polkadotAssetHub.d.ts +2 -0
- package/dist/esm/resources/polkadotAssetHub.d.ts.map +1 -0
- package/dist/esm/resources/polkadotAssetHub.js +2 -0
- package/dist/esm/resources/westend.d.ts +2 -0
- package/dist/esm/resources/westend.js +2 -0
- package/dist/esm/resources/westendAssetHub.d.ts +2 -0
- package/dist/esm/resources/westendAssetHub.d.ts.map +1 -0
- package/dist/esm/resources/westendAssetHub.js +2 -0
- package/dist/esm/tdot.d.ts +12 -0
- package/dist/esm/tdot.js +23 -0
- package/package.json +42 -20
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -450
- package/dist/src/dot.d.ts.map +0 -1
- package/dist/src/dot.js +0 -562
- package/dist/src/lib/addressInitializationBuilder.js +0 -184
- package/dist/src/lib/batchTransactionBuilder.js +0 -220
- package/dist/src/lib/claimBuilder.js +0 -119
- package/dist/src/lib/errors.js +0 -19
- package/dist/src/lib/iface.d.ts.map +0 -1
- package/dist/src/lib/iface.js +0 -128
- package/dist/src/lib/iface_utils.js +0 -93
- package/dist/src/lib/index.js +0 -57
- package/dist/src/lib/keyPair.d.ts.map +0 -1
- package/dist/src/lib/keyPair.js +0 -70
- package/dist/src/lib/nativeTransferBuilder.js +0 -221
- package/dist/src/lib/proxyBuilder.js +0 -118
- package/dist/src/lib/singletonRegistry.js +0 -20
- package/dist/src/lib/stakingBuilder.js +0 -169
- package/dist/src/lib/transaction.d.ts.map +0 -1
- package/dist/src/lib/transaction.js +0 -590
- package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilder.js +0 -337
- package/dist/src/lib/transactionBuilderFactory.js +0 -105
- package/dist/src/lib/transferBuilder.js +0 -11
- package/dist/src/lib/txnSchema.js +0 -117
- package/dist/src/lib/unnominateBuilder.js +0 -50
- package/dist/src/lib/unstakeBuilder.js +0 -89
- package/dist/src/lib/utils.d.ts.map +0 -1
- package/dist/src/lib/utils.js +0 -458
- package/dist/src/lib/withdrawUnstakedBuilder.js +0 -90
- package/dist/src/register.js +0 -11
- package/dist/src/resources/index.d.ts +0 -3
- package/dist/src/resources/index.js +0 -15
- package/dist/src/resources/mainnet.js +0 -5
- package/dist/src/tdot.js +0 -27
- /package/dist/{src → cjs/src}/index.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/addressInitializationBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/claimBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/errors.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/iface_utils.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/nativeTransferBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/proxyBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/singletonRegistry.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/stakingBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/transactionBuilderFactory.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/transferBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/txnSchema.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/unnominateBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/unstakeBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/withdrawUnstakedBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/register.d.ts +0 -0
- /package/dist/{src → cjs/src}/resources/mainnet.d.ts +0 -0
- /package/dist/{src → cjs/src}/resources/westend.d.ts +0 -0
- /package/dist/{src → cjs/src}/tdot.d.ts +0 -0
- /package/dist/{src → esm}/index.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/addressInitializationBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/claimBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/errors.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/iface_utils.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/nativeTransferBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/proxyBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/singletonRegistry.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/stakingBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/transactionBuilderFactory.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/transferBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/txnSchema.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/unnominateBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/unstakeBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/withdrawUnstakedBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/register.d.ts.map +0 -0
- /package/dist/{src → esm}/resources/mainnet.d.ts.map +0 -0
- /package/dist/{src → esm}/resources/westend.d.ts.map +0 -0
- /package/dist/{src → esm}/tdot.d.ts.map +0 -0
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* WASM-based DOT transaction explanation.
|
|
4
|
+
*
|
|
5
|
+
* Built on @bitgo/wasm-dot's parseTransaction(). Derives transaction types,
|
|
6
|
+
* extracts outputs/inputs, and maps to BitGoJS TransactionExplanation format.
|
|
7
|
+
* This is BitGo-specific business logic that lives outside the wasm package.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.explainDotTransaction = explainDotTransaction;
|
|
11
|
+
exports.toJsonFromWasm = toJsonFromWasm;
|
|
12
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
13
|
+
const wasm_dot_1 = require("@bitgo/wasm-dot");
|
|
14
|
+
const MAX_NESTING_DEPTH = 10;
|
|
15
|
+
/**
|
|
16
|
+
* Display-only sentinel address for staking outputs (bond, bondExtra, unbond).
|
|
17
|
+
*
|
|
18
|
+
* Staking extrinsics don't transfer funds to an external address. The bonded DOT
|
|
19
|
+
* stays in the sender's account as "bonded balance". But the explanation format
|
|
20
|
+
* requires an output address, so we use this null address (SS58 encoding of 32
|
|
21
|
+
* zero bytes, substrate generic prefix 42) as a placeholder meaning "this amount
|
|
22
|
+
* went to staking". Same constant used by the legacy account-lib Transaction class.
|
|
23
|
+
*/
|
|
24
|
+
const STAKING_DESTINATION = '5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM';
|
|
25
|
+
/** Sentinel for transferAll: the actual amount is determined on-chain. */
|
|
26
|
+
const ALL = 'ALL';
|
|
27
|
+
// =============================================================================
|
|
28
|
+
// Main exports
|
|
29
|
+
// =============================================================================
|
|
30
|
+
/**
|
|
31
|
+
* Explain a DOT transaction using the WASM parser.
|
|
32
|
+
*
|
|
33
|
+
* Parses the transaction via WASM, derives the transaction type and
|
|
34
|
+
* outputs locally, then maps to BitGoJS TransactionExplanation format.
|
|
35
|
+
*/
|
|
36
|
+
function explainDotTransaction(params) {
|
|
37
|
+
const explained = buildExplanation(params);
|
|
38
|
+
const sender = explained.sender || params.senderAddress || '';
|
|
39
|
+
const methodName = `${explained.method.pallet}.${explained.method.name}`;
|
|
40
|
+
// Convert bigint to string at the serialization boundary
|
|
41
|
+
const outputs = explained.outputs.map((o) => ({
|
|
42
|
+
address: o.address,
|
|
43
|
+
amount: o.amount === ALL ? '0' : String(o.amount),
|
|
44
|
+
}));
|
|
45
|
+
const inputs = explained.inputs.map((i) => {
|
|
46
|
+
const valueStr = i.value === ALL ? ALL : String(i.value);
|
|
47
|
+
const value = i.value === ALL ? 0 : Number(i.value);
|
|
48
|
+
return { address: i.address, value, valueString: valueStr };
|
|
49
|
+
});
|
|
50
|
+
return {
|
|
51
|
+
displayOrder: ['outputAmount', 'changeAmount', 'outputs', 'changeOutputs', 'fee', 'type', 'sequenceId', 'id'],
|
|
52
|
+
id: explained.id || '',
|
|
53
|
+
outputs,
|
|
54
|
+
outputAmount: String(explained.outputAmount),
|
|
55
|
+
changeOutputs: [],
|
|
56
|
+
changeAmount: '0',
|
|
57
|
+
fee: { fee: explained.tip ? String(explained.tip) : '0', type: 'tip' },
|
|
58
|
+
type: explained.type,
|
|
59
|
+
sender,
|
|
60
|
+
nonce: explained.nonce,
|
|
61
|
+
isSigned: explained.isSigned,
|
|
62
|
+
methodName,
|
|
63
|
+
inputs,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Produce a TxData object using WASM parsing instead of the JS txwrapper.
|
|
68
|
+
*
|
|
69
|
+
* This replaces the legacy `toJson()` path for chains where WASM parsing is enabled.
|
|
70
|
+
* The WASM parser decodes the extrinsic bytes (with metadata-aware signed extension handling),
|
|
71
|
+
* and this function maps the result to the TxData interface that consumers expect.
|
|
72
|
+
*/
|
|
73
|
+
function toJsonFromWasm(params) {
|
|
74
|
+
const explained = buildExplanation(params);
|
|
75
|
+
const type = explained.type;
|
|
76
|
+
const method = explained.method;
|
|
77
|
+
const args = method.args;
|
|
78
|
+
const result = {
|
|
79
|
+
id: explained.id || '',
|
|
80
|
+
sender: explained.sender || params.senderAddress,
|
|
81
|
+
referenceBlock: params.referenceBlock || '',
|
|
82
|
+
blockNumber: params.blockNumber || 0,
|
|
83
|
+
genesisHash: params.material.genesisHash || '',
|
|
84
|
+
nonce: explained.nonce,
|
|
85
|
+
specVersion: params.material.specVersion || 0,
|
|
86
|
+
transactionVersion: params.material.txVersion || 0,
|
|
87
|
+
chainName: params.material.chainName || '',
|
|
88
|
+
tip: Number(explained.tip) || 0,
|
|
89
|
+
eraPeriod: explained.era.type === 'mortal' ? explained.era.period : 0,
|
|
90
|
+
};
|
|
91
|
+
if (type === sdk_core_1.TransactionType.Send) {
|
|
92
|
+
populateSendFields(result, method, args);
|
|
93
|
+
}
|
|
94
|
+
else if (type === sdk_core_1.TransactionType.StakingActivate) {
|
|
95
|
+
populateStakingActivateFields(result, method, args, params.senderAddress);
|
|
96
|
+
}
|
|
97
|
+
else if (type === sdk_core_1.TransactionType.StakingUnlock) {
|
|
98
|
+
result.amount = String(args.value ?? '');
|
|
99
|
+
}
|
|
100
|
+
else if (type === sdk_core_1.TransactionType.StakingWithdraw) {
|
|
101
|
+
result.numSlashingSpans = Number(args.numSlashingSpans ?? 0);
|
|
102
|
+
}
|
|
103
|
+
else if (type === sdk_core_1.TransactionType.StakingClaim) {
|
|
104
|
+
result.validatorStash = String(args.validatorStash ?? '');
|
|
105
|
+
result.claimEra = String(args.era ?? '');
|
|
106
|
+
}
|
|
107
|
+
else if (type === sdk_core_1.TransactionType.AddressInitialization) {
|
|
108
|
+
populateAddressInitFields(result, method, args);
|
|
109
|
+
}
|
|
110
|
+
else if (type === sdk_core_1.TransactionType.Batch) {
|
|
111
|
+
result.batchCalls = mapBatchCalls(args.calls);
|
|
112
|
+
}
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
function buildExplanation(params) {
|
|
116
|
+
const tx = wasm_dot_1.DotTransaction.fromHex(params.txHex, params.material);
|
|
117
|
+
const context = {
|
|
118
|
+
material: params.material,
|
|
119
|
+
sender: params.senderAddress,
|
|
120
|
+
referenceBlock: params.referenceBlock,
|
|
121
|
+
blockNumber: params.blockNumber,
|
|
122
|
+
};
|
|
123
|
+
const parsed = (0, wasm_dot_1.parseTransaction)(tx, context);
|
|
124
|
+
const sender = parsed.sender ?? params.senderAddress;
|
|
125
|
+
const analysis = analyzeMethod(parsed.method, sender, params.material.metadata);
|
|
126
|
+
// Use explicit inputs from analysis if provided (e.g., unstake batch where
|
|
127
|
+
// the input source is the proxy address, not the sender). Otherwise, mirror
|
|
128
|
+
// outputs with sender as the default input source.
|
|
129
|
+
const inputs = analysis.inputs ?? (sender ? analysis.outputs.map((o) => ({ address: sender, value: o.amount })) : []);
|
|
130
|
+
const outputAmount = analysis.outputs.reduce((sum, o) => {
|
|
131
|
+
if (o.amount === ALL)
|
|
132
|
+
return sum;
|
|
133
|
+
return sum + o.amount;
|
|
134
|
+
}, 0n);
|
|
135
|
+
return {
|
|
136
|
+
type: analysis.type,
|
|
137
|
+
id: parsed.id ?? undefined,
|
|
138
|
+
sender: parsed.sender ?? undefined,
|
|
139
|
+
outputs: analysis.outputs,
|
|
140
|
+
inputs,
|
|
141
|
+
outputAmount,
|
|
142
|
+
tip: BigInt(parsed.tip || '0'),
|
|
143
|
+
era: parsed.era,
|
|
144
|
+
method: parsed.method,
|
|
145
|
+
isSigned: parsed.isSigned,
|
|
146
|
+
nonce: parsed.nonce,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Analyze a parsed method to determine its transaction type and extract outputs.
|
|
151
|
+
*
|
|
152
|
+
* This is a single switch that handles both concerns together, preventing them
|
|
153
|
+
* from getting out of sync. Every case that sets a type also sets the outputs
|
|
154
|
+
* for that type.
|
|
155
|
+
*/
|
|
156
|
+
function analyzeMethod(method, senderAddress, metadataHex) {
|
|
157
|
+
return analyzeMethodInner(method, senderAddress, metadataHex, 0);
|
|
158
|
+
}
|
|
159
|
+
function analyzeMethodInner(method, senderAddress, metadataHex, depth) {
|
|
160
|
+
const key = `${method.pallet}.${method.name}`;
|
|
161
|
+
const args = (method.args ?? {});
|
|
162
|
+
switch (key) {
|
|
163
|
+
// --- Transfers ---
|
|
164
|
+
case 'balances.transfer':
|
|
165
|
+
case 'balances.transferKeepAlive':
|
|
166
|
+
case 'balances.transferAllowDeath':
|
|
167
|
+
return {
|
|
168
|
+
type: sdk_core_1.TransactionType.Send,
|
|
169
|
+
outputs: [{ address: String(args.dest ?? ''), amount: BigInt(args.value ?? '0') }],
|
|
170
|
+
};
|
|
171
|
+
case 'balances.transferAll':
|
|
172
|
+
return {
|
|
173
|
+
type: sdk_core_1.TransactionType.Send,
|
|
174
|
+
outputs: [{ address: String(args.dest ?? ''), amount: ALL }],
|
|
175
|
+
};
|
|
176
|
+
// --- Staking ---
|
|
177
|
+
case 'staking.bond':
|
|
178
|
+
case 'staking.bondExtra':
|
|
179
|
+
return {
|
|
180
|
+
type: sdk_core_1.TransactionType.StakingActivate,
|
|
181
|
+
outputs: [{ address: STAKING_DESTINATION, amount: BigInt(args.value ?? '0') }],
|
|
182
|
+
};
|
|
183
|
+
case 'staking.unbond':
|
|
184
|
+
// Empty outputs: unbond unlocks DOT (no external spend). Matches legacy Transaction class
|
|
185
|
+
// behavior where decodeInputsAndOutputsForUnbond() returns []. Bond/bondExtra keep the
|
|
186
|
+
// sentinel because they represent actual balance locks visible to policy evaluation.
|
|
187
|
+
return { type: sdk_core_1.TransactionType.StakingUnlock, outputs: [] };
|
|
188
|
+
case 'staking.withdrawUnbonded':
|
|
189
|
+
return { type: sdk_core_1.TransactionType.StakingWithdraw, outputs: [] };
|
|
190
|
+
case 'staking.chill':
|
|
191
|
+
return { type: sdk_core_1.TransactionType.StakingUnvote, outputs: [] };
|
|
192
|
+
case 'staking.payoutStakers':
|
|
193
|
+
return { type: sdk_core_1.TransactionType.StakingClaim, outputs: [] };
|
|
194
|
+
// --- Proxy ---
|
|
195
|
+
case 'proxy.addProxy':
|
|
196
|
+
case 'proxy.removeProxy':
|
|
197
|
+
case 'proxy.createPure':
|
|
198
|
+
return { type: sdk_core_1.TransactionType.AddressInitialization, outputs: [] };
|
|
199
|
+
// --- Proxy-wrapped call ---
|
|
200
|
+
case 'proxy.proxy': {
|
|
201
|
+
if (depth >= MAX_NESTING_DEPTH)
|
|
202
|
+
return { type: sdk_core_1.TransactionType.Send, outputs: [] };
|
|
203
|
+
const call = args.call;
|
|
204
|
+
if (call?.pallet && call?.name)
|
|
205
|
+
return analyzeMethodInner(call, senderAddress, metadataHex, depth + 1);
|
|
206
|
+
return { type: sdk_core_1.TransactionType.Send, outputs: [] };
|
|
207
|
+
}
|
|
208
|
+
// --- Batch ---
|
|
209
|
+
case 'utility.batch':
|
|
210
|
+
case 'utility.batchAll':
|
|
211
|
+
return analyzeBatch(args, senderAddress, metadataHex, depth);
|
|
212
|
+
default:
|
|
213
|
+
return { type: sdk_core_1.TransactionType.Send, outputs: [] };
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Analyze a batch transaction.
|
|
218
|
+
*
|
|
219
|
+
* Detects known proxy batch patterns (stake: bond+addProxy, unstake:
|
|
220
|
+
* removeProxy+chill+unbond) and handles proxy deposit cost. For unrecognized
|
|
221
|
+
* batch patterns, recursively extracts outputs from each inner call.
|
|
222
|
+
*/
|
|
223
|
+
function analyzeBatch(args, senderAddress, metadataHex, depth) {
|
|
224
|
+
const calls = (args.calls ?? []);
|
|
225
|
+
if (calls.length === 0)
|
|
226
|
+
return { type: sdk_core_1.TransactionType.Batch, outputs: [] };
|
|
227
|
+
const callKeys = calls.map((c) => `${c.pallet}.${c.name}`);
|
|
228
|
+
// Staking batch: bond + addProxy (2 calls)
|
|
229
|
+
if (calls.length === 2 && callKeys[0] === 'staking.bond' && callKeys[1] === 'proxy.addProxy') {
|
|
230
|
+
const bondArgs = (calls[0].args ?? {});
|
|
231
|
+
const addProxyArgs = (calls[1].args ?? {});
|
|
232
|
+
const bondAmount = BigInt(bondArgs.value ?? '0');
|
|
233
|
+
const proxyAddress = String(addProxyArgs.delegate ?? '');
|
|
234
|
+
const proxyDepositCost = metadataHex ? (0, wasm_dot_1.getProxyDepositCost)(metadataHex) : 0n;
|
|
235
|
+
return {
|
|
236
|
+
type: sdk_core_1.TransactionType.Batch,
|
|
237
|
+
outputs: [
|
|
238
|
+
{ address: STAKING_DESTINATION, amount: bondAmount },
|
|
239
|
+
{ address: proxyAddress, amount: proxyDepositCost },
|
|
240
|
+
],
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
// Unstaking batch: removeProxy + chill + unbond (3 calls)
|
|
244
|
+
// Input source is the proxy address (deposit refund), not the sender.
|
|
245
|
+
if (calls.length === 3 &&
|
|
246
|
+
callKeys[0] === 'proxy.removeProxy' &&
|
|
247
|
+
callKeys[1] === 'staking.chill' &&
|
|
248
|
+
callKeys[2] === 'staking.unbond') {
|
|
249
|
+
const removeProxyArgs = (calls[0].args ?? {});
|
|
250
|
+
const proxyAddress = String(removeProxyArgs.delegate ?? '');
|
|
251
|
+
const proxyDepositCost = metadataHex ? (0, wasm_dot_1.getProxyDepositCost)(metadataHex) : 0n;
|
|
252
|
+
const outputs = senderAddress ? [{ address: senderAddress, amount: proxyDepositCost }] : [];
|
|
253
|
+
const inputs = [{ address: proxyAddress, value: proxyDepositCost }];
|
|
254
|
+
return { type: sdk_core_1.TransactionType.Batch, outputs, inputs };
|
|
255
|
+
}
|
|
256
|
+
// Generic batch: recursively extract outputs from each inner call
|
|
257
|
+
if (depth >= MAX_NESTING_DEPTH)
|
|
258
|
+
return { type: sdk_core_1.TransactionType.Batch, outputs: [] };
|
|
259
|
+
const outputs = calls
|
|
260
|
+
.filter((c) => c?.pallet && c?.name)
|
|
261
|
+
.flatMap((c) => analyzeMethodInner(c, senderAddress, metadataHex, depth + 1).outputs);
|
|
262
|
+
return { type: sdk_core_1.TransactionType.Batch, outputs };
|
|
263
|
+
}
|
|
264
|
+
// =============================================================================
|
|
265
|
+
// Helpers
|
|
266
|
+
// =============================================================================
|
|
267
|
+
function populateSendFields(result, method, args) {
|
|
268
|
+
const key = `${method.pallet}.${method.name}`;
|
|
269
|
+
if (key === 'proxy.proxy') {
|
|
270
|
+
// Proxy-wrapped transfer
|
|
271
|
+
const innerCall = args.call;
|
|
272
|
+
result.owner = String(args.real ?? '');
|
|
273
|
+
result.forceProxyType = args.forceProxyType ?? undefined;
|
|
274
|
+
if (innerCall?.args) {
|
|
275
|
+
const innerArgs = innerCall.args;
|
|
276
|
+
result.to = String(innerArgs.dest ?? '');
|
|
277
|
+
result.amount = String(innerArgs.value ?? '');
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
else if (key === 'balances.transferAll') {
|
|
281
|
+
result.to = String(args.dest ?? '');
|
|
282
|
+
result.keepAlive = Boolean(args.keepAlive);
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
// transfer, transferKeepAlive, transferAllowDeath
|
|
286
|
+
result.to = String(args.dest ?? '');
|
|
287
|
+
result.amount = String(args.value ?? '');
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
function populateStakingActivateFields(result, method, args, senderAddress) {
|
|
291
|
+
if (method.name === 'bondExtra') {
|
|
292
|
+
result.amount = String(args.value ?? '');
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
// bond
|
|
296
|
+
result.controller = senderAddress;
|
|
297
|
+
result.amount = String(args.value ?? '');
|
|
298
|
+
result.payee = String(args.payee ?? '');
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
function populateAddressInitFields(result, method, args) {
|
|
302
|
+
const key = `${method.pallet}.${method.name}`;
|
|
303
|
+
result.method = key;
|
|
304
|
+
result.proxyType = String(args.proxy_type ?? '');
|
|
305
|
+
result.delay = String(args.delay ?? '');
|
|
306
|
+
if (key === 'proxy.createPure') {
|
|
307
|
+
result.index = String(args.index ?? '');
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
// addProxy, removeProxy
|
|
311
|
+
result.owner = String(args.delegate ?? '');
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
function mapBatchCalls(calls) {
|
|
315
|
+
if (!calls)
|
|
316
|
+
return [];
|
|
317
|
+
return calls.map((call) => ({
|
|
318
|
+
callIndex: `0x${call.palletIndex.toString(16).padStart(2, '0')}${call.methodIndex.toString(16).padStart(2, '0')}`,
|
|
319
|
+
args: transformBatchCallArgs((call.args ?? {})),
|
|
320
|
+
}));
|
|
321
|
+
}
|
|
322
|
+
/** Transform WASM-decoded batch call args to match the Polkadot.js format that consumers expect */
|
|
323
|
+
function transformBatchCallArgs(args) {
|
|
324
|
+
const result = {};
|
|
325
|
+
for (const [key, value] of Object.entries(args)) {
|
|
326
|
+
if (key === 'delegate' && typeof value === 'string') {
|
|
327
|
+
// MultiAddress Id variant: string -> { id: string }
|
|
328
|
+
result[key] = { id: value };
|
|
329
|
+
}
|
|
330
|
+
else if (key === 'value' && typeof value === 'string') {
|
|
331
|
+
// Compact u128: string -> number (matches Polkadot.js behavior)
|
|
332
|
+
result[key] = Number(value);
|
|
333
|
+
}
|
|
334
|
+
else if (key === 'payee' && typeof value === 'string') {
|
|
335
|
+
// Enum unit variant: "Staked" -> { staked: null }
|
|
336
|
+
const variantName = value.charAt(0).toLowerCase() + value.slice(1);
|
|
337
|
+
result[key] = { [variantName]: null };
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
result[key] = value;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
return result;
|
|
344
|
+
}
|
|
345
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FzbVBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvd2FzbVBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOztBQXlFSCxzREFpQ0M7QUFTRCx3Q0FzQ0M7QUF2SkQsbURBQXVEO0FBQ3ZELDhDQUFxSDtBQUdySCxNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztBQUU3Qjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsa0RBQWtELENBQUM7QUFFL0UsMEVBQTBFO0FBQzFFLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQztBQTJDbEIsZ0ZBQWdGO0FBQ2hGLGVBQWU7QUFDZixnRkFBZ0Y7QUFFaEY7Ozs7O0dBS0c7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxNQUFtQztJQUN2RSxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUUzQyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDO0lBQzlELE1BQU0sVUFBVSxHQUFHLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUV6RSx5REFBeUQ7SUFDekQsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPO1FBQ2xCLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztLQUNsRCxDQUFDLENBQUMsQ0FBQztJQUVKLE1BQU0sTUFBTSxHQUFlLFNBQVMsQ0FBQyxNQUFNLENB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QyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2hELElBQUksR0FBRyxLQUFLLFVBQVUsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNwRCxvREFBb0Q7WUFDcEQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQzlCLENBQUM7YUFBTSxJQUFJLEdBQUcsS0FBSyxPQUFPLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDeEQsZ0VBQWdFO1lBQ2hFLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsQ0FBQzthQUFNLElBQUksR0FBRyxLQUFLLE9BQU8sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN4RCxrREFBa0Q7WUFDbEQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25FLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDeEMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV0FTTS1iYXNlZCBET1QgdHJhbnNhY3Rpb24gZXhwbGFuYXRpb24uXG4gKlxuICogQnVpbHQgb24gQGJpdGdvL3dhc20tZG90J3MgcGFyc2VUcmFuc2FjdGlvbigpLiBEZXJpdmVzIHRyYW5zYWN0aW9uIHR5cGVzLFxuICogZXh0cmFjdHMgb3V0cHV0cy9pbnB1dHMsIGFuZCBtYXBzIHRvIEJpdEdvSlMgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiBmb3JtYXQuXG4gKiBUaGlzIGlzIEJpdEdvLXNwZWNpZmljIGJ1c2luZXNzIGxvZ2ljIHRoYXQgbGl2ZXMgb3V0c2lkZSB0aGUgd2FzbSBwYWNrYWdlLlxuICovXG5cbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IERvdFRyYW5zYWN0aW9uLCBwYXJzZVRyYW5zYWN0aW9uLCBnZXRQcm94eURlcG9zaXRDb3N0LCB0eXBlIFBhcnNlZE1ldGhvZCwgdHlwZSBFcmEgfSBmcm9tICdAYml0Z28vd2FzbS1kb3QnO1xuaW1wb3J0IHR5cGUgeyBCYXRjaENhbGxPYmplY3QsIFByb3h5VHlwZSwgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiwgTWF0ZXJpYWwsIFR4RGF0YSB9IGZyb20gJy4vaWZhY2UnO1xuXG5jb25zdCBNQVhfTkVTVElOR19ERVBUSCA9IDEwO1xuXG4vKipcbiAqIERpc3BsYXktb25seSBzZW50aW5lbCBhZGRyZXNzIGZvciBzdGFraW5nIG91dHB1dHMgKGJvbmQsIGJvbmRFeHRyYSwgdW5ib25kKS5cbiAqXG4gKiBTdGFraW5nIGV4dHJpbnNpY3MgZG9uJ3QgdHJhbnNmZXIgZnVuZHMgdG8gYW4gZXh0ZXJuYWwgYWRkcmVzcy4gVGhlIGJvbmRlZCBET1RcbiAqIHN0YXlzIGluIHRoZSBzZW5kZXIncyBhY2NvdW50IGFzIFwiYm9uZGVkIGJhbGFuY2VcIi4gQnV0IHRoZSBleHBsYW5hdGlvbiBmb3JtYXRcbiAqIHJlcXVpcmVzIGFuIG91dHB1dCBhZGRyZXNzLCBzbyB3ZSB1c2UgdGhpcyBudWxsIGFkZHJlc3MgKFNTNTggZW5jb2Rpbmcgb2YgMzJcbiAqIHplcm8gYnl0ZXMsIHN1YnN0cmF0ZSBnZW5lcmljIHByZWZpeCA0MikgYXMgYSBwbGFjZWhvbGRlciBtZWFuaW5nIFwidGhpcyBhbW91bnRcbiAqIHdlbnQgdG8gc3Rha2luZ1wiLiBTYW1lIGNvbnN0YW50IHVzZWQgYnkgdGhlIGxlZ2FjeSBhY2NvdW50LWxpYiBUcmFuc2FjdGlvbiBjbGFzcy5cbiAqL1xuY29uc3QgU1RBS0lOR19ERVNUSU5BVElPTiA9ICc1QzRocmZqdzlEalhaVHpWM013enJyQXI5UDFNSmhTcnZXR1dxaTFlU3V5VXBuaE0nO1xuXG4vKiogU2VudGluZWwgZm9yIHRyYW5zZmVyQWxsOiB0aGUgYWN0dWFsIGFtb3VudCBpcyBkZXRlcm1pbmVkIG9uLWNoYWluLiAqL1xuY29uc3QgQUxMID0gJ0FMTCc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBQdWJsaWMgdHlwZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogSW5wdXQgZW50cnkgZm9yIGEgRE9UIHRyYW5zYWN0aW9uLlxuICogRm9yIGFjY291bnQtbW9kZWwgY2hhaW5zLCB0aGVyZSdzIHR5cGljYWxseSBvbmUgaW5wdXQgKHRoZSBzZW5kZXIpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERvdElucHV0IHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyO1xuICB2YWx1ZVN0cmluZzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV4dGVuZGVkIGV4cGxhbmF0aW9uIHJldHVybmVkIGJ5IFdBU00tYmFzZWQgcGFyc2luZy5cbiAqIEluY2x1ZGVzIGZpZWxkcyBuZWVkZWQgYnkgd2FsbGV0LXBsYXRmb3JtIHRoYXQgYXJlbid0IGluIHRoZSBiYXNlIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG90V2FzbUV4cGxhbmF0aW9uIGV4dGVuZHMgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gIHNlbmRlcjogc3RyaW5nO1xuICBub25jZTogbnVtYmVyO1xuICBpc1NpZ25lZDogYm9vbGVhbjtcbiAgbWV0aG9kTmFtZTogc3RyaW5nO1xuICBpbnB1dHM6IERvdElucHV0W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwbGFpbkRvdFRyYW5zYWN0aW9uUGFyYW1zIHtcbiAgdHhIZXg6IHN0cmluZztcbiAgbWF0ZXJpYWw6IE1hdGVyaWFsO1xuICBzZW5kZXJBZGRyZXNzPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRvSnNvbkZyb21XYXNtUGFyYW1zIHtcbiAgdHhIZXg6IHN0cmluZztcbiAgbWF0ZXJpYWw6IE1hdGVyaWFsO1xuICBzZW5kZXJBZGRyZXNzOiBzdHJpbmc7XG4gIGNvaW5Db25maWdOYW1lOiBzdHJpbmc7XG4gIHJlZmVyZW5jZUJsb2NrPzogc3RyaW5nO1xuICBibG9ja051bWJlcj86IG51bWJlcjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE1haW4gZXhwb3J0c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBFeHBsYWluIGEgRE9UIHRyYW5zYWN0aW9uIHVzaW5nIHRoZSBXQVNNIHBhcnNlci5cbiAqXG4gKiBQYXJzZXMgdGhlIHRyYW5zYWN0aW9uIHZpYSBXQVNNLCBkZXJpdmVzIHRoZSB0cmFuc2FjdGlvbiB0eXBlIGFuZFxuICogb3V0cHV0cyBsb2NhbGx5LCB0aGVuIG1hcHMgdG8gQml0R29KUyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGZvcm1hdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGxhaW5Eb3RUcmFuc2FjdGlvbihwYXJhbXM6IEV4cGxhaW5Eb3RUcmFuc2FjdGlvblBhcmFtcyk6IERvdFdhc21FeHBsYW5hdGlvbiB7XG4gIGNvbnN0IGV4cGxhaW5lZCA9IGJ1aWxkRXhwbGFuYXRpb24ocGFyYW1zKTtcblxuICBjb25zdCBzZW5kZXIgPSBleHBsYWluZWQuc2VuZGVyIHx8IHBhcmFtcy5zZW5kZXJBZGRyZXNzIHx8ICcnO1xuICBjb25zdCBtZXRob2ROYW1lID0gYCR7ZXhwbGFpbmVkLm1ldGhvZC5wYWxsZXR9LiR7ZXhwbGFpbmVkLm1ldGhvZC5uYW1lfWA7XG5cbiAgLy8gQ29udmVydCBiaWdpbnQgdG8gc3RyaW5nIGF0IHRoZSBzZXJpYWxpemF0aW9uIGJvdW5kYXJ5XG4gIGNvbnN0IG91dHB1dHMgPSBleHBsYWluZWQub3V0cHV0cy5tYXAoKG8pID0+ICh7XG4gICAgYWRkcmVzczogby5hZGRyZXNzLFxuICAgIGFtb3VudDogby5hbW91bnQgPT09IEFMTCA/ICcwJyA6IFN0cmluZyhvLmFtb3VudCksXG4gIH0pKTtcblxuICBjb25zdCBpbnB1dHM6IERvdElucHV0W10gPSBleHBsYWluZWQuaW5wdXRzLm1hcCgoaSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlU3RyID0gaS52YWx1ZSA9PT0gQUxMID8gQUxMIDogU3RyaW5nKGkudmFsdWUpO1xuICAgIGNvbnN0IHZhbHVlID0gaS52YWx1ZSA9PT0gQUxMID8gMCA6IE51bWJlcihpLnZhbHVlKTtcbiAgICByZXR1cm4geyBhZGRyZXNzOiBpLmFkZHJlc3MsIHZhbHVlLCB2YWx1ZVN0cmluZzogdmFsdWVTdHIgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBkaXNwbGF5T3JkZXI6IFsnb3V0cHV0QW1vdW50JywgJ2NoYW5nZUFtb3VudCcsICdvdXRwdXRzJywgJ2NoYW5nZU91dHB1dHMnLCAnZmVlJywgJ3R5cGUnLCAnc2VxdWVuY2VJZCcsICdpZCddLFxuICAgIGlkOiBleHBsYWluZWQuaWQgfHwgJycsXG4gICAgb3V0cHV0cyxcbiAgICBvdXRwdXRBbW91bnQ6IFN0cmluZyhleHBsYWluZWQub3V0cHV0QW1vdW50KSxcbiAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICBmZWU6IHsgZmVlOiBleHBsYWluZWQudGlwID8gU3RyaW5nKGV4cGxhaW5lZC50aXApIDogJzAnLCB0eXBlOiAndGlwJyB9LFxuICAgIHR5cGU6IGV4cGxhaW5lZC50eXBlLFxuICAgIHNlbmRlcixcbiAgICBub25jZTogZXhwbGFpbmVkLm5vbmNlLFxuICAgIGlzU2lnbmVkOiBleHBsYWluZWQuaXNTaWduZWQsXG4gICAgbWV0aG9kTmFtZSxcbiAgICBpbnB1dHMsXG4gIH07XG59XG5cbi8qKlxuICogUHJvZHVjZSBhIFR4RGF0YSBvYmplY3QgdXNpbmcgV0FTTSBwYXJzaW5nIGluc3RlYWQgb2YgdGhlIEpTIHR4d3JhcHBlci5cbiAqXG4gKiBUaGlzIHJlcGxhY2VzIHRoZSBsZWdhY3kgYHRvSnNvbigpYCBwYXRoIGZvciBjaGFpbnMgd2hlcmUgV0FTTSBwYXJzaW5nIGlzIGVuYWJsZWQuXG4gKiBUaGUgV0FTTSBwYXJzZXIgZGVjb2RlcyB0aGUgZXh0cmluc2ljIGJ5dGVzICh3aXRoIG1ldGFkYXRhLWF3YXJlIHNpZ25lZCBleHRlbnNpb24gaGFuZGxpbmcpLFxuICogYW5kIHRoaXMgZnVuY3Rpb24gbWFwcyB0aGUgcmVzdWx0IHRvIHRoZSBUeERhdGEgaW50ZXJmYWNlIHRoYXQgY29uc3VtZXJzIGV4cGVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbkZyb21XYXNtKHBhcmFtczogVG9Kc29uRnJvbVdhc21QYXJhbXMpOiBUeERhdGEge1xuICBjb25zdCBleHBsYWluZWQgPSBidWlsZEV4cGxhbmF0aW9uKHBhcmFtcyk7XG4gIGNvbnN0IHR5cGUgPSBleHBsYWluZWQudHlwZTtcbiAgY29uc3QgbWV0aG9kID0gZXhwbGFpbmVkLm1ldGhvZDtcbiAgY29uc3QgYXJncyA9IG1ldGhvZC5hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIGNvbnN0IHJlc3VsdDogVHhEYXRhID0ge1xuICAgIGlkOiBleHBsYWluZWQuaWQgfHwgJycsXG4gICAgc2VuZGVyOiBleHBsYWluZWQuc2VuZGVyIHx8IHBhcmFtcy5zZW5kZXJBZGRyZXNzLFxuICAgIHJlZmVyZW5jZUJsb2NrOiBwYXJhbXMucmVmZXJlbmNlQmxvY2sgfHwgJycsXG4gICAgYmxvY2tOdW1iZXI6IHBhcmFtcy5ibG9ja051bWJlciB8fCAwLFxuICAgIGdlbmVzaXNIYXNoOiBwYXJhbXMubWF0ZXJpYWwuZ2VuZXNpc0hhc2ggfHwgJycsXG4gICAgbm9uY2U6IGV4cGxhaW5lZC5ub25jZSxcbiAgICBzcGVjVmVyc2lvbjogcGFyYW1zLm1hdGVyaWFsLnNwZWNWZXJzaW9uIHx8IDAsXG4gICAgdHJhbnNhY3Rpb25WZXJzaW9uOiBwYXJhbXMubWF0ZXJpYWwudHhWZXJzaW9uIHx8IDAsXG4gICAgY2hhaW5OYW1lOiBwYXJhbXMubWF0ZXJpYWwuY2hhaW5OYW1lIHx8ICcnLFxuICAgIHRpcDogTnVtYmVyKGV4cGxhaW5lZC50aXApIHx8IDAsXG4gICAgZXJhUGVyaW9kOiBleHBsYWluZWQuZXJhLnR5cGUgPT09ICdtb3J0YWwnID8gKGV4cGxhaW5lZC5lcmEgYXMgeyBwZXJpb2Q6IG51bWJlciB9KS5wZXJpb2QgOiAwLFxuICB9O1xuXG4gIGlmICh0eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU2VuZCkge1xuICAgIHBvcHVsYXRlU2VuZEZpZWxkcyhyZXN1bHQsIG1ldGhvZCwgYXJncyk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZSkge1xuICAgIHBvcHVsYXRlU3Rha2luZ0FjdGl2YXRlRmllbGRzKHJlc3VsdCwgbWV0aG9kLCBhcmdzLCBwYXJhbXMuc2VuZGVyQWRkcmVzcyk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdVbmxvY2spIHtcbiAgICByZXN1bHQuYW1vdW50ID0gU3RyaW5nKGFyZ3MudmFsdWUgPz8gJycpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXcpIHtcbiAgICByZXN1bHQubnVtU2xhc2hpbmdTcGFucyA9IE51bWJlcihhcmdzLm51bVNsYXNoaW5nU3BhbnMgPz8gMCk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdDbGFpbSkge1xuICAgIHJlc3VsdC52YWxpZGF0b3JTdGFzaCA9IFN0cmluZyhhcmdzLnZhbGlkYXRvclN0YXNoID8/ICcnKTtcbiAgICByZXN1bHQuY2xhaW1FcmEgPSBTdHJpbmcoYXJncy5lcmEgPz8gJycpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5BZGRyZXNzSW5pdGlhbGl6YXRpb24pIHtcbiAgICBwb3B1bGF0ZUFkZHJlc3NJbml0RmllbGRzKHJlc3VsdCwgbWV0aG9kLCBhcmdzKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBUcmFuc2FjdGlvblR5cGUuQmF0Y2gpIHtcbiAgICByZXN1bHQuYmF0Y2hDYWxscyA9IG1hcEJhdGNoQ2FsbHMoYXJncy5jYWxscyBhcyBQYXJzZWRNZXRob2RbXSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ29yZSBleHBsYWluIGxvZ2ljXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5pbnRlcmZhY2UgSW50ZXJuYWxPdXRwdXQge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGFtb3VudDogYmlnaW50IHwgdHlwZW9mIEFMTDtcbn1cblxuaW50ZXJmYWNlIEludGVybmFsSW5wdXQge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIHZhbHVlOiBiaWdpbnQgfCB0eXBlb2YgQUxMO1xufVxuXG5pbnRlcmZhY2UgSW50ZXJuYWxFeHBsYWluZWQge1xuICB0eXBlOiBUcmFuc2FjdGlvblR5cGU7XG4gIGlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHNlbmRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBvdXRwdXRzOiBJbnRlcm5hbE91dHB1dFtdO1xuICBpbnB1dHM6IEludGVybmFsSW5wdXRbXTtcbiAgb3V0cHV0QW1vdW50OiBiaWdpbnQ7XG4gIHRpcDogYmlnaW50O1xuICBlcmE6IEVyYTtcbiAgbWV0aG9kOiBQYXJzZWRNZXRob2Q7XG4gIGlzU2lnbmVkOiBib29sZWFuO1xuICBub25jZTogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiBidWlsZEV4cGxhbmF0aW9uKHBhcmFtczoge1xuICB0eEhleDogc3RyaW5nO1xuICBtYXRlcmlhbDogTWF0ZXJpYWw7XG4gIHNlbmRlckFkZHJlc3M/OiBzdHJpbmc7XG4gIHJlZmVyZW5jZUJsb2NrPzogc3RyaW5nO1xuICBibG9ja051bWJlcj86IG51bWJlcjtcbn0pOiBJbnRlcm5hbEV4cGxhaW5lZCB7XG4gIGNvbnN0IHR4ID0gRG90VHJhbnNhY3Rpb24uZnJvbUhleChwYXJhbXMudHhIZXgsIHBhcmFtcy5tYXRlcmlhbCk7XG4gIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgbWF0ZXJpYWw6IHBhcmFtcy5tYXRlcmlhbCxcbiAgICBzZW5kZXI6IHBhcmFtcy5zZW5kZXJBZGRyZXNzLFxuICAgIHJlZmVyZW5jZUJsb2NrOiBwYXJhbXMucmVmZXJlbmNlQmxvY2ssXG4gICAgYmxvY2tOdW1iZXI6IHBhcmFtcy5ibG9ja051bWJlcixcbiAgfTtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VUcmFuc2FjdGlvbih0eCwgY29udGV4dCk7XG4gIGNvbnN0IHNlbmRlciA9IHBhcnNlZC5zZW5kZXIgPz8gcGFyYW1zLnNlbmRlckFkZHJlc3M7XG5cbiAgY29uc3QgYW5hbHlzaXMgPSBhbmFseXplTWV0aG9kKHBhcnNlZC5tZXRob2QsIHNlbmRlciwgcGFyYW1zLm1hdGVyaWFsLm1ldGFkYXRhKTtcblxuICAvLyBVc2UgZXhwbGljaXQgaW5wdXRzIGZyb20gYW5hbHlzaXMgaWYgcHJvdmlkZWQgKGUuZy4sIHVuc3Rha2UgYmF0Y2ggd2hlcmVcbiAgLy8gdGhlIGlucHV0IHNvdXJjZSBpcyB0aGUgcHJveHkgYWRkcmVzcywgbm90IHRoZSBzZW5kZXIpLiBPdGhlcndpc2UsIG1pcnJvclxuICAvLyBvdXRwdXRzIHdpdGggc2VuZGVyIGFzIHRoZSBkZWZhdWx0IGlucHV0IHNvdXJjZS5cbiAgY29uc3QgaW5wdXRzOiBJbnRlcm5hbElucHV0W10gPVxuICAgIGFuYWx5c2lzLmlucHV0cyA/PyAoc2VuZGVyID8gYW5hbHlzaXMub3V0cHV0cy5tYXAoKG8pID0+ICh7IGFkZHJlc3M6IHNlbmRlciwgdmFsdWU6IG8uYW1vdW50IH0pKSA6IFtdKTtcblxuICBjb25zdCBvdXRwdXRBbW91bnQgPSBhbmFseXNpcy5vdXRwdXRzLnJlZHVjZSgoc3VtLCBvKSA9PiB7XG4gICAgaWYgKG8uYW1vdW50ID09PSBBTEwpIHJldHVybiBzdW07XG4gICAgcmV0dXJuIHN1bSArIG8uYW1vdW50O1xuICB9LCAwbik7XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBhbmFseXNpcy50eXBlLFxuICAgIGlkOiBwYXJzZWQuaWQgPz8gdW5kZWZpbmVkLFxuICAgIHNlbmRlcjogcGFyc2VkLnNlbmRlciA/PyB1bmRlZmluZWQsXG4gICAgb3V0cHV0czogYW5hbHlzaXMub3V0cHV0cyxcbiAgICBpbnB1dHMsXG4gICAgb3V0cHV0QW1vdW50LFxuICAgIHRpcDogQmlnSW50KHBhcnNlZC50aXAgfHwgJzAnKSxcbiAgICBlcmE6IHBhcnNlZC5lcmEsXG4gICAgbWV0aG9kOiBwYXJzZWQubWV0aG9kLFxuICAgIGlzU2lnbmVkOiBwYXJzZWQuaXNTaWduZWQsXG4gICAgbm9uY2U6IHBhcnNlZC5ub25jZSxcbiAgfTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbWJpbmVkIHR5cGUgKyBvdXRwdXQgYW5hbHlzaXMgKHNpbmdsZSBzd2l0Y2gsIHNpbmdsZSBwbGFjZSB0byB1cGRhdGUpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5pbnRlcmZhY2UgTWV0aG9kQW5hbHlzaXMge1xuICB0eXBlOiBUcmFuc2FjdGlvblR5cGU7XG4gIG91dHB1dHM6IEludGVybmFsT3V0cHV0W107XG4gIC8qKiBFeHBsaWNpdCBpbnB1dHMsIHdoZW4gdGhleSBkaWZmZXIgZnJvbSB0aGUgZGVmYXVsdCAoc2VuZGVyIG1pcnJvcnMgb3V0cHV0cykuICovXG4gIGlucHV0cz86IEludGVybmFsSW5wdXRbXTtcbn1cblxuLyoqXG4gKiBBbmFseXplIGEgcGFyc2VkIG1ldGhvZCB0byBkZXRlcm1pbmUgaXRzIHRyYW5zYWN0aW9uIHR5cGUgYW5kIGV4dHJhY3Qgb3V0cHV0cy5cbiAqXG4gKiBUaGlzIGlzIGEgc2luZ2xlIHN3aXRjaCB0aGF0IGhhbmRsZXMgYm90aCBjb25jZXJucyB0b2dldGhlciwgcHJldmVudGluZyB0aGVtXG4gKiBmcm9tIGdldHRpbmcgb3V0IG9mIHN5bmMuIEV2ZXJ5IGNhc2UgdGhhdCBzZXRzIGEgdHlwZSBhbHNvIHNldHMgdGhlIG91dHB1dHNcbiAqIGZvciB0aGF0IHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGFuYWx5emVNZXRob2QobWV0aG9kOiBQYXJzZWRNZXRob2QsIHNlbmRlckFkZHJlc3M/OiBzdHJpbmcsIG1ldGFkYXRhSGV4Pzogc3RyaW5nKTogTWV0aG9kQW5hbHlzaXMge1xuICByZXR1cm4gYW5hbHl6ZU1ldGhvZElubmVyKG1ldGhvZCwgc2VuZGVyQWRkcmVzcywgbWV0YWRhdGFIZXgsIDApO1xufVxuXG5mdW5jdGlvbiBhbmFseXplTWV0aG9kSW5uZXIoXG4gIG1ldGhvZDogUGFyc2VkTWV0aG9kLFxuICBzZW5kZXJBZGRyZXNzOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIG1ldGFkYXRhSGV4OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGRlcHRoOiBudW1iZXJcbik6IE1ldGhvZEFuYWx5c2lzIHtcbiAgY29uc3Qga2V5ID0gYCR7bWV0aG9kLnBhbGxldH0uJHttZXRob2QubmFtZX1gO1xuICBjb25zdCBhcmdzID0gKG1ldGhvZC5hcmdzID8/IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBzd2l0Y2ggKGtleSkge1xuICAgIC8vIC0tLSBUcmFuc2ZlcnMgLS0tXG4gICAgY2FzZSAnYmFsYW5jZXMudHJhbnNmZXInOlxuICAgIGNhc2UgJ2JhbGFuY2VzLnRyYW5zZmVyS2VlcEFsaXZlJzpcbiAgICBjYXNlICdiYWxhbmNlcy50cmFuc2ZlckFsbG93RGVhdGgnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogVHJhbnNhY3Rpb25UeXBlLlNlbmQsXG4gICAgICAgIG91dHB1dHM6IFt7IGFkZHJlc3M6IFN0cmluZyhhcmdzLmRlc3QgPz8gJycpLCBhbW91bnQ6IEJpZ0ludCgoYXJncy52YWx1ZSBhcyBzdHJpbmcpID8/ICcwJykgfV0sXG4gICAgICB9O1xuXG4gICAgY2FzZSAnYmFsYW5jZXMudHJhbnNmZXJBbGwnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogVHJhbnNhY3Rpb25UeXBlLlNlbmQsXG4gICAgICAgIG91dHB1dHM6IFt7IGFkZHJlc3M6IFN0cmluZyhhcmdzLmRlc3QgPz8gJycpLCBhbW91bnQ6IEFMTCB9XSxcbiAgICAgIH07XG5cbiAgICAvLyAtLS0gU3Rha2luZyAtLS1cbiAgICBjYXNlICdzdGFraW5nLmJvbmQnOlxuICAgIGNhc2UgJ3N0YWtpbmcuYm9uZEV4dHJhJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGUsXG4gICAgICAgIG91dHB1dHM6IFt7IGFkZHJlc3M6IFNUQUtJTkdfREVTVElOQVRJT04sIGFtb3VudDogQmlnSW50KChhcmdzLnZhbHVlIGFzIHN0cmluZykgPz8gJzAnKSB9XSxcbiAgICAgIH07XG5cbiAgICBjYXNlICdzdGFraW5nLnVuYm9uZCc6XG4gICAgICAvLyBFbXB0eSBvdXRwdXRzOiB1bmJvbmQgdW5sb2NrcyBET1QgKG5vIGV4dGVybmFsIHNwZW5kKS4gTWF0Y2hlcyBsZWdhY3kgVHJhbnNhY3Rpb24gY2xhc3NcbiAgICAgIC8vIGJlaGF2aW9yIHdoZXJlIGRlY29kZUlucHV0c0FuZE91dHB1dHNGb3JVbmJvbmQoKSByZXR1cm5zIFtdLiBCb25kL2JvbmRFeHRyYSBrZWVwIHRoZVxuICAgICAgLy8gc2VudGluZWwgYmVjYXVzZSB0aGV5IHJlcHJlc2VudCBhY3R1YWwgYmFsYW5jZSBsb2NrcyB2aXNpYmxlIHRvIHBvbGljeSBldmFsdWF0aW9uLlxuICAgICAgcmV0dXJuIHsgdHlwZTogVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdVbmxvY2ssIG91dHB1dHM6IFtdIH07XG5cbiAgICBjYXNlICdzdGFraW5nLndpdGhkcmF3VW5ib25kZWQnOlxuICAgICAgcmV0dXJuIHsgdHlwZTogVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdywgb3V0cHV0czogW10gfTtcblxuICAgIGNhc2UgJ3N0YWtpbmcuY2hpbGwnOlxuICAgICAgcmV0dXJuIHsgdHlwZTogVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdVbnZvdGUsIG91dHB1dHM6IFtdIH07XG5cbiAgICBjYXNlICdzdGFraW5nLnBheW91dFN0YWtlcnMnOlxuICAgICAgcmV0dXJuIHsgdHlwZTogVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdDbGFpbSwgb3V0cHV0czogW10gfTtcblxuICAgIC8vIC0tLSBQcm94eSAtLS1cbiAgICBjYXNlICdwcm94eS5hZGRQcm94eSc6XG4gICAgY2FzZSAncHJveHkucmVtb3ZlUHJveHknOlxuICAgIGNhc2UgJ3Byb3h5LmNyZWF0ZVB1cmUnOlxuICAgICAgcmV0dXJuIHsgdHlwZTogVHJhbnNhY3Rpb25UeXBlLkFkZHJlc3NJbml0aWFsaXphdGlvbiwgb3V0cHV0czogW10gfTtcblxuICAgIC8vIC0tLSBQcm94eS13cmFwcGVkIGNhbGwgLS0tXG4gICAgY2FzZSAncHJveHkucHJveHknOiB7XG4gICAgICBpZiAoZGVwdGggPj0gTUFYX05FU1RJTkdfREVQVEgpIHJldHVybiB7IHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5TZW5kLCBvdXRwdXRzOiBbXSB9O1xuICAgICAgY29uc3QgY2FsbCA9IGFyZ3MuY2FsbCBhcyBQYXJzZWRNZXRob2QgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoY2FsbD8ucGFsbGV0ICYmIGNhbGw/Lm5hbWUpIHJldHVybiBhbmFseXplTWV0aG9kSW5uZXIoY2FsbCwgc2VuZGVyQWRkcmVzcywgbWV0YWRhdGFIZXgsIGRlcHRoICsgMSk7XG4gICAgICByZXR1cm4geyB0eXBlOiBUcmFuc2FjdGlvblR5cGUuU2VuZCwgb3V0cHV0czogW10gfTtcbiAgICB9XG5cbiAgICAvLyAtLS0gQmF0Y2ggLS0tXG4gICAgY2FzZSAndXRpbGl0eS5iYXRjaCc6XG4gICAgY2FzZSAndXRpbGl0eS5iYXRjaEFsbCc6XG4gICAgICByZXR1cm4gYW5hbHl6ZUJhdGNoKGFyZ3MsIHNlbmRlckFkZHJlc3MsIG1ldGFkYXRhSGV4LCBkZXB0aCk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHsgdHlwZTogVHJhbnNhY3Rpb25UeXBlLlNlbmQsIG91dHB1dHM6IFtdIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBbmFseXplIGEgYmF0Y2ggdHJhbnNhY3Rpb24uXG4gKlxuICogRGV0ZWN0cyBrbm93biBwcm94eSBiYXRjaCBwYXR0ZXJucyAoc3Rha2U6IGJvbmQrYWRkUHJveHksIHVuc3Rha2U6XG4gKiByZW1vdmVQcm94eStjaGlsbCt1bmJvbmQpIGFuZCBoYW5kbGVzIHByb3h5IGRlcG9zaXQgY29zdC4gRm9yIHVucmVjb2duaXplZFxuICogYmF0Y2ggcGF0dGVybnMsIHJlY3Vyc2l2ZWx5IGV4dHJhY3RzIG91dHB1dHMgZnJvbSBlYWNoIGlubmVyIGNhbGwuXG4gKi9cbmZ1bmN0aW9uIGFuYWx5emVCYXRjaChcbiAgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHNlbmRlckFkZHJlc3M6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgbWV0YWRhdGFIZXg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgZGVwdGg6IG51bWJlclxuKTogTWV0aG9kQW5hbHlzaXMge1xuICBjb25zdCBjYWxscyA9IChhcmdzLmNhbGxzID8/IFtdKSBhcyBQYXJzZWRNZXRob2RbXTtcbiAgaWYgKGNhbGxzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHsgdHlwZTogVHJhbnNhY3Rpb25UeXBlLkJhdGNoLCBvdXRwdXRzOiBbXSB9O1xuXG4gIGNvbnN0IGNhbGxLZXlzID0gY2FsbHMubWFwKChjKSA9PiBgJHtjLnBhbGxldH0uJHtjLm5hbWV9YCk7XG5cbiAgLy8gU3Rha2luZyBiYXRjaDogYm9uZCArIGFkZFByb3h5ICgyIGNhbGxzKVxuICBpZiAoY2FsbHMubGVuZ3RoID09PSAyICYmIGNhbGxLZXlzWzBdID09PSAnc3Rha2luZy5ib25kJyAmJiBjYWxsS2V5c1sxXSA9PT0gJ3Byb3h5LmFkZFByb3h5Jykge1xuICAgIGNvbnN0IGJvbmRBcmdzID0gKGNhbGxzWzBdLmFyZ3MgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IGFkZFByb3h5QXJncyA9IChjYWxsc1sxXS5hcmdzID8/IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBib25kQW1vdW50ID0gQmlnSW50KChib25kQXJncy52YWx1ZSBhcyBzdHJpbmcpID8/ICcwJyk7XG4gICAgY29uc3QgcHJveHlBZGRyZXNzID0gU3RyaW5nKGFkZFByb3h5QXJncy5kZWxlZ2F0ZSA/PyAnJyk7XG4gICAgY29uc3QgcHJveHlEZXBvc2l0Q29zdCA9IG1ldGFkYXRhSGV4ID8gZ2V0UHJveHlEZXBvc2l0Q29zdChtZXRhZGF0YUhleCkgOiAwbjtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBUcmFuc2FjdGlvblR5cGUuQmF0Y2gsXG4gICAgICBvdXRwdXRzOiBbXG4gICAgICAgIHsgYWRkcmVzczogU1RBS0lOR19ERVNUSU5BVElPTiwgYW1vdW50OiBib25kQW1vdW50IH0sXG4gICAgICAgIHsgYWRkcmVzczogcHJveHlBZGRyZXNzLCBhbW91bnQ6IHByb3h5RGVwb3NpdENvc3QgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIFVuc3Rha2luZyBiYXRjaDogcmVtb3ZlUHJveHkgKyBjaGlsbCArIHVuYm9uZCAoMyBjYWxscylcbiAgLy8gSW5wdXQgc291cmNlIGlzIHRoZSBwcm94eSBhZGRyZXNzIChkZXBvc2l0IHJlZnVuZCksIG5vdCB0aGUgc2VuZGVyLlxuICBpZiAoXG4gICAgY2FsbHMubGVuZ3RoID09PSAzICYmXG4gICAgY2FsbEtleXNbMF0gPT09ICdwcm94eS5yZW1vdmVQcm94eScgJiZcbiAgICBjYWxsS2V5c1sxXSA9PT0gJ3N0YWtpbmcuY2hpbGwnICYmXG4gICAgY2FsbEtleXNbMl0gPT09ICdzdGFraW5nLnVuYm9uZCdcbiAgKSB7XG4gICAgY29uc3QgcmVtb3ZlUHJveHlBcmdzID0gKGNhbGxzWzBdLmFyZ3MgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IHByb3h5QWRkcmVzcyA9IFN0cmluZyhyZW1vdmVQcm94eUFyZ3MuZGVsZWdhdGUgPz8gJycpO1xuICAgIGNvbnN0IHByb3h5RGVwb3NpdENvc3QgPSBtZXRhZGF0YUhleCA/IGdldFByb3h5RGVwb3NpdENvc3QobWV0YWRhdGFIZXgpIDogMG47XG5cbiAgICBjb25zdCBvdXRwdXRzID0gc2VuZGVyQWRkcmVzcyA/IFt7IGFkZHJlc3M6IHNlbmRlckFkZHJlc3MsIGFtb3VudDogcHJveHlEZXBvc2l0Q29zdCB9XSA6IFtdO1xuICAgIGNvbnN0IGlucHV0cyA9IFt7IGFkZHJlc3M6IHByb3h5QWRkcmVzcywgdmFsdWU6IHByb3h5RGVwb3NpdENvc3QgfV07XG5cbiAgICByZXR1cm4geyB0eXBlOiBUcmFuc2FjdGlvblR5cGUuQmF0Y2gsIG91dHB1dHMsIGlucHV0cyB9O1xuICB9XG5cbiAgLy8gR2VuZXJpYyBiYXRjaDogcmVjdXJzaXZlbHkgZXh0cmFjdCBvdXRwdXRzIGZyb20gZWFjaCBpbm5lciBjYWxsXG4gIGlmIChkZXB0aCA+PSBNQVhfTkVTVElOR19ERVBUSCkgcmV0dXJuIHsgdHlwZTogVHJhbnNhY3Rpb25UeXBlLkJhdGNoLCBvdXRwdXRzOiBbXSB9O1xuICBjb25zdCBvdXRwdXRzID0gY2FsbHNcbiAgICAuZmlsdGVyKChjKSA9PiBjPy5wYWxsZXQgJiYgYz8ubmFtZSlcbiAgICAuZmxhdE1hcCgoYykgPT4gYW5hbHl6ZU1ldGhvZElubmVyKGMsIHNlbmRlckFkZHJlc3MsIG1ldGFkYXRhSGV4LCBkZXB0aCArIDEpLm91dHB1dHMpO1xuICByZXR1cm4geyB0eXBlOiBUcmFuc2FjdGlvblR5cGUuQmF0Y2gsIG91dHB1dHMgfTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEhlbHBlcnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmZ1bmN0aW9uIHBvcHVsYXRlU2VuZEZpZWxkcyhyZXN1bHQ6IFR4RGF0YSwgbWV0aG9kOiBQYXJzZWRNZXRob2QsIGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gIGNvbnN0IGtleSA9IGAke21ldGhvZC5wYWxsZXR9LiR7bWV0aG9kLm5hbWV9YDtcblxuICBpZiAoa2V5ID09PSAncHJveHkucHJveHknKSB7XG4gICAgLy8gUHJveHktd3JhcHBlZCB0cmFuc2ZlclxuICAgIGNvbnN0IGlubmVyQ2FsbCA9IGFyZ3MuY2FsbCBhcyBQYXJzZWRNZXRob2QgfCB1bmRlZmluZWQ7XG4gICAgcmVzdWx0Lm93bmVyID0gU3RyaW5nKGFyZ3MucmVhbCA/PyAnJyk7XG4gICAgcmVzdWx0LmZvcmNlUHJveHlUeXBlID0gKGFyZ3MuZm9yY2VQcm94eVR5cGUgYXMgUHJveHlUeXBlKSA/PyB1bmRlZmluZWQ7XG4gICAgaWYgKGlubmVyQ2FsbD8uYXJncykge1xuICAgICAgY29uc3QgaW5uZXJBcmdzID0gaW5uZXJDYWxsLmFyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICByZXN1bHQudG8gPSBTdHJpbmcoaW5uZXJBcmdzLmRlc3QgPz8gJycpO1xuICAgICAgcmVzdWx0LmFtb3VudCA9IFN0cmluZyhpbm5lckFyZ3MudmFsdWUgPz8gJycpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChrZXkgPT09ICdiYWxhbmNlcy50cmFuc2ZlckFsbCcpIHtcbiAgICByZXN1bHQudG8gPSBTdHJpbmcoYXJncy5kZXN0ID8/ICcnKTtcbiAgICByZXN1bHQua2VlcEFsaXZlID0gQm9vbGVhbihhcmdzLmtlZXBBbGl2ZSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gdHJhbnNmZXIsIHRyYW5zZmVyS2VlcEFsaXZlLCB0cmFuc2ZlckFsbG93RGVhdGhcbiAgICByZXN1bHQudG8gPSBTdHJpbmcoYXJncy5kZXN0ID8/ICcnKTtcbiAgICByZXN1bHQuYW1vdW50ID0gU3RyaW5nKGFyZ3MudmFsdWUgPz8gJycpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBvcHVsYXRlU3Rha2luZ0FjdGl2YXRlRmllbGRzKFxuICByZXN1bHQ6IFR4RGF0YSxcbiAgbWV0aG9kOiBQYXJzZWRNZXRob2QsXG4gIGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBzZW5kZXJBZGRyZXNzOiBzdHJpbmdcbik6IHZvaWQge1xuICBpZiAobWV0aG9kLm5hbWUgPT09ICdib25kRXh0cmEnKSB7XG4gICAgcmVzdWx0LmFtb3VudCA9IFN0cmluZyhhcmdzLnZhbHVlID8/ICcnKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBib25kXG4gICAgcmVzdWx0LmNvbnRyb2xsZXIgPSBzZW5kZXJBZGRyZXNzO1xuICAgIHJlc3VsdC5hbW91bnQgPSBTdHJpbmcoYXJncy52YWx1ZSA/PyAnJyk7XG4gICAgcmVzdWx0LnBheWVlID0gU3RyaW5nKGFyZ3MucGF5ZWUgPz8gJycpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBvcHVsYXRlQWRkcmVzc0luaXRGaWVsZHMocmVzdWx0OiBUeERhdGEsIG1ldGhvZDogUGFyc2VkTWV0aG9kLCBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICBjb25zdCBrZXkgPSBgJHttZXRob2QucGFsbGV0fS4ke21ldGhvZC5uYW1lfWA7XG4gIHJlc3VsdC5tZXRob2QgPSBrZXk7XG4gIHJlc3VsdC5wcm94eVR5cGUgPSBTdHJpbmcoYXJncy5wcm94eV90eXBlID8/ICcnKTtcbiAgcmVzdWx0LmRlbGF5ID0gU3RyaW5nKGFyZ3MuZGVsYXkgPz8gJycpO1xuXG4gIGlmIChrZXkgPT09ICdwcm94eS5jcmVhdGVQdXJlJykge1xuICAgIHJlc3VsdC5pbmRleCA9IFN0cmluZyhhcmdzLmluZGV4ID8/ICcnKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBhZGRQcm94eSwgcmVtb3ZlUHJveHlcbiAgICByZXN1bHQub3duZXIgPSBTdHJpbmcoYXJncy5kZWxlZ2F0ZSA/PyAnJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFwQmF0Y2hDYWxscyhjYWxsczogUGFyc2VkTWV0aG9kW10gfCB1bmRlZmluZWQpOiBCYXRjaENhbGxPYmplY3RbXSB7XG4gIGlmICghY2FsbHMpIHJldHVybiBbXTtcbiAgcmV0dXJuIGNhbGxzLm1hcCgoY2FsbCkgPT4gKHtcbiAgICBjYWxsSW5kZXg6IGAweCR7Y2FsbC5wYWxsZXRJbmRleC50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKX0ke2NhbGwubWV0aG9kSW5kZXgudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJyl9YCxcbiAgICBhcmdzOiB0cmFuc2Zvcm1CYXRjaENhbGxBcmdzKChjYWxsLmFyZ3MgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSxcbiAgfSkpO1xufVxuXG4vKiogVHJhbnNmb3JtIFdBU00tZGVjb2RlZCBiYXRjaCBjYWxsIGFyZ3MgdG8gbWF0Y2ggdGhlIFBvbGthZG90LmpzIGZvcm1hdCB0aGF0IGNvbnN1bWVycyBleHBlY3QgKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybUJhdGNoQ2FsbEFyZ3MoYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYXJncykpIHtcbiAgICBpZiAoa2V5ID09PSAnZGVsZWdhdGUnICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIE11bHRpQWRkcmVzcyBJZCB2YXJpYW50OiBzdHJpbmcgLT4geyBpZDogc3RyaW5nIH1cbiAgICAgIHJlc3VsdFtrZXldID0geyBpZDogdmFsdWUgfTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3ZhbHVlJyAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBDb21wYWN0IHUxMjg6IHN0cmluZyAtPiBudW1iZXIgKG1hdGNoZXMgUG9sa2Fkb3QuanMgYmVoYXZpb3IpXG4gICAgICByZXN1bHRba2V5XSA9IE51bWJlcih2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdwYXllZScgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gRW51bSB1bml0IHZhcmlhbnQ6IFwiU3Rha2VkXCIgLT4geyBzdGFrZWQ6IG51bGwgfVxuICAgICAgY29uc3QgdmFyaWFudE5hbWUgPSB2YWx1ZS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHZhbHVlLnNsaWNlKDEpO1xuICAgICAgcmVzdWx0W2tleV0gPSB7IFt2YXJpYW50TmFtZV06IG51bGwgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withdrawUnstakedBuilder.d.ts","sourceRoot":"","sources":["../../../../src/lib/withdrawUnstakedBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAIxG,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,qBAAa,uBAAwB,SAAQ,kBAAkB;IAC7D,SAAS,CAAC,iBAAiB,EAAE,MAAM,CAAC;gBAExB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C;;;;;;;;OAQG;IACH,SAAS,CAAC,gBAAgB,IAAI,mBAAmB;IAYjD,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;;;;;;OAQG;IACH,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAM1C,kBAAkB;IAClB,0BAA0B,CAAC,UAAU,EAAE,qBAAqB,GAAG,eAAe,GAAG,IAAI;IAarF,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAWjE,kBAAkB;IAClB,mBAAmB,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI;IAKzC,OAAO,CAAC,cAAc;CAWvB"}
|
|
@@ -0,0 +1,88 @@
|
|
|
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.WithdrawUnstakedBuilder = void 0;
|
|
7
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
8
|
+
const txwrapper_polkadot_1 = require("@substrate/txwrapper-polkadot");
|
|
9
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
10
|
+
const iface_1 = require("./iface");
|
|
11
|
+
const transactionBuilder_1 = require("./transactionBuilder");
|
|
12
|
+
const txnSchema_1 = require("./txnSchema");
|
|
13
|
+
class WithdrawUnstakedBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
14
|
+
constructor(_coinConfig) {
|
|
15
|
+
super(_coinConfig);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
*
|
|
19
|
+
* Frees up any unlocked chunks.
|
|
20
|
+
* The balance can now be used by the stash account to do whatever it wants.
|
|
21
|
+
*
|
|
22
|
+
* @returns {UnsignedTransaction} an unsigned Dot transaction
|
|
23
|
+
*
|
|
24
|
+
* @see https://polkadot.js.org/docs/substrate/extrinsics/#withdrawunbondednum_slashing_spans-u32
|
|
25
|
+
*/
|
|
26
|
+
buildTransaction() {
|
|
27
|
+
const baseTxInfo = this.createBaseTxInfo();
|
|
28
|
+
// TODO: The method changes the args type from number to string, verify it doesn't break anything
|
|
29
|
+
return txwrapper_polkadot_1.methods.staking.withdrawUnbonded({
|
|
30
|
+
numSlashingSpans: this._numSlashingSpans,
|
|
31
|
+
}, baseTxInfo.baseTxInfo, baseTxInfo.options);
|
|
32
|
+
}
|
|
33
|
+
get transactionType() {
|
|
34
|
+
return sdk_core_1.TransactionType.StakingWithdraw;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
*
|
|
38
|
+
* The number of slashing spans.
|
|
39
|
+
*
|
|
40
|
+
* @param {number} slashingSpans
|
|
41
|
+
* @returns {WithdrawUnstakedBuilder} This withdrawUnstaked builder.
|
|
42
|
+
*
|
|
43
|
+
* @see https://polkadot.js.org/docs/substrate/extrinsics/#withdrawunbondednum_slashing_spans-u32
|
|
44
|
+
*/
|
|
45
|
+
slashingSpans(slashingSpans) {
|
|
46
|
+
this.validateValue(new bignumber_js_1.default(slashingSpans));
|
|
47
|
+
this._numSlashingSpans = slashingSpans;
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
/** @inheritdoc */
|
|
51
|
+
validateDecodedTransaction(decodedTxn) {
|
|
52
|
+
if (decodedTxn.method?.name === iface_1.MethodNames.WithdrawUnbonded) {
|
|
53
|
+
const txMethod = decodedTxn.method.args;
|
|
54
|
+
const value = txMethod.numSlashingSpans;
|
|
55
|
+
const validationResult = txnSchema_1.WithdrawUnstakedTransactionSchema.validate({ value });
|
|
56
|
+
if (validationResult.error) {
|
|
57
|
+
throw new sdk_core_1.InvalidTransactionError(`WithdrawUnstaked Transaction validation failed: ${validationResult.error.message}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/** @inheritdoc */
|
|
62
|
+
fromImplementation(rawTransaction) {
|
|
63
|
+
const tx = super.fromImplementation(rawTransaction);
|
|
64
|
+
if (this._method?.name === iface_1.MethodNames.WithdrawUnbonded) {
|
|
65
|
+
const txMethod = this._method.args;
|
|
66
|
+
this.slashingSpans(txMethod.numSlashingSpans);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
throw new sdk_core_1.InvalidTransactionError(`Invalid Transaction Type: ${this._method?.name}. Expected withdrawUnbonded`);
|
|
70
|
+
}
|
|
71
|
+
return tx;
|
|
72
|
+
}
|
|
73
|
+
/** @inheritdoc */
|
|
74
|
+
validateTransaction(_) {
|
|
75
|
+
super.validateTransaction(_);
|
|
76
|
+
this.validateFields(this._numSlashingSpans);
|
|
77
|
+
}
|
|
78
|
+
validateFields(value) {
|
|
79
|
+
const validationResult = txnSchema_1.WithdrawUnstakedTransactionSchema.validate({
|
|
80
|
+
value,
|
|
81
|
+
});
|
|
82
|
+
if (validationResult.error) {
|
|
83
|
+
throw new sdk_core_1.InvalidTransactionError(`WithdrawUnstaked Builder Transaction validation failed: ${validationResult.error.message}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.WithdrawUnstakedBuilder = WithdrawUnstakedBuilder;
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aGRyYXdVbnN0YWtlZEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3dpdGhkcmF3VW5zdGFrZWRCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQUFnRjtBQUdoRixzRUFBd0Q7QUFDeEQsZ0VBQXFDO0FBQ3JDLG1DQUE0RDtBQUU1RCw2REFBMEQ7QUFDMUQsMkNBQWdFO0FBRWhFLE1BQWEsdUJBQXdCLFNBQVEsdUNBQWtCO0lBRzdELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNPLGdCQUFnQjtRQUN4QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMzQyxpR0FBaUc7UUFDakcsT0FBTyw0QkFBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FDckM7WUFDRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsaUJBQWlCO1NBQ3pDLEVBQ0QsVUFBVSxDQUFDLFVBQVUsRUFDckIsVUFBVSxDQUFDLE9BQU8sQ0FDbkIsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLGVBQWUsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxhQUFhLENBQUMsYUFBcUI7UUFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLHNCQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsYUFBYSxDQUFDO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtCQUFrQjtJQUNsQiwwQkFBMEIsQ0FBQyxVQUFtRDtRQUM1RSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxLQUFLLG1CQUFXLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUM3RCxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQXVDLENBQUM7WUFDM0UsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDO1lBQ3hDLE1BQU0sZ0JBQWdCLEdBQUcsNkNBQWlDLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUMvRSxJQUFJLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUMzQixNQUFNLElBQUksa0NBQXVCLENBQy9CLG1EQUFtRCxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQ3BGLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDUixrQkFBa0IsQ0FBQyxjQUFzQjtRQUNqRCxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksS0FBSyxtQkFBVyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUE0QixDQUFDO1lBQzNELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDaEQsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksa0NBQXVCLENBQUMsNkJBQTZCLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSw2QkFBNkIsQ0FBQyxDQUFDO1FBQ2xILENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsbUJBQW1CLENBQUMsQ0FBYztRQUNoQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU8sY0FBYyxDQUFDLEtBQWE7UUFDbEMsTUFBTSxnQkFBZ0IsR0FBRyw2Q0FBaUMsQ0FBQyxRQUFRLENBQUM7WUFDbEUsS0FBSztTQUNOLENBQUMsQ0FBQztRQUVILElBQUksZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLGtDQUF1QixDQUMvQiwyREFBMkQsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUM1RixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7Q0FDRjtBQTFGRCwwREEwRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgRGVjb2RlZFNpZ25lZFR4LCBEZWNvZGVkU2lnbmluZ1BheWxvYWQsIFVuc2lnbmVkVHJhbnNhY3Rpb24gfSBmcm9tICdAc3Vic3RyYXRlL3R4d3JhcHBlci1jb3JlJztcbmltcG9ydCB7IG1ldGhvZHMgfSBmcm9tICdAc3Vic3RyYXRlL3R4d3JhcHBlci1wb2xrYWRvdCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBNZXRob2ROYW1lcywgV2l0aGRyYXdVbnN0YWtlZEFyZ3MgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBXaXRoZHJhd1Vuc3Rha2VkVHJhbnNhY3Rpb25TY2hlbWEgfSBmcm9tICcuL3R4blNjaGVtYSc7XG5cbmV4cG9ydCBjbGFzcyBXaXRoZHJhd1Vuc3Rha2VkQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfbnVtU2xhc2hpbmdTcGFuczogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBGcmVlcyB1cCBhbnkgdW5sb2NrZWQgY2h1bmtzLlxuICAgKiBUaGUgYmFsYW5jZSBjYW4gbm93IGJlIHVzZWQgYnkgdGhlIHN0YXNoIGFjY291bnQgdG8gZG8gd2hhdGV2ZXIgaXQgd2FudHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtVbnNpZ25lZFRyYW5zYWN0aW9ufSBhbiB1bnNpZ25lZCBEb3QgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHNlZSBodHRwczovL3BvbGthZG90LmpzLm9yZy9kb2NzL3N1YnN0cmF0ZS9leHRyaW5zaWNzLyN3aXRoZHJhd3VuYm9uZGVkbnVtX3NsYXNoaW5nX3NwYW5zLXUzMlxuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkVHJhbnNhY3Rpb24oKTogVW5zaWduZWRUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgYmFzZVR4SW5mbyA9IHRoaXMuY3JlYXRlQmFzZVR4SW5mbygpO1xuICAgIC8vIFRPRE86IFRoZSBtZXRob2QgY2hhbmdlcyB0aGUgYXJncyB0eXBlIGZyb20gbnVtYmVyIHRvIHN0cmluZywgdmVyaWZ5IGl0IGRvZXNuJ3QgYnJlYWsgYW55dGhpbmdcbiAgICByZXR1cm4gbWV0aG9kcy5zdGFraW5nLndpdGhkcmF3VW5ib25kZWQoXG4gICAgICB7XG4gICAgICAgIG51bVNsYXNoaW5nU3BhbnM6IHRoaXMuX251bVNsYXNoaW5nU3BhbnMsXG4gICAgICB9LFxuICAgICAgYmFzZVR4SW5mby5iYXNlVHhJbmZvLFxuICAgICAgYmFzZVR4SW5mby5vcHRpb25zXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXc7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogVGhlIG51bWJlciBvZiBzbGFzaGluZyBzcGFucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNsYXNoaW5nU3BhbnNcbiAgICogQHJldHVybnMge1dpdGhkcmF3VW5zdGFrZWRCdWlsZGVyfSBUaGlzIHdpdGhkcmF3VW5zdGFrZWQgYnVpbGRlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3BvbGthZG90LmpzLm9yZy9kb2NzL3N1YnN0cmF0ZS9leHRyaW5zaWNzLyN3aXRoZHJhd3VuYm9uZGVkbnVtX3NsYXNoaW5nX3NwYW5zLXUzMlxuICAgKi9cbiAgc2xhc2hpbmdTcGFucyhzbGFzaGluZ1NwYW5zOiBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlVmFsdWUobmV3IEJpZ051bWJlcihzbGFzaGluZ1NwYW5zKSk7XG4gICAgdGhpcy5fbnVtU2xhc2hpbmdTcGFucyA9IHNsYXNoaW5nU3BhbnM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVEZWNvZGVkVHJhbnNhY3Rpb24oZGVjb2RlZFR4bjogRGVjb2RlZFNpZ25pbmdQYXlsb2FkIHwgRGVjb2RlZFNpZ25lZFR4KTogdm9pZCB7XG4gICAgaWYgKGRlY29kZWRUeG4ubWV0aG9kPy5uYW1lID09PSBNZXRob2ROYW1lcy5XaXRoZHJhd1VuYm9uZGVkKSB7XG4gICAgICBjb25zdCB0eE1ldGhvZCA9IGRlY29kZWRUeG4ubWV0aG9kLmFyZ3MgYXMgdW5rbm93biBhcyBXaXRoZHJhd1Vuc3Rha2VkQXJncztcbiAgICAgIGNvbnN0IHZhbHVlID0gdHhNZXRob2QubnVtU2xhc2hpbmdTcGFucztcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBXaXRoZHJhd1Vuc3Rha2VkVHJhbnNhY3Rpb25TY2hlbWEudmFsaWRhdGUoeyB2YWx1ZSB9KTtcbiAgICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0LmVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgICBgV2l0aGRyYXdVbnN0YWtlZCBUcmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2V9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdHggPSBzdXBlci5mcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIGlmICh0aGlzLl9tZXRob2Q/Lm5hbWUgPT09IE1ldGhvZE5hbWVzLldpdGhkcmF3VW5ib25kZWQpIHtcbiAgICAgIGNvbnN0IHR4TWV0aG9kID0gdGhpcy5fbWV0aG9kLmFyZ3MgYXMgV2l0aGRyYXdVbnN0YWtlZEFyZ3M7XG4gICAgICB0aGlzLnNsYXNoaW5nU3BhbnModHhNZXRob2QubnVtU2xhc2hpbmdTcGFucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCBUcmFuc2FjdGlvbiBUeXBlOiAke3RoaXMuX21ldGhvZD8ubmFtZX0uIEV4cGVjdGVkIHdpdGhkcmF3VW5ib25kZWRgKTtcbiAgICB9XG4gICAgcmV0dXJuIHR4O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24oXzogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBzdXBlci52YWxpZGF0ZVRyYW5zYWN0aW9uKF8pO1xuICAgIHRoaXMudmFsaWRhdGVGaWVsZHModGhpcy5fbnVtU2xhc2hpbmdTcGFucyk7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlRmllbGRzKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gV2l0aGRyYXdVbnN0YWtlZFRyYW5zYWN0aW9uU2NoZW1hLnZhbGlkYXRlKHtcbiAgICAgIHZhbHVlLFxuICAgIH0pO1xuXG4gICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgYFdpdGhkcmF3VW5zdGFrZWQgQnVpbGRlciBUcmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2V9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAIjD,eAAO,MAAM,QAAQ,QAAS,SAAS,KAAG,IAGzC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.register = void 0;
|
|
4
|
+
const dot_1 = require("./dot");
|
|
5
|
+
const tdot_1 = require("./tdot");
|
|
6
|
+
const register = (sdk) => {
|
|
7
|
+
sdk.register('dot', dot_1.Dot.createInstance);
|
|
8
|
+
sdk.register('tdot', tdot_1.Tdot.createInstance);
|
|
9
|
+
};
|
|
10
|
+
exports.register = register;
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsK0JBQTRCO0FBQzVCLGlDQUE4QjtBQUV2QixNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQWMsRUFBUSxFQUFFO0lBQy9DLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFNBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4QyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxXQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDO0FBSFcsUUFBQSxRQUFRLFlBR25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgRG90IH0gZnJvbSAnLi9kb3QnO1xuaW1wb3J0IHsgVGRvdCB9IGZyb20gJy4vdGRvdCc7XG5cbmV4cG9ydCBjb25zdCByZWdpc3RlciA9IChzZGs6IEJpdEdvQmFzZSk6IHZvaWQgPT4ge1xuICBzZGsucmVnaXN0ZXIoJ2RvdCcsIERvdC5jcmVhdGVJbnN0YW5jZSk7XG4gIHNkay5yZWdpc3RlcigndGRvdCcsIFRkb3QuY3JlYXRlSW5zdGFuY2UpO1xufTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/resources/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./mainnet"), exports);
|
|
18
|
+
__exportStar(require("./westend"), exports);
|
|
19
|
+
__exportStar(require("./polkadotAssetHub"), exports);
|
|
20
|
+
__exportStar(require("./westendAssetHub"), exports);
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmVzb3VyY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0Q0FBMEI7QUFDMUIsNENBQTBCO0FBQzFCLHFEQUFtQztBQUNuQyxvREFBa0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL21haW5uZXQnO1xuZXhwb3J0ICogZnJvbSAnLi93ZXN0ZW5kJztcbmV4cG9ydCAqIGZyb20gJy4vcG9sa2Fkb3RBc3NldEh1Yic7XG5leHBvcnQgKiBmcm9tICcuL3dlc3RlbmRBc3NldEh1Yic7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mainnet.d.ts","sourceRoot":"","sources":["../../../../src/resources/mainnet.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,2sjhBAC2qjhB,CAAC"}
|