@bitgo/sdk-coin-atom 1.1.1 → 2.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.
- package/CHANGELOG.md +30 -0
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -2
- package/dist/src/lib/constants.d.ts +4 -0
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +7 -2
- package/dist/src/lib/iface.d.ts +31 -0
- package/dist/src/lib/iface.d.ts.map +1 -0
- package/dist/src/lib/iface.js +3 -0
- package/dist/src/lib/index.d.ts +7 -1
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +25 -5
- package/dist/src/lib/keyPair.js +2 -2
- package/dist/src/lib/transaction.d.ts +46 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +161 -0
- package/dist/src/lib/transactionBuilder.d.ts +75 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder.js +202 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +29 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilderFactory.js +59 -0
- package/dist/src/lib/transferBuilder.d.ts +8 -0
- package/dist/src/lib/transferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferBuilder.js +15 -0
- package/dist/src/lib/utils.d.ts +92 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +213 -0
- package/package.json +12 -8
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.TransactionBuilder = void 0;
|
|
7
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
8
|
+
const transaction_1 = require("./transaction");
|
|
9
|
+
const utils_1 = __importDefault(require("./utils"));
|
|
10
|
+
const assert_1 = __importDefault(require("assert"));
|
|
11
|
+
class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
12
|
+
constructor(_coinConfig) {
|
|
13
|
+
super(_coinConfig);
|
|
14
|
+
this._signatures = [];
|
|
15
|
+
this._transaction = new transaction_1.Transaction(_coinConfig);
|
|
16
|
+
}
|
|
17
|
+
/** @inheritdoc */
|
|
18
|
+
get transaction() {
|
|
19
|
+
return this._transaction;
|
|
20
|
+
}
|
|
21
|
+
/** @inheritdoc */
|
|
22
|
+
set transaction(transaction) {
|
|
23
|
+
this._transaction = transaction;
|
|
24
|
+
}
|
|
25
|
+
/** @inheritdoc */
|
|
26
|
+
signImplementation(key) {
|
|
27
|
+
throw new Error('Method not implemented.');
|
|
28
|
+
}
|
|
29
|
+
/** @inheritDoc */
|
|
30
|
+
addSignature(publicKey, signature) {
|
|
31
|
+
this._signatures.push({ publicKey, signature });
|
|
32
|
+
this.transaction.addSignature(publicKey, signature);
|
|
33
|
+
}
|
|
34
|
+
type(type) {
|
|
35
|
+
this._type = type;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Sets the signerAddress of this transaction.
|
|
39
|
+
* This account will be responsible for paying transaction fees.
|
|
40
|
+
*
|
|
41
|
+
* @param {string} signerAddress the account that is sending this transaction
|
|
42
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
43
|
+
*/
|
|
44
|
+
signerAddress(signerAddress) {
|
|
45
|
+
if (!utils_1.default.isValidAddress(signerAddress)) {
|
|
46
|
+
throw new Error('transactionBuilder: sender isValidAddress check failed :' + signerAddress);
|
|
47
|
+
}
|
|
48
|
+
this._signerAddress = signerAddress;
|
|
49
|
+
return this;
|
|
50
|
+
}
|
|
51
|
+
gasBudget(gasBudget) {
|
|
52
|
+
this.validateGasBudget(gasBudget);
|
|
53
|
+
this._gasBudget = gasBudget;
|
|
54
|
+
return this;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
*
|
|
58
|
+
* @param {number} sequence - sequence data for tx signer
|
|
59
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
60
|
+
*/
|
|
61
|
+
sequence(sequence) {
|
|
62
|
+
this.validateSequence(sequence);
|
|
63
|
+
this._sequence = sequence;
|
|
64
|
+
return this;
|
|
65
|
+
}
|
|
66
|
+
sendMessages(sendMessages) {
|
|
67
|
+
this.validateMessageDataArray(sendMessages);
|
|
68
|
+
this._sendMessages = sendMessages;
|
|
69
|
+
return this;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Initialize the transaction builder fields using the decoded transaction data
|
|
73
|
+
*
|
|
74
|
+
* @param {Transaction} tx the transaction data
|
|
75
|
+
*/
|
|
76
|
+
initBuilder(tx) {
|
|
77
|
+
this._transaction = tx;
|
|
78
|
+
const txData = tx.toJson();
|
|
79
|
+
this.type(txData.type);
|
|
80
|
+
this.gasBudget(txData.gasBudget);
|
|
81
|
+
this.signerAddress(txData.signerAddress);
|
|
82
|
+
this.sendMessages(txData.sendMessages);
|
|
83
|
+
this.gasBudget(txData.gasBudget);
|
|
84
|
+
this.sequence(txData.sequence);
|
|
85
|
+
}
|
|
86
|
+
/** @inheritdoc */
|
|
87
|
+
fromImplementation(rawTransaction) {
|
|
88
|
+
const tx = new transaction_1.Transaction(this._coinConfig);
|
|
89
|
+
this.validateRawTransaction(rawTransaction);
|
|
90
|
+
tx.fromRawTransaction(rawTransaction);
|
|
91
|
+
this.initBuilder(tx);
|
|
92
|
+
return this.transaction;
|
|
93
|
+
}
|
|
94
|
+
/** @inheritdoc */
|
|
95
|
+
async buildImplementation() {
|
|
96
|
+
this.transaction.setAtomTransaction(this.buildAtomTransaction());
|
|
97
|
+
this.transaction.transactionType(this.transactionType);
|
|
98
|
+
return this.transaction;
|
|
99
|
+
}
|
|
100
|
+
buildAtomTransaction() {
|
|
101
|
+
assert_1.default(this._type, new sdk_core_1.BuildTransactionError('type is required before building'));
|
|
102
|
+
assert_1.default(this._signerAddress, new sdk_core_1.BuildTransactionError('signerAddress is required before building'));
|
|
103
|
+
assert_1.default(this._sequence >= 0, new sdk_core_1.BuildTransactionError('sequence is required before building'));
|
|
104
|
+
assert_1.default(this._sendMessages, new sdk_core_1.BuildTransactionError('sendMessages are required before building'));
|
|
105
|
+
assert_1.default(this._gasBudget, new sdk_core_1.BuildTransactionError('gasPrice is required before building'));
|
|
106
|
+
return {
|
|
107
|
+
type: this._type,
|
|
108
|
+
signerAddress: this._signerAddress,
|
|
109
|
+
sequence: this._sequence,
|
|
110
|
+
sendMessages: this._sendMessages,
|
|
111
|
+
gasBudget: this._gasBudget,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
validateAddress(address, addressFormat) {
|
|
115
|
+
if (!utils_1.default.isValidAddress(address.address)) {
|
|
116
|
+
throw new Error('transactionBuilder: address isValidAddress check failed : ' + address.address);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
validateAmountData(amountArray) {
|
|
120
|
+
// TODO [BG-67863]- make the error messages more descriptive of which amount data is failing
|
|
121
|
+
// Do amount checking by casting to numbers/bignumber and comparing as well
|
|
122
|
+
}
|
|
123
|
+
validateGasBudget(gasBudget) {
|
|
124
|
+
if (gasBudget.gas <= 0) {
|
|
125
|
+
throw new sdk_core_1.BuildTransactionError('Invalid gas limit ' + gasBudget.gas);
|
|
126
|
+
}
|
|
127
|
+
this.validateAmountData(gasBudget.amount);
|
|
128
|
+
}
|
|
129
|
+
validateMessageDataArray(sendMessages) {
|
|
130
|
+
for (const msg of sendMessages) {
|
|
131
|
+
this.validateMessageData(msg);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
validateMessageData(messageData) {
|
|
135
|
+
if (!messageData) {
|
|
136
|
+
throw new sdk_core_1.BuildTransactionError(`Invalid MessageData: undefined`);
|
|
137
|
+
}
|
|
138
|
+
if (!messageData.typeUrl) {
|
|
139
|
+
throw new sdk_core_1.BuildTransactionError(`Invalid MessageData typeurl: ` + messageData.typeUrl);
|
|
140
|
+
}
|
|
141
|
+
if (!messageData.value.toAddress) {
|
|
142
|
+
throw new sdk_core_1.BuildTransactionError(`Invalid MessageData value.toAddress: ` + messageData.value.toAddress);
|
|
143
|
+
}
|
|
144
|
+
if (!messageData.value.fromAddress) {
|
|
145
|
+
throw new sdk_core_1.BuildTransactionError(`Invalid MessageData value.fromAddress: ` + messageData.value.fromAddress);
|
|
146
|
+
}
|
|
147
|
+
this.validateAmountData(messageData.value.amount);
|
|
148
|
+
}
|
|
149
|
+
/** @inheritdoc */
|
|
150
|
+
validateKey(key) {
|
|
151
|
+
throw new Error('Method not implemented.');
|
|
152
|
+
}
|
|
153
|
+
/** @inheritdoc */
|
|
154
|
+
validateRawTransaction(rawTransaction) {
|
|
155
|
+
if (!rawTransaction) {
|
|
156
|
+
throw new sdk_core_1.ParseTransactionError('Invalid raw transaction: Undefined');
|
|
157
|
+
}
|
|
158
|
+
if (!utils_1.default.isValidRawTransaction(rawTransaction)) {
|
|
159
|
+
throw new sdk_core_1.ParseTransactionError('Invalid raw transaction');
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/** @inheritdoc */
|
|
163
|
+
validateTransaction(transaction) {
|
|
164
|
+
if (!transaction.atomTransaction) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
this.validateTransactionFields();
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Validates all fields are defined
|
|
171
|
+
*/
|
|
172
|
+
validateTransactionFields() {
|
|
173
|
+
if (this._type === undefined) {
|
|
174
|
+
throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing type');
|
|
175
|
+
}
|
|
176
|
+
if (this._signerAddress === undefined) {
|
|
177
|
+
throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing signerAddress');
|
|
178
|
+
}
|
|
179
|
+
if (this._sequence === undefined) {
|
|
180
|
+
throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing sequence');
|
|
181
|
+
}
|
|
182
|
+
if (this._sendMessages === undefined) {
|
|
183
|
+
throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing sendMessages');
|
|
184
|
+
}
|
|
185
|
+
if (this._gasBudget === undefined) {
|
|
186
|
+
throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing gas budget data');
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/** @inheritdoc */
|
|
190
|
+
validateValue(value) {
|
|
191
|
+
if (value.isLessThan(0)) {
|
|
192
|
+
throw new sdk_core_1.BuildTransactionError('Value cannot be less than zero');
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
validateSequence(sequence) {
|
|
196
|
+
if (sequence < 0) {
|
|
197
|
+
throw new sdk_core_1.BuildTransactionError('Invalid sequence: less than zero');
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
exports.TransactionBuilder = TransactionBuilder;
|
|
202
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBU3lCO0FBQ3pCLCtDQUE0QztBQUM1QyxvREFBNEI7QUFHNUIsb0RBQTRCO0FBSTVCLE1BQXNCLGtCQUFtQixTQUFRLGlDQUFzQjtJQVVyRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQVRiLGdCQUFXLEdBQWdCLEVBQUUsQ0FBQztRQVVwQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUkseUJBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBUUQsa0JBQWtCO0lBQ2xCLElBQWMsV0FBVztRQUN2QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFjLFdBQVcsQ0FBQyxXQUF3QjtRQUNoRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRUQsa0JBQWtCO0lBQ1Isa0JBQWtCLENBQUMsR0FBWTtRQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixZQUFZLENBQUMsU0FBd0IsRUFBRSxTQUFpQjtRQUN0RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsSUFBSSxDQUFDLElBQVk7UUFDZixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNwQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsYUFBYSxDQUFDLGFBQXFC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QUVEOztPQUVHO0lBQ0sseUJBQXlCO1FBQy9CLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDNUIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLG1DQUFtQyxDQUFDLENBQUM7U0FDdEU7UUFDRCxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssU0FBUyxFQUFFO1lBQ3JDLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1NBQy9FO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtZQUNoQyxNQUFNLElBQUksZ0NBQXFCLENBQUMsdUNBQXVDLENBQUMsQ0FBQztTQUMxRTtRQUNELElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxTQUFTLEVBQUU7WUFDcEMsTUFBTSxJQUFJLGdDQUFxQixDQUFDLDJDQUEyQyxDQUFDLENBQUM7U0FDOUU7UUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO1lBQ2pDLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1NBQ2pGO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixhQUFhLENBQUMsS0FBZ0I7UUFDNUIsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1NBQ25FO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFFBQWdCO1FBQ3ZDLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRTtZQUNoQixNQUFNLElBQUksZ0NBQXFCLENBQUMsa0NBQWtDLENBQUMsQ0FBQztTQUNyRTtJQUNILENBQUM7Q0FDRjtBQXBPRCxnREFvT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlQWRkcmVzcyxcbiAgQmFzZUtleSxcbiAgQmFzZVRyYW5zYWN0aW9uQnVpbGRlcixcbiAgQnVpbGRUcmFuc2FjdGlvbkVycm9yLFxuICBQYXJzZVRyYW5zYWN0aW9uRXJyb3IsXG4gIFB1YmxpY0tleSBhcyBCYXNlUHVibGljS2V5LFxuICBTaWduYXR1cmUsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgQXRvbVRyYW5zYWN0aW9uLCBHYXNGZWVMaW1pdERhdGEsIE1lc3NhZ2VEYXRhIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBDb2luIH0gZnJvbSAnQGNvc21qcy9zdGFyZ2F0ZSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF90cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247XG4gIHByaXZhdGUgX3NpZ25hdHVyZXM6IFNpZ25hdHVyZVtdID0gW107XG5cbiAgcHJvdGVjdGVkIF90eXBlOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfc2lnbmVyQWRkcmVzczogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX3NlcXVlbmNlOiBudW1iZXI7XG4gIHByb3RlY3RlZCBfc2VuZE1lc3NhZ2VzOiBNZXNzYWdlRGF0YVtdO1xuICBwcm90ZWN0ZWQgX2dhc0J1ZGdldDogR2FzRmVlTGltaXREYXRhO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvLyBnZXQgYW5kIHNldCByZWdpb25cbiAgLyoqXG4gICAqIFRoZSB0cmFuc2FjdGlvbiB0eXBlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlO1xuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNldCB0cmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzaWduSW1wbGVtZW50YXRpb24oa2V5OiBCYXNlS2V5KTogVHJhbnNhY3Rpb24ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBhZGRTaWduYXR1cmUocHVibGljS2V5OiBCYXNlUHVibGljS2V5LCBzaWduYXR1cmU6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHRoaXMuX3NpZ25hdHVyZXMucHVzaCh7IHB1YmxpY0tleSwgc2lnbmF0dXJlIH0pO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uYWRkU2lnbmF0dXJlKHB1YmxpY0tleSwgc2lnbmF0dXJlKTtcbiAgfVxuXG4gIHR5cGUodHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fdHlwZSA9IHR5cGU7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgc2lnbmVyQWRkcmVzcyBvZiB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKiBUaGlzIGFjY291bnQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgcGF5aW5nIHRyYW5zYWN0aW9uIGZlZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduZXJBZGRyZXNzIHRoZSBhY2NvdW50IHRoYXQgaXMgc2VuZGluZyB0aGlzIHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgc2lnbmVyQWRkcmVzcyhzaWduZXJBZGRyZXNzOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpZiAoIXV0aWxzLmlzVmFsaWRBZGRyZXNzKHNpZ25lckFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RyYW5zYWN0aW9uQnVpbGRlcjogc2VuZGVyIGlzVmFsaWRBZGRyZXNzIGNoZWNrIGZhaWxlZCA6JyArIHNpZ25lckFkZHJlc3MpO1xuICAgIH1cbiAgICB0aGlzLl9zaWduZXJBZGRyZXNzID0gc2lnbmVyQWRkcmVzcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdhc0J1ZGdldChnYXNCdWRnZXQ6IEdhc0ZlZUxpbWl0RGF0YSk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVHYXNCdWRnZXQoZ2FzQnVkZ2V0KTtcbiAgICB0aGlzLl9nYXNCdWRnZXQgPSBnYXNCdWRnZXQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNlcXVlbmNlIC0gc2VxdWVuY2UgZGF0YSBmb3IgdHggc2lnbmVyXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgc2VxdWVuY2Uoc2VxdWVuY2U6IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVTZXF1ZW5jZShzZXF1ZW5jZSk7XG4gICAgdGhpcy5fc2VxdWVuY2UgPSBzZXF1ZW5jZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNlbmRNZXNzYWdlcyhzZW5kTWVzc2FnZXM6IE1lc3NhZ2VEYXRhW10pOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlTWVzc2FnZURhdGFBcnJheShzZW5kTWVzc2FnZXMpO1xuICAgIHRoaXMuX3NlbmRNZXNzYWdlcyA9IHNlbmRNZXNzYWdlcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSB0cmFuc2FjdGlvbiBidWlsZGVyIGZpZWxkcyB1c2luZyB0aGUgZGVjb2RlZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IHR4IHRoZSB0cmFuc2FjdGlvbiBkYXRhXG4gICAqL1xuICBpbml0QnVpbGRlcih0eDogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHR4O1xuICAgIGNvbnN0IHR4RGF0YSA9IHR4LnRvSnNvbigpO1xuICAgIHRoaXMudHlwZSh0eERhdGEudHlwZSk7XG4gICAgdGhpcy5nYXNCdWRnZXQodHhEYXRhLmdhc0J1ZGdldCk7XG4gICAgdGhpcy5zaWduZXJBZGRyZXNzKHR4RGF0YS5zaWduZXJBZGRyZXNzKTtcbiAgICB0aGlzLnNlbmRNZXNzYWdlcyh0eERhdGEuc2VuZE1lc3NhZ2VzKTtcbiAgICB0aGlzLmdhc0J1ZGdldCh0eERhdGEuZ2FzQnVkZ2V0KTtcbiAgICB0aGlzLnNlcXVlbmNlKHR4RGF0YS5zZXF1ZW5jZSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgIHRoaXMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgdHguZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICB0aGlzLmluaXRCdWlsZGVyKHR4KTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRBdG9tVHJhbnNhY3Rpb24odGhpcy5idWlsZEF0b21UcmFuc2FjdGlvbigpKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uVHlwZSh0aGlzLnRyYW5zYWN0aW9uVHlwZSk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRBdG9tVHJhbnNhY3Rpb24oKTogQXRvbVRyYW5zYWN0aW9uIHtcbiAgICBhc3NlcnQodGhpcy5fdHlwZSwgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcigndHlwZSBpcyByZXF1aXJlZCBiZWZvcmUgYnVpbGRpbmcnKSk7XG4gICAgYXNzZXJ0KHRoaXMuX3NpZ25lckFkZHJlc3MsIG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ3NpZ25lckFkZHJlc3MgaXMgcmVxdWlyZWQgYmVmb3JlIGJ1aWxkaW5nJykpO1xuICAgIGFzc2VydCh0aGlzLl9zZXF1ZW5jZSA+PSAwLCBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdzZXF1ZW5jZSBpcyByZXF1aXJlZCBiZWZvcmUgYnVpbGRpbmcnKSk7XG4gICAgYXNzZXJ0KHRoaXMuX3NlbmRNZXNzYWdlcywgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignc2VuZE1lc3NhZ2VzIGFyZSByZXF1aXJlZCBiZWZvcmUgYnVpbGRpbmcnKSk7XG4gICAgYXNzZXJ0KHRoaXMuX2dhc0J1ZGdldCwgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignZ2FzUHJpY2UgaXMgcmVxdWlyZWQgYmVmb3JlIGJ1aWxkaW5nJykpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHRoaXMuX3R5cGUsXG4gICAgICBzaWduZXJBZGRyZXNzOiB0aGlzLl9zaWduZXJBZGRyZXNzLFxuICAgICAgc2VxdWVuY2U6IHRoaXMuX3NlcXVlbmNlLFxuICAgICAgc2VuZE1lc3NhZ2VzOiB0aGlzLl9zZW5kTWVzc2FnZXMsXG4gICAgICBnYXNCdWRnZXQ6IHRoaXMuX2dhc0J1ZGdldCxcbiAgICB9O1xuICB9XG5cbiAgdmFsaWRhdGVBZGRyZXNzKGFkZHJlc3M6IEJhc2VBZGRyZXNzLCBhZGRyZXNzRm9ybWF0Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RyYW5zYWN0aW9uQnVpbGRlcjogYWRkcmVzcyBpc1ZhbGlkQWRkcmVzcyBjaGVjayBmYWlsZWQgOiAnICsgYWRkcmVzcy5hZGRyZXNzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlQW1vdW50RGF0YShhbW91bnRBcnJheTogQ29pbltdKTogdm9pZCB7XG4gICAgLy8gVE9ETyBbQkctNjc4NjNdLSBtYWtlIHRoZSBlcnJvciBtZXNzYWdlcyBtb3JlIGRlc2NyaXB0aXZlIG9mIHdoaWNoIGFtb3VudCBkYXRhIGlzIGZhaWxpbmdcbiAgICAvLyBEbyBhbW91bnQgY2hlY2tpbmcgYnkgY2FzdGluZyB0byBudW1iZXJzL2JpZ251bWJlciBhbmQgY29tcGFyaW5nIGFzIHdlbGxcbiAgfVxuXG4gIHZhbGlkYXRlR2FzQnVkZ2V0KGdhc0J1ZGdldDogR2FzRmVlTGltaXREYXRhKTogdm9pZCB7XG4gICAgaWYgKGdhc0J1ZGdldC5nYXMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBnYXMgbGltaXQgJyArIGdhc0J1ZGdldC5nYXMpO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlQW1vdW50RGF0YShnYXNCdWRnZXQuYW1vdW50KTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVNZXNzYWdlRGF0YUFycmF5KHNlbmRNZXNzYWdlczogTWVzc2FnZURhdGFbXSkge1xuICAgIGZvciAoY29uc3QgbXNnIG9mIHNlbmRNZXNzYWdlcykge1xuICAgICAgdGhpcy52YWxpZGF0ZU1lc3NhZ2VEYXRhKG1zZyk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVNZXNzYWdlRGF0YShtZXNzYWdlRGF0YTogTWVzc2FnZURhdGEpOiB2b2lkIHtcbiAgICBpZiAoIW1lc3NhZ2VEYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIE1lc3NhZ2VEYXRhOiB1bmRlZmluZWRgKTtcbiAgICB9XG4gICAgaWYgKCFtZXNzYWdlRGF0YS50eXBlVXJsKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIE1lc3NhZ2VEYXRhIHR5cGV1cmw6IGAgKyBtZXNzYWdlRGF0YS50eXBlVXJsKTtcbiAgICB9XG4gICAgaWYgKCFtZXNzYWdlRGF0YS52YWx1ZS50b0FkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgTWVzc2FnZURhdGEgdmFsdWUudG9BZGRyZXNzOiBgICsgbWVzc2FnZURhdGEudmFsdWUudG9BZGRyZXNzKTtcbiAgICB9XG4gICAgaWYgKCFtZXNzYWdlRGF0YS52YWx1ZS5mcm9tQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCBNZXNzYWdlRGF0YSB2YWx1ZS5mcm9tQWRkcmVzczogYCArIG1lc3NhZ2VEYXRhLnZhbHVlLmZyb21BZGRyZXNzKTtcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZUFtb3VudERhdGEobWVzc2FnZURhdGEudmFsdWUuYW1vdW50KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUtleShrZXk6IEJhc2VLZXkpOiB2b2lkIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFyYXdUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCByYXcgdHJhbnNhY3Rpb246IFVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICBpZiAoIXV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgaWYgKCF0cmFuc2FjdGlvbi5hdG9tVHJhbnNhY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZVRyYW5zYWN0aW9uRmllbGRzKCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGFsbCBmaWVsZHMgYXJlIGRlZmluZWRcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVUcmFuc2FjdGlvbkZpZWxkcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIHR5cGUnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3NpZ25lckFkZHJlc3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBzaWduZXJBZGRyZXNzJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9zZXF1ZW5jZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIHNlcXVlbmNlJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9zZW5kTWVzc2FnZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBzZW5kTWVzc2FnZXMnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2dhc0J1ZGdldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIGdhcyBidWRnZXQgZGF0YScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVZhbHVlKHZhbHVlOiBCaWdOdW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUuaXNMZXNzVGhhbigwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVmFsdWUgY2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVNlcXVlbmNlKHNlcXVlbmNlOiBudW1iZXIpIHtcbiAgICBpZiAoc2VxdWVuY2UgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHNlcXVlbmNlOiBsZXNzIHRoYW4gemVybycpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { BaseTransactionBuilderFactory } from '@bitgo/sdk-core';
|
|
2
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
3
|
+
import { TransferBuilder } from './transferBuilder';
|
|
4
|
+
import { BaseCoin as CoinConfig } from '@bitgo/statics';
|
|
5
|
+
import { Transaction } from './transaction';
|
|
6
|
+
export declare class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
|
|
7
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
8
|
+
/** @inheritdoc */
|
|
9
|
+
from(raw: string): TransactionBuilder;
|
|
10
|
+
/** @inheritdoc */
|
|
11
|
+
getTransferBuilder(tx?: Transaction): TransferBuilder;
|
|
12
|
+
/** @inheritdoc */
|
|
13
|
+
getWalletInitializationBuilder(): void;
|
|
14
|
+
/**
|
|
15
|
+
* Initialize the builder with the given transaction
|
|
16
|
+
*
|
|
17
|
+
* @param {Transaction | undefined} tx - the transaction used to initialize the builder
|
|
18
|
+
* @param {TransactionBuilder} builder - the builder to be initialized
|
|
19
|
+
* @returns {TransactionBuilder} the builder initialized
|
|
20
|
+
*/
|
|
21
|
+
private initializeBuilder;
|
|
22
|
+
/** Parse the transaction from a raw transaction
|
|
23
|
+
*
|
|
24
|
+
* @param {string} rawTransaction - the raw tx
|
|
25
|
+
* @returns {Transaction} parsedtransaction
|
|
26
|
+
*/
|
|
27
|
+
private parseTransaction;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=transactionBuilderFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAA4C,MAAM,iBAAiB,CAAC;AAC1G,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,qBAAa,yBAA0B,SAAQ,6BAA6B;gBAC9D,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;IAcrC,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,eAAe;IAIrD,kBAAkB;IAClB,8BAA8B,IAAI,IAAI;IAItC;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;CAKzB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TransactionBuilderFactory = void 0;
|
|
4
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
5
|
+
const transferBuilder_1 = require("./transferBuilder");
|
|
6
|
+
const transaction_1 = require("./transaction");
|
|
7
|
+
class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory {
|
|
8
|
+
constructor(_coinConfig) {
|
|
9
|
+
super(_coinConfig);
|
|
10
|
+
}
|
|
11
|
+
/** @inheritdoc */
|
|
12
|
+
from(raw) {
|
|
13
|
+
const tx = this.parseTransaction(raw);
|
|
14
|
+
try {
|
|
15
|
+
switch (tx.type) {
|
|
16
|
+
case sdk_core_1.TransactionType.Send:
|
|
17
|
+
return this.getTransferBuilder(tx);
|
|
18
|
+
default:
|
|
19
|
+
throw new sdk_core_1.InvalidTransactionError('Invalid transaction');
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
catch (e) {
|
|
23
|
+
throw e;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** @inheritdoc */
|
|
27
|
+
getTransferBuilder(tx) {
|
|
28
|
+
return this.initializeBuilder(tx, new transferBuilder_1.TransferBuilder(this._coinConfig));
|
|
29
|
+
}
|
|
30
|
+
/** @inheritdoc */
|
|
31
|
+
getWalletInitializationBuilder() {
|
|
32
|
+
throw new Error('Method not implemented.');
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Initialize the builder with the given transaction
|
|
36
|
+
*
|
|
37
|
+
* @param {Transaction | undefined} tx - the transaction used to initialize the builder
|
|
38
|
+
* @param {TransactionBuilder} builder - the builder to be initialized
|
|
39
|
+
* @returns {TransactionBuilder} the builder initialized
|
|
40
|
+
*/
|
|
41
|
+
initializeBuilder(tx, builder) {
|
|
42
|
+
if (tx) {
|
|
43
|
+
builder.initBuilder(tx);
|
|
44
|
+
}
|
|
45
|
+
return builder;
|
|
46
|
+
}
|
|
47
|
+
/** Parse the transaction from a raw transaction
|
|
48
|
+
*
|
|
49
|
+
* @param {string} rawTransaction - the raw tx
|
|
50
|
+
* @returns {Transaction} parsedtransaction
|
|
51
|
+
*/
|
|
52
|
+
parseTransaction(rawTransaction) {
|
|
53
|
+
const tx = new transaction_1.Transaction(this._coinConfig);
|
|
54
|
+
tx.fromRawTransaction(rawTransaction);
|
|
55
|
+
return tx;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.TransactionBuilderFactory = TransactionBuilderFactory;
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw4Q0FBMEc7QUFFMUcsdURBQW9EO0FBRXBELCtDQUE0QztBQUU1QyxNQUFhLHlCQUEwQixTQUFRLHdDQUE2QjtJQUMxRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQUksQ0FBQyxHQUFXO1FBQ2QsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLElBQUk7WUFDRixRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2YsS0FBSywwQkFBZSxDQUFDLElBQUk7b0JBQ3ZCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNyQztvQkFDRSxNQUFNLElBQUksa0NBQXVCLENBQUMscUJBQXFCLENBQUMsQ0FBQzthQUM1RDtTQUNGO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixNQUFNLENBQUMsQ0FBQztTQUNUO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixrQkFBa0IsQ0FBQyxFQUFnQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxpQ0FBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsOEJBQThCO1FBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssaUJBQWlCLENBQStCLEVBQTJCLEVBQUUsT0FBVTtRQUM3RixJQUFJLEVBQUUsRUFBRTtZQUNOLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDekI7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGdCQUFnQixDQUFDLGNBQXNCO1FBQzdDLE1BQU0sRUFBRSxHQUFHLElBQUkseUJBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0MsRUFBRSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztDQUNGO0FBdERELDhEQXNEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vdHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGZyb20ocmF3OiBzdHJpbmcpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIGNvbnN0IHR4ID0gdGhpcy5wYXJzZVRyYW5zYWN0aW9uKHJhdyk7XG4gICAgdHJ5IHtcbiAgICAgIHN3aXRjaCAodHgudHlwZSkge1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TZW5kOlxuICAgICAgICAgIHJldHVybiB0aGlzLmdldFRyYW5zZmVyQnVpbGRlcih0eCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0VHJhbnNmZXJCdWlsZGVyKHR4PzogVHJhbnNhY3Rpb24pOiBUcmFuc2ZlckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgVHJhbnNmZXJCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBnZXRXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTogdm9pZCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGJ1aWxkZXIgd2l0aCB0aGUgZ2l2ZW4gdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbiB8IHVuZGVmaW5lZH0gdHggLSB0aGUgdHJhbnNhY3Rpb24gdXNlZCB0byBpbml0aWFsaXplIHRoZSBidWlsZGVyXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25CdWlsZGVyfSBidWlsZGVyIC0gdGhlIGJ1aWxkZXIgdG8gYmUgaW5pdGlhbGl6ZWRcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gdGhlIGJ1aWxkZXIgaW5pdGlhbGl6ZWRcbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUJ1aWxkZXI8VCBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlcj4odHg6IFRyYW5zYWN0aW9uIHwgdW5kZWZpbmVkLCBidWlsZGVyOiBUKTogVCB7XG4gICAgaWYgKHR4KSB7XG4gICAgICBidWlsZGVyLmluaXRCdWlsZGVyKHR4KTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cblxuICAvKiogUGFyc2UgdGhlIHRyYW5zYWN0aW9uIGZyb20gYSByYXcgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJhd1RyYW5zYWN0aW9uIC0gdGhlIHJhdyB0eFxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb259IHBhcnNlZHRyYW5zYWN0aW9uXG4gICAqL1xuICBwcml2YXRlIHBhcnNlVHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnKTtcbiAgICB0eC5mcm9tUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIHJldHVybiB0eDtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
2
|
+
import { BaseCoin as CoinConfig } from '@bitgo/statics';
|
|
3
|
+
import { TransactionType } from '@bitgo/sdk-core';
|
|
4
|
+
export declare class TransferBuilder extends TransactionBuilder {
|
|
5
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
6
|
+
protected get transactionType(): TransactionType;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=transferBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transferBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transferBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,qBAAa,eAAgB,SAAQ,kBAAkB;gBACzC,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TransferBuilder = void 0;
|
|
4
|
+
const transactionBuilder_1 = require("./transactionBuilder");
|
|
5
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
6
|
+
class TransferBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
7
|
+
constructor(_coinConfig) {
|
|
8
|
+
super(_coinConfig);
|
|
9
|
+
}
|
|
10
|
+
get transactionType() {
|
|
11
|
+
return sdk_core_1.TransactionType.Send;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.TransferBuilder = TransferBuilder;
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkRBQTBEO0FBRTFELDhDQUFrRDtBQUVsRCxNQUFhLGVBQWdCLFNBQVEsdUNBQWtCO0lBQ3JELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDO0NBQ0Y7QUFSRCwwQ0FRQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNmZXJCdWlsZGVyIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlNlbmQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { BaseUtils, Signature } from '@bitgo/sdk-core';
|
|
3
|
+
import { DecodedTxRaw } from '@cosmjs/proto-signing';
|
|
4
|
+
import { AtomTransaction, GasFeeLimitData, MessageData } from './iface';
|
|
5
|
+
import { TxRaw, SignDoc } from 'cosmjs-types/cosmos/tx/v1beta1/tx';
|
|
6
|
+
export declare class Utils implements BaseUtils {
|
|
7
|
+
/** @inheritdoc */
|
|
8
|
+
isValidBlockId(hash: string): boolean;
|
|
9
|
+
/** @inheritdoc */
|
|
10
|
+
isValidPrivateKey(key: string): boolean;
|
|
11
|
+
/** @inheritdoc */
|
|
12
|
+
isValidPublicKey(key: string): boolean;
|
|
13
|
+
/** @inheritdoc */
|
|
14
|
+
isValidSignature(signature: string): boolean;
|
|
15
|
+
/** @inheritdoc */
|
|
16
|
+
isValidTransactionId(txId: string): boolean;
|
|
17
|
+
validateBlake2b(hash: string): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Checks if raw transaction can be deserialized
|
|
20
|
+
*
|
|
21
|
+
* @param {string} rawTransaction - transaction in base64 string format
|
|
22
|
+
* @returns {boolean} - the validation result
|
|
23
|
+
*/
|
|
24
|
+
isValidRawTransaction(rawTransaction: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Check the raw transaction has a valid format in the blockchain context, throw otherwise.
|
|
27
|
+
*
|
|
28
|
+
* @param {string} rawTransaction - Transaction in base64 string format
|
|
29
|
+
*/
|
|
30
|
+
validateRawTransaction(rawTransaction: string): void;
|
|
31
|
+
isValidAddress(address: string): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Returns whether or not the string is a valid amount
|
|
34
|
+
*
|
|
35
|
+
* @param {number[]} amounts - the amounts to validate
|
|
36
|
+
* @returns {boolean} - the validation result
|
|
37
|
+
*/
|
|
38
|
+
isValidAmounts(amounts: number[]): boolean;
|
|
39
|
+
isValidAmount(amount: number): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Decodes raw tx data into messages, signing info, and fee data
|
|
42
|
+
* @param txHex - raw base64 tx
|
|
43
|
+
*/
|
|
44
|
+
getDecodedTxFromRawBase64(txRaw: string): DecodedTxRaw;
|
|
45
|
+
/**
|
|
46
|
+
* Returns the array of messages in the body of the decoded transaction
|
|
47
|
+
* @param decodedTx
|
|
48
|
+
*/
|
|
49
|
+
private getEncodedMessagesFromDecodedTx;
|
|
50
|
+
/**
|
|
51
|
+
* Arranges a decoded message into our MessageData value interface
|
|
52
|
+
* @param decodedMessage
|
|
53
|
+
* @private
|
|
54
|
+
*/
|
|
55
|
+
private getMessageValueDataFromDecodedMessage;
|
|
56
|
+
/**
|
|
57
|
+
* Returns an array of MessageData[] from an encoded messages array
|
|
58
|
+
* @param encodedMessages
|
|
59
|
+
* @private
|
|
60
|
+
*/
|
|
61
|
+
private getMessageDataFromEncodedMessages;
|
|
62
|
+
/**
|
|
63
|
+
* Pulls the sequence number from a DecodedTxRaw AuthInfo property
|
|
64
|
+
* @param decodedTx
|
|
65
|
+
* @private
|
|
66
|
+
*/
|
|
67
|
+
getSequenceFromDecodedTx(decodedTx: DecodedTxRaw): number;
|
|
68
|
+
/**
|
|
69
|
+
* Pulls the typeUrl from the encoded message of a DecodedTxRaw
|
|
70
|
+
* @param decodedTx
|
|
71
|
+
*/
|
|
72
|
+
getTypeUrlFromDecodedTx(decodedTx: DecodedTxRaw): string;
|
|
73
|
+
getGasBudgetFromDecodedTx(decodedTx: DecodedTxRaw): GasFeeLimitData;
|
|
74
|
+
/**
|
|
75
|
+
* Returns the array of MessageData[] from the decoded transaction
|
|
76
|
+
* @param decodedTx
|
|
77
|
+
*/
|
|
78
|
+
getMessageDataFromDecodedTx(decodedTx: DecodedTxRaw): MessageData[];
|
|
79
|
+
createSignDocFromAtomTransaction(pubkey: any, atomTransaction: AtomTransaction): import("cosmjs-types/cosmos/tx/v1beta1/tx").SignDoc;
|
|
80
|
+
createSignedTxRaw(atomSignature: Signature, signDoc: SignDoc): TxRaw;
|
|
81
|
+
createBase64SignedTxBytesFromSignedTxRaw(signedTxRaw: TxRaw): string;
|
|
82
|
+
isSignedRawTx(rawTransaction: string): boolean;
|
|
83
|
+
getSignerInfoFromRawSignedTx(rawTransaction: string): {
|
|
84
|
+
pubKey: {
|
|
85
|
+
pub: string;
|
|
86
|
+
};
|
|
87
|
+
signature: Buffer;
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
declare const utils: Utils;
|
|
91
|
+
export default utils;
|
|
92
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAyB,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG9E,OAAO,EACL,YAAY,EAOb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGxE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAGnE,qBAAa,KAAM,YAAW,SAAS;IACrC,kBAAkB;IAClB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC,kBAAkB;IAClB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIvC,kBAAkB;IAClB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAItC,kBAAkB;IAClB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI5C,kBAAkB;IAClB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI3C,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAMtC;;;;;OAKG;IACH,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO;IAItD;;;;OAIG;IACH,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IASpD,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOxC;;;;;OAKG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO;IAS1C,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAQtC;;;OAGG;IACH,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY;IAItD;;;OAGG;IACH,OAAO,CAAC,+BAA+B;IAIvC;;;;OAIG;IACH,OAAO,CAAC,qCAAqC;IAQ7C;;;;OAIG;IACH,OAAO,CAAC,iCAAiC;IAYzC;;;;OAIG;IACH,wBAAwB,CAAC,SAAS,EAAE,YAAY,GAAG,MAAM;IAIzD;;;OAGG;IACH,uBAAuB,CAAC,SAAS,EAAE,YAAY,GAAG,MAAM;IAKxD,yBAAyB,CAAC,SAAS,EAAE,YAAY,GAAG,eAAe;IAOnE;;;OAGG;IACH,2BAA2B,CAAC,SAAS,EAAE,YAAY,GAAG,WAAW,EAAE;IAKnE,gCAAgC,CAAC,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,eAAe;IAqB9E,iBAAiB,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,KAAK;IASpE,wCAAwC,CAAC,WAAW,EAAE,KAAK,GAAG,MAAM;IAKpE,aAAa,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO;IAQ9C,4BAA4B,CAAC,cAAc,EAAE,MAAM;;;;;;CAapD;AAED,QAAA,MAAM,KAAK,OAAc,CAAC;AAE1B,eAAe,KAAK,CAAC"}
|