@bitgo-beta/sdk-coin-polyx 1.0.0-alpha.21 → 1.0.0-alpha.211
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/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/lib/baseBuilder.d.ts +24 -0
- package/dist/src/lib/baseBuilder.d.ts.map +1 -0
- package/dist/src/lib/baseBuilder.js +31 -0
- package/dist/src/lib/batchStakingBuilder.d.ts +79 -0
- package/dist/src/lib/batchStakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/batchStakingBuilder.js +302 -0
- package/dist/src/lib/batchUnstakingBuilder.d.ts +39 -0
- package/dist/src/lib/batchUnstakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/batchUnstakingBuilder.js +129 -0
- package/dist/src/lib/bondExtraBuilder.d.ts +37 -0
- package/dist/src/lib/bondExtraBuilder.d.ts.map +1 -0
- package/dist/src/lib/bondExtraBuilder.js +103 -0
- package/dist/src/lib/constants.d.ts +21 -0
- package/dist/src/lib/constants.d.ts.map +1 -0
- package/dist/src/lib/constants.js +24 -0
- package/dist/src/lib/hexTokenTransferBuilder.d.ts +24 -0
- package/dist/src/lib/hexTokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/hexTokenTransferBuilder.js +46 -0
- package/dist/src/lib/hexTransferBuilder.d.ts +28 -0
- package/dist/src/lib/hexTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/hexTransferBuilder.js +51 -0
- package/dist/src/lib/iface.d.ts +249 -0
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +48 -1
- package/dist/src/lib/index.d.ts +36 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +82 -5
- package/dist/src/lib/nominateBuilder.d.ts +18 -0
- package/dist/src/lib/nominateBuilder.d.ts.map +1 -0
- package/dist/src/lib/nominateBuilder.js +101 -0
- package/dist/src/lib/preApproveAssetBuilder.d.ts +33 -0
- package/dist/src/lib/preApproveAssetBuilder.d.ts.map +1 -0
- package/dist/src/lib/preApproveAssetBuilder.js +77 -0
- package/dist/src/lib/registerDidWithCDDBuilder.d.ts +7 -2
- package/dist/src/lib/registerDidWithCDDBuilder.d.ts.map +1 -1
- package/dist/src/lib/registerDidWithCDDBuilder.js +22 -3
- package/dist/src/lib/rejectInstructionBuilder.d.ts +29 -0
- package/dist/src/lib/rejectInstructionBuilder.d.ts.map +1 -0
- package/dist/src/lib/rejectInstructionBuilder.js +89 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts +64 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/tokenTransferBuilder.js +167 -0
- package/dist/src/lib/transaction.d.ts +30 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +211 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +59 -1
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +288 -8
- package/dist/src/lib/transferBuilder.d.ts +4 -2
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +12 -5
- package/dist/src/lib/txnSchema.d.ts +67 -0
- package/dist/src/lib/txnSchema.d.ts.map +1 -1
- package/dist/src/lib/txnSchema.js +231 -2
- package/dist/src/lib/unbondBuilder.d.ts +37 -0
- package/dist/src/lib/unbondBuilder.d.ts.map +1 -0
- package/dist/src/lib/unbondBuilder.js +100 -0
- package/dist/src/lib/utils.d.ts +40 -0
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +94 -1
- package/dist/src/lib/v8BatchStakingBuilder.d.ts +85 -0
- package/dist/src/lib/v8BatchStakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8BatchStakingBuilder.js +266 -0
- package/dist/src/lib/v8BatchUnstakingBuilder.d.ts +11 -0
- package/dist/src/lib/v8BatchUnstakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8BatchUnstakingBuilder.js +21 -0
- package/dist/src/lib/v8BondExtraBuilder.d.ts +11 -0
- package/dist/src/lib/v8BondExtraBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8BondExtraBuilder.js +21 -0
- package/dist/src/lib/v8HexTokenTransferBuilder.d.ts +20 -0
- package/dist/src/lib/v8HexTokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8HexTokenTransferBuilder.js +42 -0
- package/dist/src/lib/v8HexTransferBuilder.d.ts +11 -0
- package/dist/src/lib/v8HexTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8HexTransferBuilder.js +21 -0
- package/dist/src/lib/v8NominateBuilder.d.ts +11 -0
- package/dist/src/lib/v8NominateBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8NominateBuilder.js +21 -0
- package/dist/src/lib/v8PreApproveAssetBuilder.d.ts +11 -0
- package/dist/src/lib/v8PreApproveAssetBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8PreApproveAssetBuilder.js +21 -0
- package/dist/src/lib/v8RegisterDidBuilder.d.ts +47 -0
- package/dist/src/lib/v8RegisterDidBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8RegisterDidBuilder.js +96 -0
- package/dist/src/lib/v8RegisterDidWithCDDBuilder.d.ts +11 -0
- package/dist/src/lib/v8RegisterDidWithCDDBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8RegisterDidWithCDDBuilder.js +21 -0
- package/dist/src/lib/v8TokenTransferBuilder.d.ts +24 -0
- package/dist/src/lib/v8TokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8TokenTransferBuilder.js +101 -0
- package/dist/src/lib/v8TransferBuilder.d.ts +11 -0
- package/dist/src/lib/v8TransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8TransferBuilder.js +21 -0
- package/dist/src/lib/v8UnbondBuilder.d.ts +11 -0
- package/dist/src/lib/v8UnbondBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8UnbondBuilder.js +21 -0
- package/dist/src/lib/v8WithdrawUnbondedBuilder.d.ts +11 -0
- package/dist/src/lib/v8WithdrawUnbondedBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8WithdrawUnbondedBuilder.js +21 -0
- package/dist/src/lib/withdrawUnbondedBuilder.d.ts +35 -0
- package/dist/src/lib/withdrawUnbondedBuilder.d.ts.map +1 -0
- package/dist/src/lib/withdrawUnbondedBuilder.js +91 -0
- package/dist/src/polyx.d.ts +51 -9
- package/dist/src/polyx.d.ts.map +1 -1
- package/dist/src/polyx.js +272 -15
- package/dist/src/polyxToken.d.ts +20 -0
- package/dist/src/polyxToken.d.ts.map +1 -0
- package/dist/src/polyxToken.js +55 -0
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +5 -1
- package/dist/src/resources/index.d.ts +2 -0
- package/dist/src/resources/index.d.ts.map +1 -1
- package/dist/src/resources/index.js +3 -1
- package/dist/src/resources/mainnetV8.d.ts +13 -0
- package/dist/src/resources/mainnetV8.d.ts.map +1 -0
- package/dist/src/resources/mainnetV8.js +24 -0
- package/dist/src/resources/testnetV8.d.ts +13 -0
- package/dist/src/resources/testnetV8.d.ts.map +1 -0
- package/dist/src/resources/testnetV8.js +16 -0
- package/dist/src/tpolyx.d.ts +7 -0
- package/dist/src/tpolyx.d.ts.map +1 -1
- package/dist/src/tpolyx.js +11 -1
- 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 +139 -0
- package/dist/test/resources/index.d.ts.map +1 -0
- package/dist/test/resources/index.js +150 -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 +356 -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 +309 -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/hexTokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/hexTokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/hexTokenTransferBuilder.js +261 -0
- package/dist/test/unit/transactionBuilder/hexTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/hexTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/hexTransferBuilder.js +389 -0
- package/dist/test/unit/transactionBuilder/nominateBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/nominateBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/nominateBuilder.js +226 -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/rejectInstructionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/rejectInstructionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/rejectInstructionBuilder.js +128 -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 +240 -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/v8BatchStakingBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.js +252 -0
- package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.js +90 -0
- package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.js +62 -0
- package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.js +45 -0
- package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.js +87 -0
- package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.js +45 -0
- package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.js +114 -0
- package/dist/test/unit/transactionBuilder/v8TransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8TransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8TransferBuilder.js +107 -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 +15 -9
- package/.eslintignore +0 -4
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -22
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.RegisterDidWithCDDTransactionSchema = void 0;
|
|
6
|
+
exports.WithdrawUnbondedTransactionSchema = exports.UnbondTransactionSchema = exports.BatchUnstakingTransactionSchema = exports.bondSchema = exports.V8BatchTransactionSchema = exports.BatchTransactionSchema = exports.NominateTransactionSchema = exports.BondExtraTransactionSchema = exports.RejectInstructionTransactionSchema = exports.V8AddAndAffirmWithMediatorsTransactionSchema = exports.AddAndAffirmWithMediatorsTransactionSchema = exports.PreApproveAssetTransactionSchema = exports.RegisterDidTransactionSchema = exports.RegisterDidWithCDDTransactionSchema = void 0;
|
|
7
7
|
const joi_1 = __importDefault(require("joi"));
|
|
8
8
|
const utils_1 = __importDefault(require("./utils"));
|
|
9
9
|
const addressSchema = joi_1.default.string().custom((addr) => utils_1.default.isValidAddress(addr));
|
|
@@ -12,4 +12,233 @@ exports.RegisterDidWithCDDTransactionSchema = joi_1.default.object({
|
|
|
12
12
|
secondaryKeys: joi_1.default.array().length(0).required(),
|
|
13
13
|
expiry: joi_1.default.valid(null).required(),
|
|
14
14
|
});
|
|
15
|
-
|
|
15
|
+
// v8 identity.registerDid — unlike the v7 CDD path, this call only carries targetAccount
|
|
16
|
+
// (verified against the real testnetV8Material metadata; no secondaryKeys/expiry fields).
|
|
17
|
+
exports.RegisterDidTransactionSchema = joi_1.default.object({
|
|
18
|
+
targetAccount: addressSchema.required(),
|
|
19
|
+
});
|
|
20
|
+
exports.PreApproveAssetTransactionSchema = joi_1.default.object({
|
|
21
|
+
assetId: joi_1.default.string().required(),
|
|
22
|
+
});
|
|
23
|
+
exports.AddAndAffirmWithMediatorsTransactionSchema = joi_1.default.object({
|
|
24
|
+
venueId: joi_1.default.valid(null).required(),
|
|
25
|
+
settlementType: joi_1.default
|
|
26
|
+
.object({
|
|
27
|
+
settleOnAffirmation: joi_1.default.valid(null),
|
|
28
|
+
})
|
|
29
|
+
.required(),
|
|
30
|
+
tradeDate: joi_1.default.valid(null).required(),
|
|
31
|
+
valueDate: joi_1.default.valid(null).required(),
|
|
32
|
+
legs: joi_1.default
|
|
33
|
+
.array()
|
|
34
|
+
.items(joi_1.default.object({
|
|
35
|
+
fungible: joi_1.default
|
|
36
|
+
.object({
|
|
37
|
+
sender: joi_1.default
|
|
38
|
+
.object({
|
|
39
|
+
did: addressSchema.required(),
|
|
40
|
+
kind: joi_1.default
|
|
41
|
+
.object({
|
|
42
|
+
default: joi_1.default.valid(null),
|
|
43
|
+
})
|
|
44
|
+
.required(),
|
|
45
|
+
})
|
|
46
|
+
.required(),
|
|
47
|
+
receiver: joi_1.default
|
|
48
|
+
.object({
|
|
49
|
+
did: addressSchema.required(),
|
|
50
|
+
kind: joi_1.default
|
|
51
|
+
.object({
|
|
52
|
+
default: joi_1.default.valid(null),
|
|
53
|
+
})
|
|
54
|
+
.required(),
|
|
55
|
+
})
|
|
56
|
+
.required(),
|
|
57
|
+
assetId: joi_1.default.string().required(),
|
|
58
|
+
amount: joi_1.default.number().required(),
|
|
59
|
+
})
|
|
60
|
+
.required(),
|
|
61
|
+
}))
|
|
62
|
+
.required(),
|
|
63
|
+
portfolios: joi_1.default
|
|
64
|
+
.array()
|
|
65
|
+
.items(joi_1.default.object({
|
|
66
|
+
did: addressSchema.required(),
|
|
67
|
+
kind: joi_1.default
|
|
68
|
+
.object({
|
|
69
|
+
default: joi_1.default.valid(null),
|
|
70
|
+
})
|
|
71
|
+
.required(),
|
|
72
|
+
}))
|
|
73
|
+
.required(),
|
|
74
|
+
instructionMemo: joi_1.default.string().required(),
|
|
75
|
+
mediators: joi_1.default.array().length(0).required(),
|
|
76
|
+
});
|
|
77
|
+
// v8 settlement.addAndAffirmWithMediators — legs/holderSet wrap the DID+kind in an AssetHolder
|
|
78
|
+
// enum. Decoded shape lowercases the variant name (`portfolio`, not `Portfolio`) — verified by
|
|
79
|
+
// round-tripping a sample value through the real v8 testnet metadata registry.
|
|
80
|
+
const assetHolderSchema = joi_1.default.object({
|
|
81
|
+
portfolio: joi_1.default
|
|
82
|
+
.object({
|
|
83
|
+
did: addressSchema.required(),
|
|
84
|
+
kind: joi_1.default
|
|
85
|
+
.object({
|
|
86
|
+
default: joi_1.default.valid(null),
|
|
87
|
+
})
|
|
88
|
+
.required(),
|
|
89
|
+
})
|
|
90
|
+
.required(),
|
|
91
|
+
});
|
|
92
|
+
exports.V8AddAndAffirmWithMediatorsTransactionSchema = joi_1.default.object({
|
|
93
|
+
venueId: joi_1.default.valid(null).required(),
|
|
94
|
+
settlementType: joi_1.default
|
|
95
|
+
.object({
|
|
96
|
+
settleOnAffirmation: joi_1.default.valid(null),
|
|
97
|
+
})
|
|
98
|
+
.required(),
|
|
99
|
+
tradeDate: joi_1.default.valid(null).required(),
|
|
100
|
+
valueDate: joi_1.default.valid(null).required(),
|
|
101
|
+
legs: joi_1.default
|
|
102
|
+
.array()
|
|
103
|
+
.items(joi_1.default.object({
|
|
104
|
+
fungible: joi_1.default
|
|
105
|
+
.object({
|
|
106
|
+
sender: assetHolderSchema.required(),
|
|
107
|
+
receiver: assetHolderSchema.required(),
|
|
108
|
+
assetId: joi_1.default.string().required(),
|
|
109
|
+
amount: joi_1.default.number().required(),
|
|
110
|
+
})
|
|
111
|
+
.required(),
|
|
112
|
+
}))
|
|
113
|
+
.required(),
|
|
114
|
+
holderSet: joi_1.default.array().items(assetHolderSchema).required(),
|
|
115
|
+
instructionMemo: joi_1.default.string().required(),
|
|
116
|
+
mediators: joi_1.default.array().length(0).required(),
|
|
117
|
+
});
|
|
118
|
+
exports.RejectInstructionTransactionSchema = joi_1.default.object({
|
|
119
|
+
id: joi_1.default.string().required(),
|
|
120
|
+
portfolio: joi_1.default
|
|
121
|
+
.object({
|
|
122
|
+
did: addressSchema.required(),
|
|
123
|
+
kind: joi_1.default
|
|
124
|
+
.object({
|
|
125
|
+
default: joi_1.default.valid(null),
|
|
126
|
+
})
|
|
127
|
+
.required(),
|
|
128
|
+
})
|
|
129
|
+
.required(),
|
|
130
|
+
numberOfAssets: joi_1.default
|
|
131
|
+
.object({
|
|
132
|
+
fungible: joi_1.default.number().required(),
|
|
133
|
+
nonFungible: joi_1.default.number().required(),
|
|
134
|
+
offChain: joi_1.default.number().required(),
|
|
135
|
+
})
|
|
136
|
+
.optional(),
|
|
137
|
+
});
|
|
138
|
+
// For standalone bondExtra transactions
|
|
139
|
+
exports.BondExtraTransactionSchema = joi_1.default.object({
|
|
140
|
+
value: joi_1.default.string().required(),
|
|
141
|
+
});
|
|
142
|
+
// For nominate transactions (standalone or in batch)
|
|
143
|
+
exports.NominateTransactionSchema = joi_1.default.object({
|
|
144
|
+
validators: joi_1.default.array().items(addressSchema).min(1).max(16).required(),
|
|
145
|
+
});
|
|
146
|
+
// For batch validation
|
|
147
|
+
exports.BatchTransactionSchema = {
|
|
148
|
+
validate: (value) => joi_1.default
|
|
149
|
+
.object({
|
|
150
|
+
amount: joi_1.default.string().required(),
|
|
151
|
+
controller: addressSchema.required(),
|
|
152
|
+
// Payee can be a string or an object with Account property
|
|
153
|
+
payee: joi_1.default
|
|
154
|
+
.alternatives()
|
|
155
|
+
.try(joi_1.default.string(), joi_1.default.object({
|
|
156
|
+
Account: addressSchema,
|
|
157
|
+
}))
|
|
158
|
+
.required(),
|
|
159
|
+
validators: joi_1.default.array().items(addressSchema).min(1).max(16).required(),
|
|
160
|
+
})
|
|
161
|
+
.validate(value),
|
|
162
|
+
validateBond: (value) => joi_1.default
|
|
163
|
+
.object({
|
|
164
|
+
value: joi_1.default.string().required(),
|
|
165
|
+
controller: addressSchema.required(),
|
|
166
|
+
payee: joi_1.default
|
|
167
|
+
.alternatives()
|
|
168
|
+
.try(joi_1.default.string(), joi_1.default.object({
|
|
169
|
+
Account: addressSchema,
|
|
170
|
+
}))
|
|
171
|
+
.required(),
|
|
172
|
+
})
|
|
173
|
+
.validate(value),
|
|
174
|
+
validateNominate: (value) => joi_1.default
|
|
175
|
+
.object({
|
|
176
|
+
validators: joi_1.default.array().items(addressSchema).min(1).max(16).required(),
|
|
177
|
+
})
|
|
178
|
+
.validate(value),
|
|
179
|
+
};
|
|
180
|
+
// v8 batch validation — mirrors BatchTransactionSchema but drops the `controller` field, which
|
|
181
|
+
// v8 staking.bond no longer encodes.
|
|
182
|
+
exports.V8BatchTransactionSchema = {
|
|
183
|
+
validate: (value) => joi_1.default
|
|
184
|
+
.object({
|
|
185
|
+
amount: joi_1.default.string().required(),
|
|
186
|
+
// Payee can be a string or an object with Account property
|
|
187
|
+
payee: joi_1.default
|
|
188
|
+
.alternatives()
|
|
189
|
+
.try(joi_1.default.string(), joi_1.default.object({
|
|
190
|
+
Account: addressSchema,
|
|
191
|
+
}))
|
|
192
|
+
.required(),
|
|
193
|
+
validators: joi_1.default.array().items(addressSchema).min(1).max(16).required(),
|
|
194
|
+
})
|
|
195
|
+
.validate(value),
|
|
196
|
+
validateBond: (value) => joi_1.default
|
|
197
|
+
.object({
|
|
198
|
+
value: joi_1.default.string().required(),
|
|
199
|
+
payee: joi_1.default
|
|
200
|
+
.alternatives()
|
|
201
|
+
.try(joi_1.default.string(), joi_1.default.object({
|
|
202
|
+
Account: addressSchema,
|
|
203
|
+
}))
|
|
204
|
+
.required(),
|
|
205
|
+
})
|
|
206
|
+
.validate(value),
|
|
207
|
+
validateNominate: (value) => joi_1.default
|
|
208
|
+
.object({
|
|
209
|
+
validators: joi_1.default.array().items(addressSchema).min(1).max(16).required(),
|
|
210
|
+
})
|
|
211
|
+
.validate(value),
|
|
212
|
+
};
|
|
213
|
+
exports.bondSchema = joi_1.default.object({
|
|
214
|
+
value: joi_1.default.string().required(),
|
|
215
|
+
controller: addressSchema.required(),
|
|
216
|
+
payee: joi_1.default
|
|
217
|
+
.alternatives()
|
|
218
|
+
.try(joi_1.default.string().valid('Staked', 'Stash', 'Controller'), joi_1.default.object({
|
|
219
|
+
Account: addressSchema.required(),
|
|
220
|
+
}))
|
|
221
|
+
.required(),
|
|
222
|
+
});
|
|
223
|
+
exports.BatchUnstakingTransactionSchema = {
|
|
224
|
+
validate: (value) => joi_1.default
|
|
225
|
+
.object({
|
|
226
|
+
value: joi_1.default.string().required(),
|
|
227
|
+
})
|
|
228
|
+
.validate(value),
|
|
229
|
+
};
|
|
230
|
+
exports.UnbondTransactionSchema = {
|
|
231
|
+
validate: (value) => joi_1.default
|
|
232
|
+
.object({
|
|
233
|
+
value: joi_1.default.string().required(),
|
|
234
|
+
})
|
|
235
|
+
.validate(value),
|
|
236
|
+
};
|
|
237
|
+
exports.WithdrawUnbondedTransactionSchema = {
|
|
238
|
+
validate: (value) => joi_1.default
|
|
239
|
+
.object({
|
|
240
|
+
slashingSpans: joi_1.default.number().min(0).required(),
|
|
241
|
+
})
|
|
242
|
+
.validate(value),
|
|
243
|
+
};
|
|
244
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhuU2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90eG5TY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBQXNCO0FBQ3RCLG9EQUE0QjtBQW1DNUIsTUFBTSxhQUFhLEdBQUcsYUFBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBRW5FLFFBQUEsbUNBQW1DLEdBQUcsYUFBRyxDQUFDLE1BQU0sQ0FBQztJQUM1RCxhQUFhLEVBQUUsYUFBYSxDQUFDLFFBQVEsRUFBRTtJQUN2QyxhQUFhLEVBQUUsYUFBRyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDL0MsTUFBTSxFQUFFLGFBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFO0NBQ25DLENBQUMsQ0FBQztBQUVILHlGQUF5RjtBQUN6RiwwRkFBMEY7QUFDN0UsUUFBQSw0QkFBNEIsR0FBRyxhQUFHLENBQUMsTUFBTSxDQUFDO0lBQ3JELGFBQWEsRUFBRSxhQUFhLENBQUMsUUFBUSxFQUFFO0NBQ3hDLENBQUMsQ0FBQztBQUVVLFFBQUEsZ0NBQWdDLEdBQUcsYUFBRyxDQUFDLE1BQU0sQ0FBQztJQUN6RCxPQUFPLEVBQUUsYUFBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNqQyxDQUFDLENBQUM7QUFFVSxRQUFBLDBDQUEwQyxHQUFHLGFBQUcsQ0FBQyxNQUFNLENBQUM7SUFDbkUsT0FBTyxFQUFFLGFBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ25DLGNBQWMsRUFBRSxhQUFHO1NBQ2hCLE1BQU0sQ0FBQztRQUNOLG1CQUFtQixFQUFFLGFBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0tBQ3JDLENBQUM7U0FDRCxRQUFRLEVBQUU7SUFDYixTQUFTLEVBQUUsYUFBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDckMsU0FBUyxFQUFFLGFBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ3JDLElBQUksRUFBRSxhQUFHO1NBQ04sS0FBSyxFQUFFO1NBQ1AsS0FBSyxDQUNKLGFBQUcsQ0FBQyxNQUFNLENBQUM7UUFDVCxRQUFRLEVBQUUsYUFBRzthQUNWLE1BQU0sQ0FBQztZQUNOLE1BQU0sRUFBRSxhQUFHO2lCQUNSLE1BQU0sQ0FBQztnQkFDTixHQUFHLEVBQUUsYUFBYSxDQUFDLFFBQVEsRUFBRTtnQkFDN0IsSUFBSSxFQUFFLGFBQUc7cUJBQ04sTUFBTSxDQUFDO29CQUNOLE9BQU8sRUFBRSxhQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztpQkFDekIsQ0FBQztxQkFDRCxRQUFRLEVBQUU7YUFDZCxDQUFDO2lCQUNELFFBQVEsRUFBRTtZQUNiLFFBQVEsRUFBRSxhQUFHO2lCQUNWLE1BQU0sQ0FBQztnQkFDTixHQUFHLEVBQUUsYUFBYSxDQUFDLFFBQVEsRUFBRTtnQkFDN0IsSUFBSSxFQUFFLGFBQUc7cUJBQ04sTUFBTSxDQUFDO29CQUNOLE9BQU8sRUFBRSxhQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztpQkFDekIsQ0FBQztxQkFDRCxRQUFRLEVBQUU7YUFDZCxDQUFDO2lCQUNELFFBQVEsRUFBRTtZQUNiLE9BQU8sRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO1lBQ2hDLE1BQU0sRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO1NBQ2hDLENBQUM7YUFDRCxRQUFRLEVBQUU7S0FDZCxDQUFDLENBQ0g7U0FDQSxRQUFRLEVBQUU7SUFDYixVQUFVLEVBQUUsYUFBRztTQUNaLEtBQUssRUFBRTtTQUNQLEtBQUssQ0FDSixhQUFHLENBQUMsTUFBTSxDQUFDO1FBQ1QsR0FBRyxFQUFFLGFBQWEsQ0FBQyxRQUFRLEVBQUU7UUFDN0IsSUFBSSxFQUFFLGFBQUc7YUFDTixNQUFNLENBQUM7WUFDTixPQUFPLEVBQUUsYUFBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7U0FDekIsQ0FBQzthQUNELFFBQVEsRUFBRTtLQUNkLENBQUMsQ0FDSDtTQUNBLFFBQVEsRUFBRTtJQUNiLGVBQWUsRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3hDLFNBQVMsRUFBRSxhQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtDQUM1QyxDQUFDLENBQUM7QUFFSCwrRkFBK0Y7QUFDL0YsK0ZBQStGO0FBQy9GLCtFQUErRTtBQUMvRSxNQUFNLGlCQUFpQixHQUFHLGFBQUcsQ0FBQyxNQUFNLENBQUM7SUFDbkMsU0FBUyxFQUFFLGFBQUc7U0FDWCxNQUFNLENBQUM7UUFDTixHQUFHLEVBQUUsYUFBYSxDQUFDLFFBQVEsRUFBRTtRQUM3QixJQUFJLEVBQUUsYUFBRzthQUNOLE1BQU0sQ0FBQztZQUNOLE9BQU8sRUFBRSxhQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztTQUN6QixDQUFDO2FBQ0QsUUFBUSxFQUFFO0tBQ2QsQ0FBQztTQUNELFFBQVEsRUFBRTtDQUNkLENBQUMsQ0FBQztBQUVVLFFBQUEsNENBQTRDLEdBQUcsYUFBRyxDQUFDLE1BQU0sQ0FBQztJQUNyRSxPQUFPLEVBQUUsYUFBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDbkMsY0FBYyxFQUFFLGFBQUc7U0FDaEIsTUFBTSxDQUFDO1FBQ04sbUJBQW1CLEVBQUUsYUFBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7S0FDckMsQ0FBQztTQUNELFFBQVEsRUFBRTtJQUNiLFNBQVMsRUFBRSxhQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUNyQyxTQUFTLEVBQUUsYUFBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDckMsSUFBSSxFQUFFLGFBQUc7U0FDTixLQUFLLEVBQUU7U0FDUCxLQUFLLENBQ0osYUFBRyxDQUFDLE1BQU0sQ0FBQztRQUNULFFBQVEsRUFBRSxhQUFHO2FBQ1YsTUFBTSxDQUFDO1lBQ04sTUFBTSxFQUFFLGlCQUFpQixDQUFDLFFBQVEsRUFBRTtZQUNwQyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsUUFBUSxFQUFFO1lBQ3RDLE9BQU8sRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO1lBQ2hDLE1BQU0sRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO1NBQ2hDLENBQUM7YUFDRCxRQUFRLEVBQUU7S0FDZCxDQUFDLENBQ0g7U0FDQSxRQUFRLEVBQUU7SUFDYixTQUFTLEVBQUUsYUFBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUMxRCxlQUFlLEVBQUUsYUFBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN4QyxTQUFTLEVBQUUsYUFBRyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7Q0FDNUMsQ0FBQyxDQUFDO0FBRVUsUUFBQSxrQ0FBa0MsR0FBRyxhQUFHLENBQUMsTUFBTSxDQUFDO0lBQzNELEVBQUUsRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzNCLFNBQVMsRUFBRSxhQUFHO1NBQ1gsTUFBTSxDQUFDO1FBQ04sR0FBRyxFQUFFLGFBQWEsQ0FBQyxRQUFRLEVBQUU7UUFDN0IsSUFBSSxFQUFFLGFBQUc7YUFDTixNQUFNLENBQUM7WUFDTixPQUFPLEVBQUUsYUFBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7U0FDekIsQ0FBQzthQUNELFFBQVEsRUFBRTtLQUNkLENBQUM7U0FDRCxRQUFRLEVBQUU7SUFDYixjQUFjLEVBQUUsYUFBRztTQUNoQixNQUFNLENBQUM7UUFDTixRQUFRLEVBQUUsYUFBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtRQUNqQyxXQUFXLEVBQUUsYUFBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtRQUNwQyxRQUFRLEVBQUUsYUFBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtLQUNsQyxDQUFDO1NBQ0QsUUFBUSxFQUFFO0NBQ2QsQ0FBQyxDQUFDO0FBRUgsd0NBQXdDO0FBQzNCLFFBQUEsMEJBQTBCLEdBQUcsYUFBRyxDQUFDLE1BQU0sQ0FBQztJQUNuRCxLQUFLLEVBQUUsYUFBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUMvQixDQUFDLENBQUM7QUFFSCxxREFBcUQ7QUFDeEMsUUFBQSx5QkFBeUIsR0FBRyxhQUFHLENBQUMsTUFBTSxDQUFDO0lBQ2xELFVBQVUsRUFBRSxhQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0NBQ3ZFLENBQUMsQ0FBQztBQUVILHVCQUF1QjtBQUNWLFFBQUEsc0JBQXNCLEdBQUc7SUFDcEMsUUFBUSxFQUFFLENBQUMsS0FBNEIsRUFBd0IsRUFBRSxDQUMvRCxhQUFHO1NBQ0EsTUFBTSxDQUFDO1FBQ04sTUFBTSxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7UUFDL0IsVUFBVSxFQUFFLGFBQWEsQ0FBQyxRQUFRLEVBQUU7UUFDcEMsMkRBQTJEO1FBQzNELEtBQUssRUFBRSxhQUFHO2FBQ1AsWUFBWSxFQUFFO2FBQ2QsR0FBRyxDQUNGLGFBQUcsQ0FBQyxNQUFNLEVBQUUsRUFDWixhQUFHLENBQUMsTUFBTSxDQUFDO1lBQ1QsT0FBTyxFQUFFLGFBQWE7U0FDdkIsQ0FBQyxDQUNIO2FBQ0EsUUFBUSxFQUFFO1FBQ2IsVUFBVSxFQUFFLGFBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7S0FDdkUsQ0FBQztTQUNELFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFFcEIsWUFBWSxFQUFFLENBQUMsS0FBMkIsRUFBd0IsRUFBRSxDQUNsRSxhQUFHO1NBQ0EsTUFBTSxDQUFDO1FBQ04sS0FBSyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7UUFDOUIsVUFBVSxFQUFFLGFBQWEsQ0FBQyxRQUFRLEVBQUU7UUFDcEMsS0FBSyxFQUFFLGFBQUc7YUFDUCxZQUFZLEVBQUU7YUFDZCxHQUFHLENBQ0YsYUFBRyxDQUFDLE1BQU0sRUFBRSxFQUNaLGFBQUcsQ0FBQyxNQUFNLENBQUM7WUFDVCxPQUFPLEVBQUUsYUFBYTtTQUN2QixDQUFDLENBQ0g7YUFDQSxRQUFRLEVBQUU7S0FDZCxDQUFDO1NBQ0QsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUVwQixnQkFBZ0IsRUFBRSxDQUFDLEtBQStCLEVBQXdCLEVBQUUsQ0FDMUUsYUFBRztTQUNBLE1BQU0sQ0FBQztRQUNOLFVBQVUsRUFBRSxhQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0tBQ3ZFLENBQUM7U0FDRCxRQUFRLENBQUMsS0FBSyxDQUFDO0NBQ3JCLENBQUM7QUFFRiwrRkFBK0Y7QUFDL0YscUNBQXFDO0FBQ3hCLFFBQUEsd0JBQXdCLEdBQUc7SUFDdEMsUUFBUSxFQUFFLENBQUMsS0FBOEIsRUFBd0IsRUFBRSxDQUNqRSxhQUFHO1NBQ0EsTUFBTSxDQUFDO1FBQ04sTUFBTSxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7UUFDL0IsMkRBQTJEO1FBQzNELEtBQUssRUFBRSxhQUFHO2FBQ1AsWUFBWSxFQUFFO2FBQ2QsR0FBRyxDQUNGLGFBQUcsQ0FBQyxNQUFNLEVBQUUsRUFDWixhQUFHLENBQUMsTUFBTSxDQUFDO1lBQ1QsT0FBTyxFQUFFLGFBQWE7U0FDdkIsQ0FBQyxDQUNIO2FBQ0EsUUFBUSxFQUFFO1FBQ2IsVUFBVSxFQUFFLGFBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7S0FDdkUsQ0FBQztTQUNELFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFFcEIsWUFBWSxFQUFFLENBQUMsS0FBNkIsRUFBd0IsRUFBRSxDQUNwRSxhQUFHO1NBQ0EsTUFBTSxDQUFDO1FBQ04sS0FBSyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7UUFDOUIsS0FBSyxFQUFFLGFBQUc7YUFDUCxZQUFZLEVBQUU7YUFDZCxHQUFHLENBQ0YsYUFBRyxDQUFDLE1BQU0sRUFBRSxFQUNaLGFBQUcsQ0FBQyxNQUFNLENBQUM7WUFDVCxPQUFPLEVBQUUsYUFBYTtTQUN2QixDQUFDLENBQ0g7YUFDQSxRQUFRLEVBQUU7S0FDZCxDQUFDO1NBQ0QsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUVwQixnQkFBZ0IsRUFBRSxDQUFDLEtBQStCLEVBQXdCLEVBQUUsQ0FDMUUsYUFBRztTQUNBLE1BQU0sQ0FBQztRQUNOLFVBQVUsRUFBRSxhQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0tBQ3ZFLENBQUM7U0FDRCxRQUFRLENBQUMsS0FBSyxDQUFDO0NBQ3JCLENBQUM7QUFFVyxRQUFBLFVBQVUsR0FBRyxhQUFHLENBQUMsTUFBTSxDQUFDO0lBQ25DLEtBQUssRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzlCLFVBQVUsRUFBRSxhQUFhLENBQUMsUUFBUSxFQUFFO0lBQ3BDLEtBQUssRUFBRSxhQUFHO1NBQ1AsWUFBWSxFQUFFO1NBQ2QsR0FBRyxDQUNGLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsRUFDbkQsYUFBRyxDQUFDLE1BQU0sQ0FBQztRQUNULE9BQU8sRUFBRSxhQUFhLENBQUMsUUFBUSxFQUFFO0tBQ2xDLENBQUMsQ0FDSDtTQUNBLFFBQVEsRUFBRTtDQUNkLENBQUMsQ0FBQztBQUVVLFFBQUEsK0JBQStCLEdBQUc7SUFDN0MsUUFBUSxFQUFFLENBQUMsS0FBd0IsRUFBd0IsRUFBRSxDQUMzRCxhQUFHO1NBQ0EsTUFBTSxDQUFDO1FBQ04sS0FBSyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7S0FDL0IsQ0FBQztTQUNELFFBQVEsQ0FBQyxLQUFLLENBQUM7Q0FDckIsQ0FBQztBQUVXLFFBQUEsdUJBQXVCLEdBQUc7SUFDckMsUUFBUSxFQUFFLENBQUMsS0FBd0IsRUFBd0IsRUFBRSxDQUMzRCxhQUFHO1NBQ0EsTUFBTSxDQUFDO1FBQ04sS0FBSyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7S0FDL0IsQ0FBQztTQUNELFFBQVEsQ0FBQyxLQUFLLENBQUM7Q0FDckIsQ0FBQztBQUVXLFFBQUEsaUNBQWlDLEdBQUc7SUFDL0MsUUFBUSxFQUFFLENBQUMsS0FBZ0MsRUFBd0IsRUFBRSxDQUNuRSxhQUFHO1NBQ0EsTUFBTSxDQUFDO1FBQ04sYUFBYSxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0tBQzlDLENBQUM7U0FDRCxRQUFRLENBQUMsS0FBSyxDQUFDO0NBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgam9pIGZyb20gJ2pvaSc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCB0eXBlIEJhdGNoVmFsaWRhdGlvbk9iamVjdCA9IHtcbiAgYW1vdW50OiBzdHJpbmc7XG4gIGNvbnRyb2xsZXI6IHN0cmluZztcbiAgcGF5ZWU6IHN0cmluZyB8IHsgQWNjb3VudDogc3RyaW5nIH07XG4gIHZhbGlkYXRvcnM6IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IHR5cGUgQm9uZFZhbGlkYXRpb25PYmplY3QgPSB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGNvbnRyb2xsZXI6IHN0cmluZztcbiAgcGF5ZWU6IHN0cmluZyB8IHsgQWNjb3VudDogc3RyaW5nIH07XG59O1xuXG5leHBvcnQgdHlwZSBOb21pbmF0ZVZhbGlkYXRpb25PYmplY3QgPSB7XG4gIHZhbGlkYXRvcnM6IHN0cmluZ1tdO1xufTtcblxuLy8gdjggYm9uZC9iYXRjaCB2YWxpZGF0aW9uIG9iamVjdHMg4oCUIG5vIGBjb250cm9sbGVyYCAoc3Rhc2ggaXMgaXRzIG93biBjb250cm9sbGVyIGluIHY4KS5cbmV4cG9ydCB0eXBlIFY4QmF0Y2hWYWxpZGF0aW9uT2JqZWN0ID0ge1xuICBhbW91bnQ6IHN0cmluZztcbiAgcGF5ZWU6IHN0cmluZyB8IHsgQWNjb3VudDogc3RyaW5nIH07XG4gIHZhbGlkYXRvcnM6IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IHR5cGUgVjhCb25kVmFsaWRhdGlvbk9iamVjdCA9IHtcbiAgdmFsdWU6IHN0cmluZztcbiAgcGF5ZWU6IHN0cmluZyB8IHsgQWNjb3VudDogc3RyaW5nIH07XG59O1xuXG5leHBvcnQgdHlwZSBCb25kRXh0cmFWYWxpZGF0aW9uT2JqZWN0ID0ge1xuICB2YWx1ZTogc3RyaW5nO1xufTtcblxuY29uc3QgYWRkcmVzc1NjaGVtYSA9IGpvaS5zdHJpbmcoKS5jdXN0b20oKGFkZHIpID0+IFV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHIpKTtcblxuZXhwb3J0IGNvbnN0IFJlZ2lzdGVyRGlkV2l0aENERFRyYW5zYWN0aW9uU2NoZW1hID0gam9pLm9iamVjdCh7XG4gIHRhcmdldEFjY291bnQ6IGFkZHJlc3NTY2hlbWEucmVxdWlyZWQoKSxcbiAgc2Vjb25kYXJ5S2V5czogam9pLmFycmF5KCkubGVuZ3RoKDApLnJlcXVpcmVkKCksXG4gIGV4cGlyeTogam9pLnZhbGlkKG51bGwpLnJlcXVpcmVkKCksXG59KTtcblxuLy8gdjggaWRlbnRpdHkucmVnaXN0ZXJEaWQg4oCUIHVubGlrZSB0aGUgdjcgQ0REIHBhdGgsIHRoaXMgY2FsbCBvbmx5IGNhcnJpZXMgdGFyZ2V0QWNjb3VudFxuLy8gKHZlcmlmaWVkIGFnYWluc3QgdGhlIHJlYWwgdGVzdG5ldFY4TWF0ZXJpYWwgbWV0YWRhdGE7IG5vIHNlY29uZGFyeUtleXMvZXhwaXJ5IGZpZWxkcykuXG5leHBvcnQgY29uc3QgUmVnaXN0ZXJEaWRUcmFuc2FjdGlvblNjaGVtYSA9IGpvaS5vYmplY3Qoe1xuICB0YXJnZXRBY2NvdW50OiBhZGRyZXNzU2NoZW1hLnJlcXVpcmVkKCksXG59KTtcblxuZXhwb3J0IGNvbnN0IFByZUFwcHJvdmVBc3NldFRyYW5zYWN0aW9uU2NoZW1hID0gam9pLm9iamVjdCh7XG4gIGFzc2V0SWQ6IGpvaS5zdHJpbmcoKS5yZXF1aXJlZCgpLFxufSk7XG5cbmV4cG9ydCBjb25zdCBBZGRBbmRBZmZpcm1XaXRoTWVkaWF0b3JzVHJhbnNhY3Rpb25TY2hlbWEgPSBqb2kub2JqZWN0KHtcbiAgdmVudWVJZDogam9pLnZhbGlkKG51bGwpLnJlcXVpcmVkKCksXG4gIHNldHRsZW1lbnRUeXBlOiBqb2lcbiAgICAub2JqZWN0KHtcbiAgICAgIHNldHRsZU9uQWZmaXJtYXRpb246IGpvaS52YWxpZChudWxsKSxcbiAgICB9KVxuICAgIC5yZXF1aXJlZCgpLFxuICB0cmFkZURhdGU6IGpvaS52YWxpZChudWxsKS5yZXF1aXJlZCgpLFxuICB2YWx1ZURhdGU6IGpvaS52YWxpZChudWxsKS5yZXF1aXJlZCgpLFxuICBsZWdzOiBqb2lcbiAgICAuYXJyYXkoKVxuICAgIC5pdGVtcyhcbiAgICAgIGpvaS5vYmplY3Qoe1xuICAgICAgICBmdW5naWJsZTogam9pXG4gICAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgICBzZW5kZXI6IGpvaVxuICAgICAgICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgICAgICAgICBkaWQ6IGFkZHJlc3NTY2hlbWEucmVxdWlyZWQoKSxcbiAgICAgICAgICAgICAgICBraW5kOiBqb2lcbiAgICAgICAgICAgICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBqb2kudmFsaWQobnVsbCksXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgLnJlcXVpcmVkKCksXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5yZXF1aXJlZCgpLFxuICAgICAgICAgICAgcmVjZWl2ZXI6IGpvaVxuICAgICAgICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgICAgICAgICBkaWQ6IGFkZHJlc3NTY2hlbWEucmVxdWlyZWQoKSxcbiAgICAgICAgICAgICAgICBraW5kOiBqb2lcbiAgICAgICAgICAgICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBqb2kudmFsaWQobnVsbCksXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgLnJlcXVpcmVkKCksXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5yZXF1aXJlZCgpLFxuICAgICAgICAgICAgYXNzZXRJZDogam9pLnN0cmluZygpLnJlcXVpcmVkKCksXG4gICAgICAgICAgICBhbW91bnQ6IGpvaS5udW1iZXIoKS5yZXF1aXJlZCgpLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnJlcXVpcmVkKCksXG4gICAgICB9KVxuICAgIClcbiAgICAucmVxdWlyZWQoKSxcbiAgcG9ydGZvbGlvczogam9pXG4gICAgLmFycmF5KClcbiAgICAuaXRlbXMoXG4gICAgICBqb2kub2JqZWN0KHtcbiAgICAgICAgZGlkOiBhZGRyZXNzU2NoZW1hLnJlcXVpcmVkKCksXG4gICAgICAgIGtpbmQ6IGpvaVxuICAgICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgICAgZGVmYXVsdDogam9pLnZhbGlkKG51bGwpLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnJlcXVpcmVkKCksXG4gICAgICB9KVxuICAgIClcbiAgICAucmVxdWlyZWQoKSxcbiAgaW5zdHJ1Y3Rpb25NZW1vOiBqb2kuc3RyaW5nKCkucmVxdWlyZWQoKSxcbiAgbWVkaWF0b3JzOiBqb2kuYXJyYXkoKS5sZW5ndGgoMCkucmVxdWlyZWQoKSxcbn0pO1xuXG4vLyB2OCBzZXR0bGVtZW50LmFkZEFuZEFmZmlybVdpdGhNZWRpYXRvcnMg4oCUIGxlZ3MvaG9sZGVyU2V0IHdyYXAgdGhlIERJRCtraW5kIGluIGFuIEFzc2V0SG9sZGVyXG4vLyBlbnVtLiBEZWNvZGVkIHNoYXBlIGxvd2VyY2FzZXMgdGhlIHZhcmlhbnQgbmFtZSAoYHBvcnRmb2xpb2AsIG5vdCBgUG9ydGZvbGlvYCkg4oCUIHZlcmlmaWVkIGJ5XG4vLyByb3VuZC10cmlwcGluZyBhIHNhbXBsZSB2YWx1ZSB0aHJvdWdoIHRoZSByZWFsIHY4IHRlc3RuZXQgbWV0YWRhdGEgcmVnaXN0cnkuXG5jb25zdCBhc3NldEhvbGRlclNjaGVtYSA9IGpvaS5vYmplY3Qoe1xuICBwb3J0Zm9saW86IGpvaVxuICAgIC5vYmplY3Qoe1xuICAgICAgZGlkOiBhZGRyZXNzU2NoZW1hLnJlcXVpcmVkKCksXG4gICAgICBraW5kOiBqb2lcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgZGVmYXVsdDogam9pLnZhbGlkKG51bGwpLFxuICAgICAgICB9KVxuICAgICAgICAucmVxdWlyZWQoKSxcbiAgICB9KVxuICAgIC5yZXF1aXJlZCgpLFxufSk7XG5cbmV4cG9ydCBjb25zdCBWOEFkZEFuZEFmZmlybVdpdGhNZWRpYXRvcnNUcmFuc2FjdGlvblNjaGVtYSA9IGpvaS5vYmplY3Qoe1xuICB2ZW51ZUlkOiBqb2kudmFsaWQobnVsbCkucmVxdWlyZWQoKSxcbiAgc2V0dGxlbWVudFR5cGU6IGpvaVxuICAgIC5vYmplY3Qoe1xuICAgICAgc2V0dGxlT25BZmZpcm1hdGlvbjogam9pLnZhbGlkKG51bGwpLFxuICAgIH0pXG4gICAgLnJlcXVpcmVkKCksXG4gIHRyYWRlRGF0ZTogam9pLnZhbGlkKG51bGwpLnJlcXVpcmVkKCksXG4gIHZhbHVlRGF0ZTogam9pLnZhbGlkKG51bGwpLnJlcXVpcmVkKCksXG4gIGxlZ3M6IGpvaVxuICAgIC5hcnJheSgpXG4gICAgLml0ZW1zKFxuICAgICAgam9pLm9iamVjdCh7XG4gICAgICAgIGZ1bmdpYmxlOiBqb2lcbiAgICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgICAgIHNlbmRlcjogYXNzZXRIb2xkZXJTY2hlbWEucmVxdWlyZWQoKSxcbiAgICAgICAgICAgIHJlY2VpdmVyOiBhc3NldEhvbGRlclNjaGVtYS5yZXF1aXJlZCgpLFxuICAgICAgICAgICAgYXNzZXRJZDogam9pLnN0cmluZygpLnJlcXVpcmVkKCksXG4gICAgICAgICAgICBhbW91bnQ6IGpvaS5udW1iZXIoKS5yZXF1aXJlZCgpLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnJlcXVpcmVkKCksXG4gICAgICB9KVxuICAgIClcbiAgICAucmVxdWlyZWQoKSxcbiAgaG9sZGVyU2V0OiBqb2kuYXJyYXkoKS5pdGVtcyhhc3NldEhvbGRlclNjaGVtYSkucmVxdWlyZWQoKSxcbiAgaW5zdHJ1Y3Rpb25NZW1vOiBqb2kuc3RyaW5nKCkucmVxdWlyZWQoKSxcbiAgbWVkaWF0b3JzOiBqb2kuYXJyYXkoKS5sZW5ndGgoMCkucmVxdWlyZWQoKSxcbn0pO1xuXG5leHBvcnQgY29uc3QgUmVqZWN0SW5zdHJ1Y3Rpb25UcmFuc2FjdGlvblNjaGVtYSA9IGpvaS5vYmplY3Qoe1xuICBpZDogam9pLnN0cmluZygpLnJlcXVpcmVkKCksXG4gIHBvcnRmb2xpbzogam9pXG4gICAgLm9iamVjdCh7XG4gICAgICBkaWQ6IGFkZHJlc3NTY2hlbWEucmVxdWlyZWQoKSxcbiAgICAgIGtpbmQ6IGpvaVxuICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgICBkZWZhdWx0OiBqb2kudmFsaWQobnVsbCksXG4gICAgICAgIH0pXG4gICAgICAgIC5yZXF1aXJlZCgpLFxuICAgIH0pXG4gICAgLnJlcXVpcmVkKCksXG4gIG51bWJlck9mQXNzZXRzOiBqb2lcbiAgICAub2JqZWN0KHtcbiAgICAgIGZ1bmdpYmxlOiBqb2kubnVtYmVyKCkucmVxdWlyZWQoKSxcbiAgICAgIG5vbkZ1bmdpYmxlOiBqb2kubnVtYmVyKCkucmVxdWlyZWQoKSxcbiAgICAgIG9mZkNoYWluOiBqb2kubnVtYmVyKCkucmVxdWlyZWQoKSxcbiAgICB9KVxuICAgIC5vcHRpb25hbCgpLFxufSk7XG5cbi8vIEZvciBzdGFuZGFsb25lIGJvbmRFeHRyYSB0cmFuc2FjdGlvbnNcbmV4cG9ydCBjb25zdCBCb25kRXh0cmFUcmFuc2FjdGlvblNjaGVtYSA9IGpvaS5vYmplY3Qoe1xuICB2YWx1ZTogam9pLnN0cmluZygpLnJlcXVpcmVkKCksXG59KTtcblxuLy8gRm9yIG5vbWluYXRlIHRyYW5zYWN0aW9ucyAoc3RhbmRhbG9uZSBvciBpbiBiYXRjaClcbmV4cG9ydCBjb25zdCBOb21pbmF0ZVRyYW5zYWN0aW9uU2NoZW1hID0gam9pLm9iamVjdCh7XG4gIHZhbGlkYXRvcnM6IGpvaS5hcnJheSgpLml0ZW1zKGFkZHJlc3NTY2hlbWEpLm1pbigxKS5tYXgoMTYpLnJlcXVpcmVkKCksXG59KTtcblxuLy8gRm9yIGJhdGNoIHZhbGlkYXRpb25cbmV4cG9ydCBjb25zdCBCYXRjaFRyYW5zYWN0aW9uU2NoZW1hID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlOiBCYXRjaFZhbGlkYXRpb25PYmplY3QpOiBqb2kuVmFsaWRhdGlvblJlc3VsdCA9PlxuICAgIGpvaVxuICAgICAgLm9iamVjdCh7XG4gICAgICAgIGFtb3VudDogam9pLnN0cmluZygpLnJlcXVpcmVkKCksXG4gICAgICAgIGNvbnRyb2xsZXI6IGFkZHJlc3NTY2hlbWEucmVxdWlyZWQoKSxcbiAgICAgICAgLy8gUGF5ZWUgY2FuIGJlIGEgc3RyaW5nIG9yIGFuIG9iamVjdCB3aXRoIEFjY291bnQgcHJvcGVydHlcbiAgICAgICAgcGF5ZWU6IGpvaVxuICAgICAgICAgIC5hbHRlcm5hdGl2ZXMoKVxuICAgICAgICAgIC50cnkoXG4gICAgICAgICAgICBqb2kuc3RyaW5nKCksXG4gICAgICAgICAgICBqb2kub2JqZWN0KHtcbiAgICAgICAgICAgICAgQWNjb3VudDogYWRkcmVzc1NjaGVtYSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIC5yZXF1aXJlZCgpLFxuICAgICAgICB2YWxpZGF0b3JzOiBqb2kuYXJyYXkoKS5pdGVtcyhhZGRyZXNzU2NoZW1hKS5taW4oMSkubWF4KDE2KS5yZXF1aXJlZCgpLFxuICAgICAgfSlcbiAgICAgIC52YWxpZGF0ZSh2YWx1ZSksXG5cbiAgdmFsaWRhdGVCb25kOiAodmFsdWU6IEJvbmRWYWxpZGF0aW9uT2JqZWN0KTogam9pLlZhbGlkYXRpb25SZXN1bHQgPT5cbiAgICBqb2lcbiAgICAgIC5vYmplY3Qoe1xuICAgICAgICB2YWx1ZTogam9pLnN0cmluZygpLnJlcXVpcmVkKCksXG4gICAgICAgIGNvbnRyb2xsZXI6IGFkZHJlc3NTY2hlbWEucmVxdWlyZWQoKSxcbiAgICAgICAgcGF5ZWU6IGpvaVxuICAgICAgICAgIC5hbHRlcm5hdGl2ZXMoKVxuICAgICAgICAgIC50cnkoXG4gICAgICAgICAgICBqb2kuc3RyaW5nKCksXG4gICAgICAgICAgICBqb2kub2JqZWN0KHtcbiAgICAgICAgICAgICAgQWNjb3VudDogYWRkcmVzc1NjaGVtYSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIC5yZXF1aXJlZCgpLFxuICAgICAgfSlcbiAgICAgIC52YWxpZGF0ZSh2YWx1ZSksXG5cbiAgdmFsaWRhdGVOb21pbmF0ZTogKHZhbHVlOiBOb21pbmF0ZVZhbGlkYXRpb25PYmplY3QpOiBqb2kuVmFsaWRhdGlvblJlc3VsdCA9PlxuICAgIGpvaVxuICAgICAgLm9iamVjdCh7XG4gICAgICAgIHZhbGlkYXRvcnM6IGpvaS5hcnJheSgpLml0ZW1zKGFkZHJlc3NTY2hlbWEpLm1pbigxKS5tYXgoMTYpLnJlcXVpcmVkKCksXG4gICAgICB9KVxuICAgICAgLnZhbGlkYXRlKHZhbHVlKSxcbn07XG5cbi8vIHY4IGJhdGNoIHZhbGlkYXRpb24g4oCUIG1pcnJvcnMgQmF0Y2hUcmFuc2FjdGlvblNjaGVtYSBidXQgZHJvcHMgdGhlIGBjb250cm9sbGVyYCBmaWVsZCwgd2hpY2hcbi8vIHY4IHN0YWtpbmcuYm9uZCBubyBsb25nZXIgZW5jb2Rlcy5cbmV4cG9ydCBjb25zdCBWOEJhdGNoVHJhbnNhY3Rpb25TY2hlbWEgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWU6IFY4QmF0Y2hWYWxpZGF0aW9uT2JqZWN0KTogam9pLlZhbGlkYXRpb25SZXN1bHQgPT5cbiAgICBqb2lcbiAgICAgIC5vYmplY3Qoe1xuICAgICAgICBhbW91bnQ6IGpvaS5zdHJpbmcoKS5yZXF1aXJlZCgpLFxuICAgICAgICAvLyBQYXllZSBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gb2JqZWN0IHdpdGggQWNjb3VudCBwcm9wZXJ0eVxuICAgICAgICBwYXllZTogam9pXG4gICAgICAgICAgLmFsdGVybmF0aXZlcygpXG4gICAgICAgICAgLnRyeShcbiAgICAgICAgICAgIGpvaS5zdHJpbmcoKSxcbiAgICAgICAgICAgIGpvaS5vYmplY3Qoe1xuICAgICAgICAgICAgICBBY2NvdW50OiBhZGRyZXNzU2NoZW1hLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICAgLnJlcXVpcmVkKCksXG4gICAgICAgIHZhbGlkYXRvcnM6IGpvaS5hcnJheSgpLml0ZW1zKGFkZHJlc3NTY2hlbWEpLm1pbigxKS5tYXgoMTYpLnJlcXVpcmVkKCksXG4gICAgICB9KVxuICAgICAgLnZhbGlkYXRlKHZhbHVlKSxcblxuICB2YWxpZGF0ZUJvbmQ6ICh2YWx1ZTogVjhCb25kVmFsaWRhdGlvbk9iamVjdCk6IGpvaS5WYWxpZGF0aW9uUmVzdWx0ID0+XG4gICAgam9pXG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgdmFsdWU6IGpvaS5zdHJpbmcoKS5yZXF1aXJlZCgpLFxuICAgICAgICBwYXllZTogam9pXG4gICAgICAgICAgLmFsdGVybmF0aXZlcygpXG4gICAgICAgICAgLnRyeShcbiAgICAgICAgICAgIGpvaS5zdHJpbmcoKSxcbiAgICAgICAgICAgIGpvaS5vYmplY3Qoe1xuICAgICAgICAgICAgICBBY2NvdW50OiBhZGRyZXNzU2NoZW1hLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICAgLnJlcXVpcmVkKCksXG4gICAgICB9KVxuICAgICAgLnZhbGlkYXRlKHZhbHVlKSxcblxuICB2YWxpZGF0ZU5vbWluYXRlOiAodmFsdWU6IE5vbWluYXRlVmFsaWRhdGlvbk9iamVjdCk6IGpvaS5WYWxpZGF0aW9uUmVzdWx0ID0+XG4gICAgam9pXG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgdmFsaWRhdG9yczogam9pLmFycmF5KCkuaXRlbXMoYWRkcmVzc1NjaGVtYSkubWluKDEpLm1heCgxNikucmVxdWlyZWQoKSxcbiAgICAgIH0pXG4gICAgICAudmFsaWRhdGUodmFsdWUpLFxufTtcblxuZXhwb3J0IGNvbnN0IGJvbmRTY2hlbWEgPSBqb2kub2JqZWN0KHtcbiAgdmFsdWU6IGpvaS5zdHJpbmcoKS5yZXF1aXJlZCgpLFxuICBjb250cm9sbGVyOiBhZGRyZXNzU2NoZW1hLnJlcXVpcmVkKCksXG4gIHBheWVlOiBqb2lcbiAgICAuYWx0ZXJuYXRpdmVzKClcbiAgICAudHJ5KFxuICAgICAgam9pLnN0cmluZygpLnZhbGlkKCdTdGFrZWQnLCAnU3Rhc2gnLCAnQ29udHJvbGxlcicpLFxuICAgICAgam9pLm9iamVjdCh7XG4gICAgICAgIEFjY291bnQ6IGFkZHJlc3NTY2hlbWEucmVxdWlyZWQoKSxcbiAgICAgIH0pXG4gICAgKVxuICAgIC5yZXF1aXJlZCgpLFxufSk7XG5cbmV4cG9ydCBjb25zdCBCYXRjaFVuc3Rha2luZ1RyYW5zYWN0aW9uU2NoZW1hID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlOiB7IHZhbHVlOiBzdHJpbmcgfSk6IGpvaS5WYWxpZGF0aW9uUmVzdWx0ID0+XG4gICAgam9pXG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgdmFsdWU6IGpvaS5zdHJpbmcoKS5yZXF1aXJlZCgpLFxuICAgICAgfSlcbiAgICAgIC52YWxpZGF0ZSh2YWx1ZSksXG59O1xuXG5leHBvcnQgY29uc3QgVW5ib25kVHJhbnNhY3Rpb25TY2hlbWEgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWU6IHsgdmFsdWU6IHN0cmluZyB9KTogam9pLlZhbGlkYXRpb25SZXN1bHQgPT5cbiAgICBqb2lcbiAgICAgIC5vYmplY3Qoe1xuICAgICAgICB2YWx1ZTogam9pLnN0cmluZygpLnJlcXVpcmVkKCksXG4gICAgICB9KVxuICAgICAgLnZhbGlkYXRlKHZhbHVlKSxcbn07XG5cbmV4cG9ydCBjb25zdCBXaXRoZHJhd1VuYm9uZGVkVHJhbnNhY3Rpb25TY2hlbWEgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWU6IHsgc2xhc2hpbmdTcGFuczogbnVtYmVyIH0pOiBqb2kuVmFsaWRhdGlvblJlc3VsdCA9PlxuICAgIGpvaVxuICAgICAgLm9iamVjdCh7XG4gICAgICAgIHNsYXNoaW5nU3BhbnM6IGpvaS5udW1iZXIoKS5taW4oMCkucmVxdWlyZWQoKSxcbiAgICAgIH0pXG4gICAgICAudmFsaWRhdGUodmFsdWUpLFxufTtcbiJdfQ==
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Transaction } from './transaction';
|
|
2
|
+
import { PolyxBaseBuilder } from './baseBuilder';
|
|
3
|
+
import { DecodedSignedTx, DecodedSigningPayload, UnsignedTransaction } from '@substrate/txwrapper-core';
|
|
4
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
5
|
+
import { TransactionType } from '@bitgo-beta/sdk-core';
|
|
6
|
+
export declare class UnbondBuilder extends PolyxBaseBuilder {
|
|
7
|
+
protected _amount: string;
|
|
8
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
9
|
+
protected get transactionType(): TransactionType;
|
|
10
|
+
/**
|
|
11
|
+
* Build the unbond transaction
|
|
12
|
+
*/
|
|
13
|
+
protected buildTransaction(): UnsignedTransaction;
|
|
14
|
+
/**
|
|
15
|
+
* Set the amount to unbond
|
|
16
|
+
*/
|
|
17
|
+
amount(amount: string): this;
|
|
18
|
+
/**
|
|
19
|
+
* Get the amount to unbond
|
|
20
|
+
*/
|
|
21
|
+
getAmount(): string;
|
|
22
|
+
/** @inheritdoc */
|
|
23
|
+
validateDecodedTransaction(decodedTxn: DecodedSigningPayload | DecodedSignedTx): void;
|
|
24
|
+
/** @inheritdoc */
|
|
25
|
+
protected fromImplementation(rawTransaction: string): Transaction;
|
|
26
|
+
/** @inheritdoc */
|
|
27
|
+
validateTransaction(tx: Transaction): void;
|
|
28
|
+
/**
|
|
29
|
+
* Validate the unbond fields
|
|
30
|
+
*/
|
|
31
|
+
private validateFields;
|
|
32
|
+
/**
|
|
33
|
+
* Validates fields for testing
|
|
34
|
+
*/
|
|
35
|
+
testValidateFields(): void;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=unbondBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unbondBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/unbondBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAExG,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAA2B,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAQhF,qBAAa,aAAc,SAAQ,gBAAgB;IACjD,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEd,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;OAEG;IACH,SAAS,CAAC,gBAAgB,IAAI,mBAAmB;IAYjD;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAM5B;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB,kBAAkB;IAClB,0BAA0B,CAAC,UAAU,EAAE,qBAAqB,GAAG,eAAe,GAAG,IAAI;IAmBrF,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAcjE,kBAAkB;IAClB,mBAAmB,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAK1C;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACH,kBAAkB,IAAI,IAAI;CAG3B"}
|
|
@@ -0,0 +1,100 @@
|
|
|
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.UnbondBuilder = void 0;
|
|
7
|
+
const baseBuilder_1 = require("./baseBuilder");
|
|
8
|
+
const txwrapper_polkadot_1 = require("@substrate/txwrapper-polkadot");
|
|
9
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
10
|
+
const txnSchema_1 = require("./txnSchema");
|
|
11
|
+
const utils_1 = __importDefault(require("./utils"));
|
|
12
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
13
|
+
// [CLEANUP-V8-OLD] v7 path — v7 metadata material. Retained as the Flipt rollback path alongside
|
|
14
|
+
// V8UnbondBuilder (same logic, v8 material).
|
|
15
|
+
class UnbondBuilder extends baseBuilder_1.PolyxBaseBuilder {
|
|
16
|
+
constructor(_coinConfig) {
|
|
17
|
+
super(_coinConfig);
|
|
18
|
+
this.material(utils_1.default.getMaterial(_coinConfig.network.type));
|
|
19
|
+
}
|
|
20
|
+
get transactionType() {
|
|
21
|
+
return sdk_core_1.TransactionType.StakingDeactivate;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Build the unbond transaction
|
|
25
|
+
*/
|
|
26
|
+
buildTransaction() {
|
|
27
|
+
const baseTxInfo = this.createBaseTxInfo();
|
|
28
|
+
return txwrapper_polkadot_1.methods.staking.unbond({
|
|
29
|
+
value: this._amount,
|
|
30
|
+
}, baseTxInfo.baseTxInfo, baseTxInfo.options);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Set the amount to unbond
|
|
34
|
+
*/
|
|
35
|
+
amount(amount) {
|
|
36
|
+
this.validateValue(new bignumber_js_1.default(amount));
|
|
37
|
+
this._amount = amount;
|
|
38
|
+
return this;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get the amount to unbond
|
|
42
|
+
*/
|
|
43
|
+
getAmount() {
|
|
44
|
+
return this._amount;
|
|
45
|
+
}
|
|
46
|
+
/** @inheritdoc */
|
|
47
|
+
validateDecodedTransaction(decodedTxn) {
|
|
48
|
+
const methodName = decodedTxn.method?.name;
|
|
49
|
+
if (methodName === 'unbond') {
|
|
50
|
+
const txMethod = decodedTxn.method.args;
|
|
51
|
+
const value = txMethod.value;
|
|
52
|
+
const validationResult = txnSchema_1.UnbondTransactionSchema.validate({
|
|
53
|
+
value,
|
|
54
|
+
});
|
|
55
|
+
if (validationResult.error) {
|
|
56
|
+
throw new sdk_core_1.InvalidTransactionError(`Invalid unbond transaction: ${validationResult.error.message}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
throw new sdk_core_1.InvalidTransactionError(`Invalid transaction type: ${methodName}. Expected unbond`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/** @inheritdoc */
|
|
64
|
+
fromImplementation(rawTransaction) {
|
|
65
|
+
const tx = super.fromImplementation(rawTransaction);
|
|
66
|
+
const methodName = this._method?.name;
|
|
67
|
+
if (methodName === 'unbond' && this._method) {
|
|
68
|
+
const txMethod = this._method.args;
|
|
69
|
+
this.amount(txMethod.value);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
throw new sdk_core_1.InvalidTransactionError(`Invalid Transaction Type: ${methodName}. Expected unbond`);
|
|
73
|
+
}
|
|
74
|
+
return tx;
|
|
75
|
+
}
|
|
76
|
+
/** @inheritdoc */
|
|
77
|
+
validateTransaction(tx) {
|
|
78
|
+
super.validateTransaction(tx);
|
|
79
|
+
this.validateFields();
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Validate the unbond fields
|
|
83
|
+
*/
|
|
84
|
+
validateFields() {
|
|
85
|
+
const validationResult = txnSchema_1.UnbondTransactionSchema.validate({
|
|
86
|
+
value: this._amount,
|
|
87
|
+
});
|
|
88
|
+
if (validationResult.error) {
|
|
89
|
+
throw new sdk_core_1.InvalidTransactionError(`Invalid unbond transaction: ${validationResult.error.message}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Validates fields for testing
|
|
94
|
+
*/
|
|
95
|
+
testValidateFields() {
|
|
96
|
+
this.validateFields();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
exports.UnbondBuilder = UnbondBuilder;
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5ib25kQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdW5ib25kQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSwrQ0FBaUQ7QUFFakQsc0VBQXdEO0FBRXhELG1EQUFnRjtBQUNoRiwyQ0FBc0Q7QUFDdEQsb0RBQTRCO0FBRTVCLGdFQUFxQztBQUVyQyxpR0FBaUc7QUFDakcsNkNBQTZDO0FBQzdDLE1BQWEsYUFBYyxTQUFRLDhCQUFnQjtJQUdqRCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQUssQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLGlCQUFpQixDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNPLGdCQUFnQjtRQUN4QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUUzQyxPQUFPLDRCQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDM0I7WUFDRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDcEIsRUFDRCxVQUFVLENBQUMsVUFBVSxFQUNyQixVQUFVLENBQUMsT0FBTyxDQUNuQixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLE1BQWM7UUFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLHNCQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQiwwQkFBMEIsQ0FBQyxVQUFtRDtRQUM1RSxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLElBQWMsQ0FBQztRQUVyRCxJQUFJLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM1QixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQTZCLENBQUM7WUFDakUsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUU3QixNQUFNLGdCQUFnQixHQUFHLG1DQUF1QixDQUFDLFFBQVEsQ0FBQztnQkFDeEQsS0FBSzthQUNOLENBQUMsQ0FBQztZQUVILElBQUksZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzNCLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQywrQkFBK0IsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDckcsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLGtDQUF1QixDQUFDLDZCQUE2QixVQUFVLG1CQUFtQixDQUFDLENBQUM7UUFDaEcsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDUixrQkFBa0IsQ0FBQyxjQUFzQjtRQUNqRCxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFjLENBQUM7UUFFaEQsSUFBSSxVQUFVLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM1QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQTZCLENBQUM7WUFDNUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksa0NBQXVCLENBQUMsNkJBQTZCLFVBQVUsbUJBQW1CLENBQUMsQ0FBQztRQUNoRyxDQUFDO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLG1CQUFtQixDQUFDLEVBQWU7UUFDakMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7O09BRUc7SUFDSyxjQUFjO1FBQ3BCLE1BQU0sZ0JBQWdCLEdBQUcsbUNBQXVCLENBQUMsUUFBUSxDQUFDO1lBQ3hELEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTztTQUNwQixDQUFDLENBQUM7UUFFSCxJQUFJLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQywrQkFBK0IsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDckcsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQjtRQUNoQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztDQUNGO0FBdkdELHNDQXVHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBQb2x5eEJhc2VCdWlsZGVyIH0gZnJvbSAnLi9iYXNlQnVpbGRlcic7XG5pbXBvcnQgeyBEZWNvZGVkU2lnbmVkVHgsIERlY29kZWRTaWduaW5nUGF5bG9hZCwgVW5zaWduZWRUcmFuc2FjdGlvbiB9IGZyb20gJ0BzdWJzdHJhdGUvdHh3cmFwcGVyLWNvcmUnO1xuaW1wb3J0IHsgbWV0aG9kcyB9IGZyb20gJ0BzdWJzdHJhdGUvdHh3cmFwcGVyLXBvbGthZG90JztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEludmFsaWRUcmFuc2FjdGlvbkVycm9yLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBVbmJvbmRUcmFuc2FjdGlvblNjaGVtYSB9IGZyb20gJy4vdHhuU2NoZW1hJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFVuYm9uZEFyZ3MgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcblxuLy8gW0NMRUFOVVAtVjgtT0xEXSB2NyBwYXRoIOKAlCB2NyBtZXRhZGF0YSBtYXRlcmlhbC4gUmV0YWluZWQgYXMgdGhlIEZsaXB0IHJvbGxiYWNrIHBhdGggYWxvbmdzaWRlXG4vLyBWOFVuYm9uZEJ1aWxkZXIgKHNhbWUgbG9naWMsIHY4IG1hdGVyaWFsKS5cbmV4cG9ydCBjbGFzcyBVbmJvbmRCdWlsZGVyIGV4dGVuZHMgUG9seXhCYXNlQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfYW1vdW50OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMubWF0ZXJpYWwodXRpbHMuZ2V0TWF0ZXJpYWwoX2NvaW5Db25maWcubmV0d29yay50eXBlKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGU7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIHVuYm9uZCB0cmFuc2FjdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkVHJhbnNhY3Rpb24oKTogVW5zaWduZWRUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgYmFzZVR4SW5mbyA9IHRoaXMuY3JlYXRlQmFzZVR4SW5mbygpO1xuXG4gICAgcmV0dXJuIG1ldGhvZHMuc3Rha2luZy51bmJvbmQoXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiB0aGlzLl9hbW91bnQsXG4gICAgICB9LFxuICAgICAgYmFzZVR4SW5mby5iYXNlVHhJbmZvLFxuICAgICAgYmFzZVR4SW5mby5vcHRpb25zXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGFtb3VudCB0byB1bmJvbmRcbiAgICovXG4gIGFtb3VudChhbW91bnQ6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVWYWx1ZShuZXcgQmlnTnVtYmVyKGFtb3VudCkpO1xuICAgIHRoaXMuX2Ftb3VudCA9IGFtb3VudDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGFtb3VudCB0byB1bmJvbmRcbiAgICovXG4gIGdldEFtb3VudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hbW91bnQ7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVEZWNvZGVkVHJhbnNhY3Rpb24oZGVjb2RlZFR4bjogRGVjb2RlZFNpZ25pbmdQYXlsb2FkIHwgRGVjb2RlZFNpZ25lZFR4KTogdm9pZCB7XG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IGRlY29kZWRUeG4ubWV0aG9kPy5uYW1lIGFzIHN0cmluZztcblxuICAgIGlmIChtZXRob2ROYW1lID09PSAndW5ib25kJykge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHhuLm1ldGhvZC5hcmdzIGFzIHVua25vd24gYXMgVW5ib25kQXJncztcbiAgICAgIGNvbnN0IHZhbHVlID0gdHhNZXRob2QudmFsdWU7XG5cbiAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBVbmJvbmRUcmFuc2FjdGlvblNjaGVtYS52YWxpZGF0ZSh7XG4gICAgICAgIHZhbHVlLFxuICAgICAgfSk7XG5cbiAgICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0LmVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCB1bmJvbmQgdHJhbnNhY3Rpb246ICR7dmFsaWRhdGlvblJlc3VsdC5lcnJvci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgdHJhbnNhY3Rpb24gdHlwZTogJHttZXRob2ROYW1lfS4gRXhwZWN0ZWQgdW5ib25kYCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0eCA9IHN1cGVyLmZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IHRoaXMuX21ldGhvZD8ubmFtZSBhcyBzdHJpbmc7XG5cbiAgICBpZiAobWV0aG9kTmFtZSA9PT0gJ3VuYm9uZCcgJiYgdGhpcy5fbWV0aG9kKSB7XG4gICAgICBjb25zdCB0eE1ldGhvZCA9IHRoaXMuX21ldGhvZC5hcmdzIGFzIHVua25vd24gYXMgVW5ib25kQXJncztcbiAgICAgIHRoaXMuYW1vdW50KHR4TWV0aG9kLnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIFRyYW5zYWN0aW9uIFR5cGU6ICR7bWV0aG9kTmFtZX0uIEV4cGVjdGVkIHVuYm9uZGApO1xuICAgIH1cblxuICAgIHJldHVybiB0eDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKHR4OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHN1cGVyLnZhbGlkYXRlVHJhbnNhY3Rpb24odHgpO1xuICAgIHRoaXMudmFsaWRhdGVGaWVsZHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgdW5ib25kIGZpZWxkc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUZpZWxkcygpOiB2b2lkIHtcbiAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gVW5ib25kVHJhbnNhY3Rpb25TY2hlbWEudmFsaWRhdGUoe1xuICAgICAgdmFsdWU6IHRoaXMuX2Ftb3VudCxcbiAgICB9KTtcblxuICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0LmVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgdW5ib25kIHRyYW5zYWN0aW9uOiAke3ZhbGlkYXRpb25SZXN1bHQuZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGZpZWxkcyBmb3IgdGVzdGluZ1xuICAgKi9cbiAgdGVzdFZhbGlkYXRlRmllbGRzKCk6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGVGaWVsZHMoKTtcbiAgfVxufVxuIl19
|
package/dist/src/lib/utils.d.ts
CHANGED
|
@@ -1,7 +1,47 @@
|
|
|
1
1
|
import { Utils as SubstrateUtils, Interface } from '@bitgo-beta/abstract-substrate';
|
|
2
2
|
import { NetworkType } from '@bitgo-beta/statics';
|
|
3
|
+
import { TypeRegistry } from '@substrate/txwrapper-core/lib/types';
|
|
4
|
+
import { BatchCallObject } from './iface';
|
|
3
5
|
export declare class Utils extends SubstrateUtils {
|
|
6
|
+
/**
|
|
7
|
+
* Get the appropriate address format based on network type
|
|
8
|
+
* Returns 12 for mainnet and 42 for testnet
|
|
9
|
+
*
|
|
10
|
+
* @param coinName The name of the coin
|
|
11
|
+
* @returns The address format to use
|
|
12
|
+
*/
|
|
13
|
+
getAddressFormat(coinName: string): number;
|
|
14
|
+
/**
|
|
15
|
+
* Checks if a string is a valid Polymesh DID (Decentralized Identifier)
|
|
16
|
+
* DIDs are 32-byte hex strings (0x prefix + 64 hex characters)
|
|
17
|
+
*
|
|
18
|
+
* @param {string} did - The string to validate
|
|
19
|
+
* @returns {boolean} true if valid DID format, false otherwise
|
|
20
|
+
*/
|
|
21
|
+
isValidDid(did: string): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Encode a memo string using the NEW Polymesh format:
|
|
24
|
+
* UTF-8 bytes right-padded with 0x00 to 32 bytes, returned as a 0x-prefixed hex string.
|
|
25
|
+
*
|
|
26
|
+
* @param text The intended memo string
|
|
27
|
+
* @returns 0x-prefixed 66-character hex string representing the 32-byte encoded memo
|
|
28
|
+
*/
|
|
29
|
+
encodeMemoNew(text: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* Detect whether a decoded 32-byte memo (0x-prefixed hex from txwrapper decode()) uses NEW encoding.
|
|
32
|
+
*
|
|
33
|
+
* Detection rules (see problem.md):
|
|
34
|
+
* - Any 0x00 byte → NEW (null right-padding)
|
|
35
|
+
* - All 0x30 bytes → OLD (memo "0" in ASCII-left-padded form)
|
|
36
|
+
* - Leading 0x30 bytes then non-0x30 content → OLD (ASCII '0' left-padding)
|
|
37
|
+
* - Otherwise → NEW (content at byte 0, full 32-byte memo, or no ASCII pad)
|
|
38
|
+
*
|
|
39
|
+
* @param memo 0x-prefixed 66-char hex string as returned by txwrapper decode()
|
|
40
|
+
*/
|
|
41
|
+
isNewMemoEncoding(memo: string): boolean;
|
|
4
42
|
getMaterial(networkType: NetworkType): Interface.Material;
|
|
43
|
+
getV8Material(networkType: NetworkType): Interface.Material;
|
|
44
|
+
decodeMethodName(call: BatchCallObject, registry: TypeRegistry): string;
|
|
5
45
|
}
|
|
6
46
|
declare const utils: Utils;
|
|
7
47
|
export default utils;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,cAAc,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,cAAc,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG1C,qBAAa,KAAM,SAAQ,cAAc;IACvC;;;;;;OAMG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAK1C;;;;;;OAMG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIhC;;;;;;OAMG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IASnC;;;;;;;;;;OAUG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAiBxC,WAAW,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC,QAAQ;IAIzD,aAAa,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC,QAAQ;IAM3D,gBAAgB,CAAC,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM;CA0BxE;AAED,QAAA,MAAM,KAAK,OAAc,CAAC;AAC1B,eAAe,KAAK,CAAC"}
|
package/dist/src/lib/utils.js
CHANGED
|
@@ -4,12 +4,105 @@ exports.Utils = void 0;
|
|
|
4
4
|
const abstract_substrate_1 = require("@bitgo-beta/abstract-substrate");
|
|
5
5
|
const statics_1 = require("@bitgo-beta/statics");
|
|
6
6
|
const resources_1 = require("../resources");
|
|
7
|
+
const constants_1 = require("./constants");
|
|
7
8
|
class Utils extends abstract_substrate_1.Utils {
|
|
9
|
+
/**
|
|
10
|
+
* Get the appropriate address format based on network type
|
|
11
|
+
* Returns 12 for mainnet and 42 for testnet
|
|
12
|
+
*
|
|
13
|
+
* @param coinName The name of the coin
|
|
14
|
+
* @returns The address format to use
|
|
15
|
+
*/
|
|
16
|
+
getAddressFormat(coinName) {
|
|
17
|
+
const isMainnet = coinName.toLowerCase() === 'polyx';
|
|
18
|
+
return isMainnet ? 12 : 42;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Checks if a string is a valid Polymesh DID (Decentralized Identifier)
|
|
22
|
+
* DIDs are 32-byte hex strings (0x prefix + 64 hex characters)
|
|
23
|
+
*
|
|
24
|
+
* @param {string} did - The string to validate
|
|
25
|
+
* @returns {boolean} true if valid DID format, false otherwise
|
|
26
|
+
*/
|
|
27
|
+
isValidDid(did) {
|
|
28
|
+
return constants_1.POLYX_DID_REGEX.test(did);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Encode a memo string using the NEW Polymesh format:
|
|
32
|
+
* UTF-8 bytes right-padded with 0x00 to 32 bytes, returned as a 0x-prefixed hex string.
|
|
33
|
+
*
|
|
34
|
+
* @param text The intended memo string
|
|
35
|
+
* @returns 0x-prefixed 66-character hex string representing the 32-byte encoded memo
|
|
36
|
+
*/
|
|
37
|
+
encodeMemoNew(text) {
|
|
38
|
+
const bytes = Buffer.from(text, 'utf8');
|
|
39
|
+
if (bytes.length > constants_1.MEMO_MAX_BYTES) {
|
|
40
|
+
throw new Error(`Memo exceeds maximum length of ${constants_1.MEMO_MAX_BYTES} bytes (got ${bytes.length} bytes)`);
|
|
41
|
+
}
|
|
42
|
+
const textHex = bytes.toString('hex');
|
|
43
|
+
return `0x${textHex.padEnd(64, '0')}`;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Detect whether a decoded 32-byte memo (0x-prefixed hex from txwrapper decode()) uses NEW encoding.
|
|
47
|
+
*
|
|
48
|
+
* Detection rules (see problem.md):
|
|
49
|
+
* - Any 0x00 byte → NEW (null right-padding)
|
|
50
|
+
* - All 0x30 bytes → OLD (memo "0" in ASCII-left-padded form)
|
|
51
|
+
* - Leading 0x30 bytes then non-0x30 content → OLD (ASCII '0' left-padding)
|
|
52
|
+
* - Otherwise → NEW (content at byte 0, full 32-byte memo, or no ASCII pad)
|
|
53
|
+
*
|
|
54
|
+
* @param memo 0x-prefixed 66-char hex string as returned by txwrapper decode()
|
|
55
|
+
*/
|
|
56
|
+
isNewMemoEncoding(memo) {
|
|
57
|
+
if (!constants_1.MEMO_HEX_REGEX.test(memo))
|
|
58
|
+
return false;
|
|
59
|
+
const bytes = Buffer.from(memo.slice(2), 'hex');
|
|
60
|
+
if (bytes.some((b) => b === 0x00))
|
|
61
|
+
return true;
|
|
62
|
+
if (bytes.every((b) => b === 0x30))
|
|
63
|
+
return false;
|
|
64
|
+
let leadingAsciiZeros = 0;
|
|
65
|
+
while (leadingAsciiZeros < bytes.length && bytes[leadingAsciiZeros] === 0x30) {
|
|
66
|
+
leadingAsciiZeros++;
|
|
67
|
+
}
|
|
68
|
+
if (leadingAsciiZeros > 0 && leadingAsciiZeros < bytes.length)
|
|
69
|
+
return false;
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
8
72
|
getMaterial(networkType) {
|
|
9
73
|
return (networkType === statics_1.NetworkType.MAINNET ? resources_1.mainnetMaterial : resources_1.testnetMaterial);
|
|
10
74
|
}
|
|
75
|
+
getV8Material(networkType) {
|
|
76
|
+
return (networkType === statics_1.NetworkType.MAINNET
|
|
77
|
+
? resources_1.mainnetV8Material
|
|
78
|
+
: resources_1.testnetV8Material);
|
|
79
|
+
}
|
|
80
|
+
decodeMethodName(call, registry) {
|
|
81
|
+
// Handle both callIndex and method formats
|
|
82
|
+
const callWithIndex = call;
|
|
83
|
+
const methodIdentifier = callWithIndex.callIndex || call.method;
|
|
84
|
+
if (typeof methodIdentifier === 'string') {
|
|
85
|
+
// Check if it looks like a hex callIndex
|
|
86
|
+
if (methodIdentifier.startsWith('0x') && methodIdentifier.length > 2) {
|
|
87
|
+
try {
|
|
88
|
+
const decodedCall = registry.findMetaCall(new Uint8Array(Buffer.from(methodIdentifier.replace('0x', ''), 'hex')));
|
|
89
|
+
return decodedCall.method;
|
|
90
|
+
}
|
|
91
|
+
catch (e) {
|
|
92
|
+
// Fallback: assume it's already the method name
|
|
93
|
+
return methodIdentifier;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
// Already a simple method name
|
|
98
|
+
return methodIdentifier;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Fallback
|
|
102
|
+
return String(methodIdentifier);
|
|
103
|
+
}
|
|
11
104
|
}
|
|
12
105
|
exports.Utils = Utils;
|
|
13
106
|
const utils = new Utils();
|
|
14
107
|
exports.default = utils;
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVFQUFvRjtBQUNwRixpREFBa0Q7QUFFbEQsNENBQXNHO0FBRXRHLDJDQUE4RTtBQUU5RSxNQUFhLEtBQU0sU0FBUSwwQkFBYztJQUN2Qzs7Ozs7O09BTUc7SUFDSCxnQkFBZ0IsQ0FBQyxRQUFnQjtRQUMvQixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxDQUFDO1FBQ3JELE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsVUFBVSxDQUFDLEdBQVc7UUFDcEIsT0FBTywyQkFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsYUFBYSxDQUFDLElBQVk7UUFDeEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLDBCQUFjLEVBQUUsQ0FBQztZQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQywwQkFBYyxlQUFlLEtBQUssQ0FBQyxNQUFNLFNBQVMsQ0FBQyxDQUFDO1FBQ3hHLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsaUJBQWlCLENBQUMsSUFBWTtRQUM1QixJQUFJLENBQUMsMEJBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFN0MsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWhELElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQy9DLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRWpELElBQUksaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLE9BQU8saUJBQWlCLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUM3RSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFDRCxJQUFJLGlCQUFpQixHQUFHLENBQUMsSUFBSSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsTUFBTTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRTVFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFdBQVcsQ0FBQyxXQUF3QjtRQUNsQyxPQUFPLENBQUMsV0FBVyxLQUFLLHFCQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQywyQkFBZSxDQUFDLENBQUMsQ0FBQywyQkFBZSxDQUFrQyxDQUFDO0lBQ3BILENBQUM7SUFFRCxhQUFhLENBQUMsV0FBd0I7UUFDcEMsT0FBTyxDQUFDLFdBQVcsS0FBSyxxQkFBVyxDQUFDLE9BQU87WUFDekMsQ0FBQyxDQUFDLDZCQUFpQjtZQUNuQixDQUFDLENBQUMsNkJBQWlCLENBQWtDLENBQUM7SUFDMUQsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQXFCLEVBQUUsUUFBc0I7UUFDNUQsMkNBQTJDO1FBQzNDLE1BQU0sYUFBYSxHQUFHLElBQWdELENBQUM7UUFDdkUsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFaEUsSUFBSSxPQUFPLGdCQUFnQixLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3pDLHlDQUF5QztZQUN6QyxJQUFJLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JFLElBQUksQ0FBQztvQkFDSCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUN2QyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FDdkUsQ0FBQztvQkFDRixPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUM7Z0JBQzVCLENBQUM7Z0JBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDWCxnREFBZ0Q7b0JBQ2hELE9BQU8sZ0JBQWdCLENBQUM7Z0JBQzFCLENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sK0JBQStCO2dCQUMvQixPQUFPLGdCQUFnQixDQUFDO1lBQzFCLENBQUM7UUFDSCxDQUFDO1FBRUQsV0FBVztRQUNYLE9BQU8sTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBeEdELHNCQXdHQztBQUVELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFDMUIsa0JBQWUsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXRpbHMgYXMgU3Vic3RyYXRlVXRpbHMsIEludGVyZmFjZSB9IGZyb20gJ0BiaXRnby1iZXRhL2Fic3RyYWN0LXN1YnN0cmF0ZSc7XG5pbXBvcnQgeyBOZXR3b3JrVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHlwZVJlZ2lzdHJ5IH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItY29yZS9saWIvdHlwZXMnO1xuaW1wb3J0IHsgbWFpbm5ldE1hdGVyaWFsLCB0ZXN0bmV0TWF0ZXJpYWwsIG1haW5uZXRWOE1hdGVyaWFsLCB0ZXN0bmV0VjhNYXRlcmlhbCB9IGZyb20gJy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBCYXRjaENhbGxPYmplY3QgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IE1FTU9fSEVYX1JFR0VYLCBNRU1PX01BWF9CWVRFUywgUE9MWVhfRElEX1JFR0VYIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY2xhc3MgVXRpbHMgZXh0ZW5kcyBTdWJzdHJhdGVVdGlscyB7XG4gIC8qKlxuICAgKiBHZXQgdGhlIGFwcHJvcHJpYXRlIGFkZHJlc3MgZm9ybWF0IGJhc2VkIG9uIG5ldHdvcmsgdHlwZVxuICAgKiBSZXR1cm5zIDEyIGZvciBtYWlubmV0IGFuZCA0MiBmb3IgdGVzdG5ldFxuICAgKlxuICAgKiBAcGFyYW0gY29pbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGNvaW5cbiAgICogQHJldHVybnMgVGhlIGFkZHJlc3MgZm9ybWF0IHRvIHVzZVxuICAgKi9cbiAgZ2V0QWRkcmVzc0Zvcm1hdChjb2luTmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBpc01haW5uZXQgPSBjb2luTmFtZS50b0xvd2VyQ2FzZSgpID09PSAncG9seXgnO1xuICAgIHJldHVybiBpc01haW5uZXQgPyAxMiA6IDQyO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIHN0cmluZyBpcyBhIHZhbGlkIFBvbHltZXNoIERJRCAoRGVjZW50cmFsaXplZCBJZGVudGlmaWVyKVxuICAgKiBESURzIGFyZSAzMi1ieXRlIGhleCBzdHJpbmdzICgweCBwcmVmaXggKyA2NCBoZXggY2hhcmFjdGVycylcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpZCAtIFRoZSBzdHJpbmcgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdmFsaWQgRElEIGZvcm1hdCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBpc1ZhbGlkRGlkKGRpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFBPTFlYX0RJRF9SRUdFWC50ZXN0KGRpZCk7XG4gIH1cblxuICAvKipcbiAgICogRW5jb2RlIGEgbWVtbyBzdHJpbmcgdXNpbmcgdGhlIE5FVyBQb2x5bWVzaCBmb3JtYXQ6XG4gICAqIFVURi04IGJ5dGVzIHJpZ2h0LXBhZGRlZCB3aXRoIDB4MDAgdG8gMzIgYnl0ZXMsIHJldHVybmVkIGFzIGEgMHgtcHJlZml4ZWQgaGV4IHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIHRleHQgVGhlIGludGVuZGVkIG1lbW8gc3RyaW5nXG4gICAqIEByZXR1cm5zIDB4LXByZWZpeGVkIDY2LWNoYXJhY3RlciBoZXggc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgMzItYnl0ZSBlbmNvZGVkIG1lbW9cbiAgICovXG4gIGVuY29kZU1lbW9OZXcodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBieXRlcyA9IEJ1ZmZlci5mcm9tKHRleHQsICd1dGY4Jyk7XG4gICAgaWYgKGJ5dGVzLmxlbmd0aCA+IE1FTU9fTUFYX0JZVEVTKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1lbW8gZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiAke01FTU9fTUFYX0JZVEVTfSBieXRlcyAoZ290ICR7Ynl0ZXMubGVuZ3RofSBieXRlcylgKTtcbiAgICB9XG4gICAgY29uc3QgdGV4dEhleCA9IGJ5dGVzLnRvU3RyaW5nKCdoZXgnKTtcbiAgICByZXR1cm4gYDB4JHt0ZXh0SGV4LnBhZEVuZCg2NCwgJzAnKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVjdCB3aGV0aGVyIGEgZGVjb2RlZCAzMi1ieXRlIG1lbW8gKDB4LXByZWZpeGVkIGhleCBmcm9tIHR4d3JhcHBlciBkZWNvZGUoKSkgdXNlcyBORVcgZW5jb2RpbmcuXG4gICAqXG4gICAqIERldGVjdGlvbiBydWxlcyAoc2VlIHByb2JsZW0ubWQpOlxuICAgKiAtIEFueSAweDAwIGJ5dGUg4oaSIE5FVyAobnVsbCByaWdodC1wYWRkaW5nKVxuICAgKiAtIEFsbCAweDMwIGJ5dGVzIOKGkiBPTEQgKG1lbW8gXCIwXCIgaW4gQVNDSUktbGVmdC1wYWRkZWQgZm9ybSlcbiAgICogLSBMZWFkaW5nIDB4MzAgYnl0ZXMgdGhlbiBub24tMHgzMCBjb250ZW50IOKGkiBPTEQgKEFTQ0lJICcwJyBsZWZ0LXBhZGRpbmcpXG4gICAqIC0gT3RoZXJ3aXNlIOKGkiBORVcgKGNvbnRlbnQgYXQgYnl0ZSAwLCBmdWxsIDMyLWJ5dGUgbWVtbywgb3Igbm8gQVNDSUkgcGFkKVxuICAgKlxuICAgKiBAcGFyYW0gbWVtbyAweC1wcmVmaXhlZCA2Ni1jaGFyIGhleCBzdHJpbmcgYXMgcmV0dXJuZWQgYnkgdHh3cmFwcGVyIGRlY29kZSgpXG4gICAqL1xuICBpc05ld01lbW9FbmNvZGluZyhtZW1vOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIU1FTU9fSEVYX1JFR0VYLnRlc3QobWVtbykpIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IGJ5dGVzID0gQnVmZmVyLmZyb20obWVtby5zbGljZSgyKSwgJ2hleCcpO1xuXG4gICAgaWYgKGJ5dGVzLnNvbWUoKGIpID0+IGIgPT09IDB4MDApKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoYnl0ZXMuZXZlcnkoKGIpID0+IGIgPT09IDB4MzApKSByZXR1cm4gZmFsc2U7XG5cbiAgICBsZXQgbGVhZGluZ0FzY2lpWmVyb3MgPSAwO1xuICAgIHdoaWxlIChsZWFkaW5nQXNjaWlaZXJvcyA8IGJ5dGVzLmxlbmd0aCAmJiBieXRlc1tsZWFkaW5nQXNjaWlaZXJvc10gPT09IDB4MzApIHtcbiAgICAgIGxlYWRpbmdBc2NpaVplcm9zKys7XG4gICAgfVxuICAgIGlmIChsZWFkaW5nQXNjaWlaZXJvcyA+IDAgJiYgbGVhZGluZ0FzY2lpWmVyb3MgPCBieXRlcy5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZ2V0TWF0ZXJpYWwobmV0d29ya1R5cGU6IE5ldHdvcmtUeXBlKTogSW50ZXJmYWNlLk1hdGVyaWFsIHtcbiAgICByZXR1cm4gKG5ldHdvcmtUeXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gbWFpbm5ldE1hdGVyaWFsIDogdGVzdG5ldE1hdGVyaWFsKSBhcyB1bmtub3duIGFzIEludGVyZmFjZS5NYXRlcmlhbDtcbiAgfVxuXG4gIGdldFY4TWF0ZXJpYWwobmV0d29ya1R5cGU6IE5ldHdvcmtUeXBlKTogSW50ZXJmYWNlLk1hdGVyaWFsIHtcbiAgICByZXR1cm4gKG5ldHdvcmtUeXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUXG4gICAgICA/IG1haW5uZXRWOE1hdGVyaWFsXG4gICAgICA6IHRlc3RuZXRWOE1hdGVyaWFsKSBhcyB1bmtub3duIGFzIEludGVyZmFjZS5NYXRlcmlhbDtcbiAgfVxuXG4gIGRlY29kZU1ldGhvZE5hbWUoY2FsbDogQmF0Y2hDYWxsT2JqZWN0LCByZWdpc3RyeTogVHlwZVJlZ2lzdHJ5KTogc3RyaW5nIHtcbiAgICAvLyBIYW5kbGUgYm90aCBjYWxsSW5kZXggYW5kIG1ldGhvZCBmb3JtYXRzXG4gICAgY29uc3QgY2FsbFdpdGhJbmRleCA9IGNhbGwgYXMgQmF0Y2hDYWxsT2JqZWN0ICYgeyBjYWxsSW5kZXg/OiBzdHJpbmcgfTtcbiAgICBjb25zdCBtZXRob2RJZGVudGlmaWVyID0gY2FsbFdpdGhJbmRleC5jYWxsSW5kZXggfHwgY2FsbC5tZXRob2Q7XG5cbiAgICBpZiAodHlwZW9mIG1ldGhvZElkZW50aWZpZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBDaGVjayBpZiBpdCBsb29rcyBsaWtlIGEgaGV4IGNhbGxJbmRleFxuICAgICAgaWYgKG1ldGhvZElkZW50aWZpZXIuc3RhcnRzV2l0aCgnMHgnKSAmJiBtZXRob2RJZGVudGlmaWVyLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBkZWNvZGVkQ2FsbCA9IHJlZ2lzdHJ5LmZpbmRNZXRhQ2FsbChcbiAgICAgICAgICAgIG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKG1ldGhvZElkZW50aWZpZXIucmVwbGFjZSgnMHgnLCAnJyksICdoZXgnKSlcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBkZWNvZGVkQ2FsbC5tZXRob2Q7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBGYWxsYmFjazogYXNzdW1lIGl0J3MgYWxyZWFkeSB0aGUgbWV0aG9kIG5hbWVcbiAgICAgICAgICByZXR1cm4gbWV0aG9kSWRlbnRpZmllcjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWxyZWFkeSBhIHNpbXBsZSBtZXRob2QgbmFtZVxuICAgICAgICByZXR1cm4gbWV0aG9kSWRlbnRpZmllcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGYWxsYmFja1xuICAgIHJldHVybiBTdHJpbmcobWV0aG9kSWRlbnRpZmllcik7XG4gIH1cbn1cblxuY29uc3QgdXRpbHMgPSBuZXcgVXRpbHMoKTtcbmV4cG9ydCBkZWZhdWx0IHV0aWxzO1xuIl19
|