@bitgo-beta/sdk-coin-iota 1.0.1-beta.44 → 1.0.1-beta.441
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/README.md +1 -1
- package/dist/src/iota.d.ts +134 -23
- package/dist/src/iota.d.ts.map +1 -1
- package/dist/src/iota.js +286 -46
- package/dist/src/lib/constants.d.ts +59 -6
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +76 -8
- package/dist/src/lib/iface.d.ts +174 -2
- 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 +1 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +4 -2
- package/dist/src/lib/keyPair.d.ts +100 -6
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +103 -10
- package/dist/src/lib/transaction.d.ts +175 -5
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +390 -6
- package/dist/src/lib/transactionBuilder.d.ts +109 -9
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +200 -14
- package/dist/src/lib/transactionBuilderFactory.d.ts +98 -2
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +132 -5
- package/dist/src/lib/transferBuilder.d.ts +52 -2
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +86 -3
- package/dist/src/lib/transferTransaction.d.ts +124 -0
- package/dist/src/lib/transferTransaction.d.ts.map +1 -0
- package/dist/src/lib/transferTransaction.js +341 -0
- package/dist/src/lib/utils.d.ts +108 -7
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +146 -11
- package/dist/test/resources/iota.d.ts +35 -0
- package/dist/test/resources/iota.d.ts.map +1 -0
- package/dist/test/resources/iota.js +93 -0
- package/dist/test/unit/helpers/testHelpers.d.ts +57 -0
- package/dist/test/unit/helpers/testHelpers.d.ts.map +1 -0
- package/dist/test/unit/helpers/testHelpers.js +176 -0
- package/dist/test/unit/index.d.ts +2 -0
- package/dist/test/unit/index.d.ts.map +1 -0
- package/dist/test/unit/index.js +16 -0
- package/dist/test/unit/iota.d.ts +2 -0
- package/dist/test/unit/iota.d.ts.map +1 -0
- package/dist/test/unit/iota.js +501 -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 +108 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.js +188 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +178 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.js +438 -0
- package/dist/test/unit/transferTransaction.d.ts +2 -0
- package/dist/test/unit/transferTransaction.d.ts.map +1 -0
- package/dist/test/unit/transferTransaction.js +218 -0
- package/dist/test/unit/utils.d.ts +2 -0
- package/dist/test/unit/utils.d.ts.map +1 -0
- package/dist/test/unit/utils.js +252 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +17 -11
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -28
|
@@ -1,17 +1,144 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.TransactionBuilderFactory = void 0;
|
|
4
7
|
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
8
|
+
const transferBuilder_1 = require("./transferBuilder");
|
|
9
|
+
const constants_1 = require("./constants");
|
|
10
|
+
const utils_1 = __importDefault(require("./utils"));
|
|
11
|
+
const transactions_1 = require("@iota/iota-sdk/transactions");
|
|
12
|
+
/**
|
|
13
|
+
* Factory class for creating IOTA transaction builders.
|
|
14
|
+
*
|
|
15
|
+
* This factory provides methods to create transaction builders for different
|
|
16
|
+
* transaction types and to reconstruct transactions from raw transaction data.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const factory = new TransactionBuilderFactory(coins.get('tiota'));
|
|
21
|
+
*
|
|
22
|
+
* // Create a new transfer builder
|
|
23
|
+
* const builder = factory.getTransferBuilder();
|
|
24
|
+
*
|
|
25
|
+
* // Rebuild from raw transaction
|
|
26
|
+
* const rebuiltBuilder = factory.from(rawTxHex);
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
5
29
|
class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory {
|
|
30
|
+
constructor(coinConfig) {
|
|
31
|
+
super(coinConfig);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Wallet initialization is not implemented for IOTA.
|
|
35
|
+
* IOTA wallets are initialized through the TSS flow.
|
|
36
|
+
*
|
|
37
|
+
* @throws Error always - not implemented
|
|
38
|
+
*/
|
|
6
39
|
getWalletInitializationBuilder() {
|
|
7
40
|
throw new Error('Method not implemented.');
|
|
8
41
|
}
|
|
9
|
-
|
|
10
|
-
|
|
42
|
+
/**
|
|
43
|
+
* Creates a transfer transaction builder.
|
|
44
|
+
* Optionally initializes the builder with data from an existing transaction.
|
|
45
|
+
*
|
|
46
|
+
* @param tx - Optional existing transaction to initialize the builder
|
|
47
|
+
* @returns A new TransferBuilder instance
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* // Create a new transfer builder
|
|
52
|
+
* const builder = factory.getTransferBuilder();
|
|
53
|
+
*
|
|
54
|
+
* // Initialize from existing transaction
|
|
55
|
+
* const existingTx = await builder.build();
|
|
56
|
+
* const newBuilder = factory.getTransferBuilder(existingTx);
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
getTransferBuilder(tx) {
|
|
60
|
+
return this.initializeBuilder(tx, new transferBuilder_1.TransferBuilder(this._coinConfig));
|
|
11
61
|
}
|
|
12
|
-
|
|
13
|
-
|
|
62
|
+
/**
|
|
63
|
+
* Reconstructs a transaction builder from raw transaction data.
|
|
64
|
+
* Automatically identifies the transaction type and creates the appropriate builder.
|
|
65
|
+
*
|
|
66
|
+
* @param rawTx - Raw transaction data (hex string or Uint8Array)
|
|
67
|
+
* @returns TransactionBuilder appropriate for the transaction type
|
|
68
|
+
* @throws InvalidTransactionError if the transaction type is not supported
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```typescript
|
|
72
|
+
* // From hex string
|
|
73
|
+
* const builder = factory.from('0x1234...');
|
|
74
|
+
*
|
|
75
|
+
* // From Uint8Array
|
|
76
|
+
* const builder = factory.from(new Uint8Array([...]));
|
|
77
|
+
*
|
|
78
|
+
* // Rebuild and access the transaction
|
|
79
|
+
* const tx = await builder.build();
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
from(rawTx) {
|
|
83
|
+
const rawTxBase64 = utils_1.default.getBase64String(rawTx);
|
|
84
|
+
const transactionType = this.identifyTransactionType(rawTxBase64);
|
|
85
|
+
switch (transactionType) {
|
|
86
|
+
case sdk_core_1.TransactionType.Send:
|
|
87
|
+
return this.createTransferBuilderFromRawTx(rawTxBase64);
|
|
88
|
+
default:
|
|
89
|
+
throw new sdk_core_1.InvalidTransactionError(`Unsupported transaction type: ${transactionType}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Identifies the transaction type by analyzing its commands.
|
|
94
|
+
* Currently supports transfer transactions (Send type).
|
|
95
|
+
*
|
|
96
|
+
* @param rawTx - Raw transaction in base64 format
|
|
97
|
+
* @returns The identified transaction type
|
|
98
|
+
* @throws InvalidTransactionError if transaction contains unsupported commands
|
|
99
|
+
*/
|
|
100
|
+
identifyTransactionType(rawTx) {
|
|
101
|
+
const txData = transactions_1.Transaction.from(rawTx).getData();
|
|
102
|
+
if (this.isTransferTransaction(txData)) {
|
|
103
|
+
return sdk_core_1.TransactionType.Send;
|
|
104
|
+
}
|
|
105
|
+
throw new sdk_core_1.InvalidTransactionError('Transaction contains unsupported commands');
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Checks if a transaction is a transfer transaction by validating its commands.
|
|
109
|
+
* Transfer transactions only contain: SplitCoins, MergeCoins, and TransferObjects commands.
|
|
110
|
+
*
|
|
111
|
+
* @param txData - The parsed transaction data
|
|
112
|
+
* @returns true if all commands are valid transfer commands
|
|
113
|
+
*/
|
|
114
|
+
isTransferTransaction(txData) {
|
|
115
|
+
return txData.commands.every((command) => constants_1.TRANSFER_TRANSACTION_COMMANDS.includes(command.$kind));
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Creates a TransferBuilder from raw transaction data.
|
|
119
|
+
*
|
|
120
|
+
* @param rawTxBase64 - Raw transaction in base64 format
|
|
121
|
+
* @returns Initialized TransferBuilder
|
|
122
|
+
*/
|
|
123
|
+
createTransferBuilderFromRawTx(rawTxBase64) {
|
|
124
|
+
const builder = new transferBuilder_1.TransferBuilder(this._coinConfig);
|
|
125
|
+
builder.fromImplementation(rawTxBase64);
|
|
126
|
+
return builder;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Initializes a builder with data from an existing transaction.
|
|
130
|
+
* If no transaction is provided, returns the builder as-is.
|
|
131
|
+
*
|
|
132
|
+
* @param tx - Optional transaction to initialize from
|
|
133
|
+
* @param builder - The builder to initialize
|
|
134
|
+
* @returns The initialized builder
|
|
135
|
+
*/
|
|
136
|
+
initializeBuilder(tx, builder) {
|
|
137
|
+
if (tx) {
|
|
138
|
+
builder.initBuilder(tx);
|
|
139
|
+
}
|
|
140
|
+
return builder;
|
|
14
141
|
}
|
|
15
142
|
}
|
|
16
143
|
exports.TransactionBuilderFactory = TransactionBuilderFactory;
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFBK0c7QUFFL0csdURBQW9EO0FBRXBELDJDQUE0RDtBQUM1RCxvREFBNEI7QUFDNUIsOERBQTZFO0FBRzdFOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBYSx5QkFBMEIsU0FBUSx3Q0FBNkI7SUFDMUUsWUFBWSxVQUFnQztRQUMxQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksOEJBQThCO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7T0FnQkc7SUFDSCxrQkFBa0IsQ0FBQyxFQUFnQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxpQ0FBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW1CRztJQUNILElBQUksQ0FBQyxLQUEwQjtRQUM3QixNQUFNLFdBQVcsR0FBRyxlQUFLLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVsRSxRQUFRLGVBQWUsRUFBRSxDQUFDO1lBQ3hCLEtBQUssMEJBQWUsQ0FBQyxJQUFJO2dCQUN2QixPQUFPLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMxRDtnQkFDRSxNQUFNLElBQUksa0NBQXVCLENBQUMsaUNBQWlDLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDMUYsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssdUJBQXVCLENBQUMsS0FBMEI7UUFDeEQsTUFBTSxNQUFNLEdBQUcsMEJBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFckQsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN2QyxPQUFPLDBCQUFlLENBQUMsSUFBSSxDQUFDO1FBQzlCLENBQUM7UUFFRCxNQUFNLElBQUksa0NBQXVCLENBQUMsMkNBQTJDLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0sscUJBQXFCLENBQUMsTUFBOEM7UUFDMUUsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMseUNBQTZCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ25HLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLDhCQUE4QixDQUFDLFdBQW1CO1FBQ3hELE1BQU0sT0FBTyxHQUFHLElBQUksaUNBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEQsT0FBTyxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssaUJBQWlCLENBQStCLEVBQTJCLEVBQUUsT0FBVTtRQUM3RixJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ1AsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGO0FBM0hELDhEQTJIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi90cmFuc2ZlckJ1aWxkZXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFRSQU5TRkVSX1RSQU5TQUNUSU9OX0NPTU1BTkRTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gYXMgSW90YVRyYW5zYWN0aW9uIH0gZnJvbSAnQGlvdGEvaW90YS1zZGsvdHJhbnNhY3Rpb25zJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcblxuLyoqXG4gKiBGYWN0b3J5IGNsYXNzIGZvciBjcmVhdGluZyBJT1RBIHRyYW5zYWN0aW9uIGJ1aWxkZXJzLlxuICpcbiAqIFRoaXMgZmFjdG9yeSBwcm92aWRlcyBtZXRob2RzIHRvIGNyZWF0ZSB0cmFuc2FjdGlvbiBidWlsZGVycyBmb3IgZGlmZmVyZW50XG4gKiB0cmFuc2FjdGlvbiB0eXBlcyBhbmQgdG8gcmVjb25zdHJ1Y3QgdHJhbnNhY3Rpb25zIGZyb20gcmF3IHRyYW5zYWN0aW9uIGRhdGEuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3Rpb3RhJykpO1xuICpcbiAqIC8vIENyZWF0ZSBhIG5ldyB0cmFuc2ZlciBidWlsZGVyXG4gKiBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAqXG4gKiAvLyBSZWJ1aWxkIGZyb20gcmF3IHRyYW5zYWN0aW9uXG4gKiBjb25zdCByZWJ1aWx0QnVpbGRlciA9IGZhY3RvcnkuZnJvbShyYXdUeEhleCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogV2FsbGV0IGluaXRpYWxpemF0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgSU9UQS5cbiAgICogSU9UQSB3YWxsZXRzIGFyZSBpbml0aWFsaXplZCB0aHJvdWdoIHRoZSBUU1MgZmxvdy5cbiAgICpcbiAgICogQHRocm93cyBFcnJvciBhbHdheXMgLSBub3QgaW1wbGVtZW50ZWRcbiAgICovXG4gIHB1YmxpYyBnZXRXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTogdm9pZCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0cmFuc2ZlciB0cmFuc2FjdGlvbiBidWlsZGVyLlxuICAgKiBPcHRpb25hbGx5IGluaXRpYWxpemVzIHRoZSBidWlsZGVyIHdpdGggZGF0YSBmcm9tIGFuIGV4aXN0aW5nIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gdHggLSBPcHRpb25hbCBleGlzdGluZyB0cmFuc2FjdGlvbiB0byBpbml0aWFsaXplIHRoZSBidWlsZGVyXG4gICAqIEByZXR1cm5zIEEgbmV3IFRyYW5zZmVyQnVpbGRlciBpbnN0YW5jZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIENyZWF0ZSBhIG5ldyB0cmFuc2ZlciBidWlsZGVyXG4gICAqIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgKlxuICAgKiAvLyBJbml0aWFsaXplIGZyb20gZXhpc3RpbmcgdHJhbnNhY3Rpb25cbiAgICogY29uc3QgZXhpc3RpbmdUeCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICogY29uc3QgbmV3QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKGV4aXN0aW5nVHgpO1xuICAgKiBgYGBcbiAgICovXG4gIGdldFRyYW5zZmVyQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uKTogVHJhbnNmZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IFRyYW5zZmVyQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb25zdHJ1Y3RzIGEgdHJhbnNhY3Rpb24gYnVpbGRlciBmcm9tIHJhdyB0cmFuc2FjdGlvbiBkYXRhLlxuICAgKiBBdXRvbWF0aWNhbGx5IGlkZW50aWZpZXMgdGhlIHRyYW5zYWN0aW9uIHR5cGUgYW5kIGNyZWF0ZXMgdGhlIGFwcHJvcHJpYXRlIGJ1aWxkZXIuXG4gICAqXG4gICAqIEBwYXJhbSByYXdUeCAtIFJhdyB0cmFuc2FjdGlvbiBkYXRhIChoZXggc3RyaW5nIG9yIFVpbnQ4QXJyYXkpXG4gICAqIEByZXR1cm5zIFRyYW5zYWN0aW9uQnVpbGRlciBhcHByb3ByaWF0ZSBmb3IgdGhlIHRyYW5zYWN0aW9uIHR5cGVcbiAgICogQHRocm93cyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciBpZiB0aGUgdHJhbnNhY3Rpb24gdHlwZSBpcyBub3Qgc3VwcG9ydGVkXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gRnJvbSBoZXggc3RyaW5nXG4gICAqIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmZyb20oJzB4MTIzNC4uLicpO1xuICAgKlxuICAgKiAvLyBGcm9tIFVpbnQ4QXJyYXlcbiAgICogY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZnJvbShuZXcgVWludDhBcnJheShbLi4uXSkpO1xuICAgKlxuICAgKiAvLyBSZWJ1aWxkIGFuZCBhY2Nlc3MgdGhlIHRyYW5zYWN0aW9uXG4gICAqIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgKiBgYGBcbiAgICovXG4gIGZyb20ocmF3VHg6IHN0cmluZyB8IFVpbnQ4QXJyYXkpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIGNvbnN0IHJhd1R4QmFzZTY0ID0gdXRpbHMuZ2V0QmFzZTY0U3RyaW5nKHJhd1R4KTtcbiAgICBjb25zdCB0cmFuc2FjdGlvblR5cGUgPSB0aGlzLmlkZW50aWZ5VHJhbnNhY3Rpb25UeXBlKHJhd1R4QmFzZTY0KTtcblxuICAgIHN3aXRjaCAodHJhbnNhY3Rpb25UeXBlKSB7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TZW5kOlxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVUcmFuc2ZlckJ1aWxkZXJGcm9tUmF3VHgocmF3VHhCYXNlNjQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGBVbnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB0eXBlOiAke3RyYW5zYWN0aW9uVHlwZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWRlbnRpZmllcyB0aGUgdHJhbnNhY3Rpb24gdHlwZSBieSBhbmFseXppbmcgaXRzIGNvbW1hbmRzLlxuICAgKiBDdXJyZW50bHkgc3VwcG9ydHMgdHJhbnNmZXIgdHJhbnNhY3Rpb25zIChTZW5kIHR5cGUpLlxuICAgKlxuICAgKiBAcGFyYW0gcmF3VHggLSBSYXcgdHJhbnNhY3Rpb24gaW4gYmFzZTY0IGZvcm1hdFxuICAgKiBAcmV0dXJucyBUaGUgaWRlbnRpZmllZCB0cmFuc2FjdGlvbiB0eXBlXG4gICAqIEB0aHJvd3MgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IgaWYgdHJhbnNhY3Rpb24gY29udGFpbnMgdW5zdXBwb3J0ZWQgY29tbWFuZHNcbiAgICovXG4gIHByaXZhdGUgaWRlbnRpZnlUcmFuc2FjdGlvblR5cGUocmF3VHg6IHN0cmluZyB8IFVpbnQ4QXJyYXkpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIGNvbnN0IHR4RGF0YSA9IElvdGFUcmFuc2FjdGlvbi5mcm9tKHJhd1R4KS5nZXREYXRhKCk7XG5cbiAgICBpZiAodGhpcy5pc1RyYW5zZmVyVHJhbnNhY3Rpb24odHhEYXRhKSkge1xuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TZW5kO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gY29udGFpbnMgdW5zdXBwb3J0ZWQgY29tbWFuZHMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSB0cmFuc2FjdGlvbiBpcyBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uIGJ5IHZhbGlkYXRpbmcgaXRzIGNvbW1hbmRzLlxuICAgKiBUcmFuc2ZlciB0cmFuc2FjdGlvbnMgb25seSBjb250YWluOiBTcGxpdENvaW5zLCBNZXJnZUNvaW5zLCBhbmQgVHJhbnNmZXJPYmplY3RzIGNvbW1hbmRzLlxuICAgKlxuICAgKiBAcGFyYW0gdHhEYXRhIC0gVGhlIHBhcnNlZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqIEByZXR1cm5zIHRydWUgaWYgYWxsIGNvbW1hbmRzIGFyZSB2YWxpZCB0cmFuc2ZlciBjb21tYW5kc1xuICAgKi9cbiAgcHJpdmF0ZSBpc1RyYW5zZmVyVHJhbnNhY3Rpb24odHhEYXRhOiBSZXR1cm5UeXBlPElvdGFUcmFuc2FjdGlvblsnZ2V0RGF0YSddPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eERhdGEuY29tbWFuZHMuZXZlcnkoKGNvbW1hbmQpID0+IFRSQU5TRkVSX1RSQU5TQUNUSU9OX0NPTU1BTkRTLmluY2x1ZGVzKGNvbW1hbmQuJGtpbmQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgVHJhbnNmZXJCdWlsZGVyIGZyb20gcmF3IHRyYW5zYWN0aW9uIGRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSByYXdUeEJhc2U2NCAtIFJhdyB0cmFuc2FjdGlvbiBpbiBiYXNlNjQgZm9ybWF0XG4gICAqIEByZXR1cm5zIEluaXRpYWxpemVkIFRyYW5zZmVyQnVpbGRlclxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVUcmFuc2ZlckJ1aWxkZXJGcm9tUmF3VHgocmF3VHhCYXNlNjQ6IHN0cmluZyk6IFRyYW5zZmVyQnVpbGRlciB7XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBUcmFuc2ZlckJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gICAgYnVpbGRlci5mcm9tSW1wbGVtZW50YXRpb24ocmF3VHhCYXNlNjQpO1xuICAgIHJldHVybiBidWlsZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIGEgYnVpbGRlciB3aXRoIGRhdGEgZnJvbSBhbiBleGlzdGluZyB0cmFuc2FjdGlvbi5cbiAgICogSWYgbm8gdHJhbnNhY3Rpb24gaXMgcHJvdmlkZWQsIHJldHVybnMgdGhlIGJ1aWxkZXIgYXMtaXMuXG4gICAqXG4gICAqIEBwYXJhbSB0eCAtIE9wdGlvbmFsIHRyYW5zYWN0aW9uIHRvIGluaXRpYWxpemUgZnJvbVxuICAgKiBAcGFyYW0gYnVpbGRlciAtIFRoZSBidWlsZGVyIHRvIGluaXRpYWxpemVcbiAgICogQHJldHVybnMgVGhlIGluaXRpYWxpemVkIGJ1aWxkZXJcbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUJ1aWxkZXI8VCBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlcj4odHg6IFRyYW5zYWN0aW9uIHwgdW5kZWZpbmVkLCBidWlsZGVyOiBUKTogVCB7XG4gICAgaWYgKHR4KSB7XG4gICAgICBidWlsZGVyLmluaXRCdWlsZGVyKHR4KTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,8 +1,58 @@
|
|
|
1
1
|
import { TransactionBuilder } from './transactionBuilder';
|
|
2
2
|
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
|
-
import {
|
|
3
|
+
import { TransferTransaction } from './transferTransaction';
|
|
4
|
+
import { TransactionRecipient } from '@bitgo-beta/sdk-core';
|
|
5
|
+
import { Transaction } from './transaction';
|
|
6
|
+
import { TransactionObjectInput } from './iface';
|
|
7
|
+
/**
|
|
8
|
+
* Builder for IOTA transfer transactions.
|
|
9
|
+
* Handles transactions that transfer IOTA tokens from the sender to one or more recipients.
|
|
10
|
+
*/
|
|
4
11
|
export declare class TransferBuilder extends TransactionBuilder {
|
|
5
12
|
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
6
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Sets the recipients for this transfer transaction.
|
|
15
|
+
* @param recipients - Array of recipients with their addresses and amounts
|
|
16
|
+
* @returns This builder for method chaining
|
|
17
|
+
* @throws BuildTransactionError if any recipient is invalid
|
|
18
|
+
*/
|
|
19
|
+
recipients(recipients: TransactionRecipient[]): this;
|
|
20
|
+
/**
|
|
21
|
+
* Sets the payment objects (coin objects) to be used for this transfer.
|
|
22
|
+
* These are the source coins that will be split and transferred to recipients.
|
|
23
|
+
* @param paymentObjects - Array of IOTA coin objects to use for payment
|
|
24
|
+
* @returns This builder for method chaining
|
|
25
|
+
*/
|
|
26
|
+
paymentObjects(paymentObjects: TransactionObjectInput[]): this;
|
|
27
|
+
/**
|
|
28
|
+
* Initializes the builder with data from an existing transfer transaction.
|
|
29
|
+
* @param tx - The source transaction to copy data from
|
|
30
|
+
* @throws BuildTransactionError if transaction is not a TransferTransaction
|
|
31
|
+
*/
|
|
32
|
+
initBuilder(tx: Transaction): void;
|
|
33
|
+
/**
|
|
34
|
+
* Validates that the transaction is of the correct type (TransferTransaction).
|
|
35
|
+
*/
|
|
36
|
+
private validateTransactionType;
|
|
37
|
+
/**
|
|
38
|
+
* Copies transfer-specific data from source transaction.
|
|
39
|
+
*/
|
|
40
|
+
private copyTransferData;
|
|
41
|
+
/**
|
|
42
|
+
* Validates a complete transfer transaction.
|
|
43
|
+
* @param transaction - The transaction to validate
|
|
44
|
+
* @throws BuildTransactionError if transaction is invalid or not a TransferTransaction
|
|
45
|
+
*/
|
|
46
|
+
validateTransaction(transaction?: Transaction): void;
|
|
47
|
+
/**
|
|
48
|
+
* Returns the transaction as a TransferTransaction type.
|
|
49
|
+
*/
|
|
50
|
+
protected get transferTransaction(): TransferTransaction;
|
|
51
|
+
/**
|
|
52
|
+
* Validates all recipients have valid addresses and amounts.
|
|
53
|
+
* @param recipients - Array of recipients to validate
|
|
54
|
+
* @throws BuildTransactionError if any recipient has invalid address or amount
|
|
55
|
+
*/
|
|
56
|
+
private validateRecipients;
|
|
7
57
|
}
|
|
8
58
|
//# sourceMappingURL=transferBuilder.d.ts.map
|
|
@@ -1 +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,qBAAqB,CAAC;AAC7D,OAAO,EAAE,
|
|
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,qBAAqB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAyB,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEnF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEjD;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,kBAAkB;gBACzC,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C;;;;;OAKG;IACH,UAAU,CAAC,UAAU,EAAE,oBAAoB,EAAE,GAAG,IAAI;IAMpD;;;;;OAKG;IACH,cAAc,CAAC,cAAc,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAK9D;;;;OAIG;IACH,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAMlC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAM/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;;;OAIG;IACH,mBAAmB,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI;IAUpD;;OAEG;IACH,SAAS,KAAK,mBAAmB,IAAI,mBAAmB,CAEvD;IAED;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;CAM3B"}
|
|
@@ -1,15 +1,98 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.TransferBuilder = void 0;
|
|
4
7
|
const transactionBuilder_1 = require("./transactionBuilder");
|
|
8
|
+
const transferTransaction_1 = require("./transferTransaction");
|
|
5
9
|
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
10
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
11
|
+
/**
|
|
12
|
+
* Builder for IOTA transfer transactions.
|
|
13
|
+
* Handles transactions that transfer IOTA tokens from the sender to one or more recipients.
|
|
14
|
+
*/
|
|
6
15
|
class TransferBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
7
16
|
constructor(_coinConfig) {
|
|
8
17
|
super(_coinConfig);
|
|
18
|
+
this._transaction = new transferTransaction_1.TransferTransaction(_coinConfig);
|
|
9
19
|
}
|
|
10
|
-
|
|
11
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Sets the recipients for this transfer transaction.
|
|
22
|
+
* @param recipients - Array of recipients with their addresses and amounts
|
|
23
|
+
* @returns This builder for method chaining
|
|
24
|
+
* @throws BuildTransactionError if any recipient is invalid
|
|
25
|
+
*/
|
|
26
|
+
recipients(recipients) {
|
|
27
|
+
this.validateRecipients(recipients);
|
|
28
|
+
this.transferTransaction.recipients = recipients;
|
|
29
|
+
return this;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Sets the payment objects (coin objects) to be used for this transfer.
|
|
33
|
+
* These are the source coins that will be split and transferred to recipients.
|
|
34
|
+
* @param paymentObjects - Array of IOTA coin objects to use for payment
|
|
35
|
+
* @returns This builder for method chaining
|
|
36
|
+
*/
|
|
37
|
+
paymentObjects(paymentObjects) {
|
|
38
|
+
this.transferTransaction.paymentObjects = paymentObjects;
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Initializes the builder with data from an existing transfer transaction.
|
|
43
|
+
* @param tx - The source transaction to copy data from
|
|
44
|
+
* @throws BuildTransactionError if transaction is not a TransferTransaction
|
|
45
|
+
*/
|
|
46
|
+
initBuilder(tx) {
|
|
47
|
+
this.validateTransactionType(tx);
|
|
48
|
+
super.initBuilder(tx);
|
|
49
|
+
this.copyTransferData(tx);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Validates that the transaction is of the correct type (TransferTransaction).
|
|
53
|
+
*/
|
|
54
|
+
validateTransactionType(tx) {
|
|
55
|
+
if (!(tx instanceof transferTransaction_1.TransferTransaction)) {
|
|
56
|
+
throw new sdk_core_1.BuildTransactionError('Transaction must be of type TransferTransaction');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Copies transfer-specific data from source transaction.
|
|
61
|
+
*/
|
|
62
|
+
copyTransferData(tx) {
|
|
63
|
+
this.transferTransaction.recipients = tx.recipients;
|
|
64
|
+
this.transferTransaction.paymentObjects = tx.paymentObjects;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Validates a complete transfer transaction.
|
|
68
|
+
* @param transaction - The transaction to validate
|
|
69
|
+
* @throws BuildTransactionError if transaction is invalid or not a TransferTransaction
|
|
70
|
+
*/
|
|
71
|
+
validateTransaction(transaction) {
|
|
72
|
+
if (!transaction) {
|
|
73
|
+
throw new sdk_core_1.BuildTransactionError('Transaction is required for validation');
|
|
74
|
+
}
|
|
75
|
+
this.validateTransactionType(transaction);
|
|
76
|
+
super.validateTransaction(transaction);
|
|
77
|
+
this.validateRecipients(transaction.recipients);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Returns the transaction as a TransferTransaction type.
|
|
81
|
+
*/
|
|
82
|
+
get transferTransaction() {
|
|
83
|
+
return this._transaction;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Validates all recipients have valid addresses and amounts.
|
|
87
|
+
* @param recipients - Array of recipients to validate
|
|
88
|
+
* @throws BuildTransactionError if any recipient has invalid address or amount
|
|
89
|
+
*/
|
|
90
|
+
validateRecipients(recipients) {
|
|
91
|
+
recipients.forEach((recipient) => {
|
|
92
|
+
this.validateAddress({ address: recipient.address });
|
|
93
|
+
this.validateValue(new bignumber_js_1.default(recipient.amount));
|
|
94
|
+
});
|
|
12
95
|
}
|
|
13
96
|
}
|
|
14
97
|
exports.TransferBuilder = TransferBuilder;
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNkRBQTBEO0FBRTFELCtEQUE0RDtBQUM1RCxtREFBbUY7QUFDbkYsZ0VBQXFDO0FBSXJDOzs7R0FHRztBQUNILE1BQWEsZUFBZ0IsU0FBUSx1Q0FBa0I7SUFDckQsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLHlDQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFVBQVUsQ0FBQyxVQUFrQztRQUMzQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDakQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxjQUFjLENBQUMsY0FBd0M7UUFDckQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFDekQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxFQUFlO1FBQ3pCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUF5QixDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssdUJBQXVCLENBQUMsRUFBZTtRQUM3QyxJQUFJLENBQUMsQ0FBQyxFQUFFLFlBQVkseUNBQW1CLENBQUMsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1FBQ3JGLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxnQkFBZ0IsQ0FBQyxFQUF1QjtRQUM5QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7UUFDcEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDO0lBQzlELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsbUJBQW1CLENBQUMsV0FBeUI7UUFDM0MsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFFRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsQ0FBRSxXQUFtQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRDs7T0FFRztJQUNILElBQWMsbUJBQW1CO1FBQy9CLE9BQU8sSUFBSSxDQUFDLFlBQW1DLENBQUM7SUFDbEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxrQkFBa0IsQ0FBQyxVQUFrQztRQUMzRCxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksc0JBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTFGRCwwQ0EwRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2ZlclRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2ZlclRyYW5zYWN0aW9uJztcbmltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgVHJhbnNhY3Rpb25SZWNpcGllbnQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25PYmplY3RJbnB1dCB9IGZyb20gJy4vaWZhY2UnO1xuXG4vKipcbiAqIEJ1aWxkZXIgZm9yIElPVEEgdHJhbnNmZXIgdHJhbnNhY3Rpb25zLlxuICogSGFuZGxlcyB0cmFuc2FjdGlvbnMgdGhhdCB0cmFuc2ZlciBJT1RBIHRva2VucyBmcm9tIHRoZSBzZW5kZXIgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRyYW5zZmVyQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2ZlclRyYW5zYWN0aW9uKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSByZWNpcGllbnRzIGZvciB0aGlzIHRyYW5zZmVyIHRyYW5zYWN0aW9uLlxuICAgKiBAcGFyYW0gcmVjaXBpZW50cyAtIEFycmF5IG9mIHJlY2lwaWVudHMgd2l0aCB0aGVpciBhZGRyZXNzZXMgYW5kIGFtb3VudHNcbiAgICogQHJldHVybnMgVGhpcyBidWlsZGVyIGZvciBtZXRob2QgY2hhaW5pbmdcbiAgICogQHRocm93cyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IgaWYgYW55IHJlY2lwaWVudCBpcyBpbnZhbGlkXG4gICAqL1xuICByZWNpcGllbnRzKHJlY2lwaWVudHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W10pOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlUmVjaXBpZW50cyhyZWNpcGllbnRzKTtcbiAgICB0aGlzLnRyYW5zZmVyVHJhbnNhY3Rpb24ucmVjaXBpZW50cyA9IHJlY2lwaWVudHM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcGF5bWVudCBvYmplY3RzIChjb2luIG9iamVjdHMpIHRvIGJlIHVzZWQgZm9yIHRoaXMgdHJhbnNmZXIuXG4gICAqIFRoZXNlIGFyZSB0aGUgc291cmNlIGNvaW5zIHRoYXQgd2lsbCBiZSBzcGxpdCBhbmQgdHJhbnNmZXJyZWQgdG8gcmVjaXBpZW50cy5cbiAgICogQHBhcmFtIHBheW1lbnRPYmplY3RzIC0gQXJyYXkgb2YgSU9UQSBjb2luIG9iamVjdHMgdG8gdXNlIGZvciBwYXltZW50XG4gICAqIEByZXR1cm5zIFRoaXMgYnVpbGRlciBmb3IgbWV0aG9kIGNoYWluaW5nXG4gICAqL1xuICBwYXltZW50T2JqZWN0cyhwYXltZW50T2JqZWN0czogVHJhbnNhY3Rpb25PYmplY3RJbnB1dFtdKTogdGhpcyB7XG4gICAgdGhpcy50cmFuc2ZlclRyYW5zYWN0aW9uLnBheW1lbnRPYmplY3RzID0gcGF5bWVudE9iamVjdHM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGJ1aWxkZXIgd2l0aCBkYXRhIGZyb20gYW4gZXhpc3RpbmcgdHJhbnNmZXIgdHJhbnNhY3Rpb24uXG4gICAqIEBwYXJhbSB0eCAtIFRoZSBzb3VyY2UgdHJhbnNhY3Rpb24gdG8gY29weSBkYXRhIGZyb21cbiAgICogQHRocm93cyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IgaWYgdHJhbnNhY3Rpb24gaXMgbm90IGEgVHJhbnNmZXJUcmFuc2FjdGlvblxuICAgKi9cbiAgaW5pdEJ1aWxkZXIodHg6IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy52YWxpZGF0ZVRyYW5zYWN0aW9uVHlwZSh0eCk7XG4gICAgc3VwZXIuaW5pdEJ1aWxkZXIodHgpO1xuICAgIHRoaXMuY29weVRyYW5zZmVyRGF0YSh0eCBhcyBUcmFuc2ZlclRyYW5zYWN0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhhdCB0aGUgdHJhbnNhY3Rpb24gaXMgb2YgdGhlIGNvcnJlY3QgdHlwZSAoVHJhbnNmZXJUcmFuc2FjdGlvbikuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlVHJhbnNhY3Rpb25UeXBlKHR4OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIGlmICghKHR4IGluc3RhbmNlb2YgVHJhbnNmZXJUcmFuc2FjdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIG11c3QgYmUgb2YgdHlwZSBUcmFuc2ZlclRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvcGllcyB0cmFuc2Zlci1zcGVjaWZpYyBkYXRhIGZyb20gc291cmNlIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBjb3B5VHJhbnNmZXJEYXRhKHR4OiBUcmFuc2ZlclRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy50cmFuc2ZlclRyYW5zYWN0aW9uLnJlY2lwaWVudHMgPSB0eC5yZWNpcGllbnRzO1xuICAgIHRoaXMudHJhbnNmZXJUcmFuc2FjdGlvbi5wYXltZW50T2JqZWN0cyA9IHR4LnBheW1lbnRPYmplY3RzO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhIGNvbXBsZXRlIHRyYW5zZmVyIHRyYW5zYWN0aW9uLlxuICAgKiBAcGFyYW0gdHJhbnNhY3Rpb24gLSBUaGUgdHJhbnNhY3Rpb24gdG8gdmFsaWRhdGVcbiAgICogQHRocm93cyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IgaWYgdHJhbnNhY3Rpb24gaXMgaW52YWxpZCBvciBub3QgYSBUcmFuc2ZlclRyYW5zYWN0aW9uXG4gICAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uPzogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBpcyByZXF1aXJlZCBmb3IgdmFsaWRhdGlvbicpO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWRhdGVUcmFuc2FjdGlvblR5cGUodHJhbnNhY3Rpb24pO1xuICAgIHN1cGVyLnZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pO1xuICAgIHRoaXMudmFsaWRhdGVSZWNpcGllbnRzKCh0cmFuc2FjdGlvbiBhcyBUcmFuc2ZlclRyYW5zYWN0aW9uKS5yZWNpcGllbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBhcyBhIFRyYW5zZmVyVHJhbnNhY3Rpb24gdHlwZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNmZXJUcmFuc2FjdGlvbigpOiBUcmFuc2ZlclRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb24gYXMgVHJhbnNmZXJUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYWxsIHJlY2lwaWVudHMgaGF2ZSB2YWxpZCBhZGRyZXNzZXMgYW5kIGFtb3VudHMuXG4gICAqIEBwYXJhbSByZWNpcGllbnRzIC0gQXJyYXkgb2YgcmVjaXBpZW50cyB0byB2YWxpZGF0ZVxuICAgKiBAdGhyb3dzIEJ1aWxkVHJhbnNhY3Rpb25FcnJvciBpZiBhbnkgcmVjaXBpZW50IGhhcyBpbnZhbGlkIGFkZHJlc3Mgb3IgYW1vdW50XG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUmVjaXBpZW50cyhyZWNpcGllbnRzOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdKTogdm9pZCB7XG4gICAgcmVjaXBpZW50cy5mb3JFYWNoKChyZWNpcGllbnQpID0+IHtcbiAgICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzczogcmVjaXBpZW50LmFkZHJlc3MgfSk7XG4gICAgICB0aGlzLnZhbGlkYXRlVmFsdWUobmV3IEJpZ051bWJlcihyZWNpcGllbnQuYW1vdW50KSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { TransactionRecipient } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
|
+
import { Transaction } from './transaction';
|
|
4
|
+
import { TransactionExplanation, TransactionObjectInput, TransferTxData, TxData } from './iface';
|
|
5
|
+
export declare class TransferTransaction extends Transaction {
|
|
6
|
+
private _recipients;
|
|
7
|
+
private _paymentObjects?;
|
|
8
|
+
constructor(coinConfig: Readonly<CoinConfig>);
|
|
9
|
+
get recipients(): TransactionRecipient[];
|
|
10
|
+
set recipients(value: TransactionRecipient[]);
|
|
11
|
+
get paymentObjects(): TransactionObjectInput[] | undefined;
|
|
12
|
+
set paymentObjects(value: TransactionObjectInput[] | undefined);
|
|
13
|
+
/**
|
|
14
|
+
* @inheritDoc
|
|
15
|
+
*/
|
|
16
|
+
addInputsAndOutputs(): void;
|
|
17
|
+
toJson(): TransferTxData;
|
|
18
|
+
parseFromJSON(txData: TransferTxData): void;
|
|
19
|
+
/**
|
|
20
|
+
* Parses a transfer transaction from its broadcast format (base64 or raw bytes).
|
|
21
|
+
* Extracts recipients, amounts, and payment objects from the transaction data.
|
|
22
|
+
*/
|
|
23
|
+
parseFromBroadcastTx(tx: string | Uint8Array): void;
|
|
24
|
+
/**
|
|
25
|
+
* Validates that the transaction only contains supported transfer commands.
|
|
26
|
+
*/
|
|
27
|
+
private validateTransferCommands;
|
|
28
|
+
/**
|
|
29
|
+
* Parses transaction inputs to extract objects, amounts, and receiver addresses.
|
|
30
|
+
*/
|
|
31
|
+
private parseTransactionInputs;
|
|
32
|
+
/**
|
|
33
|
+
* Validates that the number of amounts matches the number of receivers.
|
|
34
|
+
*/
|
|
35
|
+
private validateAmountsMatchReceivers;
|
|
36
|
+
/**
|
|
37
|
+
* Assigns parsed input objects to either gas payment objects or payment objects.
|
|
38
|
+
* If no gas objects exist and sender pays own gas, objects become gas objects.
|
|
39
|
+
* Otherwise, they become payment objects.
|
|
40
|
+
*/
|
|
41
|
+
private assignParsedObjects;
|
|
42
|
+
/**
|
|
43
|
+
* Creates and assigns recipients from parsed addresses and amounts.
|
|
44
|
+
*/
|
|
45
|
+
private assignRecipients;
|
|
46
|
+
protected messageWithIntent(message: Uint8Array): Uint8Array;
|
|
47
|
+
/**
|
|
48
|
+
* Populates the IOTA transaction with inputs and commands for the transfer.
|
|
49
|
+
* This determines which objects to use for payment (either payment objects or gas objects),
|
|
50
|
+
* consolidates them into a single coin, and then splits/transfers to recipients.
|
|
51
|
+
*/
|
|
52
|
+
protected populateTxInputsAndCommands(): void;
|
|
53
|
+
/**
|
|
54
|
+
* Determines which objects to use as the payment source and consolidates them.
|
|
55
|
+
* If payment objects are provided, use those. Otherwise, if the sender is paying
|
|
56
|
+
* their own gas, use the gas objects for payment.
|
|
57
|
+
*/
|
|
58
|
+
private getConsolidatedSourceCoin;
|
|
59
|
+
/**
|
|
60
|
+
* Checks if payment objects exist and if gas objects should be used instead.
|
|
61
|
+
* Gas objects are used when: no payment objects exist AND sender pays their own gas.
|
|
62
|
+
*/
|
|
63
|
+
private hasPaymentObjects;
|
|
64
|
+
/**
|
|
65
|
+
* Consolidates payment objects into a single coin object.
|
|
66
|
+
* If multiple payment objects exist, they are merged in batches.
|
|
67
|
+
*/
|
|
68
|
+
private consolidatePaymentObjects;
|
|
69
|
+
/**
|
|
70
|
+
* Consolidates gas payment objects into a single coin object.
|
|
71
|
+
* If the number of gas objects exceeds the maximum, they are merged in batches.
|
|
72
|
+
*/
|
|
73
|
+
private consolidateGasObjects;
|
|
74
|
+
/**
|
|
75
|
+
* Merges multiple coin objects into a target coin in batches.
|
|
76
|
+
* This is necessary because IOTA has limits on the number of objects per merge command.
|
|
77
|
+
*
|
|
78
|
+
* @param targetCoin - The coin to merge into
|
|
79
|
+
* @param objectsToMerge - Array of objects to merge
|
|
80
|
+
* @param batchSize - Maximum number of objects to merge per batch
|
|
81
|
+
* @returns The consolidated coin object
|
|
82
|
+
*/
|
|
83
|
+
private mergeObjectsInBatches;
|
|
84
|
+
/**
|
|
85
|
+
* Splits the source coin into the amounts needed for each recipient and transfers them.
|
|
86
|
+
* This creates split coin commands for all recipient amounts, then transfer commands
|
|
87
|
+
* to send each split coin to the corresponding recipient.
|
|
88
|
+
*/
|
|
89
|
+
private splitAndTransferToRecipients;
|
|
90
|
+
/**
|
|
91
|
+
* Validates all transfer transaction data before building.
|
|
92
|
+
* Checks recipients, payment objects, and ensures no duplicate object IDs.
|
|
93
|
+
*/
|
|
94
|
+
protected validateTxDataImplementation(): void;
|
|
95
|
+
/**
|
|
96
|
+
* Validates that recipients exist and don't exceed the maximum allowed.
|
|
97
|
+
*/
|
|
98
|
+
private validateRecipientsList;
|
|
99
|
+
/**
|
|
100
|
+
* Validates that either payment objects or gas objects exist for funding the transfer.
|
|
101
|
+
* When a gas sponsor is used, payment objects are required.
|
|
102
|
+
* Otherwise, either payment objects or gas objects can be used.
|
|
103
|
+
*/
|
|
104
|
+
private validatePaymentObjectsExist;
|
|
105
|
+
/**
|
|
106
|
+
* Validates that there are no duplicate object IDs within payment objects,
|
|
107
|
+
* gas payment objects, or between the two groups.
|
|
108
|
+
*/
|
|
109
|
+
private validateNoDuplicateObjects;
|
|
110
|
+
/**
|
|
111
|
+
* Helper to check for duplicate IDs in an array.
|
|
112
|
+
*/
|
|
113
|
+
private checkForDuplicateIds;
|
|
114
|
+
/**
|
|
115
|
+
* @inheritDoc
|
|
116
|
+
* Provides a human-readable explanation of the transfer transaction.
|
|
117
|
+
*/
|
|
118
|
+
protected explainTransactionImplementation(_json: TxData, explanationResult: TransactionExplanation): TransactionExplanation;
|
|
119
|
+
/**
|
|
120
|
+
* Calculates the total amount being transferred to all recipients.
|
|
121
|
+
*/
|
|
122
|
+
private calculateTotalOutputAmount;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=transferTransaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transferTransaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transferTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,oBAAoB,EAAmB,MAAM,sBAAsB,CAAC;AAC7G,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAajG,qBAAa,mBAAoB,SAAQ,WAAW;IAClD,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,eAAe,CAAC,CAA2B;gBAEvC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAO5C,IAAI,UAAU,IAAI,oBAAoB,EAAE,CAEvC;IAED,IAAI,UAAU,CAAC,KAAK,EAAE,oBAAoB,EAAE,EAG3C;IAED,IAAI,cAAc,IAAI,sBAAsB,EAAE,GAAG,SAAS,CAEzD;IAED,IAAI,cAAc,CAAC,KAAK,EAAE,sBAAsB,EAAE,GAAG,SAAS,EAG7D;IAED;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAmB3B,MAAM,IAAI,cAAc;IAQxB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAO3C;;;OAGG;IACH,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAanD;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAUhC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA6B9B;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAMrC;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAe3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU;IAI5D;;;;OAIG;IACH,SAAS,CAAC,2BAA2B,IAAI,IAAI;IAK7C;;;;OAIG;IACH,OAAO,CAAC,yBAAyB;IAOjC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAgBjC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAe7B;;;;;;;;OAQG;IACH,OAAO,CAAC,qBAAqB;IAa7B;;;;OAIG;IACH,OAAO,CAAC,4BAA4B;IASpC;;;OAGG;IACH,SAAS,CAAC,4BAA4B,IAAI,IAAI;IAM9C;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;;;OAIG;IACH,OAAO,CAAC,2BAA2B;IAmBnC;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IAwBlC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;;OAGG;IACH,SAAS,CAAC,gCAAgC,CACxC,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,sBAAsB,GACxC,sBAAsB;IAWzB;;OAEG;IACH,OAAO,CAAC,0BAA0B;CAKnC"}
|