@bitgo/sdk-coin-avaxp 3.22.4 → 5.0.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.
Files changed (77) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/dist/src/avaxp.d.ts.map +1 -1
  3. package/dist/src/avaxp.js +18 -8
  4. package/dist/src/index.js +6 -2
  5. package/dist/src/lib/atomicInCTransactionBuilder.d.ts +2 -2
  6. package/dist/src/lib/atomicInCTransactionBuilder.d.ts.map +1 -1
  7. package/dist/src/lib/atomicInCTransactionBuilder.js +1 -1
  8. package/dist/src/lib/atomicTransactionBuilder.d.ts +2 -2
  9. package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
  10. package/dist/src/lib/atomicTransactionBuilder.js +5 -5
  11. package/dist/src/lib/delegatorTxBuilder.d.ts +6 -6
  12. package/dist/src/lib/delegatorTxBuilder.d.ts.map +1 -1
  13. package/dist/src/lib/delegatorTxBuilder.js +6 -6
  14. package/dist/src/lib/deprecatedTransaction.d.ts +100 -0
  15. package/dist/src/lib/deprecatedTransaction.d.ts.map +1 -0
  16. package/dist/src/lib/deprecatedTransaction.js +345 -0
  17. package/dist/src/lib/deprecatedTransactionBuilder.d.ts +115 -0
  18. package/dist/src/lib/deprecatedTransactionBuilder.d.ts.map +1 -0
  19. package/dist/src/lib/deprecatedTransactionBuilder.js +210 -0
  20. package/dist/src/lib/exportInCTxBuilder.d.ts +8 -8
  21. package/dist/src/lib/exportInCTxBuilder.d.ts.map +1 -1
  22. package/dist/src/lib/exportInCTxBuilder.js +4 -4
  23. package/dist/src/lib/exportTxBuilder.d.ts +4 -4
  24. package/dist/src/lib/exportTxBuilder.d.ts.map +1 -1
  25. package/dist/src/lib/exportTxBuilder.js +2 -2
  26. package/dist/src/lib/iface.d.ts +11 -6
  27. package/dist/src/lib/iface.d.ts.map +1 -1
  28. package/dist/src/lib/iface.js +1 -1
  29. package/dist/src/lib/importInCTxBuilder.d.ts +4 -4
  30. package/dist/src/lib/importInCTxBuilder.d.ts.map +1 -1
  31. package/dist/src/lib/importInCTxBuilder.js +6 -6
  32. package/dist/src/lib/importTxBuilder.d.ts +4 -4
  33. package/dist/src/lib/importTxBuilder.d.ts.map +1 -1
  34. package/dist/src/lib/importTxBuilder.js +2 -2
  35. package/dist/src/lib/index.d.ts +2 -0
  36. package/dist/src/lib/index.d.ts.map +1 -1
  37. package/dist/src/lib/index.js +11 -3
  38. package/dist/src/lib/keyPair.js +9 -9
  39. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +154 -0
  40. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -0
  41. package/dist/src/lib/permissionlessValidatorTxBuilder.js +447 -0
  42. package/dist/src/lib/transaction.d.ts +19 -40
  43. package/dist/src/lib/transaction.d.ts.map +1 -1
  44. package/dist/src/lib/transaction.js +66 -151
  45. package/dist/src/lib/transactionBuilder.d.ts +31 -75
  46. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  47. package/dist/src/lib/transactionBuilder.js +65 -137
  48. package/dist/src/lib/transactionBuilderFactory.d.ts +16 -8
  49. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  50. package/dist/src/lib/transactionBuilderFactory.js +78 -19
  51. package/dist/src/lib/utils.d.ts +22 -7
  52. package/dist/src/lib/utils.d.ts.map +1 -1
  53. package/dist/src/lib/utils.js +53 -11
  54. package/dist/src/lib/utxoEngine.d.ts +10 -1
  55. package/dist/src/lib/utxoEngine.d.ts.map +1 -1
  56. package/dist/src/lib/utxoEngine.js +27 -3
  57. package/dist/src/lib/validatorTxBuilder.d.ts +4 -4
  58. package/dist/src/lib/validatorTxBuilder.d.ts.map +1 -1
  59. package/dist/src/lib/validatorTxBuilder.js +1 -1
  60. package/dist/test/resources/avaxp.d.ts +77 -0
  61. package/dist/test/resources/avaxp.d.ts.map +1 -1
  62. package/dist/test/resources/avaxp.js +124 -2
  63. package/dist/test/unit/avaxp.js +81 -11
  64. package/dist/test/unit/lib/exportC2PTxBuilder.js +6 -2
  65. package/dist/test/unit/lib/exportP2CTxBuilder.js +10 -6
  66. package/dist/test/unit/lib/importC2PTxBuilder.js +8 -4
  67. package/dist/test/unit/lib/importP2CTxBuilder.js +8 -4
  68. package/dist/test/unit/lib/keyPair.js +6 -2
  69. package/dist/test/unit/lib/permissionlessValidatorTxBuilder.d.ts +2 -0
  70. package/dist/test/unit/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -0
  71. package/dist/test/unit/lib/permissionlessValidatorTxBuilder.js +288 -0
  72. package/dist/test/unit/lib/transactionBuilderFactory.js +8 -4
  73. package/dist/test/unit/lib/utils.js +6 -2
  74. package/dist/test/unit/lib/utxoEngine.js +6 -6
  75. package/dist/test/unit/lib/validateTxBuilder.js +10 -6
  76. package/dist/tsconfig.tsbuildinfo +1 -1
  77. package/package.json +8 -7
@@ -4,17 +4,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.TransactionBuilder = void 0;
7
+ const avalanchejs_1 = require("@bitgo/avalanchejs");
7
8
  const sdk_core_1 = require("@bitgo/sdk-core");
8
9
  const transaction_1 = require("./transaction");
9
- const keyPair_1 = require("./keyPair");
10
- const avalanche_1 = require("avalanche");
11
10
  const utils_1 = __importDefault(require("./utils"));
12
- const platformvm_1 = require("avalanche/dist/apis/platformvm");
13
11
  class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
14
12
  constructor(_coinConfig) {
15
13
  super(_coinConfig);
16
- this._signer = [];
17
14
  this.recoverSigner = false;
15
+ this._signer = [];
18
16
  this._transaction = new transaction_1.Transaction(_coinConfig);
19
17
  }
20
18
  /**
@@ -24,44 +22,58 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
24
22
  * @returns itself
25
23
  */
26
24
  initBuilder(tx) {
27
- const baseTx = tx.getUnsignedTx().getTransaction();
28
- if (baseTx.getNetworkID() !== this._transaction._networkID ||
29
- !baseTx.getBlockchainID().equals(this._transaction._blockchainID)) {
25
+ const baseTx = tx.tx.baseTx;
26
+ if (baseTx.NetworkId.value() !== this._transaction._networkID ||
27
+ baseTx.BlockchainId.value() !== this._transaction._blockchainID) {
30
28
  throw new Error('Network or blockchain is not equals');
31
29
  }
32
30
  this._transaction.setTransaction(tx);
33
31
  return this;
34
32
  }
35
- /** @inheritdoc */
36
- fromImplementation(rawTransaction) {
37
- const tx = new platformvm_1.Tx();
38
- tx.fromBuffer(avalanche_1.Buffer.from(rawTransaction, 'hex'));
39
- this.initBuilder(tx);
40
- return this.transaction;
33
+ // region Validators
34
+ /**
35
+ * Validates the threshold
36
+ * @param threshold
37
+ */
38
+ validateThreshold(threshold) {
39
+ if (!threshold || threshold !== 2) {
40
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction: threshold must be set to 2');
41
+ }
41
42
  }
42
- /** @inheritdoc */
43
- async buildImplementation() {
44
- this.buildAvaxTransaction();
45
- this.transaction.setTransactionType(this.transactionType);
46
- if (this.hasSigner) {
47
- this._signer.forEach((keyPair) => this.transaction.sign(keyPair));
43
+ /**
44
+ * Check the UTXO has expected fields.
45
+ * @param UTXO
46
+ */
47
+ validateUtxo(value) {
48
+ ['outputID', 'amount', 'txid', 'outputidx'].forEach((field) => {
49
+ if (!value.hasOwnProperty(field))
50
+ throw new sdk_core_1.BuildTransactionError(`Utxos required ${field}`);
51
+ });
52
+ }
53
+ /**
54
+ * Check the list of UTXOS is empty and check each UTXO.
55
+ * @param values
56
+ */
57
+ validateUtxos(values) {
58
+ if (values.length === 0) {
59
+ throw new sdk_core_1.BuildTransactionError("Utxos can't be empty array");
48
60
  }
49
- return this.transaction;
61
+ values.forEach(this.validateUtxo);
50
62
  }
51
- // region Getters and Setters
52
63
  /**
53
- * When using recovery key must be set here
54
- * TODO: STLX-17317 recovery key signing
55
- * @param {boolean} true if it's recovery signer, default true.
64
+ * Validates locktime
65
+ * @param locktime
56
66
  */
57
- recoverMode(recoverSigner = true) {
58
- this.recoverSigner = recoverSigner;
59
- return this;
67
+ validateLocktime(locktime) {
68
+ if (!locktime || locktime < BigInt(0)) {
69
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction: locktime must be 0 or higher');
70
+ }
60
71
  }
72
+ // endregion
61
73
  /**
62
74
  * Threshold is an int that names the number of unique signatures required to spend the output.
63
75
  * Must be less than or equal to the length of Addresses.
64
- * @param {number}
76
+ * @param {number} value
65
77
  */
66
78
  threshold(value) {
67
79
  this.validateThreshold(value);
@@ -74,13 +86,22 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
74
86
  * @param value
75
87
  */
76
88
  locktime(value) {
77
- this.validateLocktime(new avalanche_1.BN(value));
78
- this._transaction._locktime = new avalanche_1.BN(value);
89
+ this.validateLocktime(BigInt(value));
90
+ this._transaction._locktime = BigInt(value);
91
+ return this;
92
+ }
93
+ /**
94
+ * When using recovery key must be set here
95
+ * TODO: STLX-17317 recovery key signing
96
+ * @param {boolean}[recoverSigner=true] whether it's recovery signer
97
+ */
98
+ recoverMode(recoverSigner = true) {
99
+ this.recoverSigner = recoverSigner;
79
100
  return this;
80
101
  }
81
102
  /**
82
- * fromPubKey is a list of unique addresses that correspond to the private keys that can be used to spend this output.
83
- * @param {string | stirng[]} senderPubKey
103
+ * fromPubKey is a list of unique addresses that correspond to the private keys that can be used to spend this output
104
+ * @param {string | string[]} senderPubKey
84
105
  */
85
106
  fromPubKey(senderPubKey) {
86
107
  const pubKeys = senderPubKey instanceof Array ? senderPubKey : [senderPubKey];
@@ -98,113 +119,20 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
98
119
  this._transaction._utxos = value;
99
120
  return this;
100
121
  }
101
- /**
102
- * Getter for know if build should sign
103
- */
104
- get hasSigner() {
105
- return this._signer !== undefined && this._signer.length > 0;
106
- }
122
+ // TODO(CR-1073):
123
+ // Implement:
124
+ // buildImplementation
125
+ // signImplementation
126
+ // get transaction
127
+ // set transaction
128
+ // validateRawTransaction
107
129
  /** @inheritdoc */
108
- get transaction() {
130
+ fromImplementation(rawTransaction) {
131
+ const [tx] = avalanchejs_1.pvmSerial.AddPermissionlessValidatorTx.fromBytes(Buffer.from(rawTransaction, 'hex'), avalanchejs_1.avmSerial.getAVMManager().getDefaultCodec());
132
+ // TODO(CR-1073): check if initBuilder can only use UnsignedTx and pvmSerial.BaseTx is not required
133
+ this.initBuilder(tx);
109
134
  return this._transaction;
110
135
  }
111
- set transaction(transaction) {
112
- this._transaction = transaction;
113
- }
114
- /** @inheritdoc */
115
- signImplementation({ key }) {
116
- this._signer.push(new keyPair_1.KeyPair({ prv: key }));
117
- return this.transaction;
118
- }
119
- // endregion
120
- // region Validators
121
- /**
122
- * Validates the threshold
123
- * @param threshold
124
- */
125
- validateThreshold(threshold) {
126
- if (!threshold || threshold !== 2) {
127
- throw new sdk_core_1.BuildTransactionError('Invalid transaction: threshold must be set to 2');
128
- }
129
- }
130
- /**
131
- * Validates locktime
132
- * @param locktime
133
- */
134
- validateLocktime(locktime) {
135
- if (!locktime || locktime.lt(new avalanche_1.BN(0))) {
136
- throw new sdk_core_1.BuildTransactionError('Invalid transaction: locktime must be 0 or higher');
137
- }
138
- }
139
- /** @inheritdoc */
140
- validateAddress(address, addressFormat) {
141
- if (!utils_1.default.isValidAddress(address.address)) {
142
- throw new sdk_core_1.BuildTransactionError('Invalid address');
143
- }
144
- }
145
- /** @inheritdoc */
146
- validateKey({ key }) {
147
- if (!new keyPair_1.KeyPair({ prv: key })) {
148
- throw new sdk_core_1.BuildTransactionError('Invalid key');
149
- }
150
- }
151
- /**
152
- * Check the raw transaction has a valid format in the blockchain context, throw otherwise.
153
- * It overrides abstract method from BaseTransactionBuilder
154
- *
155
- * @param rawTransaction Transaction in any format
156
- */
157
- validateRawTransaction(rawTransaction) {
158
- utils_1.default.validateRawTransaction(rawTransaction);
159
- }
160
- /** @inheritdoc */
161
- validateTransaction(transaction) {
162
- // throw new NotImplementedError('validateTransaction not implemented');
163
- }
164
- /** @inheritdoc */
165
- validateValue(value) {
166
- if (value.isLessThan(0)) {
167
- throw new sdk_core_1.BuildTransactionError('Value cannot be less than zero');
168
- }
169
- }
170
- /**
171
- * Check the list of UTXOS is empty and check each UTXO.
172
- * @param values
173
- */
174
- validateUtxos(values) {
175
- if (values.length === 0) {
176
- throw new sdk_core_1.BuildTransactionError("Utxos can't be empty array");
177
- }
178
- values.forEach(this.validateUtxo);
179
- }
180
- /**
181
- * Check the UTXO has expected fields.
182
- * @param UTXO
183
- */
184
- validateUtxo(value) {
185
- ['outputID', 'amount', 'txid', 'outputidx'].forEach((field) => {
186
- if (!value.hasOwnProperty(field))
187
- throw new sdk_core_1.BuildTransactionError(`Utxos required ${field}`);
188
- });
189
- }
190
- /**
191
- * Check the amount is positive.
192
- * @param amount
193
- */
194
- validateAmount(amount) {
195
- if (amount.lten(0)) {
196
- throw new sdk_core_1.BuildTransactionError('Amount must be greater than 0');
197
- }
198
- }
199
- /**
200
- * Check the buffer has 32 byte long.
201
- * @param chainID
202
- */
203
- validateChainId(chainID) {
204
- if (chainID.length !== 32) {
205
- throw new sdk_core_1.BuildTransactionError('Chain id are 32 byte size');
206
- }
207
- }
208
136
  }
209
137
  exports.TransactionBuilder = TransactionBuilder;
210
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsOENBT3lCO0FBQ3pCLCtDQUE0QztBQUM1Qyx1Q0FBb0M7QUFDcEMseUNBQXFEO0FBQ3JELG9EQUE0QjtBQUU1QiwrREFBNkQ7QUFFN0QsTUFBc0Isa0JBQW1CLFNBQVEsaUNBQXNCO0lBS3JFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBSmQsWUFBTyxHQUFjLEVBQUUsQ0FBQztRQUNyQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUk5QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUkseUJBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxXQUFXLENBQUMsRUFBTTtRQUNoQixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDbkQsSUFDRSxNQUFNLENBQUMsWUFBWSxFQUFFLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVO1lBQ3RELENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxFQUNqRTtZQUNBLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztTQUN4RDtRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtCQUFrQjtJQUNSLGtCQUFrQixDQUFDLGNBQXNCO1FBQ2pELE1BQU0sRUFBRSxHQUFHLElBQUksZUFBSyxFQUFFLENBQUM7UUFDdkIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxrQkFBVSxDQUFDLElB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LENBQUM7SUFFRDs7O09BR0c7SUFDSCxhQUFhLENBQUMsTUFBd0I7UUFDcEMsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN2QixNQUFNLElBQUksZ0NBQXFCLENBQUMsNEJBQTRCLENBQUMsQ0FBQztTQUMvRDtRQUNELE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxZQUFZLENBQUMsS0FBcUI7UUFDaEMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM1RCxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7Z0JBQUUsTUFBTSxJQUFJLGdDQUFxQixDQUFDLGtCQUFrQixLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQy9GLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWMsQ0FBQyxNQUFVO1FBQ3ZCLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNsQixNQUFNLElBQUksZ0NBQXFCLENBQUMsK0JBQStCLENBQUMsQ0FBQztTQUNsRTtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxlQUFlLENBQUMsT0FBbUI7UUFDakMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLEVBQUUsRUFBRTtZQUN6QixNQUFNLElBQUksZ0NBQXFCLENBQUMsMkJBQTJCLENBQUMsQ0FBQztTQUM5RDtJQUNILENBQUM7Q0FHRjtBQXZPRCxnREF1T0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHtcbiAgQmFzZUFkZHJlc3MsXG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbiAgQnVpbGRUcmFuc2FjdGlvbkVycm9yLFxuICBCYXNlVHJhbnNhY3Rpb24sXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5pbXBvcnQgeyBCTiwgQnVmZmVyIGFzIEJ1ZmZlckF2YXggfSBmcm9tICdhdmFsYW5jaGUnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRGVjb2RlZFV0eG9PYmosIFR4IH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBUeCBhcyBQVk1UeCB9IGZyb20gJ2F2YWxhbmNoZS9kaXN0L2FwaXMvcGxhdGZvcm12bSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJpdmF0ZSBfdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uO1xuICBwdWJsaWMgX3NpZ25lcjogS2V5UGFpcltdID0gW107XG4gIHByb3RlY3RlZCByZWNvdmVyU2lnbmVyID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSB0cmFuc2FjdGlvbiBidWlsZGVyIGZpZWxkcyB1c2luZyB0aGUgZGVjb2RlZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IHR4IHRoZSB0cmFuc2FjdGlvbiBkYXRhXG4gICAqIEByZXR1cm5zIGl0c2VsZlxuICAgKi9cbiAgaW5pdEJ1aWxkZXIodHg6IFR4KTogdGhpcyB7XG4gICAgY29uc3QgYmFzZVR4ID0gdHguZ2V0VW5zaWduZWRUeCgpLmdldFRyYW5zYWN0aW9uKCk7XG4gICAgaWYgKFxuICAgICAgYmFzZVR4LmdldE5ldHdvcmtJRCgpICE9PSB0aGlzLl90cmFuc2FjdGlvbi5fbmV0d29ya0lEIHx8XG4gICAgICAhYmFzZVR4LmdldEJsb2NrY2hhaW5JRCgpLmVxdWFscyh0aGlzLl90cmFuc2FjdGlvbi5fYmxvY2tjaGFpbklEKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOZXR3b3JrIG9yIGJsb2NrY2hhaW4gaXMgbm90IGVxdWFscycpO1xuICAgIH1cbiAgICB0aGlzLl90cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbih0eCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHR4ID0gbmV3IFBWTVR4KCk7XG4gICAgdHguZnJvbUJ1ZmZlcihCdWZmZXJBdmF4LmZyb20ocmF3VHJhbnNhY3Rpb24sICdoZXgnKSk7XG4gICAgdGhpcy5pbml0QnVpbGRlcih0eCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIHRoaXMuYnVpbGRBdmF4VHJhbnNhY3Rpb24oKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uVHlwZSh0aGlzLnRyYW5zYWN0aW9uVHlwZSk7XG4gICAgaWYgKHRoaXMuaGFzU2lnbmVyKSB7XG4gICAgICB0aGlzLl9zaWduZXIuZm9yRWFjaCgoa2V5UGFpcikgPT4gdGhpcy50cmFuc2FjdGlvbi5zaWduKGtleVBhaXIpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBhdmF4IHRyYW5zYWN0aW9uLiB0cmFuc2FjdGlvbiBmaWVsZCBpcyBjaGFuZ2VkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGJ1aWxkQXZheFRyYW5zYWN0aW9uKCk6IHZvaWQ7XG5cbiAgLy8gcmVnaW9uIEdldHRlcnMgYW5kIFNldHRlcnNcbiAgLyoqXG4gICAqIFdoZW4gdXNpbmcgcmVjb3Zlcnkga2V5IG11c3QgYmUgc2V0IGhlcmVcbiAgICogVE9ETzogU1RMWC0xNzMxNyByZWNvdmVyeSBrZXkgc2lnbmluZ1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHRydWUgaWYgaXQncyByZWNvdmVyeSBzaWduZXIsIGRlZmF1bHQgdHJ1ZS5cbiAgICovXG4gIHB1YmxpYyByZWNvdmVyTW9kZShyZWNvdmVyU2lnbmVyID0gdHJ1ZSk6IHRoaXMge1xuICAgIHRoaXMucmVjb3ZlclNpZ25lciA9IHJlY292ZXJTaWduZXI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVGhyZXNob2xkIGlzIGFuIGludCB0aGF0IG5hbWVzIHRoZSBudW1iZXIgb2YgdW5pcXVlIHNpZ25hdHVyZXMgcmVxdWlyZWQgdG8gc3BlbmQgdGhlIG91dHB1dC5cbiAgICogTXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGxlbmd0aCBvZiBBZGRyZXNzZXMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfVxuICAgKi9cbiAgdGhyZXNob2xkKHZhbHVlOiBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlVGhyZXNob2xkKHZhbHVlKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5fdGhyZXNob2xkID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogTG9ja3RpbWUgaXMgYSBsb25nIHRoYXQgY29udGFpbnMgdGhlIHVuaXggdGltZXN0YW1wIHRoYXQgdGhpcyBvdXRwdXQgY2FuIGJlIHNwZW50IGFmdGVyLlxuICAgKiBUaGUgdW5peCB0aW1lc3RhbXAgaXMgc3BlY2lmaWMgdG8gdGhlIHNlY29uZC5cbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBsb2NrdGltZSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZUxvY2t0aW1lKG5ldyBCTih2YWx1ZSkpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLl9sb2NrdGltZSA9IG5ldyBCTih2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogZnJvbVB1YktleSBpcyBhIGxpc3Qgb2YgdW5pcXVlIGFkZHJlc3NlcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIHByaXZhdGUga2V5cyB0aGF0IGNhbiBiZSB1c2VkIHRvIHNwZW5kIHRoaXMgb3V0cHV0LlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHN0aXJuZ1tdfSBzZW5kZXJQdWJLZXlcbiAgICovXG4gIGZyb21QdWJLZXkoc2VuZGVyUHViS2V5OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHRoaXMge1xuICAgIGNvbnN0IHB1YktleXMgPSBzZW5kZXJQdWJLZXkgaW5zdGFuY2VvZiBBcnJheSA/IHNlbmRlclB1YktleSA6IFtzZW5kZXJQdWJLZXldO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzID0gcHViS2V5cy5tYXAodXRpbHMucGFyc2VBZGRyZXNzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IG9mIFVUWE8gcmVxdWlyZWQgYXMgaW5wdXRzLlxuICAgKiBBIFVUWE8gaXMgYSBzdGFuZGFsb25lIHJlcHJlc2VudGF0aW9uIG9mIGEgdHJhbnNhY3Rpb24gb3V0cHV0LlxuICAgKlxuICAgKiBAcGFyYW0ge0RlY29kZWRVdHhvT2JqW119IGxpc3Qgb2YgVVRYT1NcbiAgICovXG4gIHV0eG9zKHZhbHVlOiBEZWNvZGVkVXR4b09ialtdKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZVV0eG9zKHZhbHVlKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5fdXR4b3MgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXR0ZXIgZm9yIGtub3cgaWYgYnVpbGQgc2hvdWxkIHNpZ25cbiAgICovXG4gIGdldCBoYXNTaWduZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NpZ25lciAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX3NpZ25lci5sZW5ndGggPiAwO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXQgdHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKHsga2V5IH06IEJhc2VLZXkpOiBCYXNlVHJhbnNhY3Rpb24ge1xuICAgIHRoaXMuX3NpZ25lci5wdXNoKG5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkgfSkpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlO1xuXG4gIC8vIGVuZHJlZ2lvblxuICAvLyByZWdpb24gVmFsaWRhdG9yc1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHRocmVzaG9sZFxuICAgKiBAcGFyYW0gdGhyZXNob2xkXG4gICAqL1xuICB2YWxpZGF0ZVRocmVzaG9sZCh0aHJlc2hvbGQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhyZXNob2xkIHx8IHRocmVzaG9sZCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogdGhyZXNob2xkIG11c3QgYmUgc2V0IHRvIDInKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGxvY2t0aW1lXG4gICAqIEBwYXJhbSBsb2NrdGltZVxuICAgKi9cbiAgdmFsaWRhdGVMb2NrdGltZShsb2NrdGltZTogQk4pOiB2b2lkIHtcbiAgICBpZiAoIWxvY2t0aW1lIHx8IGxvY2t0aW1lLmx0KG5ldyBCTigwKSkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IGxvY2t0aW1lIG11c3QgYmUgMCBvciBoaWdoZXInKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVBZGRyZXNzKGFkZHJlc3M6IEJhc2VBZGRyZXNzLCBhZGRyZXNzRm9ybWF0Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIGFkZHJlc3MnKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVLZXkoeyBrZXkgfTogQmFzZUtleSk6IHZvaWQge1xuICAgIGlmICghbmV3IEtleVBhaXIoeyBwcnY6IGtleSB9KSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBrZXknKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhlIHJhdyB0cmFuc2FjdGlvbiBoYXMgYSB2YWxpZCBmb3JtYXQgaW4gdGhlIGJsb2NrY2hhaW4gY29udGV4dCwgdGhyb3cgb3RoZXJ3aXNlLlxuICAgKiBJdCBvdmVycmlkZXMgYWJzdHJhY3QgbWV0aG9kIGZyb20gQmFzZVRyYW5zYWN0aW9uQnVpbGRlclxuICAgKlxuICAgKiBAcGFyYW0gcmF3VHJhbnNhY3Rpb24gVHJhbnNhY3Rpb24gaW4gYW55IGZvcm1hdFxuICAgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdXRpbHMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbj86IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgLy8gdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoJ3ZhbGlkYXRlVHJhbnNhY3Rpb24gbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVWYWx1ZSh2YWx1ZTogQmlnTnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlLmlzTGVzc1RoYW4oMCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1ZhbHVlIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVybycpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGUgbGlzdCBvZiBVVFhPUyBpcyBlbXB0eSBhbmQgY2hlY2sgZWFjaCBVVFhPLlxuICAgKiBAcGFyYW0gdmFsdWVzXG4gICAqL1xuICB2YWxpZGF0ZVV0eG9zKHZhbHVlczogRGVjb2RlZFV0eG9PYmpbXSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKFwiVXR4b3MgY2FuJ3QgYmUgZW1wdHkgYXJyYXlcIik7XG4gICAgfVxuICAgIHZhbHVlcy5mb3JFYWNoKHRoaXMudmFsaWRhdGVVdHhvKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGUgVVRYTyBoYXMgZXhwZWN0ZWQgZmllbGRzLlxuICAgKiBAcGFyYW0gVVRYT1xuICAgKi9cbiAgdmFsaWRhdGVVdHhvKHZhbHVlOiBEZWNvZGVkVXR4b09iaik6IHZvaWQge1xuICAgIFsnb3V0cHV0SUQnLCAnYW1vdW50JywgJ3R4aWQnLCAnb3V0cHV0aWR4J10uZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgIGlmICghdmFsdWUuaGFzT3duUHJvcGVydHkoZmllbGQpKSB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBVdHhvcyByZXF1aXJlZCAke2ZpZWxkfWApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSBhbW91bnQgaXMgcG9zaXRpdmUuXG4gICAqIEBwYXJhbSBhbW91bnRcbiAgICovXG4gIHZhbGlkYXRlQW1vdW50KGFtb3VudDogQk4pOiB2b2lkIHtcbiAgICBpZiAoYW1vdW50Lmx0ZW4oMCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0Ftb3VudCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSBidWZmZXIgaGFzIDMyIGJ5dGUgbG9uZy5cbiAgICogQHBhcmFtIGNoYWluSURcbiAgICovXG4gIHZhbGlkYXRlQ2hhaW5JZChjaGFpbklEOiBCdWZmZXJBdmF4KTogdm9pZCB7XG4gICAgaWYgKGNoYWluSUQubGVuZ3RoICE9PSAzMikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignQ2hhaW4gaWQgYXJlIDMyIGJ5dGUgc2l6ZScpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxufVxuIl19
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQXNFO0FBQ3RFLDhDQUFnRjtBQUloRiwrQ0FBNEM7QUFDNUMsb0RBQTRCO0FBRTVCLE1BQXNCLGtCQUFtQixTQUFRLGlDQUFzQjtJQUtyRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUpYLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLFlBQU8sR0FBYyxFQUFFLENBQUM7UUFJN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLHlCQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsV0FBVyxDQUFDLEVBQU07UUFDaEIsTUFBTSxNQUFNLEdBQUssRUFBaUIsQ0FBQyxFQUE2QyxDQUFDLE1BQU0sQ0FBQztRQUN4RixJQUNFLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVO1lBQ3pELE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQy9EO1lBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1NBQ3hEO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCOzs7T0FHRztJQUNILGlCQUFpQixDQUFDLFNBQWlCO1FBQ2pDLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRTtZQUNqQyxNQUFNLElBQUksZ0NBQXFCLENBQUMsaURBQWlELENBQUMsQ0FBQztTQUNwRjtJQUNI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LFlBQVksQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUEvSUQsZ0RBK0lDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXZtU2VyaWFsLCBwdm1TZXJpYWwsIFVuc2lnbmVkVHggfSBmcm9tICdAYml0Z28vYXZhbGFuY2hlanMnO1xuaW1wb3J0IHsgQmFzZVRyYW5zYWN0aW9uQnVpbGRlciwgQnVpbGRUcmFuc2FjdGlvbkVycm9yIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBEZWNvZGVkVXR4b09iaiwgVHggfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlciBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX3RyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjtcbiAgcHJvdGVjdGVkIHJlY292ZXJTaWduZXIgPSBmYWxzZTtcbiAgcHVibGljIF9zaWduZXI6IEtleVBhaXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgdHJhbnNhY3Rpb24gYnVpbGRlciBmaWVsZHMgdXNpbmcgdGhlIGRlY29kZWQgdHJhbnNhY3Rpb24gZGF0YVxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9ufSB0eCB0aGUgdHJhbnNhY3Rpb24gZGF0YVxuICAgKiBAcmV0dXJucyBpdHNlbGZcbiAgICovXG4gIGluaXRCdWlsZGVyKHR4OiBUeCk6IHRoaXMge1xuICAgIGNvbnN0IGJhc2VUeCA9ICgodHggYXMgVW5zaWduZWRUeCkudHggYXMgcHZtU2VyaWFsLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHgpLmJhc2VUeDtcbiAgICBpZiAoXG4gICAgICBiYXNlVHguTmV0d29ya0lkLnZhbHVlKCkgIT09IHRoaXMuX3RyYW5zYWN0aW9uLl9uZXR3b3JrSUQgfHxcbiAgICAgIGJhc2VUeC5CbG9ja2NoYWluSWQudmFsdWUoKSAhPT0gdGhpcy5fdHJhbnNhY3Rpb24uX2Jsb2NrY2hhaW5JRFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOZXR3b3JrIG9yIGJsb2NrY2hhaW4gaXMgbm90IGVxdWFscycpO1xuICAgIH1cbiAgICB0aGlzLl90cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbih0eCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyByZWdpb24gVmFsaWRhdG9yc1xuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSB0aHJlc2hvbGRcbiAgICogQHBhcmFtIHRocmVzaG9sZFxuICAgKi9cbiAgdmFsaWRhdGVUaHJlc2hvbGQodGhyZXNob2xkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRocmVzaG9sZCB8fCB0aHJlc2hvbGQgIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IHRocmVzaG9sZCBtdXN0IGJlIHNldCB0byAyJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSBVVFhPIGhhcyBleHBlY3RlZCBmaWVsZHMuXG4gICAqIEBwYXJhbSBVVFhPXG4gICAqL1xuICB2YWxpZGF0ZVV0eG8odmFsdWU6IERlY29kZWRVdHhvT2JqKTogdm9pZCB7XG4gICAgWydvdXRwdXRJRCcsICdhbW91bnQnLCAndHhpZCcsICdvdXRwdXRpZHgnXS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgaWYgKCF2YWx1ZS5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYFV0eG9zIHJlcXVpcmVkICR7ZmllbGR9YCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhlIGxpc3Qgb2YgVVRYT1MgaXMgZW1wdHkgYW5kIGNoZWNrIGVhY2ggVVRYTy5cbiAgICogQHBhcmFtIHZhbHVlc1xuICAgKi9cbiAgdmFsaWRhdGVVdHhvcyh2YWx1ZXM6IERlY29kZWRVdHhvT2JqW10pOiB2b2lkIHtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcIlV0eG9zIGNhbid0IGJlIGVtcHR5IGFycmF5XCIpO1xuICAgIH1cbiAgICB2YWx1ZXMuZm9yRWFjaCh0aGlzLnZhbGlkYXRlVXR4byk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGxvY2t0aW1lXG4gICAqIEBwYXJhbSBsb2NrdGltZVxuICAgKi9cbiAgdmFsaWRhdGVMb2NrdGltZShsb2NrdGltZTogYmlnaW50KTogdm9pZCB7XG4gICAgaWYgKCFsb2NrdGltZSB8fCBsb2NrdGltZSA8IEJpZ0ludCgwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogbG9ja3RpbWUgbXVzdCBiZSAwIG9yIGhpZ2hlcicpO1xuICAgIH1cbiAgfVxuICAvLyBlbmRyZWdpb25cblxuICAvKipcbiAgICogVGhyZXNob2xkIGlzIGFuIGludCB0aGF0IG5hbWVzIHRoZSBudW1iZXIgb2YgdW5pcXVlIHNpZ25hdHVyZXMgcmVxdWlyZWQgdG8gc3BlbmQgdGhlIG91dHB1dC5cbiAgICogTXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGxlbmd0aCBvZiBBZGRyZXNzZXMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKi9cbiAgdGhyZXNob2xkKHZhbHVlOiBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlVGhyZXNob2xkKHZhbHVlKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5fdGhyZXNob2xkID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogTG9ja3RpbWUgaXMgYSBsb25nIHRoYXQgY29udGFpbnMgdGhlIHVuaXggdGltZXN0YW1wIHRoYXQgdGhpcyBvdXRwdXQgY2FuIGJlIHNwZW50IGFmdGVyLlxuICAgKiBUaGUgdW5peCB0aW1lc3RhbXAgaXMgc3BlY2lmaWMgdG8gdGhlIHNlY29uZC5cbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBsb2NrdGltZSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZUxvY2t0aW1lKEJpZ0ludCh2YWx1ZSkpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLl9sb2NrdGltZSA9IEJpZ0ludCh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB1c2luZyByZWNvdmVyeSBrZXkgbXVzdCBiZSBzZXQgaGVyZVxuICAgKiBUT0RPOiBTVExYLTE3MzE3IHJlY292ZXJ5IGtleSBzaWduaW5nXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn1bcmVjb3ZlclNpZ25lcj10cnVlXSB3aGV0aGVyIGl0J3MgcmVjb3Zlcnkgc2lnbmVyXG4gICAqL1xuICByZWNvdmVyTW9kZShyZWNvdmVyU2lnbmVyID0gdHJ1ZSk6IHRoaXMge1xuICAgIHRoaXMucmVjb3ZlclNpZ25lciA9IHJlY292ZXJTaWduZXI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogZnJvbVB1YktleSBpcyBhIGxpc3Qgb2YgdW5pcXVlIGFkZHJlc3NlcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIHByaXZhdGUga2V5cyB0aGF0IGNhbiBiZSB1c2VkIHRvIHNwZW5kIHRoaXMgb3V0cHV0XG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW119IHNlbmRlclB1YktleVxuICAgKi9cbiAgZnJvbVB1YktleShzZW5kZXJQdWJLZXk6IHN0cmluZyB8IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgY29uc3QgcHViS2V5cyA9IHNlbmRlclB1YktleSBpbnN0YW5jZW9mIEFycmF5ID8gc2VuZGVyUHViS2V5IDogW3NlbmRlclB1YktleV07XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMgPSBwdWJLZXlzLm1hcCh1dGlscy5wYXJzZUFkZHJlc3MpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgVVRYTyByZXF1aXJlZCBhcyBpbnB1dHMuXG4gICAqIEEgVVRYTyBpcyBhIHN0YW5kYWxvbmUgcmVwcmVzZW50YXRpb24gb2YgYSB0cmFuc2FjdGlvbiBvdXRwdXQuXG4gICAqXG4gICAqIEBwYXJhbSB7RGVjb2RlZFV0eG9PYmpbXX0gbGlzdCBvZiBVVFhPU1xuICAgKi9cbiAgdXR4b3ModmFsdWU6IERlY29kZWRVdHhvT2JqW10pOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlVXR4b3ModmFsdWUpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLl91dHhvcyA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gVE9ETyhDUi0xMDczKTpcbiAgLy8gSW1wbGVtZW50OlxuICAvLyAgYnVpbGRJbXBsZW1lbnRhdGlvblxuICAvLyAgc2lnbkltcGxlbWVudGF0aW9uXG4gIC8vICBnZXQgdHJhbnNhY3Rpb25cbiAgLy8gIHNldCB0cmFuc2FjdGlvblxuICAvLyAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvblxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgW3R4XSA9IHB2bVNlcmlhbC5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4LmZyb21CeXRlcyhcbiAgICAgIEJ1ZmZlci5mcm9tKHJhd1RyYW5zYWN0aW9uLCAnaGV4JyksXG4gICAgICBhdm1TZXJpYWwuZ2V0QVZNTWFuYWdlcigpLmdldERlZmF1bHRDb2RlYygpXG4gICAgKTtcbiAgICAvLyBUT0RPKENSLTEwNzMpOiBjaGVjayBpZiBpbml0QnVpbGRlciBjYW4gb25seSB1c2UgVW5zaWduZWRUeCBhbmQgcHZtU2VyaWFsLkJhc2VUeCBpcyBub3QgcmVxdWlyZWRcbiAgICB0aGlzLmluaXRCdWlsZGVyKHR4KTtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cbn1cbiJdfQ==
@@ -1,24 +1,32 @@
1
- import { BaseCoin as CoinConfig } from '@bitgo/statics';
2
1
  import { BaseTransactionBuilderFactory } from '@bitgo/sdk-core';
3
- import { TransactionBuilder } from './transactionBuilder';
4
- import { ValidatorTxBuilder } from './validatorTxBuilder';
2
+ import { BaseCoin as CoinConfig } from '@bitgo/statics';
3
+ import { DeprecatedTransactionBuilder } from './deprecatedTransactionBuilder';
4
+ import { ExportInCTxBuilder } from './exportInCTxBuilder';
5
5
  import { ExportTxBuilder } from './exportTxBuilder';
6
- import { ImportTxBuilder } from './importTxBuilder';
7
6
  import { ImportInCTxBuilder } from './importInCTxBuilder';
8
- import { ExportInCTxBuilder } from './exportInCTxBuilder';
7
+ import { ImportTxBuilder } from './importTxBuilder';
8
+ import { PermissionlessValidatorTxBuilder } from './permissionlessValidatorTxBuilder';
9
+ import { TransactionBuilder } from './transactionBuilder';
10
+ import { ValidatorTxBuilder } from './validatorTxBuilder';
9
11
  export declare class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
10
12
  protected recoverSigner: boolean;
11
13
  constructor(_coinConfig: Readonly<CoinConfig>);
12
14
  /** @inheritdoc */
13
- from(raw: string): TransactionBuilder;
15
+ from(raw: string): TransactionBuilder | DeprecatedTransactionBuilder;
14
16
  /** @inheritdoc */
15
- getTransferBuilder(): TransactionBuilder;
17
+ getTransferBuilder(): DeprecatedTransactionBuilder;
16
18
  /**
17
19
  * Initialize Validator builder
18
20
  *
19
21
  * @returns {ValidatorTxBuilder} the builder initialized
20
22
  */
21
23
  getValidatorBuilder(): ValidatorTxBuilder;
24
+ /**
25
+ * Initialize Permissionless Validator builder
26
+ *
27
+ * @returns {PermissionlessValidatorTxBuilder} the builder initialized
28
+ */
29
+ getPermissionlessValidatorTxBuilder(): PermissionlessValidatorTxBuilder;
22
30
  /**
23
31
  * Export Cross chain transfer
24
32
  *
@@ -44,6 +52,6 @@ export declare class TransactionBuilderFactory extends BaseTransactionBuilderFac
44
52
  */
45
53
  getExportInCBuilder(): ExportInCTxBuilder;
46
54
  /** @inheritdoc */
47
- getWalletInitializationBuilder(): TransactionBuilder;
55
+ getWalletInitializationBuilder(): DeprecatedTransactionBuilder;
48
56
  }
49
57
  //# sourceMappingURL=transactionBuilderFactory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,6BAA6B,EAAgB,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAK1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,qBAAa,yBAA0B,SAAQ,6BAA6B;IAC1E,SAAS,CAAC,aAAa,UAAS;gBACpB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;IA8CrC,kBAAkB;IAClB,kBAAkB,IAAI,kBAAkB;IAIxC;;;;OAIG;IACH,mBAAmB,IAAI,kBAAkB;IAIzC;;;;OAIG;IACH,gBAAgB,IAAI,eAAe;IAInC;;;;OAIG;IACH,gBAAgB,IAAI,eAAe;IAInC;;;;OAIG;IACH,mBAAmB,IAAI,kBAAkB;IAIzC;;;;OAIG;IACH,mBAAmB,IAAI,kBAAkB;IAIzC,kBAAkB;IAClB,8BAA8B,IAAI,kBAAkB;CAGrD"}
1
+ {"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAgB,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAoB,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAI1E,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,gCAAgC,EAAE,MAAM,oCAAoC,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,qBAAa,yBAA0B,SAAQ,6BAA6B;IAC1E,SAAS,CAAC,aAAa,UAAS;gBACpB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,GAAG,4BAA4B;IA6FpE,kBAAkB;IAClB,kBAAkB,IAAI,4BAA4B;IAIlD;;;;OAIG;IACH,mBAAmB,IAAI,kBAAkB;IAIzC;;;;OAIG;IACH,mCAAmC,IAAI,gCAAgC;IAIvE;;;;OAIG;IACH,gBAAgB,IAAI,eAAe;IAInC;;;;OAIG;IACH,gBAAgB,IAAI,eAAe;IAInC;;;;OAIG;IACH,mBAAmB,IAAI,kBAAkB;IAIzC;;;;OAIG;IACH,mBAAmB,IAAI,kBAAkB;IAIzC,kBAAkB;IAClB,8BAA8B,IAAI,4BAA4B;CAG/D"}
@@ -4,16 +4,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.TransactionBuilderFactory = void 0;
7
+ const avalanchejs_1 = require("@bitgo/avalanchejs");
7
8
  const sdk_core_1 = require("@bitgo/sdk-core");
8
- const validatorTxBuilder_1 = require("./validatorTxBuilder");
9
- const platformvm_1 = require("avalanche/dist/apis/platformvm");
10
- const evm_1 = require("avalanche/dist/apis/evm");
11
9
  const avalanche_1 = require("avalanche");
12
- const utils_1 = __importDefault(require("./utils"));
10
+ const evm_1 = require("avalanche/dist/apis/evm");
11
+ const platformvm_1 = require("avalanche/dist/apis/platformvm");
12
+ const exportInCTxBuilder_1 = require("./exportInCTxBuilder");
13
13
  const exportTxBuilder_1 = require("./exportTxBuilder");
14
- const importTxBuilder_1 = require("./importTxBuilder");
15
14
  const importInCTxBuilder_1 = require("./importInCTxBuilder");
16
- const exportInCTxBuilder_1 = require("./exportInCTxBuilder");
15
+ const importTxBuilder_1 = require("./importTxBuilder");
16
+ const permissionlessValidatorTxBuilder_1 = require("./permissionlessValidatorTxBuilder");
17
+ const utils_1 = __importDefault(require("./utils"));
18
+ const validatorTxBuilder_1 = require("./validatorTxBuilder");
17
19
  class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory {
18
20
  constructor(_coinConfig) {
19
21
  super(_coinConfig);
@@ -21,50 +23,99 @@ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory
21
23
  }
22
24
  /** @inheritdoc */
23
25
  from(raw) {
26
+ var _a;
24
27
  utils_1.default.validateRawTransaction(raw);
25
- raw = utils_1.default.removeHexPrefix(raw);
26
28
  let txSource = 'PVM';
27
- let tx;
28
29
  let transactionBuilder = undefined;
30
+ let tx;
31
+ const rawNoHex = utils_1.default.removeHexPrefix(raw);
29
32
  try {
30
33
  tx = new platformvm_1.Tx();
31
34
  // could throw an error if a txType doesn't match.
32
- tx.fromBuffer(avalanche_1.Buffer.from(raw, 'hex'));
35
+ tx.fromBuffer(avalanche_1.Buffer.from(rawNoHex, 'hex'));
33
36
  if (!utils_1.default.isTransactionOf(tx, this._coinConfig.network.blockchainID)) {
34
- throw new Error('It is not a transaction of this network');
37
+ throw new Error('It is not a transaction of this platformvm old flow');
35
38
  }
36
39
  }
37
- catch {
38
- txSource = 'EVM';
39
- tx = new evm_1.Tx();
40
- tx.fromBuffer(avalanche_1.Buffer.from(raw, 'hex'));
41
- if (!utils_1.default.isTransactionOf(tx, this._coinConfig.network.cChainBlockchainID)) {
42
- throw new Error('It is not a transaction of this network or C chain');
40
+ catch (e) {
41
+ try {
42
+ txSource = 'EVM';
43
+ tx = new evm_1.Tx();
44
+ tx.fromBuffer(avalanche_1.Buffer.from(rawNoHex, 'hex'));
45
+ if (!utils_1.default.isTransactionOf(tx, this._coinConfig.network.cChainBlockchainID)) {
46
+ throw new Error('It is not a transaction of this network or C chain EVM');
47
+ }
48
+ }
49
+ catch (e) {
50
+ try {
51
+ txSource = 'PVM';
52
+ // this should be the last because other PVM functions are still being detected in the new SDK
53
+ const manager = avalanchejs_1.utils.getManagerForVM('PVM');
54
+ const [codec, txBytes] = manager.getCodecFromBuffer(avalanchejs_1.utils.hexToBuffer(raw));
55
+ const unpackedTx = codec.UnpackPrefix(txBytes);
56
+ // A signed transaction includes 4 bytes for the number of credentials as an Int type that is not known by the codec
57
+ // We'll skip those 4 bytes, instead we'll loop until we've parsed all credentials
58
+ // @see https://docs.avax.network/reference/avalanchego/p-chain/txn-format#signed-transaction-example
59
+ const credentials = [];
60
+ let credentialBytes = unpackedTx[1].slice(4);
61
+ let moreCredentials = true;
62
+ do {
63
+ try {
64
+ const [credential, rest] = codec.UnpackPrefix(credentialBytes);
65
+ credentials.push(credential);
66
+ credentialBytes = rest;
67
+ }
68
+ catch (e) {
69
+ moreCredentials = false;
70
+ }
71
+ } while (credentialBytes.length > 0 && moreCredentials);
72
+ const unpacked = codec.UnpackPrefix(txBytes);
73
+ const permissionlessValidatorTx = unpacked[0];
74
+ const outputs = permissionlessValidatorTx.baseTx.outputs;
75
+ const output = outputs[0].output;
76
+ if (outputs[0].getAssetId() !== this._coinConfig.network.avaxAssetID) {
77
+ throw new Error('The Asset ID of the output does not match the transaction');
78
+ }
79
+ const fromAddresses = output.outputOwners.addrs.map((a) => avalanchejs_1.utils.hexToBuffer(a.toHex()));
80
+ const addressMaps = fromAddresses.map((a) => new avalanchejs_1.utils.AddressMap([[new avalanchejs_1.Address(a), 0]]));
81
+ tx = new avalanchejs_1.UnsignedTx(unpacked[0], [], new avalanchejs_1.utils.AddressMaps(addressMaps), credentials);
82
+ }
83
+ catch (e) {
84
+ throw new Error(`The transaction type is not recognized as an old PVM or old EVM transaction. Additionally, parsing of the new PVM AddPermissionlessValidatorTx type failed: ${e.message}`);
85
+ }
43
86
  }
44
87
  }
45
88
  if (txSource === 'PVM') {
46
- if (validatorTxBuilder_1.ValidatorTxBuilder.verifyTxType(tx.getUnsignedTx().getTransaction())) {
89
+ if (((_a = tx === null || tx === void 0 ? void 0 : tx.tx) === null || _a === void 0 ? void 0 : _a._type) && permissionlessValidatorTxBuilder_1.PermissionlessValidatorTxBuilder.verifyTxType(tx.tx._type)) {
90
+ transactionBuilder = this.getPermissionlessValidatorTxBuilder();
91
+ transactionBuilder.initBuilder(tx);
92
+ }
93
+ else if (validatorTxBuilder_1.ValidatorTxBuilder.verifyTxType(tx.getUnsignedTx().getTransaction())) {
47
94
  transactionBuilder = this.getValidatorBuilder();
95
+ transactionBuilder.initBuilder(tx);
48
96
  }
49
97
  else if (exportTxBuilder_1.ExportTxBuilder.verifyTxType(tx.getUnsignedTx().getTransaction())) {
50
98
  transactionBuilder = this.getExportBuilder();
99
+ transactionBuilder.initBuilder(tx);
51
100
  }
52
101
  else if (importTxBuilder_1.ImportTxBuilder.verifyTxType(tx.getUnsignedTx().getTransaction())) {
53
102
  transactionBuilder = this.getImportBuilder();
103
+ transactionBuilder.initBuilder(tx);
54
104
  }
55
105
  }
56
106
  else if (txSource === 'EVM') {
57
107
  if (importInCTxBuilder_1.ImportInCTxBuilder.verifyTxType(tx.getUnsignedTx().getTransaction())) {
58
108
  transactionBuilder = this.getImportInCBuilder();
109
+ transactionBuilder.initBuilder(tx);
59
110
  }
60
111
  else if (exportInCTxBuilder_1.ExportInCTxBuilder.verifyTxType(tx.getUnsignedTx().getTransaction())) {
61
112
  transactionBuilder = this.getExportInCBuilder();
113
+ transactionBuilder.initBuilder(tx);
62
114
  }
63
115
  }
64
116
  if (transactionBuilder === undefined) {
65
117
  throw new sdk_core_1.NotSupported('Transaction cannot be parsed or has an unsupported transaction type');
66
118
  }
67
- transactionBuilder.initBuilder(tx);
68
119
  return transactionBuilder;
69
120
  }
70
121
  /** @inheritdoc */
@@ -79,6 +130,14 @@ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory
79
130
  getValidatorBuilder() {
80
131
  return new validatorTxBuilder_1.ValidatorTxBuilder(this._coinConfig);
81
132
  }
133
+ /**
134
+ * Initialize Permissionless Validator builder
135
+ *
136
+ * @returns {PermissionlessValidatorTxBuilder} the builder initialized
137
+ */
138
+ getPermissionlessValidatorTxBuilder() {
139
+ return new permissionlessValidatorTxBuilder_1.PermissionlessValidatorTxBuilder(this._coinConfig);
140
+ }
82
141
  /**
83
142
  * Export Cross chain transfer
84
143
  *
@@ -117,4 +176,4 @@ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory
117
176
  }
118
177
  }
119
178
  exports.TransactionBuilderFactory = TransactionBuilderFactory;
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSw4Q0FBOEU7QUFFOUUsNkRBQTBEO0FBQzFELCtEQUFvRDtBQUNwRCxpREFBc0Q7QUFDdEQseUNBQWlEO0FBQ2pELG9EQUE0QjtBQUM1Qix1REFBb0Q7QUFDcEQsdURBQW9EO0FBQ3BELDZEQUEwRDtBQUMxRCw2REFBMEQ7QUFFMUQsTUFBYSx5QkFBMEIsU0FBUSx3Q0FBNkI7SUFFMUUsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFGWCxrQkFBYSxHQUFHLEtBQUssQ0FBQztJQUdoQyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQUksQ0FBQyxHQUFXO1FBQ2QsZUFBSyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxlQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLElBQUksUUFBUSxHQUFrQixLQUFLLENBQUM7UUFDcEMsSUFBSSxFQUFjLENBQUM7UUFDbkIsSUFBSSxrQkFBa0IsR0FBbUMsU0FBUyxDQUFDO1FBRW5FLElBQUk7WUFDRixFQUFFLEdBQUcsSUFBSSxlQUFFLEVBQUUsQ0FBQztZQUNkLGtEQUFrRDtZQUNsRCxFQUFFLENBQUMsVUFBVSxDQUFDLGtCQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBRTNDLElBQUksQ0FBQyxlQUFLLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQTRCLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQzNGLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQzthQUM1RDtTQUNGO1FBQUMs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ZW50IjpbImltcG9ydCB7IEF2YWxhbmNoZU5ldHdvcmssIEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSwgTm90U3VwcG9ydGVkIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IFZhbGlkYXRvclR4QnVpbGRlciB9IGZyb20gJy4vdmFsaWRhdG9yVHhCdWlsZGVyJztcbmltcG9ydCB7IFR4IH0gZnJvbSAnYXZhbGFuY2hlL2Rpc3QvYXBpcy9wbGF0Zm9ybXZtJztcbmltcG9ydCB7IFR4IGFzIEVWTVR4IH0gZnJvbSAnYXZhbGFuY2hlL2Rpc3QvYXBpcy9ldm0nO1xuaW1wb3J0IHsgQnVmZmVyIGFzIEJ1ZmZlckF2YXggfSBmcm9tICdhdmFsYW5jaGUnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRXhwb3J0VHhCdWlsZGVyIH0gZnJvbSAnLi9leHBvcnRUeEJ1aWxkZXInO1xuaW1wb3J0IHsgSW1wb3J0VHhCdWlsZGVyIH0gZnJvbSAnLi9pbXBvcnRUeEJ1aWxkZXInO1xuaW1wb3J0IHsgSW1wb3J0SW5DVHhCdWlsZGVyIH0gZnJvbSAnLi9pbXBvcnRJbkNUeEJ1aWxkZXInO1xuaW1wb3J0IHsgRXhwb3J0SW5DVHhCdWlsZGVyIH0gZnJvbSAnLi9leHBvcnRJbkNUeEJ1aWxkZXInO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IHtcbiAgcHJvdGVjdGVkIHJlY292ZXJTaWduZXIgPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGZyb20ocmF3OiBzdHJpbmcpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHV0aWxzLnZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3KTtcbiAgICByYXcgPSB1dGlscy5yZW1vdmVIZXhQcmVmaXgocmF3KTtcbiAgICBsZXQgdHhTb3VyY2U6ICdFVk0nIHwgJ1BWTScgPSAnUFZNJztcbiAgICBsZXQgdHg6IFR4IHwgRVZNVHg7XG4gICAgbGV0IHRyYW5zYWN0aW9uQnVpbGRlcjogVHJhbnNhY3Rpb25CdWlsZGVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIHR4ID0gbmV3IFR4KCk7XG4gICAgICAvLyBjb3VsZCB0aHJvdyBhbiBlcnJvciBpZiBhIHR4VHlwZSBkb2Vzbid0IG1hdGNoLlxuICAgICAgdHguZnJvbUJ1ZmZlcihCdWZmZXJBdmF4LmZyb20ocmF3LCAnaGV4JykpO1xuXG4gICAgICBpZiAoIXV0aWxzLmlzVHJhbnNhY3Rpb25PZih0eCwgKHRoaXMuX2NvaW5Db25maWcubmV0d29yayBhcyBBdmFsYW5jaGVOZXR3b3JrKS5ibG9ja2NoYWluSUQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSXQgaXMgbm90IGEgdHJhbnNhY3Rpb24gb2YgdGhpcyBuZXR3b3JrJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICB0eFNvdXJjZSA9ICdFVk0nO1xuICAgICAgdHggPSBuZXcgRVZNVHgoKTtcbiAgICAgIHR4LmZyb21CdWZmZXIoQnVmZmVyQXZheC5mcm9tKHJhdywgJ2hleCcpKTtcblxuICAgICAgaWYgKCF1dGlscy5pc1RyYW5zYWN0aW9uT2YodHgsICh0aGlzLl9jb2luQ29uZmlnLm5ldHdvcmsgYXMgQXZhbGFuY2hlTmV0d29yaykuY0NoYWluQmxvY2tjaGFpbklEKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0IGlzIG5vdCBhIHRyYW5zYWN0aW9uIG9mIHRoaXMgbmV0d29yayBvciBDIGNoYWluJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eFNvdXJjZSA9PT0gJ1BWTScpIHtcbiAgICAgIGlmIChWYWxpZGF0b3JUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKHR4LmdldFVuc2lnbmVkVHgoKS5nZXRUcmFuc2FjdGlvbigpKSkge1xuICAgICAgICB0cmFuc2FjdGlvbkJ1aWxkZXIgPSB0aGlzLmdldFZhbGlkYXRvckJ1aWxkZXIoKTtcbiAgICAgIH0gZWxzZSBpZiAoRXhwb3J0VHhCdWlsZGVyLnZlcmlmeVR4VHlwZSh0eC5nZXRVbnNpZ25lZFR4KCkuZ2V0VHJhbnNhY3Rpb24oKSkpIHtcbiAgICAgICAgdHJhbnNhY3Rpb25CdWlsZGVyID0gdGhpcy5nZXRFeHBvcnRCdWlsZGVyKCk7XG4gICAgICB9IGVsc2UgaWYgKEltcG9ydFR4QnVpbGRlci52ZXJpZnlUeFR5cGUodHguZ2V0VW5zaWduZWRUeCgpLmdldFRyYW5zYWN0aW9uKCkpKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uQnVpbGRlciA9IHRoaXMuZ2V0SW1wb3J0QnVpbGRlcigpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHhTb3VyY2UgPT09ICdFVk0nKSB7XG4gICAgICBpZiAoSW1wb3J0SW5DVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSh0eC5nZXRVbnNpZ25lZFR4KCkuZ2V0VHJhbnNhY3Rpb24oKSkpIHtcbiAgICAgICAgdHJhbnNhY3Rpb25CdWlsZGVyID0gdGhpcy5nZXRJbXBvcnRJbkNCdWlsZGVyKCk7XG4gICAgICB9IGVsc2UgaWYgKEV4cG9ydEluQ1R4QnVpbGRlci52ZXJpZnlUeFR5cGUodHguZ2V0VW5zaWduZWRUeCgpLmdldFRyYW5zYWN0aW9uKCkpKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uQnVpbGRlciA9IHRoaXMuZ2V0RXhwb3J0SW5DQnVpbGRlcigpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHJhbnNhY3Rpb25CdWlsZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoJ1RyYW5zYWN0aW9uIGNhbm5vdCBiZSBwYXJzZWQgb3IgaGFzIGFuIHVuc3VwcG9ydGVkIHRyYW5zYWN0aW9uIHR5cGUnKTtcbiAgICB9XG4gICAgdHJhbnNhY3Rpb25CdWlsZGVyLmluaXRCdWlsZGVyKHR4KTtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb25CdWlsZGVyO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldFRyYW5zZmVyQnVpbGRlcigpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoJ1RyYW5zZmVyIGlzIG5vdCBzdXBwb3J0ZWQgaW4gUCBDaGFpbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgVmFsaWRhdG9yIGJ1aWxkZXJcbiAgICpcbiAgICogQHJldHVybnMge1ZhbGlkYXRvclR4QnVpbGRlcn0gdGhlIGJ1aWxkZXIgaW5pdGlhbGl6ZWRcbiAgICovXG4gIGdldFZhbGlkYXRvckJ1aWxkZXIoKTogVmFsaWRhdG9yVHhCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFZhbGlkYXRvclR4QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgQ3Jvc3MgY2hhaW4gdHJhbnNmZXJcbiAgICpcbiAgICogQHJldHVybnMge0V4cG9ydFR4QnVpbGRlcn0gdGhlIGJ1aWxkZXIgaW5pdGlhbGl6ZWRcbiAgICovXG4gIGdldEV4cG9ydEJ1aWxkZXIoKTogRXhwb3J0VHhCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IEV4cG9ydFR4QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgQ3Jvc3MgY2hhaW4gdHJhbnNmZXJcbiAgICpcbiAgICogQHJldHVybnMge0ltcG9ydFR4QnVpbGRlcn0gdGhlIGJ1aWxkZXIgaW5pdGlhbGl6ZWRcbiAgICovXG4gIGdldEltcG9ydEJ1aWxkZXIoKTogSW1wb3J0VHhCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IEltcG9ydFR4QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgaW4gQyBjaGFpbiBDcm9zcyBjaGFpbiB0cmFuc2ZlclxuICAgKlxuICAgKiBAcmV0dXJucyB7SW1wb3J0SW5DVHhCdWlsZGVyfSB0aGUgYnVpbGRlciBpbml0aWFsaXplZFxuICAgKi9cbiAgZ2V0SW1wb3J0SW5DQnVpbGRlcigpOiBJbXBvcnRJbkNUeEJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgSW1wb3J0SW5DVHhCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBpbiBDIGNoYWluIENyb3NzIGNoYWluIHRyYW5zZmVyXG4gICAqXG4gICAqIEByZXR1cm5zIHtFeHBvcnRJbkNUeEJ1aWxkZXJ9IHRoZSBidWlsZGVyIGluaXRpYWxpemVkXG4gICAqL1xuICBnZXRFeHBvcnRJbkNCdWlsZGVyKCk6IEV4cG9ydEluQ1R4QnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBFeHBvcnRJbkNUeEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0V2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKCk6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnV2FsbGV0IGluaXRpYWxpemF0aW9uIGlzIG5vdCBuZWVkZWQnKTtcbiAgfVxufVxuIl19
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxvREFBb0g7QUFDcEgsOENBQThFO0FBRTlFLHlDQUFpRDtBQUNqRCxpREFBc0Q7QUFDdEQsK0RBQTZEO0FBRTdELDZEQUEwRDtBQUMxRCx1REFBb0Q7QUFDcEQsNkRBQTBEO0FBQzFELHVEQUFvRDtBQUNwRCx5RkFBc0Y7QUFFdEYsb0RBQTRCO0FBQzVCLDZEQUEwRDtBQUUxRCxNQUFhLHlCQUEwQixTQUFRLHdDQUE2QjtJQUUxRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUZYLGtCQUFhLEdBQUcsS0FBSyxDQUFDO0lBR2hDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBSSxDQUFDLEdBQVc7O1FBQ2QsZUFBSyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLElBQUksUUFBUSxHQUFrQixLQUFLLENBQUM7UUFDcEMsSUFBSSxrQkFBa0IsR0FBa0UsU0FBUyxDQUFDO1FBQ2xHLElBQUksRUFBOEIsQ0FBQztRQUNuQyxNQUFNLFFBQVEsR0FBRyxlQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLElBQUk7WUFDRixFQUFFLEdBQUcsSUFBSSxlQUFLLEVBQUUsQ0FBQztZQUNqQixrREFBa0Q7WUFDbEQsRUFBRSxDQUFDLFVBQVUsQ0FBQyxrQkFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUVoRCxJQUFJLENBQUMsZUFBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUE0QixDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUMzRixNQUFNLElBQUksS0FBSyxDQUFD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LENBQUMsV0FBVyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksaUNBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxtQkFBbUI7UUFDakIsT0FBTyxJQUFJLHVDQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG1CQUFtQjtRQUNqQixPQUFPLElBQUksdUNBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsOEJBQThCO1FBQzVCLE1BQU0sSUFBSSx1QkFBWSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztDQUNGO0FBbktELDhEQW1LQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFkZHJlc3MsIHV0aWxzIGFzIEF2YXhVdGlscywgQ3JlZGVudGlhbCwgcHZtU2VyaWFsLCBUcmFuc2Zlck91dHB1dCwgVW5zaWduZWRUeCB9IGZyb20gJ0BiaXRnby9hdmFsYW5jaGVqcyc7XG5pbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSwgTm90U3VwcG9ydGVkIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEF2YWxhbmNoZU5ldHdvcmssIEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBCdWZmZXIgYXMgQnVmZmVyQXZheCB9IGZyb20gJ2F2YWxhbmNoZSc7XG5pbXBvcnQgeyBUeCBhcyBFVk1UeCB9IGZyb20gJ2F2YWxhbmNoZS9kaXN0L2FwaXMvZXZtJztcbmltcG9ydCB7IFR4IGFzIFBWTVR4IH0gZnJvbSAnYXZhbGFuY2hlL2Rpc3QvYXBpcy9wbGF0Zm9ybXZtJztcbmltcG9ydCB7IERlcHJlY2F0ZWRUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2RlcHJlY2F0ZWRUcmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgRXhwb3J0SW5DVHhCdWlsZGVyIH0gZnJvbSAnLi9leHBvcnRJbkNUeEJ1aWxkZXInO1xuaW1wb3J0IHsgRXhwb3J0VHhCdWlsZGVyIH0gZnJvbSAnLi9leHBvcnRUeEJ1aWxkZXInO1xuaW1wb3J0IHsgSW1wb3J0SW5DVHhCdWlsZGVyIH0gZnJvbSAnLi9pbXBvcnRJbkNUeEJ1aWxkZXInO1xuaW1wb3J0IHsgSW1wb3J0VHhCdWlsZGVyIH0gZnJvbSAnLi9pbXBvcnRUeEJ1aWxkZXInO1xuaW1wb3J0IHsgUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIgfSBmcm9tICcuL3Blcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFZhbGlkYXRvclR4QnVpbGRlciB9IGZyb20gJy4vdmFsaWRhdG9yVHhCdWlsZGVyJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB7XG4gIHByb3RlY3RlZCByZWNvdmVyU2lnbmVyID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBmcm9tKHJhdzogc3RyaW5nKTogVHJhbnNhY3Rpb25CdWlsZGVyIHwgRGVwcmVjYXRlZFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgdXRpbHMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXcpO1xuICAgIGxldCB0eFNvdXJjZTogJ0VWTScgfCAnUFZNJyA9ICdQVk0nO1xuICAgIGxldCB0cmFuc2FjdGlvbkJ1aWxkZXI6IFRyYW5zYWN0aW9uQnVpbGRlciB8IERlcHJlY2F0ZWRUcmFuc2FjdGlvbkJ1aWxkZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IHR4OiBQVk1UeCB8IEVWTVR4IHwgVW5zaWduZWRUeDtcbiAgICBjb25zdCByYXdOb0hleCA9IHV0aWxzLnJlbW92ZUhleFByZWZpeChyYXcpO1xuICAgIHRyeSB7XG4gICAgICB0eCA9IG5ldyBQVk1UeCgpO1xuICAgICAgLy8gY291bGQgdGhyb3cgYW4gZXJyb3IgaWYgYSB0eFR5cGUgZG9lc24ndCBtYXRjaC5cbiAgICAgIHR4LmZyb21CdWZmZXIoQnVmZmVyQXZheC5mcm9tKHJhd05vSGV4LCAnaGV4JykpO1xuXG4gICAgICBpZiAoIXV0aWxzLmlzVHJhbnNhY3Rpb25PZih0eCwgKHRoaXMuX2NvaW5Db25maWcubmV0d29yayBhcyBBdmFsYW5jaGVOZXR3b3JrKS5ibG9ja2NoYWluSUQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSXQgaXMgbm90IGEgdHJhbnNhY3Rpb24gb2YgdGhpcyBwbGF0Zm9ybXZtIG9sZCBmbG93Jyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdHhTb3VyY2UgPSAnRVZNJztcbiAgICAgICAgdHggPSBuZXcgRVZNVHgoKTtcbiAgICAgICAgdHguZnJvbUJ1ZmZlcihCdWZmZXJBdmF4LmZyb20ocmF3Tm9IZXgsICdoZXgnKSk7XG5cbiAgICAgICAgaWYgKCF1dGlscy5pc1RyYW5zYWN0aW9uT2YodHgsICh0aGlzLl9jb2luQ29uZmlnLm5ldHdvcmsgYXMgQXZhbGFuY2hlTmV0d29yaykuY0NoYWluQmxvY2tjaGFpbklEKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSXQgaXMgbm90IGEgdHJhbnNhY3Rpb24gb2YgdGhpcyBuZXR3b3JrIG9yIEMgY2hhaW4gRVZNJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0eFNvdXJjZSA9ICdQVk0nO1xuICAgICAgICAgIC8vIHRoaXMgc2hvdWxkIGJlIHRoZSBsYXN0IGJlY2F1c2Ugb3RoZXIgUFZNIGZ1bmN0aW9ucyBhcmUgc3RpbGwgYmVpbmcgZGV0ZWN0ZWQgaW4gdGhlIG5ldyBTREtcbiAgICAgICAgICBjb25zdCBtYW5hZ2VyID0gQXZheFV0aWxzLmdldE1hbmFnZXJGb3JWTSgnUFZNJyk7XG4gICAgICAgICAgY29uc3QgW2NvZGVjLCB0eEJ5dGVzXSA9IG1hbmFnZXIuZ2V0Q29kZWNGcm9tQnVmZmVyKEF2YXhVdGlscy5oZXhUb0J1ZmZlcihyYXcpKTtcbiAgICAgICAgICBjb25zdCB1bnBhY2tlZFR4ID0gY29kZWMuVW5wYWNrUHJlZml4PHB2bVNlcmlhbC5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4Pih0eEJ5dGVzKTtcbiAgICAgICAgICAvLyBBIHNpZ25lZCB0cmFuc2FjdGlvbiBpbmNsdWRlcyA0IGJ5dGVzIGZvciB0aGUgbnVtYmVyIG9mIGNyZWRlbnRpYWxzIGFzIGFuIEludCB0eXBlIHRoYXQgaXMgbm90IGtub3duIGJ5IHRoZSBjb2RlY1xuICAgICAgICAgIC8vIFdlJ2xsIHNraXAgdGhvc2UgNCBieXRlcywgaW5zdGVhZCB3ZSdsbCBsb29wIHVudGlsIHdlJ3ZlIHBhcnNlZCBhbGwgY3JlZGVudGlhbHNcbiAgICAgICAgICAvLyBAc2VlIGh0dHBzOi8vZG9jcy5hdmF4Lm5ldHdvcmsvcmVmZXJlbmNlL2F2YWxhbmNoZWdvL3AtY2hhaW4vdHhuLWZvcm1hdCNzaWduZWQtdHJhbnNhY3Rpb24tZXhhbXBsZVxuICAgICAgICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFsW10gPSBbXTtcbiAgICAgICAgICBsZXQgY3JlZGVudGlhbEJ5dGVzID0gdW5wYWNrZWRUeFsxXS5zbGljZSg0KTtcbiAgICAgICAgICBsZXQgbW9yZUNyZWRlbnRpYWxzID0gdHJ1ZTtcbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBbY3JlZGVudGlhbCwgcmVzdF0gPSBjb2RlYy5VbnBhY2tQcmVmaXg8Q3JlZGVudGlhbD4oY3JlZGVudGlhbEJ5dGVzKTtcbiAgICAgICAgICAgICAgY3JlZGVudGlhbHMucHVzaChjcmVkZW50aWFsKTtcbiAgICAgICAgICAgICAgY3JlZGVudGlhbEJ5dGVzID0gcmVzdDtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgbW9yZUNyZWRlbnRpYWxzID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSB3aGlsZSAoY3JlZGVudGlhbEJ5dGVzLmxlbmd0aCA+IDAgJiYgbW9yZUNyZWRlbnRpYWxzKTtcblxuICAgICAgICAgIGNvbnN0IHVucGFja2VkID0gY29kZWMuVW5wYWNrUHJlZml4PHB2bVNlcmlhbC5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4Pih0eEJ5dGVzKTtcbiAgICAgICAgICBjb25zdCBwZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4ID0gdW5wYWNrZWRbMF0gYXMgcHZtU2VyaWFsLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHg7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0cyA9IHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHguYmFzZVR4Lm91dHB1dHM7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0c1swXS5vdXRwdXQgYXMgVHJhbnNmZXJPdXRwdXQ7XG4gICAgICAgICAgaWYgKG91dHB1dHNbMF0uZ2V0QXNzZXRJZCgpICE9PSAodGhpcy5fY29pbkNvbmZpZy5uZXR3b3JrIGFzIEF2YWxhbmNoZU5ldHdvcmspLmF2YXhBc3NldElEKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBBc3NldCBJRCBvZiB0aGUgb3V0cHV0IGRvZXMgbm90IG1hdGNoIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBmcm9tQWRkcmVzc2VzID0gb3V0cHV0Lm91dHB1dE93bmVycy5hZGRycy5tYXAoKGEpID0+IEF2YXhVdGlscy5oZXhUb0J1ZmZlcihhLnRvSGV4KCkpKTtcbiAgICAgICAgICBjb25zdCBhZGRyZXNzTWFwcyA9IGZyb21BZGRyZXNzZXMubWFwKChhKSA9PiBuZXcgQXZheFV0aWxzLkFkZHJlc3NNYXAoW1tuZXcgQWRkcmVzcyhhKSwgMF1dKSk7XG4gICAgICAgICAgdHggPSBuZXcgVW5zaWduZWRUeCh1bnBhY2tlZFswXSwgW10sIG5ldyBBdmF4VXRpbHMuQWRkcmVzc01hcHMoYWRkcmVzc01hcHMpLCBjcmVkZW50aWFscyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVGhlIHRyYW5zYWN0aW9uIHR5cGUgaXMgbm90IHJlY29nbml6ZWQgYXMgYW4gb2xkIFBWTSBvciBvbGQgRVZNIHRyYW5zYWN0aW9uLiBBZGRpdGlvbmFsbHksIHBhcnNpbmcgb2YgdGhlIG5ldyBQVk0gQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCB0eXBlIGZhaWxlZDogJHtlLm1lc3NhZ2V9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHhTb3VyY2UgPT09ICdQVk0nKSB7XG4gICAgICBpZiAoKHR4IGFzIFVuc2lnbmVkVHgpPy50eD8uX3R5cGUgJiYgUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKCh0eCBhcyBVbnNpZ25lZFR4KS50eC5fdHlwZSkpIHtcbiAgICAgICAgdHJhbnNhY3Rpb25CdWlsZGVyID0gdGhpcy5nZXRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlcigpO1xuICAgICAgICB0cmFuc2FjdGlvbkJ1aWxkZXIuaW5pdEJ1aWxkZXIodHgpO1xuICAgICAgfSBlbHNlIGlmIChWYWxpZGF0b3JUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKCh0eCBhcyBQVk1UeCkuZ2V0VW5zaWduZWRUeCgpLmdldFRyYW5zYWN0aW9uKCkpKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uQnVpbGRlciA9IHRoaXMuZ2V0VmFsaWRhdG9yQnVpbGRlcigpO1xuICAgICAgICB0cmFuc2FjdGlvbkJ1aWxkZXIuaW5pdEJ1aWxkZXIodHggYXMgUFZNVHgpO1xuICAgICAgfSBlbHNlIGlmIChFeHBvcnRUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKCh0eCBhcyBQVk1UeCkuZ2V0VW5zaWduZWRUeCgpLmdldFRyYW5zYWN0aW9uKCkpKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uQnVpbGRlciA9IHRoaXMuZ2V0RXhwb3J0QnVpbGRlcigpO1xuICAgICAgICB0cmFuc2FjdGlvbkJ1aWxkZXIuaW5pdEJ1aWxkZXIodHggYXMgUFZNVHgpO1xuICAgICAgfSBlbHNlIGlmIChJbXBvcnRUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKCh0eCBhcyBQVk1UeCkuZ2V0VW5zaWduZWRUeCgpLmdldFRyYW5zYWN0aW9uKCkpKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uQnVpbGRlciA9IHRoaXMuZ2V0SW1wb3J0QnVpbGRlcigpO1xuICAgICAgICB0cmFuc2FjdGlvbkJ1aWxkZXIuaW5pdEJ1aWxkZXIodHggYXMgUFZNVHgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHhTb3VyY2UgPT09ICdFVk0nKSB7XG4gICAgICBpZiAoSW1wb3J0SW5DVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSgodHggYXMgRVZNVHgpLmdldFVuc2lnbmVkVHgoKS5nZXRUcmFuc2FjdGlvbigpKSkge1xuICAgICAgICB0cmFuc2FjdGlvbkJ1aWxkZXIgPSB0aGlzLmdldEltcG9ydEluQ0J1aWxkZXIoKTtcbiAgICAgICAgdHJhbnNhY3Rpb25CdWlsZGVyLmluaXRCdWlsZGVyKHR4IGFzIEVWTVR4KTtcbiAgICAgIH0gZWxzZSBpZiAoRXhwb3J0SW5DVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSgodHggYXMgRVZNVHgpLmdldFVuc2lnbmVkVHgoKS5nZXRUcmFuc2FjdGlvbigpKSkge1xuICAgICAgICB0cmFuc2FjdGlvbkJ1aWxkZXIgPSB0aGlzLmdldEV4cG9ydEluQ0J1aWxkZXIoKTtcbiAgICAgICAgdHJhbnNhY3Rpb25CdWlsZGVyLmluaXRCdWlsZGVyKHR4IGFzIEVWTVR4KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRyYW5zYWN0aW9uQnVpbGRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdUcmFuc2FjdGlvbiBjYW5ub3QgYmUgcGFyc2VkIG9yIGhhcyBhbiB1bnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB0eXBlJyk7XG4gICAgfVxuICAgIHJldHVybiB0cmFuc2FjdGlvbkJ1aWxkZXI7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0VHJhbnNmZXJCdWlsZGVyKCk6IERlcHJlY2F0ZWRUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoJ1RyYW5zZmVyIGlzIG5vdCBzdXBwb3J0ZWQgaW4gUCBDaGFpbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgVmFsaWRhdG9yIGJ1aWxkZXJcbiAgICpcbiAgICogQHJldHVybnMge1ZhbGlkYXRvclR4QnVpbGRlcn0gdGhlIGJ1aWxkZXIgaW5pdGlhbGl6ZWRcbiAgICovXG4gIGdldFZhbGlkYXRvckJ1aWxkZXIoKTogVmFsaWRhdG9yVHhCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFZhbGlkYXRvclR4QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIFBlcm1pc3Npb25sZXNzIFZhbGlkYXRvciBidWlsZGVyXG4gICAqXG4gICAqIEByZXR1cm5zIHtQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlcn0gdGhlIGJ1aWxkZXIgaW5pdGlhbGl6ZWRcbiAgICovXG4gIGdldFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyKCk6IFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBDcm9zcyBjaGFpbiB0cmFuc2ZlclxuICAgKlxuICAgKiBAcmV0dXJucyB7RXhwb3J0VHhCdWlsZGVyfSB0aGUgYnVpbGRlciBpbml0aWFsaXplZFxuICAgKi9cbiAgZ2V0RXhwb3J0QnVpbGRlcigpOiBFeHBvcnRUeEJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgRXhwb3J0VHhCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBDcm9zcyBjaGFpbiB0cmFuc2ZlclxuICAgKlxuICAgKiBAcmV0dXJucyB7SW1wb3J0VHhCdWlsZGVyfSB0aGUgYnVpbGRlciBpbml0aWFsaXplZFxuICAgKi9cbiAgZ2V0SW1wb3J0QnVpbGRlcigpOiBJbXBvcnRUeEJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgSW1wb3J0VHhCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBpbiBDIGNoYWluIENyb3NzIGNoYWluIHRyYW5zZmVyXG4gICAqXG4gICAqIEByZXR1cm5zIHtJbXBvcnRJbkNUeEJ1aWxkZXJ9IHRoZSBidWlsZGVyIGluaXRpYWxpemVkXG4gICAqL1xuICBnZXRJbXBvcnRJbkNCdWlsZGVyKCk6IEltcG9ydEluQ1R4QnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBJbXBvcnRJbkNUeEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IGluIEMgY2hhaW4gQ3Jvc3MgY2hhaW4gdHJhbnNmZXJcbiAgICpcbiAgICogQHJldHVybnMge0V4cG9ydEluQ1R4QnVpbGRlcn0gdGhlIGJ1aWxkZXIgaW5pdGlhbGl6ZWRcbiAgICovXG4gIGdldEV4cG9ydEluQ0J1aWxkZXIoKTogRXhwb3J0SW5DVHhCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IEV4cG9ydEluQ1R4QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBnZXRXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTogRGVwcmVjYXRlZFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnV2FsbGV0IGluaXRpYWxpemF0aW9uIGlzIG5vdCBuZWVkZWQnKTtcbiAgfVxufVxuIl19
@@ -1,12 +1,13 @@
1
1
  /// <reference types="node" />
2
+ import { Signature as AvaxSignature, TransferableOutput } from '@bitgo/avalanchejs';
2
3
  import { BaseUtils, Entry } from '@bitgo/sdk-core';
3
- import { Buffer as BufferAvax } from 'avalanche';
4
- import { NodeIDStringToBuffer } from 'avalanche/dist/utils';
5
- import { BaseTx, TransferableOutput } from 'avalanche/dist/apis/platformvm';
6
- import { Credential } from 'avalanche/dist/common/credentials';
7
4
  import { AvalancheNetwork } from '@bitgo/statics';
5
+ import { Buffer as BufferAvax } from 'avalanche';
6
+ import { BaseTx, TransferableOutput as DeprecatedTransferableOutput } from 'avalanche/dist/apis/platformvm';
8
7
  import { Signature } from 'avalanche/dist/common';
9
- import { Output, Tx } from './iface';
8
+ import { Credential } from 'avalanche/dist/common/credentials';
9
+ import { NodeIDStringToBuffer } from 'avalanche/dist/utils';
10
+ import { DeprecatedOutput, DeprecatedTx, Output } from './iface';
10
11
  export declare class Utils implements BaseUtils {
11
12
  private binTools;
12
13
  cb58Decode: (bytes: string | BufferAvax) => BufferAvax;
@@ -101,6 +102,7 @@ export declare class Utils implements BaseUtils {
101
102
  */
102
103
  verifySignature(network: AvalancheNetwork, message: Buffer, signature: Buffer, prv: Buffer): boolean;
103
104
  createSig(sigHex: string): Signature;
105
+ createNewSig(sigHex: string): AvaxSignature;
104
106
  /**
105
107
  * Avaxp wrapper to recovery signature using Avalanche's buffer
106
108
  * @param network
@@ -128,11 +130,18 @@ export declare class Utils implements BaseUtils {
128
130
  /**
129
131
  * Check if tx is for the blockchainId
130
132
  *
131
- * @param {Tx} tx
133
+ * @param {DeprecatedTx} tx
132
134
  * @param {string} blockchainId
133
135
  * @returns true if tx is for blockchainId
134
136
  */
135
- isTransactionOf(tx: Tx, blockchainId: string): boolean;
137
+ isTransactionOf(tx: DeprecatedTx, blockchainId: string): boolean;
138
+ /**
139
+ * Check if Output is from PVM.
140
+ * Output could be EVM or PVM output.
141
+ * @param {DeprecatedOutput} output
142
+ * @returns {boolean} output is DeprecatedTransferableOutput
143
+ */
144
+ deprecatedIsTransferableOutput(output: DeprecatedOutput): output is DeprecatedTransferableOutput;
136
145
  /**
137
146
  * Check if Output is from PVM.
138
147
  * Output could be EVM or PVM output.
@@ -140,6 +149,12 @@ export declare class Utils implements BaseUtils {
140
149
  * @returns {boolean} output is TransferableOutput
141
150
  */
142
151
  isTransferableOutput(output: Output): output is TransferableOutput;
152
+ /**
153
+ * Return a mapper function to that network address representation.
154
+ * @param network required to stringify addresses
155
+ * @return mapper function
156
+ */
157
+ deprecatedMapOutputToEntry(network: AvalancheNetwork): (DeprecatedOutput: any) => Entry;
143
158
  /**
144
159
  * Return a mapper function to that network address representation.
145
160
  * @param network required to stringify addresses