@bitgo/sdk-coin-flrp 1.3.4 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/flrp.d.ts +6 -75
- package/dist/src/flrp.d.ts.map +1 -1
- package/dist/src/flrp.js +13 -298
- package/dist/src/index.d.ts +0 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -2
- package/dist/src/lib/ExportInCTxBuilder.d.ts +51 -0
- package/dist/src/lib/ExportInCTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/ExportInCTxBuilder.js +186 -0
- package/dist/src/lib/ExportInPTxBuilder.d.ts +47 -0
- package/dist/src/lib/ExportInPTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/ExportInPTxBuilder.js +273 -0
- package/dist/src/lib/ImportInCTxBuilder.d.ts +48 -0
- package/dist/src/lib/ImportInCTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/ImportInCTxBuilder.js +215 -0
- package/dist/src/lib/ImportInPTxBuilder.d.ts +33 -0
- package/dist/src/lib/ImportInPTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/ImportInPTxBuilder.js +180 -0
- package/dist/src/lib/atomicInCTransactionBuilder.d.ts +18 -16
- package/dist/src/lib/atomicInCTransactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/atomicInCTransactionBuilder.js +38 -36
- package/dist/src/lib/atomicTransactionBuilder.d.ts +42 -79
- package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/atomicTransactionBuilder.js +138 -281
- package/dist/src/lib/iface.d.ts +50 -51
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +22 -10
- package/dist/src/lib/index.d.ts +2 -3
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +5 -6
- package/dist/src/lib/keyPair.d.ts +1 -1
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +9 -5
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +32 -67
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/permissionlessValidatorTxBuilder.js +91 -205
- package/dist/src/lib/transaction.d.ts +8 -73
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +159 -210
- package/dist/src/lib/transactionBuilder.d.ts +56 -34
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +113 -70
- package/dist/src/lib/transactionBuilderFactory.d.ts +35 -30
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +133 -74
- package/dist/src/lib/utils.d.ts +73 -151
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +197 -390
- package/dist/test/resources/transactionData/exportInC.d.ts +20 -0
- package/dist/test/resources/transactionData/exportInC.d.ts.map +1 -0
- package/dist/test/resources/transactionData/exportInC.js +34 -0
- package/dist/test/resources/transactionData/exportInP.d.ts +69 -0
- package/dist/test/resources/transactionData/exportInP.d.ts.map +1 -0
- package/dist/test/resources/transactionData/exportInP.js +140 -0
- package/dist/test/resources/transactionData/importInC.d.ts +27 -0
- package/dist/test/resources/transactionData/importInC.d.ts.map +1 -0
- package/dist/test/resources/transactionData/importInC.js +44 -0
- package/dist/test/resources/transactionData/importInP.d.ts +35 -0
- package/dist/test/resources/transactionData/importInP.d.ts.map +1 -0
- package/dist/test/resources/transactionData/importInP.js +58 -0
- package/dist/test/unit/lib/exportInCTxBuilder.js +95 -513
- package/dist/test/unit/lib/exportInPTxBuilder.d.ts +1 -1
- package/dist/test/unit/lib/exportInPTxBuilder.d.ts.map +1 -1
- package/dist/test/unit/lib/exportInPTxBuilder.js +110 -366
- package/dist/test/unit/lib/importInCTxBuilder.d.ts +1 -1
- package/dist/test/unit/lib/importInCTxBuilder.d.ts.map +1 -1
- package/dist/test/unit/lib/importInCTxBuilder.js +40 -251
- package/dist/test/unit/lib/importInPTxBuilder.d.ts +1 -1
- package/dist/test/unit/lib/importInPTxBuilder.d.ts.map +1 -1
- package/dist/test/unit/lib/importInPTxBuilder.js +61 -489
- package/dist/test/unit/lib/signFlowTestSuit.d.ts +20 -0
- package/dist/test/unit/lib/signFlowTestSuit.d.ts.map +1 -0
- package/dist/test/unit/lib/signFlowTestSuit.js +89 -0
- package/dist/test/unit/lib/utils.js +29 -302
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -10
- package/dist/src/iface.d.ts +0 -25
- package/dist/src/iface.d.ts.map +0 -1
- package/dist/src/iface.js +0 -3
- package/dist/src/lib/constants.d.ts +0 -170
- package/dist/src/lib/constants.d.ts.map +0 -1
- package/dist/src/lib/constants.js +0 -227
- package/dist/src/lib/delegatorTxBuilder.d.ts +0 -58
- package/dist/src/lib/delegatorTxBuilder.d.ts.map +0 -1
- package/dist/src/lib/delegatorTxBuilder.js +0 -224
- package/dist/src/lib/errors.d.ts +0 -8
- package/dist/src/lib/errors.d.ts.map +0 -1
- package/dist/src/lib/errors.js +0 -19
- package/dist/src/lib/exportInCTxBuilder.d.ts +0 -77
- package/dist/src/lib/exportInCTxBuilder.d.ts.map +0 -1
- package/dist/src/lib/exportInCTxBuilder.js +0 -199
- package/dist/src/lib/exportInPTxBuilder.d.ts +0 -30
- package/dist/src/lib/exportInPTxBuilder.d.ts.map +0 -1
- package/dist/src/lib/exportInPTxBuilder.js +0 -120
- package/dist/src/lib/importInCTxBuilder.d.ts +0 -67
- package/dist/src/lib/importInCTxBuilder.d.ts.map +0 -1
- package/dist/src/lib/importInCTxBuilder.js +0 -403
- package/dist/src/lib/importInPTxBuilder.d.ts +0 -73
- package/dist/src/lib/importInPTxBuilder.d.ts.map +0 -1
- package/dist/src/lib/importInPTxBuilder.js +0 -464
- package/dist/src/lib/types.d.ts +0 -78
- package/dist/src/lib/types.d.ts.map +0 -1
- package/dist/src/lib/types.js +0 -5
- package/dist/src/lib/validatorTxBuilder.d.ts +0 -40
- package/dist/src/lib/validatorTxBuilder.d.ts.map +0 -1
- package/dist/src/lib/validatorTxBuilder.js +0 -180
- package/dist/test/unit/delegatorTxBuilder.test.d.ts +0 -2
- package/dist/test/unit/delegatorTxBuilder.test.d.ts.map +0 -1
- package/dist/test/unit/delegatorTxBuilder.test.js +0 -233
- package/dist/test/unit/flrp.d.ts +0 -2
- package/dist/test/unit/flrp.d.ts.map +0 -1
- package/dist/test/unit/flrp.js +0 -118
- package/dist/test/unit/lib/atomicTransactionBuilder.d.ts +0 -2
- package/dist/test/unit/lib/atomicTransactionBuilder.d.ts.map +0 -1
- package/dist/test/unit/lib/atomicTransactionBuilder.js +0 -222
- package/dist/test/unit/lib/transaction.d.ts +0 -2
- package/dist/test/unit/lib/transaction.d.ts.map +0 -1
- package/dist/test/unit/lib/transaction.js +0 -460
- package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts +0 -2
- package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts.map +0 -1
- package/dist/test/unit/permissionlessValidatorTxBuilder.test.js +0 -271
- package/dist/test/unit/smoke.d.ts +0 -2
- package/dist/test/unit/smoke.d.ts.map +0 -1
- package/dist/test/unit/smoke.js +0 -23
- package/dist/test/unit/transactionBuilder.test.d.ts +0 -2
- package/dist/test/unit/transactionBuilder.test.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder.test.js +0 -114
- package/dist/test/unit/validatorTxBuilder.test.d.ts +0 -2
- package/dist/test/unit/validatorTxBuilder.test.d.ts.map +0 -1
- package/dist/test/unit/validatorTxBuilder.test.js +0 -293
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { TransactionType } from '@bitgo/sdk-core';
|
|
2
|
-
import { BaseCoin as CoinConfig } from '@bitgo/statics';
|
|
3
|
-
import { DelegatorTxBuilder } from './delegatorTxBuilder';
|
|
4
|
-
import { Tx } from './iface';
|
|
5
|
-
export declare class ValidatorTxBuilder extends DelegatorTxBuilder {
|
|
6
|
-
protected _delegationFeeRate: number | undefined;
|
|
7
|
-
/**
|
|
8
|
-
* @param coinConfig
|
|
9
|
-
*/
|
|
10
|
-
constructor(coinConfig: Readonly<CoinConfig>);
|
|
11
|
-
/**
|
|
12
|
-
* get transaction type
|
|
13
|
-
* @protected
|
|
14
|
-
*/
|
|
15
|
-
protected get transactionType(): TransactionType;
|
|
16
|
-
/**
|
|
17
|
-
* set the delegationFeeRate
|
|
18
|
-
* @param value number
|
|
19
|
-
*/
|
|
20
|
-
delegationFeeRate(value: number): this;
|
|
21
|
-
/**
|
|
22
|
-
* Validate that the delegation fee is at least the minDelegationFee
|
|
23
|
-
* @param delegationFeeRate number
|
|
24
|
-
*/
|
|
25
|
-
validateDelegationFeeRate(delegationFeeRate: number): void;
|
|
26
|
-
/** @inheritdoc */
|
|
27
|
-
initBuilder(tx: Tx): this;
|
|
28
|
-
/**
|
|
29
|
-
* Verify if the transaction is an AddValidator transaction
|
|
30
|
-
* @param tx
|
|
31
|
-
*/
|
|
32
|
-
static verifyTxType(tx: unknown): boolean;
|
|
33
|
-
verifyTxType(tx: unknown): boolean;
|
|
34
|
-
/**
|
|
35
|
-
* Build the validator transaction using FlareJS PVM API
|
|
36
|
-
* @protected
|
|
37
|
-
*/
|
|
38
|
-
protected buildFlareTransaction(): Promise<void>;
|
|
39
|
-
}
|
|
40
|
-
//# sourceMappingURL=validatorTxBuilder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validatorTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/validatorTxBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAS7B,qBAAa,kBAAmB,SAAQ,kBAAkB;IACxD,SAAS,CAAC,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;IAEjD;;OAEG;gBACS,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK5C;;;OAGG;IACH,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;OAGG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMtC;;;OAGG;IACH,yBAAyB,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAQ1D,kBAAkB;IAClB,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI;IAazB;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO;IA0CzC,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO;IAIlC;;;OAGG;cACa,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;CA0FvD"}
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ValidatorTxBuilder = void 0;
|
|
4
|
-
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
5
|
-
const delegatorTxBuilder_1 = require("./delegatorTxBuilder");
|
|
6
|
-
const constants_1 = require("./constants");
|
|
7
|
-
class ValidatorTxBuilder extends delegatorTxBuilder_1.DelegatorTxBuilder {
|
|
8
|
-
/**
|
|
9
|
-
* @param coinConfig
|
|
10
|
-
*/
|
|
11
|
-
constructor(coinConfig) {
|
|
12
|
-
super(coinConfig);
|
|
13
|
-
this._delegationFeeRate = undefined;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* get transaction type
|
|
17
|
-
* @protected
|
|
18
|
-
*/
|
|
19
|
-
get transactionType() {
|
|
20
|
-
return sdk_core_1.TransactionType.AddValidator;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* set the delegationFeeRate
|
|
24
|
-
* @param value number
|
|
25
|
-
*/
|
|
26
|
-
delegationFeeRate(value) {
|
|
27
|
-
this.validateDelegationFeeRate(value);
|
|
28
|
-
this._delegationFeeRate = value;
|
|
29
|
-
return this;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Validate that the delegation fee is at least the minDelegationFee
|
|
33
|
-
* @param delegationFeeRate number
|
|
34
|
-
*/
|
|
35
|
-
validateDelegationFeeRate(delegationFeeRate) {
|
|
36
|
-
// For Flare, use a minimum delegation fee of 2% (20000 basis points)
|
|
37
|
-
const minDelegationFee = constants_1.MIN_DELEGATION_FEE_BASIS_POINTS; // 2%
|
|
38
|
-
if (delegationFeeRate < minDelegationFee) {
|
|
39
|
-
throw new sdk_core_1.BuildTransactionError(`Delegation fee cannot be less than ${minDelegationFee} basis points (2%)`);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
/** @inheritdoc */
|
|
43
|
-
initBuilder(tx) {
|
|
44
|
-
super.initBuilder(tx);
|
|
45
|
-
// Extract delegation fee rate from transaction if available
|
|
46
|
-
const txData = tx;
|
|
47
|
-
const validatorData = txData;
|
|
48
|
-
if (validatorData.delegationFeeRate !== undefined) {
|
|
49
|
-
this._delegationFeeRate = validatorData.delegationFeeRate;
|
|
50
|
-
}
|
|
51
|
-
return this;
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Verify if the transaction is an AddValidator transaction
|
|
55
|
-
* @param tx
|
|
56
|
-
*/
|
|
57
|
-
static verifyTxType(tx) {
|
|
58
|
-
// FlareJS validator transaction type verification
|
|
59
|
-
try {
|
|
60
|
-
if (!tx || typeof tx !== constants_1.OBJECT_TYPE_STRING) {
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
const txData = tx;
|
|
64
|
-
// Check for validator transaction type markers
|
|
65
|
-
const validValidatorTypes = constants_1.VALIDATOR_TRANSACTION_TYPES;
|
|
66
|
-
// Primary type verification
|
|
67
|
-
if (txData.type && typeof txData.type === constants_1.STRING_TYPE) {
|
|
68
|
-
if (validValidatorTypes.includes(txData.type)) {
|
|
69
|
-
return true;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
// Secondary verification through transaction structure
|
|
73
|
-
const hasValidatorStructure =
|
|
74
|
-
// Has delegation fee rate (unique to validators)
|
|
75
|
-
(typeof txData.delegationFeeRate === 'number' ||
|
|
76
|
-
(txData.delegation &&
|
|
77
|
-
typeof txData.delegation.delegationFeeRate === 'number')) &&
|
|
78
|
-
// Has node ID
|
|
79
|
-
(txData.nodeID || (txData.validator && txData.validator.nodeID)) &&
|
|
80
|
-
// Has staking information
|
|
81
|
-
(txData.stakeAmount || (txData.stake && txData.stake.amount));
|
|
82
|
-
// FlareJS-specific markers
|
|
83
|
-
const hasFlareJSValidatorMarkers = txData._txType === 'addValidator' ||
|
|
84
|
-
txData._validatorType === 'primary' ||
|
|
85
|
-
(txData.validator && txData.validator._flareJSReady === true);
|
|
86
|
-
return Boolean(hasValidatorStructure || hasFlareJSValidatorMarkers);
|
|
87
|
-
}
|
|
88
|
-
catch (error) {
|
|
89
|
-
return false;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
verifyTxType(tx) {
|
|
93
|
-
return ValidatorTxBuilder.verifyTxType(tx);
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Build the validator transaction using FlareJS PVM API
|
|
97
|
-
* @protected
|
|
98
|
-
*/
|
|
99
|
-
async buildFlareTransaction() {
|
|
100
|
-
// Basic validation
|
|
101
|
-
if (!this._nodeID) {
|
|
102
|
-
throw new sdk_core_1.BuildTransactionError('Node ID is required for validator transaction');
|
|
103
|
-
}
|
|
104
|
-
if (!this._startTime) {
|
|
105
|
-
throw new sdk_core_1.BuildTransactionError('Start time is required for validator transaction');
|
|
106
|
-
}
|
|
107
|
-
if (!this._endTime) {
|
|
108
|
-
throw new sdk_core_1.BuildTransactionError('End time is required for validator transaction');
|
|
109
|
-
}
|
|
110
|
-
if (!this._stakeAmount) {
|
|
111
|
-
throw new sdk_core_1.BuildTransactionError('Stake amount is required for validator transaction');
|
|
112
|
-
}
|
|
113
|
-
if (this._delegationFeeRate === undefined) {
|
|
114
|
-
throw new sdk_core_1.BuildTransactionError('Delegation fee rate is required for validator transaction');
|
|
115
|
-
}
|
|
116
|
-
const rewardAddresses = this.transaction._rewardAddresses;
|
|
117
|
-
if (!rewardAddresses || rewardAddresses.length === 0) {
|
|
118
|
-
throw new sdk_core_1.BuildTransactionError('Reward addresses are required for validator transaction');
|
|
119
|
-
}
|
|
120
|
-
// Validate time range (inherited from DelegatorTxBuilder logic)
|
|
121
|
-
if (this._endTime <= this._startTime) {
|
|
122
|
-
throw new sdk_core_1.BuildTransactionError('End time must be after start time');
|
|
123
|
-
}
|
|
124
|
-
try {
|
|
125
|
-
// FlareJS PVM API implementation for validator transactions
|
|
126
|
-
// This creates a structured validator transaction compatible with FlareJS patterns
|
|
127
|
-
const enhancedValidatorTx = {
|
|
128
|
-
type: 'PlatformVM.AddValidatorTx',
|
|
129
|
-
networkID: this.transaction._networkID,
|
|
130
|
-
blockchainID: this.transaction._blockchainID,
|
|
131
|
-
// Enhanced validator information structure
|
|
132
|
-
validator: {
|
|
133
|
-
nodeID: this._nodeID,
|
|
134
|
-
startTime: this._startTime,
|
|
135
|
-
endTime: this._endTime,
|
|
136
|
-
stakeAmount: this._stakeAmount,
|
|
137
|
-
// FlareJS validator markers
|
|
138
|
-
_validatorType: 'primary',
|
|
139
|
-
_flareJSReady: true,
|
|
140
|
-
_pvmCompatible: true,
|
|
141
|
-
},
|
|
142
|
-
// Enhanced delegation information
|
|
143
|
-
delegation: {
|
|
144
|
-
delegationFeeRate: this._delegationFeeRate,
|
|
145
|
-
rewardAddress: rewardAddresses[0],
|
|
146
|
-
// FlareJS delegation markers
|
|
147
|
-
_delegationType: 'validator',
|
|
148
|
-
_feeRate: this._delegationFeeRate,
|
|
149
|
-
_flareJSReady: true,
|
|
150
|
-
},
|
|
151
|
-
// Enhanced transaction metadata
|
|
152
|
-
stake: {
|
|
153
|
-
assetID: this.getAssetId(),
|
|
154
|
-
amount: this._stakeAmount,
|
|
155
|
-
addresses: this.transaction._fromAddresses,
|
|
156
|
-
threshold: this.transaction._threshold || 1,
|
|
157
|
-
locktime: this.transaction._locktime || 0n,
|
|
158
|
-
// FlareJS stake markers
|
|
159
|
-
_stakeType: 'validator',
|
|
160
|
-
_flareJSReady: true,
|
|
161
|
-
},
|
|
162
|
-
// Enhanced credential structure for validators
|
|
163
|
-
credentials: this.transaction._fromAddresses.map(() => ({
|
|
164
|
-
signatures: [], // Will be populated by FlareJS signing
|
|
165
|
-
_credentialType: 'secp256k1fx.Credential',
|
|
166
|
-
_validatorCredential: true,
|
|
167
|
-
_flareJSReady: true,
|
|
168
|
-
})),
|
|
169
|
-
// Transaction metadata
|
|
170
|
-
memo: Buffer.alloc(0),
|
|
171
|
-
};
|
|
172
|
-
this.transaction.setTransaction(enhancedValidatorTx);
|
|
173
|
-
}
|
|
174
|
-
catch (error) {
|
|
175
|
-
throw new sdk_core_1.BuildTransactionError(`Failed to build validator transaction: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
exports.ValidatorTxBuilder = ValidatorTxBuilder;
|
|
180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi92YWxpZGF0b3JUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsOENBQXlFO0FBRXpFLDZEQUEwRDtBQUcxRCwyQ0FLcUI7QUFFckIsTUFBYSxrQkFBbUIsU0FBUSx1Q0FBa0I7SUFHeEQ7O09BRUc7SUFDSCxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLFlBQVksQ0FBQztJQUN0QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCLENBQUMsS0FBYTtRQUM3QixJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUNoQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSCx5QkFBeUIsQ0FBQyxpQkFBeUI7UUFDakQscUVBQXFFO1FBQ3JFLE1BQU0sZ0JBQWdCLEdBQUcsMkNBQStCLENBQUMsQ0FBQyxLQUFLO1FBQy9ELElBQUksaUJBQWlCLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztZQUN6QyxNQUFNLElBQUksZ0NBQXFCLENBQUMsc0NBQXNDLGdCQUFnQixvQkFBb0IsQ0FBQyxDQUFDO1FBQzlHLENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLFdBQVcsQ0FBQyxFQUFNO1FBQ2hCLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdEIsNERBQTREO1FBQzVELE1BQU0sTUFBTSxHQUFHLEVBQW1DLENBQUM7UUFDbkQsTUFBTSxhQUFhLEdBQUcsTUFBcUMsQ0FBQztRQUM1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dk1ELGdEQXVNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBEZWxlZ2F0b3JUeEJ1aWxkZXIgfSBmcm9tICcuL2RlbGVnYXRvclR4QnVpbGRlcic7XG5pbXBvcnQgeyBUeCB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgUmF3VHJhbnNhY3Rpb25EYXRhLCBWYWxpZGF0b3JFeHRlbmRlZFRyYW5zYWN0aW9uLCBWYWxpZGF0b3JSYXdUcmFuc2FjdGlvbkRhdGEgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7XG4gIE1JTl9ERUxFR0FUSU9OX0ZFRV9CQVNJU19QT0lOVFMsXG4gIE9CSkVDVF9UWVBFX1NUUklORyxcbiAgU1RSSU5HX1RZUEUsXG4gIFZBTElEQVRPUl9UUkFOU0FDVElPTl9UWVBFUyxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY2xhc3MgVmFsaWRhdG9yVHhCdWlsZGVyIGV4dGVuZHMgRGVsZWdhdG9yVHhCdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF9kZWxlZ2F0aW9uRmVlUmF0ZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gY29pbkNvbmZpZ1xuICAgKi9cbiAgY29uc3RydWN0b3IoY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihjb2luQ29uZmlnKTtcbiAgICB0aGlzLl9kZWxlZ2F0aW9uRmVlUmF0ZSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgdHJhbnNhY3Rpb24gdHlwZVxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuQWRkVmFsaWRhdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCB0aGUgZGVsZWdhdGlvbkZlZVJhdGVcbiAgICogQHBhcmFtIHZhbHVlIG51bWJlclxuICAgKi9cbiAgZGVsZWdhdGlvbkZlZVJhdGUodmFsdWU6IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVEZWxlZ2F0aW9uRmVlUmF0ZSh2YWx1ZSk7XG4gICAgdGhpcy5fZGVsZWdhdGlvbkZlZVJhdGUgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGF0IHRoZSBkZWxlZ2F0aW9uIGZlZSBpcyBhdCBsZWFzdCB0aGUgbWluRGVsZWdhdGlvbkZlZVxuICAgKiBAcGFyYW0gZGVsZWdhdGlvbkZlZVJhdGUgbnVtYmVyXG4gICAqL1xuICB2YWxpZGF0ZURlbGVnYXRpb25GZWVSYXRlKGRlbGVnYXRpb25GZWVSYXRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBGb3IgRmxhcmUsIHVzZSBhIG1pbmltdW0gZGVsZWdhdGlvbiBmZWUgb2YgMiUgKDIwMDAwIGJhc2lzIHBvaW50cylcbiAgICBjb25zdCBtaW5EZWxlZ2F0aW9uRmVlID0gTUlOX0RFTEVHQVRJT05fRkVFX0JBU0lTX1BPSU5UUzsgLy8gMiVcbiAgICBpZiAoZGVsZWdhdGlvbkZlZVJhdGUgPCBtaW5EZWxlZ2F0aW9uRmVlKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBEZWxlZ2F0aW9uIGZlZSBjYW5ub3QgYmUgbGVzcyB0aGFuICR7bWluRGVsZWdhdGlvbkZlZX0gYmFzaXMgcG9pbnRzICgyJSlgKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaW5pdEJ1aWxkZXIodHg6IFR4KTogdGhpcyB7XG4gICAgc3VwZXIuaW5pdEJ1aWxkZXIodHgpO1xuXG4gICAgLy8gRXh0cmFjdCBkZWxlZ2F0aW9uIGZlZSByYXRlIGZyb20gdHJhbnNhY3Rpb24gaWYgYXZhaWxhYmxlXG4gICAgY29uc3QgdHhEYXRhID0gdHggYXMgdW5rbm93biBhcyBSYXdUcmFuc2FjdGlvbkRhdGE7XG4gICAgY29uc3QgdmFsaWRhdG9yRGF0YSA9IHR4RGF0YSBhcyBWYWxpZGF0b3JSYXdUcmFuc2FjdGlvbkRhdGE7XG4gICAgaWYgKHZhbGlkYXRvckRhdGEuZGVsZWdhdGlvbkZlZVJhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fZGVsZWdhdGlvbkZlZVJhdGUgPSB2YWxpZGF0b3JEYXRhLmRlbGVnYXRpb25GZWVSYXRlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmeSBpZiB0aGUgdHJhbnNhY3Rpb24gaXMgYW4gQWRkVmFsaWRhdG9yIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB0eFxuICAgKi9cbiAgc3RhdGljIHZlcmlmeVR4VHlwZSh0eDogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIC8vIEZsYXJlSlMgdmFsaWRhdG9yIHRyYW5zYWN0aW9uIHR5cGUgdmVyaWZpY2F0aW9uXG4gICAgdHJ5IHtcbiAgICAgIGlmICghdHggfHwgdHlwZW9mIHR4ICE9PSBPQkpFQ1RfVFlQRV9TVFJJTkcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0eERhdGEgPSB0eCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgICAgLy8gQ2hlY2sgZm9yIHZhbGlkYXRvciB0cmFuc2FjdGlvbiB0eXBlIG1hcmtlcnNcbiAgICAgIGNvbnN0IHZhbGlkVmFsaWRhdG9yVHlwZXMgPSBWQUxJREFUT1JfVFJBTlNBQ1RJT05fVFlQRVM7XG5cbiAgICAgIC8vIFByaW1hcnkgdHlwZSB2ZXJpZmljYXRpb25cbiAgICAgIGlmICh0eERhdGEudHlwZSAmJiB0eXBlb2YgdHhEYXRhLnR5cGUgPT09IFNUUklOR19UWVBFKSB7XG4gICAgICAgIGlmICh2YWxpZFZhbGlkYXRvclR5cGVzLmluY2x1ZGVzKHR4RGF0YS50eXBlIGFzIHN0cmluZykpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTZWNvbmRhcnkgdmVyaWZpY2F0aW9uIHRocm91Z2ggdHJhbnNhY3Rpb24gc3RydWN0dXJlXG4gICAgICBjb25zdCBoYXNWYWxpZGF0b3JTdHJ1Y3R1cmUgPVxuICAgICAgICAvLyBIYXMgZGVsZWdhdGlvbiBmZWUgcmF0ZSAodW5pcXVlIHRvIHZhbGlkYXRvcnMpXG4gICAgICAgICh0eXBlb2YgdHhEYXRhLmRlbGVnYXRpb25GZWVSYXRlID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICh0eERhdGEuZGVsZWdhdGlvbiAmJlxuICAgICAgICAgICAgdHlwZW9mICh0eERhdGEuZGVsZWdhdGlvbiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuZGVsZWdhdGlvbkZlZVJhdGUgPT09ICdudW1iZXInKSkgJiZcbiAgICAgICAgLy8gSGFzIG5vZGUgSURcbiAgICAgICAgKHR4RGF0YS5ub2RlSUQgfHwgKHR4RGF0YS52YWxpZGF0b3IgJiYgKHR4RGF0YS52YWxpZGF0b3IgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLm5vZGVJRCkpICYmXG4gICAgICAgIC8vIEhhcyBzdGFraW5nIGluZm9ybWF0aW9uXG4gICAgICAgICh0eERhdGEuc3Rha2VBbW91bnQgfHwgKHR4RGF0YS5zdGFrZSAmJiAodHhEYXRhLnN0YWtlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5hbW91bnQpKTtcblxuICAgICAgLy8gRmxhcmVKUy1zcGVjaWZpYyBtYXJrZXJzXG4gICAgICBjb25zdCBoYXNGbGFyZUpTVmFsaWRhdG9yTWFya2VycyA9XG4gICAgICAgIHR4RGF0YS5fdHhUeXBlID09PSAnYWRkVmFsaWRhdG9yJyB8fFxuICAgICAgICB0eERhdGEuX3ZhbGlkYXRvclR5cGUgPT09ICdwcmltYXJ5JyB8fFxuICAgICAgICAodHhEYXRhLnZhbGlkYXRvciAmJiAodHhEYXRhLnZhbGlkYXRvciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuX2ZsYXJlSlNSZWFkeSA9PT0gdHJ1ZSk7XG5cbiAgICAgIHJldHVybiBCb29sZWFuKGhhc1ZhbGlkYXRvclN0cnVjdHVyZSB8fCBoYXNGbGFyZUpTVmFsaWRhdG9yTWFya2Vycyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB2ZXJpZnlUeFR5cGUodHg6IHVua25vd24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gVmFsaWRhdG9yVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSh0eCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIHZhbGlkYXRvciB0cmFuc2FjdGlvbiB1c2luZyBGbGFyZUpTIFBWTSBBUElcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkRmxhcmVUcmFuc2FjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBCYXNpYyB2YWxpZGF0aW9uXG4gICAgaWYgKCF0aGlzLl9ub2RlSUQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ05vZGUgSUQgaXMgcmVxdWlyZWQgZm9yIHZhbGlkYXRvciB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3N0YXJ0VGltZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignU3RhcnQgdGltZSBpcyByZXF1aXJlZCBmb3IgdmFsaWRhdG9yIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fZW5kVGltZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRW5kIHRpbWUgaXMgcmVxdWlyZWQgZm9yIHZhbGlkYXRvciB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3N0YWtlQW1vdW50KSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdTdGFrZSBhbW91bnQgaXMgcmVxdWlyZWQgZm9yIHZhbGlkYXRvciB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZGVsZWdhdGlvbkZlZVJhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRGVsZWdhdGlvbiBmZWUgcmF0ZSBpcyByZXF1aXJlZCBmb3IgdmFsaWRhdG9yIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmV3YXJkQWRkcmVzc2VzID0gKHRoaXMudHJhbnNhY3Rpb24gYXMgdW5rbm93biBhcyBWYWxpZGF0b3JFeHRlbmRlZFRyYW5zYWN0aW9uKS5fcmV3YXJkQWRkcmVzc2VzO1xuICAgIGlmICghcmV3YXJkQWRkcmVzc2VzIHx8IHJld2FyZEFkZHJlc3Nlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1Jld2FyZCBhZGRyZXNzZXMgYXJlIHJlcXVpcmVkIGZvciB2YWxpZGF0b3IgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0aW1lIHJhbmdlIChpbmhlcml0ZWQgZnJvbSBEZWxlZ2F0b3JUeEJ1aWxkZXIgbG9naWMpXG4gICAgaWYgKHRoaXMuX2VuZFRpbWUgPD0gdGhpcy5fc3RhcnRUaW1lKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdFbmQgdGltZSBtdXN0IGJlIGFmdGVyIHN0YXJ0IHRpbWUnKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gRmxhcmVKUyBQVk0gQVBJIGltcGxlbWVudGF0aW9uIGZvciB2YWxpZGF0b3IgdHJhbnNhY3Rpb25zXG4gICAgICAvLyBUaGlzIGNyZWF0ZXMgYSBzdHJ1Y3R1cmVkIHZhbGlkYXRvciB0cmFuc2FjdGlvbiBjb21wYXRpYmxlIHdpdGggRmxhcmVKUyBwYXR0ZXJuc1xuXG4gICAgICBjb25zdCBlbmhhbmNlZFZhbGlkYXRvclR4ID0ge1xuICAgICAgICB0eXBlOiAnUGxhdGZvcm1WTS5BZGRWYWxpZGF0b3JUeCcsXG4gICAgICAgIG5ldHdvcmtJRDogdGhpcy50cmFuc2FjdGlvbi5fbmV0d29ya0lELFxuICAgICAgICBibG9ja2NoYWluSUQ6IHRoaXMudHJhbnNhY3Rpb24uX2Jsb2NrY2hhaW5JRCxcblxuICAgICAgICAvLyBFbmhhbmNlZCB2YWxpZGF0b3IgaW5mb3JtYXRpb24gc3RydWN0dXJlXG4gICAgICAgIHZhbGlkYXRvcjoge1xuICAgICAgICAgIG5vZGVJRDogdGhpcy5fbm9kZUlELFxuICAgICAgICAgIHN0YXJ0VGltZTogdGhpcy5fc3RhcnRUaW1lLFxuICAgICAgICAgIGVuZFRpbWU6IHRoaXMuX2VuZFRpbWUsXG4gICAgICAgICAgc3Rha2VBbW91bnQ6IHRoaXMuX3N0YWtlQW1vdW50LFxuICAgICAgICAgIC8vIEZsYXJlSlMgdmFsaWRhdG9yIG1hcmtlcnNcbiAgICAgICAgICBfdmFsaWRhdG9yVHlwZTogJ3ByaW1hcnknLFxuICAgICAgICAgIF9mbGFyZUpTUmVhZHk6IHRydWUsXG4gICAgICAgICAgX3B2bUNvbXBhdGlibGU6IHRydWUsXG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gRW5oYW5jZWQgZGVsZWdhdGlvbiBpbmZvcm1hdGlvblxuICAgICAgICBkZWxlZ2F0aW9uOiB7XG4gICAgICAgICAgZGVsZWdhdGlvbkZlZVJhdGU6IHRoaXMuX2RlbGVnYXRpb25GZWVSYXRlLFxuICAgICAgICAgIHJld2FyZEFkZHJlc3M6IHJld2FyZEFkZHJlc3Nlc1swXSxcbiAgICAgICAgICAvLyBGbGFyZUpTIGRlbGVnYXRpb24gbWFya2Vyc1xuICAgICAgICAgIF9kZWxlZ2F0aW9uVHlwZTogJ3ZhbGlkYXRvcicsXG4gICAgICAgICAgX2ZlZVJhdGU6IHRoaXMuX2RlbGVnYXRpb25GZWVSYXRlLFxuICAgICAgICAgIF9mbGFyZUpTUmVhZHk6IHRydWUsXG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gRW5oYW5jZWQgdHJhbnNhY3Rpb24gbWV0YWRhdGFcbiAgICAgICAgc3Rha2U6IHtcbiAgICAgICAgICBhc3NldElEOiB0aGlzLmdldEFzc2V0SWQoKSxcbiAgICAgICAgICBhbW91bnQ6IHRoaXMuX3N0YWtlQW1vdW50LFxuICAgICAgICAgIGFkZHJlc3NlczogdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3NlcyxcbiAgICAgICAgICB0aHJlc2hvbGQ6IHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCB8fCAxLFxuICAgICAgICAgIGxvY2t0aW1lOiB0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSB8fCAwbixcbiAgICAgICAgICAvLyBGbGFyZUpTIHN0YWtlIG1hcmtlcnNcbiAgICAgICAgICBfc3Rha2VUeXBlOiAndmFsaWRhdG9yJyxcbiAgICAgICAgICBfZmxhcmVKU1JlYWR5OiB0cnVlLFxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIEVuaGFuY2VkIGNyZWRlbnRpYWwgc3RydWN0dXJlIGZvciB2YWxpZGF0b3JzXG4gICAgICAgIGNyZWRlbnRpYWxzOiB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzLm1hcCgoKSA9PiAoe1xuICAgICAgICAgIHNpZ25hdHVyZXM6IFtdLCAvLyBXaWxsIGJlIHBvcHVsYXRlZCBieSBGbGFyZUpTIHNpZ25pbmdcbiAgICAgICAgICBfY3JlZGVudGlhbFR5cGU6ICdzZWNwMjU2azFmeC5DcmVkZW50aWFsJyxcbiAgICAgICAgICBfdmFsaWRhdG9yQ3JlZGVudGlhbDogdHJ1ZSxcbiAgICAgICAgICBfZmxhcmVKU1JlYWR5OiB0cnVlLFxuICAgICAgICB9KSksXG5cbiAgICAgICAgLy8gVHJhbnNhY3Rpb24gbWV0YWRhdGFcbiAgICAgICAgbWVtbzogQnVmZmVyLmFsbG9jKDApLFxuICAgICAgfTtcblxuICAgICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbihlbmhhbmNlZFZhbGlkYXRvclR4KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBidWlsZCB2YWxpZGF0b3IgdHJhbnNhY3Rpb246ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"delegatorTxBuilder.test.d.ts","sourceRoot":"","sources":["../../../test/unit/delegatorTxBuilder.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
const statics_1 = require("@bitgo/statics");
|
|
37
|
-
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
38
|
-
const assert = __importStar(require("assert"));
|
|
39
|
-
const delegatorTxBuilder_1 = require("../../src/lib/delegatorTxBuilder");
|
|
40
|
-
describe('DelegatorTxBuilder', function () {
|
|
41
|
-
const coinConfig = statics_1.coins.get('tflrp');
|
|
42
|
-
let builder;
|
|
43
|
-
beforeEach(function () {
|
|
44
|
-
builder = new delegatorTxBuilder_1.DelegatorTxBuilder(coinConfig);
|
|
45
|
-
});
|
|
46
|
-
describe('Constructor', function () {
|
|
47
|
-
it('should initialize with coin config', function () {
|
|
48
|
-
assert.ok(builder);
|
|
49
|
-
assert.ok(builder instanceof delegatorTxBuilder_1.DelegatorTxBuilder);
|
|
50
|
-
});
|
|
51
|
-
it('should initialize with default values', function () {
|
|
52
|
-
assert.strictEqual(builder['_nodeID'], '');
|
|
53
|
-
assert.strictEqual(builder['_startTime'], 0n);
|
|
54
|
-
assert.strictEqual(builder['_endTime'], 0n);
|
|
55
|
-
assert.strictEqual(builder['_stakeAmount'], 0n);
|
|
56
|
-
});
|
|
57
|
-
it('should set transaction type to AddDelegator', function () {
|
|
58
|
-
assert.strictEqual(builder['transactionType'], sdk_core_1.TransactionType.AddDelegator);
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
describe('nodeID', function () {
|
|
62
|
-
it('should set node ID correctly', function () {
|
|
63
|
-
const nodeID = 'NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg';
|
|
64
|
-
const result = builder.nodeID(nodeID);
|
|
65
|
-
assert.strictEqual(builder['_nodeID'], nodeID);
|
|
66
|
-
assert.strictEqual(result, builder);
|
|
67
|
-
});
|
|
68
|
-
it('should throw error for empty node ID', function () {
|
|
69
|
-
assert.throws(() => builder.nodeID(''), sdk_core_1.BuildTransactionError);
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
describe('startTime', function () {
|
|
73
|
-
it('should set start time from number', function () {
|
|
74
|
-
const time = 1640995200;
|
|
75
|
-
const result = builder.startTime(time);
|
|
76
|
-
assert.strictEqual(builder['_startTime'], BigInt(time));
|
|
77
|
-
assert.strictEqual(result, builder);
|
|
78
|
-
});
|
|
79
|
-
it('should set start time from string', function () {
|
|
80
|
-
const time = '1640995200';
|
|
81
|
-
const result = builder.startTime(time);
|
|
82
|
-
assert.strictEqual(builder['_startTime'], BigInt(time));
|
|
83
|
-
assert.strictEqual(result, builder);
|
|
84
|
-
});
|
|
85
|
-
it('should set start time from bigint', function () {
|
|
86
|
-
const time = 1640995200n;
|
|
87
|
-
const result = builder.startTime(time);
|
|
88
|
-
assert.strictEqual(builder['_startTime'], time);
|
|
89
|
-
assert.strictEqual(result, builder);
|
|
90
|
-
});
|
|
91
|
-
it('should throw error for zero start time', function () {
|
|
92
|
-
assert.throws(() => builder.startTime(0), sdk_core_1.BuildTransactionError);
|
|
93
|
-
});
|
|
94
|
-
it('should throw error for negative start time', function () {
|
|
95
|
-
assert.throws(() => builder.startTime(-1), sdk_core_1.BuildTransactionError);
|
|
96
|
-
});
|
|
97
|
-
it('should throw error when start time is after end time', function () {
|
|
98
|
-
builder.endTime(1640995200); // Set end time first
|
|
99
|
-
assert.throws(() => builder.startTime(1672531200), sdk_core_1.BuildTransactionError); // Start time after end time
|
|
100
|
-
});
|
|
101
|
-
it('should allow start time before end time', function () {
|
|
102
|
-
builder.endTime(1672531200); // Set end time first
|
|
103
|
-
const result = builder.startTime(1640995200); // Start time before end time
|
|
104
|
-
assert.strictEqual(result, builder);
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
describe('endTime', function () {
|
|
108
|
-
it('should set end time from number', function () {
|
|
109
|
-
const time = 1672531200;
|
|
110
|
-
const result = builder.endTime(time);
|
|
111
|
-
assert.strictEqual(builder['_endTime'], BigInt(time));
|
|
112
|
-
assert.strictEqual(result, builder);
|
|
113
|
-
});
|
|
114
|
-
it('should set end time from string', function () {
|
|
115
|
-
const time = '1672531200';
|
|
116
|
-
const result = builder.endTime(time);
|
|
117
|
-
assert.strictEqual(builder['_endTime'], BigInt(time));
|
|
118
|
-
assert.strictEqual(result, builder);
|
|
119
|
-
});
|
|
120
|
-
it('should set end time from bigint', function () {
|
|
121
|
-
const time = 1672531200n;
|
|
122
|
-
const result = builder.endTime(time);
|
|
123
|
-
assert.strictEqual(builder['_endTime'], time);
|
|
124
|
-
assert.strictEqual(result, builder);
|
|
125
|
-
});
|
|
126
|
-
it('should throw error for zero end time', function () {
|
|
127
|
-
assert.throws(() => builder.endTime(0), sdk_core_1.BuildTransactionError);
|
|
128
|
-
});
|
|
129
|
-
it('should throw error for negative end time', function () {
|
|
130
|
-
assert.throws(() => builder.endTime(-1), sdk_core_1.BuildTransactionError);
|
|
131
|
-
});
|
|
132
|
-
it('should throw error when end time is before start time', function () {
|
|
133
|
-
builder.startTime(1672531200); // Set start time first
|
|
134
|
-
assert.throws(() => builder.endTime(1640995200), sdk_core_1.BuildTransactionError); // End time before start time
|
|
135
|
-
});
|
|
136
|
-
it('should allow end time after start time', function () {
|
|
137
|
-
builder.startTime(1640995200); // Set start time first
|
|
138
|
-
const result = builder.endTime(1672531200); // End time after start time
|
|
139
|
-
assert.strictEqual(result, builder);
|
|
140
|
-
});
|
|
141
|
-
});
|
|
142
|
-
describe('stakeAmount', function () {
|
|
143
|
-
it('should set stake amount from number', function () {
|
|
144
|
-
const amount = 50000000000000000000n;
|
|
145
|
-
const result = builder.stakeAmount(amount);
|
|
146
|
-
assert.strictEqual(builder['_stakeAmount'], amount);
|
|
147
|
-
assert.strictEqual(result, builder);
|
|
148
|
-
});
|
|
149
|
-
it('should set stake amount from string', function () {
|
|
150
|
-
const amount = '50000000000000000000';
|
|
151
|
-
const result = builder.stakeAmount(amount);
|
|
152
|
-
assert.strictEqual(builder['_stakeAmount'], BigInt(amount));
|
|
153
|
-
assert.strictEqual(result, builder);
|
|
154
|
-
});
|
|
155
|
-
it('should throw error for zero stake amount', function () {
|
|
156
|
-
assert.throws(() => builder.stakeAmount(0), sdk_core_1.BuildTransactionError);
|
|
157
|
-
});
|
|
158
|
-
it('should throw error for negative stake amount', function () {
|
|
159
|
-
assert.throws(() => builder.stakeAmount(-1), sdk_core_1.BuildTransactionError);
|
|
160
|
-
});
|
|
161
|
-
});
|
|
162
|
-
describe('rewardAddresses', function () {
|
|
163
|
-
it('should set reward addresses correctly', function () {
|
|
164
|
-
const addresses = ['P-flare1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpk7kph'];
|
|
165
|
-
const result = builder.rewardAddresses(addresses);
|
|
166
|
-
assert.strictEqual(result, builder);
|
|
167
|
-
});
|
|
168
|
-
it('should throw error for empty addresses array', function () {
|
|
169
|
-
assert.throws(() => builder.rewardAddresses([]), sdk_core_1.BuildTransactionError);
|
|
170
|
-
});
|
|
171
|
-
});
|
|
172
|
-
describe('verifyTxType', function () {
|
|
173
|
-
it('should return true for valid delegator transaction', function () {
|
|
174
|
-
const tx = {
|
|
175
|
-
nodeID: 'NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg',
|
|
176
|
-
stakeAmount: '50000000000000000000',
|
|
177
|
-
};
|
|
178
|
-
assert.strictEqual(delegatorTxBuilder_1.DelegatorTxBuilder.verifyTxType(tx), true);
|
|
179
|
-
assert.strictEqual(builder.verifyTxType(tx), true);
|
|
180
|
-
});
|
|
181
|
-
it('should return false for invalid transaction', function () {
|
|
182
|
-
const tx = { stakeAmount: '50000000000000000000' };
|
|
183
|
-
assert.strictEqual(delegatorTxBuilder_1.DelegatorTxBuilder.verifyTxType(tx), false);
|
|
184
|
-
});
|
|
185
|
-
it('should return false for empty transaction', function () {
|
|
186
|
-
assert.strictEqual(delegatorTxBuilder_1.DelegatorTxBuilder.verifyTxType({}), false);
|
|
187
|
-
});
|
|
188
|
-
});
|
|
189
|
-
describe('buildFlareTransaction', function () {
|
|
190
|
-
beforeEach(function () {
|
|
191
|
-
builder
|
|
192
|
-
.nodeID('NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg')
|
|
193
|
-
.startTime(1640995200)
|
|
194
|
-
.endTime(1672531200)
|
|
195
|
-
.stakeAmount(50000000000000000000n)
|
|
196
|
-
.rewardAddresses(['P-flare1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpk7kph']);
|
|
197
|
-
});
|
|
198
|
-
it('should throw error if nodeID is missing', async function () {
|
|
199
|
-
builder['_nodeID'] = '';
|
|
200
|
-
await assert.rejects(builder['buildFlareTransaction'](), sdk_core_1.BuildTransactionError);
|
|
201
|
-
});
|
|
202
|
-
it('should throw error if startTime is missing', async function () {
|
|
203
|
-
builder['_startTime'] = 0n;
|
|
204
|
-
await assert.rejects(builder['buildFlareTransaction'](), sdk_core_1.BuildTransactionError);
|
|
205
|
-
});
|
|
206
|
-
it('should throw error if endTime is missing', async function () {
|
|
207
|
-
builder['_endTime'] = 0n;
|
|
208
|
-
await assert.rejects(builder['buildFlareTransaction'](), sdk_core_1.BuildTransactionError);
|
|
209
|
-
});
|
|
210
|
-
it('should throw error if stakeAmount is missing', async function () {
|
|
211
|
-
builder['_stakeAmount'] = 0n;
|
|
212
|
-
await assert.rejects(builder['buildFlareTransaction'](), sdk_core_1.BuildTransactionError);
|
|
213
|
-
});
|
|
214
|
-
it('should throw error if end time is before start time', function () {
|
|
215
|
-
// This test verifies that time validation happens immediately when setting values
|
|
216
|
-
assert.throws(() => {
|
|
217
|
-
builder.startTime(1672531200).endTime(1640995200);
|
|
218
|
-
}, sdk_core_1.BuildTransactionError);
|
|
219
|
-
});
|
|
220
|
-
});
|
|
221
|
-
describe('method chaining', function () {
|
|
222
|
-
it('should support method chaining', function () {
|
|
223
|
-
const result = builder
|
|
224
|
-
.nodeID('NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg')
|
|
225
|
-
.startTime(1640995200)
|
|
226
|
-
.endTime(1672531200)
|
|
227
|
-
.stakeAmount(50000000000000000000n)
|
|
228
|
-
.rewardAddresses(['P-flare1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpk7kph']);
|
|
229
|
-
assert.strictEqual(result, builder);
|
|
230
|
-
});
|
|
231
|
-
});
|
|
232
|
-
});
|
|
233
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZWdhdG9yVHhCdWlsZGVyLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvZGVsZWdhdG9yVHhCdWlsZGVyLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0Q0FBdUM7QUFDdkMsOENBQXlFO0FBQ3pFLCtDQUFpQztBQUNqQyx5RUFBc0U7QUFFdEUsUUFBUSxDQUFDLG9CQUFvQixFQUFFO0lBQzdCLE1BQU0sVUFBVSxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsSUFBSSxPQUEyQixDQUFDO0lBRWhDLFVBQVUsQ0FBQztRQUNULE9BQU8sR0FBRyxJQUFJLHVDQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQy9DLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGFBQWEsRUFBRTtRQUN0QixFQUFFLENBQUMsb0NBQW9DLEVBQUU7WUFDdkMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuQixNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sWUFBWSx1Q0FBa0IsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVDQUF1QyxFQUFFO1lBQzFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQyxD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QyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhDQUE4QyxFQUFFLEtBQUs7WUFDdEQsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUM3QixNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsRUFBRSxnQ0FBcUIsQ0FBQyxDQUFDO1FBQ2xGLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHFEQUFxRCxFQUFFO1lBQ3hELGtGQUFrRjtZQUNsRixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDakIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDcEQsQ0FBQyxFQUFFLGdDQUFxQixDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtRQUMxQixFQUFFLENBQUMsZ0NBQWdDLEVBQUU7WUFDbkMsTUFBTSxNQUFNLEdBQUcsT0FBTztpQkFDbkIsTUFBTSxDQUFDLDBDQUEwQyxDQUFDO2lCQUNsRCxTQUFTLENBQUMsVUFBVSxDQUFDO2lCQUNyQixPQUFPLENBQUMsVUFBVSxDQUFDO2lCQUNuQixXQUFXLENBQUMscUJBQXFCLENBQUM7aUJBQ2xDLGVBQWUsQ0FBQyxDQUFDLHNEQUFzRCxDQUFDLENBQUMsQ0FBQztZQUU3RSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgRGVsZWdhdG9yVHhCdWlsZGVyIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi9kZWxlZ2F0b3JUeEJ1aWxkZXInO1xuXG5kZXNjcmliZSgnRGVsZWdhdG9yVHhCdWlsZGVyJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luQ29uZmlnID0gY29pbnMuZ2V0KCd0ZmxycCcpO1xuICBsZXQgYnVpbGRlcjogRGVsZWdhdG9yVHhCdWlsZGVyO1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIGJ1aWxkZXIgPSBuZXcgRGVsZWdhdG9yVHhCdWlsZGVyKGNvaW5Db25maWcpO1xuICB9KTtcblxuICBkZXNjcmliZSgnQ29uc3RydWN0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHdpdGggY29pbiBjb25maWcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQub2soYnVpbGRlcik7XG4gICAgICBhc3NlcnQub2soYnVpbGRlciBpbnN0YW5jZW9mIERlbGVnYXRvclR4QnVpbGRlcik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgd2l0aCBkZWZhdWx0IHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChidWlsZGVyWydfbm9kZUlEJ10sICcnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChidWlsZGVyWydfc3RhcnRUaW1lJ10sIDBuKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChidWlsZGVyWydfZW5kVGltZSddLCAwbik7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYnVpbGRlclsnX3N0YWtlQW1vdW50J10sIDBuKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2V0IHRyYW5zYWN0aW9uIHR5cGUgdG8gQWRkRGVsZWdhdG9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ1aWxkZXJbJ3RyYW5zYWN0aW9uVHlwZSddLCBUcmFuc2FjdGlvblR5cGUuQWRkRGVsZWdhdG9yKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ25vZGVJRCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHNldCBub2RlIElEIGNvcnJlY3RseScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG5vZGVJRCA9ICdOb2RlSUQtN1hodzJtRHh1RFM0NGo0MlRDQjZVNTU3OWVzYlN0M0xnJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkZXIubm9kZUlEKG5vZGVJRCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYnVpbGRlclsnX25vZGVJRCddLCBub2RlSUQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgYnVpbGRlcik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBlbXB0eSBub2RlIElEJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBidWlsZGVyLm5vZGVJRCgnJyksIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzdGFydFRpbWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzZXQgc3RhcnQgdGltZSBmcm9tIG51bWJlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHRpbWUgPSAxNjQwOTk1MjAwO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYnVpbGRlci5zdGFydFRpbWUodGltZSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYnVpbGRlclsnX3N0YXJ0VGltZSddLCBCaWdJbnQodGltZSkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgYnVpbGRlcik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNldCBzdGFydCB0aW1lIGZyb20gc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdGltZSA9ICcxNjQwOTk1MjAwJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkZXIuc3RhcnRUaW1lKHRpbWUpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ1aWxkZXJbJ19zdGFydFRpbWUnXSwgQmlnSW50KHRpbWUpKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIGJ1aWxkZXIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzZXQgc3RhcnQgdGltZSBmcm9tIGJpZ2ludCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHRpbWUgPSAxNjQwOTk1MjAwbjtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkZXIuc3RhcnRUaW1lKHRpbWUpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ1aWxkZXJbJ19zdGFydFRpbWUnXSwgdGltZSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCBidWlsZGVyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIHplcm8gc3RhcnQgdGltZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5zdGFydFRpbWUoMCksIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBuZWdhdGl2ZSBzdGFydCB0aW1lJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBidWlsZGVyLnN0YXJ0VGltZSgtMSksIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4gc3RhcnQgdGltZSBpcyBhZnRlciBlbmQgdGltZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJ1aWxkZXIuZW5kVGltZSgxNjQwOTk1MjAwKTsgLy8gU2V0IGVuZCB0aW1lIGZpcnN0XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJ1aWxkZXIuc3RhcnRUaW1lKDE2NzI1MzEyMDApLCBCdWlsZFRyYW5zYWN0aW9uRXJyb3IpOyAvLyBTdGFydCB0aW1lIGFmdGVyIGVuZCB0aW1lXG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFsbG93IHN0YXJ0IHRpbWUgYmVmb3JlIGVuZCB0aW1lJywgZnVuY3Rpb24gKCkge1xuICAgICAgYnVpbGRlci5lbmRUaW1lKDE2NzI1MzEyMDApOyAvLyBTZXQgZW5kIHRpbWUgZmlyc3RcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkZXIuc3RhcnRUaW1lKDE2NDA5OTUyMDApOyAvLyBTdGFydCB0aW1lIGJlZm9yZSBlbmQgdGltZVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgYnVpbGRlcik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdlbmRUaW1lJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc2V0IGVuZCB0aW1lIGZyb20gbnVtYmVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdGltZSA9IDE2NzI1MzEyMDA7XG4gICAgICBjb25zdCByZXN1bHQgPSBidWlsZGVyLmVuZFRpbWUodGltZSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYnVpbGRlclsnX2VuZFRpbWUnXSwgQmlnSW50KHRpbWUpKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIGJ1aWxkZXIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzZXQgZW5kIHRpbWUgZnJvbSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0aW1lID0gJzE2NzI1MzEyMDAnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYnVpbGRlci5lbmRUaW1lKHRpbWUpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ1aWxkZXJbJ19lbmRUaW1lJ10sIEJpZ0ludCh0aW1lKSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCBidWlsZGVyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2V0IGVuZCB0aW1lIGZyb20gYmlnaW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdGltZSA9IDE2NzI1MzEyMDBuO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYnVpbGRlci5lbmRUaW1lKHRpbWUpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ1aWxkZXJbJ19lbmRUaW1lJ10sIHRpbWUpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgYnVpbGRlcik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciB6ZXJvIGVuZCB0aW1lJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBidWlsZGVyLmVuZFRpbWUoMCksIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBuZWdhdGl2ZSBlbmQgdGltZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5lbmRUaW1lKC0xKSwgQnVpbGRUcmFuc2FjdGlvbkVycm9yKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBlbmQgdGltZSBpcyBiZWZvcmUgc3RhcnQgdGltZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJ1aWxkZXIuc3RhcnRUaW1lKDE2NzI1MzEyMDApOyAvLyBTZXQgc3RhcnQgdGltZSBmaXJzdFxuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBidWlsZGVyLmVuZFRpbWUoMTY0MDk5NTIwMCksIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcik7IC8vIEVuZCB0aW1lIGJlZm9yZSBzdGFydCB0aW1lXG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFsbG93IGVuZCB0aW1lIGFmdGVyIHN0YXJ0IHRpbWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBidWlsZGVyLnN0YXJ0VGltZSgxNjQwOTk1MjAwKTsgLy8gU2V0IHN0YXJ0IHRpbWUgZmlyc3RcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkZXIuZW5kVGltZSgxNjcyNTMxMjAwKTsgLy8gRW5kIHRpbWUgYWZ0ZXIgc3RhcnQgdGltZVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgYnVpbGRlcik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzdGFrZUFtb3VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHNldCBzdGFrZSBhbW91bnQgZnJvbSBudW1iZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhbW91bnQgPSA1MDAwMDAwMDAwMDAwMDAwMDAwMG47XG4gICAgICBjb25zdCByZXN1bHQgPSBidWlsZGVyLnN0YWtlQW1vdW50KGFtb3VudCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYnVpbGRlclsnX3N0YWtlQW1vdW50J10sIGFtb3VudCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCBidWlsZGVyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2V0IHN0YWtlIGFtb3VudCBmcm9tIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFtb3VudCA9ICc1MDAwMDAwMDAwMDAwMDAwMDAwMCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBidWlsZGVyLnN0YWtlQW1vdW50KGFtb3VudCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYnVpbGRlclsnX3N0YWtlQW1vdW50J10sIEJpZ0ludChhbW91bnQpKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIGJ1aWxkZXIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgemVybyBzdGFrZSBhbW91bnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJ1aWxkZXIuc3Rha2VBbW91bnQoMCksIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBuZWdhdGl2ZSBzdGFrZSBhbW91bnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJ1aWxkZXIuc3Rha2VBbW91bnQoLTEpLCBCdWlsZFRyYW5zYWN0aW9uRXJyb3IpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncmV3YXJkQWRkcmVzc2VzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc2V0IHJld2FyZCBhZGRyZXNzZXMgY29ycmVjdGx5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzc2VzID0gWydQLWZsYXJlMXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcGs3a3BoJ107XG4gICAgICBjb25zdCByZXN1bHQgPSBidWlsZGVyLnJld2FyZEFkZHJlc3NlcyhhZGRyZXNzZXMpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgYnVpbGRlcik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBlbXB0eSBhZGRyZXNzZXMgYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJ1aWxkZXIucmV3YXJkQWRkcmVzc2VzKFtdKSwgQnVpbGRUcmFuc2FjdGlvbkVycm9yKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ZlcmlmeVR4VHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciB2YWxpZCBkZWxlZ2F0b3IgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IHtcbiAgICAgICAgbm9kZUlEOiAnTm9kZUlELTdYaHcybUR4dURTNDRqNDJUQ0I2VTU1Nzllc2JTdDNMZycsXG4gICAgICAgIHN0YWtlQW1vdW50OiAnNTAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgfTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChEZWxlZ2F0b3JUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKHR4KSwgdHJ1ZSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYnVpbGRlci52ZXJpZnlUeFR5cGUodHgpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBpbnZhbGlkIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSB7IHN0YWtlQW1vdW50OiAnNTAwMDAwMDAwMDAwMDAwMDAwMDAnIH07XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoRGVsZWdhdG9yVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSh0eCksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBlbXB0eSB0cmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChEZWxlZ2F0b3JUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKHt9KSwgZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYnVpbGRGbGFyZVRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgYnVpbGRlclxuICAgICAgICAubm9kZUlEKCdOb2RlSUQtN1hodzJtRHh1RFM0NGo0MlRDQjZVNTU3OWVzYlN0M0xnJylcbiAgICAgICAgLnN0YXJ0VGltZSgxNjQwOTk1MjAwKVxuICAgICAgICAuZW5kVGltZSgxNjcyNTMxMjAwKVxuICAgICAgICAuc3Rha2VBbW91bnQoNTAwMDAwMDAwMDAwMDAwMDAwMDBuKVxuICAgICAgICAucmV3YXJkQWRkcmVzc2VzKFsnUC1mbGFyZTFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXBrN2twaCddKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgaWYgbm9kZUlEIGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBidWlsZGVyWydfbm9kZUlEJ10gPSAnJztcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGJ1aWxkZXJbJ2J1aWxkRmxhcmVUcmFuc2FjdGlvbiddKCksIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGlmIHN0YXJ0VGltZSBpcyBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYnVpbGRlclsnX3N0YXJ0VGltZSddID0gMG47XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhidWlsZGVyWydidWlsZEZsYXJlVHJhbnNhY3Rpb24nXSgpLCBCdWlsZFRyYW5zYWN0aW9uRXJyb3IpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBpZiBlbmRUaW1lIGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBidWlsZGVyWydfZW5kVGltZSddID0gMG47XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhidWlsZGVyWydidWlsZEZsYXJlVHJhbnNhY3Rpb24nXSgpLCBCdWlsZFRyYW5zYWN0aW9uRXJyb3IpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBpZiBzdGFrZUFtb3VudCBpcyBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYnVpbGRlclsnX3N0YWtlQW1vdW50J10gPSAwbjtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGJ1aWxkZXJbJ2J1aWxkRmxhcmVUcmFuc2FjdGlvbiddKCksIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGlmIGVuZCB0aW1lIGlzIGJlZm9yZSBzdGFydCB0aW1lJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgdGltZSB2YWxpZGF0aW9uIGhhcHBlbnMgaW1tZWRpYXRlbHkgd2hlbiBzZXR0aW5nIHZhbHVlc1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIuc3RhcnRUaW1lKDE2NzI1MzEyMDApLmVuZFRpbWUoMTY0MDk5NTIwMCk7XG4gICAgICB9LCBCdWlsZFRyYW5zYWN0aW9uRXJyb3IpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbWV0aG9kIGNoYWluaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3VwcG9ydCBtZXRob2QgY2hhaW5pbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBidWlsZGVyXG4gICAgICAgIC5ub2RlSUQoJ05vZGVJRC03WGh3Mm1EeHVEUzQ0ajQyVENCNlU1NTc5ZXNiU3QzTGcnKVxuICAgICAgICAuc3RhcnRUaW1lKDE2NDA5OTUyMDApXG4gICAgICAgIC5lbmRUaW1lKDE2NzI1MzEyMDApXG4gICAgICAgIC5zdGFrZUFtb3VudCg1MDAwMDAwMDAwMDAwMDAwMDAwMG4pXG4gICAgICAgIC5yZXdhcmRBZGRyZXNzZXMoWydQLWZsYXJlMXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcGs3a3BoJ10pO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCBidWlsZGVyKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
package/dist/test/unit/flrp.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"flrp.d.ts","sourceRoot":"","sources":["../../../test/unit/flrp.ts"],"names":[],"mappings":""}
|