@bitgo/sdk-coin-starknet 0.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/LICENSE +191 -0
  2. package/dist/src/index.d.ts +4 -0
  3. package/dist/src/index.d.ts.map +1 -0
  4. package/dist/src/index.js +20 -0
  5. package/dist/src/lib/constants.d.ts +8 -0
  6. package/dist/src/lib/constants.d.ts.map +1 -0
  7. package/dist/src/lib/constants.js +17 -0
  8. package/dist/src/lib/iface.d.ts +61 -0
  9. package/dist/src/lib/iface.d.ts.map +1 -0
  10. package/dist/src/lib/iface.js +9 -0
  11. package/dist/src/lib/index.d.ts +9 -0
  12. package/dist/src/lib/index.d.ts.map +1 -0
  13. package/dist/src/lib/index.js +53 -0
  14. package/dist/src/lib/keyPair.d.ts +9 -0
  15. package/dist/src/lib/keyPair.d.ts.map +1 -0
  16. package/dist/src/lib/keyPair.js +48 -0
  17. package/dist/src/lib/transaction.d.ts +22 -0
  18. package/dist/src/lib/transaction.d.ts.map +1 -0
  19. package/dist/src/lib/transaction.js +134 -0
  20. package/dist/src/lib/transactionBuilder.d.ts +39 -0
  21. package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
  22. package/dist/src/lib/transactionBuilder.js +119 -0
  23. package/dist/src/lib/transactionBuilderFactory.d.ts +16 -0
  24. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
  25. package/dist/src/lib/transactionBuilderFactory.js +44 -0
  26. package/dist/src/lib/transferBuilder.d.ts +19 -0
  27. package/dist/src/lib/transferBuilder.d.ts.map +1 -0
  28. package/dist/src/lib/transferBuilder.js +79 -0
  29. package/dist/src/lib/utils.d.ts +82 -0
  30. package/dist/src/lib/utils.d.ts.map +1 -0
  31. package/dist/src/lib/utils.js +208 -0
  32. package/dist/src/register.d.ts +3 -0
  33. package/dist/src/register.d.ts.map +1 -0
  34. package/dist/src/register.js +10 -0
  35. package/dist/src/starknet.d.ts +35 -0
  36. package/dist/src/starknet.d.ts.map +1 -0
  37. package/dist/src/starknet.js +127 -0
  38. package/dist/test/resources/starknet.d.ts +53 -0
  39. package/dist/test/resources/starknet.d.ts.map +1 -0
  40. package/dist/test/resources/starknet.js +75 -0
  41. package/dist/test/unit/keyPair.d.ts +2 -0
  42. package/dist/test/unit/keyPair.d.ts.map +1 -0
  43. package/dist/test/unit/keyPair.js +56 -0
  44. package/dist/test/unit/starknet.d.ts +2 -0
  45. package/dist/test/unit/starknet.d.ts.map +1 -0
  46. package/dist/test/unit/starknet.js +126 -0
  47. package/dist/test/unit/transaction.d.ts +2 -0
  48. package/dist/test/unit/transaction.d.ts.map +1 -0
  49. package/dist/test/unit/transaction.js +53 -0
  50. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts +2 -0
  51. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
  52. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +74 -0
  53. package/dist/test/unit/utils.d.ts +2 -0
  54. package/dist/test/unit/utils.d.ts.map +1 -0
  55. package/dist/test/unit/utils.js +73 -0
  56. package/dist/tsconfig.tsbuildinfo +1 -0
  57. package/package.json +52 -10
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.Transaction = void 0;
37
+ const sdk_core_1 = require("@bitgo/sdk-core");
38
+ const iface_1 = require("./iface");
39
+ const utils_1 = __importStar(require("./utils"));
40
+ class Transaction extends sdk_core_1.BaseTransaction {
41
+ constructor(_coinConfig) {
42
+ super(_coinConfig);
43
+ }
44
+ get starknetTransactionData() {
45
+ return this._starknetTransactionData;
46
+ }
47
+ set starknetTransactionData(data) {
48
+ this._starknetTransactionData = data;
49
+ }
50
+ get signedTransaction() {
51
+ return this._signedTransaction;
52
+ }
53
+ set signedTransaction(tx) {
54
+ this._signedTransaction = tx;
55
+ }
56
+ async fromRawTransaction(rawTransaction) {
57
+ try {
58
+ const buffer = Buffer.from(rawTransaction, 'hex');
59
+ const jsonString = buffer.toString('utf-8');
60
+ const parsed = JSON.parse(jsonString);
61
+ this._starknetTransactionData = {
62
+ senderAddress: parsed.senderAddress,
63
+ calls: parsed.calls || [],
64
+ nonce: parsed.nonce,
65
+ chainId: parsed.chainId,
66
+ transactionType: parsed.transactionType || iface_1.StarknetTransactionType.INVOKE,
67
+ signature: parsed.signature,
68
+ transactionHash: parsed.transactionHash,
69
+ };
70
+ if (parsed.signature && parsed.signature.length > 0) {
71
+ this._signedTransaction = rawTransaction;
72
+ }
73
+ utils_1.default.validateRawTransaction(this._starknetTransactionData);
74
+ this._id = parsed.transactionHash || '';
75
+ }
76
+ catch (error) {
77
+ throw new sdk_core_1.InvalidTransactionError(`Invalid transaction: ${error.message}`);
78
+ }
79
+ }
80
+ /** @inheritdoc */
81
+ toJson() {
82
+ if (!this._starknetTransactionData) {
83
+ throw new sdk_core_1.InvalidTransactionError('Empty transaction');
84
+ }
85
+ const transfer = this._starknetTransactionData.calls.length > 0
86
+ ? (0, utils_1.parseTransferCall)(this._starknetTransactionData.calls[0])
87
+ : undefined;
88
+ return {
89
+ id: this._id,
90
+ sender: this._starknetTransactionData.senderAddress,
91
+ recipient: transfer?.recipient,
92
+ amount: transfer?.amount,
93
+ nonce: this._starknetTransactionData.nonce,
94
+ type: sdk_core_1.TransactionType.Send,
95
+ };
96
+ }
97
+ /** @inheritDoc */
98
+ explainTransaction() {
99
+ const result = this.toJson();
100
+ const displayOrder = ['id', 'outputAmount', 'changeAmount', 'outputs', 'changeOutputs', 'fee'];
101
+ const outputs = [];
102
+ if (result.recipient && result.amount) {
103
+ outputs.push({
104
+ address: result.recipient,
105
+ amount: result.amount,
106
+ });
107
+ }
108
+ return {
109
+ displayOrder,
110
+ id: this.id,
111
+ outputs,
112
+ outputAmount: result.amount || '0',
113
+ fee: { fee: '0' },
114
+ type: result.type,
115
+ changeOutputs: [],
116
+ changeAmount: '0',
117
+ };
118
+ }
119
+ /** @inheritdoc */
120
+ toBroadcastFormat() {
121
+ const data = this._starknetTransactionData;
122
+ if (!data) {
123
+ throw new sdk_core_1.InvalidTransactionError('Empty transaction');
124
+ }
125
+ const json = JSON.stringify(data);
126
+ return Buffer.from(json, 'utf-8').toString('hex');
127
+ }
128
+ /** @inheritdoc */
129
+ canSign(_key) {
130
+ return false;
131
+ }
132
+ }
133
+ exports.Transaction = Transaction;
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQU15QjtBQUV6QixtQ0FBbUg7QUFDbkgsaURBQW1EO0FBRW5ELE1BQWEsV0FBWSxTQUFRLDBCQUFlO0lBSTlDLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJLHVCQUF1QjtRQUN6QixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSx1QkFBdUIsQ0FBQyxJQUE2QjtRQUN2RCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxpQkFBaUIsQ0FBQyxFQUFVO1FBQzlCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxjQUFzQjtRQUM3QyxJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNsRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFdEMsSUFBSSxDQUFDLHdCQUF3QixHQUFHO2dCQUM5QixhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWE7Z0JBQ25DLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0JBQ3pCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztnQkFDbkIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO2dCQUN2QixlQUFlLEVBQUUsTUFBTSxDQUFDLGVBQWUsSUFBSSwrQkFBdUIsQ0FBQyxNQUFNO2dCQUN6RSxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7Z0JBQzNCLGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZTthQUN4QyxDQUFDO1lBRUYsSUFBSSxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNwRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsY0FBYyxDQUFDO1lBQzNDLENBQUM7WUFFRCxlQUFLLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQztRQUMxQyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyx3QkFBd0IsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDN0UsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsTUFBTTtRQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksa0NBQXVCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsTUFBTSxRQUFRLEdBQ1osSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUM1QyxDQUFDLENBQUMsSUFBQSx5QkFBaUIsRUFBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNELENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDaEIsT0FBTztZQUNMLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRztZQUNaLE1BQU0sRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYTtZQUNuRCxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVM7WUFDOUIsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNO1lBQ3hCLEtBQUssRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSztZQUMxQyxJQUFJLEVBQUUsMEJBQWUsQ0FBQyxJQUFJO1NBQzNCLENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGtCQUFrQjtRQUNoQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDN0IsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9GLE1BQU0sT0FBTyxHQUEyQixFQUFFLENBQUM7UUFFM0MsSUFBSSxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNYLE9BQU8sRUFBRSxNQUFNLENBQUMsU0FBUztnQkFDekIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO2FBQ3RCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPO1lBQ0wsWUFBWTtZQUNaLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNYLE9BQU87WUFDUCxZQUFZLEVBQUUsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHO1lBQ2xDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7WUFDakIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1lBQ2pCLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLFlBQVksRUFBRSxHQUFHO1NBQ2xCLENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGlCQUFpQjtRQUNmLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztRQUMzQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixNQUFNLElBQUksa0NBQXVCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLE9BQU8sQ0FBQyxJQUFhO1FBQ25CLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGO0FBN0dELGtDQTZHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbixcbiAgVHJhbnNhY3Rpb25SZWNpcGllbnQsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgU3RhcmtuZXRUcmFuc2FjdGlvbkRhdGEsIFN0YXJrbmV0VHJhbnNhY3Rpb25UeXBlLCBTdGFya25ldFRyYW5zYWN0aW9uRXhwbGFuYXRpb24sIFR4RGF0YSB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHV0aWxzLCB7IHBhcnNlVHJhbnNmZXJDYWxsIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIHByb3RlY3RlZCBfc3RhcmtuZXRUcmFuc2FjdGlvbkRhdGEhOiBTdGFya25ldFRyYW5zYWN0aW9uRGF0YTtcbiAgcHJvdGVjdGVkIF9zaWduZWRUcmFuc2FjdGlvbj86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICBnZXQgc3RhcmtuZXRUcmFuc2FjdGlvbkRhdGEoKTogU3RhcmtuZXRUcmFuc2FjdGlvbkRhdGEge1xuICAgIHJldHVybiB0aGlzLl9zdGFya25ldFRyYW5zYWN0aW9uRGF0YTtcbiAgfVxuXG4gIHNldCBzdGFya25ldFRyYW5zYWN0aW9uRGF0YShkYXRhOiBTdGFya25ldFRyYW5zYWN0aW9uRGF0YSkge1xuICAgIHRoaXMuX3N0YXJrbmV0VHJhbnNhY3Rpb25EYXRhID0gZGF0YTtcbiAgfVxuXG4gIGdldCBzaWduZWRUcmFuc2FjdGlvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9zaWduZWRUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIHNldCBzaWduZWRUcmFuc2FjdGlvbih0eDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2lnbmVkVHJhbnNhY3Rpb24gPSB0eDtcbiAgfVxuXG4gIGFzeW5jIGZyb21SYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHJhd1RyYW5zYWN0aW9uLCAnaGV4Jyk7XG4gICAgICBjb25zdCBqc29uU3RyaW5nID0gYnVmZmVyLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcblxuICAgICAgdGhpcy5fc3RhcmtuZXRUcmFuc2FjdGlvbkRhdGEgPSB7XG4gICAgICAgIHNlbmRlckFkZHJlc3M6IHBhcnNlZC5zZW5kZXJBZGRyZXNzLFxuICAgICAgICBjYWxsczogcGFyc2VkLmNhbGxzIHx8IFtdLFxuICAgICAgICBub25jZTogcGFyc2VkLm5vbmNlLFxuICAgICAgICBjaGFpbklkOiBwYXJzZWQuY2hhaW5JZCxcbiAgICAgICAgdHJhbnNhY3Rpb25UeXBlOiBwYXJzZWQudHJhbnNhY3Rpb25UeXBlIHx8IFN0YXJrbmV0VHJhbnNhY3Rpb25UeXBlLklOVk9LRSxcbiAgICAgICAgc2lnbmF0dXJlOiBwYXJzZWQuc2lnbmF0dXJlLFxuICAgICAgICB0cmFuc2FjdGlvbkhhc2g6IHBhcnNlZC50cmFuc2FjdGlvbkhhc2gsXG4gICAgICB9O1xuXG4gICAgICBpZiAocGFyc2VkLnNpZ25hdHVyZSAmJiBwYXJzZWQuc2lnbmF0dXJlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5fc2lnbmVkVHJhbnNhY3Rpb24gPSByYXdUcmFuc2FjdGlvbjtcbiAgICAgIH1cblxuICAgICAgdXRpbHMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbih0aGlzLl9zdGFya25ldFRyYW5zYWN0aW9uRGF0YSk7XG4gICAgICB0aGlzLl9pZCA9IHBhcnNlZC50cmFuc2FjdGlvbkhhc2ggfHwgJyc7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCB0cmFuc2FjdGlvbjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0pzb24oKTogVHhEYXRhIHtcbiAgICBpZiAoIXRoaXMuX3N0YXJrbmV0VHJhbnNhY3Rpb25EYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGNvbnN0IHRyYW5zZmVyID1cbiAgICAgIHRoaXMuX3N0YXJrbmV0VHJhbnNhY3Rpb25EYXRhLmNhbGxzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBwYXJzZVRyYW5zZmVyQ2FsbCh0aGlzLl9zdGFya25ldFRyYW5zYWN0aW9uRGF0YS5jYWxsc1swXSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLl9pZCxcbiAgICAgIHNlbmRlcjogdGhpcy5fc3RhcmtuZXRUcmFuc2FjdGlvbkRhdGEuc2VuZGVyQWRkcmVzcyxcbiAgICAgIHJlY2lwaWVudDogdHJhbnNmZXI/LnJlY2lwaWVudCxcbiAgICAgIGFtb3VudDogdHJhbnNmZXI/LmFtb3VudCxcbiAgICAgIG5vbmNlOiB0aGlzLl9zdGFya25ldFRyYW5zYWN0aW9uRGF0YS5ub25jZSxcbiAgICAgIHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5TZW5kLFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uKCk6IFN0YXJrbmV0VHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy50b0pzb24oKTtcbiAgICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbJ2lkJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VBbW91bnQnLCAnb3V0cHV0cycsICdjaGFuZ2VPdXRwdXRzJywgJ2ZlZSddO1xuICAgIGNvbnN0IG91dHB1dHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W10gPSBbXTtcblxuICAgIGlmIChyZXN1bHQucmVjaXBpZW50ICYmIHJlc3VsdC5hbW91bnQpIHtcbiAgICAgIG91dHB1dHMucHVzaCh7XG4gICAgICAgIGFkZHJlc3M6IHJlc3VsdC5yZWNpcGllbnQsXG4gICAgICAgIGFtb3VudDogcmVzdWx0LmFtb3VudCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkaXNwbGF5T3JkZXIsXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG91dHB1dHMsXG4gICAgICBvdXRwdXRBbW91bnQ6IHJlc3VsdC5hbW91bnQgfHwgJzAnLFxuICAgICAgZmVlOiB7IGZlZTogJzAnIH0sXG4gICAgICB0eXBlOiByZXN1bHQudHlwZSxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9zdGFya25ldFRyYW5zYWN0aW9uRGF0YTtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShqc29uLCAndXRmLTgnKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgY2FuU2lnbihfa2V5OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,39 @@
1
+ import { BaseAddress, BaseKey, BaseTransactionBuilder } from '@bitgo/sdk-core';
2
+ import { BaseCoin as CoinConfig } from '@bitgo/statics';
3
+ import BigNumber from 'bignumber.js';
4
+ import { StarknetTransactionType, StarknetCall } from './iface';
5
+ import { Transaction } from './transaction';
6
+ export declare abstract class TransactionBuilder extends BaseTransactionBuilder {
7
+ protected _transaction: Transaction;
8
+ protected _sender?: string;
9
+ protected _publicKey?: string;
10
+ protected _calls: StarknetCall[];
11
+ protected _nonce?: string;
12
+ protected _chainId?: string;
13
+ constructor(_coinConfig: Readonly<CoinConfig>);
14
+ sender(address: string, pubKey?: string): this;
15
+ nonce(nonce: string): this;
16
+ chainId(chainId: string): this;
17
+ /** @inheritdoc */
18
+ get transaction(): Transaction;
19
+ /** @inheritdoc */
20
+ set transaction(transaction: Transaction);
21
+ initBuilder(tx: Transaction): void;
22
+ /** @inheritdoc */
23
+ validateAddress(address: BaseAddress): void;
24
+ /** @inheritdoc */
25
+ validateKey(key: BaseKey): void;
26
+ /** @inheritdoc */
27
+ validateTransaction(_transaction: Transaction): void;
28
+ /** @inheritdoc */
29
+ validateValue(value: BigNumber): void;
30
+ /** @inheritdoc */
31
+ validateRawTransaction(rawTransaction: string): void;
32
+ /** @inheritdoc */
33
+ protected fromImplementation(rawTransaction: string): Transaction;
34
+ protected abstract get transactionType(): StarknetTransactionType;
35
+ /** @inheritdoc */
36
+ protected buildImplementation(): Promise<Transaction>;
37
+ protected signImplementation(_key: BaseKey): Transaction;
38
+ }
39
+ //# sourceMappingURL=transactionBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,OAAO,EACP,sBAAsB,EAIvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAA2B,uBAAuB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,8BAAsB,kBAAmB,SAAQ,sBAAsB;IACrE,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;IACpC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,CAAM;IACtC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;gBAEhB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAKtC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAoB9C,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKrC,kBAAkB;IAClB,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,kBAAkB;IAClB,IAAI,WAAW,CAAC,WAAW,EAAE,WAAW,EAEvC;IAED,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IASlC,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAM3C,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAS/B,kBAAkB;IAClB,mBAAmB,CAAC,YAAY,EAAE,WAAW,GAAG,IAAI;IAYpD,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAMrC,kBAAkB;IAClB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAMpD,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAKjE,SAAS,CAAC,QAAQ,KAAK,eAAe,IAAI,uBAAuB,CAAC;IAElE,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAc3D,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW;CAGzD"}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TransactionBuilder = void 0;
7
+ const sdk_core_1 = require("@bitgo/sdk-core");
8
+ const transaction_1 = require("./transaction");
9
+ const utils_1 = __importDefault(require("./utils"));
10
+ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
11
+ constructor(_coinConfig) {
12
+ super(_coinConfig);
13
+ this._calls = [];
14
+ this._transaction = new transaction_1.Transaction(_coinConfig);
15
+ }
16
+ sender(address, pubKey) {
17
+ if (!address || !utils_1.default.isValidAddress(address)) {
18
+ throw new sdk_core_1.BuildTransactionError('Invalid or missing address, got: ' + address);
19
+ }
20
+ if (pubKey) {
21
+ if (!utils_1.default.isValidPublicKey(pubKey)) {
22
+ throw new sdk_core_1.BuildTransactionError('Invalid pubKey, got: ' + pubKey);
23
+ }
24
+ const derivedAddress = utils_1.default.getAddressFromPublicKey(pubKey);
25
+ if (utils_1.default.normalizeAddress(derivedAddress) !== utils_1.default.normalizeAddress(address)) {
26
+ throw new sdk_core_1.BuildTransactionError(`Address does not match public key. Expected ${derivedAddress}, got ${address}`);
27
+ }
28
+ this._publicKey = pubKey;
29
+ }
30
+ this._sender = address;
31
+ return this;
32
+ }
33
+ nonce(nonce) {
34
+ this._nonce = nonce;
35
+ return this;
36
+ }
37
+ chainId(chainId) {
38
+ this._chainId = chainId;
39
+ return this;
40
+ }
41
+ /** @inheritdoc */
42
+ get transaction() {
43
+ return this._transaction;
44
+ }
45
+ /** @inheritdoc */
46
+ set transaction(transaction) {
47
+ this._transaction = transaction;
48
+ }
49
+ initBuilder(tx) {
50
+ this._transaction = tx;
51
+ const data = tx.starknetTransactionData;
52
+ this._sender = data.senderAddress;
53
+ this._calls = data.calls || [];
54
+ this._nonce = data.nonce;
55
+ this._chainId = data.chainId;
56
+ }
57
+ /** @inheritdoc */
58
+ validateAddress(address) {
59
+ if (!utils_1.default.isValidAddress(address.address)) {
60
+ throw new sdk_core_1.BuildTransactionError('Invalid address');
61
+ }
62
+ }
63
+ /** @inheritdoc */
64
+ validateKey(key) {
65
+ if (!key || !key.key) {
66
+ throw new sdk_core_1.SigningError('Key is required');
67
+ }
68
+ if (!utils_1.default.isValidPrivateKey(key.key)) {
69
+ throw new sdk_core_1.SigningError('Invalid private key');
70
+ }
71
+ }
72
+ /** @inheritdoc */
73
+ validateTransaction(_transaction) {
74
+ if (!this._sender || !utils_1.default.isValidAddress(this._sender)) {
75
+ throw new sdk_core_1.BuildTransactionError('Invalid or missing sender address');
76
+ }
77
+ if (!this._chainId) {
78
+ throw new sdk_core_1.BuildTransactionError('Chain ID is required');
79
+ }
80
+ if (this._nonce === undefined || this._nonce === null) {
81
+ throw new sdk_core_1.BuildTransactionError('Nonce is required');
82
+ }
83
+ }
84
+ /** @inheritdoc */
85
+ validateValue(value) {
86
+ if (value.isNaN() || value.isNegative()) {
87
+ throw new sdk_core_1.BuildTransactionError(`Invalid value: ${value.toString()}`);
88
+ }
89
+ }
90
+ /** @inheritdoc */
91
+ validateRawTransaction(rawTransaction) {
92
+ if (!rawTransaction) {
93
+ throw new sdk_core_1.BuildTransactionError('Raw transaction is empty');
94
+ }
95
+ }
96
+ /** @inheritdoc */
97
+ fromImplementation(rawTransaction) {
98
+ this._transaction.fromRawTransaction(rawTransaction);
99
+ return this._transaction;
100
+ }
101
+ /** @inheritdoc */
102
+ async buildImplementation() {
103
+ const data = {
104
+ senderAddress: this._sender,
105
+ calls: this._calls,
106
+ nonce: this._nonce,
107
+ chainId: this._chainId,
108
+ transactionType: this.transactionType,
109
+ };
110
+ this._transaction.starknetTransactionData = data;
111
+ return this._transaction;
112
+ }
113
+ // Starknet is TSS-only; signing happens via threshold ECDSA in wallet-platform/OVC, not here.
114
+ signImplementation(_key) {
115
+ throw new sdk_core_1.MethodNotImplementedError('signImplementation');
116
+ }
117
+ }
118
+ exports.TransactionBuilder = TransactionBuilder;
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBT3lCO0FBSXpCLCtDQUE0QztBQUM1QyxvREFBNEI7QUFFNUIsTUFBc0Isa0JBQW1CLFNBQVEsaUNBQXNCO0lBUXJFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBTFgsV0FBTSxHQUFtQixFQUFFLENBQUM7UUFNcEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLHlCQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVNLE1BQU0sQ0FBQyxPQUFlLEVBQUUsTUFBZTtRQUM1QyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQy9DLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxtQ0FBbUMsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUNqRixDQUFDO1FBQ0QsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxlQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSxJQUFJLGdDQUFxQixDQUFDLHVCQUF1QixHQUFHLE1BQU0sQ0FBQyxDQUFDO1lBQ3BFLENBQUM7WUFDRCxNQUFNLGNBQWMsR0FBRyxlQUFLLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0QsSUFBSSxlQUFLLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEtBQUssZUFBSyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQy9FLE1BQU0sSUFBSSxnQ0FBcUIsQ0FDN0IsK0NBQStDLGNBQWMsU0FBUyxPQUFPLEVBQUUsQ0FDaEYsQ0FBQztZQUNKLENBQUM7WUFDRCxJ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QWtCO0lBQ2xCLHNCQUFzQixDQUFDLGNBQXNCO1FBQzNDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksZ0NBQXFCLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUM5RCxDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNSLGtCQUFrQixDQUFDLGNBQXNCO1FBQ2pELElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDckQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFJRCxrQkFBa0I7SUFDUixLQUFLLENBQUMsbUJBQW1CO1FBQ2pDLE1BQU0sSUFBSSxHQUE0QjtZQUNwQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE9BQVE7WUFDNUIsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ2xCLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTztZQUNuQixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVM7WUFDdkIsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO1NBQ3RDLENBQUM7UUFFRixJQUFJLENBQUMsWUFBWSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELDhGQUE4RjtJQUNwRixrQkFBa0IsQ0FBQyxJQUFhO1FBQ3hDLE1BQU0sSUFBSSxvQ0FBeUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzVELENBQUM7Q0FDRjtBQXBJRCxnREFvSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlQWRkcmVzcyxcbiAgQmFzZUtleSxcbiAgQmFzZVRyYW5zYWN0aW9uQnVpbGRlcixcbiAgQnVpbGRUcmFuc2FjdGlvbkVycm9yLFxuICBNZXRob2ROb3RJbXBsZW1lbnRlZEVycm9yLFxuICBTaWduaW5nRXJyb3IsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgU3RhcmtuZXRUcmFuc2FjdGlvbkRhdGEsIFN0YXJrbmV0VHJhbnNhY3Rpb25UeXBlLCBTdGFya25ldENhbGwgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF90cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247XG4gIHByb3RlY3RlZCBfc2VuZGVyPzogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX3B1YmxpY0tleT86IHN0cmluZztcbiAgcHJvdGVjdGVkIF9jYWxsczogU3RhcmtuZXRDYWxsW10gPSBbXTtcbiAgcHJvdGVjdGVkIF9ub25jZT86IHN0cmluZztcbiAgcHJvdGVjdGVkIF9jaGFpbklkPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihfY29pbkNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgc2VuZGVyKGFkZHJlc3M6IHN0cmluZywgcHViS2V5Pzogc3RyaW5nKTogdGhpcyB7XG4gICAgaWYgKCFhZGRyZXNzIHx8ICF1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBvciBtaXNzaW5nIGFkZHJlc3MsIGdvdDogJyArIGFkZHJlc3MpO1xuICAgIH1cbiAgICBpZiAocHViS2V5KSB7XG4gICAgICBpZiAoIXV0aWxzLmlzVmFsaWRQdWJsaWNLZXkocHViS2V5KSkge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHB1YktleSwgZ290OiAnICsgcHViS2V5KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRlcml2ZWRBZGRyZXNzID0gdXRpbHMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkocHViS2V5KTtcbiAgICAgIGlmICh1dGlscy5ub3JtYWxpemVBZGRyZXNzKGRlcml2ZWRBZGRyZXNzKSAhPT0gdXRpbHMubm9ybWFsaXplQWRkcmVzcyhhZGRyZXNzKSkge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICAgIGBBZGRyZXNzIGRvZXMgbm90IG1hdGNoIHB1YmxpYyBrZXkuIEV4cGVjdGVkICR7ZGVyaXZlZEFkZHJlc3N9LCBnb3QgJHthZGRyZXNzfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3B1YmxpY0tleSA9IHB1YktleTtcbiAgICB9XG4gICAgdGhpcy5fc2VuZGVyID0gYWRkcmVzcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBub25jZShub25jZTogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5fbm9uY2UgPSBub25jZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBjaGFpbklkKGNoYWluSWQ6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMuX2NoYWluSWQgPSBjaGFpbklkO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldCB0cmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHNldCB0cmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgaW5pdEJ1aWxkZXIodHg6IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0eDtcbiAgICBjb25zdCBkYXRhID0gdHguc3RhcmtuZXRUcmFuc2FjdGlvbkRhdGE7XG4gICAgdGhpcy5fc2VuZGVyID0gZGF0YS5zZW5kZXJBZGRyZXNzO1xuICAgIHRoaXMuX2NhbGxzID0gZGF0YS5jYWxscyB8fCBbXTtcbiAgICB0aGlzLl9ub25jZSA9IGRhdGEubm9uY2U7XG4gICAgdGhpcy5fY2hhaW5JZCA9IGRhdGEuY2hhaW5JZDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUFkZHJlc3MoYWRkcmVzczogQmFzZUFkZHJlc3MpOiB2b2lkIHtcbiAgICBpZiAoIXV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgYWRkcmVzcycpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUtleShrZXk6IEJhc2VLZXkpOiB2b2lkIHtcbiAgICBpZiAoIWtleSB8fCAha2V5LmtleSkge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignS2V5IGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghdXRpbHMuaXNWYWxpZFByaXZhdGVLZXkoa2V5LmtleSkpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ0ludmFsaWQgcHJpdmF0ZSBrZXknKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbihfdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9zZW5kZXIgfHwgIXV0aWxzLmlzVmFsaWRBZGRyZXNzKHRoaXMuX3NlbmRlcikpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgb3IgbWlzc2luZyBzZW5kZXIgYWRkcmVzcycpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX2NoYWluSWQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0NoYWluIElEIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9ub25jZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX25vbmNlID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdOb25jZSBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVZhbHVlKHZhbHVlOiBCaWdOdW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUuaXNOYU4oKSB8fCB2YWx1ZS5pc05lZ2F0aXZlKCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgdmFsdWU6ICR7dmFsdWUudG9TdHJpbmcoKX1gKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFyYXdUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignUmF3IHRyYW5zYWN0aW9uIGlzIGVtcHR5Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFRyYW5zYWN0aW9uIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5mcm9tUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFN0YXJrbmV0VHJhbnNhY3Rpb25UeXBlO1xuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgZGF0YTogU3RhcmtuZXRUcmFuc2FjdGlvbkRhdGEgPSB7XG4gICAgICBzZW5kZXJBZGRyZXNzOiB0aGlzLl9zZW5kZXIhLFxuICAgICAgY2FsbHM6IHRoaXMuX2NhbGxzLFxuICAgICAgbm9uY2U6IHRoaXMuX25vbmNlISxcbiAgICAgIGNoYWluSWQ6IHRoaXMuX2NoYWluSWQhLFxuICAgICAgdHJhbnNhY3Rpb25UeXBlOiB0aGlzLnRyYW5zYWN0aW9uVHlwZSxcbiAgICB9O1xuXG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uc3RhcmtuZXRUcmFuc2FjdGlvbkRhdGEgPSBkYXRhO1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8vIFN0YXJrbmV0IGlzIFRTUy1vbmx5OyBzaWduaW5nIGhhcHBlbnMgdmlhIHRocmVzaG9sZCBFQ0RTQSBpbiB3YWxsZXQtcGxhdGZvcm0vT1ZDLCBub3QgaGVyZS5cbiAgcHJvdGVjdGVkIHNpZ25JbXBsZW1lbnRhdGlvbihfa2V5OiBCYXNlS2V5KTogVHJhbnNhY3Rpb24ge1xuICAgIHRocm93IG5ldyBNZXRob2ROb3RJbXBsZW1lbnRlZEVycm9yKCdzaWduSW1wbGVtZW50YXRpb24nKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,16 @@
1
+ import { BaseTransactionBuilderFactory } from '@bitgo/sdk-core';
2
+ import { BaseCoin as CoinConfig } from '@bitgo/statics';
3
+ import { Transaction } from './transaction';
4
+ import { TransactionBuilder } from './transactionBuilder';
5
+ import { TransferBuilder } from './transferBuilder';
6
+ export declare class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
7
+ constructor(_coinConfig: Readonly<CoinConfig>);
8
+ /** @inheritdoc */
9
+ from(rawTransaction: string): Promise<TransactionBuilder>;
10
+ private static initializeBuilder;
11
+ /** @inheritdoc */
12
+ getTransferBuilder(tx?: Transaction): TransferBuilder;
13
+ /** @inheritdoc */
14
+ getWalletInitializationBuilder(): void;
15
+ }
16
+ //# sourceMappingURL=transactionBuilderFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAsD,MAAM,iBAAiB,CAAC;AACpH,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,qBAAa,yBAA0B,SAAQ,6BAA6B;gBAC9D,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IACZ,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAe/D,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAOhC,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,eAAe;IAIrD,kBAAkB;IAClB,8BAA8B,IAAI,IAAI;CAGvC"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TransactionBuilderFactory = void 0;
4
+ const sdk_core_1 = require("@bitgo/sdk-core");
5
+ const transaction_1 = require("./transaction");
6
+ const transferBuilder_1 = require("./transferBuilder");
7
+ const iface_1 = require("./iface");
8
+ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory {
9
+ constructor(_coinConfig) {
10
+ super(_coinConfig);
11
+ }
12
+ /** @inheritdoc */
13
+ async from(rawTransaction) {
14
+ const transaction = new transaction_1.Transaction(this._coinConfig);
15
+ await transaction.fromRawTransaction(rawTransaction);
16
+ try {
17
+ switch (transaction.starknetTransactionData.transactionType) {
18
+ case iface_1.StarknetTransactionType.INVOKE:
19
+ return this.getTransferBuilder(transaction);
20
+ default:
21
+ throw new sdk_core_1.InvalidTransactionError('Invalid transaction type');
22
+ }
23
+ }
24
+ catch (e) {
25
+ throw new sdk_core_1.InvalidTransactionError('Invalid transaction: ' + e.message);
26
+ }
27
+ }
28
+ static initializeBuilder(tx, builder) {
29
+ if (tx) {
30
+ builder.initBuilder(tx);
31
+ }
32
+ return builder;
33
+ }
34
+ /** @inheritdoc */
35
+ getTransferBuilder(tx) {
36
+ return TransactionBuilderFactory.initializeBuilder(tx, new transferBuilder_1.TransferBuilder(this._coinConfig));
37
+ }
38
+ /** @inheritdoc */
39
+ getWalletInitializationBuilder() {
40
+ throw new sdk_core_1.MethodNotImplementedError();
41
+ }
42
+ }
43
+ exports.TransactionBuilderFactory = TransactionBuilderFactory;
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw4Q0FBb0g7QUFFcEgsK0NBQTRDO0FBRTVDLHVEQUFvRDtBQUNwRCxtQ0FBa0Q7QUFFbEQsTUFBYSx5QkFBMEIsU0FBUSx3Q0FBNkI7SUFDMUUsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDLGNBQXNCO1FBQy9CLE1BQU0sV0FBVyxHQUFHLElBQUkseUJBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEQsTUFBTSxXQUFXLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDO1lBQ0gsUUFBUSxXQUFXLENBQUMsdUJBQXVCLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQzVELEtBQUssK0JBQXVCLENBQUMsTUFBTTtvQkFDakMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzlDO29CQUNFLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQ2xFLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekUsQ0FBQztJQUNILENBQUM7SUFFTyxNQUFNLENBQUMsaUJBQWlCLENBQStCLEVBQTJCLEVBQUUsT0FBVTtRQUNwRyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ1AsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixrQkFBa0IsQ0FBQyxFQUFnQjtRQUNqQyxPQUFPLHlCQUF5QixDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLGlDQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUVELGtCQUFrQjtJQUNsQiw4QkFBOEI7UUFDNUIsTUFBTSxJQUFJLG9DQUF5QixFQUFFLENBQUM7SUFDeEMsQ0FBQztDQUNGO0FBckNELDhEQXFDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciwgTWV0aG9kTm90SW1wbGVtZW50ZWRFcnJvciB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vdHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCB7IFN0YXJrbmV0VHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnLi9pZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnkge1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgYXN5bmMgZnJvbShyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbkJ1aWxkZXI+IHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnKTtcbiAgICBhd2FpdCB0cmFuc2FjdGlvbi5mcm9tUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIHRyeSB7XG4gICAgICBzd2l0Y2ggKHRyYW5zYWN0aW9uLnN0YXJrbmV0VHJhbnNhY3Rpb25EYXRhLnRyYW5zYWN0aW9uVHlwZSkge1xuICAgICAgICBjYXNlIFN0YXJrbmV0VHJhbnNhY3Rpb25UeXBlLklOVk9LRTpcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2ZlckJ1aWxkZXIodHJhbnNhY3Rpb24pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbiB0eXBlJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiAnICsgZS5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBpbml0aWFsaXplQnVpbGRlcjxUIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyPih0eDogVHJhbnNhY3Rpb24gfCB1bmRlZmluZWQsIGJ1aWxkZXI6IFQpOiBUIHtcbiAgICBpZiAodHgpIHtcbiAgICAgIGJ1aWxkZXIuaW5pdEJ1aWxkZXIodHgpO1xuICAgIH1cbiAgICByZXR1cm4gYnVpbGRlcjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBnZXRUcmFuc2ZlckJ1aWxkZXIodHg/OiBUcmFuc2FjdGlvbik6IFRyYW5zZmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBUcmFuc2ZlckJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcigpOiB2b2lkIHtcbiAgICB0aHJvdyBuZXcgTWV0aG9kTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,19 @@
1
+ import { BaseCoin as CoinConfig } from '@bitgo/statics';
2
+ import { TransactionBuilder } from './transactionBuilder';
3
+ import { Transaction } from './transaction';
4
+ import { StarknetTransactionType } from './iface';
5
+ export declare class TransferBuilder extends TransactionBuilder {
6
+ protected _receiverAddress?: string;
7
+ protected _amount?: string;
8
+ constructor(_coinConfig: Readonly<CoinConfig>);
9
+ protected get transactionType(): StarknetTransactionType;
10
+ receiverId(address: string): this;
11
+ amount(value: string): this;
12
+ /** @inheritdoc */
13
+ initBuilder(tx: Transaction): void;
14
+ /** @inheritdoc */
15
+ protected buildImplementation(): Promise<Transaction>;
16
+ private compileTransferCalldata;
17
+ private validateTransfer;
18
+ }
19
+ //# sourceMappingURL=transferBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transferBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transferBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAgB,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAIhE,qBAAa,eAAgB,SAAQ,kBAAkB;IACrD,SAAS,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACpC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;gBAEf,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,SAAS,KAAK,eAAe,IAAI,uBAAuB,CAEvD;IAEM,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQjC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IASlC,kBAAkB;IAClB,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAWlC,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAc3D,OAAO,CAAC,uBAAuB;IAK/B,OAAO,CAAC,gBAAgB;CAiBzB"}
@@ -0,0 +1,79 @@
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.TransferBuilder = void 0;
7
+ const sdk_core_1 = require("@bitgo/sdk-core");
8
+ const transactionBuilder_1 = require("./transactionBuilder");
9
+ const iface_1 = require("./iface");
10
+ const constants_1 = require("./constants");
11
+ const utils_1 = __importDefault(require("./utils"));
12
+ class TransferBuilder extends transactionBuilder_1.TransactionBuilder {
13
+ constructor(_coinConfig) {
14
+ super(_coinConfig);
15
+ }
16
+ get transactionType() {
17
+ return iface_1.StarknetTransactionType.INVOKE;
18
+ }
19
+ receiverId(address) {
20
+ if (!address || !utils_1.default.isValidAddress(address)) {
21
+ throw new sdk_core_1.BuildTransactionError('Invalid or missing receiver address, got: ' + address);
22
+ }
23
+ this._receiverAddress = address;
24
+ return this;
25
+ }
26
+ amount(value) {
27
+ const val = BigInt(value);
28
+ if (val < 0n) {
29
+ throw new sdk_core_1.BuildTransactionError(`Invalid amount: ${value}`);
30
+ }
31
+ this._amount = value;
32
+ return this;
33
+ }
34
+ /** @inheritdoc */
35
+ initBuilder(tx) {
36
+ super.initBuilder(tx);
37
+ if (this._calls.length > 0) {
38
+ const transfer = utils_1.default.parseTransferCall(this._calls[0]);
39
+ if (transfer) {
40
+ this._receiverAddress = transfer.recipient;
41
+ this._amount = transfer.amount;
42
+ }
43
+ }
44
+ }
45
+ /** @inheritdoc */
46
+ async buildImplementation() {
47
+ this.validateTransfer();
48
+ const transferCall = {
49
+ contractAddress: constants_1.STRK_TOKEN_CONTRACT,
50
+ entrypoint: 'transfer',
51
+ calldata: this.compileTransferCalldata(this._receiverAddress, this._amount),
52
+ };
53
+ this._calls = [transferCall];
54
+ return super.buildImplementation();
55
+ }
56
+ compileTransferCalldata(recipient, amount) {
57
+ const amountBig = BigInt(amount);
58
+ return [recipient, '0x' + (amountBig & constants_1.MASK_128).toString(16), '0x' + (amountBig >> 128n).toString(16)];
59
+ }
60
+ validateTransfer() {
61
+ if (!this._sender) {
62
+ throw new sdk_core_1.BuildTransactionError('Sender is required');
63
+ }
64
+ if (!this._receiverAddress) {
65
+ throw new sdk_core_1.BuildTransactionError('Receiver is required');
66
+ }
67
+ if (!this._amount) {
68
+ throw new sdk_core_1.BuildTransactionError('Amount is required');
69
+ }
70
+ if (!utils_1.default.isValidAddress(this._sender)) {
71
+ throw new sdk_core_1.BuildTransactionError(`Invalid sender address: ${this._sender}`);
72
+ }
73
+ if (!utils_1.default.isValidAddress(this._receiverAddress)) {
74
+ throw new sdk_core_1.BuildTransactionError(`Invalid receiver address: ${this._receiverAddress}`);
75
+ }
76
+ }
77
+ }
78
+ exports.TransferBuilder = TransferBuilder;
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBQXdEO0FBRXhELDZEQUEwRDtBQUUxRCxtQ0FBZ0U7QUFDaEUsMkNBQTREO0FBQzVELG9EQUE0QjtBQUU1QixNQUFhLGVBQWdCLFNBQVEsdUNBQWtCO0lBSXJELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywrQkFBdUIsQ0FBQyxNQUFNLENBQUM7SUFDeEMsQ0FBQztJQUVNLFVBQVUsQ0FBQyxPQUFlO1FBQy9CLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDL0MsTUFBTSxJQUFJLGdDQUFxQixDQUFDLDRDQUE0QyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBQzFGLENBQUM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFhO1FBQ3pCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixJQUFJLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxtQkFBbUIsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLFdBQVcsQ0FBQyxFQUFlO1FBQ3pCLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzQixNQUFNLFFBQVEsR0FBRyxlQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pELElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDUixLQUFLLENBQUMsbUJBQW1CO1FBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRXhCLE1BQU0sWUFBWSxHQUFpQjtZQUNqQyxlQUFlLEVBQUUsK0JBQW1CO1lBQ3BDLFVBQVUsRUFBRSxVQUFVO1lBQ3RCLFFBQVEsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLGdCQUEwQixFQUFFLElBQUksQ0FBQyxPQUFpQixDQUFDO1NBQ2hHLENBQUM7UUFFRixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFN0IsT0FBTyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRU8sdUJBQXVCLENBQUMsU0FBaUIsRUFBRSxNQUFjO1FBQy9ELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksR0FBRyxDQUFDLFNBQVMsR0FBRyxvQkFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRyxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksZ0NBQXFCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixNQUFNLElBQUksZ0NBQXFCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDeEMsTUFBTSxJQUFJLGdDQUFxQixDQUFDLDJCQUEyQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUNqRCxNQUFNLElBQUksZ0NBQXFCLENBQUMsNkJBQTZCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDeEYsQ0FBQztJQUNILENBQUM7Q0FDRjtBQTlFRCwwQ0E4RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBTdGFya25ldENhbGwsIFN0YXJrbmV0VHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBTVFJLX1RPS0VOX0NPTlRSQUNULCBNQVNLXzEyOCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zZmVyQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfcmVjZWl2ZXJBZGRyZXNzPzogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX2Ftb3VudD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBTdGFya25ldFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFN0YXJrbmV0VHJhbnNhY3Rpb25UeXBlLklOVk9LRTtcbiAgfVxuXG4gIHB1YmxpYyByZWNlaXZlcklkKGFkZHJlc3M6IHN0cmluZyk6IHRoaXMge1xuICAgIGlmICghYWRkcmVzcyB8fCAhdXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgb3IgbWlzc2luZyByZWNlaXZlciBhZGRyZXNzLCBnb3Q6ICcgKyBhZGRyZXNzKTtcbiAgICB9XG4gICAgdGhpcy5fcmVjZWl2ZXJBZGRyZXNzID0gYWRkcmVzcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBhbW91bnQodmFsdWU6IHN0cmluZyk6IHRoaXMge1xuICAgIGNvbnN0IHZhbCA9IEJpZ0ludCh2YWx1ZSk7XG4gICAgaWYgKHZhbCA8IDBuKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIGFtb3VudDogJHt2YWx1ZX1gKTtcbiAgICB9XG4gICAgdGhpcy5fYW1vdW50ID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaW5pdEJ1aWxkZXIodHg6IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgc3VwZXIuaW5pdEJ1aWxkZXIodHgpO1xuICAgIGlmICh0aGlzLl9jYWxscy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB0cmFuc2ZlciA9IHV0aWxzLnBhcnNlVHJhbnNmZXJDYWxsKHRoaXMuX2NhbGxzWzBdKTtcbiAgICAgIGlmICh0cmFuc2Zlcikge1xuICAgICAgICB0aGlzLl9yZWNlaXZlckFkZHJlc3MgPSB0cmFuc2Zlci5yZWNpcGllbnQ7XG4gICAgICAgIHRoaXMuX2Ftb3VudCA9IHRyYW5zZmVyLmFtb3VudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIHRoaXMudmFsaWRhdGVUcmFuc2ZlcigpO1xuXG4gICAgY29uc3QgdHJhbnNmZXJDYWxsOiBTdGFya25ldENhbGwgPSB7XG4gICAgICBjb250cmFjdEFkZHJlc3M6IFNUUktfVE9LRU5fQ09OVFJBQ1QsXG4gICAgICBlbnRyeXBvaW50OiAndHJhbnNmZXInLFxuICAgICAgY2FsbGRhdGE6IHRoaXMuY29tcGlsZVRyYW5zZmVyQ2FsbGRhdGEodGhpcy5fcmVjZWl2ZXJBZGRyZXNzIGFzIHN0cmluZywgdGhpcy5fYW1vdW50IGFzIHN0cmluZyksXG4gICAgfTtcblxuICAgIHRoaXMuX2NhbGxzID0gW3RyYW5zZmVyQ2FsbF07XG5cbiAgICByZXR1cm4gc3VwZXIuYnVpbGRJbXBsZW1lbnRhdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21waWxlVHJhbnNmZXJDYWxsZGF0YShyZWNpcGllbnQ6IHN0cmluZywgYW1vdW50OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgYW1vdW50QmlnID0gQmlnSW50KGFtb3VudCk7XG4gICAgcmV0dXJuIFtyZWNpcGllbnQsICcweCcgKyAoYW1vdW50QmlnICYgTUFTS18xMjgpLnRvU3RyaW5nKDE2KSwgJzB4JyArIChhbW91bnRCaWcgPj4gMTI4bikudG9TdHJpbmcoMTYpXTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVUcmFuc2ZlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3NlbmRlcikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignU2VuZGVyIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fcmVjZWl2ZXJBZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdSZWNlaXZlciBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX2Ftb3VudCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignQW1vdW50IGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghdXRpbHMuaXNWYWxpZEFkZHJlc3ModGhpcy5fc2VuZGVyKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCBzZW5kZXIgYWRkcmVzczogJHt0aGlzLl9zZW5kZXJ9YCk7XG4gICAgfVxuICAgIGlmICghdXRpbHMuaXNWYWxpZEFkZHJlc3ModGhpcy5fcmVjZWl2ZXJBZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCByZWNlaXZlciBhZGRyZXNzOiAke3RoaXMuX3JlY2VpdmVyQWRkcmVzc31gKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,82 @@
1
+ import { StarknetTransactionData, StarknetCall, ParsedTransferData } from './iface';
2
+ /**
3
+ * Normalize a Starknet address to canonical form: 0x + 64 hex chars, zero-padded.
4
+ */
5
+ export declare function normalizeAddress(address: string): string;
6
+ /**
7
+ * Starknet addresses are felt252 values represented as 0x-prefixed hex.
8
+ * Valid range: 0 < address < FELT_MAX, with 0x prefix and hex chars.
9
+ */
10
+ export declare function isValidAddress(address: string): boolean;
11
+ /**
12
+ * Validate a secp256k1 public key (compressed 33 bytes or uncompressed 65 bytes).
13
+ */
14
+ export declare function isValidPublicKey(key: string): boolean;
15
+ /**
16
+ * Validate a secp256k1 private key (32 bytes hex).
17
+ */
18
+ export declare function isValidPrivateKey(key: string): boolean;
19
+ /**
20
+ * Get uncompressed public key (x || y, 128 hex chars, no 04 prefix).
21
+ */
22
+ export declare function getUncompressedPublicKey(compressedHex: string): string;
23
+ /**
24
+ * Compile EthAccount constructor calldata from full secp256k1 public key.
25
+ * Returns [x_low, x_high, y_low, y_high] as felt252 strings.
26
+ */
27
+ export declare function compileEthAccountConstructorCalldata(fullPublicKey: string): string[];
28
+ /**
29
+ * Compute Starknet contract address from hash components.
30
+ * Replicates starknet.js calculateContractAddressFromHash using @scure/starknet pedersen.
31
+ */
32
+ export declare function calculateContractAddressFromHash(salt: string, classHash: string, constructorCalldata: string[], deployerAddress: number | bigint): string;
33
+ /**
34
+ * Compute Starknet EthAccount counterfactual address from public key.
35
+ */
36
+ export declare function computeStarknetAddress(fullPublicKey: string): {
37
+ address: string;
38
+ constructorCalldata: string[];
39
+ salt: string;
40
+ };
41
+ /**
42
+ * Derive Starknet EthAccount address from compressed secp256k1 public key.
43
+ */
44
+ export declare function getAddressFromPublicKey(compressedPublicKey: string): string;
45
+ /**
46
+ * Format ECDSA signature for Starknet EthAccount.
47
+ * Returns [r_low, r_high, s_low, s_high, v].
48
+ */
49
+ export declare function formatEthAccountSignature(r: string, s: string, recid: number): string[];
50
+ /**
51
+ * Extract recipient, amount, and token contract from a transfer call.
52
+ * Reverse of TransferBuilder.compileTransferCalldata: calldata = [recipient, amount_low, amount_high].
53
+ */
54
+ export declare function parseTransferCall(call: StarknetCall): ParsedTransferData | undefined;
55
+ /**
56
+ * Generate a new secp256k1 key pair.
57
+ */
58
+ export declare function generateKeyPair(seed?: Buffer): {
59
+ pub: string;
60
+ prv: string;
61
+ };
62
+ /**
63
+ * Validate raw transaction data has required fields.
64
+ */
65
+ export declare function validateRawTransaction(tx: StarknetTransactionData): void;
66
+ declare const _default: {
67
+ isValidAddress: typeof isValidAddress;
68
+ isValidPublicKey: typeof isValidPublicKey;
69
+ isValidPrivateKey: typeof isValidPrivateKey;
70
+ getUncompressedPublicKey: typeof getUncompressedPublicKey;
71
+ compileEthAccountConstructorCalldata: typeof compileEthAccountConstructorCalldata;
72
+ calculateContractAddressFromHash: typeof calculateContractAddressFromHash;
73
+ computeStarknetAddress: typeof computeStarknetAddress;
74
+ getAddressFromPublicKey: typeof getAddressFromPublicKey;
75
+ normalizeAddress: typeof normalizeAddress;
76
+ formatEthAccountSignature: typeof formatEthAccountSignature;
77
+ parseTransferCall: typeof parseTransferCall;
78
+ generateKeyPair: typeof generateKeyPair;
79
+ validateRawTransaction: typeof validateRawTransaction;
80
+ };
81
+ export default _default;
82
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAGpF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CASvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAgBrD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGtD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAatE;AAED;;;GAGG;AACH,wBAAgB,oCAAoC,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CAUpF;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,mBAAmB,EAAE,MAAM,EAAE,EAC7B,eAAe,EAAE,MAAM,GAAG,MAAM,GAC/B,MAAM,CAUR;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;CACd,CASA;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,mBAAmB,EAAE,MAAM,GAAG,MAAM,CAI3E;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAYvF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,kBAAkB,GAAG,SAAS,CAYpF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAQ3E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,uBAAuB,GAAG,IAAI,CAOxE;;;;;;;;;;;;;;;;AAED,wBAcE"}