@bitgo/sdk-coin-polyx 1.10.2 → 1.10.4
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/test/integration/index.d.ts +1 -0
- package/dist/test/integration/index.d.ts.map +1 -0
- package/dist/test/integration/index.js +1 -0
- package/dist/test/resources/index.d.ts +102 -0
- package/dist/test/resources/index.d.ts.map +1 -0
- package/dist/test/resources/index.js +108 -0
- package/dist/test/resources/mainnet.d.ts +2 -0
- package/dist/test/resources/mainnet.d.ts.map +1 -0
- package/dist/test/resources/mainnet.js +5 -0
- package/dist/test/resources/materialData.json +8 -0
- package/dist/test/resources/materialDataModified.json +8 -0
- package/dist/test/resources/testnet.d.ts +2 -0
- package/dist/test/resources/testnet.d.ts.map +1 -0
- package/dist/test/resources/testnet.js +5 -0
- package/dist/test/resources/wrwUsers.d.ts +19 -0
- package/dist/test/resources/wrwUsers.d.ts.map +1 -0
- package/dist/test/resources/wrwUsers.js +60 -0
- package/dist/test/unit/polyx.d.ts +2 -0
- package/dist/test/unit/polyx.d.ts.map +1 -0
- package/dist/test/unit/polyx.js +209 -0
- package/dist/test/unit/transactionBuilder/base.d.ts +4 -0
- package/dist/test/unit/transactionBuilder/base.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/base.js +245 -0
- package/dist/test/unit/transactionBuilder/batchStakingBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/batchStakingBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/batchStakingBuilder.js +263 -0
- package/dist/test/unit/transactionBuilder/batchUnstakingBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/batchUnstakingBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/batchUnstakingBuilder.js +159 -0
- package/dist/test/unit/transactionBuilder/bondExtraBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/bondExtraBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/bondExtraBuilder.js +158 -0
- package/dist/test/unit/transactionBuilder/preApproveAssetBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/preApproveAssetBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/preApproveAssetBuilder.js +115 -0
- package/dist/test/unit/transactionBuilder/registerDidWithCDDBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/registerDidWithCDDBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/registerDidWithCDDBuilder.js +302 -0
- package/dist/test/unit/transactionBuilder/singletonRegistry.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/singletonRegistry.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/singletonRegistry.js +59 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +140 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +74 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.js +326 -0
- package/dist/test/unit/transactionBuilder/unbondBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/unbondBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/unbondBuilder.js +144 -0
- package/dist/test/unit/transactionBuilder/withdrawUnbondedBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/withdrawUnbondedBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/withdrawUnbondedBuilder.js +138 -0
- package/dist/test/unit/utils.d.ts +2 -0
- package/dist/test/unit/utils.d.ts.map +1 -0
- package/dist/test/unit/utils.js +143 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +12 -9
- package/.eslintignore +0 -4
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -174
|
@@ -0,0 +1,138 @@
|
|
|
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
|
+
const txwrapper_polkadot_1 = require("@substrate/txwrapper-polkadot");
|
|
7
|
+
const statics_1 = require("@bitgo/statics");
|
|
8
|
+
const should_1 = __importDefault(require("should"));
|
|
9
|
+
const sinon_1 = __importDefault(require("sinon"));
|
|
10
|
+
const lib_1 = require("../../../src/lib");
|
|
11
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
12
|
+
const utils_1 = __importDefault(require("../../../src/lib/utils"));
|
|
13
|
+
const resources_1 = require("../../resources");
|
|
14
|
+
function createMockTransaction(txData) {
|
|
15
|
+
return {
|
|
16
|
+
id: '123',
|
|
17
|
+
type: sdk_core_1.TransactionType.StakingWithdraw,
|
|
18
|
+
toBroadcastFormat: () => txData,
|
|
19
|
+
inputs: [],
|
|
20
|
+
outputs: [],
|
|
21
|
+
signature: ['mock-signature'],
|
|
22
|
+
toJson: () => ({
|
|
23
|
+
id: '123',
|
|
24
|
+
type: 'StakingWithdraw',
|
|
25
|
+
sender: resources_1.accounts.account1.address,
|
|
26
|
+
referenceBlock: '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d',
|
|
27
|
+
blockNumber: 100,
|
|
28
|
+
genesisHash: '0x',
|
|
29
|
+
nonce: 1,
|
|
30
|
+
tip: 0,
|
|
31
|
+
specVersion: 1,
|
|
32
|
+
transactionVersion: 1,
|
|
33
|
+
chainName: 'Polymesh',
|
|
34
|
+
inputs: [],
|
|
35
|
+
outputs: [],
|
|
36
|
+
}),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
describe('Polyx WithdrawUnbonded Builder', function () {
|
|
40
|
+
let builder;
|
|
41
|
+
const factory = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tpolyx'));
|
|
42
|
+
const senderAddress = resources_1.accounts.account1.address;
|
|
43
|
+
const testSlashingSpans = 0;
|
|
44
|
+
beforeEach(() => {
|
|
45
|
+
builder = factory.getWithdrawUnbondedBuilder();
|
|
46
|
+
});
|
|
47
|
+
describe('setter validation', () => {
|
|
48
|
+
it('should validate slashing spans', () => {
|
|
49
|
+
const spy = sinon_1.default.spy(builder, 'validateValue');
|
|
50
|
+
should_1.default.throws(() => builder.slashingSpans(-1), /Value cannot be less than zero/);
|
|
51
|
+
should_1.default.doesNotThrow(() => builder.slashingSpans(0));
|
|
52
|
+
sinon_1.default.assert.calledTwice(spy);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
describe('Build and Sign', function () {
|
|
56
|
+
it('should build a withdraw unbonded transaction', async () => {
|
|
57
|
+
builder
|
|
58
|
+
.slashingSpans(testSlashingSpans)
|
|
59
|
+
.sender({ address: senderAddress })
|
|
60
|
+
.validity({ firstValid: 3933, maxDuration: 64 })
|
|
61
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
|
|
62
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 100 });
|
|
63
|
+
const mockTx = createMockTransaction(resources_1.rawTx.withdrawUnbonded.unsigned);
|
|
64
|
+
sinon_1.default.stub(builder, 'build').resolves(mockTx);
|
|
65
|
+
const tx = await builder.build();
|
|
66
|
+
should_1.default.exist(tx);
|
|
67
|
+
should_1.default.equal(builder.getSlashingSpans(), testSlashingSpans);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
describe('Transaction Validation', function () {
|
|
71
|
+
it('should build, decode, and validate a real withdrawUnbonded transaction', () => {
|
|
72
|
+
// Build the transaction with real parameters
|
|
73
|
+
builder
|
|
74
|
+
.slashingSpans(testSlashingSpans)
|
|
75
|
+
.sender({ address: senderAddress })
|
|
76
|
+
.validity({ firstValid: 3933, maxDuration: 64 })
|
|
77
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
|
|
78
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 100 });
|
|
79
|
+
// Set up material for decoding
|
|
80
|
+
const material = utils_1.default.getMaterial(statics_1.coins.get('tpolyx').network.type);
|
|
81
|
+
builder.material(material);
|
|
82
|
+
// Build the actual unsigned transaction
|
|
83
|
+
const unsignedTx = builder['buildTransaction']();
|
|
84
|
+
const registry = builder['_registry'];
|
|
85
|
+
// Decode the actual built transaction
|
|
86
|
+
const decodedTx = (0, txwrapper_polkadot_1.decode)(unsignedTx, {
|
|
87
|
+
metadataRpc: material.metadata,
|
|
88
|
+
registry: registry,
|
|
89
|
+
});
|
|
90
|
+
// Validate the decoded transaction structure
|
|
91
|
+
should_1.default.equal(decodedTx.method.name, 'withdrawUnbonded');
|
|
92
|
+
should_1.default.equal(decodedTx.method.pallet, 'staking');
|
|
93
|
+
const withdrawArgs = decodedTx.method.args;
|
|
94
|
+
should_1.default.equal(withdrawArgs.numSlashingSpans, testSlashingSpans);
|
|
95
|
+
// Now validate using the builder's validation method
|
|
96
|
+
should_1.default.doesNotThrow(() => {
|
|
97
|
+
builder.validateDecodedTransaction(decodedTx);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
it('should reject invalid transaction types', () => {
|
|
101
|
+
const mockDecodedTx = {
|
|
102
|
+
method: {
|
|
103
|
+
name: 'transfer',
|
|
104
|
+
pallet: 'balances',
|
|
105
|
+
args: {},
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
should_1.default.throws(() => {
|
|
109
|
+
builder.validateDecodedTransaction(mockDecodedTx);
|
|
110
|
+
}, /Invalid transaction type/);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
describe('From Raw Transaction', function () {
|
|
114
|
+
it('should rebuild from real withdrawUnbonded transaction', async () => {
|
|
115
|
+
// First build a transaction to get a real raw transaction
|
|
116
|
+
const originalBuilder = factory.getWithdrawUnbondedBuilder();
|
|
117
|
+
originalBuilder
|
|
118
|
+
.slashingSpans(testSlashingSpans)
|
|
119
|
+
.sender({ address: senderAddress })
|
|
120
|
+
.validity({ firstValid: 3933, maxDuration: 64 })
|
|
121
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
|
|
122
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 100 });
|
|
123
|
+
// Set up material
|
|
124
|
+
const material = utils_1.default.getMaterial(statics_1.coins.get('tpolyx').network.type);
|
|
125
|
+
originalBuilder.material(material);
|
|
126
|
+
// Build the transaction and get the serialized hex
|
|
127
|
+
const tx = await originalBuilder.build();
|
|
128
|
+
const rawTxHex = tx.toBroadcastFormat();
|
|
129
|
+
// Create a new builder and reconstruct from the transaction hex
|
|
130
|
+
const newBuilder = factory.getWithdrawUnbondedBuilder();
|
|
131
|
+
newBuilder.material(material);
|
|
132
|
+
newBuilder.from(rawTxHex);
|
|
133
|
+
// Verify the reconstructed builder has the same parameters
|
|
134
|
+
should_1.default.equal(newBuilder.getSlashingSpans(), testSlashingSpans);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aGRyYXdVbmJvbmRlZEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL3dpdGhkcmF3VW5ib25kZWRCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0Esc0VBQXVEO0FBQ3ZELDRDQUF1QztBQUN2QyxvREFBNEI7QUFDNUIsa0RBQTBCO0FBQzFCLDBDQUFtRztBQUNuRyw4Q0FBa0Q7QUFDbEQsbUVBQTJDO0FBRTNDLCtDQUFrRDtBQUVsRCxTQUFTLHFCQUFxQixDQUFDLE1BQWM7SUFDM0MsT0FBTztRQUNMLEVBQUUsRUFBRSxLQUFLO1FBQ1QsSUFBSSxFQUFFLDBCQUFlLENBQUMsZUFBZTtRQUNyQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNO1FBQy9CLE1BQU0sRUFBRSxFQUFFO1FBQ1YsT0FBTyxFQUFFLEVBQUU7UUFDWCxTQUFTLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUM3QixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNiLEVBQUUsRUFBRSxLQUFLO1lBQ1QsSUFBSSxFQUFFLGlCQUFpQjtZQUN2QixNQUFNLEVBQUUsb0JBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTztZQUNqQyxjQUFjLEVBQUUsb0VBQW9FO1lBQ3BGLFdBQVcsRUFBRSxHQUFHO1lBQ2hCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLEtBQUssRUFBRSxDQUFDO1lBQ1IsR0FBRyxFQUFFLENBQUM7WUFDTixXQUFXLEVBQUUsQ0FBQztZQUNkLGtCQUFrQixFQUFFLENBQUM7WUFDckIsU0FBUyxFQUFFLFVBQVU7WUFDckIsTUFBTSxFQUFFLEVBQUU7WUFDVixPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUM7S0FDSCxDQUFDO0FBQ0osQ0FBQztBQUVELFFBQVEsQ0FBQyxnQ0FBZ0MsRUFBRTtJQUN6QyxJQUFJLE9BQWdDLENBQUM7SUFDckMsTUFBTSxP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QzlCLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFMUIsMkRBQTJEO1lBQzNELGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVjb2RlZFNpZ25pbmdQYXlsb2FkIH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItY29yZSc7XG5pbXBvcnQgeyBkZWNvZGUgfSBmcm9tICdAc3Vic3RyYXRlL3R4d3JhcHBlci1wb2xrYWRvdCc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBXaXRoZHJhd1VuYm9uZGVkQnVpbGRlciwgVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi91dGlscyc7XG5cbmltcG9ydCB7IGFjY291bnRzLCByYXdUeCB9IGZyb20gJy4uLy4uL3Jlc291cmNlcyc7XG5cbmZ1bmN0aW9uIGNyZWF0ZU1vY2tUcmFuc2FjdGlvbih0eERhdGE6IHN0cmluZyk6IFBhcnRpYWw8VHJhbnNhY3Rpb24+IHtcbiAgcmV0dXJuIHtcbiAgICBpZDogJzEyMycsXG4gICAgdHlwZTogVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdyxcbiAgICB0b0Jyb2FkY2FzdEZvcm1hdDogKCkgPT4gdHhEYXRhLFxuICAgIGlucHV0czogW10sXG4gICAgb3V0cHV0czogW10sXG4gICAgc2lnbmF0dXJlOiBbJ21vY2stc2lnbmF0dXJlJ10sXG4gICAgdG9Kc29uOiAoKSA9PiAoe1xuICAgICAgaWQ6ICcxMjMnLFxuICAgICAgdHlwZTogJ1N0YWtpbmdXaXRoZHJhdycsXG4gICAgICBzZW5kZXI6IGFjY291bnRzLmFjY291bnQxLmFkZHJlc3MsXG4gICAgICByZWZlcmVuY2VCbG9jazogJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcsXG4gICAgICBibG9ja051bWJlcjogMTAwLFxuICAgICAgZ2VuZXNpc0hhc2g6ICcweCcsXG4gICAgICBub25jZTogMSxcbiAgICAgIHRpcDogMCxcbiAgICAgIHNwZWNWZXJzaW9uOiAxLFxuICAgICAgdHJhbnNhY3Rpb25WZXJzaW9uOiAxLFxuICAgICAgY2hhaW5OYW1lOiAnUG9seW1lc2gnLFxuICAgICAgaW5wdXRzOiBbXSxcbiAgICAgIG91dHB1dHM6IFtdLFxuICAgIH0pLFxuICB9O1xufVxuXG5kZXNjcmliZSgnUG9seXggV2l0aGRyYXdVbmJvbmRlZCBCdWlsZGVyJywgZnVuY3Rpb24gKCkge1xuICBsZXQgYnVpbGRlcjogV2l0aGRyYXdVbmJvbmRlZEJ1aWxkZXI7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3Rwb2x5eCcpKTtcblxuICBjb25zdCBzZW5kZXJBZGRyZXNzID0gYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcztcbiAgY29uc3QgdGVzdFNsYXNoaW5nU3BhbnMgPSAwO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGJ1aWxkZXIgPSBmYWN0b3J5LmdldFdpdGhkcmF3VW5ib25kZWRCdWlsZGVyKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzZXR0ZXIgdmFsaWRhdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIHNsYXNoaW5nIHNwYW5zJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3B5ID0gc2lub24uc3B5KGJ1aWxkZXIsICd2YWxpZGF0ZVZhbHVlJyk7XG4gICAgICBzaG91bGQudGhyb3dzKCgpID0+IGJ1aWxkZXIuc2xhc2hpbmdTcGFucygtMSksIC9WYWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8vKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci5zbGFzaGluZ1NwYW5zKDApKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRUd2ljZShzcHkpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQnVpbGQgYW5kIFNpZ24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIHdpdGhkcmF3IHVuYm9uZGVkIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYnVpbGRlclxuICAgICAgICAuc2xhc2hpbmdTcGFucyh0ZXN0U2xhc2hpbmdTcGFucylcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlckFkZHJlc3MgfSlcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJylcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMTAwIH0pO1xuXG4gICAgICBjb25zdCBtb2NrVHggPSBjcmVhdGVNb2NrVHJhbnNhY3Rpb24ocmF3VHgud2l0aGRyYXdVbmJvbmRlZC51bnNpZ25lZCk7XG4gICAgICBzaW5vbi5zdHViKGJ1aWxkZXIsICdidWlsZCcpLnJlc29sdmVzKG1vY2tUeCBhcyBUcmFuc2FjdGlvbik7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4KTtcblxuICAgICAgc2hvdWxkLmVxdWFsKGJ1aWxkZXIuZ2V0U2xhc2hpbmdTcGFucygpLCB0ZXN0U2xhc2hpbmdTcGFucyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdUcmFuc2FjdGlvbiBWYWxpZGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgYnVpbGQsIGRlY29kZSwgYW5kIHZhbGlkYXRlIGEgcmVhbCB3aXRoZHJhd1VuYm9uZGVkIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgICAgLy8gQnVpbGQgdGhlIHRyYW5zYWN0aW9uIHdpdGggcmVhbCBwYXJhbWV0ZXJzXG4gICAgICBidWlsZGVyXG4gICAgICAgIC5zbGFzaGluZ1NwYW5zKHRlc3RTbGFzaGluZ1NwYW5zKVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyQWRkcmVzcyB9KVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxMDAgfSk7XG5cbiAgICAgIC8vIFNldCB1cCBtYXRlcmlhbCBmb3IgZGVjb2RpbmdcbiAgICAgIGNvbnN0IG1hdGVyaWFsID0gdXRpbHMuZ2V0TWF0ZXJpYWwoY29pbnMuZ2V0KCd0cG9seXgnKS5uZXR3b3JrLnR5cGUpO1xuICAgICAgYnVpbGRlci5tYXRlcmlhbChtYXRlcmlhbCk7XG5cbiAgICAgIC8vIEJ1aWxkIHRoZSBhY3R1YWwgdW5zaWduZWQgdHJhbnNhY3Rpb25cbiAgICAgIGNvbnN0IHVuc2lnbmVkVHggPSBidWlsZGVyWydidWlsZFRyYW5zYWN0aW9uJ10oKTtcbiAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gYnVpbGRlclsnX3JlZ2lzdHJ5J107XG5cbiAgICAgIC8vIERlY29kZSB0aGUgYWN0dWFsIGJ1aWx0IHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCBkZWNvZGVkVHggPSBkZWNvZGUodW5zaWduZWRUeCwge1xuICAgICAgICBtZXRhZGF0YVJwYzogbWF0ZXJpYWwubWV0YWRhdGEsXG4gICAgICAgIHJlZ2lzdHJ5OiByZWdpc3RyeSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBWYWxpZGF0ZSB0aGUgZGVjb2RlZCB0cmFuc2FjdGlvbiBzdHJ1Y3R1cmVcbiAgICAgIHNob3VsZC5lcXVhbChkZWNvZGVkVHgubWV0aG9kLm5hbWUsICd3aXRoZHJhd1VuYm9uZGVkJyk7XG4gICAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFR4Lm1ldGhvZC5wYWxsZXQsICdzdGFraW5nJyk7XG5cbiAgICAgIGNvbnN0IHdpdGhkcmF3QXJncyA9IGRlY29kZWRUeC5tZXRob2QuYXJncyBhcyB7IG51bVNsYXNoaW5nU3BhbnM6IG51bWJlciB9O1xuICAgICAgc2hvdWxkLmVxdWFsKHdpdGhkcmF3QXJncy5udW1TbGFzaGluZ1NwYW5zLCB0ZXN0U2xhc2hpbmdTcGFucyk7XG5cbiAgICAgIC8vIE5vdyB2YWxpZGF0ZSB1c2luZyB0aGUgYnVpbGRlcidzIHZhbGlkYXRpb24gbWV0aG9kXG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci52YWxpZGF0ZURlY29kZWRUcmFuc2FjdGlvbihkZWNvZGVkVHgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBpbnZhbGlkIHRyYW5zYWN0aW9uIHR5cGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgbW9ja0RlY29kZWRUeDogRGVjb2RlZFNpZ25pbmdQYXlsb2FkID0ge1xuICAgICAgICBtZXRob2Q6IHtcbiAgICAgICAgICBuYW1lOiAndHJhbnNmZXInLFxuICAgICAgICAgIHBhbGxldDogJ2JhbGFuY2VzJyxcbiAgICAgICAgICBhcmdzOiB7fSxcbiAgICAgICAgfSxcbiAgICAgIH0gYXMgdW5rbm93biBhcyBEZWNvZGVkU2lnbmluZ1BheWxvYWQ7XG5cbiAgICAgIHNob3VsZC50aHJvd3MoKCkgPT4ge1xuICAgICAgICBidWlsZGVyLnZhbGlkYXRlRGVjb2RlZFRyYW5zYWN0aW9uKG1vY2tEZWNvZGVkVHgpO1xuICAgICAgfSwgL0ludmFsaWQgdHJhbnNhY3Rpb24gdHlwZS8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRnJvbSBSYXcgVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZWJ1aWxkIGZyb20gcmVhbCB3aXRoZHJhd1VuYm9uZGVkIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gRmlyc3QgYnVpbGQgYSB0cmFuc2FjdGlvbiB0byBnZXQgYSByZWFsIHJhdyB0cmFuc2FjdGlvblxuICAgICAgY29uc3Qgb3JpZ2luYWxCdWlsZGVyID0gZmFjdG9yeS5nZXRXaXRoZHJhd1VuYm9uZGVkQnVpbGRlcigpO1xuICAgICAgb3JpZ2luYWxCdWlsZGVyXG4gICAgICAgIC5zbGFzaGluZ1NwYW5zKHRlc3RTbGFzaGluZ1NwYW5zKVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyQWRkcmVzcyB9KVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxMDAgfSk7XG5cbiAgICAgIC8vIFNldCB1cCBtYXRlcmlhbFxuICAgICAgY29uc3QgbWF0ZXJpYWwgPSB1dGlscy5nZXRNYXRlcmlhbChjb2lucy5nZXQoJ3Rwb2x5eCcpLm5ldHdvcmsudHlwZSk7XG4gICAgICBvcmlnaW5hbEJ1aWxkZXIubWF0ZXJpYWwobWF0ZXJpYWwpO1xuXG4gICAgICAvLyBCdWlsZCB0aGUgdHJhbnNhY3Rpb24gYW5kIGdldCB0aGUgc2VyaWFsaXplZCBoZXhcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgb3JpZ2luYWxCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCByYXdUeEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIC8vIENyZWF0ZSBhIG5ldyBidWlsZGVyIGFuZCByZWNvbnN0cnVjdCBmcm9tIHRoZSB0cmFuc2FjdGlvbiBoZXhcbiAgICAgIGNvbnN0IG5ld0J1aWxkZXIgPSBmYWN0b3J5LmdldFdpdGhkcmF3VW5ib25kZWRCdWlsZGVyKCk7XG4gICAgICBuZXdCdWlsZGVyLm1hdGVyaWFsKG1hdGVyaWFsKTtcbiAgICAgIG5ld0J1aWxkZXIuZnJvbShyYXdUeEhleCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgcmVjb25zdHJ1Y3RlZCBidWlsZGVyIGhhcyB0aGUgc2FtZSBwYXJhbWV0ZXJzXG4gICAgICBzaG91bGQuZXF1YWwobmV3QnVpbGRlci5nZXRTbGFzaGluZ1NwYW5zKCksIHRlc3RTbGFzaGluZ1NwYW5zKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../test/unit/utils.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,143 @@
|
|
|
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
|
+
const should_1 = __importDefault(require("should"));
|
|
7
|
+
const src_1 = require("../../src");
|
|
8
|
+
const resources_1 = require("../resources");
|
|
9
|
+
const resources_2 = require("../../src/resources");
|
|
10
|
+
describe('Polyx Utils', () => {
|
|
11
|
+
// Create a proper Material object from testnetMaterial
|
|
12
|
+
const material = {
|
|
13
|
+
genesisHash: resources_2.testnetMaterial.genesisHash,
|
|
14
|
+
chainName: resources_2.testnetMaterial.chainName,
|
|
15
|
+
specName: resources_2.testnetMaterial.specName,
|
|
16
|
+
specVersion: resources_2.testnetMaterial.specVersion,
|
|
17
|
+
txVersion: resources_2.testnetMaterial.txVersion,
|
|
18
|
+
metadata: resources_2.testnetMaterial.metadata,
|
|
19
|
+
};
|
|
20
|
+
describe('decodeTransaction', () => {
|
|
21
|
+
it('should decode a signed transfer transaction and identify method name', () => {
|
|
22
|
+
const decoded = src_1.utils.decodeTransaction(resources_1.rawTx.transfer.signed, material);
|
|
23
|
+
should_1.default.exist(decoded);
|
|
24
|
+
decoded.should.have.property('method');
|
|
25
|
+
decoded.method.should.have.property('pallet');
|
|
26
|
+
decoded.method.should.have.property('name');
|
|
27
|
+
// Check that it's a balances transfer
|
|
28
|
+
decoded.method.pallet.should.equal('balances');
|
|
29
|
+
decoded.method.name.should.equal('transferWithMemo');
|
|
30
|
+
});
|
|
31
|
+
it('should decode an unsigned transfer transaction and identify method name', () => {
|
|
32
|
+
const decoded = src_1.utils.decodeTransaction(resources_1.rawTx.transfer.unsigned, material);
|
|
33
|
+
should_1.default.exist(decoded);
|
|
34
|
+
decoded.should.have.property('method');
|
|
35
|
+
decoded.method.should.have.property('pallet');
|
|
36
|
+
decoded.method.should.have.property('name');
|
|
37
|
+
// Check that it's a balances transfer
|
|
38
|
+
decoded.method.pallet.should.equal('balances');
|
|
39
|
+
decoded.method.name.should.equal('transferWithMemo');
|
|
40
|
+
});
|
|
41
|
+
it('should decode a CDD registration transaction and identify method name', () => {
|
|
42
|
+
const decoded = src_1.utils.decodeTransaction(resources_1.rawTx.cddTransaction.signed, material);
|
|
43
|
+
should_1.default.exist(decoded);
|
|
44
|
+
decoded.should.have.property('method');
|
|
45
|
+
decoded.method.should.have.property('pallet');
|
|
46
|
+
decoded.method.should.have.property('name');
|
|
47
|
+
// Check that it's a CDD transaction
|
|
48
|
+
decoded.method.pallet.should.equal('identity');
|
|
49
|
+
decoded.method.name.should.equal('cddRegisterDidWithCdd');
|
|
50
|
+
});
|
|
51
|
+
it('should decode a staking bond transaction and identify method name', () => {
|
|
52
|
+
const decoded = src_1.utils.decodeTransaction(resources_1.stakingTx.bond.signed, material);
|
|
53
|
+
should_1.default.exist(decoded);
|
|
54
|
+
decoded.should.have.property('method');
|
|
55
|
+
decoded.method.should.have.property('pallet');
|
|
56
|
+
decoded.method.should.have.property('name');
|
|
57
|
+
// Check that it's a staking bond
|
|
58
|
+
decoded.method.pallet.should.equal('staking');
|
|
59
|
+
decoded.method.name.should.equal('bond');
|
|
60
|
+
});
|
|
61
|
+
it('should decode a staking unbond transaction and identify method name', () => {
|
|
62
|
+
const decoded = src_1.utils.decodeTransaction(resources_1.stakingTx.unbond.signed, material);
|
|
63
|
+
should_1.default.exist(decoded);
|
|
64
|
+
decoded.should.have.property('method');
|
|
65
|
+
decoded.method.should.have.property('pallet');
|
|
66
|
+
decoded.method.should.have.property('name');
|
|
67
|
+
// Check that it's a staking unbond
|
|
68
|
+
decoded.method.pallet.should.equal('staking');
|
|
69
|
+
decoded.method.name.should.equal('unbond');
|
|
70
|
+
});
|
|
71
|
+
it('should decode a batch transaction and identify method name', () => {
|
|
72
|
+
const decoded = src_1.utils.decodeTransaction(resources_1.stakingTx.batch.bondAndNominate.signed, material);
|
|
73
|
+
should_1.default.exist(decoded);
|
|
74
|
+
decoded.should.have.property('method');
|
|
75
|
+
decoded.method.should.have.property('pallet');
|
|
76
|
+
decoded.method.should.have.property('name');
|
|
77
|
+
// Check that it's a batch transaction
|
|
78
|
+
decoded.method.pallet.should.equal('utility');
|
|
79
|
+
decoded.method.name.should.equal('batchAll');
|
|
80
|
+
// Check the batch calls (handle potential null/undefined)
|
|
81
|
+
decoded.method.should.have.property('args');
|
|
82
|
+
decoded.method.args.should.have.property('calls');
|
|
83
|
+
if (Array.isArray(decoded.method.args.calls)) {
|
|
84
|
+
decoded.method.args.calls.should.be.an.Array();
|
|
85
|
+
decoded.method.args.calls.length.should.equal(2);
|
|
86
|
+
// First call should be bond
|
|
87
|
+
if (decoded.method.args.calls[0]) {
|
|
88
|
+
decoded.method.args.calls[0].should.have.property('callIndex');
|
|
89
|
+
}
|
|
90
|
+
// Second call should be nominate
|
|
91
|
+
if (decoded.method.args.calls[1]) {
|
|
92
|
+
decoded.method.args.calls[1].should.have.property('callIndex');
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
it('should decode a preApprove asset transaction and identify method name', () => {
|
|
97
|
+
const decoded = src_1.utils.decodeTransaction(resources_1.rawTx.preApproveAsset.signed, material);
|
|
98
|
+
should_1.default.exist(decoded);
|
|
99
|
+
decoded.should.have.property('method');
|
|
100
|
+
decoded.method.should.have.property('pallet');
|
|
101
|
+
decoded.method.should.have.property('name');
|
|
102
|
+
// Check that it's an asset preApprove
|
|
103
|
+
decoded.method.pallet.should.equal('asset');
|
|
104
|
+
decoded.method.name.should.equal('preApproveAsset');
|
|
105
|
+
});
|
|
106
|
+
it('should decode a token transfer transaction and identify method name', () => {
|
|
107
|
+
const decoded = src_1.utils.decodeTransaction(resources_1.rawTx.tokenTransfer.signed, material);
|
|
108
|
+
should_1.default.exist(decoded);
|
|
109
|
+
decoded.should.have.property('method');
|
|
110
|
+
decoded.method.should.have.property('pallet');
|
|
111
|
+
decoded.method.should.have.property('name');
|
|
112
|
+
// Check that it's a settlement transaction
|
|
113
|
+
decoded.method.pallet.should.equal('settlement');
|
|
114
|
+
decoded.method.name.should.equal('addAndAffirmWithMediators');
|
|
115
|
+
});
|
|
116
|
+
it('should decode unstake transaction and identify method name', () => {
|
|
117
|
+
const decoded = src_1.utils.decodeTransaction(resources_1.rawTx.unstake.signed, material);
|
|
118
|
+
should_1.default.exist(decoded);
|
|
119
|
+
decoded.should.have.property('method');
|
|
120
|
+
decoded.method.should.have.property('pallet');
|
|
121
|
+
decoded.method.should.have.property('name');
|
|
122
|
+
// Check that it's a batch unstaking transaction
|
|
123
|
+
decoded.method.pallet.should.equal('utility');
|
|
124
|
+
decoded.method.name.should.equal('batchAll');
|
|
125
|
+
});
|
|
126
|
+
it('should decode withdraw unbonded transaction and identify method name', () => {
|
|
127
|
+
const decoded = src_1.utils.decodeTransaction(resources_1.rawTx.withdrawUnbonded.signed, material);
|
|
128
|
+
should_1.default.exist(decoded);
|
|
129
|
+
decoded.should.have.property('method');
|
|
130
|
+
decoded.method.should.have.property('pallet');
|
|
131
|
+
decoded.method.should.have.property('name');
|
|
132
|
+
// Check that it's a staking withdraw unbonded
|
|
133
|
+
decoded.method.pallet.should.equal('staking');
|
|
134
|
+
decoded.method.name.should.equal('withdrawUnbonded');
|
|
135
|
+
});
|
|
136
|
+
it('should throw error for invalid transaction hex', () => {
|
|
137
|
+
should_1.default.throws(() => {
|
|
138
|
+
src_1.utils.decodeTransaction('0xinvalid', material);
|
|
139
|
+
}, /Failed to decode transaction/);
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsbUNBQWtDO0FBQ2xDLDRDQUFnRDtBQUNoRCxtREFBc0Q7QUFLdEQsUUFBUSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7SUFDM0IsdURBQXVEO0lBQ3ZELE1BQU0sUUFBUSxHQUFhO1FBQ3pCLFdBQVcsRUFBRSwyQkFBZSxDQUFDLFdBQVc7UUFDeEMsU0FBUyxFQUFFLDJCQUFlLENBQUMsU0FBUztRQUNwQyxRQUFRLEVBQUUsMkJBQWUsQ0FBQyxRQUFRO1FBQ2xDLFdBQVcsRUFBRSwyQkFBZSxDQUFDLFdBQVc7UUFDeEMsU0FBUyxFQUFFLDJCQUFlLENBQUMsU0FBUztRQUNwQyxRQUFRLEVBQUUsMkJBQWUsQ0FBQyxRQUF5QjtLQUNwRCxDQUFDO0lBRUYsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtRQUNqQyxFQUFFLENBQUMsc0VBQXNFLEVBQUUsR0FBRyxFQUFFO1lBQzlFLE1BQU0sT0FBTyxHQUFHLFdBQUssQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFFekUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU1QyxzQ0FBc0M7WUFDdEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMs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QUcsRUFBRTtZQUM5RSxNQUFNLE9BQU8sR0FBRyxXQUFLLENBQUMsaUJBQWlCLENBQUMsaUJBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFFakYsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU1Qyw4Q0FBOEM7WUFDOUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM5QyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsZ0RBQWdELEVBQUUsR0FBRyxFQUFFO1lBQ3hELGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDakIsV0FBSyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNqRCxDQUFDLEVBQUUsOEJBQThCLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyB1dGlscyB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgeyByYXdUeCwgc3Rha2luZ1R4IH0gZnJvbSAnLi4vcmVzb3VyY2VzJztcbmltcG9ydCB7IHRlc3RuZXRNYXRlcmlhbCB9IGZyb20gJy4uLy4uL3NyYy9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgSW50ZXJmYWNlIH0gZnJvbSAnQGJpdGdvL2Fic3RyYWN0LXN1YnN0cmF0ZSc7XG5cbnR5cGUgTWF0ZXJpYWwgPSBJbnRlcmZhY2UuTWF0ZXJpYWw7XG5cbmRlc2NyaWJlKCdQb2x5eCBVdGlscycsICgpID0+IHtcbiAgLy8gQ3JlYXRlIGEgcHJvcGVyIE1hdGVyaWFsIG9iamVjdCBmcm9tIHRlc3RuZXRNYXRlcmlhbFxuICBjb25zdCBtYXRlcmlhbDogTWF0ZXJpYWwgPSB7XG4gICAgZ2VuZXNpc0hhc2g6IHRlc3RuZXRNYXRlcmlhbC5nZW5lc2lzSGFzaCxcbiAgICBjaGFpbk5hbWU6IHRlc3RuZXRNYXRlcmlhbC5jaGFpbk5hbWUsXG4gICAgc3BlY05hbWU6IHRlc3RuZXRNYXRlcmlhbC5zcGVjTmFtZSxcbiAgICBzcGVjVmVyc2lvbjogdGVzdG5ldE1hdGVyaWFsLnNwZWNWZXJzaW9uLFxuICAgIHR4VmVyc2lvbjogdGVzdG5ldE1hdGVyaWFsLnR4VmVyc2lvbixcbiAgICBtZXRhZGF0YTogdGVzdG5ldE1hdGVyaWFsLm1ldGFkYXRhIGFzIGAweCR7c3RyaW5nfWAsXG4gIH07XG5cbiAgZGVzY3JpYmUoJ2RlY29kZVRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZGVjb2RlIGEgc2lnbmVkIHRyYW5zZmVyIHRyYW5zYWN0aW9uIGFuZCBpZGVudGlmeSBtZXRob2QgbmFtZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSB1dGlscy5kZWNvZGVUcmFuc2FjdGlvbihyYXdUeC50cmFuc2Zlci5zaWduZWQsIG1hdGVyaWFsKTtcblxuICAgICAgc2hvdWxkLmV4aXN0KGRlY29kZWQpO1xuICAgICAgZGVjb2RlZC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbWV0aG9kJyk7XG4gICAgICBkZWNvZGVkLm1ldGhvZC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncGFsbGV0Jyk7XG4gICAgICBkZWNvZGVkLm1ldGhvZC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbmFtZScpO1xuXG4gICAgICAvLyBDaGVjayB0aGF0IGl0J3MgYSBiYWxhbmNlcyB0cmFuc2ZlclxuICAgICAgZGVjb2RlZC5tZXRob2QucGFsbGV0LnNob3VsZC5lcXVhbCgnYmFsYW5jZXMnKTtcbiAgICAgIGRlY29kZWQubWV0aG9kLm5hbWUuc2hvdWxkLmVxdWFsKCd0cmFuc2ZlcldpdGhNZW1vJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlY29kZSBhbiB1bnNpZ25lZCB0cmFuc2ZlciB0cmFuc2FjdGlvbiBhbmQgaWRlbnRpZnkgbWV0aG9kIG5hbWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkZWNvZGVkID0gdXRpbHMuZGVjb2RlVHJhbnNhY3Rpb24ocmF3VHgudHJhbnNmZXIudW5zaWduZWQsIG1hdGVyaWFsKTtcblxuICAgICAgc2hvdWxkLmV4aXN0KGRlY29kZWQpO1xuICAgICAgZGVjb2RlZC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbWV0aG9kJyk7XG4gICAgICBkZWNvZGVkLm1ldGhvZC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncGFsbGV0Jyk7XG4gICAgICBkZWNvZGVkLm1ldGhvZC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbmFtZScpO1xuXG4gICAgICAvLyBDaGVjayB0aGF0IGl0J3MgYSBiYWxhbmNlcyB0cmFuc2ZlclxuICAgICAgZGVjb2RlZC5tZXRob2QucGFsbGV0LnNob3VsZC5lcXVhbCgnYmFsYW5jZXMnKTtcbiAgICAgIGRlY29kZWQubWV0aG9kLm5hbWUuc2hvdWxkLmVxdWFsKCd0cmFuc2ZlcldpdGhNZW1vJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlY29kZSBhIENERCByZWdpc3RyYXRpb24gdHJhbnNhY3Rpb24gYW5kIGlkZW50aWZ5IG1ldGhvZCBuYW1lJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGVjb2RlZCA9IHV0aWxzLmRlY29kZVRyYW5zYWN0aW9uKHJhd1R4LmNkZFRyYW5zYWN0aW9uLnNpZ25lZCwgbWF0ZXJpYWwpO1xuXG4gICAgICBzaG91bGQuZXhpc3QoZGVjb2RlZCk7XG4gICAgICBkZWNvZGVkLnNob3VsZC5oYXZlLnByb3BlcnR5KCdtZXRob2QnKTtcbiAgICAgIGRlY29kZWQubWV0aG9kLnNob3VsZC5oYXZlLnByb3BlcnR5KCdwYWxsZXQnKTtcbiAgICAgIGRlY29kZWQubWV0aG9kLnNob3VsZC5oYXZlLnByb3BlcnR5KCduYW1lJyk7XG5cbiAgICAgIC8vIENoZWNrIHRoYXQgaXQncyBhIENERCB0cmFuc2FjdGlvblxuICAgICAgZGVjb2RlZC5tZXRob2QucGFsbGV0LnNob3VsZC5lcXVhbCgnaWRlbnRpdHknKTtcbiAgICAgIGRlY29kZWQubWV0aG9kLm5hbWUuc2hvdWxkLmVxdWFsKCdjZGRSZWdpc3RlckRpZFdpdGhDZGQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGVjb2RlIGEgc3Rha2luZyBib25kIHRyYW5zYWN0aW9uIGFuZCBpZGVudGlmeSBtZXRob2QgbmFtZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSB1dGlscy5kZWNvZGVUcmFuc2FjdGlvbihzdGFraW5nVHguYm9uZC5zaWduZWQsIG1hdGVyaWFsKTtcblxuICAgICAgc2hvdWxkLmV4aXN0KGRlY29kZWQpO1xuICAgICAgZGVjb2RlZC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbWV0aG9kJyk7XG4gICAgICBkZWNvZGVkLm1ldGhvZC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncGFsbGV0Jyk7XG4gICAgICBkZWNvZGVkLm1ldGhvZC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbmFtZScpO1xuXG4gICAgICAvLyBDaGVjayB0aGF0IGl0J3MgYSBzdGFraW5nIGJvbmRcbiAgICAgIGRlY29kZWQubWV0aG9kLnBhbGxldC5zaG91bGQuZXF1YWwoJ3N0YWtpbmcnKTtcbiAgICAgIGRlY29kZWQubWV0aG9kLm5hbWUuc2hvdWxkLmVxdWFsKCdib25kJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlY29kZSBhIHN0YWtpbmcgdW5ib25kIHRyYW5zYWN0aW9uIGFuZCBpZGVudGlmeSBtZXRob2QgbmFtZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSB1dGlscy5kZWNvZGVUcmFuc2FjdGlvbihzdGFraW5nVHgudW5ib25kLnNpZ25lZCwgbWF0ZXJpYWwpO1xuXG4gICAgICBzaG91bGQuZXhpc3QoZGVjb2RlZCk7XG4gICAgICBkZWNvZGVkLnNob3VsZC5oYXZlLnByb3BlcnR5KCdtZXRob2QnKTtcbiAgICAgIGRlY29kZWQubWV0aG9kLnNob3VsZC5oYXZlLnByb3BlcnR5KCdwYWxsZXQnKTtcbiAgICAgIGRlY29kZWQubWV0aG9kLnNob3VsZC5oYXZlLnByb3BlcnR5KCduYW1lJyk7XG5cbiAgICAgIC8vIENoZWNrIHRoYXQgaXQncyBhIHN0YWtpbmcgdW5ib25kXG4gICAgICBkZWNvZGVkLm1ldGhvZC5wYWxsZXQuc2hvdWxkLmVxdWFsKCdzdGFraW5nJyk7XG4gICAgICBkZWNvZGVkLm1ldGhvZC5uYW1lLnNob3VsZC5lcXVhbCgndW5ib25kJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlY29kZSBhIGJhdGNoIHRyYW5zYWN0aW9uIGFuZCBpZGVudGlmeSBtZXRob2QgbmFtZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSB1dGlscy5kZWNvZGVUcmFuc2FjdGlvbihzdGFraW5nVHguYmF0Y2guYm9uZEFuZE5vbWluYXRlLnNpZ25lZCwgbWF0ZXJpYWwpO1xuXG4gICAgICBzaG91bGQuZXhpc3QoZGVjb2RlZCk7XG4gICAgICBkZWNvZGVkLnNob3VsZC5oYXZlLnByb3BlcnR5KCdtZXRob2QnKTtcbiAgICAgIGRlY29kZWQubWV0aG9kLnNob3VsZC5oYXZlLnByb3BlcnR5KCdwYWxsZXQnKTtcbiAgICAgIGRlY29kZWQubWV0aG9kLnNob3VsZC5oYXZlLnByb3BlcnR5KCduYW1lJyk7XG5cbiAgICAgIC8vIENoZWNrIHRoYXQgaXQncyBhIGJhdGNoIHRyYW5zYWN0aW9uXG4gICAgICBkZWNvZGVkLm1ldGhvZC5wYWxsZXQuc2hvdWxkLmVxdWFsKCd1dGlsaXR5Jyk7XG4gICAgICBkZWNvZGVkLm1ldGhvZC5uYW1lLnNob3VsZC5lcXVhbCgnYmF0Y2hBbGwnKTtcblxuICAgICAgLy8gQ2hlY2sgdGhlIGJhdGNoIGNhbGxzIChoYW5kbGUgcG90ZW50aWFsIG51bGwvdW5kZWZpbmVkKVxuICAgICAgZGVjb2RlZC5tZXRob2Quc2hvdWxkLmhhdmUucHJvcGVydHkoJ2FyZ3MnKTtcbiAgICAgIGRlY29kZWQubWV0aG9kLmFyZ3Muc2hvdWxkLmhhdmUucHJvcGVydHkoJ2NhbGxzJyk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkZWNvZGVkLm1ldGhvZC5hcmdzLmNhbGxzKSkge1xuICAgICAgICBkZWNvZGVkLm1ldGhvZC5hcmdzLmNhbGxzLnNob3VsZC5iZS5hbi5BcnJheSgpO1xuICAgICAgICBkZWNvZGVkLm1ldGhvZC5hcmdzLmNhbGxzLmxlbmd0aC5zaG91bGQuZXF1YWwoMik7XG5cbiAgICAgICAgLy8gRmlyc3QgY2FsbCBzaG91bGQgYmUgYm9uZFxuICAgICAgICBpZiAoZGVjb2RlZC5tZXRob2QuYXJncy5jYWxsc1swXSkge1xuICAgICAgICAgIGRlY29kZWQubWV0aG9kLmFyZ3MuY2FsbHNbMF0uc2hvdWxkLmhhdmUucHJvcGVydHkoJ2NhbGxJbmRleCcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNlY29uZCBjYWxsIHNob3VsZCBiZSBub21pbmF0ZVxuICAgICAgICBpZiAoZGVjb2RlZC5tZXRob2QuYXJncy5jYWxsc1sxXSkge1xuICAgICAgICAgIGRlY29kZWQubWV0aG9kLmFyZ3MuY2FsbHNbMV0uc2hvdWxkLmhhdmUucHJvcGVydHkoJ2NhbGxJbmRleCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlY29kZSBhIHByZUFwcHJvdmUgYXNzZXQgdHJhbnNhY3Rpb24gYW5kIGlkZW50aWZ5IG1ldGhvZCBuYW1lJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGVjb2RlZCA9IHV0aWxzLmRlY29kZVRyYW5zYWN0aW9uKHJhd1R4LnByZUFwcHJvdmVBc3NldC5zaWduZWQsIG1hdGVyaWFsKTtcblxuICAgICAgc2hvdWxkLmV4aXN0KGRlY29kZWQpO1xuICAgICAgZGVjb2RlZC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbWV0aG9kJyk7XG4gICAgICBkZWNvZGVkLm1ldGhvZC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncGFsbGV0Jyk7XG4gICAgICBkZWNvZGVkLm1ldGhvZC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbmFtZScpO1xuXG4gICAgICAvLyBDaGVjayB0aGF0IGl0J3MgYW4gYXNzZXQgcHJlQXBwcm92ZVxuICAgICAgZGVjb2RlZC5tZXRob2QucGFsbGV0LnNob3VsZC5lcXVhbCgnYXNzZXQnKTtcbiAgICAgIGRlY29kZWQubWV0aG9kLm5hbWUuc2hvdWxkLmVxdWFsKCdwcmVBcHByb3ZlQXNzZXQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGVjb2RlIGEgdG9rZW4gdHJhbnNmZXIgdHJhbnNhY3Rpb24gYW5kIGlkZW50aWZ5IG1ldGhvZCBuYW1lJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGVjb2RlZCA9IHV0aWxzLmRlY29kZVRyYW5zYWN0aW9uKHJhd1R4LnRva2VuVHJhbnNmZXIuc2lnbmVkLCBtYXRlcmlhbCk7XG5cbiAgICAgIHNob3VsZC5leGlzdChkZWNvZGVkKTtcbiAgICAgIGRlY29kZWQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ21ldGhvZCcpO1xuICAgICAgZGVjb2RlZC5tZXRob2Quc2hvdWxkLmhhdmUucHJvcGVydHkoJ3BhbGxldCcpO1xuICAgICAgZGVjb2RlZC5tZXRob2Quc2hvdWxkLmhhdmUucHJvcGVydHkoJ25hbWUnKTtcblxuICAgICAgLy8gQ2hlY2sgdGhhdCBpdCdzIGEgc2V0dGxlbWVudCB0cmFuc2FjdGlvblxuICAgICAgZGVjb2RlZC5tZXRob2QucGFsbGV0LnNob3VsZC5lcXVhbCgnc2V0dGxlbWVudCcpO1xuICAgICAgZGVjb2RlZC5tZXRob2QubmFtZS5zaG91bGQuZXF1YWwoJ2FkZEFuZEFmZmlybVdpdGhNZWRpYXRvcnMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGVjb2RlIHVuc3Rha2UgdHJhbnNhY3Rpb24gYW5kIGlkZW50aWZ5IG1ldGhvZCBuYW1lJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGVjb2RlZCA9IHV0aWxzLmRlY29kZVRyYW5zYWN0aW9uKHJhd1R4LnVuc3Rha2Uuc2lnbmVkLCBtYXRlcmlhbCk7XG5cbiAgICAgIHNob3VsZC5leGlzdChkZWNvZGVkKTtcbiAgICAgIGRlY29kZWQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ21ldGhvZCcpO1xuICAgICAgZGVjb2RlZC5tZXRob2Quc2hvdWxkLmhhdmUucHJvcGVydHkoJ3BhbGxldCcpO1xuICAgICAgZGVjb2RlZC5tZXRob2Quc2hvdWxkLmhhdmUucHJvcGVydHkoJ25hbWUnKTtcblxuICAgICAgLy8gQ2hlY2sgdGhhdCBpdCdzIGEgYmF0Y2ggdW5zdGFraW5nIHRyYW5zYWN0aW9uXG4gICAgICBkZWNvZGVkLm1ldGhvZC5wYWxsZXQuc2hvdWxkLmVxdWFsKCd1dGlsaXR5Jyk7XG4gICAgICBkZWNvZGVkLm1ldGhvZC5uYW1lLnNob3VsZC5lcXVhbCgnYmF0Y2hBbGwnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGVjb2RlIHdpdGhkcmF3IHVuYm9uZGVkIHRyYW5zYWN0aW9uIGFuZCBpZGVudGlmeSBtZXRob2QgbmFtZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSB1dGlscy5kZWNvZGVUcmFuc2FjdGlvbihyYXdUeC53aXRoZHJhd1VuYm9uZGVkLnNpZ25lZCwgbWF0ZXJpYWwpO1xuXG4gICAgICBzaG91bGQuZXhpc3QoZGVjb2RlZCk7XG4gICAgICBkZWNvZGVkLnNob3VsZC5oYXZlLnByb3BlcnR5KCdtZXRob2QnKTtcbiAgICAgIGRlY29kZWQubWV0aG9kLnNob3VsZC5oYXZlLnByb3BlcnR5KCdwYWxsZXQnKTtcbiAgICAgIGRlY29kZWQubWV0aG9kLnNob3VsZC5oYXZlLnByb3BlcnR5KCduYW1lJyk7XG5cbiAgICAgIC8vIENoZWNrIHRoYXQgaXQncyBhIHN0YWtpbmcgd2l0aGRyYXcgdW5ib25kZWRcbiAgICAgIGRlY29kZWQubWV0aG9kLnBhbGxldC5zaG91bGQuZXF1YWwoJ3N0YWtpbmcnKTtcbiAgICAgIGRlY29kZWQubWV0aG9kLm5hbWUuc2hvdWxkLmVxdWFsKCd3aXRoZHJhd1VuYm9uZGVkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBpbnZhbGlkIHRyYW5zYWN0aW9uIGhleCcsICgpID0+IHtcbiAgICAgIHNob3VsZC50aHJvd3MoKCkgPT4ge1xuICAgICAgICB1dGlscy5kZWNvZGVUcmFuc2FjdGlvbignMHhpbnZhbGlkJywgbWF0ZXJpYWwpO1xuICAgICAgfSwgL0ZhaWxlZCB0byBkZWNvZGUgdHJhbnNhY3Rpb24vKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|