@bitgo-beta/sdk-coin-flrp 1.0.0-alpha.11 → 1.0.0-alpha.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/src/lib/atomicTransactionBuilder.d.ts +7 -10
  2. package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
  3. package/dist/src/lib/atomicTransactionBuilder.js +89 -155
  4. package/dist/src/lib/constants.d.ts +1 -160
  5. package/dist/src/lib/constants.d.ts.map +1 -1
  6. package/dist/src/lib/constants.js +3 -213
  7. package/dist/src/lib/exportInCTxBuilder.d.ts +1 -1
  8. package/dist/src/lib/exportInCTxBuilder.d.ts.map +1 -1
  9. package/dist/src/lib/exportInCTxBuilder.js +17 -46
  10. package/dist/src/lib/exportInPTxBuilder.d.ts +1 -1
  11. package/dist/src/lib/exportInPTxBuilder.d.ts.map +1 -1
  12. package/dist/src/lib/exportInPTxBuilder.js +6 -70
  13. package/dist/src/lib/index.d.ts +0 -5
  14. package/dist/src/lib/index.d.ts.map +1 -1
  15. package/dist/src/lib/index.js +2 -11
  16. package/dist/src/lib/transaction.d.ts.map +1 -1
  17. package/dist/src/lib/transaction.js +13 -14
  18. package/dist/src/lib/utils.d.ts +0 -2
  19. package/dist/src/lib/utils.d.ts.map +1 -1
  20. package/dist/src/lib/utils.js +12 -23
  21. package/dist/test/unit/lib/exportTxBuilder.d.ts +2 -0
  22. package/dist/test/unit/lib/exportTxBuilder.d.ts.map +1 -0
  23. package/dist/test/unit/lib/exportTxBuilder.js +45 -0
  24. package/dist/tsconfig.tsbuildinfo +1 -1
  25. package/package.json +7 -7
  26. package/dist/src/lib/delegatorTxBuilder.d.ts +0 -58
  27. package/dist/src/lib/delegatorTxBuilder.d.ts.map +0 -1
  28. package/dist/src/lib/delegatorTxBuilder.js +0 -224
  29. package/dist/src/lib/importInCTxBuilder.d.ts +0 -67
  30. package/dist/src/lib/importInCTxBuilder.d.ts.map +0 -1
  31. package/dist/src/lib/importInCTxBuilder.js +0 -403
  32. package/dist/src/lib/importInPTxBuilder.d.ts +0 -73
  33. package/dist/src/lib/importInPTxBuilder.d.ts.map +0 -1
  34. package/dist/src/lib/importInPTxBuilder.js +0 -464
  35. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +0 -81
  36. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +0 -1
  37. package/dist/src/lib/permissionlessValidatorTxBuilder.js +0 -248
  38. package/dist/src/lib/transactionBuilder.d.ts +0 -85
  39. package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
  40. package/dist/src/lib/transactionBuilder.js +0 -167
  41. package/dist/src/lib/types.d.ts +0 -78
  42. package/dist/src/lib/types.d.ts.map +0 -1
  43. package/dist/src/lib/types.js +0 -5
  44. package/dist/src/lib/validatorTxBuilder.d.ts +0 -40
  45. package/dist/src/lib/validatorTxBuilder.d.ts.map +0 -1
  46. package/dist/src/lib/validatorTxBuilder.js +0 -180
  47. package/dist/test/unit/delegatorTxBuilder.test.d.ts +0 -2
  48. package/dist/test/unit/delegatorTxBuilder.test.d.ts.map +0 -1
  49. package/dist/test/unit/delegatorTxBuilder.test.js +0 -233
  50. package/dist/test/unit/lib/exportInCTxBuilder.d.ts +0 -2
  51. package/dist/test/unit/lib/exportInCTxBuilder.d.ts.map +0 -1
  52. package/dist/test/unit/lib/exportInCTxBuilder.js +0 -584
  53. package/dist/test/unit/lib/exportInPTxBuilder.d.ts +0 -2
  54. package/dist/test/unit/lib/exportInPTxBuilder.d.ts.map +0 -1
  55. package/dist/test/unit/lib/exportInPTxBuilder.js +0 -377
  56. package/dist/test/unit/lib/importInCTxBuilder.d.ts +0 -2
  57. package/dist/test/unit/lib/importInCTxBuilder.d.ts.map +0 -1
  58. package/dist/test/unit/lib/importInCTxBuilder.js +0 -257
  59. package/dist/test/unit/lib/importInPTxBuilder.d.ts +0 -2
  60. package/dist/test/unit/lib/importInPTxBuilder.d.ts.map +0 -1
  61. package/dist/test/unit/lib/importInPTxBuilder.js +0 -500
  62. package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts +0 -2
  63. package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts.map +0 -1
  64. package/dist/test/unit/permissionlessValidatorTxBuilder.test.js +0 -271
  65. package/dist/test/unit/transactionBuilder.test.d.ts +0 -2
  66. package/dist/test/unit/transactionBuilder.test.d.ts.map +0 -1
  67. package/dist/test/unit/transactionBuilder.test.js +0 -114
  68. package/dist/test/unit/validatorTxBuilder.test.d.ts +0 -2
  69. package/dist/test/unit/validatorTxBuilder.test.d.ts.map +0 -1
  70. package/dist/test/unit/validatorTxBuilder.test.js +0 -293
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitgo-beta/sdk-coin-flrp",
3
- "version": "1.0.0-alpha.11",
3
+ "version": "1.0.0-alpha.13",
4
4
  "description": "BitGo's SDK coin library for flrp coin",
5
5
  "main": "./dist/src/index.js",
6
6
  "types": "./dist/src/index.d.ts",
@@ -43,15 +43,15 @@
43
43
  ]
44
44
  },
45
45
  "devDependencies": {
46
- "@bitgo-beta/sdk-api": "1.6.1-alpha.397",
47
- "@bitgo-beta/sdk-test": "0.0.0-alpha.0"
46
+ "@bitgo-beta/sdk-api": "1.6.1-alpha.399",
47
+ "@bitgo-beta/sdk-test": "^9.0.9"
48
48
  },
49
49
  "dependencies": {
50
- "@bitgo-beta/sdk-core": "2.4.1-alpha.397",
51
- "@bitgo-beta/secp256k1": "1.0.1-alpha.355",
52
- "@bitgo-beta/statics": "10.0.1-alpha.397",
50
+ "@bitgo-beta/sdk-core": "2.4.1-alpha.399",
51
+ "@bitgo-beta/secp256k1": "1.0.1-alpha.357",
52
+ "@bitgo-beta/statics": "10.0.1-alpha.399",
53
53
  "@flarenetwork/flarejs": "4.1.0-rc0",
54
54
  "bignumber.js": "9.0.0"
55
55
  },
56
- "gitHead": "22fe200d5faec02555dcfc33c98da9f1a28bb0d7"
56
+ "gitHead": "85e777573a6cc7398a027e5fbc72b7607338b529"
57
57
  }
@@ -1,58 +0,0 @@
1
- import { TransactionType } from '@bitgo-beta/sdk-core';
2
- import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
- import { AtomicTransactionBuilder } from './atomicTransactionBuilder';
4
- import { Tx } from './iface';
5
- export declare class DelegatorTxBuilder extends AtomicTransactionBuilder {
6
- protected _nodeID: string;
7
- protected _startTime: bigint;
8
- protected _endTime: bigint;
9
- protected _stakeAmount: bigint;
10
- /**
11
- * @param coinConfig
12
- */
13
- constructor(coinConfig: Readonly<CoinConfig>);
14
- /**
15
- * get transaction type
16
- * @protected
17
- */
18
- protected get transactionType(): TransactionType;
19
- /**
20
- * Set the node ID for delegation
21
- * @param nodeID - The node ID to delegate to
22
- */
23
- nodeID(nodeID: string): this;
24
- /**
25
- * Set the start time for delegation
26
- * @param startTime - Unix timestamp for when delegation starts
27
- */
28
- startTime(startTime: string | number | bigint): this;
29
- /**
30
- * Set the end time for delegation
31
- * @param endTime - Unix timestamp for when delegation ends
32
- */
33
- endTime(endTime: string | number | bigint): this;
34
- /**
35
- * Set the stake amount for delegation
36
- * @param amount - Amount to stake (in nFLR)
37
- */
38
- stakeAmount(amount: string | number | bigint): this;
39
- /**
40
- * Set reward addresses where delegation rewards should be sent
41
- * @param addresses - Array of reward addresses
42
- */
43
- rewardAddresses(addresses: string[]): this;
44
- /** @inheritdoc */
45
- initBuilder(tx: Tx): this;
46
- /**
47
- * Verify if the transaction is a delegator transaction
48
- * @param tx
49
- */
50
- static verifyTxType(tx: unknown): boolean;
51
- verifyTxType(tx: unknown): boolean;
52
- /**
53
- * Build the delegator transaction using FlareJS PVM API
54
- * @protected
55
- */
56
- protected buildFlareTransaction(): Promise<void>;
57
- }
58
- //# sourceMappingURL=delegatorTxBuilder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delegatorTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/delegatorTxBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAkB7B,qBAAa,kBAAmB,SAAQ,wBAAwB;IAC9D,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC;IAE/B;;OAEG;gBACS,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAQ5C;;;OAGG;IACH,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;OAGG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ5B;;;OAGG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;IAiBpD;;;OAGG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;IAiBhD;;;OAGG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;IASnD;;;OAGG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAS1C,kBAAkB;IAClB,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI;IA0BzB;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO;IAMzC,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO;IAIlC;;;OAGG;cACa,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;CAoGvD"}
@@ -1,224 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DelegatorTxBuilder = void 0;
4
- const sdk_core_1 = require("@bitgo-beta/sdk-core");
5
- const atomicTransactionBuilder_1 = require("./atomicTransactionBuilder");
6
- const constants_1 = require("./constants");
7
- class DelegatorTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBuilder {
8
- /**
9
- * @param coinConfig
10
- */
11
- constructor(coinConfig) {
12
- super(coinConfig);
13
- this._nodeID = constants_1.EMPTY_STRING;
14
- this._startTime = constants_1.ZERO_BIGINT;
15
- this._endTime = constants_1.ZERO_BIGINT;
16
- this._stakeAmount = constants_1.ZERO_BIGINT;
17
- }
18
- /**
19
- * get transaction type
20
- * @protected
21
- */
22
- get transactionType() {
23
- return sdk_core_1.TransactionType.AddDelegator;
24
- }
25
- /**
26
- * Set the node ID for delegation
27
- * @param nodeID - The node ID to delegate to
28
- */
29
- nodeID(nodeID) {
30
- if (!nodeID || nodeID.length === constants_1.ZERO_NUMBER) {
31
- throw new sdk_core_1.BuildTransactionError('Node ID cannot be empty');
32
- }
33
- this._nodeID = nodeID;
34
- return this;
35
- }
36
- /**
37
- * Set the start time for delegation
38
- * @param startTime - Unix timestamp for when delegation starts
39
- */
40
- startTime(startTime) {
41
- const time = BigInt(startTime);
42
- // Validate that start time is positive
43
- if (time <= constants_1.ZERO_NUMBER) {
44
- throw new sdk_core_1.BuildTransactionError('Start time must be positive');
45
- }
46
- // Validate that start time is before end time (if end time is already set)
47
- if (this._endTime > constants_1.ZERO_NUMBER && time >= this._endTime) {
48
- throw new sdk_core_1.BuildTransactionError('Start time must be before end time');
49
- }
50
- this._startTime = time;
51
- return this;
52
- }
53
- /**
54
- * Set the end time for delegation
55
- * @param endTime - Unix timestamp for when delegation ends
56
- */
57
- endTime(endTime) {
58
- const time = BigInt(endTime);
59
- // Validate that end time is positive
60
- if (time <= constants_1.ZERO_NUMBER) {
61
- throw new sdk_core_1.BuildTransactionError('End time must be positive');
62
- }
63
- // Validate that end time is after start time (if start time is already set)
64
- if (this._startTime > constants_1.ZERO_NUMBER && time <= this._startTime) {
65
- throw new sdk_core_1.BuildTransactionError('End time must be after start time');
66
- }
67
- this._endTime = time;
68
- return this;
69
- }
70
- /**
71
- * Set the stake amount for delegation
72
- * @param amount - Amount to stake (in nFLR)
73
- */
74
- stakeAmount(amount) {
75
- const stake = BigInt(amount);
76
- if (stake <= constants_1.ZERO_NUMBER) {
77
- throw new sdk_core_1.BuildTransactionError('Stake amount must be positive');
78
- }
79
- this._stakeAmount = stake;
80
- return this;
81
- }
82
- /**
83
- * Set reward addresses where delegation rewards should be sent
84
- * @param addresses - Array of reward addresses
85
- */
86
- rewardAddresses(addresses) {
87
- if (!addresses || addresses.length === constants_1.ZERO_NUMBER) {
88
- throw new sdk_core_1.BuildTransactionError('At least one reward address is required');
89
- }
90
- // Store reward addresses in the transaction (we'll need to extend the type)
91
- this.transaction._rewardAddresses = addresses;
92
- return this;
93
- }
94
- /** @inheritdoc */
95
- initBuilder(tx) {
96
- super.initBuilder(tx);
97
- // Extract delegator-specific fields from transaction
98
- const txData = tx;
99
- const delegatorData = txData;
100
- if (delegatorData.nodeID) {
101
- this._nodeID = delegatorData.nodeID;
102
- }
103
- if (delegatorData.startTime) {
104
- this._startTime = BigInt(delegatorData.startTime);
105
- }
106
- if (delegatorData.endTime) {
107
- this._endTime = BigInt(delegatorData.endTime);
108
- }
109
- if (delegatorData.stakeAmount) {
110
- this._stakeAmount = BigInt(delegatorData.stakeAmount);
111
- }
112
- if (delegatorData.rewardAddresses) {
113
- this.transaction._rewardAddresses = delegatorData.rewardAddresses;
114
- }
115
- return this;
116
- }
117
- /**
118
- * Verify if the transaction is a delegator transaction
119
- * @param tx
120
- */
121
- static verifyTxType(tx) {
122
- // Check if transaction has delegator-specific properties
123
- const delegatorData = tx;
124
- return !!(delegatorData && delegatorData.nodeID && delegatorData.stakeAmount);
125
- }
126
- verifyTxType(tx) {
127
- return DelegatorTxBuilder.verifyTxType(tx);
128
- }
129
- /**
130
- * Build the delegator transaction using FlareJS PVM API
131
- * @protected
132
- */
133
- async buildFlareTransaction() {
134
- // Basic validation
135
- if (!this._nodeID) {
136
- throw new sdk_core_1.BuildTransactionError('Node ID is required for delegator transaction');
137
- }
138
- if (!this._startTime) {
139
- throw new sdk_core_1.BuildTransactionError('Start time is required for delegator transaction');
140
- }
141
- if (!this._endTime) {
142
- throw new sdk_core_1.BuildTransactionError('End time is required for delegator transaction');
143
- }
144
- if (!this._stakeAmount) {
145
- throw new sdk_core_1.BuildTransactionError('Stake amount is required for delegator transaction');
146
- }
147
- const rewardAddresses = this.transaction._rewardAddresses;
148
- if (!rewardAddresses || rewardAddresses.length === constants_1.ZERO_NUMBER) {
149
- throw new sdk_core_1.BuildTransactionError('Reward addresses are required for delegator transaction');
150
- }
151
- // Validate time range
152
- if (this._endTime <= this._startTime) {
153
- throw new sdk_core_1.BuildTransactionError('End time must be after start time');
154
- }
155
- try {
156
- // FlareJS PVM API implementation for delegator transactions
157
- // This creates a structured delegator transaction with proper credential handling
158
- const enhancedDelegatorTx = {
159
- type: constants_1.DELEGATOR_TRANSACTION_TYPE,
160
- networkID: this.transaction._networkID,
161
- blockchainID: this.transaction._blockchainID,
162
- // Enhanced delegator information structure
163
- delegator: {
164
- nodeID: this._nodeID,
165
- startTime: this._startTime,
166
- endTime: this._endTime,
167
- stakeAmount: this._stakeAmount,
168
- rewardAddress: rewardAddresses[constants_1.FIRST_ADDRESS_INDEX],
169
- // FlareJS delegator markers
170
- _delegatorType: constants_1.PRIMARY_DELEGATOR_TYPE,
171
- _flareJSReady: true,
172
- _pvmCompatible: true,
173
- },
174
- // Enhanced stake information with credentials
175
- stake: {
176
- assetID: this.getAssetId(),
177
- amount: this._stakeAmount,
178
- addresses: this.transaction._fromAddresses,
179
- threshold: this.transaction._threshold || constants_1.DEFAULT_THRESHOLD,
180
- locktime: this.transaction._locktime || constants_1.DEFAULT_LOCKTIME,
181
- // FlareJS stake markers
182
- _stakeType: constants_1.DELEGATOR_STAKE_TYPE,
183
- _flareJSReady: true,
184
- },
185
- // Enhanced credential structure for delegators
186
- // This provides proper FlareJS-compatible credential management
187
- credentials: this.transaction._fromAddresses.map((address, index) => ({
188
- signatures: [], // Will be populated by FlareJS signing process
189
- addressIndices: [index], // Index of the signing address
190
- threshold: constants_1.DEFAULT_THRESHOLD, // Signature threshold for this credential
191
- // FlareJS credential markers
192
- _credentialType: constants_1.SECP256K1_CREDENTIAL_TYPE,
193
- _delegatorCredential: true,
194
- _addressIndex: index,
195
- _signingAddress: address,
196
- _flareJSReady: true,
197
- _credentialVersion: constants_1.CREDENTIAL_VERSION,
198
- })),
199
- // Enhanced outputs for delegator rewards
200
- outputs: [
201
- {
202
- assetID: this.getAssetId(),
203
- amount: this._stakeAmount,
204
- addresses: [rewardAddresses[constants_1.FIRST_ADDRESS_INDEX]],
205
- threshold: constants_1.DEFAULT_THRESHOLD,
206
- locktime: this.transaction._locktime || constants_1.DEFAULT_LOCKTIME,
207
- // FlareJS output markers
208
- _outputType: constants_1.STAKE_OUTPUT_TYPE,
209
- _rewardOutput: true,
210
- _flareJSReady: true,
211
- },
212
- ],
213
- // Transaction metadata
214
- memo: Buffer.alloc(constants_1.MEMO_BUFFER_SIZE),
215
- };
216
- this.transaction.setTransaction(enhancedDelegatorTx);
217
- }
218
- catch (error) {
219
- throw new sdk_core_1.BuildTransactionError(`Failed to build delegator transaction: ${error instanceof Error ? error.message : 'Unknown error'}`);
220
- }
221
- }
222
- }
223
- exports.DelegatorTxBuilder = DelegatorTxBuilder;
224
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZWdhdG9yVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kZWxlZ2F0b3JUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQThFO0FBRTlFLHlFQUFzRTtBQUd0RSwyQ0FjcUI7QUFFckIsTUFBYSxrQkFBbUIsU0FBUSxtREFBd0I7SUFNOUQ7O09BRUc7SUFDSCxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLHdCQUFZLENBQUM7UUFDNUIsSUFBSSxDQUFDLFVBQVUsR0FBRyx1QkFBVyxDQUFDO1FBQzlCLElBQUksQ0FBQyxRQUFRLEdBQUcsdUJBQVcsQ0FBQztRQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLHVCQUFXLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQWMsZUFBZTtRQUMzQixPQUFPLDBCQUFlLENBQUMsWUFBWSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsTUFBYztRQUNuQixJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssdUJBQVcsRUFBRSxDQUFDO1lBQzdDLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFTLENBQUMsU0FBbUM7UUFDM0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRS9CLHVDQUF1QztRQUN2QyxJQUFJLElBQUksSUFBSSx1QkFBVyxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDakUsQ0FBQztRQUVE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QyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FDckcsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUExUEQsZ0RBMFBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnVpbGRUcmFuc2FjdGlvbkVycm9yLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBBdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2F0b21pY1RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBUeCB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgUmF3VHJhbnNhY3Rpb25EYXRhLCBTdGFraW5nRXh0ZW5kZWRUcmFuc2FjdGlvbiwgRGVsZWdhdG9yUmF3VHJhbnNhY3Rpb25EYXRhIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge1xuICBERUxFR0FUT1JfVFJBTlNBQ1RJT05fVFlQRSxcbiAgUFJJTUFSWV9ERUxFR0FUT1JfVFlQRSxcbiAgREVMRUdBVE9SX1NUQUtFX1RZUEUsXG4gIFNFQ1AyNTZLMV9DUkVERU5USUFMX1RZUEUsXG4gIFNUQUtFX09VVFBVVF9UWVBFLFxuICBDUkVERU5USUFMX1ZFUlNJT04sXG4gIEVNUFRZX1NUUklORyxcbiAgWkVST19CSUdJTlQsXG4gIFpFUk9fTlVNQkVSLFxuICBERUZBVUxUX1RIUkVTSE9MRCxcbiAgREVGQVVMVF9MT0NLVElNRSxcbiAgTUVNT19CVUZGRVJfU0laRSxcbiAgRklSU1RfQUREUkVTU19JTkRFWCxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY2xhc3MgRGVsZWdhdG9yVHhCdWlsZGVyIGV4dGVuZHMgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF9ub2RlSUQ6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9zdGFydFRpbWU6IGJpZ2ludDtcbiAgcHJvdGVjdGVkIF9lbmRUaW1lOiBiaWdpbnQ7XG4gIHByb3RlY3RlZCBfc3Rha2VBbW91bnQ6IGJpZ2ludDtcblxuICAvKipcbiAgICogQHBhcmFtIGNvaW5Db25maWdcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fbm9kZUlEID0gRU1QVFlfU1RSSU5HO1xuICAgIHRoaXMuX3N0YXJ0VGltZSA9IFpFUk9fQklHSU5UO1xuICAgIHRoaXMuX2VuZFRpbWUgPSBaRVJPX0JJR0lOVDtcbiAgICB0aGlzLl9zdGFrZUFtb3VudCA9IFpFUk9fQklHSU5UO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0cmFuc2FjdGlvbiB0eXBlXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5BZGREZWxlZ2F0b3I7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBub2RlIElEIGZvciBkZWxlZ2F0aW9uXG4gICAqIEBwYXJhbSBub2RlSUQgLSBUaGUgbm9kZSBJRCB0byBkZWxlZ2F0ZSB0b1xuICAgKi9cbiAgbm9kZUlEKG5vZGVJRDogc3RyaW5nKTogdGhpcyB7XG4gICAgaWYgKCFub2RlSUQgfHwgbm9kZUlELmxlbmd0aCA9PT0gWkVST19OVU1CRVIpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ05vZGUgSUQgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuICAgIHRoaXMuX25vZGVJRCA9IG5vZGVJRDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHN0YXJ0IHRpbWUgZm9yIGRlbGVnYXRpb25cbiAgICogQHBhcmFtIHN0YXJ0VGltZSAtIFVuaXggdGltZXN0YW1wIGZvciB3aGVuIGRlbGVnYXRpb24gc3RhcnRzXG4gICAqL1xuICBzdGFydFRpbWUoc3RhcnRUaW1lOiBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQpOiB0aGlzIHtcbiAgICBjb25zdCB0aW1lID0gQmlnSW50KHN0YXJ0VGltZSk7XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGF0IHN0YXJ0IHRpbWUgaXMgcG9zaXRpdmVcbiAgICBpZiAodGltZSA8PSBaRVJPX05VTUJFUikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignU3RhcnQgdGltZSBtdXN0IGJlIHBvc2l0aXZlJyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdGhhdCBzdGFydCB0aW1lIGlzIGJlZm9yZSBlbmQgdGltZSAoaWYgZW5kIHRpbWUgaXMgYWxyZWFkeSBzZXQpXG4gICAgaWYgKHRoaXMuX2VuZFRpbWUgPiBaRVJPX05VTUJFUiAmJiB0aW1lID49IHRoaXMuX2VuZFRpbWUpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1N0YXJ0IHRpbWUgbXVzdCBiZSBiZWZvcmUgZW5kIHRpbWUnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGFydFRpbWUgPSB0aW1lO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZW5kIHRpbWUgZm9yIGRlbGVnYXRpb25cbiAgICogQHBhcmFtIGVuZFRpbWUgLSBVbml4IHRpbWVzdGFtcCBmb3Igd2hlbiBkZWxlZ2F0aW9uIGVuZHNcbiAgICovXG4gIGVuZFRpbWUoZW5kVGltZTogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50KTogdGhpcyB7XG4gICAgY29uc3QgdGltZSA9IEJpZ0ludChlbmRUaW1lKTtcblxuICAgIC8vIFZhbGlkYXRlIHRoYXQgZW5kIHRpbWUgaXMgcG9zaXRpdmVcbiAgICBpZiAodGltZSA8PSBaRVJPX05VTUJFUikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRW5kIHRpbWUgbXVzdCBiZSBwb3NpdGl2ZScpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHRoYXQgZW5kIHRpbWUgaXMgYWZ0ZXIgc3RhcnQgdGltZSAoaWYgc3RhcnQgdGltZSBpcyBhbHJlYWR5IHNldClcbiAgICBpZiAodGhpcy5fc3RhcnRUaW1lID4gWkVST19OVU1CRVIgJiYgdGltZSA8PSB0aGlzLl9zdGFydFRpbWUpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0VuZCB0aW1lIG11c3QgYmUgYWZ0ZXIgc3RhcnQgdGltZScpO1xuICAgIH1cblxuICAgIHRoaXMuX2VuZFRpbWUgPSB0aW1lO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc3Rha2UgYW1vdW50IGZvciBkZWxlZ2F0aW9uXG4gICAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgdG8gc3Rha2UgKGluIG5GTFIpXG4gICAqL1xuICBzdGFrZUFtb3VudChhbW91bnQ6IHN0cmluZyB8IG51bWJlciB8IGJpZ2ludCk6IHRoaXMge1xuICAgIGNvbnN0IHN0YWtlID0gQmlnSW50KGFtb3VudCk7XG4gICAgaWYgKHN0YWtlIDw9IFpFUk9fTlVNQkVSKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdTdGFrZSBhbW91bnQgbXVzdCBiZSBwb3NpdGl2ZScpO1xuICAgIH1cbiAgICB0aGlzLl9zdGFrZUFtb3VudCA9IHN0YWtlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCByZXdhcmQgYWRkcmVzc2VzIHdoZXJlIGRlbGVnYXRpb24gcmV3YXJkcyBzaG91bGQgYmUgc2VudFxuICAgKiBAcGFyYW0gYWRkcmVzc2VzIC0gQXJyYXkgb2YgcmV3YXJkIGFkZHJlc3Nlc1xuICAgKi9cbiAgcmV3YXJkQWRkcmVzc2VzKGFkZHJlc3Nlczogc3RyaW5nW10pOiB0aGlzIHtcbiAgICBpZiAoIWFkZHJlc3NlcyB8fCBhZGRyZXNzZXMubGVuZ3RoID09PSBaRVJPX05VTUJFUikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignQXQgbGVhc3Qgb25lIHJld2FyZCBhZGRyZXNzIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIC8vIFN0b3JlIHJld2FyZCBhZGRyZXNzZXMgaW4gdGhlIHRyYW5zYWN0aW9uICh3ZSdsbCBuZWVkIHRvIGV4dGVuZCB0aGUgdHlwZSlcbiAgICAodGhpcy50cmFuc2FjdGlvbiBhcyB1bmtub3duIGFzIFN0YWtpbmdFeHRlbmRlZFRyYW5zYWN0aW9uKS5fcmV3YXJkQWRkcmVzc2VzID0gYWRkcmVzc2VzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGluaXRCdWlsZGVyKHR4OiBUeCk6IHRoaXMge1xuICAgIHN1cGVyLmluaXRCdWlsZGVyKHR4KTtcblxuICAgIC8vIEV4dHJhY3QgZGVsZWdhdG9yLXNwZWNpZmljIGZpZWxkcyBmcm9tIHRyYW5zYWN0aW9uXG4gICAgY29uc3QgdHhEYXRhID0gdHggYXMgdW5rbm93biBhcyBSYXdUcmFuc2FjdGlvbkRhdGE7XG4gICAgY29uc3QgZGVsZWdhdG9yRGF0YSA9IHR4RGF0YSBhcyBEZWxlZ2F0b3JSYXdUcmFuc2FjdGlvbkRhdGE7XG5cbiAgICBpZiAoZGVsZWdhdG9yRGF0YS5ub2RlSUQpIHtcbiAgICAgIHRoaXMuX25vZGVJRCA9IGRlbGVnYXRvckRhdGEubm9kZUlEO1xuICAgIH1cbiAgICBpZiAoZGVsZWdhdG9yRGF0YS5zdGFydFRpbWUpIHtcbiAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IEJpZ0ludChkZWxlZ2F0b3JEYXRhLnN0YXJ0VGltZSk7XG4gICAgfVxuICAgIGlmIChkZWxlZ2F0b3JEYXRhLmVuZFRpbWUpIHtcbiAgICAgIHRoaXMuX2VuZFRpbWUgPSBCaWdJbnQoZGVsZWdhdG9yRGF0YS5lbmRUaW1lKTtcbiAgICB9XG4gICAgaWYgKGRlbGVnYXRvckRhdGEuc3Rha2VBbW91bnQpIHtcbiAgICAgIHRoaXMuX3N0YWtlQW1vdW50ID0gQmlnSW50KGRlbGVnYXRvckRhdGEuc3Rha2VBbW91bnQpO1xuICAgIH1cbiAgICBpZiAoZGVsZWdhdG9yRGF0YS5yZXdhcmRBZGRyZXNzZXMpIHtcbiAgICAgICh0aGlzLnRyYW5zYWN0aW9uIGFzIHVua25vd24gYXMgU3Rha2luZ0V4dGVuZGVkVHJhbnNhY3Rpb24pLl9yZXdhcmRBZGRyZXNzZXMgPSBkZWxlZ2F0b3JEYXRhLnJld2FyZEFkZHJlc3NlcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgaWYgdGhlIHRyYW5zYWN0aW9uIGlzIGEgZGVsZWdhdG9yIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB0eFxuICAgKi9cbiAgc3RhdGljIHZlcmlmeVR4VHlwZSh0eDogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIC8vIENoZWNrIGlmIHRyYW5zYWN0aW9uIGhhcyBkZWxlZ2F0b3Itc3BlY2lmaWMgcHJvcGVydGllc1xuICAgIGNvbnN0IGRlbGVnYXRvckRhdGEgPSB0eCBhcyBEZWxlZ2F0b3JSYXdUcmFuc2FjdGlvbkRhdGE7XG4gICAgcmV0dXJuICEhKGRlbGVnYXRvckRhdGEgJiYgZGVsZWdhdG9yRGF0YS5ub2RlSUQgJiYgZGVsZWdhdG9yRGF0YS5zdGFrZUFtb3VudCk7XG4gIH1cblxuICB2ZXJpZnlUeFR5cGUodHg6IHVua25vd24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gRGVsZWdhdG9yVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSh0eCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIGRlbGVnYXRvciB0cmFuc2FjdGlvbiB1c2luZyBGbGFyZUpTIFBWTSBBUElcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkRmxhcmVUcmFuc2FjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBCYXNpYyB2YWxpZGF0aW9uXG4gICAgaWYgKCF0aGlzLl9ub2RlSUQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ05vZGUgSUQgaXMgcmVxdWlyZWQgZm9yIGRlbGVnYXRvciB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3N0YXJ0VGltZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignU3RhcnQgdGltZSBpcyByZXF1aXJlZCBmb3IgZGVsZWdhdG9yIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fZW5kVGltZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRW5kIHRpbWUgaXMgcmVxdWlyZWQgZm9yIGRlbGVnYXRvciB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3N0YWtlQW1vdW50KSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdTdGFrZSBhbW91bnQgaXMgcmVxdWlyZWQgZm9yIGRlbGVnYXRvciB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHJld2FyZEFkZHJlc3NlcyA9ICh0aGlzLnRyYW5zYWN0aW9uIGFzIHVua25vd24gYXMgU3Rha2luZ0V4dGVuZGVkVHJhbnNhY3Rpb24pLl9yZXdhcmRBZGRyZXNzZXM7XG4gICAgaWYgKCFyZXdhcmRBZGRyZXNzZXMgfHwgcmV3YXJkQWRkcmVzc2VzLmxlbmd0aCA9PT0gWkVST19OVU1CRVIpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1Jld2FyZCBhZGRyZXNzZXMgYXJlIHJlcXVpcmVkIGZvciBkZWxlZ2F0b3IgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0aW1lIHJhbmdlXG4gICAgaWYgKHRoaXMuX2VuZFRpbWUgPD0gdGhpcy5fc3RhcnRUaW1lKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdFbmQgdGltZSBtdXN0IGJlIGFmdGVyIHN0YXJ0IHRpbWUnKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gRmxhcmVKUyBQVk0gQVBJIGltcGxlbWVudGF0aW9uIGZvciBkZWxlZ2F0b3IgdHJhbnNhY3Rpb25zXG4gICAgICAvLyBUaGlzIGNyZWF0ZXMgYSBzdHJ1Y3R1cmVkIGRlbGVnYXRvciB0cmFuc2FjdGlvbiB3aXRoIHByb3BlciBjcmVkZW50aWFsIGhhbmRsaW5nXG5cbiAgICAgIGNvbnN0IGVuaGFuY2VkRGVsZWdhdG9yVHggPSB7XG4gICAgICAgIHR5cGU6IERFTEVHQVRPUl9UUkFOU0FDVElPTl9UWVBFLFxuICAgICAgICBuZXR3b3JrSUQ6IHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmtJRCxcbiAgICAgICAgYmxvY2tjaGFpbklEOiB0aGlzLnRyYW5zYWN0aW9uLl9ibG9ja2NoYWluSUQsXG5cbiAgICAgICAgLy8gRW5oYW5jZWQgZGVsZWdhdG9yIGluZm9ybWF0aW9uIHN0cnVjdHVyZVxuICAgICAgICBkZWxlZ2F0b3I6IHtcbiAgICAgICAgICBub2RlSUQ6IHRoaXMuX25vZGVJRCxcbiAgICAgICAgICBzdGFydFRpbWU6IHRoaXMuX3N0YXJ0VGltZSxcbiAgICAgICAgICBlbmRUaW1lOiB0aGlzLl9lbmRUaW1lLFxuICAgICAgICAgIHN0YWtlQW1vdW50OiB0aGlzLl9zdGFrZUFtb3VudCxcbiAgICAgICAgICByZXdhcmRBZGRyZXNzOiByZXdhcmRBZGRyZXNzZXNbRklSU1RfQUREUkVTU19JTkRFWF0sXG4gICAgICAgICAgLy8gRmxhcmVKUyBkZWxlZ2F0b3IgbWFya2Vyc1xuICAgICAgICAgIF9kZWxlZ2F0b3JUeXBlOiBQUklNQVJZX0RFTEVHQVRPUl9UWVBFLFxuICAgICAgICAgIF9mbGFyZUpTUmVhZHk6IHRydWUsXG4gICAgICAgICAgX3B2bUNvbXBhdGlibGU6IHRydWUsXG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gRW5oYW5jZWQgc3Rha2UgaW5mb3JtYXRpb24gd2l0aCBjcmVkZW50aWFsc1xuICAgICAgICBzdGFrZToge1xuICAgICAgICAgIGFzc2V0SUQ6IHRoaXMuZ2V0QXNzZXRJZCgpLFxuICAgICAgICAgIGFtb3VudDogdGhpcy5fc3Rha2VBbW91bnQsXG4gICAgICAgICAgYWRkcmVzc2VzOiB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzLFxuICAgICAgICAgIHRocmVzaG9sZDogdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkIHx8IERFRkFVTFRfVEhSRVNIT0xELFxuICAgICAgICAgIGxvY2t0aW1lOiB0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSB8fCBERUZBVUxUX0xPQ0tUSU1FLFxuICAgICAgICAgIC8vIEZsYXJlSlMgc3Rha2UgbWFya2Vyc1xuICAgICAgICAgIF9zdGFrZVR5cGU6IERFTEVHQVRPUl9TVEFLRV9UWVBFLFxuICAgICAgICAgIF9mbGFyZUpTUmVhZHk6IHRydWUsXG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gRW5oYW5jZWQgY3JlZGVudGlhbCBzdHJ1Y3R1cmUgZm9yIGRlbGVnYXRvcnNcbiAgICAgICAgLy8gVGhpcyBwcm92aWRlcyBwcm9wZXIgRmxhcmVKUy1jb21wYXRpYmxlIGNyZWRlbnRpYWwgbWFuYWdlbWVudFxuICAgICAgICBjcmVkZW50aWFsczogdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlcy5tYXAoKGFkZHJlc3MsIGluZGV4KSA9PiAoe1xuICAgICAgICAgIHNpZ25hdHVyZXM6IFtdLCAvLyBXaWxsIGJlIHBvcHVsYXRlZCBieSBGbGFyZUpTIHNpZ25pbmcgcHJvY2Vzc1xuICAgICAgICAgIGFkZHJlc3NJbmRpY2VzOiBbaW5kZXhdLCAvLyBJbmRleCBvZiB0aGUgc2lnbmluZyBhZGRyZXNzXG4gICAgICAgICAgdGhyZXNob2xkOiBERUZBVUxUX1RIUkVTSE9MRCwgLy8gU2lnbmF0dXJlIHRocmVzaG9sZCBmb3IgdGhpcyBjcmVkZW50aWFsXG4gICAgICAgICAgLy8gRmxhcmVKUyBjcmVkZW50aWFsIG1hcmtlcnNcbiAgICAgICAgICBfY3JlZGVudGlhbFR5cGU6IFNFQ1AyNTZLMV9DUkVERU5USUFMX1RZUEUsXG4gICAgICAgICAgX2RlbGVnYXRvckNyZWRlbnRpYWw6IHRydWUsXG4gICAgICAgICAgX2FkZHJlc3NJbmRleDogaW5kZXgsXG4gICAgICAgICAgX3NpZ25pbmdBZGRyZXNzOiBhZGRyZXNzLFxuICAgICAgICAgIF9mbGFyZUpTUmVhZHk6IHRydWUsXG4gICAgICAgICAgX2NyZWRlbnRpYWxWZXJzaW9uOiBDUkVERU5USUFMX1ZFUlNJT04sXG4gICAgICAgIH0pKSxcblxuICAgICAgICAvLyBFbmhhbmNlZCBvdXRwdXRzIGZvciBkZWxlZ2F0b3IgcmV3YXJkc1xuICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYXNzZXRJRDogdGhpcy5nZXRBc3NldElkKCksXG4gICAgICAgICAgICBhbW91bnQ6IHRoaXMuX3N0YWtlQW1vdW50LFxuICAgICAgICAgICAgYWRkcmVzc2VzOiBbcmV3YXJkQWRkcmVzc2VzW0ZJUlNUX0FERFJFU1NfSU5ERVhdXSxcbiAgICAgICAgICAgIHRocmVzaG9sZDogREVGQVVMVF9USFJFU0hPTEQsXG4gICAgICAgICAgICBsb2NrdGltZTogdGhpcy50cmFuc2FjdGlvbi5fbG9ja3RpbWUgfHwgREVGQVVMVF9MT0NLVElNRSxcbiAgICAgICAgICAgIC8vIEZsYXJlSlMgb3V0cHV0IG1hcmtlcnNcbiAgICAgICAgICAgIF9vdXRwdXRUeXBlOiBTVEFLRV9PVVRQVVRfVFlQRSxcbiAgICAgICAgICAgIF9yZXdhcmRPdXRwdXQ6IHRydWUsXG4gICAgICAgICAgICBfZmxhcmVKU1JlYWR5OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG5cbiAgICAgICAgLy8gVHJhbnNhY3Rpb24gbWV0YWRhdGFcbiAgICAgICAgbWVtbzogQnVmZmVyLmFsbG9jKE1FTU9fQlVGRkVSX1NJWkUpLFxuICAgICAgfTtcblxuICAgICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbihlbmhhbmNlZERlbGVnYXRvclR4KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBidWlsZCBkZWxlZ2F0b3IgdHJhbnNhY3Rpb246ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,67 +0,0 @@
1
- import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
2
- import { TransactionType } from '@bitgo-beta/sdk-core';
3
- import { AtomicInCTransactionBuilder } from './atomicInCTransactionBuilder';
4
- import { TransferableInput, Credential } from '@flarenetwork/flarejs';
5
- import { Tx, DecodedUtxoObj } from './iface';
6
- import BigNumber from 'bignumber.js';
7
- /**
8
- * Flare P->C Import Transaction Builder
9
- * Builds import transactions from P-chain to C-chain using FlareJS
10
- */
11
- export declare class ImportInCTxBuilder extends AtomicInCTransactionBuilder {
12
- constructor(_coinConfig: Readonly<CoinConfig>);
13
- /**
14
- * C-chain address who is target of the import.
15
- * Address format is Ethereum-like for Flare C-chain
16
- * @param {string} cAddress - C-chain address (hex format)
17
- */
18
- to(cAddress: string): this;
19
- protected get transactionType(): TransactionType;
20
- /** @inheritdoc */
21
- initBuilder(tx: Tx): this;
22
- /**
23
- * Verify transaction type for FlareJS import transactions
24
- * @param {unknown} unsignedTx - FlareJS UnsignedTx
25
- * @returns {boolean} - Whether transaction is valid import type
26
- */
27
- static verifyTxType(unsignedTx: unknown): boolean;
28
- verifyTxType(unsignedTx: unknown): boolean;
29
- /**
30
- * Build the import C-chain transaction using FlareJS evm.newImportTx
31
- * @protected
32
- */
33
- protected buildFlareTransaction(): void;
34
- /**
35
- * Calculate total amount from UTXOs
36
- * @private
37
- */
38
- private calculateTotalAmount;
39
- /**
40
- * Create inputs for the import transaction from UTXOs
41
- * @returns {Object} - Inputs, total amount, and credentials
42
- * @protected
43
- */
44
- protected createInputs(): {
45
- inputs: TransferableInput[];
46
- credentials: Credential[];
47
- amount: BigNumber;
48
- };
49
- /**
50
- * Calculate import transaction fee using FlareJS
51
- * @param {TransferableInput[]} inputs - Transaction inputs
52
- * @returns {BigNumber} - Calculated fee amount
53
- * @protected
54
- */
55
- protected calculateImportFee(inputs: TransferableInput[]): BigNumber;
56
- /**
57
- * Add UTXOs to be used as inputs for the import transaction
58
- * @param {DecodedUtxoObj[]} utxos - UTXOs from P-chain to import
59
- */
60
- addUtxos(utxos: DecodedUtxoObj[]): this;
61
- /**
62
- * Set the source chain for the import (typically P-chain)
63
- * @param {string} chainId - Source chain ID
64
- */
65
- sourceChain(chainId: string): this;
66
- }
67
- //# sourceMappingURL=importInCTxBuilder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"importInCTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/importInCTxBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAyB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGtE,OAAO,EAAE,EAAE,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,SAAS,MAAM,cAAc,CAAC;AA+BrC;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,2BAA2B;gBACrD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C;;;;OAIG;IACH,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAS1B,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED,kBAAkB;IAClB,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI;IA8FzB;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO;IA0CjD,YAAY,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO;IAI1C;;;OAGG;IACH,SAAS,CAAC,qBAAqB,IAAI,IAAI;IA6EvC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;;;OAIG;IACH,SAAS,CAAC,YAAY,IAAI;QACxB,MAAM,EAAE,iBAAiB,EAAE,CAAC;QAC5B,WAAW,EAAE,UAAU,EAAE,CAAC;QAC1B,MAAM,EAAE,SAAS,CAAC;KACnB;IAqED;;;;;OAKG;IACH,SAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,SAAS;IA8BpE;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,IAAI;IASvC;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAsCnC"}