@bitgo-beta/sdk-coin-ton 1.0.1-beta.162 → 1.0.1-beta.1621
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/jettonToken.d.ts +19 -0
- package/dist/src/jettonToken.d.ts.map +1 -0
- package/dist/src/jettonToken.js +52 -0
- package/dist/src/lib/constants.d.ts +9 -0
- package/dist/src/lib/constants.d.ts.map +1 -0
- package/dist/src/lib/constants.js +12 -0
- package/dist/src/lib/explainTransactionWasm.d.ts +22 -0
- package/dist/src/lib/explainTransactionWasm.d.ts.map +1 -0
- package/dist/src/lib/explainTransactionWasm.js +61 -0
- package/dist/src/lib/iface.d.ts +17 -0
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/index.d.ts +5 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +29 -9
- package/dist/src/lib/keyPair.js +18 -8
- package/dist/src/lib/singleNominatorWithdrawBuilder.d.ts +17 -0
- package/dist/src/lib/singleNominatorWithdrawBuilder.d.ts.map +1 -0
- package/dist/src/lib/singleNominatorWithdrawBuilder.js +38 -0
- package/dist/src/lib/tokenTransaction.d.ts +16 -0
- package/dist/src/lib/tokenTransaction.d.ts.map +1 -0
- package/dist/src/lib/tokenTransaction.js +97 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts +20 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/tokenTransferBuilder.js +57 -0
- package/dist/src/lib/tonWhalesDepositBuilder.d.ts +12 -0
- package/dist/src/lib/tonWhalesDepositBuilder.d.ts.map +1 -0
- package/dist/src/lib/tonWhalesDepositBuilder.js +42 -0
- package/dist/src/lib/tonWhalesVestingDepositBuilder.d.ts +12 -0
- package/dist/src/lib/tonWhalesVestingDepositBuilder.d.ts.map +1 -0
- package/dist/src/lib/tonWhalesVestingDepositBuilder.js +37 -0
- package/dist/src/lib/tonWhalesVestingWithdrawBuilder.d.ts +12 -0
- package/dist/src/lib/tonWhalesVestingWithdrawBuilder.d.ts.map +1 -0
- package/dist/src/lib/tonWhalesVestingWithdrawBuilder.js +37 -0
- package/dist/src/lib/tonWhalesWithdrawalBuilder.d.ts +30 -0
- package/dist/src/lib/tonWhalesWithdrawalBuilder.d.ts.map +1 -0
- package/dist/src/lib/tonWhalesWithdrawalBuilder.js +60 -0
- package/dist/src/lib/transaction.d.ts +20 -10
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +176 -45
- package/dist/src/lib/transactionBuilder.d.ts +27 -3
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +52 -5
- package/dist/src/lib/transactionBuilderFactory.d.ts +19 -1
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +78 -4
- package/dist/src/lib/transactionExplanation.d.ts +14 -0
- package/dist/src/lib/transactionExplanation.d.ts.map +1 -0
- package/dist/src/lib/transactionExplanation.js +3 -0
- package/dist/src/lib/transferBuilder.d.ts +1 -1
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +4 -2
- package/dist/src/lib/utils.d.ts +22 -1
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +89 -4
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +5 -1
- package/dist/src/ton.d.ts +27 -2
- package/dist/src/ton.d.ts.map +1 -1
- package/dist/src/ton.js +360 -32
- package/dist/src/tton.js +1 -1
- package/dist/test/resources/ton.d.ts +184 -0
- package/dist/test/resources/ton.d.ts.map +1 -0
- package/dist/test/resources/ton.js +208 -0
- package/dist/test/unit/explainTransactionWasm.d.ts +2 -0
- package/dist/test/unit/explainTransactionWasm.d.ts.map +1 -0
- package/dist/test/unit/explainTransactionWasm.js +147 -0
- package/dist/test/unit/jettonToken.d.ts +2 -0
- package/dist/test/unit/jettonToken.d.ts.map +1 -0
- package/dist/test/unit/jettonToken.js +341 -0
- package/dist/test/unit/keyPair.d.ts +2 -0
- package/dist/test/unit/keyPair.d.ts.map +1 -0
- package/dist/test/unit/keyPair.js +55 -0
- package/dist/test/unit/singleNominatorWithdrawBuilder.d.ts +2 -0
- package/dist/test/unit/singleNominatorWithdrawBuilder.d.ts.map +1 -0
- package/dist/test/unit/singleNominatorWithdrawBuilder.js +314 -0
- package/dist/test/unit/tokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/tokenTransferBuilder.js +262 -0
- package/dist/test/unit/ton.d.ts +2 -0
- package/dist/test/unit/ton.d.ts.map +1 -0
- package/dist/test/unit/ton.js +752 -0
- package/dist/test/unit/tonWhalesDepositBuilder.d.ts +2 -0
- package/dist/test/unit/tonWhalesDepositBuilder.d.ts.map +1 -0
- package/dist/test/unit/tonWhalesDepositBuilder.js +114 -0
- package/dist/test/unit/tonWhalesVestingDepositBuilder.d.ts +2 -0
- package/dist/test/unit/tonWhalesVestingDepositBuilder.d.ts.map +1 -0
- package/dist/test/unit/tonWhalesVestingDepositBuilder.js +136 -0
- package/dist/test/unit/tonWhalesVestingWithdrawBuilder.d.ts +2 -0
- package/dist/test/unit/tonWhalesVestingWithdrawBuilder.d.ts.map +1 -0
- package/dist/test/unit/tonWhalesVestingWithdrawBuilder.js +136 -0
- package/dist/test/unit/tonWhalesWithdrawalBuilder.d.ts +2 -0
- package/dist/test/unit/tonWhalesWithdrawalBuilder.d.ts.map +1 -0
- package/dist/test/unit/tonWhalesWithdrawalBuilder.js +130 -0
- package/dist/test/unit/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transferBuilder.js +281 -0
- package/dist/test/unit/wasmCrossCompatibility.d.ts +2 -0
- package/dist/test/unit/wasmCrossCompatibility.d.ts.map +1 -0
- package/dist/test/unit/wasmCrossCompatibility.js +176 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +14 -10
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -399
|
@@ -4,13 +4,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.Transaction = void 0;
|
|
7
|
-
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
8
7
|
const tonweb_1 = __importDefault(require("tonweb"));
|
|
9
8
|
const bn_js_1 = require("bn.js");
|
|
10
|
-
const
|
|
9
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
10
|
+
const constants_1 = require("./constants");
|
|
11
11
|
class Transaction extends sdk_core_1.BaseTransaction {
|
|
12
12
|
constructor(coinConfig) {
|
|
13
13
|
super(coinConfig);
|
|
14
|
+
this.bounceable = false;
|
|
15
|
+
this.fromAddressBounceable = true;
|
|
16
|
+
this.toAddressBounceable = true;
|
|
17
|
+
this.isV3ContractMessage = false;
|
|
14
18
|
}
|
|
15
19
|
canSign(key) {
|
|
16
20
|
return false;
|
|
@@ -19,26 +23,43 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
19
23
|
return this.finalMessage;
|
|
20
24
|
}
|
|
21
25
|
toJson() {
|
|
22
|
-
const
|
|
26
|
+
const otherFormat = new tonweb_1.default.Address(this.recipient.address).toString(true, true, !new tonweb_1.default.Address(this.recipient.address).isBounceable);
|
|
23
27
|
return {
|
|
24
28
|
id: this._id,
|
|
25
29
|
sender: this.sender,
|
|
26
30
|
destination: this.recipient.address,
|
|
27
|
-
destinationAlias:
|
|
31
|
+
destinationAlias: otherFormat,
|
|
28
32
|
amount: this.recipient.amount,
|
|
33
|
+
withdrawAmount: this.withdrawAmount,
|
|
29
34
|
seqno: this.seqno,
|
|
35
|
+
sub_wallet_id: this.sub_wallet_id,
|
|
30
36
|
expirationTime: this.expireTime,
|
|
31
37
|
publicKey: this.publicKey,
|
|
32
38
|
signature: this._signatures[0],
|
|
39
|
+
bounceable: this.bounceable,
|
|
33
40
|
};
|
|
34
41
|
}
|
|
35
42
|
get signablePayload() {
|
|
36
43
|
return Buffer.from(this.unsignedMessage, 'hex');
|
|
37
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Set the transaction type.
|
|
47
|
+
* @param {TransactionType} transactionType The transaction type to be set.
|
|
48
|
+
*/
|
|
49
|
+
set transactionType(transactionType) {
|
|
50
|
+
this._type = transactionType;
|
|
51
|
+
}
|
|
38
52
|
async build() {
|
|
39
|
-
this.
|
|
40
|
-
|
|
41
|
-
|
|
53
|
+
if (!this.sub_wallet_id) {
|
|
54
|
+
if (this.isV3ContractMessage) {
|
|
55
|
+
this.sub_wallet_id = constants_1.VESTING_CONTRACT_WALLET_ID;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
this.sub_wallet_id = constants_1.WALLET_ID;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const signingMessage = this.createSigningMessage(this.sub_wallet_id, this.seqno, this.expireTime);
|
|
62
|
+
const sendMode = 3; // default sendMode
|
|
42
63
|
signingMessage.bits.writeUint8(sendMode);
|
|
43
64
|
const outMsg = this.createOutMsg(this.recipient.address, this.recipient.amount, this.message);
|
|
44
65
|
signingMessage.refs.push(outMsg);
|
|
@@ -52,16 +73,12 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
52
73
|
createSigningMessage(walletId, seqno, expireAt) {
|
|
53
74
|
const message = new tonweb_1.default.boc.Cell();
|
|
54
75
|
message.bits.writeUint(walletId, 32);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
message.bits.writeBit(1);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
message.bits.writeUint(expireAt, 32);
|
|
62
|
-
}
|
|
76
|
+
// expireAt should be set as per the provided arg value, regardless of the seqno
|
|
77
|
+
message.bits.writeUint(expireAt, 32);
|
|
63
78
|
message.bits.writeUint(seqno, 32);
|
|
64
|
-
|
|
79
|
+
if (!this.isV3ContractMessage) {
|
|
80
|
+
message.bits.writeUint(0, 8); // op
|
|
81
|
+
}
|
|
65
82
|
return message;
|
|
66
83
|
}
|
|
67
84
|
createOutMsg(address, amount, payload) {
|
|
@@ -73,15 +90,47 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
73
90
|
}
|
|
74
91
|
else if (typeof payload === 'string') {
|
|
75
92
|
if (payload.length > 0) {
|
|
76
|
-
|
|
77
|
-
|
|
93
|
+
if (payload.length > 24 && payload.substring(0, 8) === constants_1.WITHDRAW_OPCODE) {
|
|
94
|
+
// payload is a withdraw txn message
|
|
95
|
+
const queryId = payload.substring(8, 24);
|
|
96
|
+
const withdrawAmount = payload.substring(24);
|
|
97
|
+
/* eslint-disable-next-line no-console */
|
|
98
|
+
console.log(`payload: ${payload}, queryId: ${queryId}, withdrawAmount: ${withdrawAmount}`);
|
|
99
|
+
payloadCell.bits.writeUint(parseInt(constants_1.WITHDRAW_OPCODE, 16), 32);
|
|
100
|
+
payloadCell.bits.writeUint(parseInt(queryId, 16), 64);
|
|
101
|
+
payloadCell.bits.writeCoins(new bn_js_1.BN(withdrawAmount));
|
|
102
|
+
}
|
|
103
|
+
else if (payload.length >= 26 && payload.substring(0, 10) === constants_1.TON_WHALES_DEPOSIT_OPCODE) {
|
|
104
|
+
const queryId = payload.substring(10, 26);
|
|
105
|
+
payloadCell.bits.writeUint(parseInt(constants_1.TON_WHALES_DEPOSIT_OPCODE, 10), 32);
|
|
106
|
+
payloadCell.bits.writeUint(parseInt(queryId, 16), 64);
|
|
107
|
+
// The Ton Whales protocol requires a specific 'gas limit' field in the payload
|
|
108
|
+
// structure (OpCode -> QueryId -> GasLimit -> Amount).
|
|
109
|
+
payloadCell.bits.writeCoins(tonweb_1.default.utils.toNano('1'));
|
|
110
|
+
}
|
|
111
|
+
else if (payload.length >= 26 && payload.substring(0, 10) === constants_1.TON_WHALES_WITHDRAW_OPCODE) {
|
|
112
|
+
const queryId = payload.substring(10, 26);
|
|
113
|
+
const amountStr = payload.substring(26);
|
|
114
|
+
payloadCell.bits.writeUint(parseInt(constants_1.TON_WHALES_WITHDRAW_OPCODE, 10), 32);
|
|
115
|
+
payloadCell.bits.writeUint(new bn_js_1.BN(queryId, 16), 64);
|
|
116
|
+
// The Ton Whales protocol requires a specific 'gas limit' field in the payload
|
|
117
|
+
// structure (OpCode -> QueryId -> GasLimit -> Amount).
|
|
118
|
+
// We hardcode 1 TON here to match the Deposit implementation and ensure
|
|
119
|
+
// sufficient gas for the pool to process the request.
|
|
120
|
+
payloadCell.bits.writeCoins(tonweb_1.default.utils.toNano('1'));
|
|
121
|
+
payloadCell.bits.writeCoins(new bn_js_1.BN(amountStr));
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
payloadCell.bits.writeUint(0, 32);
|
|
125
|
+
payloadCell.bits.writeString(payload);
|
|
126
|
+
}
|
|
78
127
|
}
|
|
79
128
|
}
|
|
80
129
|
else {
|
|
81
130
|
payloadCell.bits.writeBytes(payload);
|
|
82
131
|
}
|
|
83
132
|
}
|
|
84
|
-
const orderHeader = tonweb_1.default.Contract.createInternalMessageHeader(new tonweb_1.default.Address(address), new bn_js_1.BN(amount), true,
|
|
133
|
+
const orderHeader = tonweb_1.default.Contract.createInternalMessageHeader(new tonweb_1.default.Address(address), new bn_js_1.BN(amount), true, this.bounceable);
|
|
85
134
|
return tonweb_1.default.Contract.createCommonMsgInfo(orderHeader, undefined, payloadCell);
|
|
86
135
|
}
|
|
87
136
|
async createExternalMessage(signingMessage, seqno, signature) {
|
|
@@ -89,7 +138,7 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
89
138
|
body.bits.writeBytes(Buffer.from(signature, 'hex'));
|
|
90
139
|
body.writeCell(signingMessage);
|
|
91
140
|
let stateInit;
|
|
92
|
-
if (seqno === 0) {
|
|
141
|
+
if (seqno === 0 && !this.isV3ContractMessage) {
|
|
93
142
|
const WalletClass = tonweb_1.default.Wallets.all['v4R2'];
|
|
94
143
|
const wallet = new WalletClass(new tonweb_1.default.HttpProvider(), {
|
|
95
144
|
publicKey: tonweb_1.default.utils.hexToBytes(this.publicKey),
|
|
@@ -99,8 +148,7 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
99
148
|
stateInit = deploy.stateInit;
|
|
100
149
|
}
|
|
101
150
|
const header = tonweb_1.default.Contract.createExternalMessageHeader(this.sender);
|
|
102
|
-
|
|
103
|
-
return resultMessage;
|
|
151
|
+
return tonweb_1.default.Contract.createCommonMsgInfo(header, stateInit, body);
|
|
104
152
|
}
|
|
105
153
|
loadInputsAndOutputs() {
|
|
106
154
|
const outputs = [];
|
|
@@ -121,17 +169,17 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
121
169
|
fromRawTransaction(rawTransaction) {
|
|
122
170
|
try {
|
|
123
171
|
const cell = tonweb_1.default.boc.Cell.oneFromBoc(tonweb_1.default.utils.base64ToBytes(rawTransaction));
|
|
124
|
-
const parsed = this.
|
|
125
|
-
parsed.value = parsed.value.toString();
|
|
126
|
-
parsed.fromAddress = parsed.fromAddress.toString(true, true, true);
|
|
127
|
-
parsed.toAddress = parsed.toAddress.toString(true, true, true);
|
|
172
|
+
const parsed = this.parseTransaction(cell);
|
|
128
173
|
this.sender = parsed.fromAddress;
|
|
129
174
|
this.recipient = { address: parsed.toAddress, amount: parsed.value };
|
|
175
|
+
this.withdrawAmount = parsed.withdrawAmount;
|
|
130
176
|
this.seqno = parsed.seqno;
|
|
131
177
|
this.publicKey = parsed.publicKey;
|
|
132
178
|
this.expireTime = parsed.expireAt;
|
|
133
179
|
this.message = parsed.payload;
|
|
134
180
|
this._signatures.push(parsed.signature);
|
|
181
|
+
this.bounceable = parsed.bounce;
|
|
182
|
+
this.sub_wallet_id = parsed.walletId;
|
|
135
183
|
}
|
|
136
184
|
catch (e) {
|
|
137
185
|
throw new Error('invalid raw transaction');
|
|
@@ -139,9 +187,10 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
139
187
|
}
|
|
140
188
|
/** @inheritDoc */
|
|
141
189
|
explainTransaction() {
|
|
142
|
-
const displayOrder = ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee'];
|
|
190
|
+
const displayOrder = ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'withdrawAmount'];
|
|
143
191
|
const outputs = [this.recipient];
|
|
144
192
|
const outputAmount = this.recipient.amount;
|
|
193
|
+
const withdrawAmount = this.withdrawAmount;
|
|
145
194
|
return {
|
|
146
195
|
displayOrder,
|
|
147
196
|
id: this.id,
|
|
@@ -150,9 +199,10 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
150
199
|
changeOutputs: [],
|
|
151
200
|
changeAmount: '0',
|
|
152
201
|
fee: { fee: 'UNKNOWN' },
|
|
202
|
+
withdrawAmount,
|
|
153
203
|
};
|
|
154
204
|
}
|
|
155
|
-
|
|
205
|
+
parseTransaction(cell) {
|
|
156
206
|
const slice = cell.beginParse();
|
|
157
207
|
// header
|
|
158
208
|
if (slice.loadUint(2).toNumber() !== 2)
|
|
@@ -175,7 +225,7 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
175
225
|
if (seqno !== 0)
|
|
176
226
|
throw new Error('invalid seqno');
|
|
177
227
|
const walletId = data.loadUint(32).toNumber();
|
|
178
|
-
if (walletId !== WALLET_ID)
|
|
228
|
+
if (walletId !== constants_1.WALLET_ID)
|
|
179
229
|
throw new Error('invalid wallet id');
|
|
180
230
|
const publicKeyBuf = new Uint8Array(32);
|
|
181
231
|
for (let i = 0; i < publicKeyBuf.length; i++) {
|
|
@@ -187,25 +237,30 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
187
237
|
// body
|
|
188
238
|
const bodySlice = slice.loadBit() ? slice.loadRef() : slice;
|
|
189
239
|
return {
|
|
190
|
-
fromAddress: externalDestAddress,
|
|
240
|
+
fromAddress: externalDestAddress.toString(true, true, this.fromAddressBounceable),
|
|
191
241
|
publicKey,
|
|
192
|
-
...this.
|
|
242
|
+
...this.parseTransactionBody(bodySlice),
|
|
193
243
|
};
|
|
194
244
|
}
|
|
195
|
-
|
|
245
|
+
parseTransactionBody(slice) {
|
|
196
246
|
const signature = Buffer.from(slice.loadBits(512)).toString('hex');
|
|
197
247
|
// signing message
|
|
198
248
|
const walletId = slice.loadUint(32).toNumber();
|
|
199
|
-
if (walletId !== WALLET_ID)
|
|
249
|
+
if (walletId !== constants_1.WALLET_ID && walletId !== constants_1.VESTING_CONTRACT_WALLET_ID)
|
|
200
250
|
throw new Error('invalid walletId');
|
|
201
251
|
const expireAt = slice.loadUint(32).toNumber();
|
|
202
252
|
const seqno = slice.loadUint(32).toNumber();
|
|
203
253
|
const op = slice.loadUint(8).toNumber();
|
|
204
|
-
if (op !==
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
254
|
+
if (op !== 3) {
|
|
255
|
+
if (op !== 0)
|
|
256
|
+
throw new Error('invalid op');
|
|
257
|
+
const sendMode = slice.loadUint(8).toNumber();
|
|
258
|
+
if (sendMode !== 3)
|
|
259
|
+
throw new Error('invalid sendMode');
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
this.isV3ContractMessage = true;
|
|
263
|
+
}
|
|
209
264
|
let order = slice.loadRef();
|
|
210
265
|
if (order.loadBit())
|
|
211
266
|
throw Error('invalid internal header');
|
|
@@ -218,7 +273,7 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
218
273
|
if (sourceAddress !== null)
|
|
219
274
|
throw Error('invalid externalSourceAddress');
|
|
220
275
|
const destAddress = order.loadAddress();
|
|
221
|
-
const value = order.loadCoins();
|
|
276
|
+
const value = order.loadCoins().toString();
|
|
222
277
|
if (order.loadBit())
|
|
223
278
|
throw Error('invalid currencyCollection');
|
|
224
279
|
const ihrFees = order.loadCoins();
|
|
@@ -239,21 +294,97 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
239
294
|
}
|
|
240
295
|
// order body
|
|
241
296
|
let payload;
|
|
297
|
+
let withdrawAmount;
|
|
298
|
+
this.transactionType = sdk_core_1.TransactionType.Send;
|
|
242
299
|
if (order.getFreeBits() > 0) {
|
|
243
300
|
if (order.loadBit()) {
|
|
244
301
|
order = order.loadRef();
|
|
245
302
|
}
|
|
246
303
|
if (order.getFreeBits() > 32) {
|
|
247
|
-
const
|
|
248
|
-
|
|
249
|
-
|
|
304
|
+
const opcode = order.loadUint(32).toNumber();
|
|
305
|
+
if (opcode === 0) {
|
|
306
|
+
const payloadBytes = order.loadBits(order.getFreeBits());
|
|
307
|
+
payload = new TextDecoder().decode(payloadBytes);
|
|
308
|
+
if (payload === 'Deposit') {
|
|
309
|
+
this.transactionType = sdk_core_1.TransactionType.TonWhalesVestingDeposit;
|
|
310
|
+
}
|
|
311
|
+
else if (payload === 'Withdraw') {
|
|
312
|
+
this.transactionType = sdk_core_1.TransactionType.TonWhalesVestingWithdrawal;
|
|
313
|
+
}
|
|
314
|
+
else if (payload === constants_1.SINGLE_NOMINATOR_WITHDRAW_ALL_COMMENT) {
|
|
315
|
+
this.transactionType = sdk_core_1.TransactionType.SingleNominatorWithdraw;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
else if (opcode === 4096) {
|
|
319
|
+
const queryId = order.loadUint(64).toNumber();
|
|
320
|
+
withdrawAmount = order.loadCoins().toNumber().toString();
|
|
321
|
+
payload = constants_1.WITHDRAW_OPCODE + queryId.toString(16).padStart(16, '0') + withdrawAmount;
|
|
322
|
+
this.transactionType = sdk_core_1.TransactionType.SingleNominatorWithdraw;
|
|
323
|
+
}
|
|
324
|
+
else if (opcode === constants_1.JETTON_TRANSFER_OPCODE) {
|
|
325
|
+
this.transactionType = sdk_core_1.TransactionType.SendToken;
|
|
326
|
+
const queryId = order.loadUint(64).toNumber();
|
|
327
|
+
if (queryId !== 0)
|
|
328
|
+
throw new Error('invalid queryId for jetton transfer');
|
|
329
|
+
const jettonAmount = order.loadCoins();
|
|
330
|
+
if (!jettonAmount.gt(new bn_js_1.BN(0)))
|
|
331
|
+
throw new Error('invalid jettonAmount');
|
|
332
|
+
const jettonRecipient = order.loadAddress();
|
|
333
|
+
if (!jettonRecipient)
|
|
334
|
+
throw new Error('invalid jettonRecipient');
|
|
335
|
+
const forwarderAddress = order.loadAddress();
|
|
336
|
+
if (!forwarderAddress)
|
|
337
|
+
throw new Error('invalid forwarderAddress');
|
|
338
|
+
order.loadBit(); // skip bit
|
|
339
|
+
const forwardTonAmount = order.loadCoins();
|
|
340
|
+
if (!forwardTonAmount.gt(new bn_js_1.BN(0)))
|
|
341
|
+
throw new Error('invalid forwardTonAmount');
|
|
342
|
+
let message = '';
|
|
343
|
+
if (order.loadBit()) {
|
|
344
|
+
order = order.loadRef();
|
|
345
|
+
const messageOpcode = order.loadUint(32).toNumber();
|
|
346
|
+
if (messageOpcode !== 0)
|
|
347
|
+
throw new Error('invalid message opcode');
|
|
348
|
+
const messageBytes = order.loadBits(order.getFreeBits());
|
|
349
|
+
message = new TextDecoder().decode(messageBytes);
|
|
350
|
+
}
|
|
351
|
+
payload = {
|
|
352
|
+
jettonAmount: jettonAmount.toString(),
|
|
353
|
+
jettonRecipient: jettonRecipient.toString(true, true, this.toAddressBounceable),
|
|
354
|
+
forwarderAddress: forwarderAddress.toString(true, true, this.fromAddressBounceable),
|
|
355
|
+
forwardTonAmount: forwardTonAmount.toString(),
|
|
356
|
+
message: message,
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
else if (opcode === parseInt(constants_1.TON_WHALES_DEPOSIT_OPCODE, 10)) {
|
|
360
|
+
this.transactionType = sdk_core_1.TransactionType.TonWhalesDeposit;
|
|
361
|
+
const queryId = order.loadUint(64).toNumber();
|
|
362
|
+
// This is the gas limit, which must be read to advance the cursor
|
|
363
|
+
// We do not need to store it
|
|
364
|
+
order.loadCoins();
|
|
365
|
+
payload = constants_1.TON_WHALES_DEPOSIT_OPCODE + queryId.toString(16).padStart(16, '0');
|
|
366
|
+
}
|
|
367
|
+
else if (opcode === parseInt(constants_1.TON_WHALES_WITHDRAW_OPCODE, 10)) {
|
|
368
|
+
this.transactionType = sdk_core_1.TransactionType.TonWhalesWithdrawal;
|
|
369
|
+
const queryId = order.loadUint(64).toNumber();
|
|
370
|
+
order.loadCoins(); // Skip Gas (Hardcoded in builder)
|
|
371
|
+
const amount = order.loadCoins();
|
|
372
|
+
withdrawAmount = amount.toString(); // Decimal String
|
|
373
|
+
// Reconstruct Payload: Decimal Op + Hex Query + Decimal Amount
|
|
374
|
+
const queryHex = new bn_js_1.BN(queryId).toString(16).padStart(16, '0');
|
|
375
|
+
payload = constants_1.TON_WHALES_WITHDRAW_OPCODE + queryHex + withdrawAmount;
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
378
|
+
payload = '';
|
|
379
|
+
}
|
|
250
380
|
}
|
|
251
381
|
}
|
|
252
382
|
return {
|
|
253
|
-
toAddress: destAddress,
|
|
383
|
+
toAddress: destAddress.toString(true, true, this.fromAddressBounceable),
|
|
254
384
|
value,
|
|
255
385
|
bounce,
|
|
256
386
|
seqno,
|
|
387
|
+
withdrawAmount,
|
|
257
388
|
expireAt,
|
|
258
389
|
payload,
|
|
259
390
|
signature,
|
|
@@ -269,7 +400,7 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
269
400
|
if (seqno !== 0)
|
|
270
401
|
throw new Error('invalid seqno');
|
|
271
402
|
const walletId = data.loadUint(32).toNumber();
|
|
272
|
-
if (walletId !== WALLET_ID)
|
|
403
|
+
if (walletId !== constants_1.WALLET_ID)
|
|
273
404
|
throw new Error('invalid wallet id');
|
|
274
405
|
const publicKey = new Uint8Array(32);
|
|
275
406
|
for (let i = 0; i < publicKey.length; i++) {
|
|
@@ -281,4 +412,4 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
281
412
|
}
|
|
282
413
|
}
|
|
283
414
|
exports.Transaction = Transaction;
|
|
284
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQVE4QjtBQUc5QixvREFBNEI7QUFDNUIsaUNBQTJCO0FBRzNCLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUU1QixNQUFhLFdBQVksU0FBUSwwQkFBZTtJQVU5QyxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQVk7UUFDbEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxNQUFNO1FBQ0osTUFBTSxhQUFhLEdBQUcsSUFBSSxnQkFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzdGLE9BQU87WUFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQWE7WUFDdEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU87WUFDbkMsZ0JBQWdCLEVBQUUsYUFBYTtZQUMvQixNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNO1lBQzdCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixjQUFjLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDL0IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztTQUMvQixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLE1BQU0sQ0FBQyxJQUFJ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QUFDO0lBQ0osQ0FBQztDQUNGO0FBbFRELGtDQWtUQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbixcbiAgRW50cnksXG4gIFJlY2lwaWVudCxcbiAgVHJhbnNhY3Rpb25SZWNpcGllbnQsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbiAgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHhEYXRhIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgVG9uV2ViIGZyb20gJ3RvbndlYic7XG5pbXBvcnQgeyBCTiB9IGZyb20gJ2JuLmpzJztcbmltcG9ydCB7IENlbGwgfSBmcm9tICd0b253ZWIvZGlzdC90eXBlcy9ib2MvY2VsbCc7XG5cbmNvbnN0IFdBTExFVF9JRCA9IDY5ODk4MzE5MTtcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgcHVibGljIHJlY2lwaWVudDogUmVjaXBpZW50O1xuICBwdWJsaWMgbWVzc2FnZTogc3RyaW5nO1xuICBzZXFubzogbnVtYmVyO1xuICBleHBpcmVUaW1lOiBudW1iZXI7XG4gIHNlbmRlcjogc3RyaW5nO1xuICBwdWJsaWNLZXk6IHN0cmluZztcbiAgcHJpdmF0ZSB1bnNpZ25lZE1lc3NhZ2U6IHN0cmluZztcbiAgcHJpdmF0ZSBmaW5hbE1lc3NhZ2U6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuICB9XG5cbiAgY2FuU2lnbihrZXk6IEJhc2VLZXkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZpbmFsTWVzc2FnZTtcbiAgfVxuXG4gIHRvSnNvbigpOiBUeERhdGEge1xuICAgIGNvbnN0IG5vbl9ib3VuY2FibGUgPSBuZXcgVG9uV2ViLkFkZHJlc3ModGhpcy5yZWNpcGllbnQuYWRkcmVzcykudG9TdHJpbmcodHJ1ZSwgdHJ1ZSwgZmFsc2UpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5faWQgYXMgc3RyaW5nLFxuICAgICAgc2VuZGVyOiB0aGlzLnNlbmRlcixcbiAgICAgIGRlc3RpbmF0aW9uOiB0aGlzLnJlY2lwaWVudC5hZGRyZXNzLFxuICAgICAgZGVzdGluYXRpb25BbGlhczogbm9uX2JvdW5jYWJsZSxcbiAgICAgIGFtb3VudDogdGhpcy5yZWNpcGllbnQuYW1vdW50LFxuICAgICAgc2Vxbm86IHRoaXMuc2Vxbm8sXG4gICAgICBleHBpcmF0aW9uVGltZTogdGhpcy5leHBpcmVUaW1lLFxuICAgICAgcHVibGljS2V5OiB0aGlzLnB1YmxpY0tleSxcbiAgICAgIHNpZ25hdHVyZTogdGhpcy5fc2lnbmF0dXJlc1swXSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0IHNpZ25hYmxlUGF5bG9hZCgpOiBCdWZmZXIge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh0aGlzLnVuc2lnbmVkTWVzc2FnZSwgJ2hleCcpO1xuICB9XG5cbiAgYXN5bmMgYnVpbGQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TZW5kO1xuICAgIGNvbnN0IHNpZ25pbmdNZXNzYWdlID0gdGhpcy5jcmVhdGVTaWduaW5nTWVzc2FnZShXQUxMRVRfSUQsIHRoaXMuc2Vxbm8sIHRoaXMuZXhwaXJlVGltZSk7XG4gICAgY29uc3Qgc2VuZE1vZGUgPSAzO1xuICAgIHNpZ25pbmdNZXNzYWdlLmJpdHMud3JpdGVVaW50OChzZW5kTW9kZSk7XG4gICAgY29uc3Qgb3V0TXNnID0gdGhpcy5jcmVhdGVPdXRNc2codGhpcy5yZWNpcGllbnQuYWRkcmVzcywgdGhpcy5yZWNpcGllbnQuYW1vdW50LCB0aGlzLm1lc3NhZ2UpO1xuICAgIHNpZ25pbmdNZXNzYWdlLnJlZnMucHVzaChvdXRNc2cpO1xuICAgIHRoaXMudW5zaWduZWRNZXNzYWdlID0gQnVmZmVyLmZyb20oYXdhaXQgc2lnbmluZ01lc3NhZ2UuaGFzaCgpKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICBjb25zdCBzaWduYXR1cmUgPVxuICAgICAgdGhpcy5fc2lnbmF0dXJlcy5sZW5ndGggPiAwID8gdGhpcy5fc2lnbmF0dXJlc1swXSA6IEJ1ZmZlci5mcm9tKG5ldyBVaW50OEFycmF5KDY0KSkudG9TdHJpbmcoJ2hleCcpO1xuICAgIGNvbnN0IGZpbmFsTWVzc2FnZSA9IGF3YWl0IHRoaXMuY3JlYXRlRXh0ZXJuYWxNZXNzYWdlKHNpZ25pbmdNZXNzYWdlLCB0aGlzLnNlcW5vLCBzaWduYXR1cmUpO1xuXG4gICAgdGhpcy5maW5hbE1lc3NhZ2UgPSBUb25XZWIudXRpbHMuYnl0ZXNUb0Jhc2U2NChhd2FpdCBmaW5hbE1lc3NhZ2UudG9Cb2MoZmFsc2UpKTtcblxuICAgIGNvbnN0IG9yaWdpbmFsVHhJZCA9IFRvbldlYi51dGlscy5ieXRlc1RvQmFzZTY0KGF3YWl0IGZpbmFsTWVzc2FnZS5oYXNoKCkpO1xuICAgIHRoaXMuX2lkID0gb3JpZ2luYWxUeElkLnJlcGxhY2UoL1xcLy9nLCAnXycpLnJlcGxhY2UoL1xcKy9nLCAnLScpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTaWduaW5nTWVzc2FnZSh3YWxsZXRJZCwgc2Vxbm8sIGV4cGlyZUF0KSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IG5ldyBUb25XZWIuYm9jLkNlbGwoKTtcbiAgICBtZXNzYWdlLmJpdHMud3JpdGVVaW50KHdhbGxldElkLCAzMik7XG4gICAgaWYgKHNlcW5vID09PSAwKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDMyOyBpKyspIHtcbiAgICAgICAgbWVzc2FnZS5iaXRzLndyaXRlQml0KDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBtZXNzYWdlLmJpdHMud3JpdGVVaW50KGV4cGlyZUF0LCAzMik7XG4gICAgfVxuICAgIG1lc3NhZ2UuYml0cy53cml0ZVVpbnQoc2Vxbm8sIDMyKTtcbiAgICBtZXNzYWdlLmJpdHMud3JpdGVVaW50KDAsIDgpOyAvLyBvcFxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVPdXRNc2coYWRkcmVzcywgYW1vdW50LCBwYXlsb2FkKSB7XG4gICAgbGV0IHBheWxvYWRDZWxsID0gbmV3IFRvbldlYi5ib2MuQ2VsbCgpO1xuICAgIGlmIChwYXlsb2FkKSB7XG4gICAgICBpZiAocGF5bG9hZC5yZWZzKSB7XG4gICAgICAgIC8vIGlzIENlbGxcbiAgICAgICAgcGF5bG9hZENlbGwgPSBwYXlsb2FkO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcGF5bG9hZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHBheWxvYWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHBheWxvYWRDZWxsLmJpdHMud3JpdGVVaW50KDAsIDMyKTtcbiAgICAgICAgICBwYXlsb2FkQ2VsbC5iaXRzLndyaXRlU3RyaW5nKHBheWxvYWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXlsb2FkQ2VsbC5iaXRzLndyaXRlQnl0ZXMocGF5bG9hZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb3JkZXJIZWFkZXIgPSBUb25XZWIuQ29udHJhY3QuY3JlYXRlSW50ZXJuYWxNZXNzYWdlSGVhZGVyKFxuICAgICAgbmV3IFRvbldlYi5BZGRyZXNzKGFkZHJlc3MpLFxuICAgICAgbmV3IEJOKGFtb3VudCksXG4gICAgICB0cnVlLFxuICAgICAgZmFsc2VcbiAgICApO1xuICAgIHJldHVybiBUb25XZWIuQ29udHJhY3QuY3JlYXRlQ29tbW9uTXNnSW5mbyhvcmRlckhlYWRlciwgdW5kZWZpbmVkLCBwYXlsb2FkQ2VsbCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVFeHRlcm5hbE1lc3NhZ2Uoc2lnbmluZ01lc3NhZ2U6IENlbGwsIHNlcW5vOiBudW1iZXIsIHNpZ25hdHVyZTogc3RyaW5nKTogUHJvbWlzZTxDZWxsPiB7XG4gICAgY29uc3QgYm9keSA9IG5ldyBUb25XZWIuYm9jLkNlbGwoKTtcblxuICAgIGJvZHkuYml0cy53cml0ZUJ5dGVzKEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSwgJ2hleCcpKTtcbiAgICBib2R5LndyaXRlQ2VsbChzaWduaW5nTWVzc2FnZSk7XG5cbiAgICBsZXQgc3RhdGVJbml0O1xuICAgIGlmIChzZXFubyA9PT0gMCkge1xuICAgICAgY29uc3QgV2FsbGV0Q2xhc3MgPSBUb25XZWIuV2FsbGV0cy5hbGxbJ3Y0UjInXTtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXRDbGFzcyhuZXcgVG9uV2ViLkh0dHBQcm92aWRlcigpLCB7XG4gICAgICAgIHB1YmxpY0tleTogVG9uV2ViLnV0aWxzLmhleFRvQnl0ZXModGhpcy5wdWJsaWNLZXkpLFxuICAgICAgICB3YzogMCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGVwbG95ID0gYXdhaXQgd2FsbGV0LmNyZWF0ZVN0YXRlSW5pdCgpO1xuICAgICAgc3RhdGVJbml0ID0gZGVwbG95LnN0YXRlSW5pdDtcbiAgICB9XG5cbiAgICBjb25zdCBoZWFkZXIgPSBUb25XZWIuQ29udHJhY3QuY3JlYXRlRXh0ZXJuYWxNZXNzYWdlSGVhZGVyKHRoaXMuc2VuZGVyKTtcbiAgICBjb25zdCByZXN1bHRNZXNzYWdlID0gVG9uV2ViLkNvbnRyYWN0LmNyZWF0ZUNvbW1vbk1zZ0luZm8oaGVhZGVyLCBzdGF0ZUluaXQsIGJvZHkpO1xuICAgIHJldHVybiByZXN1bHRNZXNzYWdlO1xuICB9XG5cbiAgbG9hZElucHV0c0FuZE91dHB1dHMoKTogdm9pZCB7XG4gICAgY29uc3Qgb3V0cHV0czogRW50cnlbXSA9IFtdO1xuICAgIGNvbnN0IGlucHV0czogRW50cnlbXSA9IFtdO1xuICAgIGlucHV0cy5wdXNoKHtcbiAgICAgIGFkZHJlc3M6IHRoaXMuc2VuZGVyLFxuICAgICAgdmFsdWU6IHRoaXMucmVjaXBpZW50LmFtb3VudCxcbiAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICB9KTtcbiAgICBvdXRwdXRzLnB1c2goe1xuICAgICAgYWRkcmVzczogdGhpcy5yZWNpcGllbnQuYWRkcmVzcyxcbiAgICAgIHZhbHVlOiB0aGlzLnJlY2lwaWVudC5hbW91bnQsXG4gICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgfSk7XG4gICAgdGhpcy5fb3V0cHV0cyA9IG91dHB1dHM7XG4gICAgdGhpcy5faW5wdXRzID0gaW5wdXRzO1xuICB9XG5cbiAgZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY2VsbCA9IFRvbldlYi5ib2MuQ2VsbC5vbmVGcm9tQm9jKFRvbldlYi51dGlscy5iYXNlNjRUb0J5dGVzKHJhd1RyYW5zYWN0aW9uKSk7XG5cbiAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2VUcmFuc2ZlcihjZWxsKTtcbiAgICAgIHBhcnNlZC52YWx1ZSA9IHBhcnNlZC52YWx1ZS50b1N0cmluZygpO1xuICAgICAgcGFyc2VkLmZyb21BZGRyZXNzID0gcGFyc2VkLmZyb21BZGRyZXNzLnRvU3RyaW5nKHRydWUsIHRydWUsIHRydWUpO1xuICAgICAgcGFyc2VkLnRvQWRkcmVzcyA9IHBhcnNlZC50b0FkZHJlc3MudG9TdHJpbmcodHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICB0aGlzLnNlbmRlciA9IHBhcnNlZC5mcm9tQWRkcmVzcztcbiAgICAgIHRoaXMucmVjaXBpZW50ID0geyBhZGRyZXNzOiBwYXJzZWQudG9BZGRyZXNzLCBhbW91bnQ6IHBhcnNlZC52YWx1ZSB9O1xuICAgICAgdGhpcy5zZXFubyA9IHBhcnNlZC5zZXFubztcbiAgICAgIHRoaXMucHVibGljS2V5ID0gcGFyc2VkLnB1YmxpY0tleSBhcyBzdHJpbmc7XG4gICAgICB0aGlzLmV4cGlyZVRpbWUgPSBwYXJzZWQuZXhwaXJlQXQ7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSBwYXJzZWQucGF5bG9hZDtcbiAgICAgIHRoaXMuX3NpZ25hdHVyZXMucHVzaChwYXJzZWQuc2lnbmF0dXJlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGV4cGxhaW5UcmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbJ2lkJywgJ291dHB1dHMnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZU91dHB1dHMnLCAnY2hhbmdlQW1vdW50JywgJ2ZlZSddO1xuXG4gICAgY29uc3Qgb3V0cHV0czogVHJhbnNhY3Rpb25SZWNpcGllbnRbXSA9IFt0aGlzLnJlY2lwaWVudF07XG4gICAgY29uc3Qgb3V0cHV0QW1vdW50ID0gdGhpcy5yZWNpcGllbnQuYW1vdW50O1xuICAgIHJldHVybiB7XG4gICAgICBkaXNwbGF5T3JkZXIsXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG91dHB1dHMsXG4gICAgICBvdXRwdXRBbW91bnQsXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgZmVlOiB7IGZlZTogJ1VOS05PV04nIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VUcmFuc2ZlcihjZWxsOiBDZWxsKTogYW55IHtcbiAgICBjb25zdCBzbGljZSA9IChjZWxsIGFzIGFueSkuYmVnaW5QYXJzZSgpO1xuXG4gICAgLy8gaGVhZGVyXG5cbiAgICBpZiAoc2xpY2UubG9hZFVpbnQoMikudG9OdW1iZXIoKSAhPT0gMikgdGhyb3cgRXJyb3IoJ2ludmFsaWQgaGVhZGVyJyk7XG5cbiAgICBjb25zdCBleHRlcm5hbFNvdXJjZUFkZHJlc3MgPSBzbGljZS5sb2FkQWRkcmVzcygpO1xuICAgIGlmIChleHRlcm5hbFNvdXJjZUFkZHJlc3MgIT09IG51bGwpIHRocm93IEVycm9yKCdpbnZhbGlkIGV4dGVybmFsU291cmNlQWRkcmVzcycpO1xuXG4gICAgY29uc3QgZXh0ZXJuYWxEZXN0QWRkcmVzcyA9IHNsaWNlLmxvYWRBZGRyZXNzKCk7XG5cbiAgICBjb25zdCBleHRlcm5hbEltcG9ydEZlZSA9IHNsaWNlLmxvYWRDb2lucygpO1xuICAgIGlmICghZXh0ZXJuYWxJbXBvcnRGZWUuZXEobmV3IEJOKDApKSkgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGV4dGVybmFsSW1wb3J0RmVlJyk7XG5cbiAgICAvLyBzdGF0ZUluaXRcblxuICAgIGxldCBwdWJsaWNLZXk7XG4gICAgaWYgKHNsaWNlLmxvYWRCaXQoKSkge1xuICAgICAgaWYgKHNsaWNlLmxvYWRCaXQoKSkge1xuICAgICAgICBjb25zdCBzdGF0ZUluaXQgPSBzbGljZS5sb2FkUmVmKCk7XG4gICAgICAgIHN0YXRlSW5pdC5sb2FkUmVmKCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBzdGF0ZUluaXQubG9hZFJlZigpO1xuICAgICAgICBjb25zdCBzZXFubyA9IGRhdGEubG9hZFVpbnQoMzIpLnRvTnVtYmVyKCk7XG4gICAgICAgIGlmIChzZXFubyAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNlcW5vJyk7XG4gICAgICAgIGNvbnN0IHdhbGxldElkID0gZGF0YS5sb2FkVWludCgzMikudG9OdW1iZXIoKTtcbiAgICAgICAgaWYgKHdhbGxldElkICE9PSBXQUxMRVRfSUQpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB3YWxsZXQgaWQnKTtcbiAgICAgICAgY29uc3QgcHVibGljS2V5QnVmID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHB1YmxpY0tleUJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHB1YmxpY0tleUJ1ZltpXSA9IGRhdGEubG9hZFVpbnQoOCk7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljS2V5ID0gQnVmZmVyLmZyb20ocHVibGljS2V5QnVmKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYm9keVxuICAgIGNvbnN0IGJvZHlTbGljZSA9IHNsaWNlLmxvYWRCaXQoKSA/IHNsaWNlLmxvYWRSZWYoKSA6IHNsaWNlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZyb21BZGRyZXNzOiBleHRlcm5hbERlc3RBZGRyZXNzLFxuICAgICAgcHVibGljS2V5LFxuICAgICAgLi4udGhpcy5wYXJzZVRyYW5zZmVyQm9keShib2R5U2xpY2UpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHBhcnNlVHJhbnNmZXJCb2R5KHNsaWNlOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKHNsaWNlLmxvYWRCaXRzKDUxMikpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAvLyBzaWduaW5nIG1lc3NhZ2VcblxuICAgIGNvbnN0IHdhbGxldElkID0gc2xpY2UubG9hZFVpbnQoMzIpLnRvTnVtYmVyKCk7XG4gICAgaWYgKHdhbGxldElkICE9PSBXQUxMRVRfSUQpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB3YWxsZXRJZCcpO1xuXG4gICAgY29uc3QgZXhwaXJlQXQgPSBzbGljZS5sb2FkVWludCgzMikudG9OdW1iZXIoKTtcblxuICAgIGNvbnN0IHNlcW5vID0gc2xpY2UubG9hZFVpbnQoMzIpLnRvTnVtYmVyKCk7XG5cbiAgICBjb25zdCBvcCA9IHNsaWNlLmxvYWRVaW50KDgpLnRvTnVtYmVyKCk7XG4gICAgaWYgKG9wICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgb3AnKTtcblxuICAgIGNvbnN0IHNlbmRNb2RlID0gc2xpY2UubG9hZFVpbnQoOCkudG9OdW1iZXIoKTtcbiAgICBpZiAoc2VuZE1vZGUgIT09IDMpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzZW5kTW9kZScpO1xuXG4gICAgbGV0IG9yZGVyID0gc2xpY2UubG9hZFJlZigpO1xuXG4gICAgaWYgKG9yZGVyLmxvYWRCaXQoKSkgdGhyb3cgRXJyb3IoJ2ludmFsaWQgaW50ZXJuYWwgaGVhZGVyJyk7XG4gICAgaWYgKCFvcmRlci5sb2FkQml0KCkpIHRocm93IEVycm9yKCdpbnZhbGlkIGlockRpc2FibGVkJyk7XG4gICAgY29uc3QgYm91bmNlID0gb3JkZXIubG9hZEJpdCgpO1xuICAgIGlmIChvcmRlci5sb2FkQml0KCkpIHRocm93IEVycm9yKCdpbnZhbGlkIGJvdW5jZWQnKTtcbiAgICBjb25zdCBzb3VyY2VBZGRyZXNzID0gb3JkZXIubG9hZEFkZHJlc3MoKTtcbiAgICBpZiAoc291cmNlQWRkcmVzcyAhPT0gbnVsbCkgdGhyb3cgRXJyb3IoJ2ludmFsaWQgZXh0ZXJuYWxTb3VyY2VBZGRyZXNzJyk7XG4gICAgY29uc3QgZGVzdEFkZHJlc3MgPSBvcmRlci5sb2FkQWRkcmVzcygpO1xuICAgIGNvbnN0IHZhbHVlID0gb3JkZXIubG9hZENvaW5zKCk7XG5cbiAgICBpZiAob3JkZXIubG9hZEJpdCgpKSB0aHJvdyBFcnJvcignaW52YWxpZCBjdXJyZW5jeUNvbGxlY3Rpb24nKTtcbiAgICBjb25zdCBpaHJGZWVzID0gb3JkZXIubG9hZENvaW5zKCk7XG4gICAgaWYgKCFpaHJGZWVzLmVxKG5ldyBCTigwKSkpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpaHJGZWVzJyk7XG4gICAgY29uc3QgZndkRmVlcyA9IG9yZGVyLmxvYWRDb2lucygpO1xuICAgIGlmICghZndkRmVlcy5lcShuZXcgQk4oMCkpKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZndkRmVlcycpO1xuICAgIGNvbnN0IGNyZWF0ZWRMdCA9IG9yZGVyLmxvYWRVaW50KDY0KTtcbiAgICBpZiAoIWNyZWF0ZWRMdC5lcShuZXcgQk4oMCkpKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY3JlYXRlZEx0Jyk7XG4gICAgY29uc3QgY3JlYXRlZEF0ID0gb3JkZXIubG9hZFVpbnQoMzIpO1xuICAgIGlmICghY3JlYXRlZEF0LmVxKG5ldyBCTigwKSkpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjcmVhdGVkQXQnKTtcblxuICAgIC8vIG9yZGVyIHN0YXRlSW5pdFxuICAgIGlmIChvcmRlci5sb2FkQml0KCkpIHtcbiAgICAgIG9yZGVyLmxvYWRSZWYoKTsgLy8gZG9uJ3QgcGFyc2Ugc3RhdGVJbml0XG4gICAgfVxuXG4gICAgLy8gb3JkZXIgYm9keVxuICAgIGxldCBwYXlsb2FkO1xuXG4gICAgaWYgKG9yZGVyLmdldEZyZWVCaXRzKCkgPiAwKSB7XG4gICAgICBpZiAob3JkZXIubG9hZEJpdCgpKSB7XG4gICAgICAgIG9yZGVyID0gb3JkZXIubG9hZFJlZigpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3JkZXIuZ2V0RnJlZUJpdHMoKSA+IDMyKSB7XG4gICAgICAgIGNvbnN0IG9wID0gb3JkZXIubG9hZFVpbnQoMzIpO1xuICAgICAgICBjb25zdCBwYXlsb2FkQnl0ZXMgPSBvcmRlci5sb2FkQml0cyhvcmRlci5nZXRGcmVlQml0cygpKTtcbiAgICAgICAgcGF5bG9hZCA9IG9wLmVxKG5ldyBCTigwKSkgPyBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUocGF5bG9hZEJ5dGVzKSA6ICcnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdG9BZGRyZXNzOiBkZXN0QWRkcmVzcyxcbiAgICAgIHZhbHVlLFxuICAgICAgYm91bmNlLFxuICAgICAgc2Vxbm8sXG4gICAgICBleHBpcmVBdCxcbiAgICAgIHBheWxvYWQsXG4gICAgICBzaWduYXR1cmUsXG4gICAgICB3YWxsZXRJZCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVRyYW5zZmVyU3RhdGVJbml0KHNsaWNlOiBhbnkpOiBhbnkge1xuICAgIGlmIChzbGljZSA9PT0gbnVsbCkgcmV0dXJuIHt9O1xuICAgIHNsaWNlLmxvYWRSZWYoKTtcbiAgICBjb25zdCBkYXRhID0gc2xpY2UubG9hZFJlZigpO1xuICAgIGNvbnN0IHNlcW5vID0gZGF0YS5sb2FkVWludCgzMikudG9OdW1iZXIoKTtcbiAgICBpZiAoc2Vxbm8gIT09IDApIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzZXFubycpO1xuICAgIGNvbnN0IHdhbGxldElkID0gZGF0YS5sb2FkVWludCgzMikudG9OdW1iZXIoKTtcbiAgICBpZiAod2FsbGV0SWQgIT09IFdBTExFVF9JRCkgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHdhbGxldCBpZCcpO1xuICAgIGNvbnN0IHB1YmxpY0tleSA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHB1YmxpY0tleS5sZW5ndGg7IGkrKykge1xuICAgICAgcHVibGljS2V5W2ldID0gZGF0YS5sb2FkVWludCg4KTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1YmxpY0tleTogQnVmZmVyLmZyb20ocHVibGljS2V5KS50b1N0cmluZygnaGV4JyksXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
415
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixpQ0FBMkI7QUFHM0IsbURBQXlIO0FBR3pILDJDQVFxQjtBQUVyQixNQUFhLFdBQVksU0FBUSwwQkFBZTtJQWdCOUMsWUFBWSxVQUFnQztRQUMxQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFZO1FBQ2xCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsTUFBTTtRQUNKLE1BQU0sV0FBVyxHQUFHLElBQUksZ0JBQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQ3JFLElBQUksRUFDSixJQUFJLEVBQ0osQ0FBQyxJQUFJLGdCQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUN6RCxDQUFDO1FBQ0YsT0FBTztZQUNMLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBYTtZQUN0QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTztZQUNuQyxnQkFBZ0IsRUFBRSxXQUFXO1lBQzdCLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU07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QUFNLFNBQVMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxPQUFPO1lBQ0wsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztTQUNsRCxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBemJELGtDQXliQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUb25XZWIgZnJvbSAndG9ud2ViJztcbmltcG9ydCB7IEJOIH0gZnJvbSAnYm4uanMnO1xuaW1wb3J0IHsgQ2VsbCB9IGZyb20gJ3RvbndlYi9kaXN0L3R5cGVzL2JvYy9jZWxsJztcblxuaW1wb3J0IHsgQmFzZUtleSwgQmFzZVRyYW5zYWN0aW9uLCBFbnRyeSwgUmVjaXBpZW50LCBUcmFuc2FjdGlvblJlY2lwaWVudCwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiwgVHhEYXRhIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQge1xuICBXSVRIRFJBV19PUENPREUsXG4gIFdBTExFVF9JRCxcbiAgSkVUVE9OX1RSQU5TRkVSX09QQ09ERSxcbiAgVkVTVElOR19DT05UUkFDVF9XQUxMRVRfSUQsXG4gIFRPTl9XSEFMRVNfREVQT1NJVF9PUENPREUsXG4gIFRPTl9XSEFMRVNfV0lUSERSQVdfT1BDT0RFLFxuICBTSU5HTEVfTk9NSU5BVE9SX1dJVEhEUkFXX0FMTF9DT01NRU5ULFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIHB1YmxpYyByZWNpcGllbnQ6IFJlY2lwaWVudDtcbiAgcHVibGljIGJvdW5jZWFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyBmcm9tQWRkcmVzc0JvdW5jZWFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyB0b0FkZHJlc3NCb3VuY2VhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgbWVzc2FnZTogc3RyaW5nO1xuICBwdWJsaWMgd2l0aGRyYXdBbW91bnQ6IHN0cmluZztcbiAgc2Vxbm86IG51bWJlcjtcbiAgZXhwaXJlVGltZTogbnVtYmVyO1xuICBzZW5kZXI6IHN0cmluZztcbiAgcHVibGljS2V5OiBzdHJpbmc7XG4gIGlzVjNDb250cmFjdE1lc3NhZ2U6IGJvb2xlYW47XG4gIHN1Yl93YWxsZXRfaWQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIHVuc2lnbmVkTWVzc2FnZTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgZmluYWxNZXNzYWdlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihjb2luQ29uZmlnKTtcbiAgICB0aGlzLmJvdW5jZWFibGUgPSBmYWxzZTtcbiAgICB0aGlzLmZyb21BZGRyZXNzQm91bmNlYWJsZSA9IHRydWU7XG4gICAgdGhpcy50b0FkZHJlc3NCb3VuY2VhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLmlzVjNDb250cmFjdE1lc3NhZ2UgPSBmYWxzZTtcbiAgfVxuXG4gIGNhblNpZ24oa2V5OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maW5hbE1lc3NhZ2U7XG4gIH1cblxuICB0b0pzb24oKTogVHhEYXRhIHtcbiAgICBjb25zdCBvdGhlckZvcm1hdCA9IG5ldyBUb25XZWIuQWRkcmVzcyh0aGlzLnJlY2lwaWVudC5hZGRyZXNzKS50b1N0cmluZyhcbiAgICAgIHRydWUsXG4gICAgICB0cnVlLFxuICAgICAgIW5ldyBUb25XZWIuQWRkcmVzcyh0aGlzLnJlY2lwaWVudC5hZGRyZXNzKS5pc0JvdW5jZWFibGVcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5faWQgYXMgc3RyaW5nLFxuICAgICAgc2VuZGVyOiB0aGlzLnNlbmRlcixcbiAgICAgIGRlc3RpbmF0aW9uOiB0aGlzLnJlY2lwaWVudC5hZGRyZXNzLFxuICAgICAgZGVzdGluYXRpb25BbGlhczogb3RoZXJGb3JtYXQsXG4gICAgICBhbW91bnQ6IHRoaXMucmVjaXBpZW50LmFtb3VudCxcbiAgICAgIHdpdGhkcmF3QW1vdW50OiB0aGlzLndpdGhkcmF3QW1vdW50LFxuICAgICAgc2Vxbm86IHRoaXMuc2Vxbm8sXG4gICAgICBzdWJfd2FsbGV0X2lkOiB0aGlzLnN1Yl93YWxsZXRfaWQsXG4gICAgICBleHBpcmF0aW9uVGltZTogdGhpcy5leHBpcmVUaW1lLFxuICAgICAgcHVibGljS2V5OiB0aGlzLnB1YmxpY0tleSxcbiAgICAgIHNpZ25hdHVyZTogdGhpcy5fc2lnbmF0dXJlc1swXSxcbiAgICAgIGJvdW5jZWFibGU6IHRoaXMuYm91bmNlYWJsZSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0IHNpZ25hYmxlUGF5bG9hZCgpOiBCdWZmZXIge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh0aGlzLnVuc2lnbmVkTWVzc2FnZSwgJ2hleCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gdHlwZS5cbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblR5cGV9IHRyYW5zYWN0aW9uVHlwZSBUaGUgdHJhbnNhY3Rpb24gdHlwZSB0byBiZSBzZXQuXG4gICAqL1xuICBzZXQgdHJhbnNhY3Rpb25UeXBlKHRyYW5zYWN0aW9uVHlwZTogVHJhbnNhY3Rpb25UeXBlKSB7XG4gICAgdGhpcy5fdHlwZSA9IHRyYW5zYWN0aW9uVHlwZTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5zdWJfd2FsbGV0X2lkKSB7XG4gICAgICBpZiAodGhpcy5pc1YzQ29udHJhY3RNZXNzYWdlKSB7XG4gICAgICAgIHRoaXMuc3ViX3dhbGxldF9pZCA9IFZFU1RJTkdfQ09OVFJBQ1RfV0FMTEVUX0lEO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdWJfd2FsbGV0X2lkID0gV0FMTEVUX0lEO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzaWduaW5nTWVzc2FnZSA9IHRoaXMuY3JlYXRlU2lnbmluZ01lc3NhZ2UodGhpcy5zdWJfd2FsbGV0X2lkLCB0aGlzLnNlcW5vLCB0aGlzLmV4cGlyZVRpbWUpO1xuICAgIGNvbnN0IHNlbmRNb2RlID0gMzsgLy8gZGVmYXVsdCBzZW5kTW9kZVxuICAgIHNpZ25pbmdNZXNzYWdlLmJpdHMud3JpdGVVaW50OChzZW5kTW9kZSk7XG4gICAgY29uc3Qgb3V0TXNnID0gdGhpcy5jcmVhdGVPdXRNc2codGhpcy5yZWNpcGllbnQuYWRkcmVzcywgdGhpcy5yZWNpcGllbnQuYW1vdW50LCB0aGlzLm1lc3NhZ2UpO1xuICAgIHNpZ25pbmdNZXNzYWdlLnJlZnMucHVzaChvdXRNc2cpO1xuICAgIHRoaXMudW5zaWduZWRNZXNzYWdlID0gQnVmZmVyLmZyb20oYXdhaXQgc2lnbmluZ01lc3NhZ2UuaGFzaCgpKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICBjb25zdCBzaWduYXR1cmUgPVxuICAgICAgdGhpcy5fc2lnbmF0dXJlcy5sZW5ndGggPiAwID8gdGhpcy5fc2lnbmF0dXJlc1swXSA6IEJ1ZmZlci5mcm9tKG5ldyBVaW50OEFycmF5KDY0KSkudG9TdHJpbmcoJ2hleCcpO1xuICAgIGNvbnN0IGZpbmFsTWVzc2FnZSA9IGF3YWl0IHRoaXMuY3JlYXRlRXh0ZXJuYWxNZXNzYWdlKHNpZ25pbmdNZXNzYWdlLCB0aGlzLnNlcW5vLCBzaWduYXR1cmUpO1xuXG4gICAgdGhpcy5maW5hbE1lc3NhZ2UgPSBUb25XZWIudXRpbHMuYnl0ZXNUb0Jhc2U2NChhd2FpdCBmaW5hbE1lc3NhZ2UudG9Cb2MoZmFsc2UpKTtcblxuICAgIGNvbnN0IG9yaWdpbmFsVHhJZCA9IFRvbldlYi51dGlscy5ieXRlc1RvQmFzZTY0KGF3YWl0IGZpbmFsTWVzc2FnZS5oYXNoKCkpO1xuICAgIHRoaXMuX2lkID0gb3JpZ2luYWxUeElkLnJlcGxhY2UoL1xcLy9nLCAnXycpLnJlcGxhY2UoL1xcKy9nLCAnLScpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVNpZ25pbmdNZXNzYWdlKHdhbGxldElkLCBzZXFubywgZXhwaXJlQXQpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gbmV3IFRvbldlYi5ib2MuQ2VsbCgpO1xuICAgIG1lc3NhZ2UuYml0cy53cml0ZVVpbnQod2FsbGV0SWQsIDMyKTtcbiAgICAvLyBleHBpcmVBdCBzaG91bGQgYmUgc2V0IGFzIHBlciB0aGUgcHJvdmlkZWQgYXJnIHZhbHVlLCByZWdhcmRsZXNzIG9mIHRoZSBzZXFub1xuICAgIG1lc3NhZ2UuYml0cy53cml0ZVVpbnQoZXhwaXJlQXQsIDMyKTtcbiAgICBtZXNzYWdlLmJpdHMud3JpdGVVaW50KHNlcW5vLCAzMik7XG4gICAgaWYgKCF0aGlzLmlzVjNDb250cmFjdE1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2UuYml0cy53cml0ZVVpbnQoMCwgOCk7IC8vIG9wXG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZU91dE1zZyhhZGRyZXNzLCBhbW91bnQsIHBheWxvYWQpIHtcbiAgICBsZXQgcGF5bG9hZENlbGwgPSBuZXcgVG9uV2ViLmJvYy5DZWxsKCk7XG4gICAgaWYgKHBheWxvYWQpIHtcbiAgICAgIGlmIChwYXlsb2FkLnJlZnMpIHtcbiAgICAgICAgLy8gaXMgQ2VsbFxuICAgICAgICBwYXlsb2FkQ2VsbCA9IHBheWxvYWQ7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwYXlsb2FkID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAocGF5bG9hZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKHBheWxvYWQubGVuZ3RoID4gMjQgJiYgcGF5bG9hZC5zdWJzdHJpbmcoMCwgOCkgPT09IFdJVEhEUkFXX09QQ09ERSkge1xuICAgICAgICAgICAgLy8gcGF5bG9hZCBpcyBhIHdpdGhkcmF3IHR4biBtZXNzYWdlXG4gICAgICAgICAgICBjb25zdCBxdWVyeUlkID0gcGF5bG9hZC5zdWJzdHJpbmcoOCwgMjQpO1xuICAgICAgICAgICAgY29uc3Qgd2l0aGRyYXdBbW91bnQgPSBwYXlsb2FkLnN1YnN0cmluZygyNCk7XG4gICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSAqL1xuICAgICAgICAgICAgY29uc29sZS5sb2coYHBheWxvYWQ6ICR7cGF5bG9hZH0sIHF1ZXJ5SWQ6ICR7cXVlcnlJZH0sIHdpdGhkcmF3QW1vdW50OiAke3dpdGhkcmF3QW1vdW50fWApO1xuICAgICAgICAgICAgcGF5bG9hZENlbGwuYml0cy53cml0ZVVpbnQocGFyc2VJbnQoV0lUSERSQVdfT1BDT0RFLCAxNiksIDMyKTtcbiAgICAgICAgICAgIHBheWxvYWRDZWxsLmJpdHMud3JpdGVVaW50KHBhcnNlSW50KHF1ZXJ5SWQsIDE2KSwgNjQpO1xuICAgICAgICAgICAgcGF5bG9hZENlbGwuYml0cy53cml0ZUNvaW5zKG5ldyBCTih3aXRoZHJhd0Ftb3VudCkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGF5bG9hZC5sZW5ndGggPj0gMjYgJiYgcGF5bG9hZC5zdWJzdHJpbmcoMCwgMTApID09PSBUT05fV0hBTEVTX0RFUE9TSVRfT1BDT0RFKSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeUlkID0gcGF5bG9hZC5zdWJzdHJpbmcoMTAsIDI2KTtcbiAgICAgICAgICAgIHBheWxvYWRDZWxsLmJpdHMud3JpdGVVaW50KHBhcnNlSW50KFRPTl9XSEFMRVNfREVQT1NJVF9PUENPREUsIDEwKSwgMzIpO1xuICAgICAgICAgICAgcGF5bG9hZENlbGwuYml0cy53cml0ZVVpbnQocGFyc2VJbnQocXVlcnlJZCwgMTYpLCA2NCk7XG4gICAgICAgICAgICAvLyBUaGUgVG9uIFdoYWxlcyBwcm90b2NvbCByZXF1aXJlcyBhIHNwZWNpZmljICdnYXMgbGltaXQnIGZpZWxkIGluIHRoZSBwYXlsb2FkXG4gICAgICAgICAgICAvLyBzdHJ1Y3R1cmUgKE9wQ29kZSAtPiBRdWVyeUlkIC0+IEdhc0xpbWl0IC0+IEFtb3VudCkuXG4gICAgICAgICAgICBwYXlsb2FkQ2VsbC5iaXRzLndyaXRlQ29pbnMoVG9uV2ViLnV0aWxzLnRvTmFubygnMScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHBheWxvYWQubGVuZ3RoID49IDI2ICYmIHBheWxvYWQuc3Vic3RyaW5nKDAsIDEwKSA9PT0gVE9OX1dIQUxFU19XSVRIRFJBV19PUENPREUpIHtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5SWQgPSBwYXlsb2FkLnN1YnN0cmluZygxMCwgMjYpO1xuICAgICAgICAgICAgY29uc3QgYW1vdW50U3RyID0gcGF5bG9hZC5zdWJzdHJpbmcoMjYpO1xuXG4gICAgICAgICAgICBwYXlsb2FkQ2VsbC5iaXRzLndyaXRlVWludChwYXJzZUludChUT05fV0hBTEVTX1dJVEhEUkFXX09QQ09ERSwgMTApLCAzMik7XG4gICAgICAgICAgICBwYXlsb2FkQ2VsbC5iaXRzLndyaXRlVWludChuZXcgQk4ocXVlcnlJZCwgMTYpLCA2NCk7XG4gICAgICAgICAgICAvLyBUaGUgVG9uIFdoYWxlcyBwcm90b2NvbCByZXF1aXJlcyBhIHNwZWNpZmljICdnYXMgbGltaXQnIGZpZWxkIGluIHRoZSBwYXlsb2FkXG4gICAgICAgICAgICAvLyBzdHJ1Y3R1cmUgKE9wQ29kZSAtPiBRdWVyeUlkIC0+IEdhc0xpbWl0IC0+IEFtb3VudCkuXG4gICAgICAgICAgICAvLyBXZSBoYXJkY29kZSAxIFRPTiBoZXJlIHRvIG1hdGNoIHRoZSBEZXBvc2l0IGltcGxlbWVudGF0aW9uIGFuZCBlbnN1cmVcbiAgICAgICAgICAgIC8vIHN1ZmZpY2llbnQgZ2FzIGZvciB0aGUgcG9vbCB0byBwcm9jZXNzIHRoZSByZXF1ZXN0LlxuICAgICAgICAgICAgcGF5bG9hZENlbGwuYml0cy53cml0ZUNvaW5zKFRvbldlYi51dGlscy50b05hbm8oJzEnKSk7XG4gICAgICAgICAgICBwYXlsb2FkQ2VsbC5iaXRzLndyaXRlQ29pbnMobmV3IEJOKGFtb3VudFN0cikpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXlsb2FkQ2VsbC5iaXRzLndyaXRlVWludCgwLCAzMik7XG4gICAgICAgICAgICBwYXlsb2FkQ2VsbC5iaXRzLndyaXRlU3RyaW5nKHBheWxvYWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGF5bG9hZENlbGwuYml0cy53cml0ZUJ5dGVzKHBheWxvYWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9yZGVySGVhZGVyID0gVG9uV2ViLkNvbnRyYWN0LmNyZWF0ZUludGVybmFsTWVzc2FnZUhlYWRlcihcbiAgICAgIG5ldyBUb25XZWIuQWRkcmVzcyhhZGRyZXNzKSxcbiAgICAgIG5ldyBCTihhbW91bnQpLFxuICAgICAgdHJ1ZSxcbiAgICAgIHRoaXMuYm91bmNlYWJsZVxuICAgICk7XG4gICAgcmV0dXJuIFRvbldlYi5Db250cmFjdC5jcmVhdGVDb21tb25Nc2dJbmZvKG9yZGVySGVhZGVyLCB1bmRlZmluZWQsIHBheWxvYWRDZWxsKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUV4dGVybmFsTWVzc2FnZShzaWduaW5nTWVzc2FnZTogQ2VsbCwgc2Vxbm86IG51bWJlciwgc2lnbmF0dXJlOiBzdHJpbmcpOiBQcm9taXNlPENlbGw+IHtcbiAgICBjb25zdCBib2R5ID0gbmV3IFRvbldlYi5ib2MuQ2VsbCgpO1xuXG4gICAgYm9keS5iaXRzLndyaXRlQnl0ZXMoQnVmZmVyLmZyb20oc2lnbmF0dXJlLCAnaGV4JykpO1xuICAgIGJvZHkud3JpdGVDZWxsKHNpZ25pbmdNZXNzYWdlKTtcblxuICAgIGxldCBzdGF0ZUluaXQ7XG4gICAgaWYgKHNlcW5vID09PSAwICYmICF0aGlzLmlzVjNDb250cmFjdE1lc3NhZ2UpIHtcbiAgICAgIGNvbnN0IFdhbGxldENsYXNzID0gVG9uV2ViLldhbGxldHMuYWxsWyd2NFIyJ107XG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0Q2xhc3MobmV3IFRvbldlYi5IdHRwUHJvdmlkZXIoKSwge1xuICAgICAgICBwdWJsaWNLZXk6IFRvbldlYi51dGlscy5oZXhUb0J5dGVzKHRoaXMucHVibGljS2V5KSxcbiAgICAgICAgd2M6IDAsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRlcGxveSA9IGF3YWl0IHdhbGxldC5jcmVhdGVTdGF0ZUluaXQoKTtcbiAgICAgIHN0YXRlSW5pdCA9IGRlcGxveS5zdGF0ZUluaXQ7XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVyID0gVG9uV2ViLkNvbnRyYWN0LmNyZWF0ZUV4dGVybmFsTWVzc2FnZUhlYWRlcih0aGlzLnNlbmRlcik7XG4gICAgcmV0dXJuIFRvbldlYi5Db250cmFjdC5jcmVhdGVDb21tb25Nc2dJbmZvKGhlYWRlciwgc3RhdGVJbml0LCBib2R5KTtcbiAgfVxuXG4gIGxvYWRJbnB1dHNBbmRPdXRwdXRzKCk6IHZvaWQge1xuICAgIGNvbnN0IG91dHB1dHM6IEVudHJ5W10gPSBbXTtcbiAgICBjb25zdCBpbnB1dHM6IEVudHJ5W10gPSBbXTtcbiAgICBpbnB1dHMucHVzaCh7XG4gICAgICBhZGRyZXNzOiB0aGlzLnNlbmRlcixcbiAgICAgIHZhbHVlOiB0aGlzLnJlY2lwaWVudC5hbW91bnQsXG4gICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgfSk7XG4gICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgIGFkZHJlc3M6IHRoaXMucmVjaXBpZW50LmFkZHJlc3MsXG4gICAgICB2YWx1ZTogdGhpcy5yZWNpcGllbnQuYW1vdW50LFxuICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgIH0pO1xuICAgIHRoaXMuX291dHB1dHMgPSBvdXRwdXRzO1xuICAgIHRoaXMuX2lucHV0cyA9IGlucHV0cztcbiAgfVxuXG4gIGZyb21SYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNlbGwgPSBUb25XZWIuYm9jLkNlbGwub25lRnJvbUJvYyhUb25XZWIudXRpbHMuYmFzZTY0VG9CeXRlcyhyYXdUcmFuc2FjdGlvbikpO1xuICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5wYXJzZVRyYW5zYWN0aW9uKGNlbGwpO1xuXG4gICAgICB0aGlzLnNlbmRlciA9IHBhcnNlZC5mcm9tQWRkcmVzcztcbiAgICAgIHRoaXMucmVjaXBpZW50ID0geyBhZGRyZXNzOiBwYXJzZWQudG9BZGRyZXNzLCBhbW91bnQ6IHBhcnNlZC52YWx1ZSB9O1xuICAgICAgdGhpcy53aXRoZHJhd0Ftb3VudCA9IHBhcnNlZC53aXRoZHJhd0Ftb3VudDtcbiAgICAgIHRoaXMuc2Vxbm8gPSBwYXJzZWQuc2Vxbm87XG4gICAgICB0aGlzLnB1YmxpY0tleSA9IHBhcnNlZC5wdWJsaWNLZXkgYXMgc3RyaW5nO1xuICAgICAgdGhpcy5leHBpcmVUaW1lID0gcGFyc2VkLmV4cGlyZUF0O1xuICAgICAgdGhpcy5tZXNzYWdlID0gcGFyc2VkLnBheWxvYWQ7XG4gICAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2gocGFyc2VkLnNpZ25hdHVyZSk7XG4gICAgICB0aGlzLmJvdW5jZWFibGUgPSBwYXJzZWQuYm91bmNlO1xuICAgICAgdGhpcy5zdWJfd2FsbGV0X2lkID0gcGFyc2VkLndhbGxldElkO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCByYXcgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGNvbnN0IGRpc3BsYXlPcmRlciA9IFsnaWQnLCAnb3V0cHV0cycsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlT3V0cHV0cycsICdjaGFuZ2VBbW91bnQnLCAnZmVlJywgJ3dpdGhkcmF3QW1vdW50J107XG5cbiAgICBjb25zdCBvdXRwdXRzOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdID0gW3RoaXMucmVjaXBpZW50XTtcbiAgICBjb25zdCBvdXRwdXRBbW91bnQgPSB0aGlzLnJlY2lwaWVudC5hbW91bnQ7XG4gICAgY29uc3Qgd2l0aGRyYXdBbW91bnQgPSB0aGlzLndpdGhkcmF3QW1vdW50O1xuICAgIHJldHVybiB7XG4gICAgICBkaXNwbGF5T3JkZXIsXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG91dHB1dHMsXG4gICAgICBvdXRwdXRBbW91bnQsXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgZmVlOiB7IGZlZTogJ1VOS05PV04nIH0sXG4gICAgICB3aXRoZHJhd0Ftb3VudCxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlVHJhbnNhY3Rpb24oY2VsbDogQ2VsbCk6IGFueSB7XG4gICAgY29uc3Qgc2xpY2UgPSAoY2VsbCBhcyBhbnkpLmJlZ2luUGFyc2UoKTtcblxuICAgIC8vIGhlYWRlclxuXG4gICAgaWYgKHNsaWNlLmxvYWRVaW50KDIpLnRvTnVtYmVyKCkgIT09IDIpIHRocm93IEVycm9yKCdpbnZhbGlkIGhlYWRlcicpO1xuXG4gICAgY29uc3QgZXh0ZXJuYWxTb3VyY2VBZGRyZXNzID0gc2xpY2UubG9hZEFkZHJlc3MoKTtcbiAgICBpZiAoZXh0ZXJuYWxTb3VyY2VBZGRyZXNzICE9PSBudWxsKSB0aHJvdyBFcnJvcignaW52YWxpZCBleHRlcm5hbFNvdXJjZUFkZHJlc3MnKTtcblxuICAgIGNvbnN0IGV4dGVybmFsRGVzdEFkZHJlc3MgPSBzbGljZS5sb2FkQWRkcmVzcygpO1xuXG4gICAgY29uc3QgZXh0ZXJuYWxJbXBvcnRGZWUgPSBzbGljZS5sb2FkQ29pbnMoKTtcbiAgICBpZiAoIWV4dGVybmFsSW1wb3J0RmVlLmVxKG5ldyBCTigwKSkpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBleHRlcm5hbEltcG9ydEZlZScpO1xuXG4gICAgLy8gc3RhdGVJbml0XG5cbiAgICBsZXQgcHVibGljS2V5O1xuICAgIGlmIChzbGljZS5sb2FkQml0KCkpIHtcbiAgICAgIGlmIChzbGljZS5sb2FkQml0KCkpIHtcbiAgICAgICAgY29uc3Qgc3RhdGVJbml0ID0gc2xpY2UubG9hZFJlZigpO1xuICAgICAgICBzdGF0ZUluaXQubG9hZFJlZigpO1xuICAgICAgICBjb25zdCBkYXRhID0gc3RhdGVJbml0LmxvYWRSZWYoKTtcbiAgICAgICAgY29uc3Qgc2Vxbm8gPSBkYXRhLmxvYWRVaW50KDMyKS50b051bWJlcigpO1xuICAgICAgICBpZiAoc2Vxbm8gIT09IDApIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzZXFubycpO1xuICAgICAgICBjb25zdCB3YWxsZXRJZCA9IGRhdGEubG9hZFVpbnQoMzIpLnRvTnVtYmVyKCk7XG4gICAgICAgIGlmICh3YWxsZXRJZCAhPT0gV0FMTEVUX0lEKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgd2FsbGV0IGlkJyk7XG4gICAgICAgIGNvbnN0IHB1YmxpY0tleUJ1ZiA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwdWJsaWNLZXlCdWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBwdWJsaWNLZXlCdWZbaV0gPSBkYXRhLmxvYWRVaW50KDgpO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpY0tleSA9IEJ1ZmZlci5mcm9tKHB1YmxpY0tleUJ1ZikudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGJvZHlcbiAgICBjb25zdCBib2R5U2xpY2UgPSBzbGljZS5sb2FkQml0KCkgPyBzbGljZS5sb2FkUmVmKCkgOiBzbGljZTtcblxuICAgIHJldHVybiB7XG4gICAgICBmcm9tQWRkcmVzczogZXh0ZXJuYWxEZXN0QWRkcmVzcy50b1N0cmluZyh0cnVlLCB0cnVlLCB0aGlzLmZyb21BZGRyZXNzQm91bmNlYWJsZSksXG4gICAgICBwdWJsaWNLZXksXG4gICAgICAuLi50aGlzLnBhcnNlVHJhbnNhY3Rpb25Cb2R5KGJvZHlTbGljZSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VUcmFuc2FjdGlvbkJvZHkoc2xpY2U6IGFueSk6IGFueSB7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gQnVmZmVyLmZyb20oc2xpY2UubG9hZEJpdHMoNTEyKSkudG9TdHJpbmcoJ2hleCcpO1xuICAgIC8vIHNpZ25pbmcgbWVzc2FnZVxuXG4gICAgY29uc3Qgd2FsbGV0SWQgPSBzbGljZS5sb2FkVWludCgzMikudG9OdW1iZXIoKTtcbiAgICBpZiAod2FsbGV0SWQgIT09IFdBTExFVF9JRCAmJiB3YWxsZXRJZCAhPT0gVkVTVElOR19DT05UUkFDVF9XQUxMRVRfSUQpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB3YWxsZXRJZCcpO1xuXG4gICAgY29uc3QgZXhwaXJlQXQgPSBzbGljZS5sb2FkVWludCgzMikudG9OdW1iZXIoKTtcblxuICAgIGNvbnN0IHNlcW5vID0gc2xpY2UubG9hZFVpbnQoMzIpLnRvTnVtYmVyKCk7XG5cbiAgICBjb25zdCBvcCA9IHNsaWNlLmxvYWRVaW50KDgpLnRvTnVtYmVyKCk7XG4gICAgaWYgKG9wICE9PSAzKSB7XG4gICAgICBpZiAob3AgIT09IDApIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBvcCcpO1xuXG4gICAgICBjb25zdCBzZW5kTW9kZSA9IHNsaWNlLmxvYWRVaW50KDgpLnRvTnVtYmVyKCk7XG4gICAgICBpZiAoc2VuZE1vZGUgIT09IDMpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzZW5kTW9kZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzVjNDb250cmFjdE1lc3NhZ2UgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCBvcmRlciA9IHNsaWNlLmxvYWRSZWYoKTtcblxuICAgIGlmIChvcmRlci5sb2FkQml0KCkpIHRocm93IEVycm9yKCdpbnZhbGlkIGludGVybmFsIGhlYWRlcicpO1xuICAgIGlmICghb3JkZXIubG9hZEJpdCgpKSB0aHJvdyBFcnJvcignaW52YWxpZCBpaHJEaXNhYmxlZCcpO1xuICAgIGNvbnN0IGJvdW5jZSA9IG9yZGVyLmxvYWRCaXQoKTtcbiAgICBpZiAob3JkZXIubG9hZEJpdCgpKSB0aHJvdyBFcnJvcignaW52YWxpZCBib3VuY2VkJyk7XG4gICAgY29uc3Qgc291cmNlQWRkcmVzcyA9IG9yZGVyLmxvYWRBZGRyZXNzKCk7XG4gICAgaWYgKHNvdXJjZUFkZHJlc3MgIT09IG51bGwpIHRocm93IEVycm9yKCdpbnZhbGlkIGV4dGVybmFsU291cmNlQWRkcmVzcycpO1xuICAgIGNvbnN0IGRlc3RBZGRyZXNzID0gb3JkZXIubG9hZEFkZHJlc3MoKTtcbiAgICBjb25zdCB2YWx1ZSA9IG9yZGVyLmxvYWRDb2lucygpLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAob3JkZXIubG9hZEJpdCgpKSB0aHJvdyBFcnJvcignaW52YWxpZCBjdXJyZW5jeUNvbGxlY3Rpb24nKTtcbiAgICBjb25zdCBpaHJGZWVzID0gb3JkZXIubG9hZENvaW5zKCk7XG4gICAgaWYgKCFpaHJGZWVzLmVxKG5ldyBCTigwKSkpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpaHJGZWVzJyk7XG4gICAgY29uc3QgZndkRmVlcyA9IG9yZGVyLmxvYWRDb2lucygpO1xuICAgIGlmICghZndkRmVlcy5lcShuZXcgQk4oMCkpKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZndkRmVlcycpO1xuICAgIGNvbnN0IGNyZWF0ZWRMdCA9IG9yZGVyLmxvYWRVaW50KDY0KTtcbiAgICBpZiAoIWNyZWF0ZWRMdC5lcShuZXcgQk4oMCkpKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY3JlYXRlZEx0Jyk7XG4gICAgY29uc3QgY3JlYXRlZEF0ID0gb3JkZXIubG9hZFVpbnQoMzIpO1xuICAgIGlmICghY3JlYXRlZEF0LmVxKG5ldyBCTigwKSkpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjcmVhdGVkQXQnKTtcblxuICAgIC8vIG9yZGVyIHN0YXRlSW5pdFxuICAgIGlmIChvcmRlci5sb2FkQml0KCkpIHtcbiAgICAgIG9yZGVyLmxvYWRSZWYoKTsgLy8gZG9uJ3QgcGFyc2Ugc3RhdGVJbml0XG4gICAgfVxuXG4gICAgLy8gb3JkZXIgYm9keVxuICAgIGxldCBwYXlsb2FkO1xuICAgIGxldCB3aXRoZHJhd0Ftb3VudDtcbiAgICB0aGlzLnRyYW5zYWN0aW9uVHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TZW5kO1xuICAgIGlmIChvcmRlci5nZXRGcmVlQml0cygpID4gMCkge1xuICAgICAgaWYgKG9yZGVyLmxvYWRCaXQoKSkge1xuICAgICAgICBvcmRlciA9IG9yZGVyLmxvYWRSZWYoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9yZGVyLmdldEZyZWVCaXRzKCkgPiAzMikge1xuICAgICAgICBjb25zdCBvcGNvZGUgPSBvcmRlci5sb2FkVWludCgzMikudG9OdW1iZXIoKTtcbiAgICAgICAgaWYgKG9wY29kZSA9PT0gMCkge1xuICAgICAgICAgIGNvbnN0IHBheWxvYWRCeXRlcyA9IG9yZGVyLmxvYWRCaXRzKG9yZGVyLmdldEZyZWVCaXRzKCkpO1xuICAgICAgICAgIHBheWxvYWQgPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUocGF5bG9hZEJ5dGVzKTtcbiAgICAgICAgICBpZiAocGF5bG9hZCA9PT0gJ0RlcG9zaXQnKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uVHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5Ub25XaGFsZXNWZXN0aW5nRGVwb3NpdDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHBheWxvYWQgPT09ICdXaXRoZHJhdycpIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25UeXBlID0gVHJhbnNhY3Rpb25UeXBlLlRvbldoYWxlc1Zlc3RpbmdXaXRoZHJhd2FsO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGF5bG9hZCA9PT0gU0lOR0xFX05PTUlOQVRPUl9XSVRIRFJBV19BTExfQ09NTUVOVCkge1xuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvblR5cGUgPSBUcmFuc2FjdGlvblR5cGUuU2luZ2xlTm9taW5hdG9yV2l0aGRyYXc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG9wY29kZSA9PT0gNDA5Nikge1xuICAgICAgICAgIGNvbnN0IHF1ZXJ5SWQgPSBvcmRlci5sb2FkVWludCg2NCkudG9OdW1iZXIoKTtcbiAgICAgICAgICB3aXRoZHJhd0Ftb3VudCA9IG9yZGVyLmxvYWRDb2lucygpLnRvTnVtYmVyKCkudG9TdHJpbmcoKTtcbiAgICAgICAgICBwYXlsb2FkID0gV0lUSERSQVdfT1BDT0RFICsgcXVlcnlJZC50b1N0cmluZygxNikucGFkU3RhcnQoMTYsICcwJykgKyB3aXRoZHJhd0Ftb3VudDtcbiAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uVHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TaW5nbGVOb21pbmF0b3JXaXRoZHJhdztcbiAgICAgICAgfSBlbHNlIGlmIChvcGNvZGUgPT09IEpFVFRPTl9UUkFOU0ZFUl9PUENPREUpIHtcbiAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uVHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TZW5kVG9rZW47XG4gICAgICAgICAgY29uc3QgcXVlcnlJZCA9IG9yZGVyLmxvYWRVaW50KDY0KS50b051bWJlcigpO1xuICAgICAgICAgIGlmIChxdWVyeUlkICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcXVlcnlJZCBmb3IgamV0dG9uIHRyYW5zZmVyJyk7XG5cbiAgICAgICAgICBjb25zdCBqZXR0b25BbW91bnQgPSBvcmRlci5sb2FkQ29pbnMoKTtcbiAgICAgICAgICBpZiAoIWpldHRvbkFtb3VudC5ndChuZXcgQk4oMCkpKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgamV0dG9uQW1vdW50Jyk7XG5cbiAgICAgICAgICBjb25zdCBqZXR0b25SZWNpcGllbnQgPSBvcmRlci5sb2FkQWRkcmVzcygpO1xuICAgICAgICAgIGlmICghamV0dG9uUmVjaXBpZW50KSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgamV0dG9uUmVjaXBpZW50Jyk7XG5cbiAgICAgICAgICBjb25zdCBmb3J3YXJkZXJBZGRyZXNzID0gb3JkZXIubG9hZEFkZHJlc3MoKTtcbiAgICAgICAgICBpZiAoIWZvcndhcmRlckFkZHJlc3MpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBmb3J3YXJkZXJBZGRyZXNzJyk7XG5cbiAgICAgICAgICBvcmRlci5sb2FkQml0KCk7IC8vIHNraXAgYml0XG5cbiAgICAgICAgICBjb25zdCBmb3J3YXJkVG9uQW1vdW50ID0gb3JkZXIubG9hZENvaW5zKCk7XG4gICAgICAgICAgaWYgKCFmb3J3YXJkVG9uQW1vdW50Lmd0KG5ldyBCTigwKSkpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBmb3J3YXJkVG9uQW1vdW50Jyk7XG5cbiAgICAgICAgICBsZXQgbWVzc2FnZSA9ICcnO1xuICAgICAgICAgIGlmIChvcmRlci5sb2FkQml0KCkpIHtcbiAgICAgICAgICAgIG9yZGVyID0gb3JkZXIubG9hZFJlZigpO1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZU9wY29kZSA9IG9yZGVyLmxvYWRVaW50KDMyKS50b051bWJlcigpO1xuICAgICAgICAgICAgaWYgKG1lc3NhZ2VPcGNvZGUgIT09IDApIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBtZXNzYWdlIG9wY29kZScpO1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZUJ5dGVzID0gb3JkZXIubG9hZEJpdHMob3JkZXIuZ2V0RnJlZUJpdHMoKSk7XG4gICAgICAgICAgICBtZXNzYWdlID0gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKG1lc3NhZ2VCeXRlcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgIGpldHRvbkFtb3VudDogamV0dG9uQW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBqZXR0b25SZWNpcGllbnQ6IGpldHRvblJlY2lwaWVudC50b1N0cmluZyh0cnVlLCB0cnVlLCB0aGlzLnRvQWRkcmVzc0JvdW5jZWFibGUpLFxuICAgICAgICAgICAgZm9yd2FyZGVyQWRkcmVzczogZm9yd2FyZGVyQWRkcmVzcy50b1N0cmluZyh0cnVlLCB0cnVlLCB0aGlzLmZyb21BZGRyZXNzQm91bmNlYWJsZSksXG4gICAgICAgICAgICBmb3J3YXJkVG9uQW1vdW50OiBmb3J3YXJkVG9uQW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAob3Bjb2RlID09PSBwYXJzZUludChUT05fV0hBTEVTX0RFUE9TSVRfT1BDT0RFLCAxMCkpIHtcbiAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uVHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5Ub25XaGFsZXNEZXBvc2l0O1xuICAgICAgICAgIGNvbnN0IHF1ZXJ5SWQgPSBvcmRlci5sb2FkVWludCg2NCkudG9OdW1iZXIoKTtcbiAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBnYXMgbGltaXQsIHdoaWNoIG11c3QgYmUgcmVhZCB0byBhZHZhbmNlIHRoZSBjdXJzb3JcbiAgICAgICAgICAvLyBXZSBkbyBub3QgbmVlZCB0byBzdG9yZSBpdFxuICAgICAgICAgIG9yZGVyLmxvYWRDb2lucygpO1xuICAgICAgICAgIHBheWxvYWQgPSBUT05fV0hBTEVTX0RFUE9TSVRfT1BDT0RFICsgcXVlcnlJZC50b1N0cmluZygxNikucGFkU3RhcnQoMTYsICcwJyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3Bjb2RlID09PSBwYXJzZUludChUT05fV0hBTEVTX1dJVEhEUkFXX09QQ09ERSwgMTApKSB7XG4gICAgICAgICAgdGhpcy50cmFuc2FjdGlvblR5cGUgPSBUcmFuc2FjdGlvblR5cGUuVG9uV2hhbGVzV2l0aGRyYXdhbDtcblxuICAgICAgICAgIGNvbnN0IHF1ZXJ5SWQgPSBvcmRlci5sb2FkVWludCg2NCkudG9OdW1iZXIoKTtcbiAgICAgICAgICBvcmRlci5sb2FkQ29pbnMoKTsgLy8gU2tpcCBHYXMgKEhhcmRjb2RlZCBpbiBidWlsZGVyKVxuICAgICAgICAgIGNvbnN0IGFtb3VudCA9IG9yZGVyLmxvYWRDb2lucygpO1xuXG4gICAgICAgICAgd2l0aGRyYXdBbW91bnQgPSBhbW91bnQudG9TdHJpbmcoKTsgLy8gRGVjaW1hbCBTdHJpbmdcblxuICAgICAgICAgIC8vIFJlY29uc3RydWN0IFBheWxvYWQ6IERlY2ltYWwgT3AgKyBIZXggUXVlcnkgKyBEZWNpbWFsIEFtb3VudFxuICAgICAgICAgIGNvbnN0IHF1ZXJ5SGV4ID0gbmV3IEJOKHF1ZXJ5SWQpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgxNiwgJzAnKTtcbiAgICAgICAgICBwYXlsb2FkID0gVE9OX1dIQUxFU19XSVRIRFJBV19PUENPREUgKyBxdWVyeUhleCArIHdpdGhkcmF3QW1vdW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBheWxvYWQgPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdG9BZGRyZXNzOiBkZXN0QWRkcmVzcy50b1N0cmluZyh0cnVlLCB0cnVlLCB0aGlzLmZyb21BZGRyZXNzQm91bmNlYWJsZSksXG4gICAgICB2YWx1ZSxcbiAgICAgIGJvdW5jZSxcbiAgICAgIHNlcW5vLFxuICAgICAgd2l0aGRyYXdBbW91bnQsXG4gICAgICBleHBpcmVBdCxcbiAgICAgIHBheWxvYWQsXG4gICAgICBzaWduYXR1cmUsXG4gICAgICB3YWxsZXRJZCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVRyYW5zZmVyU3RhdGVJbml0KHNsaWNlOiBhbnkpOiBhbnkge1xuICAgIGlmIChzbGljZSA9PT0gbnVsbCkgcmV0dXJuIHt9O1xuICAgIHNsaWNlLmxvYWRSZWYoKTtcbiAgICBjb25zdCBkYXRhID0gc2xpY2UubG9hZFJlZigpO1xuICAgIGNvbnN0IHNlcW5vID0gZGF0YS5sb2FkVWludCgzMikudG9OdW1iZXIoKTtcbiAgICBpZiAoc2Vxbm8gIT09IDApIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzZXFubycpO1xuICAgIGNvbnN0IHdhbGxldElkID0gZGF0YS5sb2FkVWludCgzMikudG9OdW1iZXIoKTtcbiAgICBpZiAod2FsbGV0SWQgIT09IFdBTExFVF9JRCkgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHdhbGxldCBpZCcpO1xuICAgIGNvbnN0IHB1YmxpY0tleSA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHB1YmxpY0tleS5sZW5ndGg7IGkrKykge1xuICAgICAgcHVibGljS2V5W2ldID0gZGF0YS5sb2FkVWludCg4KTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1YmxpY0tleTogQnVmZmVyLmZyb20ocHVibGljS2V5KS50b1N0cmluZygnaGV4JyksXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import { BaseAddress, BaseKey, BaseTransactionBuilder, FeeOptions, PublicKey as BasePublicKey, TransactionType } from '@bitgo-beta/sdk-core';
|
|
3
|
-
import { Transaction } from './transaction';
|
|
4
1
|
import BigNumber from 'bignumber.js';
|
|
5
2
|
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
|
+
import { BaseAddress, BaseKey, BaseTransactionBuilder, FeeOptions, PublicKey as BasePublicKey, TransactionType } from '@bitgo-beta/sdk-core';
|
|
4
|
+
import { Transaction } from './transaction';
|
|
5
|
+
export declare const WITHDRAW_OPCODE = "00001000";
|
|
6
6
|
export declare abstract class TransactionBuilder extends BaseTransactionBuilder {
|
|
7
7
|
protected _transaction: Transaction;
|
|
8
8
|
private _signatures;
|
|
@@ -27,6 +27,27 @@ export declare abstract class TransactionBuilder extends BaseTransactionBuilder
|
|
|
27
27
|
* @returns {TransactionBuilder} This transaction builder
|
|
28
28
|
*/
|
|
29
29
|
sender(senderAddress: string): this;
|
|
30
|
+
/**
|
|
31
|
+
* Sets the transaction to be bounceable or not.
|
|
32
|
+
*
|
|
33
|
+
* @param {string} bounceable whether the transaction can be bounced
|
|
34
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
35
|
+
*/
|
|
36
|
+
bounceable(bounceable: boolean): this;
|
|
37
|
+
/**
|
|
38
|
+
* Sets the fromAddress to be in bounceable format or not.
|
|
39
|
+
*
|
|
40
|
+
* @param {string} bounceable whether the address format is bounceable
|
|
41
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
42
|
+
*/
|
|
43
|
+
fromAddressBounceable(bounceable: boolean): this;
|
|
44
|
+
/**
|
|
45
|
+
* Sets the toAddress to be in bounceable format or not.
|
|
46
|
+
*
|
|
47
|
+
* @param {string} bounceable whether the address format is bounceable
|
|
48
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
49
|
+
*/
|
|
50
|
+
toAddressBounceable(bounceable: boolean): this;
|
|
30
51
|
fee(feeOptions: FeeOptions): this;
|
|
31
52
|
/** @inheritdoc */
|
|
32
53
|
protected fromImplementation(rawTransaction: string): Transaction;
|
|
@@ -43,8 +64,11 @@ export declare abstract class TransactionBuilder extends BaseTransactionBuilder
|
|
|
43
64
|
/** @inheritdoc */
|
|
44
65
|
validateValue(value: BigNumber): void;
|
|
45
66
|
setMessage(msg: string): TransactionBuilder;
|
|
67
|
+
setWithdrawMessage(): TransactionBuilder;
|
|
46
68
|
sequenceNumber(number: number): TransactionBuilder;
|
|
47
69
|
expireTime(number: number): TransactionBuilder;
|
|
48
70
|
publicKey(key: string): TransactionBuilder;
|
|
71
|
+
isV3ContractMessage(bool: boolean): TransactionBuilder;
|
|
72
|
+
subWalletId(id: number): TransactionBuilder;
|
|
49
73
|
}
|
|
50
74
|
//# sourceMappingURL=transactionBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,WAAW,EACX,OAAO,EACP,sBAAsB,EAEtB,UAAU,EACV,SAAS,IAAI,aAAa,EAE1B,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,eAAO,MAAM,eAAe,aAAa,CAAC;AAE1C,8BAAsB,kBAAmB,SAAQ,sBAAsB;IACrE,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;IACpC,OAAO,CAAC,WAAW,CAAmB;gBAE1B,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK5C;;OAEG;IACH,SAAS,CAAC,QAAQ,KAAK,eAAe,IAAI,eAAe,CAAC;IAE1D,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,WAAW,CAEvC;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,EAEjD;IAED,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAIvD,kBAAkB;IAClB,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAI/D;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAKnC;;;;;OAKG;IACH,UAAU,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAKrC;;;;;OAKG;IACH,qBAAqB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAMhD;;;;;OAKG;IACH,mBAAmB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAU9C,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAIjC,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAMjE,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAQ3D,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAMnE,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAI/B,kBAAkB;IAClB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAIpD,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI;IAQpD,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAMrC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;IAK3C,kBAAkB,IAAI,kBAAkB;IAMxC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB;IAKlD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB;IAK9C,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;IAK1C,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,kBAAkB;IAItD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB;CAI5C"}
|