@metamask-previews/smart-transactions-controller 19.2.1-preview-54c655a

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 (44) hide show
  1. package/CHANGELOG.md +715 -0
  2. package/LICENSE +18 -0
  3. package/README.md +103 -0
  4. package/dist/SmartTransactionsController.cjs +694 -0
  5. package/dist/SmartTransactionsController.cjs.map +1 -0
  6. package/dist/SmartTransactionsController.d.cts +150 -0
  7. package/dist/SmartTransactionsController.d.cts.map +1 -0
  8. package/dist/SmartTransactionsController.d.mts +150 -0
  9. package/dist/SmartTransactionsController.d.mts.map +1 -0
  10. package/dist/SmartTransactionsController.mjs +702 -0
  11. package/dist/SmartTransactionsController.mjs.map +1 -0
  12. package/dist/constants.cjs +33 -0
  13. package/dist/constants.cjs.map +1 -0
  14. package/dist/constants.d.cts +23 -0
  15. package/dist/constants.d.cts.map +1 -0
  16. package/dist/constants.d.mts +23 -0
  17. package/dist/constants.d.mts.map +1 -0
  18. package/dist/constants.mjs +33 -0
  19. package/dist/constants.mjs.map +1 -0
  20. package/dist/index.cjs +17 -0
  21. package/dist/index.cjs.map +1 -0
  22. package/dist/index.d.cts +6 -0
  23. package/dist/index.d.cts.map +1 -0
  24. package/dist/index.d.mts +6 -0
  25. package/dist/index.d.mts.map +1 -0
  26. package/dist/index.mjs +17 -0
  27. package/dist/index.mjs.map +1 -0
  28. package/dist/types.cjs +54 -0
  29. package/dist/types.cjs.map +1 -0
  30. package/dist/types.d.cts +118 -0
  31. package/dist/types.d.cts.map +1 -0
  32. package/dist/types.d.mts +118 -0
  33. package/dist/types.d.mts.map +1 -0
  34. package/dist/types.mjs +54 -0
  35. package/dist/types.mjs.map +1 -0
  36. package/dist/utils.cjs +281 -0
  37. package/dist/utils.cjs.map +1 -0
  38. package/dist/utils.d.cts +90 -0
  39. package/dist/utils.d.cts.map +1 -0
  40. package/dist/utils.d.mts +90 -0
  41. package/dist/utils.d.mts.map +1 -0
  42. package/dist/utils.mjs +289 -0
  43. package/dist/utils.mjs.map +1 -0
  44. package/package.json +135 -0
@@ -0,0 +1,118 @@
1
+ import type { NetworkClientId } from "@metamask/network-controller";
2
+ /** API */
3
+ export declare enum APIType {
4
+ 'GET_FEES' = 0,
5
+ 'ESTIMATE_GAS' = 1,
6
+ 'SUBMIT_TRANSACTIONS' = 2,
7
+ 'CANCEL' = 3,
8
+ 'BATCH_STATUS' = 4,
9
+ 'LIVENESS' = 5
10
+ }
11
+ /** SmartTransactions */
12
+ export declare enum SmartTransactionMinedTx {
13
+ NOT_MINED = "not_mined",
14
+ SUCCESS = "success",
15
+ CANCELLED = "cancelled",
16
+ REVERTED = "reverted",
17
+ UNKNOWN = "unknown"
18
+ }
19
+ export declare enum SmartTransactionCancellationReason {
20
+ WOULD_REVERT = "would_revert",
21
+ TOO_CHEAP = "too_cheap",
22
+ DEADLINE_MISSED = "deadline_missed",
23
+ INVALID_NONCE = "invalid_nonce",
24
+ USER_CANCELLED = "user_cancelled",
25
+ NOT_CANCELLED = "not_cancelled"
26
+ }
27
+ export declare enum SmartTransactionStatuses {
28
+ PENDING = "pending",
29
+ SUCCESS = "success",
30
+ REVERTED = "reverted",
31
+ UNKNOWN = "unknown",
32
+ CANCELLED = "cancelled",
33
+ CANCELLED_USER_CANCELLED = "cancelled_user_cancelled",
34
+ RESOLVED = "resolved"
35
+ }
36
+ export declare enum ClientId {
37
+ Mobile = "mobile",
38
+ Extension = "extension"
39
+ }
40
+ export declare const cancellationReasonToStatusMap: {
41
+ would_revert: SmartTransactionStatuses;
42
+ too_cheap: SmartTransactionStatuses;
43
+ deadline_missed: SmartTransactionStatuses;
44
+ invalid_nonce: SmartTransactionStatuses;
45
+ user_cancelled: SmartTransactionStatuses;
46
+ };
47
+ export declare type SmartTransactionsStatus = {
48
+ error?: string;
49
+ cancellationFeeWei: number;
50
+ cancellationReason?: SmartTransactionCancellationReason;
51
+ deadlineRatio: number;
52
+ minedHash: string;
53
+ minedTx: SmartTransactionMinedTx;
54
+ isSettled: boolean;
55
+ duplicated?: boolean;
56
+ timedOut?: boolean;
57
+ proxied?: boolean;
58
+ };
59
+ export declare type SmartTransaction = {
60
+ uuid: string;
61
+ txHash?: string;
62
+ txHashes?: string[];
63
+ chainId?: string;
64
+ destinationTokenAddress?: string;
65
+ destinationTokenDecimals?: string;
66
+ destinationTokenSymbol?: string;
67
+ history?: any;
68
+ nonceDetails?: any;
69
+ origin?: string;
70
+ preTxBalance?: string;
71
+ status?: string;
72
+ statusMetadata?: SmartTransactionsStatus;
73
+ sourceTokenSymbol?: string;
74
+ swapMetaData?: any;
75
+ swapTokenValue?: string;
76
+ time?: number;
77
+ creationTime?: number;
78
+ txParams?: any;
79
+ type?: string;
80
+ confirmed?: boolean;
81
+ cancellable?: boolean;
82
+ accountHardwareType?: string;
83
+ accountType?: string;
84
+ deviceModel?: string;
85
+ transactionId?: string;
86
+ networkClientId?: NetworkClientId;
87
+ };
88
+ export declare type Fee = {
89
+ maxFeePerGas: number;
90
+ maxPriorityFeePerGas: number;
91
+ };
92
+ export declare type IndividualTxFees = {
93
+ fees: Fee[];
94
+ cancelFees: Fee[];
95
+ feeEstimate: number;
96
+ gasLimit: number;
97
+ gasUsed: number;
98
+ };
99
+ export declare type Fees = {
100
+ approvalTxFees: IndividualTxFees | null;
101
+ tradeTxFees: IndividualTxFees | null;
102
+ };
103
+ export declare type UnsignedTransaction = any;
104
+ export declare type SignedTransaction = any;
105
+ export declare type SignedCanceledTransaction = any;
106
+ export declare type Hex = `0x${string}`;
107
+ export declare type MetaMetricsProps = {
108
+ accountHardwareType?: string;
109
+ accountType?: string;
110
+ deviceModel?: string;
111
+ };
112
+ export declare type FeatureFlags = {
113
+ smartTransactions?: {
114
+ mobileReturnTxHashAsap?: boolean;
115
+ extensionReturnTxHashAsap?: boolean;
116
+ };
117
+ };
118
+ //# sourceMappingURL=types.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.mts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.mjs ADDED
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cancellationReasonToStatusMap = exports.ClientId = exports.SmartTransactionStatuses = exports.SmartTransactionCancellationReason = exports.SmartTransactionMinedTx = exports.APIType = void 0;
4
+ /** API */
5
+ var APIType;
6
+ (function (APIType) {
7
+ APIType[APIType["GET_FEES"] = 0] = "GET_FEES";
8
+ APIType[APIType["ESTIMATE_GAS"] = 1] = "ESTIMATE_GAS";
9
+ APIType[APIType["SUBMIT_TRANSACTIONS"] = 2] = "SUBMIT_TRANSACTIONS";
10
+ APIType[APIType["CANCEL"] = 3] = "CANCEL";
11
+ APIType[APIType["BATCH_STATUS"] = 4] = "BATCH_STATUS";
12
+ APIType[APIType["LIVENESS"] = 5] = "LIVENESS";
13
+ })(APIType = exports.APIType || (exports.APIType = {}));
14
+ /** SmartTransactions */
15
+ var SmartTransactionMinedTx;
16
+ (function (SmartTransactionMinedTx) {
17
+ SmartTransactionMinedTx["NOT_MINED"] = "not_mined";
18
+ SmartTransactionMinedTx["SUCCESS"] = "success";
19
+ SmartTransactionMinedTx["CANCELLED"] = "cancelled";
20
+ SmartTransactionMinedTx["REVERTED"] = "reverted";
21
+ SmartTransactionMinedTx["UNKNOWN"] = "unknown";
22
+ })(SmartTransactionMinedTx = exports.SmartTransactionMinedTx || (exports.SmartTransactionMinedTx = {}));
23
+ var SmartTransactionCancellationReason;
24
+ (function (SmartTransactionCancellationReason) {
25
+ SmartTransactionCancellationReason["WOULD_REVERT"] = "would_revert";
26
+ SmartTransactionCancellationReason["TOO_CHEAP"] = "too_cheap";
27
+ SmartTransactionCancellationReason["DEADLINE_MISSED"] = "deadline_missed";
28
+ SmartTransactionCancellationReason["INVALID_NONCE"] = "invalid_nonce";
29
+ SmartTransactionCancellationReason["USER_CANCELLED"] = "user_cancelled";
30
+ SmartTransactionCancellationReason["NOT_CANCELLED"] = "not_cancelled";
31
+ })(SmartTransactionCancellationReason = exports.SmartTransactionCancellationReason || (exports.SmartTransactionCancellationReason = {}));
32
+ var SmartTransactionStatuses;
33
+ (function (SmartTransactionStatuses) {
34
+ SmartTransactionStatuses["PENDING"] = "pending";
35
+ SmartTransactionStatuses["SUCCESS"] = "success";
36
+ SmartTransactionStatuses["REVERTED"] = "reverted";
37
+ SmartTransactionStatuses["UNKNOWN"] = "unknown";
38
+ SmartTransactionStatuses["CANCELLED"] = "cancelled";
39
+ SmartTransactionStatuses["CANCELLED_USER_CANCELLED"] = "cancelled_user_cancelled";
40
+ SmartTransactionStatuses["RESOLVED"] = "resolved";
41
+ })(SmartTransactionStatuses = exports.SmartTransactionStatuses || (exports.SmartTransactionStatuses = {}));
42
+ var ClientId;
43
+ (function (ClientId) {
44
+ ClientId["Mobile"] = "mobile";
45
+ ClientId["Extension"] = "extension";
46
+ })(ClientId = exports.ClientId || (exports.ClientId = {}));
47
+ exports.cancellationReasonToStatusMap = {
48
+ [SmartTransactionCancellationReason.WOULD_REVERT]: SmartTransactionStatuses.CANCELLED,
49
+ [SmartTransactionCancellationReason.TOO_CHEAP]: SmartTransactionStatuses.CANCELLED,
50
+ [SmartTransactionCancellationReason.DEADLINE_MISSED]: SmartTransactionStatuses.CANCELLED,
51
+ [SmartTransactionCancellationReason.INVALID_NONCE]: SmartTransactionStatuses.CANCELLED,
52
+ [SmartTransactionCancellationReason.USER_CANCELLED]: SmartTransactionStatuses.CANCELLED_USER_CANCELLED,
53
+ };
54
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.mjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAEA,UAAU;AACV,IAAY,OAOX;AAPD,WAAY,OAAO;IACjB,6CAAU,CAAA;IACV,qDAAc,CAAA;IACd,mEAAqB,CAAA;IACrB,yCAAQ,CAAA;IACR,qDAAc,CAAA;IACd,6CAAU,CAAA;AACZ,CAAC,EAPW,OAAO,GAAP,eAAO,KAAP,eAAO,QAOlB;AAED,wBAAwB;AACxB,IAAY,uBAMX;AAND,WAAY,uBAAuB;IACjC,kDAAuB,CAAA;IACvB,8CAAmB,CAAA;IACnB,kDAAuB,CAAA;IACvB,gDAAqB,CAAA;IACrB,8CAAmB,CAAA;AACrB,CAAC,EANW,uBAAuB,GAAvB,+BAAuB,KAAvB,+BAAuB,QAMlC;AAED,IAAY,kCAOX;AAPD,WAAY,kCAAkC;IAC5C,mEAA6B,CAAA;IAC7B,6DAAuB,CAAA;IACvB,yEAAmC,CAAA;IACnC,qEAA+B,CAAA;IAC/B,uEAAiC,CAAA;IACjC,qEAA+B,CAAA;AACjC,CAAC,EAPW,kCAAkC,GAAlC,0CAAkC,KAAlC,0CAAkC,QAO7C;AAED,IAAY,wBAQX;AARD,WAAY,wBAAwB;IAClC,+CAAmB,CAAA;IACnB,+CAAmB,CAAA;IACnB,iDAAqB,CAAA;IACrB,+CAAmB,CAAA;IACnB,mDAAuB,CAAA;IACvB,iFAAqD,CAAA;IACrD,iDAAqB,CAAA;AACvB,CAAC,EARW,wBAAwB,GAAxB,gCAAwB,KAAxB,gCAAwB,QAQnC;AAED,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,6BAAiB,CAAA;IACjB,mCAAuB,CAAA;AACzB,CAAC,EAHW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAGnB;AAEY,QAAA,6BAA6B,GAAG;IAC3C,CAAC,kCAAkC,CAAC,YAAY,CAAC,EAC/C,wBAAwB,CAAC,SAAS;IACpC,CAAC,kCAAkC,CAAC,SAAS,CAAC,EAC5C,wBAAwB,CAAC,SAAS;IACpC,CAAC,kCAAkC,CAAC,eAAe,CAAC,EAClD,wBAAwB,CAAC,SAAS;IACpC,CAAC,kCAAkC,CAAC,aAAa,CAAC,EAChD,wBAAwB,CAAC,SAAS;IACpC,CAAC,kCAAkC,CAAC,cAAc,CAAC,EACjD,wBAAwB,CAAC,wBAAwB;CACpD,CAAC","sourcesContent":["import type { NetworkClientId } from '@metamask/network-controller';\n\n/** API */\nexport enum APIType {\n 'GET_FEES',\n 'ESTIMATE_GAS',\n 'SUBMIT_TRANSACTIONS',\n 'CANCEL',\n 'BATCH_STATUS',\n 'LIVENESS',\n}\n\n/** SmartTransactions */\nexport enum SmartTransactionMinedTx {\n NOT_MINED = 'not_mined',\n SUCCESS = 'success',\n CANCELLED = 'cancelled',\n REVERTED = 'reverted',\n UNKNOWN = 'unknown',\n}\n\nexport enum SmartTransactionCancellationReason {\n WOULD_REVERT = 'would_revert',\n TOO_CHEAP = 'too_cheap',\n DEADLINE_MISSED = 'deadline_missed',\n INVALID_NONCE = 'invalid_nonce',\n USER_CANCELLED = 'user_cancelled',\n NOT_CANCELLED = 'not_cancelled',\n}\n\nexport enum SmartTransactionStatuses {\n PENDING = 'pending',\n SUCCESS = 'success',\n REVERTED = 'reverted',\n UNKNOWN = 'unknown',\n CANCELLED = 'cancelled',\n CANCELLED_USER_CANCELLED = 'cancelled_user_cancelled',\n RESOLVED = 'resolved',\n}\n\nexport enum ClientId {\n Mobile = 'mobile',\n Extension = 'extension',\n}\n\nexport const cancellationReasonToStatusMap = {\n [SmartTransactionCancellationReason.WOULD_REVERT]:\n SmartTransactionStatuses.CANCELLED,\n [SmartTransactionCancellationReason.TOO_CHEAP]:\n SmartTransactionStatuses.CANCELLED,\n [SmartTransactionCancellationReason.DEADLINE_MISSED]:\n SmartTransactionStatuses.CANCELLED,\n [SmartTransactionCancellationReason.INVALID_NONCE]:\n SmartTransactionStatuses.CANCELLED,\n [SmartTransactionCancellationReason.USER_CANCELLED]:\n SmartTransactionStatuses.CANCELLED_USER_CANCELLED,\n};\n\nexport type SmartTransactionsStatus = {\n error?: string;\n cancellationFeeWei: number;\n cancellationReason?: SmartTransactionCancellationReason;\n deadlineRatio: number;\n minedHash: string;\n minedTx: SmartTransactionMinedTx;\n isSettled: boolean;\n duplicated?: boolean;\n timedOut?: boolean;\n proxied?: boolean;\n};\n\nexport type SmartTransaction = {\n uuid: string;\n txHash?: string;\n txHashes?: string[];\n chainId?: string;\n destinationTokenAddress?: string;\n destinationTokenDecimals?: string;\n destinationTokenSymbol?: string;\n history?: any;\n nonceDetails?: any;\n origin?: string;\n preTxBalance?: string;\n status?: string;\n statusMetadata?: SmartTransactionsStatus;\n sourceTokenSymbol?: string;\n swapMetaData?: any;\n swapTokenValue?: string;\n time?: number; // @deprecated We should use creationTime instead.\n creationTime?: number;\n txParams?: any;\n type?: string;\n confirmed?: boolean;\n cancellable?: boolean;\n accountHardwareType?: string;\n accountType?: string;\n deviceModel?: string;\n transactionId?: string; // It's an ID for a regular transaction from the TransactionController.\n networkClientId?: NetworkClientId;\n};\n\nexport type Fee = {\n maxFeePerGas: number;\n maxPriorityFeePerGas: number;\n};\n\nexport type IndividualTxFees = {\n fees: Fee[];\n cancelFees: Fee[];\n feeEstimate: number;\n gasLimit: number;\n gasUsed: number;\n};\n\nexport type Fees = {\n approvalTxFees: IndividualTxFees | null;\n tradeTxFees: IndividualTxFees | null;\n};\n\n// TODO\nexport type UnsignedTransaction = any;\n\n// TODO\nexport type SignedTransaction = any;\n\n// TODO\nexport type SignedCanceledTransaction = any;\n\nexport type Hex = `0x${string}`;\n\nexport type MetaMetricsProps = {\n accountHardwareType?: string;\n accountType?: string;\n deviceModel?: string;\n};\n\nexport type FeatureFlags = {\n smartTransactions?: {\n mobileReturnTxHashAsap?: boolean;\n extensionReturnTxHashAsap?: boolean;\n };\n};\n"]}
package/dist/utils.cjs ADDED
@@ -0,0 +1,281 @@
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.markRegularTransactionAsFailed = exports.shouldMarkRegularTransactionAsFailed = exports.getReturnTxHashAsap = exports.getSmartTransactionMetricsSensitiveProperties = exports.getSmartTransactionMetricsProperties = exports.getTxHash = exports.incrementNonceInHex = exports.isSmartTransactionCancellable = exports.handleFetch = exports.mapKeysToCamel = exports.getStxProcessingTime = exports.snapshotFromTxMeta = exports.replayHistory = exports.generateHistoryEntry = exports.calculateStatus = exports.getAPIRequestURL = exports.isSmartTransactionStatusResolved = exports.isSmartTransactionPending = void 0;
7
+ const bytes_1 = require("@ethersproject/bytes");
8
+ const keccak256_1 = require("@ethersproject/keccak256");
9
+ const transactions_1 = require("@ethersproject/transactions");
10
+ const transaction_controller_1 = require("@metamask/transaction-controller");
11
+ const bignumber_js_1 = require("bignumber.js");
12
+ const fast_json_patch_1 = __importDefault(require("fast-json-patch"));
13
+ const lodash_1 = __importDefault(require("lodash"));
14
+ // Ignoring TypeScript errors here because this import is disallowed for production builds, because
15
+ // the `package.json` file is above the root directory.
16
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
17
+ // @ts-ignore
18
+ const package_json_1 = __importDefault(require("../package.json"));
19
+ const constants_1 = require("./constants.cjs");
20
+ const types_1 = require("./types.cjs");
21
+ function isSmartTransactionPending(smartTransaction) {
22
+ return smartTransaction.status === types_1.SmartTransactionStatuses.PENDING;
23
+ }
24
+ exports.isSmartTransactionPending = isSmartTransactionPending;
25
+ const isSmartTransactionStatusResolved = (stxStatus) => stxStatus === 'uuid_not_found';
26
+ exports.isSmartTransactionStatusResolved = isSmartTransactionStatusResolved;
27
+ // TODO use actual url once API is defined
28
+ function getAPIRequestURL(apiType, chainId) {
29
+ const chainIdDec = parseInt(chainId, 16);
30
+ switch (apiType) {
31
+ case types_1.APIType.GET_FEES: {
32
+ return `${constants_1.API_BASE_URL}/networks/${chainIdDec}/getFees`;
33
+ }
34
+ case types_1.APIType.ESTIMATE_GAS: {
35
+ return `${constants_1.API_BASE_URL}/networks/${chainIdDec}/estimateGas`;
36
+ }
37
+ case types_1.APIType.SUBMIT_TRANSACTIONS: {
38
+ return `${constants_1.API_BASE_URL}/networks/${chainIdDec}/submitTransactions?stxControllerVersion=${package_json_1.default.version}`;
39
+ }
40
+ case types_1.APIType.CANCEL: {
41
+ return `${constants_1.API_BASE_URL}/networks/${chainIdDec}/cancel`;
42
+ }
43
+ case types_1.APIType.BATCH_STATUS: {
44
+ return `${constants_1.API_BASE_URL}/networks/${chainIdDec}/batchStatus`;
45
+ }
46
+ case types_1.APIType.LIVENESS: {
47
+ return `${constants_1.SENTINEL_API_BASE_URL_MAP[chainIdDec]}/network`;
48
+ }
49
+ default: {
50
+ throw new Error(`Invalid APIType`); // It can never get here thanks to TypeScript.
51
+ }
52
+ }
53
+ }
54
+ exports.getAPIRequestURL = getAPIRequestURL;
55
+ const calculateStatus = (stxStatus) => {
56
+ if ((0, exports.isSmartTransactionStatusResolved)(stxStatus)) {
57
+ return types_1.SmartTransactionStatuses.RESOLVED;
58
+ }
59
+ const cancellations = [
60
+ types_1.SmartTransactionCancellationReason.WOULD_REVERT,
61
+ types_1.SmartTransactionCancellationReason.TOO_CHEAP,
62
+ types_1.SmartTransactionCancellationReason.DEADLINE_MISSED,
63
+ types_1.SmartTransactionCancellationReason.INVALID_NONCE,
64
+ types_1.SmartTransactionCancellationReason.USER_CANCELLED,
65
+ ];
66
+ if ((stxStatus === null || stxStatus === void 0 ? void 0 : stxStatus.minedTx) === types_1.SmartTransactionMinedTx.NOT_MINED) {
67
+ if (stxStatus.cancellationReason ===
68
+ types_1.SmartTransactionCancellationReason.NOT_CANCELLED) {
69
+ return types_1.SmartTransactionStatuses.PENDING;
70
+ }
71
+ const isCancellation = cancellations.findIndex((cancellation) => cancellation === stxStatus.cancellationReason) > -1;
72
+ if (stxStatus.cancellationReason && isCancellation) {
73
+ if (!stxStatus.isSettled) {
74
+ return types_1.SmartTransactionStatuses.PENDING;
75
+ }
76
+ return types_1.cancellationReasonToStatusMap[stxStatus.cancellationReason];
77
+ }
78
+ }
79
+ else if ((stxStatus === null || stxStatus === void 0 ? void 0 : stxStatus.minedTx) === types_1.SmartTransactionMinedTx.SUCCESS) {
80
+ return types_1.SmartTransactionStatuses.SUCCESS;
81
+ }
82
+ else if ((stxStatus === null || stxStatus === void 0 ? void 0 : stxStatus.minedTx) === types_1.SmartTransactionMinedTx.CANCELLED) {
83
+ return types_1.SmartTransactionStatuses.CANCELLED;
84
+ }
85
+ else if ((stxStatus === null || stxStatus === void 0 ? void 0 : stxStatus.minedTx) === types_1.SmartTransactionMinedTx.REVERTED) {
86
+ return types_1.SmartTransactionStatuses.REVERTED;
87
+ }
88
+ else if ((stxStatus === null || stxStatus === void 0 ? void 0 : stxStatus.minedTx) === types_1.SmartTransactionMinedTx.UNKNOWN) {
89
+ return types_1.SmartTransactionStatuses.UNKNOWN;
90
+ }
91
+ return types_1.SmartTransactionStatuses.UNKNOWN;
92
+ };
93
+ exports.calculateStatus = calculateStatus;
94
+ /**
95
+ Generates an array of history objects sense the previous state.
96
+ The object has the keys
97
+ op (the operation performed),
98
+ path (the key and if a nested object then each key will be separated with a `/`)
99
+ value
100
+ with the first entry having the note and a timestamp when the change took place
101
+ @param previousState - the previous state of the object
102
+ @param newState - the update object
103
+ @param [note] - a optional note for the state change
104
+ @returns
105
+ */
106
+ function generateHistoryEntry(previousState, newState, note) {
107
+ const entry = fast_json_patch_1.default.compare(previousState, newState);
108
+ // Add a note to the first op, since it breaks if we append it to the entry
109
+ if (entry[0]) {
110
+ if (note) {
111
+ entry[0].note = note;
112
+ }
113
+ entry[0].timestamp = Date.now();
114
+ }
115
+ return entry;
116
+ }
117
+ exports.generateHistoryEntry = generateHistoryEntry;
118
+ /**
119
+ Recovers previous txMeta state obj
120
+ @returns
121
+ */
122
+ function replayHistory(_shortHistory) {
123
+ const shortHistory = lodash_1.default.cloneDeep(_shortHistory);
124
+ return shortHistory.reduce((val, entry) => fast_json_patch_1.default.applyPatch(val, entry).newDocument);
125
+ }
126
+ exports.replayHistory = replayHistory;
127
+ /**
128
+ * Snapshot {@code txMeta}
129
+ * @param txMeta - the tx metadata object
130
+ * @returns a deep clone without history
131
+ */
132
+ function snapshotFromTxMeta(txMeta) {
133
+ const shallow = Object.assign({}, txMeta);
134
+ delete shallow.history;
135
+ return lodash_1.default.cloneDeep(shallow);
136
+ }
137
+ exports.snapshotFromTxMeta = snapshotFromTxMeta;
138
+ /**
139
+ * Returns processing time for an STX in seconds.
140
+ * @param smartTransactionSubmittedtime
141
+ * @returns Processing time in seconds.
142
+ */
143
+ const getStxProcessingTime = (smartTransactionSubmittedtime) => {
144
+ if (!smartTransactionSubmittedtime) {
145
+ return undefined;
146
+ }
147
+ return Math.round((Date.now() - smartTransactionSubmittedtime) / 1000);
148
+ };
149
+ exports.getStxProcessingTime = getStxProcessingTime;
150
+ const mapKeysToCamel = (obj) => {
151
+ if (!lodash_1.default.isObject(obj)) {
152
+ return obj;
153
+ }
154
+ const mappedValues = lodash_1.default.mapValues(obj, (val) => {
155
+ if (lodash_1.default.isArray(val)) {
156
+ return val.map(exports.mapKeysToCamel);
157
+ }
158
+ else if (lodash_1.default.isObject(val)) {
159
+ return (0, exports.mapKeysToCamel)(val);
160
+ }
161
+ return val;
162
+ });
163
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
164
+ return lodash_1.default.mapKeys(mappedValues, (value, key) => lodash_1.default.camelCase(key));
165
+ };
166
+ exports.mapKeysToCamel = mapKeysToCamel;
167
+ async function handleFetch(request, options) {
168
+ const response = await fetch(request, options);
169
+ const json = await response.json();
170
+ if (!response.ok) {
171
+ console.log(`response`, response);
172
+ throw new Error(`Fetch error:${JSON.stringify(Object.assign({ status: response.status }, (0, exports.mapKeysToCamel)(json)))}`);
173
+ }
174
+ return json;
175
+ }
176
+ exports.handleFetch = handleFetch;
177
+ const isSmartTransactionCancellable = (stxStatus) => {
178
+ return (stxStatus.minedTx === types_1.SmartTransactionMinedTx.NOT_MINED &&
179
+ (!stxStatus.cancellationReason ||
180
+ stxStatus.cancellationReason ===
181
+ types_1.SmartTransactionCancellationReason.NOT_CANCELLED));
182
+ };
183
+ exports.isSmartTransactionCancellable = isSmartTransactionCancellable;
184
+ const incrementNonceInHex = (nonceInHex) => {
185
+ const nonceInDec = new bignumber_js_1.BigNumber(nonceInHex, 16).toString(10);
186
+ return (0, bytes_1.hexlify)(Number(nonceInDec) + 1);
187
+ };
188
+ exports.incrementNonceInHex = incrementNonceInHex;
189
+ const isType4Transaction = (signedTxHex) => {
190
+ return typeof signedTxHex === 'string' && signedTxHex.startsWith('0x04');
191
+ };
192
+ const getTxHash = (signedTxHex) => {
193
+ var _a;
194
+ if (!signedTxHex) {
195
+ return '';
196
+ }
197
+ try {
198
+ const parsed = (0, transactions_1.parse)(signedTxHex);
199
+ return (_a = parsed === null || parsed === void 0 ? void 0 : parsed.hash) !== null && _a !== void 0 ? _a : '';
200
+ }
201
+ catch (error) {
202
+ if (isType4Transaction(signedTxHex)) {
203
+ return (0, bytes_1.hexlify)((0, keccak256_1.keccak256)((0, bytes_1.arrayify)(signedTxHex)));
204
+ }
205
+ throw error;
206
+ }
207
+ };
208
+ exports.getTxHash = getTxHash;
209
+ const getSmartTransactionMetricsProperties = (smartTransaction) => {
210
+ if (!smartTransaction) {
211
+ return {};
212
+ }
213
+ const smartTransactionStatusMetadata = smartTransaction.statusMetadata;
214
+ return {
215
+ stx_status: smartTransaction.status,
216
+ type: smartTransaction.type,
217
+ processing_time: (0, exports.getStxProcessingTime)(smartTransaction.time),
218
+ is_smart_transaction: true,
219
+ stx_enabled: true,
220
+ current_stx_enabled: true,
221
+ stx_user_opt_in: true,
222
+ stx_duplicated: smartTransactionStatusMetadata === null || smartTransactionStatusMetadata === void 0 ? void 0 : smartTransactionStatusMetadata.duplicated,
223
+ stx_timed_out: smartTransactionStatusMetadata === null || smartTransactionStatusMetadata === void 0 ? void 0 : smartTransactionStatusMetadata.timedOut,
224
+ stx_proxied: smartTransactionStatusMetadata === null || smartTransactionStatusMetadata === void 0 ? void 0 : smartTransactionStatusMetadata.proxied,
225
+ };
226
+ };
227
+ exports.getSmartTransactionMetricsProperties = getSmartTransactionMetricsProperties;
228
+ const getSmartTransactionMetricsSensitiveProperties = (smartTransaction) => {
229
+ if (!smartTransaction) {
230
+ return {};
231
+ }
232
+ return {
233
+ token_from_symbol: smartTransaction.sourceTokenSymbol,
234
+ token_to_symbol: smartTransaction.destinationTokenSymbol,
235
+ account_hardware_type: smartTransaction.accountHardwareType,
236
+ account_type: smartTransaction.accountType,
237
+ device_model: smartTransaction.deviceModel,
238
+ };
239
+ };
240
+ exports.getSmartTransactionMetricsSensitiveProperties = getSmartTransactionMetricsSensitiveProperties;
241
+ const getReturnTxHashAsap = (clientId, smartTransactionsFeatureFlags) => {
242
+ return clientId === types_1.ClientId.Extension
243
+ ? smartTransactionsFeatureFlags === null || smartTransactionsFeatureFlags === void 0 ? void 0 : smartTransactionsFeatureFlags.extensionReturnTxHashAsap
244
+ : smartTransactionsFeatureFlags === null || smartTransactionsFeatureFlags === void 0 ? void 0 : smartTransactionsFeatureFlags.mobileReturnTxHashAsap;
245
+ };
246
+ exports.getReturnTxHashAsap = getReturnTxHashAsap;
247
+ const shouldMarkRegularTransactionAsFailed = ({ smartTransaction, clientId, getFeatureFlags, }) => {
248
+ var _a;
249
+ const { status, transactionId } = smartTransaction;
250
+ const failureStatuses = [
251
+ types_1.SmartTransactionStatuses.CANCELLED,
252
+ types_1.SmartTransactionStatuses.CANCELLED_USER_CANCELLED,
253
+ types_1.SmartTransactionStatuses.UNKNOWN,
254
+ types_1.SmartTransactionStatuses.RESOLVED,
255
+ ];
256
+ if (!status ||
257
+ !failureStatuses.includes(status)) {
258
+ return false;
259
+ }
260
+ const { smartTransactions: smartTransactionsFeatureFlags } = (_a = getFeatureFlags()) !== null && _a !== void 0 ? _a : {};
261
+ const returnTxHashAsapEnabled = (0, exports.getReturnTxHashAsap)(clientId, smartTransactionsFeatureFlags);
262
+ return Boolean(returnTxHashAsapEnabled && transactionId);
263
+ };
264
+ exports.shouldMarkRegularTransactionAsFailed = shouldMarkRegularTransactionAsFailed;
265
+ const markRegularTransactionAsFailed = ({ smartTransaction, getRegularTransactions, updateTransaction, }) => {
266
+ const { transactionId, status } = smartTransaction;
267
+ const originalTransaction = getRegularTransactions().find((transaction) => transaction.id === transactionId);
268
+ if (!originalTransaction) {
269
+ throw new Error('Cannot find regular transaction to mark it as failed');
270
+ }
271
+ if (originalTransaction.status === transaction_controller_1.TransactionStatus.failed) {
272
+ return; // Already marked as failed.
273
+ }
274
+ const updatedTransaction = Object.assign(Object.assign({}, originalTransaction), { status: transaction_controller_1.TransactionStatus.failed, error: {
275
+ name: 'SmartTransactionFailed',
276
+ message: `Smart transaction failed with status: ${status}`,
277
+ } });
278
+ updateTransaction(updatedTransaction, `Smart transaction status: ${status}`);
279
+ };
280
+ exports.markRegularTransactionAsFailed = markRegularTransactionAsFailed;
281
+ //# sourceMappingURL=utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.cjs","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { arrayify, hexlify } from '@ethersproject/bytes';\nimport { keccak256 } from '@ethersproject/keccak256';\nimport { parse } from '@ethersproject/transactions';\nimport type {\n TransactionControllerGetTransactionsAction,\n TransactionControllerUpdateTransactionAction,\n TransactionMeta,\n} from '@metamask/transaction-controller';\nimport { TransactionStatus } from '@metamask/transaction-controller';\nimport { BigNumber } from 'bignumber.js';\nimport jsonDiffer from 'fast-json-patch';\nimport _ from 'lodash';\n\n// Ignoring TypeScript errors here because this import is disallowed for production builds, because\n// the `package.json` file is above the root directory.\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport packageJson from '../package.json';\nimport { API_BASE_URL, SENTINEL_API_BASE_URL_MAP } from './constants';\nimport type {\n SmartTransaction,\n SmartTransactionsStatus,\n FeatureFlags,\n} from './types';\nimport {\n APIType,\n SmartTransactionStatuses,\n SmartTransactionCancellationReason,\n SmartTransactionMinedTx,\n cancellationReasonToStatusMap,\n ClientId,\n} from './types';\n\nexport function isSmartTransactionPending(smartTransaction: SmartTransaction) {\n return smartTransaction.status === SmartTransactionStatuses.PENDING;\n}\n\nexport const isSmartTransactionStatusResolved = (\n stxStatus: SmartTransactionsStatus | string,\n) => stxStatus === 'uuid_not_found';\n\n// TODO use actual url once API is defined\nexport function getAPIRequestURL(apiType: APIType, chainId: string): string {\n const chainIdDec = parseInt(chainId, 16);\n switch (apiType) {\n case APIType.GET_FEES: {\n return `${API_BASE_URL}/networks/${chainIdDec}/getFees`;\n }\n\n case APIType.ESTIMATE_GAS: {\n return `${API_BASE_URL}/networks/${chainIdDec}/estimateGas`;\n }\n\n case APIType.SUBMIT_TRANSACTIONS: {\n return `${API_BASE_URL}/networks/${chainIdDec}/submitTransactions?stxControllerVersion=${packageJson.version}`;\n }\n\n case APIType.CANCEL: {\n return `${API_BASE_URL}/networks/${chainIdDec}/cancel`;\n }\n\n case APIType.BATCH_STATUS: {\n return `${API_BASE_URL}/networks/${chainIdDec}/batchStatus`;\n }\n\n case APIType.LIVENESS: {\n return `${SENTINEL_API_BASE_URL_MAP[chainIdDec]}/network`;\n }\n\n default: {\n throw new Error(`Invalid APIType`); // It can never get here thanks to TypeScript.\n }\n }\n}\n\nexport const calculateStatus = (stxStatus: SmartTransactionsStatus) => {\n if (isSmartTransactionStatusResolved(stxStatus)) {\n return SmartTransactionStatuses.RESOLVED;\n }\n const cancellations = [\n SmartTransactionCancellationReason.WOULD_REVERT,\n SmartTransactionCancellationReason.TOO_CHEAP,\n SmartTransactionCancellationReason.DEADLINE_MISSED,\n SmartTransactionCancellationReason.INVALID_NONCE,\n SmartTransactionCancellationReason.USER_CANCELLED,\n ];\n if (stxStatus?.minedTx === SmartTransactionMinedTx.NOT_MINED) {\n if (\n stxStatus.cancellationReason ===\n SmartTransactionCancellationReason.NOT_CANCELLED\n ) {\n return SmartTransactionStatuses.PENDING;\n }\n\n const isCancellation =\n cancellations.findIndex(\n (cancellation) => cancellation === stxStatus.cancellationReason,\n ) > -1;\n if (stxStatus.cancellationReason && isCancellation) {\n if (!stxStatus.isSettled) {\n return SmartTransactionStatuses.PENDING;\n }\n return cancellationReasonToStatusMap[stxStatus.cancellationReason];\n }\n } else if (stxStatus?.minedTx === SmartTransactionMinedTx.SUCCESS) {\n return SmartTransactionStatuses.SUCCESS;\n } else if (stxStatus?.minedTx === SmartTransactionMinedTx.CANCELLED) {\n return SmartTransactionStatuses.CANCELLED;\n } else if (stxStatus?.minedTx === SmartTransactionMinedTx.REVERTED) {\n return SmartTransactionStatuses.REVERTED;\n } else if (stxStatus?.minedTx === SmartTransactionMinedTx.UNKNOWN) {\n return SmartTransactionStatuses.UNKNOWN;\n }\n return SmartTransactionStatuses.UNKNOWN;\n};\n\n/**\n Generates an array of history objects sense the previous state.\n The object has the keys\n op (the operation performed),\n path (the key and if a nested object then each key will be separated with a `/`)\n value\n with the first entry having the note and a timestamp when the change took place\n @param previousState - the previous state of the object\n @param newState - the update object\n @param [note] - a optional note for the state change\n @returns\n*/\nexport function generateHistoryEntry(\n previousState: any,\n newState: any,\n note: string,\n) {\n const entry: any = jsonDiffer.compare(previousState, newState);\n // Add a note to the first op, since it breaks if we append it to the entry\n if (entry[0]) {\n if (note) {\n entry[0].note = note;\n }\n\n entry[0].timestamp = Date.now();\n }\n return entry;\n}\n\n/**\n Recovers previous txMeta state obj\n @returns\n*/\nexport function replayHistory(_shortHistory: any) {\n const shortHistory = _.cloneDeep(_shortHistory);\n return shortHistory.reduce(\n (val: any, entry: any) => jsonDiffer.applyPatch(val, entry).newDocument,\n );\n}\n\n/**\n * Snapshot {@code txMeta}\n * @param txMeta - the tx metadata object\n * @returns a deep clone without history\n */\nexport function snapshotFromTxMeta(txMeta: any) {\n const shallow = { ...txMeta };\n delete shallow.history;\n return _.cloneDeep(shallow);\n}\n\n/**\n * Returns processing time for an STX in seconds.\n * @param smartTransactionSubmittedtime\n * @returns Processing time in seconds.\n */\nexport const getStxProcessingTime = (\n smartTransactionSubmittedtime: number | undefined,\n): number | undefined => {\n if (!smartTransactionSubmittedtime) {\n return undefined;\n }\n return Math.round((Date.now() - smartTransactionSubmittedtime) / 1000);\n};\n\nexport const mapKeysToCamel = (\n obj: Record<string, any>,\n): Record<string, any> => {\n if (!_.isObject(obj)) {\n return obj;\n }\n const mappedValues = _.mapValues(obj, (val: Record<string, any>) => {\n if (_.isArray(val)) {\n return val.map(mapKeysToCamel);\n } else if (_.isObject(val)) {\n return mapKeysToCamel(val);\n }\n return val;\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return _.mapKeys(mappedValues, (value, key) => _.camelCase(key));\n};\n\nexport async function handleFetch(request: string, options?: RequestInit) {\n const response = await fetch(request, options);\n const json = await response.json();\n if (!response.ok) {\n console.log(`response`, response);\n throw new Error(\n `Fetch error:${JSON.stringify({\n status: response.status,\n ...mapKeysToCamel(json),\n })}`,\n );\n }\n return json;\n}\n\nexport const isSmartTransactionCancellable = (\n stxStatus: SmartTransactionsStatus,\n): boolean => {\n return (\n stxStatus.minedTx === SmartTransactionMinedTx.NOT_MINED &&\n (!stxStatus.cancellationReason ||\n stxStatus.cancellationReason ===\n SmartTransactionCancellationReason.NOT_CANCELLED)\n );\n};\n\nexport const incrementNonceInHex = (nonceInHex: string): string => {\n const nonceInDec = new BigNumber(nonceInHex, 16).toString(10);\n return hexlify(Number(nonceInDec) + 1);\n};\n\nconst isType4Transaction = (signedTxHex: string) => {\n return typeof signedTxHex === 'string' && signedTxHex.startsWith('0x04');\n};\n\nexport const getTxHash = (signedTxHex: any) => {\n if (!signedTxHex) {\n return '';\n }\n try {\n const parsed = parse(signedTxHex);\n return parsed?.hash ?? '';\n } catch (error) {\n if (isType4Transaction(signedTxHex)) {\n return hexlify(keccak256(arrayify(signedTxHex)));\n }\n throw error;\n }\n};\n\nexport const getSmartTransactionMetricsProperties = (\n smartTransaction: SmartTransaction,\n) => {\n if (!smartTransaction) {\n return {};\n }\n const smartTransactionStatusMetadata = smartTransaction.statusMetadata;\n return {\n stx_status: smartTransaction.status,\n type: smartTransaction.type,\n processing_time: getStxProcessingTime(smartTransaction.time),\n is_smart_transaction: true,\n stx_enabled: true,\n current_stx_enabled: true,\n stx_user_opt_in: true,\n stx_duplicated: smartTransactionStatusMetadata?.duplicated,\n stx_timed_out: smartTransactionStatusMetadata?.timedOut,\n stx_proxied: smartTransactionStatusMetadata?.proxied,\n };\n};\n\nexport const getSmartTransactionMetricsSensitiveProperties = (\n smartTransaction: SmartTransaction,\n) => {\n if (!smartTransaction) {\n return {};\n }\n return {\n token_from_symbol: smartTransaction.sourceTokenSymbol,\n token_to_symbol: smartTransaction.destinationTokenSymbol,\n account_hardware_type: smartTransaction.accountHardwareType,\n account_type: smartTransaction.accountType,\n device_model: smartTransaction.deviceModel,\n };\n};\n\nexport const getReturnTxHashAsap = (\n clientId: ClientId,\n smartTransactionsFeatureFlags: FeatureFlags['smartTransactions'],\n) => {\n return clientId === ClientId.Extension\n ? smartTransactionsFeatureFlags?.extensionReturnTxHashAsap\n : smartTransactionsFeatureFlags?.mobileReturnTxHashAsap;\n};\n\nexport const shouldMarkRegularTransactionAsFailed = ({\n smartTransaction,\n clientId,\n getFeatureFlags,\n}: {\n smartTransaction: SmartTransaction;\n clientId: ClientId;\n getFeatureFlags: () => FeatureFlags;\n}): boolean => {\n const { status, transactionId } = smartTransaction;\n const failureStatuses: SmartTransactionStatuses[] = [\n SmartTransactionStatuses.CANCELLED,\n SmartTransactionStatuses.CANCELLED_USER_CANCELLED,\n SmartTransactionStatuses.UNKNOWN,\n SmartTransactionStatuses.RESOLVED,\n ];\n if (\n !status ||\n !failureStatuses.includes(status as SmartTransactionStatuses)\n ) {\n return false;\n }\n const { smartTransactions: smartTransactionsFeatureFlags } =\n getFeatureFlags() ?? {};\n const returnTxHashAsapEnabled = getReturnTxHashAsap(\n clientId,\n smartTransactionsFeatureFlags,\n );\n return Boolean(returnTxHashAsapEnabled && transactionId);\n};\n\nexport const markRegularTransactionAsFailed = ({\n smartTransaction,\n getRegularTransactions,\n updateTransaction,\n}: {\n smartTransaction: SmartTransaction;\n getRegularTransactions: TransactionControllerGetTransactionsAction['handler'];\n updateTransaction: TransactionControllerUpdateTransactionAction['handler'];\n}) => {\n const { transactionId, status } = smartTransaction;\n const originalTransaction = getRegularTransactions().find(\n (transaction) => transaction.id === transactionId,\n );\n if (!originalTransaction) {\n throw new Error('Cannot find regular transaction to mark it as failed');\n }\n if (originalTransaction.status === TransactionStatus.failed) {\n return; // Already marked as failed.\n }\n const updatedTransaction: TransactionMeta = {\n ...originalTransaction,\n status: TransactionStatus.failed,\n error: {\n name: 'SmartTransactionFailed',\n message: `Smart transaction failed with status: ${status}`,\n },\n };\n updateTransaction(updatedTransaction, `Smart transaction status: ${status}`);\n};\n"]}
@@ -0,0 +1,90 @@
1
+ import type { TransactionControllerGetTransactionsAction, TransactionControllerUpdateTransactionAction } from "@metamask/transaction-controller";
2
+ import type { SmartTransaction, SmartTransactionsStatus, FeatureFlags } from "./types.cjs";
3
+ import { APIType, SmartTransactionStatuses, ClientId } from "./types.cjs";
4
+ export declare function isSmartTransactionPending(smartTransaction: SmartTransaction): boolean;
5
+ export declare const isSmartTransactionStatusResolved: (stxStatus: SmartTransactionsStatus | string) => boolean;
6
+ export declare function getAPIRequestURL(apiType: APIType, chainId: string): string;
7
+ export declare const calculateStatus: (stxStatus: SmartTransactionsStatus) => SmartTransactionStatuses;
8
+ /**
9
+ Generates an array of history objects sense the previous state.
10
+ The object has the keys
11
+ op (the operation performed),
12
+ path (the key and if a nested object then each key will be separated with a `/`)
13
+ value
14
+ with the first entry having the note and a timestamp when the change took place
15
+ @param previousState - the previous state of the object
16
+ @param newState - the update object
17
+ @param [note] - a optional note for the state change
18
+ @returns
19
+ */
20
+ export declare function generateHistoryEntry(previousState: any, newState: any, note: string): any;
21
+ /**
22
+ Recovers previous txMeta state obj
23
+ @returns
24
+ */
25
+ export declare function replayHistory(_shortHistory: any): any;
26
+ /**
27
+ * Snapshot {@code txMeta}
28
+ * @param txMeta - the tx metadata object
29
+ * @returns a deep clone without history
30
+ */
31
+ export declare function snapshotFromTxMeta(txMeta: any): any;
32
+ /**
33
+ * Returns processing time for an STX in seconds.
34
+ * @param smartTransactionSubmittedtime
35
+ * @returns Processing time in seconds.
36
+ */
37
+ export declare const getStxProcessingTime: (smartTransactionSubmittedtime: number | undefined) => number | undefined;
38
+ export declare const mapKeysToCamel: (obj: Record<string, any>) => Record<string, any>;
39
+ export declare function handleFetch(request: string, options?: RequestInit): Promise<any>;
40
+ export declare const isSmartTransactionCancellable: (stxStatus: SmartTransactionsStatus) => boolean;
41
+ export declare const incrementNonceInHex: (nonceInHex: string) => string;
42
+ export declare const getTxHash: (signedTxHex: any) => string;
43
+ export declare const getSmartTransactionMetricsProperties: (smartTransaction: SmartTransaction) => {
44
+ stx_status?: undefined;
45
+ type?: undefined;
46
+ processing_time?: undefined;
47
+ is_smart_transaction?: undefined;
48
+ stx_enabled?: undefined;
49
+ current_stx_enabled?: undefined;
50
+ stx_user_opt_in?: undefined;
51
+ stx_duplicated?: undefined;
52
+ stx_timed_out?: undefined;
53
+ stx_proxied?: undefined;
54
+ } | {
55
+ stx_status: string | undefined;
56
+ type: string | undefined;
57
+ processing_time: number | undefined;
58
+ is_smart_transaction: boolean;
59
+ stx_enabled: boolean;
60
+ current_stx_enabled: boolean;
61
+ stx_user_opt_in: boolean;
62
+ stx_duplicated: boolean | undefined;
63
+ stx_timed_out: boolean | undefined;
64
+ stx_proxied: boolean | undefined;
65
+ };
66
+ export declare const getSmartTransactionMetricsSensitiveProperties: (smartTransaction: SmartTransaction) => {
67
+ token_from_symbol?: undefined;
68
+ token_to_symbol?: undefined;
69
+ account_hardware_type?: undefined;
70
+ account_type?: undefined;
71
+ device_model?: undefined;
72
+ } | {
73
+ token_from_symbol: string | undefined;
74
+ token_to_symbol: string | undefined;
75
+ account_hardware_type: string | undefined;
76
+ account_type: string | undefined;
77
+ device_model: string | undefined;
78
+ };
79
+ export declare const getReturnTxHashAsap: (clientId: ClientId, smartTransactionsFeatureFlags: FeatureFlags['smartTransactions']) => boolean | undefined;
80
+ export declare const shouldMarkRegularTransactionAsFailed: ({ smartTransaction, clientId, getFeatureFlags, }: {
81
+ smartTransaction: SmartTransaction;
82
+ clientId: ClientId;
83
+ getFeatureFlags: () => FeatureFlags;
84
+ }) => boolean;
85
+ export declare const markRegularTransactionAsFailed: ({ smartTransaction, getRegularTransactions, updateTransaction, }: {
86
+ smartTransaction: SmartTransaction;
87
+ getRegularTransactions: TransactionControllerGetTransactionsAction['handler'];
88
+ updateTransaction: TransactionControllerUpdateTransactionAction['handler'];
89
+ }) => void;
90
+ //# sourceMappingURL=utils.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.cts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,0CAA0C,EAC1C,4CAA4C,EAE7C,yCAAyC;AAY1C,OAAO,KAAK,EACV,gBAAgB,EAChB,uBAAuB,EACvB,YAAY,EACb,oBAAgB;AACjB,OAAO,EACL,OAAO,EACP,wBAAwB,EAIxB,QAAQ,EACT,oBAAgB;AAEjB,wBAAgB,yBAAyB,CAAC,gBAAgB,EAAE,gBAAgB,WAE3E;AAED,eAAO,MAAM,gCAAgC,cAChC,uBAAuB,GAAG,MAAM,YACV,CAAC;AAGpC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CA+B1E;AAED,eAAO,MAAM,eAAe,cAAe,uBAAuB,6BAuCjE,CAAC;AAEF;;;;;;;;;;;EAWE;AACF,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,GAAG,EAClB,QAAQ,EAAE,GAAG,EACb,IAAI,EAAE,MAAM,OAYb;AAED;;;EAGE;AACF,wBAAgB,aAAa,CAAC,aAAa,EAAE,GAAG,OAK/C;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,GAAG,OAI7C;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,kCACA,MAAM,GAAG,SAAS,KAChD,MAAM,GAAG,SAKX,CAAC;AAEF,eAAO,MAAM,cAAc,QACpB,OAAO,MAAM,EAAE,GAAG,CAAC,KACvB,OAAO,MAAM,EAAE,GAAG,CAcpB,CAAC;AAEF,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,gBAavE;AAED,eAAO,MAAM,6BAA6B,cAC7B,uBAAuB,KACjC,OAOF,CAAC;AAEF,eAAO,MAAM,mBAAmB,eAAgB,MAAM,KAAG,MAGxD,CAAC;AAMF,eAAO,MAAM,SAAS,gBAAiB,GAAG,WAazC,CAAC;AAEF,eAAO,MAAM,oCAAoC,qBAC7B,gBAAgB;;;;;;;;;;;;;;;;;;;;;;CAkBnC,CAAC;AAEF,eAAO,MAAM,6CAA6C,qBACtC,gBAAgB;;;;;;;;;;;;CAYnC,CAAC;AAEF,eAAO,MAAM,mBAAmB,aACpB,QAAQ,iCACa,YAAY,CAAC,mBAAmB,CAAC,wBAKjE,CAAC;AAEF,eAAO,MAAM,oCAAoC;sBAK7B,gBAAgB;cACxB,QAAQ;qBACD,MAAM,YAAY;MACjC,OAqBH,CAAC;AAEF,eAAO,MAAM,8BAA8B;sBAKvB,gBAAgB;4BACV,0CAA0C,CAAC,SAAS,CAAC;uBAC1D,4CAA4C,CAAC,SAAS,CAAC;UAqB3E,CAAC"}