@bitgo/sdk-coin-apt 2.5.3 → 2.6.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.
@@ -0,0 +1,253 @@
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.CustomTransaction = void 0;
7
+ const transaction_1 = require("./transaction");
8
+ const sdk_core_1 = require("@bitgo/sdk-core");
9
+ const ts_sdk_1 = require("@aptos-labs/ts-sdk");
10
+ const validation_1 = require("../utils/validation");
11
+ const utils_1 = __importDefault(require("../utils"));
12
+ /**
13
+ * Transaction class for custom Aptos transactions.
14
+ */
15
+ class CustomTransaction extends transaction_1.Transaction {
16
+ constructor(coinConfig) {
17
+ super(coinConfig);
18
+ this._typeArguments = [];
19
+ this._functionArguments = [];
20
+ this._type = sdk_core_1.TransactionType.CustomTx;
21
+ }
22
+ /**
23
+ * Set the custom transaction parameters
24
+ */
25
+ setCustomTransactionParams(params) {
26
+ (0, validation_1.validateModuleName)(params.moduleName);
27
+ (0, validation_1.validateFunctionName)(params.functionName);
28
+ this._moduleName = params.moduleName;
29
+ this._functionName = params.functionName;
30
+ this._typeArguments = params.typeArguments || [];
31
+ this._functionArguments = params.functionArguments || [];
32
+ this._entryFunctionAbi = params.abi;
33
+ }
34
+ /**
35
+ * Set the entry function ABI
36
+ */
37
+ setEntryFunctionAbi(abi) {
38
+ this._entryFunctionAbi = abi;
39
+ }
40
+ /**
41
+ * Get the full function name
42
+ */
43
+ get fullFunctionName() {
44
+ if (!this._moduleName || !this._functionName) {
45
+ return '';
46
+ }
47
+ return `${this._moduleName}::${this._functionName}`;
48
+ }
49
+ /**
50
+ * Parse a transaction payload to extract the custom transaction data
51
+ * Requires ABI information for proper type-aware conversion
52
+ *
53
+ * @param {TransactionPayload} payload - The transaction payload to parse
54
+ */
55
+ parseTransactionPayload(payload) {
56
+ if (!(payload instanceof ts_sdk_1.TransactionPayloadEntryFunction)) {
57
+ throw new sdk_core_1.InvalidTransactionError('Expected entry function payload for custom transaction');
58
+ }
59
+ const entryFunction = payload.entryFunction;
60
+ // Extract function data
61
+ const moduleAddress = entryFunction.module_name.address.toString();
62
+ const moduleIdentifier = entryFunction.module_name.name.identifier;
63
+ const functionIdentifier = entryFunction.function_name.identifier;
64
+ const moduleName = `${moduleAddress}::${moduleIdentifier}`;
65
+ // Validate
66
+ (0, validation_1.validateModuleName)(moduleName);
67
+ (0, validation_1.validateFunctionName)(functionIdentifier);
68
+ this._moduleName = moduleName;
69
+ this._functionName = functionIdentifier;
70
+ this._typeArguments = entryFunction.type_args.map((typeArg) => typeArg.toString());
71
+ // Parse arguments using ABI information
72
+ // If ABI is available, parse with type awareness; otherwise store raw args for later processing
73
+ if (this._entryFunctionAbi?.parameters) {
74
+ this._functionArguments = entryFunction.args.map((arg, index) => {
75
+ const paramType = this._entryFunctionAbi?.parameters?.[index];
76
+ if (!paramType) {
77
+ throw new sdk_core_1.InvalidTransactionError(`Missing ABI parameter type for argument ${index} in ${this._moduleName}::${this._functionName}. ` +
78
+ 'ABI parameter count mismatch.');
79
+ }
80
+ return this.convertArgumentByABI(arg, paramType);
81
+ });
82
+ }
83
+ else {
84
+ // Store raw arguments temporarily - transaction will be re-parsed when ABI is provided
85
+ this._functionArguments = entryFunction.args.map((arg) => arg);
86
+ }
87
+ }
88
+ /**
89
+ * Generate transaction payload data
90
+ */
91
+ getTransactionPayloadData() {
92
+ const functionName = this.getValidatedFullFunctionName();
93
+ // Arguments are pre-processed during parsing phase
94
+ const processedArguments = this._functionArguments;
95
+ return {
96
+ function: functionName,
97
+ typeArguments: this._typeArguments,
98
+ functionArguments: processedArguments,
99
+ abi: this._entryFunctionAbi,
100
+ };
101
+ }
102
+ /**
103
+ * Convert argument based on ABI type information
104
+ */
105
+ convertArgumentByABI(arg, paramType) {
106
+ // Helper function to convert bytes to hex string
107
+ const bytesToHex = (bytes) => {
108
+ return '0x' + bytes.map((b) => b.toString(16).padStart(2, '0')).join('');
109
+ };
110
+ // Helper function to try converting a hex string to an AccountAddress
111
+ const tryToAddress = (hexStr) => {
112
+ try {
113
+ return ts_sdk_1.AccountAddress.fromString(hexStr);
114
+ }
115
+ catch {
116
+ return hexStr;
117
+ }
118
+ };
119
+ // Handle primitive values (string, number, boolean)
120
+ if (typeof arg === 'string' || typeof arg === 'number' || typeof arg === 'boolean') {
121
+ // Address conversion for hex strings
122
+ if (paramType instanceof ts_sdk_1.TypeTagAddress && typeof arg === 'string' && arg.startsWith('0x')) {
123
+ return tryToAddress(arg);
124
+ }
125
+ // Type conversions based on parameter type
126
+ if (paramType instanceof ts_sdk_1.TypeTagBool)
127
+ return Boolean(arg);
128
+ if (paramType instanceof ts_sdk_1.TypeTagU8 || paramType instanceof ts_sdk_1.TypeTagU16 || paramType instanceof ts_sdk_1.TypeTagU32)
129
+ return Number(arg);
130
+ if (paramType instanceof ts_sdk_1.TypeTagU64 || paramType instanceof ts_sdk_1.TypeTagU128 || paramType instanceof ts_sdk_1.TypeTagU256)
131
+ return String(arg);
132
+ return arg;
133
+ }
134
+ // Handle BCS-encoded data with 'data' property
135
+ if (arg && typeof arg === 'object' && 'data' in arg && arg.data) {
136
+ const bytes = Array.from(arg.data);
137
+ const hexString = bytesToHex(bytes);
138
+ return paramType instanceof ts_sdk_1.TypeTagAddress ? tryToAddress(hexString) : hexString;
139
+ }
140
+ // Handle nested BCS structures with 'value' property
141
+ if (arg && typeof arg === 'object' && 'value' in arg && arg.value) {
142
+ // Check if inner value is a Uint8Array (common for U64 arguments)
143
+ if (arg.value.value && arg.value.value instanceof Uint8Array) {
144
+ const bytes = Array.from(arg.value.value);
145
+ if (this.isNumericType(paramType)) {
146
+ return this.convertNumericArgument(bytes, paramType);
147
+ }
148
+ // For non-numeric types, convert to hex string
149
+ return bytesToHex(bytes);
150
+ }
151
+ // Simple value wrapper
152
+ if (!('value' in arg.value) || typeof arg.value.value !== 'object') {
153
+ return this.convertArgumentByABI(arg.value, paramType);
154
+ }
155
+ // Double nested structure with numeric keys
156
+ const bytesObj = arg.value.value;
157
+ const keys = Object.keys(bytesObj)
158
+ .filter((k) => !isNaN(parseInt(k, 10)))
159
+ .sort((a, b) => parseInt(a, 10) - parseInt(b, 10));
160
+ if (keys.length === 0)
161
+ return arg;
162
+ const bytes = keys.map((k) => bytesObj[k]);
163
+ let extractedValue;
164
+ // Convert bytes based on parameter type using unified approach
165
+ if (this.isNumericType(paramType)) {
166
+ extractedValue = this.convertNumericArgument(bytes, paramType);
167
+ }
168
+ else if (paramType instanceof ts_sdk_1.TypeTagAddress) {
169
+ extractedValue = bytesToHex(bytes);
170
+ }
171
+ else if (paramType instanceof ts_sdk_1.TypeTagBool) {
172
+ extractedValue = bytes[0] === 1;
173
+ }
174
+ else {
175
+ extractedValue = bytesToHex(bytes);
176
+ }
177
+ return this.convertArgumentByABI(extractedValue, paramType);
178
+ }
179
+ // For anything else, return as-is
180
+ return arg;
181
+ }
182
+ /**
183
+ * Get custom transaction parameters
184
+ */
185
+ getCustomTransactionParams() {
186
+ return {
187
+ moduleName: this._moduleName || '',
188
+ functionName: this._functionName || '',
189
+ typeArguments: this._typeArguments,
190
+ functionArguments: this._functionArguments,
191
+ abi: this._entryFunctionAbi,
192
+ };
193
+ }
194
+ /**
195
+ * Override recipient getter for custom transactions
196
+ */
197
+ get recipient() {
198
+ if (this._recipients.length === 0) {
199
+ return {
200
+ address: '',
201
+ amount: '0',
202
+ };
203
+ }
204
+ return this._recipients[0];
205
+ }
206
+ /**
207
+ * Get validated full function name
208
+ */
209
+ getValidatedFullFunctionName() {
210
+ if (!this._moduleName || !this._functionName) {
211
+ throw new Error('Module name and function name must be set before building transaction');
212
+ }
213
+ const fullName = `${this._moduleName}::${this._functionName}`;
214
+ // Basic validation
215
+ const fullFunctionPattern = /^(0x[a-fA-F0-9]{1,64}|[a-zA-Z_][a-zA-Z0-9_]*)::[a-zA-Z_][a-zA-Z0-9_]*::[a-zA-Z_][a-zA-Z0-9_]*$/;
216
+ if (!fullFunctionPattern.test(fullName)) {
217
+ throw new Error(`Invalid full function name format: "${fullName}". Expected format: "address::module::function"`);
218
+ }
219
+ return fullName;
220
+ }
221
+ /**
222
+ * Check if a parameter type is a numeric type
223
+ */
224
+ isNumericType(paramType) {
225
+ return (paramType instanceof ts_sdk_1.TypeTagU8 ||
226
+ paramType instanceof ts_sdk_1.TypeTagU16 ||
227
+ paramType instanceof ts_sdk_1.TypeTagU32 ||
228
+ paramType instanceof ts_sdk_1.TypeTagU64 ||
229
+ paramType instanceof ts_sdk_1.TypeTagU128 ||
230
+ paramType instanceof ts_sdk_1.TypeTagU256);
231
+ }
232
+ /**
233
+ * Convert numeric argument using consistent little-endian byte handling
234
+ */
235
+ convertNumericArgument(bytes, paramType) {
236
+ if (paramType instanceof ts_sdk_1.TypeTagU8 || paramType instanceof ts_sdk_1.TypeTagU16 || paramType instanceof ts_sdk_1.TypeTagU32) {
237
+ // Small integers: use Number for compatibility
238
+ let result = 0;
239
+ for (let i = bytes.length - 1; i >= 0; i--) {
240
+ result = result * 256 + bytes[i];
241
+ }
242
+ return result;
243
+ }
244
+ if (paramType instanceof ts_sdk_1.TypeTagU64 || paramType instanceof ts_sdk_1.TypeTagU128 || paramType instanceof ts_sdk_1.TypeTagU256) {
245
+ // Large integers: reuse the existing utility method
246
+ return utils_1.default.getAmountFromPayloadArgs(new Uint8Array(bytes));
247
+ }
248
+ // Fallback for unexpected numeric types
249
+ return '0x' + bytes.map((b) => b.toString(16).padStart(2, '0')).join('');
250
+ }
251
+ }
252
+ exports.CustomTransaction = CustomTransaction;
253
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tVHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uL2N1c3RvbVRyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLCtDQUE0QztBQUU1Qyw4Q0FBMkU7QUFDM0UsK0NBZ0I0QjtBQUU1QixvREFBK0U7QUFDL0UscURBQTZCO0FBRTdCOztHQUVHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSx5QkFBVztJQU9oRCxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUxaLG1CQUFjLEdBQWEsRUFBRSxDQUFDO1FBQzlCLHVCQUFrQixHQUF5RSxFQUFFLENBQUM7UUFLcEcsSUFBSSxDQUFDLEtBQUssR0FBRywwQkFBZSxDQUFDLFFBQVEsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCwwQkFBMEIsQ0FBQyxNQUErQjtRQUN4RCxJQUFBLCtCQUFrQixFQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0QyxJQUFBLGlDQUFvQixFQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUUxQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDckMsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDdEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CLENBQUMsR0FBcUI7UUFDdkMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztJQUMvQixDQUFD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SUFBSSxTQUFTLFlBQVksb0JBQVcsRUFBRSxDQUFDO1lBQzVHLG9EQUFvRDtZQUNwRCxPQUFPLGVBQUssQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFFRCx3Q0FBd0M7UUFDeEMsT0FBTyxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7Q0FDRjtBQXJSRCw4Q0FxUkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IEludmFsaWRUcmFuc2FjdGlvbkVycm9yLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHtcbiAgRW50cnlGdW5jdGlvbkFCSSxcbiAgRW50cnlGdW5jdGlvbkFyZ3VtZW50VHlwZXMsXG4gIFNpbXBsZUVudHJ5RnVuY3Rpb25Bcmd1bWVudFR5cGVzLFxuICBJbnB1dEdlbmVyYXRlVHJhbnNhY3Rpb25QYXlsb2FkRGF0YSxcbiAgVHJhbnNhY3Rpb25QYXlsb2FkLFxuICBUcmFuc2FjdGlvblBheWxvYWRFbnRyeUZ1bmN0aW9uLFxuICBBY2NvdW50QWRkcmVzcyxcbiAgVHlwZVRhZ0FkZHJlc3MsXG4gIFR5cGVUYWdCb29sLFxuICBUeXBlVGFnVTgsXG4gIFR5cGVUYWdVMTYsXG4gIFR5cGVUYWdVMzIsXG4gIFR5cGVUYWdVNjQsXG4gIFR5cGVUYWdVMTI4LFxuICBUeXBlVGFnVTI1Nixcbn0gZnJvbSAnQGFwdG9zLWxhYnMvdHMtc2RrJztcbmltcG9ydCB7IEN1c3RvbVRyYW5zYWN0aW9uUGFyYW1zIH0gZnJvbSAnLi4vaWZhY2UnO1xuaW1wb3J0IHsgdmFsaWRhdGVNb2R1bGVOYW1lLCB2YWxpZGF0ZUZ1bmN0aW9uTmFtZSB9IGZyb20gJy4uL3V0aWxzL3ZhbGlkYXRpb24nO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzJztcblxuLyoqXG4gKiBUcmFuc2FjdGlvbiBjbGFzcyBmb3IgY3VzdG9tIEFwdG9zIHRyYW5zYWN0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEN1c3RvbVRyYW5zYWN0aW9uIGV4dGVuZHMgVHJhbnNhY3Rpb24ge1xuICBwcml2YXRlIF9tb2R1bGVOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Z1bmN0aW9uTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF90eXBlQXJndW1lbnRzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIF9mdW5jdGlvbkFyZ3VtZW50czogQXJyYXk8RW50cnlGdW5jdGlvbkFyZ3VtZW50VHlwZXMgfCBTaW1wbGVFbnRyeUZ1bmN0aW9uQXJndW1lbnRUeXBlcz4gPSBbXTtcbiAgcHJpdmF0ZSBfZW50cnlGdW5jdGlvbkFiaT86IEVudHJ5RnVuY3Rpb25BQkk7XG5cbiAgY29uc3RydWN0b3IoY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihjb2luQ29uZmlnKTtcbiAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLkN1c3RvbVR4O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VzdG9tIHRyYW5zYWN0aW9uIHBhcmFtZXRlcnNcbiAgICovXG4gIHNldEN1c3RvbVRyYW5zYWN0aW9uUGFyYW1zKHBhcmFtczogQ3VzdG9tVHJhbnNhY3Rpb25QYXJhbXMpOiB2b2lkIHtcbiAgICB2YWxpZGF0ZU1vZHVsZU5hbWUocGFyYW1zLm1vZHVsZU5hbWUpO1xuICAgIHZhbGlkYXRlRnVuY3Rpb25OYW1lKHBhcmFtcy5mdW5jdGlvbk5hbWUpO1xuXG4gICAgdGhpcy5fbW9kdWxlTmFtZSA9IHBhcmFtcy5tb2R1bGVOYW1lO1xuICAgIHRoaXMuX2Z1bmN0aW9uTmFtZSA9IHBhcmFtcy5mdW5jdGlvbk5hbWU7XG4gICAgdGhpcy5fdHlwZUFyZ3VtZW50cyA9IHBhcmFtcy50eXBlQXJndW1lbnRzIHx8IFtdO1xuICAgIHRoaXMuX2Z1bmN0aW9uQXJndW1lbnRzID0gcGFyYW1zLmZ1bmN0aW9uQXJndW1lbnRzIHx8IFtdO1xuICAgIHRoaXMuX2VudHJ5RnVuY3Rpb25BYmkgPSBwYXJhbXMuYWJpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZW50cnkgZnVuY3Rpb24gQUJJXG4gICAqL1xuICBzZXRFbnRyeUZ1bmN0aW9uQWJpKGFiaTogRW50cnlGdW5jdGlvbkFCSSk6IHZvaWQge1xuICAgIHRoaXMuX2VudHJ5RnVuY3Rpb25BYmkgPSBhYmk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmdWxsIGZ1bmN0aW9uIG5hbWVcbiAgICovXG4gIGdldCBmdWxsRnVuY3Rpb25OYW1lKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLl9tb2R1bGVOYW1lIHx8ICF0aGlzLl9mdW5jdGlvbk5hbWUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIGAke3RoaXMuX21vZHVsZU5hbWV9Ojoke3RoaXMuX2Z1bmN0aW9uTmFtZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGEgdHJhbnNhY3Rpb24gcGF5bG9hZCB0byBleHRyYWN0IHRoZSBjdXN0b20gdHJhbnNhY3Rpb24gZGF0YVxuICAgKiBSZXF1aXJlcyBBQkkgaW5mb3JtYXRpb24gZm9yIHByb3BlciB0eXBlLWF3YXJlIGNvbnZlcnNpb25cbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblBheWxvYWR9IHBheWxvYWQgLSBUaGUgdHJhbnNhY3Rpb24gcGF5bG9hZCB0byBwYXJzZVxuICAgKi9cbiAgcHJvdGVjdGVkIHBhcnNlVHJhbnNhY3Rpb25QYXlsb2FkKHBheWxvYWQ6IFRyYW5zYWN0aW9uUGF5bG9hZCk6IHZvaWQge1xuICAgIGlmICghKHBheWxvYWQgaW5zdGFuY2VvZiBUcmFuc2FjdGlvblBheWxvYWRFbnRyeUZ1bmN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFeHBlY3RlZCBlbnRyeSBmdW5jdGlvbiBwYXlsb2FkIGZvciBjdXN0b20gdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnRyeUZ1bmN0aW9uID0gcGF5bG9hZC5lbnRyeUZ1bmN0aW9uO1xuXG4gICAgLy8gRXh0cmFjdCBmdW5jdGlvbiBkYXRhXG4gICAgY29uc3QgbW9kdWxlQWRkcmVzcyA9IGVudHJ5RnVuY3Rpb24ubW9kdWxlX25hbWUuYWRkcmVzcy50b1N0cmluZygpO1xuICAgIGNvbnN0IG1vZHVsZUlkZW50aWZpZXIgPSBlbnRyeUZ1bmN0aW9uLm1vZHVsZV9uYW1lLm5hbWUuaWRlbnRpZmllcjtcbiAgICBjb25zdCBmdW5jdGlvbklkZW50aWZpZXIgPSBlbnRyeUZ1bmN0aW9uLmZ1bmN0aW9uX25hbWUuaWRlbnRpZmllcjtcblxuICAgIGNvbnN0IG1vZHVsZU5hbWUgPSBgJHttb2R1bGVBZGRyZXNzfTo6JHttb2R1bGVJZGVudGlmaWVyfWA7XG5cbiAgICAvLyBWYWxpZGF0ZVxuICAgIHZhbGlkYXRlTW9kdWxlTmFtZShtb2R1bGVOYW1lKTtcbiAgICB2YWxpZGF0ZUZ1bmN0aW9uTmFtZShmdW5jdGlvbklkZW50aWZpZXIpO1xuXG4gICAgdGhpcy5fbW9kdWxlTmFtZSA9IG1vZHVsZU5hbWU7XG4gICAgdGhpcy5fZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25JZGVudGlmaWVyO1xuICAgIHRoaXMuX3R5cGVBcmd1bWVudHMgPSBlbnRyeUZ1bmN0aW9uLnR5cGVfYXJncy5tYXAoKHR5cGVBcmcpID0+IHR5cGVBcmcudG9TdHJpbmcoKSk7XG5cbiAgICAvLyBQYXJzZSBhcmd1bWVudHMgdXNpbmcgQUJJIGluZm9ybWF0aW9uXG4gICAgLy8gSWYgQUJJIGlzIGF2YWlsYWJsZSwgcGFyc2Ugd2l0aCB0eXBlIGF3YXJlbmVzczsgb3RoZXJ3aXNlIHN0b3JlIHJhdyBhcmdzIGZvciBsYXRlciBwcm9jZXNzaW5nXG4gICAgaWYgKHRoaXMuX2VudHJ5RnVuY3Rpb25BYmk/LnBhcmFtZXRlcnMpIHtcbiAgICAgIHRoaXMuX2Z1bmN0aW9uQXJndW1lbnRzID0gZW50cnlGdW5jdGlvbi5hcmdzLm1hcCgoYXJnOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgcGFyYW1UeXBlID0gdGhpcy5fZW50cnlGdW5jdGlvbkFiaT8ucGFyYW1ldGVycz8uW2luZGV4XTtcbiAgICAgICAgaWYgKCFwYXJhbVR5cGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgICAgICBgTWlzc2luZyBBQkkgcGFyYW1ldGVyIHR5cGUgZm9yIGFyZ3VtZW50ICR7aW5kZXh9IGluICR7dGhpcy5fbW9kdWxlTmFtZX06OiR7dGhpcy5fZnVuY3Rpb25OYW1lfS4gYCArXG4gICAgICAgICAgICAgICdBQkkgcGFyYW1ldGVyIGNvdW50IG1pc21hdGNoLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRBcmd1bWVudEJ5QUJJKGFyZywgcGFyYW1UeXBlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdG9yZSByYXcgYXJndW1lbnRzIHRlbXBvcmFyaWx5IC0gdHJhbnNhY3Rpb24gd2lsbCBiZSByZS1wYXJzZWQgd2hlbiBBQkkgaXMgcHJvdmlkZWRcbiAgICAgIHRoaXMuX2Z1bmN0aW9uQXJndW1lbnRzID0gZW50cnlGdW5jdGlvbi5hcmdzLm1hcCgoYXJnOiBhbnkpID0+IGFyZyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHRyYW5zYWN0aW9uIHBheWxvYWQgZGF0YVxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFRyYW5zYWN0aW9uUGF5bG9hZERhdGEoKTogSW5wdXRHZW5lcmF0ZVRyYW5zYWN0aW9uUGF5bG9hZERhdGEge1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHRoaXMuZ2V0VmFsaWRhdGVkRnVsbEZ1bmN0aW9uTmFtZSgpO1xuXG4gICAgLy8gQXJndW1lbnRzIGFyZSBwcmUtcHJvY2Vzc2VkIGR1cmluZyBwYXJzaW5nIHBoYXNlXG4gICAgY29uc3QgcHJvY2Vzc2VkQXJndW1lbnRzID0gdGhpcy5fZnVuY3Rpb25Bcmd1bWVudHM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZnVuY3Rpb246IGZ1bmN0aW9uTmFtZSxcbiAgICAgIHR5cGVBcmd1bWVudHM6IHRoaXMuX3R5cGVBcmd1bWVudHMsXG4gICAgICBmdW5jdGlvbkFyZ3VtZW50czogcHJvY2Vzc2VkQXJndW1lbnRzLFxuICAgICAgYWJpOiB0aGlzLl9lbnRyeUZ1bmN0aW9uQWJpLFxuICAgIH0gYXMgSW5wdXRHZW5lcmF0ZVRyYW5zYWN0aW9uUGF5bG9hZERhdGE7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhcmd1bWVudCBiYXNlZCBvbiBBQkkgdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0QXJndW1lbnRCeUFCSShhcmc6IGFueSwgcGFyYW1UeXBlOiBhbnkpOiBhbnkge1xuICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGJ5dGVzIHRvIGhleCBzdHJpbmdcbiAgICBjb25zdCBieXRlc1RvSGV4ID0gKGJ5dGVzOiBudW1iZXJbXSk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gJzB4JyArIGJ5dGVzLm1hcCgoYikgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyk7XG4gICAgfTtcblxuICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB0cnkgY29udmVydGluZyBhIGhleCBzdHJpbmcgdG8gYW4gQWNjb3VudEFkZHJlc3NcbiAgICBjb25zdCB0cnlUb0FkZHJlc3MgPSAoaGV4U3RyOiBzdHJpbmcpOiBhbnkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEFjY291bnRBZGRyZXNzLmZyb21TdHJpbmcoaGV4U3RyKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gaGV4U3RyO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgcHJpbWl0aXZlIHZhbHVlcyAoc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4pXG4gICAgaWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmcgPT09ICdudW1iZXInIHx8IHR5cGVvZiBhcmcgPT09ICdib29sZWFuJykge1xuICAgICAgLy8gQWRkcmVzcyBjb252ZXJzaW9uIGZvciBoZXggc3RyaW5nc1xuICAgICAgaWYgKHBhcmFtVHlwZSBpbnN0YW5jZW9mIFR5cGVUYWdBZGRyZXNzICYmIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnICYmIGFyZy5zdGFydHNXaXRoKCcweCcpKSB7XG4gICAgICAgIHJldHVybiB0cnlUb0FkZHJlc3MoYXJnKTtcbiAgICAgIH1cblxuICAgICAgLy8gVHlwZSBjb252ZXJzaW9ucyBiYXNlZCBvbiBwYXJhbWV0ZXIgdHlwZVxuICAgICAgaWYgKHBhcmFtVHlwZSBpbnN0YW5jZW9mIFR5cGVUYWdCb29sKSByZXR1cm4gQm9vbGVhbihhcmcpO1xuICAgICAgaWYgKHBhcmFtVHlwZSBpbnN0YW5jZW9mIFR5cGVUYWdVOCB8fCBwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnVTE2IHx8IHBhcmFtVHlwZSBpbnN0YW5jZW9mIFR5cGVUYWdVMzIpXG4gICAgICAgIHJldHVybiBOdW1iZXIoYXJnKTtcbiAgICAgIGlmIChwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnVTY0IHx8IHBhcmFtVHlwZSBpbnN0YW5jZW9mIFR5cGVUYWdVMTI4IHx8IHBhcmFtVHlwZSBpbnN0YW5jZW9mIFR5cGVUYWdVMjU2KVxuICAgICAgICByZXR1cm4gU3RyaW5nKGFyZyk7XG5cbiAgICAgIHJldHVybiBhcmc7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIEJDUy1lbmNvZGVkIGRhdGEgd2l0aCAnZGF0YScgcHJvcGVydHlcbiAgICBpZiAoYXJnICYmIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmICdkYXRhJyBpbiBhcmcgJiYgYXJnLmRhdGEpIHtcbiAgICAgIGNvbnN0IGJ5dGVzID0gQXJyYXkuZnJvbShhcmcuZGF0YSkgYXMgbnVtYmVyW107XG4gICAgICBjb25zdCBoZXhTdHJpbmcgPSBieXRlc1RvSGV4KGJ5dGVzKTtcblxuICAgICAgcmV0dXJuIHBhcmFtVHlwZSBpbnN0YW5jZW9mIFR5cGVUYWdBZGRyZXNzID8gdHJ5VG9BZGRyZXNzKGhleFN0cmluZykgOiBoZXhTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIG5lc3RlZCBCQ1Mgc3RydWN0dXJlcyB3aXRoICd2YWx1ZScgcHJvcGVydHlcbiAgICBpZiAoYXJnICYmIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmICd2YWx1ZScgaW4gYXJnICYmIGFyZy52YWx1ZSkge1xuICAgICAgLy8gQ2hlY2sgaWYgaW5uZXIgdmFsdWUgaXMgYSBVaW50OEFycmF5IChjb21tb24gZm9yIFU2NCBhcmd1bWVudHMpXG4gICAgICBpZiAoYXJnLnZhbHVlLnZhbHVlICYmIGFyZy52YWx1ZS52YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgY29uc3QgYnl0ZXMgPSBBcnJheS5mcm9tKGFyZy52YWx1ZS52YWx1ZSkgYXMgbnVtYmVyW107XG4gICAgICAgIGlmICh0aGlzLmlzTnVtZXJpY1R5cGUocGFyYW1UeXBlKSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnROdW1lcmljQXJndW1lbnQoYnl0ZXMsIHBhcmFtVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yIG5vbi1udW1lcmljIHR5cGVzLCBjb252ZXJ0IHRvIGhleCBzdHJpbmdcbiAgICAgICAgcmV0dXJuIGJ5dGVzVG9IZXgoYnl0ZXMpO1xuICAgICAgfVxuXG4gICAgICAvLyBTaW1wbGUgdmFsdWUgd3JhcHBlclxuICAgICAgaWYgKCEoJ3ZhbHVlJyBpbiBhcmcudmFsdWUpIHx8IHR5cGVvZiBhcmcudmFsdWUudmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRBcmd1bWVudEJ5QUJJKGFyZy52YWx1ZSwgcGFyYW1UeXBlKTtcbiAgICAgIH1cblxuICAgICAgLy8gRG91YmxlIG5lc3RlZCBzdHJ1Y3R1cmUgd2l0aCBudW1lcmljIGtleXNcbiAgICAgIGNvbnN0IGJ5dGVzT2JqID0gYXJnLnZhbHVlLnZhbHVlO1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGJ5dGVzT2JqKVxuICAgICAgICAuZmlsdGVyKChrKSA9PiAhaXNOYU4ocGFyc2VJbnQoaywgMTApKSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IHBhcnNlSW50KGEsIDEwKSAtIHBhcnNlSW50KGIsIDEwKSk7XG5cbiAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGFyZztcblxuICAgICAgY29uc3QgYnl0ZXMgPSBrZXlzLm1hcCgoaykgPT4gYnl0ZXNPYmpba10pO1xuICAgICAgbGV0IGV4dHJhY3RlZFZhbHVlOiBhbnk7XG5cbiAgICAgIC8vIENvbnZlcnQgYnl0ZXMgYmFzZWQgb24gcGFyYW1ldGVyIHR5cGUgdXNpbmcgdW5pZmllZCBhcHByb2FjaFxuICAgICAgaWYgKHRoaXMuaXNOdW1lcmljVHlwZShwYXJhbVR5cGUpKSB7XG4gICAgICAgIGV4dHJhY3RlZFZhbHVlID0gdGhpcy5jb252ZXJ0TnVtZXJpY0FyZ3VtZW50KGJ5dGVzLCBwYXJhbVR5cGUpO1xuICAgICAgfSBlbHNlIGlmIChwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnQWRkcmVzcykge1xuICAgICAgICBleHRyYWN0ZWRWYWx1ZSA9IGJ5dGVzVG9IZXgoYnl0ZXMpO1xuICAgICAgfSBlbHNlIGlmIChwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnQm9vbCkge1xuICAgICAgICBleHRyYWN0ZWRWYWx1ZSA9IGJ5dGVzWzBdID09PSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXh0cmFjdGVkVmFsdWUgPSBieXRlc1RvSGV4KGJ5dGVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY29udmVydEFyZ3VtZW50QnlBQkkoZXh0cmFjdGVkVmFsdWUsIHBhcmFtVHlwZSk7XG4gICAgfVxuXG4gICAgLy8gRm9yIGFueXRoaW5nIGVsc2UsIHJldHVybiBhcy1pc1xuICAgIHJldHVybiBhcmc7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1c3RvbSB0cmFuc2FjdGlvbiBwYXJhbWV0ZXJzXG4gICAqL1xuICBnZXRDdXN0b21UcmFuc2FjdGlvblBhcmFtcygpOiBDdXN0b21UcmFuc2FjdGlvblBhcmFtcyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZHVsZU5hbWU6IHRoaXMuX21vZHVsZU5hbWUgfHwgJycsXG4gICAgICBmdW5jdGlvbk5hbWU6IHRoaXMuX2Z1bmN0aW9uTmFtZSB8fCAnJyxcbiAgICAgIHR5cGVBcmd1bWVudHM6IHRoaXMuX3R5cGVBcmd1bWVudHMsXG4gICAgICBmdW5jdGlvbkFyZ3VtZW50czogdGhpcy5fZnVuY3Rpb25Bcmd1bWVudHMsXG4gICAgICBhYmk6IHRoaXMuX2VudHJ5RnVuY3Rpb25BYmksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSByZWNpcGllbnQgZ2V0dGVyIGZvciBjdXN0b20gdHJhbnNhY3Rpb25zXG4gICAqL1xuICBnZXQgcmVjaXBpZW50KCk6IGFueSB7XG4gICAgaWYgKHRoaXMuX3JlY2lwaWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhZGRyZXNzOiAnJyxcbiAgICAgICAgYW1vdW50OiAnMCcsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmVjaXBpZW50c1swXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdmFsaWRhdGVkIGZ1bGwgZnVuY3Rpb24gbmFtZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRWYWxpZGF0ZWRGdWxsRnVuY3Rpb25OYW1lKCk6IGAke3N0cmluZ306OiR7c3RyaW5nfTo6JHtzdHJpbmd9YCB7XG4gICAgaWYgKCF0aGlzLl9tb2R1bGVOYW1lIHx8ICF0aGlzLl9mdW5jdGlvbk5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTW9kdWxlIG5hbWUgYW5kIGZ1bmN0aW9uIG5hbWUgbXVzdCBiZSBzZXQgYmVmb3JlIGJ1aWxkaW5nIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbE5hbWUgPSBgJHt0aGlzLl9tb2R1bGVOYW1lfTo6JHt0aGlzLl9mdW5jdGlvbk5hbWV9YDtcblxuICAgIC8vIEJhc2ljIHZhbGlkYXRpb25cbiAgICBjb25zdCBmdWxsRnVuY3Rpb25QYXR0ZXJuID1cbiAgICAgIC9eKDB4W2EtZkEtRjAtOV17MSw2NH18W2EtekEtWl9dW2EtekEtWjAtOV9dKik6OlthLXpBLVpfXVthLXpBLVowLTlfXSo6OlthLXpBLVpfXVthLXpBLVowLTlfXSokLztcbiAgICBpZiAoIWZ1bGxGdW5jdGlvblBhdHRlcm4udGVzdChmdWxsTmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmdWxsIGZ1bmN0aW9uIG5hbWUgZm9ybWF0OiBcIiR7ZnVsbE5hbWV9XCIuIEV4cGVjdGVkIGZvcm1hdDogXCJhZGRyZXNzOjptb2R1bGU6OmZ1bmN0aW9uXCJgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVsbE5hbWUgYXMgYCR7c3RyaW5nfTo6JHtzdHJpbmd9Ojoke3N0cmluZ31gO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgcGFyYW1ldGVyIHR5cGUgaXMgYSBudW1lcmljIHR5cGVcbiAgICovXG4gIHByaXZhdGUgaXNOdW1lcmljVHlwZShwYXJhbVR5cGU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnVTggfHxcbiAgICAgIHBhcmFtVHlwZSBpbnN0YW5jZW9mIFR5cGVUYWdVMTYgfHxcbiAgICAgIHBhcmFtVHlwZSBpbnN0YW5jZW9mIFR5cGVUYWdVMzIgfHxcbiAgICAgIHBhcmFtVHlwZSBpbnN0YW5jZW9mIFR5cGVUYWdVNjQgfHxcbiAgICAgIHBhcmFtVHlwZSBpbnN0YW5jZW9mIFR5cGVUYWdVMTI4IHx8XG4gICAgICBwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnVTI1NlxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBudW1lcmljIGFyZ3VtZW50IHVzaW5nIGNvbnNpc3RlbnQgbGl0dGxlLWVuZGlhbiBieXRlIGhhbmRsaW5nXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnROdW1lcmljQXJndW1lbnQoYnl0ZXM6IG51bWJlcltdLCBwYXJhbVR5cGU6IGFueSk6IGFueSB7XG4gICAgaWYgKHBhcmFtVHlwZSBpbnN0YW5jZW9mIFR5cGVUYWdVOCB8fCBwYXJhbVR5cGUgaW5zdGFuY2VvZiBUeXBlVGFnVTE2IHx8IHBhcmFtVHlwZSBpbnN0YW5jZW9mIFR5cGVUYWdVMzIpIHtcbiAgICAgIC8vIFNtYWxsIGludGVnZXJzOiB1c2UgTnVtYmVyIGZvciBjb21wYXRpYmlsaXR5XG4gICAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICAgIGZvciAobGV0IGkgPSBieXRlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAyNTYgKyBieXRlc1tpXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtVHlwZSBpbnN0YW5jZW9mIFR5cGVUYWdVNjQgfHwgcGFyYW1UeXBlIGluc3RhbmNlb2YgVHlwZVRhZ1UxMjggfHwgcGFyYW1UeXBlIGluc3RhbmNlb2YgVHlwZVRhZ1UyNTYpIHtcbiAgICAgIC8vIExhcmdlIGludGVnZXJzOiByZXVzZSB0aGUgZXhpc3RpbmcgdXRpbGl0eSBtZXRob2RcbiAgICAgIHJldHVybiB1dGlscy5nZXRBbW91bnRGcm9tUGF5bG9hZEFyZ3MobmV3IFVpbnQ4QXJyYXkoYnl0ZXMpKTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayBmb3IgdW5leHBlY3RlZCBudW1lcmljIHR5cGVzXG4gICAgcmV0dXJuICcweCcgKyBieXRlcy5tYXAoKGIpID0+IGIudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,64 @@
1
+ import { TransactionType } from '@bitgo/sdk-core';
2
+ import { BaseCoin as CoinConfig } from '@bitgo/statics';
3
+ import { EntryFunctionABI, TransactionPayload } from '@aptos-labs/ts-sdk';
4
+ import { Transaction } from '../transaction/transaction';
5
+ import { TransactionBuilder } from './transactionBuilder';
6
+ import { CustomTransaction } from '../transaction/customTransaction';
7
+ import { CustomTransactionParams } from '../iface';
8
+ /**
9
+ * Builder for Aptos custom transactions.
10
+ * Allows building transactions with any entry function call.
11
+ */
12
+ export declare class CustomTransactionBuilder extends TransactionBuilder {
13
+ protected _transaction: CustomTransaction;
14
+ constructor(_coinConfig: Readonly<CoinConfig>);
15
+ /**
16
+ * @returns {TransactionType} The transaction type
17
+ */
18
+ protected get transactionType(): TransactionType;
19
+ /**
20
+ * Set the custom transaction parameters
21
+ *
22
+ * @param {CustomTransactionParams} params - Custom transaction parameters
23
+ * @returns {CustomTransactionBuilder} The builder instance
24
+ */
25
+ customTransaction(params: CustomTransactionParams): CustomTransactionBuilder;
26
+ /**
27
+ * Set the entry function ABI
28
+ *
29
+ * @param {EntryFunctionABI} abi - The ABI definition for the entry function
30
+ * @returns {CustomTransactionBuilder} The builder instance
31
+ */
32
+ entryFunctionAbi(abi: EntryFunctionABI): CustomTransactionBuilder;
33
+ /**
34
+ * @inheritdoc
35
+ */
36
+ assetId(assetId: string): TransactionBuilder;
37
+ /**
38
+ * Check if a transaction payload is valid for this builder
39
+ *
40
+ * @param {TransactionPayload} payload - The transaction payload to check
41
+ * @returns {boolean} True if the payload is valid for this builder
42
+ */
43
+ protected isValidTransactionPayload(payload: TransactionPayload): boolean;
44
+ /**
45
+ * Initialize the builder from an existing transaction
46
+ *
47
+ * @param {Transaction} tx - The transaction to initialize from
48
+ */
49
+ initBuilder(tx: Transaction): void;
50
+ /**
51
+ * Build the transaction
52
+ *
53
+ * @returns {Promise<CustomTransaction>} The built transaction
54
+ */
55
+ build(): Promise<CustomTransaction>;
56
+ /**
57
+ * Get the transaction builder instance from an existing transaction
58
+ *
59
+ * @param {Transaction} tx - The transaction to convert
60
+ * @returns {TransactionBuilder} The transaction builder
61
+ */
62
+ from(tx: Transaction): TransactionBuilder;
63
+ }
64
+ //# sourceMappingURL=customTransactionBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customTransactionBuilder.d.ts","sourceRoot":"","sources":["../../../../src/lib/transactionBuilder/customTransactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAmC,MAAM,oBAAoB,CAAC;AAC3G,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAGnD;;;GAGG;AACH,qBAAa,wBAAyB,SAAQ,kBAAkB;IAC9D,SAAS,CAAC,YAAY,EAAE,iBAAiB,CAAC;gBAE9B,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C;;OAEG;IACH,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;;;OAKG;IACH,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,wBAAwB;IAa5E;;;;;OAKG;IACH,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,GAAG,wBAAwB;IAKjE;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB;IAM5C;;;;;OAKG;IACH,SAAS,CAAC,yBAAyB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO;IAsBzE;;;;OAIG;IACH,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAYlC;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,iBAAiB,CAAC;IASzC;;;;;OAKG;IACH,IAAI,CAAC,EAAE,EAAE,WAAW,GAAG,kBAAkB;CAQ1C"}
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CustomTransactionBuilder = void 0;
4
+ const sdk_core_1 = require("@bitgo/sdk-core");
5
+ const ts_sdk_1 = require("@aptos-labs/ts-sdk");
6
+ const transactionBuilder_1 = require("./transactionBuilder");
7
+ const customTransaction_1 = require("../transaction/customTransaction");
8
+ const validation_1 = require("../utils/validation");
9
+ /**
10
+ * Builder for Aptos custom transactions.
11
+ * Allows building transactions with any entry function call.
12
+ */
13
+ class CustomTransactionBuilder extends transactionBuilder_1.TransactionBuilder {
14
+ constructor(_coinConfig) {
15
+ super(_coinConfig);
16
+ this._transaction = new customTransaction_1.CustomTransaction(_coinConfig);
17
+ }
18
+ /**
19
+ * @returns {TransactionType} The transaction type
20
+ */
21
+ get transactionType() {
22
+ return sdk_core_1.TransactionType.CustomTx;
23
+ }
24
+ /**
25
+ * Set the custom transaction parameters
26
+ *
27
+ * @param {CustomTransactionParams} params - Custom transaction parameters
28
+ * @returns {CustomTransactionBuilder} The builder instance
29
+ */
30
+ customTransaction(params) {
31
+ if (!params.moduleName) {
32
+ throw new sdk_core_1.BuildTransactionError('Missing module name');
33
+ }
34
+ if (!params.functionName) {
35
+ throw new sdk_core_1.BuildTransactionError('Missing function name');
36
+ }
37
+ this._transaction.setCustomTransactionParams(params);
38
+ return this;
39
+ }
40
+ /**
41
+ * Set the entry function ABI
42
+ *
43
+ * @param {EntryFunctionABI} abi - The ABI definition for the entry function
44
+ * @returns {CustomTransactionBuilder} The builder instance
45
+ */
46
+ entryFunctionAbi(abi) {
47
+ this._transaction.setEntryFunctionAbi(abi);
48
+ return this;
49
+ }
50
+ /**
51
+ * @inheritdoc
52
+ */
53
+ assetId(assetId) {
54
+ // Asset ID is optional for custom transactions
55
+ this._transaction.assetId = assetId;
56
+ return this;
57
+ }
58
+ /**
59
+ * Check if a transaction payload is valid for this builder
60
+ *
61
+ * @param {TransactionPayload} payload - The transaction payload to check
62
+ * @returns {boolean} True if the payload is valid for this builder
63
+ */
64
+ isValidTransactionPayload(payload) {
65
+ // Basic payload type check
66
+ if (!(payload instanceof ts_sdk_1.TransactionPayloadEntryFunction)) {
67
+ return false;
68
+ }
69
+ try {
70
+ const entryFunction = payload.entryFunction;
71
+ // Validate module and function identifiers
72
+ const moduleAddress = entryFunction.module_name.address.toString();
73
+ const moduleIdentifier = entryFunction.module_name.name.identifier;
74
+ const functionIdentifier = entryFunction.function_name.identifier;
75
+ const moduleName = `${moduleAddress}::${moduleIdentifier}`;
76
+ if (!(0, validation_1.isValidModuleName)(moduleName) || !(0, validation_1.isValidFunctionName)(functionIdentifier)) {
77
+ return false;
78
+ }
79
+ return true;
80
+ }
81
+ catch (error) {
82
+ return false;
83
+ }
84
+ }
85
+ /**
86
+ * Initialize the builder from an existing transaction
87
+ *
88
+ * @param {Transaction} tx - The transaction to initialize from
89
+ */
90
+ initBuilder(tx) {
91
+ super.initBuilder(tx);
92
+ if (tx instanceof customTransaction_1.CustomTransaction) {
93
+ const params = tx.getCustomTransactionParams();
94
+ // Only set custom transaction params if they are defined
95
+ if (params.moduleName && params.functionName) {
96
+ this.customTransaction(params);
97
+ }
98
+ }
99
+ }
100
+ /**
101
+ * Build the transaction
102
+ *
103
+ * @returns {Promise<CustomTransaction>} The built transaction
104
+ */
105
+ async build() {
106
+ const params = this._transaction.getCustomTransactionParams();
107
+ if (!params.moduleName || !params.functionName) {
108
+ throw new sdk_core_1.BuildTransactionError('Missing required module or function name');
109
+ }
110
+ return (await super.build());
111
+ }
112
+ /**
113
+ * Get the transaction builder instance from an existing transaction
114
+ *
115
+ * @param {Transaction} tx - The transaction to convert
116
+ * @returns {TransactionBuilder} The transaction builder
117
+ */
118
+ from(tx) {
119
+ if (!(tx instanceof customTransaction_1.CustomTransaction)) {
120
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction type');
121
+ }
122
+ this.initBuilder(tx);
123
+ return this;
124
+ }
125
+ }
126
+ exports.CustomTransactionBuilder = CustomTransactionBuilder;
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tVHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIvY3VzdG9tVHJhbnNhY3Rpb25CdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDhDQUF5RTtBQUV6RSwrQ0FBMkc7QUFFM0csNkRBQTBEO0FBQzFELHdFQUFxRTtBQUVyRSxvREFBNkU7QUFFN0U7OztHQUdHO0FBQ0gsTUFBYSx3QkFBeUIsU0FBUSx1Q0FBa0I7SUFHOUQsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLHFDQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7T0FFRztJQUNILElBQWMsZUFBZTtRQUMzQixPQUFPLDBCQUFlLENBQUMsUUFBUSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGlCQUFpQixDQUFDLE1BQStCO1FBQy9DLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDekQsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsMEJBQTBCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxnQkFBZ0IsQ0FBQyxHQUFxQjtRQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTyxDQUFDLE9BQWU7UUFDckIsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUNwQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNPLHlCQUF5QixDQUFDLE9BQTJCO1FBQzdELDJCQUEyQjtRQUMzQixJQUFJLENBQUMsQ0FBQyxPQUFPLFlBQVksd0NBQStCLENBQUMsRUFBRSxDQUFDO1lBQzFELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELElBQUksQ0FBQztZQUNILE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7WUFDNUMsMkNBQTJDO1lBQzNDLE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25FLE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ25FLE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7WUFDbEUsTUFBTSxVQUFVLEdBQUcsR0FBRyxhQUFhLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQztZQUUzRCxJQUFJLENBQUMsSUFBQSw4QkFBaUIsRUFBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUEsZ0NBQW1CLEVBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO2dCQUMvRSxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxXQUFXLENBQUMsRUFBZTtRQUN6QixLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXRCLElBQUksRUFBRSxZQUFZLHFDQUFpQixFQUFFLENBQUM7WUFDcEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDL0MseURBQXlEO1lBQ3pELElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLEtBQUs7UUFDVCxNQUFNLE1BQU0sR0FBSSxJQUFJLENBQUMsWUFBa0MsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ3JGLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQy9DLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFFRCxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQXNCLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFBSSxDQUFDLEVBQWU7UUFDbEIsSUFBSSxDQUFDLENBQUMsRUFBRSxZQUFZLHFDQUFpQixDQUFDLEVBQUUsQ0FBQztZQUN2QyxNQUFNLElBQUksZ0NBQXFCLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRjtBQS9IRCw0REErSEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgRW50cnlGdW5jdGlvbkFCSSwgVHJhbnNhY3Rpb25QYXlsb2FkLCBUcmFuc2FjdGlvblBheWxvYWRFbnRyeUZ1bmN0aW9uIH0gZnJvbSAnQGFwdG9zLWxhYnMvdHMtc2RrJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vdHJhbnNhY3Rpb24vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgQ3VzdG9tVHJhbnNhY3Rpb24gfSBmcm9tICcuLi90cmFuc2FjdGlvbi9jdXN0b21UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBDdXN0b21UcmFuc2FjdGlvblBhcmFtcyB9IGZyb20gJy4uL2lmYWNlJztcbmltcG9ydCB7IGlzVmFsaWRNb2R1bGVOYW1lLCBpc1ZhbGlkRnVuY3Rpb25OYW1lIH0gZnJvbSAnLi4vdXRpbHMvdmFsaWRhdGlvbic7XG5cbi8qKlxuICogQnVpbGRlciBmb3IgQXB0b3MgY3VzdG9tIHRyYW5zYWN0aW9ucy5cbiAqIEFsbG93cyBidWlsZGluZyB0cmFuc2FjdGlvbnMgd2l0aCBhbnkgZW50cnkgZnVuY3Rpb24gY2FsbC5cbiAqL1xuZXhwb3J0IGNsYXNzIEN1c3RvbVRyYW5zYWN0aW9uQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfdHJhbnNhY3Rpb246IEN1c3RvbVRyYW5zYWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IG5ldyBDdXN0b21UcmFuc2FjdGlvbihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uVHlwZX0gVGhlIHRyYW5zYWN0aW9uIHR5cGVcbiAgICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5DdXN0b21UeDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGN1c3RvbSB0cmFuc2FjdGlvbiBwYXJhbWV0ZXJzXG4gICAqXG4gICAqIEBwYXJhbSB7Q3VzdG9tVHJhbnNhY3Rpb25QYXJhbXN9IHBhcmFtcyAtIEN1c3RvbSB0cmFuc2FjdGlvbiBwYXJhbWV0ZXJzXG4gICAqIEByZXR1cm5zIHtDdXN0b21UcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoZSBidWlsZGVyIGluc3RhbmNlXG4gICAqL1xuICBjdXN0b21UcmFuc2FjdGlvbihwYXJhbXM6IEN1c3RvbVRyYW5zYWN0aW9uUGFyYW1zKTogQ3VzdG9tVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICBpZiAoIXBhcmFtcy5tb2R1bGVOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdNaXNzaW5nIG1vZHVsZSBuYW1lJyk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJhbXMuZnVuY3Rpb25OYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdNaXNzaW5nIGZ1bmN0aW9uIG5hbWUnKTtcbiAgICB9XG5cbiAgICB0aGlzLl90cmFuc2FjdGlvbi5zZXRDdXN0b21UcmFuc2FjdGlvblBhcmFtcyhwYXJhbXMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZW50cnkgZnVuY3Rpb24gQUJJXG4gICAqXG4gICAqIEBwYXJhbSB7RW50cnlGdW5jdGlvbkFCSX0gYWJpIC0gVGhlIEFCSSBkZWZpbml0aW9uIGZvciB0aGUgZW50cnkgZnVuY3Rpb25cbiAgICogQHJldHVybnMge0N1c3RvbVRyYW5zYWN0aW9uQnVpbGRlcn0gVGhlIGJ1aWxkZXIgaW5zdGFuY2VcbiAgICovXG4gIGVudHJ5RnVuY3Rpb25BYmkoYWJpOiBFbnRyeUZ1bmN0aW9uQUJJKTogQ3VzdG9tVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5zZXRFbnRyeUZ1bmN0aW9uQWJpKGFiaSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICovXG4gIGFzc2V0SWQoYXNzZXRJZDogc3RyaW5nKTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICAvLyBBc3NldCBJRCBpcyBvcHRpb25hbCBmb3IgY3VzdG9tIHRyYW5zYWN0aW9uc1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLmFzc2V0SWQgPSBhc3NldElkO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgdHJhbnNhY3Rpb24gcGF5bG9hZCBpcyB2YWxpZCBmb3IgdGhpcyBidWlsZGVyXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25QYXlsb2FkfSBwYXlsb2FkIC0gVGhlIHRyYW5zYWN0aW9uIHBheWxvYWQgdG8gY2hlY2tcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgdmFsaWQgZm9yIHRoaXMgYnVpbGRlclxuICAgKi9cbiAgcHJvdGVjdGVkIGlzVmFsaWRUcmFuc2FjdGlvblBheWxvYWQocGF5bG9hZDogVHJhbnNhY3Rpb25QYXlsb2FkKTogYm9vbGVhbiB7XG4gICAgLy8gQmFzaWMgcGF5bG9hZCB0eXBlIGNoZWNrXG4gICAgaWYgKCEocGF5bG9hZCBpbnN0YW5jZW9mIFRyYW5zYWN0aW9uUGF5bG9hZEVudHJ5RnVuY3Rpb24pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbnRyeUZ1bmN0aW9uID0gcGF5bG9hZC5lbnRyeUZ1bmN0aW9uO1xuICAgICAgLy8gVmFsaWRhdGUgbW9kdWxlIGFuZCBmdW5jdGlvbiBpZGVudGlmaWVyc1xuICAgICAgY29uc3QgbW9kdWxlQWRkcmVzcyA9IGVudHJ5RnVuY3Rpb24ubW9kdWxlX25hbWUuYWRkcmVzcy50b1N0cmluZygpO1xuICAgICAgY29uc3QgbW9kdWxlSWRlbnRpZmllciA9IGVudHJ5RnVuY3Rpb24ubW9kdWxlX25hbWUubmFtZS5pZGVudGlmaWVyO1xuICAgICAgY29uc3QgZnVuY3Rpb25JZGVudGlmaWVyID0gZW50cnlGdW5jdGlvbi5mdW5jdGlvbl9uYW1lLmlkZW50aWZpZXI7XG4gICAgICBjb25zdCBtb2R1bGVOYW1lID0gYCR7bW9kdWxlQWRkcmVzc306OiR7bW9kdWxlSWRlbnRpZmllcn1gO1xuXG4gICAgICBpZiAoIWlzVmFsaWRNb2R1bGVOYW1lKG1vZHVsZU5hbWUpIHx8ICFpc1ZhbGlkRnVuY3Rpb25OYW1lKGZ1bmN0aW9uSWRlbnRpZmllcikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgYnVpbGRlciBmcm9tIGFuIGV4aXN0aW5nIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IHR4IC0gVGhlIHRyYW5zYWN0aW9uIHRvIGluaXRpYWxpemUgZnJvbVxuICAgKi9cbiAgaW5pdEJ1aWxkZXIodHg6IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgc3VwZXIuaW5pdEJ1aWxkZXIodHgpO1xuXG4gICAgaWYgKHR4IGluc3RhbmNlb2YgQ3VzdG9tVHJhbnNhY3Rpb24pIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHR4LmdldEN1c3RvbVRyYW5zYWN0aW9uUGFyYW1zKCk7XG4gICAgICAvLyBPbmx5IHNldCBjdXN0b20gdHJhbnNhY3Rpb24gcGFyYW1zIGlmIHRoZXkgYXJlIGRlZmluZWRcbiAgICAgIGlmIChwYXJhbXMubW9kdWxlTmFtZSAmJiBwYXJhbXMuZnVuY3Rpb25OYW1lKSB7XG4gICAgICAgIHRoaXMuY3VzdG9tVHJhbnNhY3Rpb24ocGFyYW1zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEN1c3RvbVRyYW5zYWN0aW9uPn0gVGhlIGJ1aWx0IHRyYW5zYWN0aW9uXG4gICAqL1xuICBhc3luYyBidWlsZCgpOiBQcm9taXNlPEN1c3RvbVRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgcGFyYW1zID0gKHRoaXMuX3RyYW5zYWN0aW9uIGFzIEN1c3RvbVRyYW5zYWN0aW9uKS5nZXRDdXN0b21UcmFuc2FjdGlvblBhcmFtcygpO1xuICAgIGlmICghcGFyYW1zLm1vZHVsZU5hbWUgfHwgIXBhcmFtcy5mdW5jdGlvbk5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgbW9kdWxlIG9yIGZ1bmN0aW9uIG5hbWUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKGF3YWl0IHN1cGVyLmJ1aWxkKCkpIGFzIEN1c3RvbVRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdHJhbnNhY3Rpb24gYnVpbGRlciBpbnN0YW5jZSBmcm9tIGFuIGV4aXN0aW5nIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IHR4IC0gVGhlIHRyYW5zYWN0aW9uIHRvIGNvbnZlcnRcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhlIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIGZyb20odHg6IFRyYW5zYWN0aW9uKTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICBpZiAoISh0eCBpbnN0YW5jZW9mIEN1c3RvbVRyYW5zYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbiB0eXBlJyk7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0QnVpbGRlcih0eCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cbiJdfQ==
@@ -6,10 +6,11 @@ import { SignedTransaction } from '@aptos-labs/ts-sdk';
6
6
  import { BaseCoin as CoinConfig } from '@bitgo/statics';
7
7
  import { FungibleAssetTransferBuilder } from './transactionBuilder/fungibleAssetTransferBuilder';
8
8
  import { DigitalAssetTransferBuilder } from './transactionBuilder/digitalAssetTransferBuilder';
9
+ import { CustomTransactionBuilder } from './transactionBuilder/customTransactionBuilder';
9
10
  export declare class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
10
11
  constructor(_coinConfig: Readonly<CoinConfig>);
11
12
  /** @inheritdoc */
12
- from(signedRawTxn: string): TransactionBuilder;
13
+ from(signedRawTxn: string, abi?: any): TransactionBuilder;
13
14
  getTransactionTypeFromSignedTxn(signedTxn: SignedTransaction): TransactionType;
14
15
  /** @inheritdoc */
15
16
  getTransferBuilder(tx?: Transaction): TransferBuilder;
@@ -17,6 +18,13 @@ export declare class TransactionBuilderFactory extends BaseTransactionBuilderFac
17
18
  getFungibleAssetTransactionBuilder(tx?: Transaction): FungibleAssetTransferBuilder;
18
19
  /** @inheritdoc */
19
20
  getDigitalAssetTransactionBuilder(tx?: Transaction): DigitalAssetTransferBuilder;
21
+ /**
22
+ * Get a custom transaction builder
23
+ *
24
+ * @param tx - Optional transaction to initialize the builder with
25
+ * @returns A custom transaction builder
26
+ */
27
+ getCustomTransactionBuilder(tx?: Transaction): CustomTransactionBuilder;
20
28
  /** @inheritdoc */
21
29
  getWalletInitializationBuilder(): void;
22
30
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAA2B,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC1G,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAEvE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAE,4BAA4B,EAAE,MAAM,mDAAmD,CAAC;AAEjG,OAAO,EAAE,2BAA2B,EAAE,MAAM,kDAAkD,CAAC;AAE/F,qBAAa,yBAA0B,SAAQ,6BAA6B;gBAC9D,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,kBAAkB;IAyB9C,+BAA+B,CAAC,SAAS,EAAE,iBAAiB,GAAG,eAAe;IAK9E,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,eAAe;IAIrD,kBAAkB;IAClB,kCAAkC,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,4BAA4B;IAIlF,kBAAkB;IAClB,iCAAiC,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,2BAA2B;IAIhF,kBAAkB;IAClB,8BAA8B,IAAI,IAAI;IAItC;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;CAM1B"}
1
+ {"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAA2B,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC1G,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAEvE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAE,4BAA4B,EAAE,MAAM,mDAAmD,CAAC;AAEjG,OAAO,EAAE,2BAA2B,EAAE,MAAM,kDAAkD,CAAC;AAE/F,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AAEzF,qBAAa,yBAA0B,SAAQ,6BAA6B;gBAC9D,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,kBAAkB;IAiCzD,+BAA+B,CAAC,SAAS,EAAE,iBAAiB,GAAG,eAAe;IAK9E,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,eAAe;IAIrD,kBAAkB;IAClB,kCAAkC,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,4BAA4B;IAIlF,kBAAkB;IAClB,iCAAiC,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,2BAA2B;IAIhF;;;;;OAKG;IACH,2BAA2B,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,wBAAwB;IAIvE,kBAAkB;IAClB,8BAA8B,IAAI,IAAI;IAItC;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;CAM1B"}
@@ -13,12 +13,14 @@ const fungibleAssetTransfer_1 = require("./transaction/fungibleAssetTransfer");
13
13
  const fungibleAssetTransferBuilder_1 = require("./transactionBuilder/fungibleAssetTransferBuilder");
14
14
  const digitalAssetTransfer_1 = require("./transaction/digitalAssetTransfer");
15
15
  const digitalAssetTransferBuilder_1 = require("./transactionBuilder/digitalAssetTransferBuilder");
16
+ const customTransaction_1 = require("./transaction/customTransaction");
17
+ const customTransactionBuilder_1 = require("./transactionBuilder/customTransactionBuilder");
16
18
  class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory {
17
19
  constructor(_coinConfig) {
18
20
  super(_coinConfig);
19
21
  }
20
22
  /** @inheritdoc */
21
- from(signedRawTxn) {
23
+ from(signedRawTxn, abi) {
22
24
  try {
23
25
  const signedTxn = transaction_1.Transaction.deserializeSignedTransaction(signedRawTxn);
24
26
  const txnType = this.getTransactionTypeFromSignedTxn(signedTxn);
@@ -35,6 +37,13 @@ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory
35
37
  const digitalAssetTransferTx = new digitalAssetTransfer_1.DigitalAssetTransfer(this._coinConfig);
36
38
  digitalAssetTransferTx.fromDeserializedSignedTransaction(signedTxn);
37
39
  return this.getDigitalAssetTransactionBuilder(digitalAssetTransferTx);
40
+ case sdk_core_1.TransactionType.CustomTx:
41
+ const customTx = new customTransaction_1.CustomTransaction(this._coinConfig);
42
+ if (abi) {
43
+ customTx.setEntryFunctionAbi(abi);
44
+ }
45
+ customTx.fromDeserializedSignedTransaction(signedTxn);
46
+ return this.getCustomTransactionBuilder(customTx);
38
47
  default:
39
48
  throw new sdk_core_1.InvalidTransactionError('Invalid transaction');
40
49
  }
@@ -59,6 +68,15 @@ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory
59
68
  getDigitalAssetTransactionBuilder(tx) {
60
69
  return this.initializeBuilder(tx, new digitalAssetTransferBuilder_1.DigitalAssetTransferBuilder(this._coinConfig));
61
70
  }
71
+ /**
72
+ * Get a custom transaction builder
73
+ *
74
+ * @param tx - Optional transaction to initialize the builder with
75
+ * @returns A custom transaction builder
76
+ */
77
+ getCustomTransactionBuilder(tx) {
78
+ return this.initializeBuilder(tx, new customTransactionBuilder_1.CustomTransactionBuilder(this._coinConfig));
79
+ }
62
80
  /** @inheritdoc */
63
81
  getWalletInitializationBuilder() {
64
82
  throw new Error('Method not implemented.');
@@ -78,4 +96,4 @@ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory
78
96
  }
79
97
  }
80
98
  exports.TransactionBuilderFactory = TransactionBuilderFactory;
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw4Q0FBMEc7QUFFMUcsMEVBQXVFO0FBQ3ZFLG9EQUE0QjtBQUM1QiwyREFBd0Q7QUFFeEQsMkVBQXdFO0FBRXhFLCtFQUE0RTtBQUM1RSxvR0FBaUc7QUFDakcsNkVBQTBFO0FBQzFFLGtHQUErRjtBQUUvRixNQUFhLHlCQUEwQixTQUFRLHdDQUE2QjtJQUMxRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQUksQ0FBQyxZQUFvQjtRQUN2QixJQUFJLENBQUM7WUFDSCxNQUFNLFNBQVMsR0FBRyx5QkFBVyxDQUFDLDRCQUE0QixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNoRSxRQUFRLE9BQU8sRUFBRSxDQUFDO2dCQUNoQixLQUFLLDBCQUFlLENBQUMsSUFBSTtvQkFDdkIsTUFBTSxVQUFVLEdBQUcsSUFBSSx5Q0FBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQzdELFVBQVUsQ0FBQyxpQ0FBaUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDeEQsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzdDLEtBQUssMEJBQWUsQ0FBQyxTQUFTO29CQUM1QixNQUFNLHVCQUF1QixHQUFHLElBQUksNkNBQXFCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUM1RSx1QkFBdUIsQ0FBQyxpQ0FBaUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDckUsT0FBTyxJQUFJLENBQUMsa0NBQWtDLENBQUMsdUJBQXVCLENBQUMsQ0FBQztnQkFDMUUsS0FBSywwQkFBZSxDQUFDLE9BQU87b0JBQzFCLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSwyQ0FBb0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQzFFLHNCQUFzQixDQUFDLGlDQUFpQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUNwRSxPQUFPLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2dCQUN4RTtvQkFDRSxNQUFNLElBQUksa0NBQXVCLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUM3RCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxNQUFNLENBQUMsQ0FBQztRQUNWLENBQUM7SUFDSCxDQUFDO0lBRUQsK0JBQStCLENBQUMsU0FBNEI7UUFDMUQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQztRQUNqQyxPQUFPLGVBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixrQkFBa0IsQ0FBQyxFQUFnQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxpQ0FBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsa0NBQWtDLENBQUMsRUFBZ0I7UUFDakQsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksMkRBQTRCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixpQ0FBaUMsQ0FBQyxFQUFnQjtRQUNoRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSx5REFBMkIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLDhCQUE4QjtRQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLGlCQUFpQixDQUErQixFQUEyQixFQUFFLE9BQVU7UUFDN0YsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNQLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUIsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRjtBQXJFRCw4REFxRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSwgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlci90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXIvdHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBTaWduZWRUcmFuc2FjdGlvbiB9IGZyb20gJ0BhcHRvcy1sYWJzL3RzLXNkayc7XG5pbXBvcnQgeyBUcmFuc2ZlclRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi90cmFuc2ZlclRyYW5zYWN0aW9uJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBGdW5naWJsZUFzc2V0VHJhbnNmZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uL2Z1bmdpYmxlQXNzZXRUcmFuc2Zlcic7XG5pbXBvcnQgeyBGdW5naWJsZUFzc2V0VHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXIvZnVuZ2libGVBc3NldFRyYW5zZmVyQnVpbGRlcic7XG5pbXBvcnQgeyBEaWdpdGFsQXNzZXRUcmFuc2ZlciB9IGZyb20gJy4vdHJhbnNhY3Rpb24vZGlnaXRhbEFzc2V0VHJhbnNmZXInO1xuaW1wb3J0IHsgRGlnaXRhbEFzc2V0VHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXIvZGlnaXRhbEFzc2V0VHJhbnNmZXJCdWlsZGVyJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBmcm9tKHNpZ25lZFJhd1R4bjogc3RyaW5nKTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2lnbmVkVHhuID0gVHJhbnNhY3Rpb24uZGVzZXJpYWxpemVTaWduZWRUcmFuc2FjdGlvbihzaWduZWRSYXdUeG4pO1xuICAgICAgY29uc3QgdHhuVHlwZSA9IHRoaXMuZ2V0VHJhbnNhY3Rpb25UeXBlRnJvbVNpZ25lZFR4bihzaWduZWRUeG4pO1xuICAgICAgc3dpdGNoICh0eG5UeXBlKSB7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNlbmQ6XG4gICAgICAgICAgY29uc3QgdHJhbnNmZXJUeCA9IG5ldyBUcmFuc2ZlclRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgICAgICAgIHRyYW5zZmVyVHguZnJvbURlc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFR4bik7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNmZXJCdWlsZGVyKHRyYW5zZmVyVHgpO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TZW5kVG9rZW46XG4gICAgICAgICAgY29uc3QgZnVuZ2libGVUcmFuc2ZlclRva2VuVHggPSBuZXcgRnVuZ2libGVBc3NldFRyYW5zZmVyKHRoaXMuX2NvaW5Db25maWcpO1xuICAgICAgICAgIGZ1bmdpYmxlVHJhbnNmZXJUb2tlblR4LmZyb21EZXNlcmlhbGl6ZWRTaWduZWRUcmFuc2FjdGlvbihzaWduZWRUeG4pO1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldEZ1bmdpYmxlQXNzZXRUcmFuc2FjdGlvbkJ1aWxkZXIoZnVuZ2libGVUcmFuc2ZlclRva2VuVHgpO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TZW5kTkZUOlxuICAgICAgICAgIGNvbnN0IGRpZ2l0YWxBc3NldFRyYW5zZmVyVHggPSBuZXcgRGlnaXRhbEFzc2V0VHJhbnNmZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gICAgICAgICAgZGlnaXRhbEFzc2V0VHJhbnNmZXJUeC5mcm9tRGVzZXJpYWxpemVkU2lnbmVkVHJhbnNhY3Rpb24oc2lnbmVkVHhuKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXREaWdpdGFsQXNzZXRUcmFuc2FjdGlvbkJ1aWxkZXIoZGlnaXRhbEFzc2V0VHJhbnNmZXJUeCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBnZXRUcmFuc2FjdGlvblR5cGVGcm9tU2lnbmVkVHhuKHNpZ25lZFR4bjogU2lnbmVkVHJhbnNhY3Rpb24pOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIGNvbnN0IHJhd1R4biA9IHNpZ25lZFR4bi5yYXdfdHhuO1xuICAgIHJldHVybiB1dGlscy5nZXRUcmFuc2FjdGlvblR5cGVGcm9tVHJhbnNhY3Rpb25QYXlsb2FkKHJhd1R4bi5wYXlsb2FkKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBnZXRUcmFuc2ZlckJ1aWxkZXIodHg/OiBUcmFuc2FjdGlvbik6IFRyYW5zZmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBUcmFuc2ZlckJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldEZ1bmdpYmxlQXNzZXRUcmFuc2FjdGlvbkJ1aWxkZXIodHg/OiBUcmFuc2FjdGlvbik6IEZ1bmdpYmxlQXNzZXRUcmFuc2ZlckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgRnVuZ2libGVBc3NldFRyYW5zZmVyQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0RGlnaXRhbEFzc2V0VHJhbnNhY3Rpb25CdWlsZGVyKHR4PzogVHJhbnNhY3Rpb24pOiBEaWdpdGFsQXNzZXRUcmFuc2ZlckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgRGlnaXRhbEFzc2V0VHJhbnNmZXJCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBnZXRXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTogdm9pZCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGJ1aWxkZXIgd2l0aCB0aGUgZ2l2ZW4gdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbiB8IHVuZGVmaW5lZH0gdHggLSB0aGUgdHJhbnNhY3Rpb24gdXNlZCB0byBpbml0aWFsaXplIHRoZSBidWlsZGVyXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25CdWlsZGVyfSBidWlsZGVyIC0gdGhlIGJ1aWxkZXIgdG8gYmUgaW5pdGlhbGl6ZWRcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gdGhlIGJ1aWxkZXIgaW5pdGlhbGl6ZWRcbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUJ1aWxkZXI8VCBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlcj4odHg6IFRyYW5zYWN0aW9uIHwgdW5kZWZpbmVkLCBidWlsZGVyOiBUKTogVCB7XG4gICAgaWYgKHR4KSB7XG4gICAgICBidWlsZGVyLmluaXRCdWlsZGVyKHR4KTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cbn1cbiJdfQ==
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw4Q0FBMEc7QUFFMUcsMEVBQXVFO0FBQ3ZFLG9EQUE0QjtBQUM1QiwyREFBd0Q7QUFFeEQsMkVBQXdFO0FBRXhFLCtFQUE0RTtBQUM1RSxvR0FBaUc7QUFDakcsNkVBQTBFO0FBQzFFLGtHQUErRjtBQUMvRix1RUFBb0U7QUFDcEUsNEZBQXlGO0FBRXpGLE1BQWEseUJBQTBCLFNBQVEsd0NBQTZCO0lBQzFFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBSSxDQUFDLFlBQW9CLEVBQUUsR0FBUztRQUNsQyxJQUFJLENBQUM7WUFDSCxNQUFNLFNBQVMsR0FBRyx5QkFBVyxDQUFDLDRCQUE0QixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUVoRSxRQUFRLE9BQU8sRUFBRSxDQUFDO2dCQUNoQixLQUFLLDBCQUFlLENBQUMsSUFBSTtvQkFDdkIsTUFBTSxVQUFVLEdBQUcsSUFBSSx5Q0FBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQzdELFVBQVUsQ0FBQyxpQ0FBaUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDeEQsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzdDLEtBQUssMEJBQWUsQ0FBQyxTQUFTO29CQUM1QixNQUFNLHVCQUF1QixHQUFHLElBQUksNkNBQXFCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUM1RSx1QkFBdUIsQ0FBQyxpQ0FBaUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDckUsT0FBTyxJQUFJLENBQUMsa0NBQWtDLENBQUMsdUJBQXVCLENBQUMsQ0FBQztnQkFDMUUsS0FBSywwQkFBZSxDQUFDLE9BQU87b0JBQzFCLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSwyQ0FBb0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQzFFLHNCQUFzQixDQUFDLGlDQUFpQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUNwRSxPQUFPLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2dCQUN4RSxLQUFLLDBCQUFlLENBQUMsUUFBUTtvQkFDM0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxxQ0FBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3pELElBQUksR0FBRyxFQUFFLENBQUM7d0JBQ1IsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNwQyxDQUFDO29CQUNELFFBQVEsQ0FBQyxpQ0FBaUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDdEQsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3BEO29CQUNFLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQzdELENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sQ0FBQyxDQUFDO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFRCwrQkFBK0IsQ0FBQyxTQUE0QjtRQUMxRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQ2pDLE9BQU8sZUFBSyxDQUFDLHdDQUF3QyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGtCQUFrQixDQUFDLEVBQWdCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLGlDQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixrQ0FBa0MsQ0FBQyxFQUFnQjtRQUNqRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSwyREFBNEIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGlDQUFpQyxDQUFDLEVBQWdCO1FBQ2hELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLHlEQUEyQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDJCQUEyQixDQUFDLEVBQWdCO1FBQzFDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLG1EQUF3QixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsOEJBQThCO1FBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssaUJBQWlCLENBQStCLEVBQTJCLEVBQUUsT0FBVTtRQUM3RixJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ1AsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGO0FBdkZELDhEQXVGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBUcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlci90cmFuc2ZlckJ1aWxkZXInO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFNpZ25lZFRyYW5zYWN0aW9uIH0gZnJvbSAnQGFwdG9zLWxhYnMvdHMtc2RrJztcbmltcG9ydCB7IFRyYW5zZmVyVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uL3RyYW5zZmVyVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IEZ1bmdpYmxlQXNzZXRUcmFuc2ZlciB9IGZyb20gJy4vdHJhbnNhY3Rpb24vZnVuZ2libGVBc3NldFRyYW5zZmVyJztcbmltcG9ydCB7IEZ1bmdpYmxlQXNzZXRUcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlci9mdW5naWJsZUFzc2V0VHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCB7IERpZ2l0YWxBc3NldFRyYW5zZmVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbi9kaWdpdGFsQXNzZXRUcmFuc2Zlcic7XG5pbXBvcnQgeyBEaWdpdGFsQXNzZXRUcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlci9kaWdpdGFsQXNzZXRUcmFuc2ZlckJ1aWxkZXInO1xuaW1wb3J0IHsgQ3VzdG9tVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uL2N1c3RvbVRyYW5zYWN0aW9uJztcbmltcG9ydCB7IEN1c3RvbVRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyL2N1c3RvbVRyYW5zYWN0aW9uQnVpbGRlcic7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnkge1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZnJvbShzaWduZWRSYXdUeG46IHN0cmluZywgYWJpPzogYW55KTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2lnbmVkVHhuID0gVHJhbnNhY3Rpb24uZGVzZXJpYWxpemVTaWduZWRUcmFuc2FjdGlvbihzaWduZWRSYXdUeG4pO1xuICAgICAgY29uc3QgdHhuVHlwZSA9IHRoaXMuZ2V0VHJhbnNhY3Rpb25UeXBlRnJvbVNpZ25lZFR4bihzaWduZWRUeG4pO1xuXG4gICAgICBzd2l0Y2ggKHR4blR5cGUpIHtcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU2VuZDpcbiAgICAgICAgICBjb25zdCB0cmFuc2ZlclR4ID0gbmV3IFRyYW5zZmVyVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZyk7XG4gICAgICAgICAgdHJhbnNmZXJUeC5mcm9tRGVzZXJpYWxpemVkU2lnbmVkVHJhbnNhY3Rpb24oc2lnbmVkVHhuKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2ZlckJ1aWxkZXIodHJhbnNmZXJUeCk7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNlbmRUb2tlbjpcbiAgICAgICAgICBjb25zdCBmdW5naWJsZVRyYW5zZmVyVG9rZW5UeCA9IG5ldyBGdW5naWJsZUFzc2V0VHJhbnNmZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gICAgICAgICAgZnVuZ2libGVUcmFuc2ZlclRva2VuVHguZnJvbURlc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFR4bik7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RnVuZ2libGVBc3NldFRyYW5zYWN0aW9uQnVpbGRlcihmdW5naWJsZVRyYW5zZmVyVG9rZW5UeCk7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNlbmRORlQ6XG4gICAgICAgICAgY29uc3QgZGlnaXRhbEFzc2V0VHJhbnNmZXJUeCA9IG5ldyBEaWdpdGFsQXNzZXRUcmFuc2Zlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgICAgICAgICBkaWdpdGFsQXNzZXRUcmFuc2ZlclR4LmZyb21EZXNlcmlhbGl6ZWRTaWduZWRUcmFuc2FjdGlvbihzaWduZWRUeG4pO1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldERpZ2l0YWxBc3NldFRyYW5zYWN0aW9uQnVpbGRlcihkaWdpdGFsQXNzZXRUcmFuc2ZlclR4KTtcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQ3VzdG9tVHg6XG4gICAgICAgICAgY29uc3QgY3VzdG9tVHggPSBuZXcgQ3VzdG9tVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZyk7XG4gICAgICAgICAgaWYgKGFiaSkge1xuICAgICAgICAgICAgY3VzdG9tVHguc2V0RW50cnlGdW5jdGlvbkFiaShhYmkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXN0b21UeC5mcm9tRGVzZXJpYWxpemVkU2lnbmVkVHJhbnNhY3Rpb24oc2lnbmVkVHhuKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDdXN0b21UcmFuc2FjdGlvbkJ1aWxkZXIoY3VzdG9tVHgpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgZ2V0VHJhbnNhY3Rpb25UeXBlRnJvbVNpZ25lZFR4bihzaWduZWRUeG46IFNpZ25lZFRyYW5zYWN0aW9uKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICBjb25zdCByYXdUeG4gPSBzaWduZWRUeG4ucmF3X3R4bjtcbiAgICByZXR1cm4gdXRpbHMuZ2V0VHJhbnNhY3Rpb25UeXBlRnJvbVRyYW5zYWN0aW9uUGF5bG9hZChyYXdUeG4ucGF5bG9hZCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0VHJhbnNmZXJCdWlsZGVyKHR4PzogVHJhbnNhY3Rpb24pOiBUcmFuc2ZlckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgVHJhbnNmZXJCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBnZXRGdW5naWJsZUFzc2V0VHJhbnNhY3Rpb25CdWlsZGVyKHR4PzogVHJhbnNhY3Rpb24pOiBGdW5naWJsZUFzc2V0VHJhbnNmZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IEZ1bmdpYmxlQXNzZXRUcmFuc2ZlckJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldERpZ2l0YWxBc3NldFRyYW5zYWN0aW9uQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uKTogRGlnaXRhbEFzc2V0VHJhbnNmZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IERpZ2l0YWxBc3NldFRyYW5zZmVyQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgY3VzdG9tIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICpcbiAgICogQHBhcmFtIHR4IC0gT3B0aW9uYWwgdHJhbnNhY3Rpb24gdG8gaW5pdGlhbGl6ZSB0aGUgYnVpbGRlciB3aXRoXG4gICAqIEByZXR1cm5zIEEgY3VzdG9tIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIGdldEN1c3RvbVRyYW5zYWN0aW9uQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uKTogQ3VzdG9tVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IEN1c3RvbVRyYW5zYWN0aW9uQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0V2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKCk6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBidWlsZGVyIHdpdGggdGhlIGdpdmVuIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb24gfCB1bmRlZmluZWR9IHR4IC0gdGhlIHRyYW5zYWN0aW9uIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYnVpbGRlclxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uQnVpbGRlcn0gYnVpbGRlciAtIHRoZSBidWlsZGVyIHRvIGJlIGluaXRpYWxpemVkXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IHRoZSBidWlsZGVyIGluaXRpYWxpemVkXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVCdWlsZGVyPFQgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXI+KHR4OiBUcmFuc2FjdGlvbiB8IHVuZGVmaW5lZCwgYnVpbGRlcjogVCk6IFQge1xuICAgIGlmICh0eCkge1xuICAgICAgYnVpbGRlci5pbml0QnVpbGRlcih0eCk7XG4gICAgfVxuICAgIHJldHVybiBidWlsZGVyO1xuICB9XG59XG4iXX0=