@bitgo-beta/sdk-coin-flrp 1.0.1-beta.4 → 1.0.1-beta.400
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 +75 -61
- package/dist/src/flrp.d.ts.map +1 -1
- package/dist/src/flrp.js +276 -134
- 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 +43 -0
- package/dist/src/lib/ExportInCTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/ExportInCTxBuilder.js +150 -0
- package/dist/src/lib/ExportInPTxBuilder.d.ts +28 -0
- package/dist/src/lib/ExportInPTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/ExportInPTxBuilder.js +174 -0
- package/dist/src/lib/ImportInCTxBuilder.d.ts +34 -0
- package/dist/src/lib/ImportInCTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/ImportInCTxBuilder.js +175 -0
- package/dist/src/lib/ImportInPTxBuilder.d.ts +38 -0
- package/dist/src/lib/ImportInPTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/ImportInPTxBuilder.js +208 -0
- package/dist/src/lib/atomicInCTransactionBuilder.d.ts +12 -16
- package/dist/src/lib/atomicInCTransactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/atomicInCTransactionBuilder.js +30 -41
- package/dist/src/lib/atomicTransactionBuilder.d.ts +112 -35
- package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/atomicTransactionBuilder.js +244 -34
- package/dist/src/lib/iface.d.ts +81 -22
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +20 -14
- package/dist/src/lib/index.d.ts +7 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +16 -2
- package/dist/src/lib/keyPair.d.ts +5 -5
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +15 -9
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +41 -0
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/permissionlessValidatorTxBuilder.js +126 -0
- package/dist/src/lib/transaction.d.ts +75 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +460 -0
- package/dist/src/lib/transactionBuilder.d.ts +115 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder.js +228 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +57 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilderFactory.js +148 -0
- package/dist/src/lib/utils.d.ts +138 -102
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +359 -245
- package/dist/test/resources/account.d.ts +81 -0
- package/dist/test/resources/account.d.ts.map +1 -0
- package/dist/test/resources/account.js +79 -0
- package/dist/test/resources/transactionData/exportInC.d.ts +50 -0
- package/dist/test/resources/transactionData/exportInC.d.ts.map +1 -0
- package/dist/test/resources/transactionData/exportInC.js +58 -0
- package/dist/test/resources/transactionData/exportInP.d.ts +60 -0
- package/dist/test/resources/transactionData/exportInP.d.ts.map +1 -0
- package/dist/test/resources/transactionData/exportInP.js +101 -0
- package/dist/test/resources/transactionData/importInC.d.ts +56 -0
- package/dist/test/resources/transactionData/importInC.d.ts.map +1 -0
- package/dist/test/resources/transactionData/importInC.js +120 -0
- package/dist/test/resources/transactionData/importInP.d.ts +66 -0
- package/dist/test/resources/transactionData/importInP.d.ts.map +1 -0
- package/dist/test/resources/transactionData/importInP.js +84 -0
- package/dist/test/unit/flrp.js +490 -20
- package/dist/test/unit/lib/exportInCTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/exportInCTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/exportInCTxBuilder.js +193 -0
- package/dist/test/unit/lib/exportInPTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/exportInPTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/exportInPTxBuilder.js +296 -0
- package/dist/test/unit/lib/importInCTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/importInCTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/importInCTxBuilder.js +309 -0
- package/dist/test/unit/lib/importInPTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/importInPTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/importInPTxBuilder.js +490 -0
- package/dist/test/unit/lib/keyPair.d.ts +2 -0
- package/dist/test/unit/lib/keyPair.d.ts.map +1 -0
- package/dist/test/unit/lib/keyPair.js +158 -0
- 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 +83 -0
- package/dist/test/unit/lib/signatureIndex.d.ts +13 -0
- package/dist/test/unit/lib/signatureIndex.d.ts.map +1 -0
- package/dist/test/unit/lib/signatureIndex.js +843 -0
- package/dist/test/unit/lib/transactionBuilderFactory.d.ts +2 -0
- package/dist/test/unit/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/lib/transactionBuilderFactory.js +60 -0
- package/dist/test/unit/lib/utils.d.ts +2 -0
- package/dist/test/unit/lib/utils.d.ts.map +1 -0
- package/dist/test/unit/lib/utils.js +761 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +18 -12
- package/.eslintignore +0 -5
- package/.eslintrc.json +0 -7
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -0
- 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 -11
- package/dist/src/lib/constants.d.ts.map +0 -1
- package/dist/src/lib/constants.js +0 -17
- 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 -164
- 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 -56
- 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 -9
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { Utxo } from '@flarenetwork/flarejs';
|
|
2
|
+
import { BaseTransactionBuilder, BaseKey, BaseAddress } from '@bitgo-beta/sdk-core';
|
|
3
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
4
|
+
import { Tx, DecodedUtxoObj } from './iface';
|
|
5
|
+
import { KeyPair } from './keyPair';
|
|
6
|
+
import { Transaction } from './transaction';
|
|
7
|
+
import { FlrpContext } from '@bitgo/public-types';
|
|
8
|
+
type BigNumberType = Parameters<BaseTransactionBuilder['validateValue']>[0];
|
|
9
|
+
export declare abstract class TransactionBuilder extends BaseTransactionBuilder {
|
|
10
|
+
protected _transaction: Transaction;
|
|
11
|
+
protected recoverSigner: boolean;
|
|
12
|
+
_signer: KeyPair[];
|
|
13
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
14
|
+
/**
|
|
15
|
+
* Initialize the transaction builder fields using the decoded transaction data
|
|
16
|
+
*
|
|
17
|
+
* @param {Transaction} tx the transaction data
|
|
18
|
+
* @returns itself
|
|
19
|
+
*/
|
|
20
|
+
initBuilder(tx: Tx): this;
|
|
21
|
+
/**
|
|
22
|
+
* Validates the threshold for multi-signature transactions
|
|
23
|
+
* @param threshold - Number of required signatures
|
|
24
|
+
*/
|
|
25
|
+
validateThreshold(threshold: number): void;
|
|
26
|
+
/**
|
|
27
|
+
* Validates the locktime value
|
|
28
|
+
* @param locktime - Timestamp after which the output can be spent
|
|
29
|
+
*/
|
|
30
|
+
validateLocktime(locktime: bigint): void;
|
|
31
|
+
/**
|
|
32
|
+
* Sets the threshold for multi-signature transactions
|
|
33
|
+
* @param value - Number of required signatures
|
|
34
|
+
*/
|
|
35
|
+
threshold(value: number): this;
|
|
36
|
+
/**
|
|
37
|
+
* Sets the locktime for the transaction
|
|
38
|
+
* @param value - Timestamp after which the output can be spent
|
|
39
|
+
*/
|
|
40
|
+
locktime(value: string | number): this;
|
|
41
|
+
/**
|
|
42
|
+
* Enables recovery mode for the transaction
|
|
43
|
+
* @param recoverSigner - Whether to use recovery signing
|
|
44
|
+
*/
|
|
45
|
+
recoverMode(recoverSigner?: boolean): this;
|
|
46
|
+
/**
|
|
47
|
+
* Sets the sender's public key(s)
|
|
48
|
+
* @param senderPubKey - Public key or array of public keys
|
|
49
|
+
*/
|
|
50
|
+
fromPubKey(senderPubKey: string | string[]): this;
|
|
51
|
+
/**
|
|
52
|
+
* Validates an array of UTXOs
|
|
53
|
+
* @param utxos - Array of UTXOs to validate
|
|
54
|
+
* @throws {BuildTransactionError} if validation fails
|
|
55
|
+
*/
|
|
56
|
+
validateUtxos(utxos: Utxo[]): void;
|
|
57
|
+
/**
|
|
58
|
+
* Validates a single UTXO
|
|
59
|
+
* @param utxo - UTXO to validate
|
|
60
|
+
* @param index - Index in the array for error messaging
|
|
61
|
+
* @throws {BuildTransactionError} if validation fails
|
|
62
|
+
*/
|
|
63
|
+
validateUtxo(utxo: Utxo, index: number): void;
|
|
64
|
+
/**
|
|
65
|
+
* Sets the decoded UTXOs for the transaction.
|
|
66
|
+
* UTXOs should be provided in decoded format (DecodedUtxoObj).
|
|
67
|
+
* @param decodedUtxos - Array of decoded UTXO objects
|
|
68
|
+
*/
|
|
69
|
+
decodedUtxos(decodedUtxos: DecodedUtxoObj[]): this;
|
|
70
|
+
context(context: FlrpContext): this;
|
|
71
|
+
/** @inheritdoc */
|
|
72
|
+
protected fromImplementation(rawTransaction: string): Transaction;
|
|
73
|
+
/**
|
|
74
|
+
* Abstract method to be implemented by specific transaction builders
|
|
75
|
+
* Builds the actual transaction based on the builder's configuration
|
|
76
|
+
*/
|
|
77
|
+
protected abstract buildImplementation(): Promise<Transaction>;
|
|
78
|
+
/**
|
|
79
|
+
* Check the buffer has 32 byte long.
|
|
80
|
+
* @param chainID
|
|
81
|
+
*/
|
|
82
|
+
validateChainId(chainID: Buffer): void;
|
|
83
|
+
/** @inheritdoc */
|
|
84
|
+
protected get transaction(): Transaction;
|
|
85
|
+
protected set transaction(transaction: Transaction);
|
|
86
|
+
/**
|
|
87
|
+
* Check that fee is greater than 0.
|
|
88
|
+
* @param {bigint} fee
|
|
89
|
+
*/
|
|
90
|
+
validateFee(fee: bigint): void;
|
|
91
|
+
/** @inheritdoc */
|
|
92
|
+
validateKey({ key }: BaseKey): void;
|
|
93
|
+
/** @inheritdoc */
|
|
94
|
+
validateTransaction(transaction?: Transaction): void;
|
|
95
|
+
/** @inheritdoc */
|
|
96
|
+
validateValue(value: BigNumberType): void;
|
|
97
|
+
/** @inheritdoc */
|
|
98
|
+
validateAddress(address: BaseAddress, addressFormat?: string): void;
|
|
99
|
+
/**
|
|
100
|
+
* Check the raw transaction has a valid format in the blockchain context, throw otherwise.
|
|
101
|
+
*
|
|
102
|
+
* @param rawTransaction Transaction in any format
|
|
103
|
+
*/
|
|
104
|
+
validateRawTransaction(rawTransaction: string): void;
|
|
105
|
+
/** @inheritdoc */
|
|
106
|
+
protected signImplementation({ key }: BaseKey): Transaction;
|
|
107
|
+
hasSigner(): boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Check the amount is positive.
|
|
110
|
+
* @param amount
|
|
111
|
+
*/
|
|
112
|
+
validateAmount(amount: bigint): void;
|
|
113
|
+
}
|
|
114
|
+
export {};
|
|
115
|
+
//# sourceMappingURL=transactionBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,228 @@
|
|
|
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.TransactionBuilder = void 0;
|
|
7
|
+
const flarejs_1 = require("@flarenetwork/flarejs");
|
|
8
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
9
|
+
const keyPair_1 = require("./keyPair");
|
|
10
|
+
const transaction_1 = require("./transaction");
|
|
11
|
+
const utils_1 = __importDefault(require("./utils"));
|
|
12
|
+
class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
13
|
+
constructor(_coinConfig) {
|
|
14
|
+
super(_coinConfig);
|
|
15
|
+
this.recoverSigner = false;
|
|
16
|
+
this._signer = [];
|
|
17
|
+
this._transaction = new transaction_1.Transaction(_coinConfig);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Initialize the transaction builder fields using the decoded transaction data
|
|
21
|
+
*
|
|
22
|
+
* @param {Transaction} tx the transaction data
|
|
23
|
+
* @returns itself
|
|
24
|
+
*/
|
|
25
|
+
initBuilder(tx) {
|
|
26
|
+
const baseTx = tx.tx.baseTx;
|
|
27
|
+
// Validate network and blockchain IDs match
|
|
28
|
+
if (baseTx.NetworkId.value() !== this._transaction._networkID ||
|
|
29
|
+
baseTx.BlockchainId.value() !== this._transaction._blockchainID) {
|
|
30
|
+
throw new Error('Network or blockchain ID mismatch');
|
|
31
|
+
}
|
|
32
|
+
this._transaction.setTransaction(tx);
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
// region Validators
|
|
36
|
+
/**
|
|
37
|
+
* Validates the threshold for multi-signature transactions
|
|
38
|
+
* @param threshold - Number of required signatures
|
|
39
|
+
*/
|
|
40
|
+
validateThreshold(threshold) {
|
|
41
|
+
if (!threshold || threshold !== 2) {
|
|
42
|
+
throw new sdk_core_1.BuildTransactionError('Invalid transaction: threshold must be set to 2');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Validates the locktime value
|
|
47
|
+
* @param locktime - Timestamp after which the output can be spent
|
|
48
|
+
*/
|
|
49
|
+
validateLocktime(locktime) {
|
|
50
|
+
if (locktime < BigInt(0)) {
|
|
51
|
+
throw new sdk_core_1.BuildTransactionError('Invalid transaction: locktime must be 0 or higher');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// endregion
|
|
55
|
+
/**
|
|
56
|
+
* Sets the threshold for multi-signature transactions
|
|
57
|
+
* @param value - Number of required signatures
|
|
58
|
+
*/
|
|
59
|
+
threshold(value) {
|
|
60
|
+
this.validateThreshold(value);
|
|
61
|
+
this._transaction._threshold = value;
|
|
62
|
+
return this;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Sets the locktime for the transaction
|
|
66
|
+
* @param value - Timestamp after which the output can be spent
|
|
67
|
+
*/
|
|
68
|
+
locktime(value) {
|
|
69
|
+
this.validateLocktime(BigInt(value));
|
|
70
|
+
this._transaction._locktime = BigInt(value);
|
|
71
|
+
return this;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Enables recovery mode for the transaction
|
|
75
|
+
* @param recoverSigner - Whether to use recovery signing
|
|
76
|
+
*/
|
|
77
|
+
recoverMode(recoverSigner = true) {
|
|
78
|
+
this.recoverSigner = recoverSigner;
|
|
79
|
+
return this;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Sets the sender's public key(s)
|
|
83
|
+
* @param senderPubKey - Public key or array of public keys
|
|
84
|
+
*/
|
|
85
|
+
fromPubKey(senderPubKey) {
|
|
86
|
+
const pubKeys = Array.isArray(senderPubKey) ? senderPubKey : [senderPubKey];
|
|
87
|
+
this._transaction._fromAddresses = pubKeys.map((addr) => utils_1.default.parseAddress(addr));
|
|
88
|
+
return this;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Validates an array of UTXOs
|
|
92
|
+
* @param utxos - Array of UTXOs to validate
|
|
93
|
+
* @throws {BuildTransactionError} if validation fails
|
|
94
|
+
*/
|
|
95
|
+
validateUtxos(utxos) {
|
|
96
|
+
if (!utxos || utxos.length === 0) {
|
|
97
|
+
throw new sdk_core_1.BuildTransactionError('UTXOs array cannot be empty');
|
|
98
|
+
}
|
|
99
|
+
utxos.forEach((utxo, index) => {
|
|
100
|
+
this.validateUtxo(utxo, index);
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Validates a single UTXO
|
|
105
|
+
* @param utxo - UTXO to validate
|
|
106
|
+
* @param index - Index in the array for error messaging
|
|
107
|
+
* @throws {BuildTransactionError} if validation fails
|
|
108
|
+
*/
|
|
109
|
+
validateUtxo(utxo, index) {
|
|
110
|
+
if (!utxo) {
|
|
111
|
+
throw new sdk_core_1.BuildTransactionError(`UTXO at index ${index} is null or undefined`);
|
|
112
|
+
}
|
|
113
|
+
if (!utxo.utxoId) {
|
|
114
|
+
throw new sdk_core_1.BuildTransactionError(`UTXO at index ${index} missing required field: utxoId`);
|
|
115
|
+
}
|
|
116
|
+
if (!utxo.assetId) {
|
|
117
|
+
throw new sdk_core_1.BuildTransactionError(`UTXO at index ${index} missing required field: assetId`);
|
|
118
|
+
}
|
|
119
|
+
if (!utxo.output) {
|
|
120
|
+
throw new sdk_core_1.BuildTransactionError(`UTXO at index ${index} missing required field: output`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Sets the decoded UTXOs for the transaction.
|
|
125
|
+
* UTXOs should be provided in decoded format (DecodedUtxoObj).
|
|
126
|
+
* @param decodedUtxos - Array of decoded UTXO objects
|
|
127
|
+
*/
|
|
128
|
+
decodedUtxos(decodedUtxos) {
|
|
129
|
+
if (!decodedUtxos || decodedUtxos.length === 0) {
|
|
130
|
+
throw new sdk_core_1.BuildTransactionError('UTXOs array cannot be empty');
|
|
131
|
+
}
|
|
132
|
+
this._transaction._utxos = decodedUtxos;
|
|
133
|
+
return this;
|
|
134
|
+
}
|
|
135
|
+
context(context) {
|
|
136
|
+
this._transaction._context = context;
|
|
137
|
+
return this;
|
|
138
|
+
}
|
|
139
|
+
/** @inheritdoc */
|
|
140
|
+
fromImplementation(rawTransaction) {
|
|
141
|
+
try {
|
|
142
|
+
// Parse the raw transaction using Flare's PVM serialization
|
|
143
|
+
const [tx] = flarejs_1.pvmSerial.AddPermissionlessValidatorTx.fromBytes(Buffer.from(rawTransaction, 'hex'), flarejs_1.avmSerial.getAVMManager().getDefaultCodec());
|
|
144
|
+
this.initBuilder(tx);
|
|
145
|
+
return this._transaction;
|
|
146
|
+
}
|
|
147
|
+
catch (e) {
|
|
148
|
+
throw new sdk_core_1.BuildTransactionError(`Failed to parse raw transaction: ${e.message}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Check the buffer has 32 byte long.
|
|
153
|
+
* @param chainID
|
|
154
|
+
*/
|
|
155
|
+
validateChainId(chainID) {
|
|
156
|
+
if (chainID.length !== 32) {
|
|
157
|
+
throw new sdk_core_1.BuildTransactionError('Chain id are 32 byte size');
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/** @inheritdoc */
|
|
161
|
+
get transaction() {
|
|
162
|
+
return this._transaction;
|
|
163
|
+
}
|
|
164
|
+
set transaction(transaction) {
|
|
165
|
+
this._transaction = transaction;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Check that fee is greater than 0.
|
|
169
|
+
* @param {bigint} fee
|
|
170
|
+
*/
|
|
171
|
+
validateFee(fee) {
|
|
172
|
+
if (fee <= BigInt(0)) {
|
|
173
|
+
throw new sdk_core_1.BuildTransactionError('Fee must be greater than 0');
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/** @inheritdoc */
|
|
177
|
+
validateKey({ key }) {
|
|
178
|
+
try {
|
|
179
|
+
new keyPair_1.KeyPair({ prv: key });
|
|
180
|
+
}
|
|
181
|
+
catch (e) {
|
|
182
|
+
throw new sdk_core_1.BuildTransactionError('Invalid key');
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/** @inheritdoc */
|
|
186
|
+
validateTransaction(transaction) {
|
|
187
|
+
// throw new NotImplementedError('validateTransaction not implemented');
|
|
188
|
+
}
|
|
189
|
+
/** @inheritdoc */
|
|
190
|
+
validateValue(value) {
|
|
191
|
+
if (value.isLessThan(0)) {
|
|
192
|
+
throw new sdk_core_1.BuildTransactionError('Value cannot be less than zero');
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/** @inheritdoc */
|
|
196
|
+
validateAddress(address, addressFormat) {
|
|
197
|
+
if (!utils_1.default.isValidAddress(address.address)) {
|
|
198
|
+
throw new sdk_core_1.BuildTransactionError('Invalid address');
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Check the raw transaction has a valid format in the blockchain context, throw otherwise.
|
|
203
|
+
*
|
|
204
|
+
* @param rawTransaction Transaction in any format
|
|
205
|
+
*/
|
|
206
|
+
validateRawTransaction(rawTransaction) {
|
|
207
|
+
utils_1.default.validateRawTransaction(rawTransaction);
|
|
208
|
+
}
|
|
209
|
+
/** @inheritdoc */
|
|
210
|
+
signImplementation({ key }) {
|
|
211
|
+
this._signer.push(new keyPair_1.KeyPair({ prv: key }));
|
|
212
|
+
return this.transaction;
|
|
213
|
+
}
|
|
214
|
+
hasSigner() {
|
|
215
|
+
return this._signer !== undefined && this._signer.length > 0;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Check the amount is positive.
|
|
219
|
+
* @param amount
|
|
220
|
+
*/
|
|
221
|
+
validateAmount(amount) {
|
|
222
|
+
if (amount <= BigInt(0)) {
|
|
223
|
+
throw new sdk_core_1.BuildTransactionError('Amount must be greater than 0');
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
exports.TransactionBuilder = TransactionBuilder;
|
|
228
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBQXdGO0FBQ3hGLG1EQUEyRztBQUczRyx1Q0FBb0M7QUFDcEMsK0NBQTRDO0FBQzVDLG9EQUE0QjtBQUs1QixNQUFzQixrQkFBbUIsU0FBUSxpQ0FBc0I7SUFLckUsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFKWCxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN6QixZQUFPLEdBQWMsRUFBRSxDQUFDO1FBSTdCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSx5QkFBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFdBQVcsQ0FBQyxFQUFNO1FBQ2hCLE1BQU0sTUFBTSxHQUFLLEVBQWlCLENBQUMsRUFBNkMsQ0FBQyxNQUFNLENBQUM7UUFFeEYsNENBQTRDO1FBQzVDLElBQ0UsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVU7WUFDekQsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFDL0QsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCOzs7T0FHRztJQUNILGlCQUFpQixDQUFDLFNBQWlCO1FBQ2pDLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFB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a0IsQ0FBQyxFQUFFLEdBQUcsRUFBVztRQUMzQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLGlCQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjLENBQUMsTUFBYztRQUMzQixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksZ0NBQXFCLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUNuRSxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBM1BELGdEQTJQQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF2bVNlcmlhbCwgcHZtU2VyaWFsLCBVbnNpZ25lZFR4LCBVdHhvLCBDb250ZXh0IH0gZnJvbSAnQGZsYXJlbmV0d29yay9mbGFyZWpzJztcbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIsIEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgQmFzZUtleSwgQmFzZUFkZHJlc3MgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBUeCwgRGVjb2RlZFV0eG9PYmogfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEZscnBDb250ZXh0IH0gZnJvbSAnQGJpdGdvL3B1YmxpYy10eXBlcyc7XG5cbnR5cGUgQmlnTnVtYmVyVHlwZSA9IFBhcmFtZXRlcnM8QmFzZVRyYW5zYWN0aW9uQnVpbGRlclsndmFsaWRhdGVWYWx1ZSddPlswXTtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlciBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX3RyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjtcbiAgcHJvdGVjdGVkIHJlY292ZXJTaWduZXIgPSBmYWxzZTtcbiAgcHVibGljIF9zaWduZXI6IEtleVBhaXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgdHJhbnNhY3Rpb24gYnVpbGRlciBmaWVsZHMgdXNpbmcgdGhlIGRlY29kZWQgdHJhbnNhY3Rpb24gZGF0YVxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9ufSB0eCB0aGUgdHJhbnNhY3Rpb24gZGF0YVxuICAgKiBAcmV0dXJucyBpdHNlbGZcbiAgICovXG4gIGluaXRCdWlsZGVyKHR4OiBUeCk6IHRoaXMge1xuICAgIGNvbnN0IGJhc2VUeCA9ICgodHggYXMgVW5zaWduZWRUeCkudHggYXMgcHZtU2VyaWFsLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHgpLmJhc2VUeDtcblxuICAgIC8vIFZhbGlkYXRlIG5ldHdvcmsgYW5kIGJsb2NrY2hhaW4gSURzIG1hdGNoXG4gICAgaWYgKFxuICAgICAgYmFzZVR4Lk5ldHdvcmtJZC52YWx1ZSgpICE9PSB0aGlzLl90cmFuc2FjdGlvbi5fbmV0d29ya0lEIHx8XG4gICAgICBiYXNlVHguQmxvY2tjaGFpbklkLnZhbHVlKCkgIT09IHRoaXMuX3RyYW5zYWN0aW9uLl9ibG9ja2NoYWluSURcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTmV0d29yayBvciBibG9ja2NoYWluIElEIG1pc21hdGNoJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb24odHgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gcmVnaW9uIFZhbGlkYXRvcnNcbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgdGhyZXNob2xkIGZvciBtdWx0aS1zaWduYXR1cmUgdHJhbnNhY3Rpb25zXG4gICAqIEBwYXJhbSB0aHJlc2hvbGQgLSBOdW1iZXIgb2YgcmVxdWlyZWQgc2lnbmF0dXJlc1xuICAgKi9cbiAgdmFsaWRhdGVUaHJlc2hvbGQodGhyZXNob2xkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRocmVzaG9sZCB8fCB0aHJlc2hvbGQgIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IHRocmVzaG9sZCBtdXN0IGJlIHNldCB0byAyJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgbG9ja3RpbWUgdmFsdWVcbiAgICogQHBhcmFtIGxvY2t0aW1lIC0gVGltZXN0YW1wIGFmdGVyIHdoaWNoIHRoZSBvdXRwdXQgY2FuIGJlIHNwZW50XG4gICAqL1xuICB2YWxpZGF0ZUxvY2t0aW1lKGxvY2t0aW1lOiBiaWdpbnQpOiB2b2lkIHtcbiAgICBpZiAobG9ja3RpbWUgPCBCaWdJbnQoMCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IGxvY2t0aW1lIG11c3QgYmUgMCBvciBoaWdoZXInKTtcbiAgICB9XG4gIH1cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHRocmVzaG9sZCBmb3IgbXVsdGktc2lnbmF0dXJlIHRyYW5zYWN0aW9uc1xuICAgKiBAcGFyYW0gdmFsdWUgLSBOdW1iZXIgb2YgcmVxdWlyZWQgc2lnbmF0dXJlc1xuICAgKi9cbiAgdGhyZXNob2xkKHZhbHVlOiBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlVGhyZXNob2xkKHZhbHVlKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5fdGhyZXNob2xkID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgbG9ja3RpbWUgZm9yIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaW1lc3RhbXAgYWZ0ZXIgd2hpY2ggdGhlIG91dHB1dCBjYW4gYmUgc3BlbnRcbiAgICovXG4gIGxvY2t0aW1lKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlTG9ja3RpbWUoQmlnSW50KHZhbHVlKSk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uX2xvY2t0aW1lID0gQmlnSW50KHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIHJlY292ZXJ5IG1vZGUgZm9yIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gcmVjb3ZlclNpZ25lciAtIFdoZXRoZXIgdG8gdXNlIHJlY292ZXJ5IHNpZ25pbmdcbiAgICovXG4gIHJlY292ZXJNb2RlKHJlY292ZXJTaWduZXIgPSB0cnVlKTogdGhpcyB7XG4gICAgdGhpcy5yZWNvdmVyU2lnbmVyID0gcmVjb3ZlclNpZ25lcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzZW5kZXIncyBwdWJsaWMga2V5KHMpXG4gICAqIEBwYXJhbSBzZW5kZXJQdWJLZXkgLSBQdWJsaWMga2V5IG9yIGFycmF5IG9mIHB1YmxpYyBrZXlzXG4gICAqL1xuICBmcm9tUHViS2V5KHNlbmRlclB1YktleTogc3RyaW5nIHwgc3RyaW5nW10pOiB0aGlzIHtcbiAgICBjb25zdCBwdWJLZXlzID0gQXJyYXkuaXNBcnJheShzZW5kZXJQdWJLZXkpID8gc2VuZGVyUHViS2V5IDogW3NlbmRlclB1YktleV07XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMgPSBwdWJLZXlzLm1hcCgoYWRkcikgPT4gdXRpbHMucGFyc2VBZGRyZXNzKGFkZHIpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYW4gYXJyYXkgb2YgVVRYT3NcbiAgICogQHBhcmFtIHV0eG9zIC0gQXJyYXkgb2YgVVRYT3MgdG8gdmFsaWRhdGVcbiAgICogQHRocm93cyB7QnVpbGRUcmFuc2FjdGlvbkVycm9yfSBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqL1xuICB2YWxpZGF0ZVV0eG9zKHV0eG9zOiBVdHhvW10pOiB2b2lkIHtcbiAgICBpZiAoIXV0eG9zIHx8IHV0eG9zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVVRYT3MgYXJyYXkgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuICAgIHV0eG9zLmZvckVhY2goKHV0eG8sIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLnZhbGlkYXRlVXR4byh1dHhvLCBpbmRleCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGEgc2luZ2xlIFVUWE9cbiAgICogQHBhcmFtIHV0eG8gLSBVVFhPIHRvIHZhbGlkYXRlXG4gICAqIEBwYXJhbSBpbmRleCAtIEluZGV4IGluIHRoZSBhcnJheSBmb3IgZXJyb3IgbWVzc2FnaW5nXG4gICAqIEB0aHJvd3Mge0J1aWxkVHJhbnNhY3Rpb25FcnJvcn0gaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgdmFsaWRhdGVVdHhvKHV0eG86IFV0eG8sIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXV0eG8pIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYFVUWE8gYXQgaW5kZXggJHtpbmRleH0gaXMgbnVsbCBvciB1bmRlZmluZWRgKTtcbiAgICB9XG4gICAgaWYgKCF1dHhvLnV0eG9JZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgVVRYTyBhdCBpbmRleCAke2luZGV4fSBtaXNzaW5nIHJlcXVpcmVkIGZpZWxkOiB1dHhvSWRgKTtcbiAgICB9XG4gICAgaWYgKCF1dHhvLmFzc2V0SWQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYFVUWE8gYXQgaW5kZXggJHtpbmRleH0gbWlzc2luZyByZXF1aXJlZCBmaWVsZDogYXNzZXRJZGApO1xuICAgIH1cbiAgICBpZiAoIXV0eG8ub3V0cHV0KSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBVVFhPIGF0IGluZGV4ICR7aW5kZXh9IG1pc3NpbmcgcmVxdWlyZWQgZmllbGQ6IG91dHB1dGApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBkZWNvZGVkIFVUWE9zIGZvciB0aGUgdHJhbnNhY3Rpb24uXG4gICAqIFVUWE9zIHNob3VsZCBiZSBwcm92aWRlZCBpbiBkZWNvZGVkIGZvcm1hdCAoRGVjb2RlZFV0eG9PYmopLlxuICAgKiBAcGFyYW0gZGVjb2RlZFV0eG9zIC0gQXJyYXkgb2YgZGVjb2RlZCBVVFhPIG9iamVjdHNcbiAgICovXG4gIGRlY29kZWRVdHhvcyhkZWNvZGVkVXR4b3M6IERlY29kZWRVdHhvT2JqW10pOiB0aGlzIHtcbiAgICBpZiAoIWRlY29kZWRVdHhvcyB8fCBkZWNvZGVkVXR4b3MubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdVVFhPcyBhcnJheSBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICB9XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uX3V0eG9zID0gZGVjb2RlZFV0eG9zO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29udGV4dChjb250ZXh0OiBGbHJwQ29udGV4dCk6IHRoaXMge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLl9jb250ZXh0ID0gY29udGV4dCBhcyBDb250ZXh0LkNvbnRleHQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIHRyeSB7XG4gICAgICAvLyBQYXJzZSB0aGUgcmF3IHRyYW5zYWN0aW9uIHVzaW5nIEZsYXJlJ3MgUFZNIHNlcmlhbGl6YXRpb25cbiAgICAgIGNvbnN0IFt0eF0gPSBwdm1TZXJpYWwuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5mcm9tQnl0ZXMoXG4gICAgICAgIEJ1ZmZlci5mcm9tKHJhd1RyYW5zYWN0aW9uLCAnaGV4JyksXG4gICAgICAgIGF2bVNlcmlhbC5nZXRBVk1NYW5hZ2VyKCkuZ2V0RGVmYXVsdENvZGVjKClcbiAgICAgICk7XG4gICAgICB0aGlzLmluaXRCdWlsZGVyKHR4KTtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBGYWlsZWQgdG8gcGFyc2UgcmF3IHRyYW5zYWN0aW9uOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWJzdHJhY3QgbWV0aG9kIHRvIGJlIGltcGxlbWVudGVkIGJ5IHNwZWNpZmljIHRyYW5zYWN0aW9uIGJ1aWxkZXJzXG4gICAqIEJ1aWxkcyB0aGUgYWN0dWFsIHRyYW5zYWN0aW9uIGJhc2VkIG9uIHRoZSBidWlsZGVyJ3MgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj47XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSBidWZmZXIgaGFzIDMyIGJ5dGUgbG9uZy5cbiAgICogQHBhcmFtIGNoYWluSURcbiAgICovXG4gIHZhbGlkYXRlQ2hhaW5JZChjaGFpbklEOiBCdWZmZXIpOiB2b2lkIHtcbiAgICBpZiAoY2hhaW5JRC5sZW5ndGggIT09IDMyKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdDaGFpbiBpZCBhcmUgMzIgYnl0ZSBzaXplJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXQgdHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGF0IGZlZSBpcyBncmVhdGVyIHRoYW4gMC5cbiAgICogQHBhcmFtIHtiaWdpbnR9IGZlZVxuICAgKi9cbiAgdmFsaWRhdGVGZWUoZmVlOiBiaWdpbnQpOiB2b2lkIHtcbiAgICBpZiAoZmVlIDw9IEJpZ0ludCgwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRmVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAnKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVLZXkoeyBrZXkgfTogQmFzZUtleSk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBuZXcgS2V5UGFpcih7IHBydjoga2V5IH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQga2V5Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24/OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIC8vIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCd2YWxpZGF0ZVRyYW5zYWN0aW9uIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlclR5cGUpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUuaXNMZXNzVGhhbigwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVmFsdWUgY2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiBCYXNlQWRkcmVzcywgYWRkcmVzc0Zvcm1hdD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBhZGRyZXNzJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSByYXcgdHJhbnNhY3Rpb24gaGFzIGEgdmFsaWQgZm9ybWF0IGluIHRoZSBibG9ja2NoYWluIGNvbnRleHQsIHRocm93IG90aGVyd2lzZS5cbiAgICpcbiAgICogQHBhcmFtIHJhd1RyYW5zYWN0aW9uIFRyYW5zYWN0aW9uIGluIGFueSBmb3JtYXRcbiAgICovXG4gIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHV0aWxzLnZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzaWduSW1wbGVtZW50YXRpb24oeyBrZXkgfTogQmFzZUtleSk6IFRyYW5zYWN0aW9uIHtcbiAgICB0aGlzLl9zaWduZXIucHVzaChuZXcgS2V5UGFpcih7IHBydjoga2V5IH0pKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIGhhc1NpZ25lcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2lnbmVyICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fc2lnbmVyLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhlIGFtb3VudCBpcyBwb3NpdGl2ZS5cbiAgICogQHBhcmFtIGFtb3VudFxuICAgKi9cbiAgdmFsaWRhdGVBbW91bnQoYW1vdW50OiBiaWdpbnQpOiB2b2lkIHtcbiAgICBpZiAoYW1vdW50IDw9IEJpZ0ludCgwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignQW1vdW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAnKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { BaseTransactionBuilderFactory } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
4
|
+
import { ExportInPTxBuilder } from './ExportInPTxBuilder';
|
|
5
|
+
import { ImportInPTxBuilder } from './ImportInPTxBuilder';
|
|
6
|
+
import { ExportInCTxBuilder } from './ExportInCTxBuilder';
|
|
7
|
+
import { ImportInCTxBuilder } from './ImportInCTxBuilder';
|
|
8
|
+
export declare class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
|
|
9
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
10
|
+
/**
|
|
11
|
+
* Extract credentials from remaining bytes after transaction using FlareJS codec.
|
|
12
|
+
* This is the proper way to parse credentials - using the codec's UnpackPrefix method.
|
|
13
|
+
* @param credentialBytes Remaining bytes after the transaction (starts with numCredentials)
|
|
14
|
+
* @param codec The FlareJS codec to use for unpacking
|
|
15
|
+
* @returns Array of parsed credentials
|
|
16
|
+
*/
|
|
17
|
+
private extractCredentialsWithCodec;
|
|
18
|
+
/**
|
|
19
|
+
* Parse a raw transaction buffer using the specified VM manager.
|
|
20
|
+
* @param rawBuffer The raw transaction buffer
|
|
21
|
+
* @param vmType The VM type to use for parsing ('EVM' or 'PVM')
|
|
22
|
+
* @returns Parsed transaction and credentials, or null if parsing fails
|
|
23
|
+
*/
|
|
24
|
+
private parseWithVM;
|
|
25
|
+
/**
|
|
26
|
+
* Create the appropriate transaction builder based on transaction type.
|
|
27
|
+
* @param tx The parsed transaction
|
|
28
|
+
* @param rawBuffer The raw transaction buffer
|
|
29
|
+
* @param credentials The extracted credentials
|
|
30
|
+
* @param isEVM Whether this is an EVM transaction
|
|
31
|
+
* @returns The appropriate transaction builder
|
|
32
|
+
*/
|
|
33
|
+
private createBuilder;
|
|
34
|
+
/** @inheritdoc */
|
|
35
|
+
from(raw: string): TransactionBuilder;
|
|
36
|
+
/** @inheritdoc */
|
|
37
|
+
getTransferBuilder(): TransactionBuilder;
|
|
38
|
+
/**
|
|
39
|
+
* Export Cross chain transfer
|
|
40
|
+
*/
|
|
41
|
+
getExportInPBuilder(): ExportInPTxBuilder;
|
|
42
|
+
/**
|
|
43
|
+
* Import Cross chain transfer
|
|
44
|
+
*/
|
|
45
|
+
getImportInPBuilder(): ImportInPTxBuilder;
|
|
46
|
+
/**
|
|
47
|
+
* Import in C chain Cross chain transfer
|
|
48
|
+
*/
|
|
49
|
+
getImportInCBuilder(): ImportInCTxBuilder;
|
|
50
|
+
/**
|
|
51
|
+
* Export in C chain Cross chain transfer
|
|
52
|
+
*/
|
|
53
|
+
getExportInCBuilder(): ExportInCTxBuilder;
|
|
54
|
+
/** @inheritdoc */
|
|
55
|
+
getWalletInitializationBuilder(): TransactionBuilder;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=transactionBuilderFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAgB,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAQ1D,qBAAa,yBAA0B,SAAQ,6BAA6B;gBAC9D,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C;;;;;;OAMG;IACH,OAAO,CAAC,2BAA2B;IAwBnC;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAkBnB;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa;IAgCrB,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;IAkBrC,kBAAkB;IAClB,kBAAkB,IAAI,kBAAkB;IAIxC;;OAEG;IACH,mBAAmB,IAAI,kBAAkB;IAIzC;;OAEG;IACH,mBAAmB,IAAI,kBAAkB;IAIzC;;OAEG;IACH,mBAAmB,IAAI,kBAAkB;IAIzC;;OAEG;IACH,mBAAmB,IAAI,kBAAkB;IAIzC,kBAAkB;IAClB,8BAA8B,IAAI,kBAAkB;CAGrD"}
|
|
@@ -0,0 +1,148 @@
|
|
|
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.TransactionBuilderFactory = void 0;
|
|
7
|
+
const flarejs_1 = require("@flarenetwork/flarejs");
|
|
8
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
9
|
+
const ExportInPTxBuilder_1 = require("./ExportInPTxBuilder");
|
|
10
|
+
const ImportInPTxBuilder_1 = require("./ImportInPTxBuilder");
|
|
11
|
+
const ExportInCTxBuilder_1 = require("./ExportInCTxBuilder");
|
|
12
|
+
const ImportInCTxBuilder_1 = require("./ImportInCTxBuilder");
|
|
13
|
+
const utils_1 = __importDefault(require("./utils"));
|
|
14
|
+
class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory {
|
|
15
|
+
constructor(_coinConfig) {
|
|
16
|
+
super(_coinConfig);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Extract credentials from remaining bytes after transaction using FlareJS codec.
|
|
20
|
+
* This is the proper way to parse credentials - using the codec's UnpackPrefix method.
|
|
21
|
+
* @param credentialBytes Remaining bytes after the transaction (starts with numCredentials)
|
|
22
|
+
* @param codec The FlareJS codec to use for unpacking
|
|
23
|
+
* @returns Array of parsed credentials
|
|
24
|
+
*/
|
|
25
|
+
extractCredentialsWithCodec(credentialBytes, codec) {
|
|
26
|
+
const credentials = [];
|
|
27
|
+
if (credentialBytes.length < 4) {
|
|
28
|
+
return credentials;
|
|
29
|
+
}
|
|
30
|
+
// Skip the first 4 bytes (numCredentials as Int type)
|
|
31
|
+
// The codec doesn't know about this Int, so we skip it manually
|
|
32
|
+
let remainingBytes = credentialBytes.slice(4);
|
|
33
|
+
let moreCredentials = true;
|
|
34
|
+
do {
|
|
35
|
+
try {
|
|
36
|
+
const [credential, rest] = codec.UnpackPrefix(remainingBytes);
|
|
37
|
+
credentials.push(credential);
|
|
38
|
+
remainingBytes = rest;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
moreCredentials = false;
|
|
42
|
+
}
|
|
43
|
+
} while (remainingBytes.length > 0 && moreCredentials);
|
|
44
|
+
return credentials;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Parse a raw transaction buffer using the specified VM manager.
|
|
48
|
+
* @param rawBuffer The raw transaction buffer
|
|
49
|
+
* @param vmType The VM type to use for parsing ('EVM' or 'PVM')
|
|
50
|
+
* @returns Parsed transaction and credentials, or null if parsing fails
|
|
51
|
+
*/
|
|
52
|
+
parseWithVM(rawBuffer, vmType) {
|
|
53
|
+
try {
|
|
54
|
+
const manager = flarejs_1.utils.getManagerForVM(vmType);
|
|
55
|
+
const [codec, txBytes] = manager.getCodecFromBuffer(rawBuffer);
|
|
56
|
+
const [tx, credentialBytes] = codec.UnpackPrefix(txBytes);
|
|
57
|
+
const credentials = credentialBytes.length > 4 ? this.extractCredentialsWithCodec(credentialBytes, codec) : [];
|
|
58
|
+
return { tx, credentials };
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Create the appropriate transaction builder based on transaction type.
|
|
66
|
+
* @param tx The parsed transaction
|
|
67
|
+
* @param rawBuffer The raw transaction buffer
|
|
68
|
+
* @param credentials The extracted credentials
|
|
69
|
+
* @param isEVM Whether this is an EVM transaction
|
|
70
|
+
* @returns The appropriate transaction builder
|
|
71
|
+
*/
|
|
72
|
+
createBuilder(tx, rawBuffer, credentials, isEVM) {
|
|
73
|
+
if (isEVM) {
|
|
74
|
+
if (ExportInCTxBuilder_1.ExportInCTxBuilder.verifyTxType(tx._type)) {
|
|
75
|
+
const builder = this.getExportInCBuilder();
|
|
76
|
+
builder.initBuilder(tx, rawBuffer, credentials);
|
|
77
|
+
return builder;
|
|
78
|
+
}
|
|
79
|
+
if (ImportInCTxBuilder_1.ImportInCTxBuilder.verifyTxType(tx._type)) {
|
|
80
|
+
const builder = this.getImportInCBuilder();
|
|
81
|
+
builder.initBuilder(tx, rawBuffer, credentials);
|
|
82
|
+
return builder;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
if (ImportInPTxBuilder_1.ImportInPTxBuilder.verifyTxType(tx._type)) {
|
|
87
|
+
const builder = this.getImportInPBuilder();
|
|
88
|
+
builder.initBuilder(tx, rawBuffer, credentials);
|
|
89
|
+
return builder;
|
|
90
|
+
}
|
|
91
|
+
if (ExportInPTxBuilder_1.ExportInPTxBuilder.verifyTxType(tx._type)) {
|
|
92
|
+
const builder = this.getExportInPBuilder();
|
|
93
|
+
builder.initBuilder(tx, rawBuffer, credentials);
|
|
94
|
+
return builder;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
throw new sdk_core_1.NotSupported('Transaction type not supported');
|
|
98
|
+
}
|
|
99
|
+
/** @inheritdoc */
|
|
100
|
+
from(raw) {
|
|
101
|
+
utils_1.default.validateRawTransaction(raw);
|
|
102
|
+
const rawBuffer = Buffer.from(utils_1.default.removeHexPrefix(raw), 'hex');
|
|
103
|
+
// Try EVM first, then fall back to PVM
|
|
104
|
+
const evmResult = this.parseWithVM(rawBuffer, 'EVM');
|
|
105
|
+
if (evmResult) {
|
|
106
|
+
return this.createBuilder(evmResult.tx, rawBuffer, evmResult.credentials, true);
|
|
107
|
+
}
|
|
108
|
+
const pvmResult = this.parseWithVM(rawBuffer, 'PVM');
|
|
109
|
+
if (pvmResult) {
|
|
110
|
+
return this.createBuilder(pvmResult.tx, rawBuffer, pvmResult.credentials, false);
|
|
111
|
+
}
|
|
112
|
+
throw new sdk_core_1.NotSupported('Transaction type not supported');
|
|
113
|
+
}
|
|
114
|
+
/** @inheritdoc */
|
|
115
|
+
getTransferBuilder() {
|
|
116
|
+
throw new sdk_core_1.NotSupported('Transfer is not supported in P Chain');
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Export Cross chain transfer
|
|
120
|
+
*/
|
|
121
|
+
getExportInPBuilder() {
|
|
122
|
+
return new ExportInPTxBuilder_1.ExportInPTxBuilder(this._coinConfig);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Import Cross chain transfer
|
|
126
|
+
*/
|
|
127
|
+
getImportInPBuilder() {
|
|
128
|
+
return new ImportInPTxBuilder_1.ImportInPTxBuilder(this._coinConfig);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Import in C chain Cross chain transfer
|
|
132
|
+
*/
|
|
133
|
+
getImportInCBuilder() {
|
|
134
|
+
return new ImportInCTxBuilder_1.ImportInCTxBuilder(this._coinConfig);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Export in C chain Cross chain transfer
|
|
138
|
+
*/
|
|
139
|
+
getExportInCBuilder() {
|
|
140
|
+
return new ExportInCTxBuilder_1.ExportInCTxBuilder(this._coinConfig);
|
|
141
|
+
}
|
|
142
|
+
/** @inheritdoc */
|
|
143
|
+
getWalletInitializationBuilder() {
|
|
144
|
+
throw new sdk_core_1.NotSupported('Wallet initialization is not needed');
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
exports.TransactionBuilderFactory = TransactionBuilderFactory;
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFBOEY7QUFDOUYsbURBQW1GO0FBR25GLDZEQUEwRDtBQUMxRCw2REFBMEQ7QUFDMUQsNkRBQTBEO0FBQzFELDZEQUEwRDtBQUUxRCxvREFBNEI7QUFNNUIsTUFBYSx5QkFBMEIsU0FBUSx3Q0FBNkI7SUFDMUUsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLDJCQUEyQixDQUFDLGVBQTJCLEVBQUUsS0FBWTtRQUMzRSxNQUFNLFdBQVcsR0FBaUIsRUFBRSxDQUFDO1FBQ3JDLElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQixPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDO1FBRUQsc0RBQXNEO1FBQ3RELGdFQUFnRTtRQUNoRSxJQUFJLGNBQWMsR0FBZSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFELElBQUksZUFBZSxHQUFHLElBQUksQ0FBQztRQUUzQixHQUFHLENBQUM7WUFDRixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFhLGNBQWMsQ0FBQyxDQUFDO2dCQUMxRSxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUM3QixjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsZUFBZSxHQUFHLEtBQUssQ0FBQztZQUMxQixDQUFDO1FBQ0gsQ0FBQyxRQUFRLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLGVBQWUsRUFBRTtR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SkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1dGlscyBhcyBGbGFyZVV0aWxzLCBldm1TZXJpYWwsIHB2bVNlcmlhbCwgQ3JlZGVudGlhbCB9IGZyb20gJ0BmbGFyZW5ldHdvcmsvZmxhcmVqcyc7XG5pbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSwgTm90U3VwcG9ydGVkIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgRXhwb3J0SW5QVHhCdWlsZGVyIH0gZnJvbSAnLi9FeHBvcnRJblBUeEJ1aWxkZXInO1xuaW1wb3J0IHsgSW1wb3J0SW5QVHhCdWlsZGVyIH0gZnJvbSAnLi9JbXBvcnRJblBUeEJ1aWxkZXInO1xuaW1wb3J0IHsgRXhwb3J0SW5DVHhCdWlsZGVyIH0gZnJvbSAnLi9FeHBvcnRJbkNUeEJ1aWxkZXInO1xuaW1wb3J0IHsgSW1wb3J0SW5DVHhCdWlsZGVyIH0gZnJvbSAnLi9JbXBvcnRJbkNUeEJ1aWxkZXInO1xuaW1wb3J0IHsgU2VyaWFsaXplZFR4IH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbmludGVyZmFjZSBDb2RlYyB7XG4gIFVucGFja1ByZWZpeDxUPihieXRlczogVWludDhBcnJheSk6IFtULCBVaW50OEFycmF5XTtcbn1cblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IGNyZWRlbnRpYWxzIGZyb20gcmVtYWluaW5nIGJ5dGVzIGFmdGVyIHRyYW5zYWN0aW9uIHVzaW5nIEZsYXJlSlMgY29kZWMuXG4gICAqIFRoaXMgaXMgdGhlIHByb3BlciB3YXkgdG8gcGFyc2UgY3JlZGVudGlhbHMgLSB1c2luZyB0aGUgY29kZWMncyBVbnBhY2tQcmVmaXggbWV0aG9kLlxuICAgKiBAcGFyYW0gY3JlZGVudGlhbEJ5dGVzIFJlbWFpbmluZyBieXRlcyBhZnRlciB0aGUgdHJhbnNhY3Rpb24gKHN0YXJ0cyB3aXRoIG51bUNyZWRlbnRpYWxzKVxuICAgKiBAcGFyYW0gY29kZWMgVGhlIEZsYXJlSlMgY29kZWMgdG8gdXNlIGZvciB1bnBhY2tpbmdcbiAgICogQHJldHVybnMgQXJyYXkgb2YgcGFyc2VkIGNyZWRlbnRpYWxzXG4gICAqL1xuICBwcml2YXRlIGV4dHJhY3RDcmVkZW50aWFsc1dpdGhDb2RlYyhjcmVkZW50aWFsQnl0ZXM6IFVpbnQ4QXJyYXksIGNvZGVjOiBDb2RlYyk6IENyZWRlbnRpYWxbXSB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxbXSA9IFtdO1xuICAgIGlmIChjcmVkZW50aWFsQnl0ZXMubGVuZ3RoIDwgNCkge1xuICAgICAgcmV0dXJuIGNyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIC8vIFNraXAgdGhlIGZpcnN0IDQgYnl0ZXMgKG51bUNyZWRlbnRpYWxzIGFzIEludCB0eXBlKVxuICAgIC8vIFRoZSBjb2RlYyBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyBJbnQsIHNvIHdlIHNraXAgaXQgbWFudWFsbHlcbiAgICBsZXQgcmVtYWluaW5nQnl0ZXM6IFVpbnQ4QXJyYXkgPSBjcmVkZW50aWFsQnl0ZXMuc2xpY2UoNCk7XG4gICAgbGV0IG1vcmVDcmVkZW50aWFscyA9IHRydWU7XG5cbiAgICBkbyB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBbY3JlZGVudGlhbCwgcmVzdF0gPSBjb2RlYy5VbnBhY2tQcmVmaXg8Q3JlZGVudGlhbD4ocmVtYWluaW5nQnl0ZXMpO1xuICAgICAgICBjcmVkZW50aWFscy5wdXNoKGNyZWRlbnRpYWwpO1xuICAgICAgICByZW1haW5pbmdCeXRlcyA9IHJlc3Q7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgbW9yZUNyZWRlbnRpYWxzID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSB3aGlsZSAocmVtYWluaW5nQnl0ZXMubGVuZ3RoID4gMCAmJiBtb3JlQ3JlZGVudGlhbHMpO1xuXG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGEgcmF3IHRyYW5zYWN0aW9uIGJ1ZmZlciB1c2luZyB0aGUgc3BlY2lmaWVkIFZNIG1hbmFnZXIuXG4gICAqIEBwYXJhbSByYXdCdWZmZXIgVGhlIHJhdyB0cmFuc2FjdGlvbiBidWZmZXJcbiAgICogQHBhcmFtIHZtVHlwZSBUaGUgVk0gdHlwZSB0byB1c2UgZm9yIHBhcnNpbmcgKCdFVk0nIG9yICdQVk0nKVxuICAgKiBAcmV0dXJucyBQYXJzZWQgdHJhbnNhY3Rpb24gYW5kIGNyZWRlbnRpYWxzLCBvciBudWxsIGlmIHBhcnNpbmcgZmFpbHNcbiAgICovXG4gIHByaXZhdGUgcGFyc2VXaXRoVk0oXG4gICAgcmF3QnVmZmVyOiBCdWZmZXIsXG4gICAgdm1UeXBlOiAnRVZNJyB8ICdQVk0nXG4gICk6IHsgdHg6IFNlcmlhbGl6ZWRUeDsgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxbXSB9IHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1hbmFnZXIgPSBGbGFyZVV0aWxzLmdldE1hbmFnZXJGb3JWTSh2bVR5cGUpO1xuICAgICAgY29uc3QgW2NvZGVjLCB0eEJ5dGVzXSA9IG1hbmFnZXIuZ2V0Q29kZWNGcm9tQnVmZmVyKHJhd0J1ZmZlcik7XG4gICAgICBjb25zdCBbdHgsIGNyZWRlbnRpYWxCeXRlc10gPSAoY29kZWMgYXMgQ29kZWMpLlVucGFja1ByZWZpeDxTZXJpYWxpemVkVHg+KHR4Qnl0ZXMpO1xuXG4gICAgICBjb25zdCBjcmVkZW50aWFscyA9XG4gICAgICAgIGNyZWRlbnRpYWxCeXRlcy5sZW5ndGggPiA0ID8gdGhpcy5leHRyYWN0Q3JlZGVudGlhbHNXaXRoQ29kZWMoY3JlZGVudGlhbEJ5dGVzLCBjb2RlYyBhcyBDb2RlYykgOiBbXTtcblxuICAgICAgcmV0dXJuIHsgdHgsIGNyZWRlbnRpYWxzIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBhcHByb3ByaWF0ZSB0cmFuc2FjdGlvbiBidWlsZGVyIGJhc2VkIG9uIHRyYW5zYWN0aW9uIHR5cGUuXG4gICAqIEBwYXJhbSB0eCBUaGUgcGFyc2VkIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSByYXdCdWZmZXIgVGhlIHJhdyB0cmFuc2FjdGlvbiBidWZmZXJcbiAgICogQHBhcmFtIGNyZWRlbnRpYWxzIFRoZSBleHRyYWN0ZWQgY3JlZGVudGlhbHNcbiAgICogQHBhcmFtIGlzRVZNIFdoZXRoZXIgdGhpcyBpcyBhbiBFVk0gdHJhbnNhY3Rpb25cbiAgICogQHJldHVybnMgVGhlIGFwcHJvcHJpYXRlIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlQnVpbGRlcihcbiAgICB0eDogU2VyaWFsaXplZFR4LFxuICAgIHJhd0J1ZmZlcjogQnVmZmVyLFxuICAgIGNyZWRlbnRpYWxzOiBDcmVkZW50aWFsW10sXG4gICAgaXNFVk06IGJvb2xlYW5cbiAgKTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICBpZiAoaXNFVk0pIHtcbiAgICAgIGlmIChFeHBvcnRJbkNUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKHR4Ll90eXBlKSkge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gdGhpcy5nZXRFeHBvcnRJbkNCdWlsZGVyKCk7XG4gICAgICAgIGJ1aWxkZXIuaW5pdEJ1aWxkZXIodHggYXMgZXZtU2VyaWFsLkV4cG9ydFR4LCByYXdCdWZmZXIsIGNyZWRlbnRpYWxzKTtcbiAgICAgICAgcmV0dXJuIGJ1aWxkZXI7XG4gICAgICB9XG4gICAgICBpZiAoSW1wb3J0SW5DVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSh0eC5fdHlwZSkpIHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IHRoaXMuZ2V0SW1wb3J0SW5DQnVpbGRlcigpO1xuICAgICAgICBidWlsZGVyLmluaXRCdWlsZGVyKHR4IGFzIGV2bVNlcmlhbC5JbXBvcnRUeCwgcmF3QnVmZmVyLCBjcmVkZW50aWFscyk7XG4gICAgICAgIHJldHVybiBidWlsZGVyO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoSW1wb3J0SW5QVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSh0eC5fdHlwZSkpIHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IHRoaXMuZ2V0SW1wb3J0SW5QQnVpbGRlcigpO1xuICAgICAgICBidWlsZGVyLmluaXRCdWlsZGVyKHR4IGFzIHB2bVNlcmlhbC5JbXBvcnRUeCwgcmF3QnVmZmVyLCBjcmVkZW50aWFscyk7XG4gICAgICAgIHJldHVybiBidWlsZGVyO1xuICAgICAgfVxuICAgICAgaWYgKEV4cG9ydEluUFR4QnVpbGRlci52ZXJpZnlUeFR5cGUodHguX3R5cGUpKSB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSB0aGlzLmdldEV4cG9ydEluUEJ1aWxkZXIoKTtcbiAgICAgICAgYnVpbGRlci5pbml0QnVpbGRlcih0eCBhcyBwdm1TZXJpYWwuRXhwb3J0VHgsIHJhd0J1ZmZlciwgY3JlZGVudGlhbHMpO1xuICAgICAgICByZXR1cm4gYnVpbGRlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnVHJhbnNhY3Rpb24gdHlwZSBub3Qgc3VwcG9ydGVkJyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZnJvbShyYXc6IHN0cmluZyk6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgdXRpbHMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXcpO1xuICAgIGNvbnN0IHJhd0J1ZmZlciA9IEJ1ZmZlci5mcm9tKHV0aWxzLnJlbW92ZUhleFByZWZpeChyYXcpLCAnaGV4Jyk7XG5cbiAgICAvLyBUcnkgRVZNIGZpcnN0LCB0aGVuIGZhbGwgYmFjayB0byBQVk1cbiAgICBjb25zdCBldm1SZXN1bHQgPSB0aGlzLnBhcnNlV2l0aFZNKHJhd0J1ZmZlciwgJ0VWTScpO1xuICAgIGlmIChldm1SZXN1bHQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUJ1aWxkZXIoZXZtUmVzdWx0LnR4LCByYXdCdWZmZXIsIGV2bVJlc3VsdC5jcmVkZW50aWFscywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgcHZtUmVzdWx0ID0gdGhpcy5wYXJzZVdpdGhWTShyYXdCdWZmZXIsICdQVk0nKTtcbiAgICBpZiAocHZtUmVzdWx0KSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVCdWlsZGVyKHB2bVJlc3VsdC50eCwgcmF3QnVmZmVyLCBwdm1SZXN1bHQuY3JlZGVudGlhbHMsIGZhbHNlKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdUcmFuc2FjdGlvbiB0eXBlIG5vdCBzdXBwb3J0ZWQnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBnZXRUcmFuc2ZlckJ1aWxkZXIoKTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdUcmFuc2ZlciBpcyBub3Qgc3VwcG9ydGVkIGluIFAgQ2hhaW4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgQ3Jvc3MgY2hhaW4gdHJhbnNmZXJcbiAgICovXG4gIGdldEV4cG9ydEluUEJ1aWxkZXIoKTogRXhwb3J0SW5QVHhCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IEV4cG9ydEluUFR4QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgQ3Jvc3MgY2hhaW4gdHJhbnNmZXJcbiAgICovXG4gIGdldEltcG9ydEluUEJ1aWxkZXIoKTogSW1wb3J0SW5QVHhCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IEltcG9ydEluUFR4QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgaW4gQyBjaGFpbiBDcm9zcyBjaGFpbiB0cmFuc2ZlclxuICAgKi9cbiAgZ2V0SW1wb3J0SW5DQnVpbGRlcigpOiBJbXBvcnRJbkNUeEJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgSW1wb3J0SW5DVHhCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBpbiBDIGNoYWluIENyb3NzIGNoYWluIHRyYW5zZmVyXG4gICAqL1xuICBnZXRFeHBvcnRJbkNCdWlsZGVyKCk6IEV4cG9ydEluQ1R4QnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBFeHBvcnRJbkNUeEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0V2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKCk6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnV2FsbGV0IGluaXRpYWxpemF0aW9uIGlzIG5vdCBuZWVkZWQnKTtcbiAgfVxufVxuIl19
|