@metamask-previews/smart-transactions-controller 27.0.3-preview-247ba396c → 27.0.3-preview-576eebcfe
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/utils.d.ts +1 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +13 -0
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
10
10
|
### Changed
|
|
11
11
|
|
|
12
12
|
- Expose structured fetch error data ([#10494](https://github.com/MetaMask/core/pull/10494))
|
|
13
|
+
- Export `getErrorData` util to parse Sentinel API errors ([#10642](https://github.com/MetaMask/core/pull/10642))
|
|
13
14
|
- Bump `@metamask/transaction-controller` from `^72.0.0` to `^72.0.1` ([#10462](https://github.com/MetaMask/core/pull/10462))
|
|
14
15
|
- Bump `@ethersproject/bytes` from `^5.7.0` to `^5.8.0` ([#10480](https://github.com/MetaMask/core/pull/10480))
|
|
15
16
|
- Bump `lodash-es` from `^4.17.21` to `^4.18.1` ([#10447](https://github.com/MetaMask/core/pull/10447))
|
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,6 @@ export type { SmartTransactionsControllerMessenger, SmartTransactionsControllerS
|
|
|
3
3
|
export type { SmartTransactionsControllerCheckPollAction, SmartTransactionsControllerInitializeSmartTransactionsForChainIdAction, SmartTransactionsControllerPollAction, SmartTransactionsControllerStopAction, SmartTransactionsControllerSetOptInStateAction, SmartTransactionsControllerTrackStxStatusChangeAction, SmartTransactionsControllerIsNewSmartTransactionAction, SmartTransactionsControllerUpdateSmartTransactionAction, SmartTransactionsControllerUpdateSmartTransactionsAction, SmartTransactionsControllerFetchSmartTransactionsStatusAction, SmartTransactionsControllerClearFeesAction, SmartTransactionsControllerGetFeesAction, SmartTransactionsControllerSubmitSignedTransactionsAction, SmartTransactionsControllerCancelSmartTransactionAction, SmartTransactionsControllerFetchLivenessAction, SmartTransactionsControllerSetStatusRefreshIntervalAction, SmartTransactionsControllerGetTransactionsAction, SmartTransactionsControllerGetSmartTransactionByMinedTxHashAction, SmartTransactionsControllerWipeSmartTransactionsAction, } from './SmartTransactionsController-method-action-types.js';
|
|
4
4
|
export { type Fee, type Fees, type IndividualTxFees, type FeatureFlags, type SmartTransaction, type SentinelMeta, type SignedTransactionWithMetadata, type SmartTransactionsNetworkConfig, type SmartTransactionsFeatureFlagsConfig, SmartTransactionMinedTx, SmartTransactionCancellationReason, SmartTransactionStatuses, OriginalTransactionStatus, ClientId, Feature, Kind, } from './types.js';
|
|
5
5
|
export { MetaMetricsEventName, MetaMetricsEventCategory } from './constants.js';
|
|
6
|
-
export { getSmartTransactionMetricsProperties, getSmartTransactionMetricsSensitiveProperties, } from './utils.js';
|
|
6
|
+
export { getSmartTransactionMetricsProperties, getSmartTransactionMetricsSensitiveProperties, getErrorData, } from './utils.js';
|
|
7
7
|
export { selectSmartTransactionsFeatureFlags, selectSmartTransactionsFeatureFlagsForChain, type SmartTransactionsFeatureFlagsState, } from './selectors.js';
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,YAAY,EACV,oCAAoC,EACpC,gCAAgC,EAChC,yCAAyC,EACzC,kCAAkC,EAClC,2CAA2C,EAC3C,gDAAgD,EAChD,gEAAgE,EAChE,iCAAiC,GAClC,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACV,0CAA0C,EAC1C,sEAAsE,EACtE,qCAAqC,EACrC,qCAAqC,EACrC,8CAA8C,EAC9C,qDAAqD,EACrD,sDAAsD,EACtD,uDAAuD,EACvD,wDAAwD,EACxD,6DAA6D,EAC7D,0CAA0C,EAC1C,wCAAwC,EACxC,yDAAyD,EACzD,uDAAuD,EACvD,8CAA8C,EAC9C,yDAAyD,EACzD,gDAAgD,EAChD,iEAAiE,EACjE,sDAAsD,GACvD,MAAM,sDAAsD,CAAC;AAC9D,OAAO,EACL,KAAK,GAAG,EACR,KAAK,IAAI,EACT,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,6BAA6B,EAClC,KAAK,8BAA8B,EACnC,KAAK,mCAAmC,EACxC,uBAAuB,EACvB,kCAAkC,EAClC,wBAAwB,EACxB,yBAAyB,EACzB,QAAQ,EACR,OAAO,EACP,IAAI,GACL,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EACL,oCAAoC,EACpC,6CAA6C,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,YAAY,EACV,oCAAoC,EACpC,gCAAgC,EAChC,yCAAyC,EACzC,kCAAkC,EAClC,2CAA2C,EAC3C,gDAAgD,EAChD,gEAAgE,EAChE,iCAAiC,GAClC,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACV,0CAA0C,EAC1C,sEAAsE,EACtE,qCAAqC,EACrC,qCAAqC,EACrC,8CAA8C,EAC9C,qDAAqD,EACrD,sDAAsD,EACtD,uDAAuD,EACvD,wDAAwD,EACxD,6DAA6D,EAC7D,0CAA0C,EAC1C,wCAAwC,EACxC,yDAAyD,EACzD,uDAAuD,EACvD,8CAA8C,EAC9C,yDAAyD,EACzD,gDAAgD,EAChD,iEAAiE,EACjE,sDAAsD,GACvD,MAAM,sDAAsD,CAAC;AAC9D,OAAO,EACL,KAAK,GAAG,EACR,KAAK,IAAI,EACT,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,6BAA6B,EAClC,KAAK,8BAA8B,EACnC,KAAK,mCAAmC,EACxC,uBAAuB,EACvB,kCAAkC,EAClC,wBAAwB,EACxB,yBAAyB,EACzB,QAAQ,EACR,OAAO,EACP,IAAI,GACL,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EACL,oCAAoC,EACpC,6CAA6C,EAC7C,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,mCAAmC,EACnC,2CAA2C,EAC3C,KAAK,kCAAkC,GACxC,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { SmartTransactionsController } from './SmartTransactionsController.js';
|
|
2
2
|
export { SmartTransactionMinedTx, SmartTransactionCancellationReason, SmartTransactionStatuses, OriginalTransactionStatus, ClientId, Feature, Kind, } from './types.js';
|
|
3
3
|
export { MetaMetricsEventName, MetaMetricsEventCategory } from './constants.js';
|
|
4
|
-
export { getSmartTransactionMetricsProperties, getSmartTransactionMetricsSensitiveProperties, } from './utils.js';
|
|
4
|
+
export { getSmartTransactionMetricsProperties, getSmartTransactionMetricsSensitiveProperties, getErrorData, } from './utils.js';
|
|
5
5
|
// Feature flag selectors
|
|
6
6
|
export { selectSmartTransactionsFeatureFlags, selectSmartTransactionsFeatureFlagsForChain, } from './selectors.js';
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAgC/E,OAAO,EAUL,uBAAuB,EACvB,kCAAkC,EAClC,wBAAwB,EACxB,yBAAyB,EACzB,QAAQ,EACR,OAAO,EACP,IAAI,GACL,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EACL,oCAAoC,EACpC,6CAA6C,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAgC/E,OAAO,EAUL,uBAAuB,EACvB,kCAAkC,EAClC,wBAAwB,EACxB,yBAAyB,EACzB,QAAQ,EACR,OAAO,EACP,IAAI,GACL,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EACL,oCAAoC,EACpC,6CAA6C,EAC7C,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,yBAAyB;AACzB,OAAO,EACL,mCAAmC,EACnC,2CAA2C,GAE5C,MAAM,gBAAgB,CAAC","sourcesContent":["export { SmartTransactionsController } from './SmartTransactionsController.js';\nexport type {\n SmartTransactionsControllerMessenger,\n SmartTransactionsControllerState,\n SmartTransactionsControllerGetStateAction,\n SmartTransactionsControllerActions,\n SmartTransactionsControllerStateChangeEvent,\n SmartTransactionsControllerSmartTransactionEvent,\n SmartTransactionsControllerSmartTransactionConfirmationDoneEvent,\n SmartTransactionsControllerEvents,\n} from './SmartTransactionsController.js';\nexport type {\n SmartTransactionsControllerCheckPollAction,\n SmartTransactionsControllerInitializeSmartTransactionsForChainIdAction,\n SmartTransactionsControllerPollAction,\n SmartTransactionsControllerStopAction,\n SmartTransactionsControllerSetOptInStateAction,\n SmartTransactionsControllerTrackStxStatusChangeAction,\n SmartTransactionsControllerIsNewSmartTransactionAction,\n SmartTransactionsControllerUpdateSmartTransactionAction,\n SmartTransactionsControllerUpdateSmartTransactionsAction,\n SmartTransactionsControllerFetchSmartTransactionsStatusAction,\n SmartTransactionsControllerClearFeesAction,\n SmartTransactionsControllerGetFeesAction,\n SmartTransactionsControllerSubmitSignedTransactionsAction,\n SmartTransactionsControllerCancelSmartTransactionAction,\n SmartTransactionsControllerFetchLivenessAction,\n SmartTransactionsControllerSetStatusRefreshIntervalAction,\n SmartTransactionsControllerGetTransactionsAction,\n SmartTransactionsControllerGetSmartTransactionByMinedTxHashAction,\n SmartTransactionsControllerWipeSmartTransactionsAction,\n} from './SmartTransactionsController-method-action-types.js';\nexport {\n type Fee,\n type Fees,\n type IndividualTxFees,\n type FeatureFlags,\n type SmartTransaction,\n type SentinelMeta,\n type SignedTransactionWithMetadata,\n type SmartTransactionsNetworkConfig,\n type SmartTransactionsFeatureFlagsConfig,\n SmartTransactionMinedTx,\n SmartTransactionCancellationReason,\n SmartTransactionStatuses,\n OriginalTransactionStatus,\n ClientId,\n Feature,\n Kind,\n} from './types.js';\nexport { MetaMetricsEventName, MetaMetricsEventCategory } from './constants.js';\nexport {\n getSmartTransactionMetricsProperties,\n getSmartTransactionMetricsSensitiveProperties,\n getErrorData,\n} from './utils.js';\n\n// Feature flag selectors\nexport {\n selectSmartTransactionsFeatureFlags,\n selectSmartTransactionsFeatureFlagsForChain,\n type SmartTransactionsFeatureFlagsState,\n} from './selectors.js';\n"]}
|
package/dist/utils.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export declare const calculateStatus: (stxStatus: SmartTransactionsStatus) => Sm
|
|
|
14
14
|
export declare const getStxProcessingTime: (smartTransactionSubmittedtime: number | undefined) => number | undefined;
|
|
15
15
|
export declare const mapKeysToCamel: (obj: Record<string, any>) => Record<string, any>;
|
|
16
16
|
export declare function handleFetch(request: string, options?: RequestInit): Promise<any>;
|
|
17
|
+
export declare const getErrorData: (error: unknown) => string;
|
|
17
18
|
export declare const isSmartTransactionCancellable: (stxStatus: SmartTransactionsStatus) => boolean;
|
|
18
19
|
export declare const incrementNonceInHex: (nonceInHex: string) => string;
|
|
19
20
|
export declare const getTxHash: (signedTxHex: any) => string;
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,0CAA0C,EAC1C,0CAA0C,EAC3C,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,0CAA0C,EAC1C,0CAA0C,EAC3C,MAAM,kCAAkC,CAAC;AAY1C,OAAO,KAAK,EACV,gBAAgB,EAChB,uBAAuB,EACvB,8BAA8B,EAC/B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,OAAO,EACP,wBAAwB,EAIxB,QAAQ,EACT,MAAM,YAAY,CAAC;AAEpB,wBAAgB,yBAAyB,CAAC,gBAAgB,EAAE,gBAAgB,WAE3E;AAED,eAAO,MAAM,gCAAgC,cAChC,uBAAuB,GAAG,MAAM,kCACV,CAAC;AAEpC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAqC1E;AAED,eAAO,MAAM,eAAe,cAAe,uBAAuB,6BAuCjE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,kCACA,MAAM,GAAG,SAAS,KAChD,MAAM,GAAG,SAKX,CAAC;AAEF,eAAO,MAAM,cAAc,QACpB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KACvB,MAAM,CAAC,MAAM,EAAE,GAAG,CAcpB,CAAC;AAEF,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,gBAUvE;AAED,eAAO,MAAM,YAAY,UAAW,OAAO,KAAG,MAY7C,CAAC;AAEF,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;;;;;;;;;;;;;;;;;;;;;;;;CAoBnC,CAAC;AAEF,eAAO,MAAM,6CAA6C,qBACtC,gBAAgB;;;;;;;;;;;;CAYnC,CAAC;AAEF,eAAO,MAAM,mBAAmB,aACpB,QAAQ,gBACJ,8BAA8B,wBAK7C,CAAC;AAEF,eAAO,MAAM,qCAAqC,kDAI/C;IACD,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,8BAA8B,CAAC;CAC9C,KAAG,OAgBH,CAAC;AAEF,eAAO,MAAM,+BAA+B,mEAIzC;IACD,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,sBAAsB,EAAE,0CAA0C,CAAC,SAAS,CAAC,CAAC;IAC9E,eAAe,EAAE,0CAA0C,CAAC,SAAS,CAAC,CAAC;CACxE,SAgCA,CAAC"}
|
package/dist/utils.js
CHANGED
|
@@ -2,6 +2,7 @@ import { arrayify, hexlify } from '@ethersproject/bytes';
|
|
|
2
2
|
import { keccak256 } from '@ethersproject/keccak256';
|
|
3
3
|
import { parse } from '@ethersproject/transactions';
|
|
4
4
|
import { TransactionStatus } from '@metamask/transaction-controller';
|
|
5
|
+
import { hasProperty } from '@metamask/utils';
|
|
5
6
|
import { BigNumber } from 'bignumber.js';
|
|
6
7
|
import { camelCase, isArray, isObject, mapKeys, mapValues } from 'lodash-es';
|
|
7
8
|
// Ignoring TypeScript errors here because this import is disallowed for production builds, because
|
|
@@ -122,6 +123,18 @@ export async function handleFetch(request, options) {
|
|
|
122
123
|
}
|
|
123
124
|
return json;
|
|
124
125
|
}
|
|
126
|
+
export const getErrorData = (error) => {
|
|
127
|
+
if (error && typeof error === 'object' && hasProperty(error, 'data')) {
|
|
128
|
+
const { data } = error;
|
|
129
|
+
if (data && typeof data === 'object') {
|
|
130
|
+
if (hasProperty(data, 'error') && typeof data.error === 'string') {
|
|
131
|
+
return data.error;
|
|
132
|
+
}
|
|
133
|
+
return JSON.stringify(data);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return error instanceof Error ? error.message : String(error);
|
|
137
|
+
};
|
|
125
138
|
export const isSmartTransactionCancellable = (stxStatus) => {
|
|
126
139
|
return (stxStatus.minedTx === SmartTransactionMinedTx.NOT_MINED &&
|
|
127
140
|
(!stxStatus.cancellationReason ||
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","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 TransactionControllerFailTransactionAction,\n TransactionControllerGetTransactionsAction,\n} from '@metamask/transaction-controller';\nimport { TransactionStatus } from '@metamask/transaction-controller';\nimport { BigNumber } from 'bignumber.js';\nimport { camelCase, isArray, isObject, mapKeys, mapValues } from 'lodash-es';\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 { SENTINEL_API_BASE_URL_MAP } from './constants.js';\nimport type {\n SmartTransaction,\n SmartTransactionsStatus,\n SmartTransactionsNetworkConfig,\n} from './types.js';\nimport {\n APIType,\n SmartTransactionStatuses,\n SmartTransactionCancellationReason,\n SmartTransactionMinedTx,\n cancellationReasonToStatusMap,\n ClientId,\n} from './types.js';\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\nexport function getAPIRequestURL(apiType: APIType, chainId: string): string {\n const chainIdDec = parseInt(chainId, 16);\n\n // Throw the error that would have been thrown by transaction-api on an unsupported chain.\n if (!SENTINEL_API_BASE_URL_MAP[chainIdDec]) {\n throw new Error(`Chain ${chainIdDec} is not supported`);\n }\n\n switch (apiType) {\n case APIType.GET_FEES: {\n return `${SENTINEL_API_BASE_URL_MAP[chainIdDec]}/v1/networks/${chainIdDec}/getFees`;\n }\n\n case APIType.ESTIMATE_GAS: {\n return `${SENTINEL_API_BASE_URL_MAP[chainIdDec]}/v1/networks/${chainIdDec}/estimateGas`;\n }\n\n case APIType.SUBMIT_TRANSACTIONS: {\n return `${SENTINEL_API_BASE_URL_MAP[chainIdDec]}/v1/networks/${chainIdDec}/submitTransactions?stxControllerVersion=${packageJson.version}`;\n }\n\n case APIType.CANCEL: {\n return `${SENTINEL_API_BASE_URL_MAP[chainIdDec]}/v1/networks/${chainIdDec}/cancel`;\n }\n\n case APIType.BATCH_STATUS: {\n return `${SENTINEL_API_BASE_URL_MAP[chainIdDec]}/v1/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 * Returns processing time for an STX in seconds.\n *\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 Object.assign(new Error(`Fetch error: ${response.status}`), {\n data: mapKeysToCamel(json),\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 stx_original_transaction_status:\n smartTransactionStatusMetadata?.originalTransactionStatus,\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 featureFlags: SmartTransactionsNetworkConfig,\n) => {\n return clientId === ClientId.Extension\n ? featureFlags.extensionReturnTxHashAsap\n : featureFlags.mobileReturnTxHashAsap;\n};\n\nexport const shouldMarkRegularTransactionsAsFailed = ({\n smartTransaction,\n clientId,\n featureFlags,\n}: {\n smartTransaction: SmartTransaction;\n clientId: ClientId;\n featureFlags: SmartTransactionsNetworkConfig;\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 returnTxHashAsapEnabled = getReturnTxHashAsap(clientId, featureFlags);\n return Boolean(returnTxHashAsapEnabled && transactionId);\n};\n\nexport const markRegularTransactionsAsFailed = ({\n smartTransaction,\n getRegularTransactions,\n failTransaction,\n}: {\n smartTransaction: SmartTransaction;\n getRegularTransactions: TransactionControllerGetTransactionsAction['handler'];\n failTransaction: TransactionControllerFailTransactionAction['handler'];\n}) => {\n const { transactionId, status, statusMetadata, txHashes } = smartTransaction;\n const originalTransactionStatus = statusMetadata?.originalTransactionStatus;\n\n const transactionsToFail = getRegularTransactions().filter(\n (tx) => (tx.hash && txHashes?.includes(tx.hash)) || tx.id === transactionId,\n );\n\n if (!transactionsToFail.length) {\n throw new Error('Cannot find regular transaction to mark it as failed');\n }\n\n const errorMessage = originalTransactionStatus\n ? `Smart transaction failed with status: ${status}, originalTransactionStatus: ${originalTransactionStatus}`\n : `Smart transaction failed with status: ${status}`;\n\n for (const tx of transactionsToFail) {\n if (tx.status === TransactionStatus.failed) {\n continue; // Already marked as failed.\n }\n\n const error = new Error(errorMessage);\n error.name = 'SmartTransactionFailed';\n\n // Fail via the TransactionController's `failTransaction` action rather than\n // `updateTransaction` so the transaction lifecycle events\n // (`transactionFailed`, `transactionStatusUpdated`, `transactionFinished`)\n // are emitted. Downstream subscribers such as the bridge status controller\n // and metrics rely on these events; a plain state update leaves e.g. bridge\n // transactions stuck as pending forever.\n failTransaction(tx.id, error);\n }\n};\n"]}
|
|
1
|
+
{"version":3,"file":"utils.js","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 TransactionControllerFailTransactionAction,\n TransactionControllerGetTransactionsAction,\n} from '@metamask/transaction-controller';\nimport { TransactionStatus } from '@metamask/transaction-controller';\nimport { hasProperty } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\nimport { camelCase, isArray, isObject, mapKeys, mapValues } from 'lodash-es';\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 { SENTINEL_API_BASE_URL_MAP } from './constants.js';\nimport type {\n SmartTransaction,\n SmartTransactionsStatus,\n SmartTransactionsNetworkConfig,\n} from './types.js';\nimport {\n APIType,\n SmartTransactionStatuses,\n SmartTransactionCancellationReason,\n SmartTransactionMinedTx,\n cancellationReasonToStatusMap,\n ClientId,\n} from './types.js';\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\nexport function getAPIRequestURL(apiType: APIType, chainId: string): string {\n const chainIdDec = parseInt(chainId, 16);\n\n // Throw the error that would have been thrown by transaction-api on an unsupported chain.\n if (!SENTINEL_API_BASE_URL_MAP[chainIdDec]) {\n throw new Error(`Chain ${chainIdDec} is not supported`);\n }\n\n switch (apiType) {\n case APIType.GET_FEES: {\n return `${SENTINEL_API_BASE_URL_MAP[chainIdDec]}/v1/networks/${chainIdDec}/getFees`;\n }\n\n case APIType.ESTIMATE_GAS: {\n return `${SENTINEL_API_BASE_URL_MAP[chainIdDec]}/v1/networks/${chainIdDec}/estimateGas`;\n }\n\n case APIType.SUBMIT_TRANSACTIONS: {\n return `${SENTINEL_API_BASE_URL_MAP[chainIdDec]}/v1/networks/${chainIdDec}/submitTransactions?stxControllerVersion=${packageJson.version}`;\n }\n\n case APIType.CANCEL: {\n return `${SENTINEL_API_BASE_URL_MAP[chainIdDec]}/v1/networks/${chainIdDec}/cancel`;\n }\n\n case APIType.BATCH_STATUS: {\n return `${SENTINEL_API_BASE_URL_MAP[chainIdDec]}/v1/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 * Returns processing time for an STX in seconds.\n *\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 Object.assign(new Error(`Fetch error: ${response.status}`), {\n data: mapKeysToCamel(json),\n });\n }\n return json;\n}\n\nexport const getErrorData = (error: unknown): string => {\n if (error && typeof error === 'object' && hasProperty(error, 'data')) {\n const { data } = error;\n if (data && typeof data === 'object') {\n if (hasProperty(data, 'error') && typeof data.error === 'string') {\n return data.error;\n }\n return JSON.stringify(data);\n }\n }\n\n return error instanceof Error ? error.message : String(error);\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 stx_original_transaction_status:\n smartTransactionStatusMetadata?.originalTransactionStatus,\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 featureFlags: SmartTransactionsNetworkConfig,\n) => {\n return clientId === ClientId.Extension\n ? featureFlags.extensionReturnTxHashAsap\n : featureFlags.mobileReturnTxHashAsap;\n};\n\nexport const shouldMarkRegularTransactionsAsFailed = ({\n smartTransaction,\n clientId,\n featureFlags,\n}: {\n smartTransaction: SmartTransaction;\n clientId: ClientId;\n featureFlags: SmartTransactionsNetworkConfig;\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 returnTxHashAsapEnabled = getReturnTxHashAsap(clientId, featureFlags);\n return Boolean(returnTxHashAsapEnabled && transactionId);\n};\n\nexport const markRegularTransactionsAsFailed = ({\n smartTransaction,\n getRegularTransactions,\n failTransaction,\n}: {\n smartTransaction: SmartTransaction;\n getRegularTransactions: TransactionControllerGetTransactionsAction['handler'];\n failTransaction: TransactionControllerFailTransactionAction['handler'];\n}) => {\n const { transactionId, status, statusMetadata, txHashes } = smartTransaction;\n const originalTransactionStatus = statusMetadata?.originalTransactionStatus;\n\n const transactionsToFail = getRegularTransactions().filter(\n (tx) => (tx.hash && txHashes?.includes(tx.hash)) || tx.id === transactionId,\n );\n\n if (!transactionsToFail.length) {\n throw new Error('Cannot find regular transaction to mark it as failed');\n }\n\n const errorMessage = originalTransactionStatus\n ? `Smart transaction failed with status: ${status}, originalTransactionStatus: ${originalTransactionStatus}`\n : `Smart transaction failed with status: ${status}`;\n\n for (const tx of transactionsToFail) {\n if (tx.status === TransactionStatus.failed) {\n continue; // Already marked as failed.\n }\n\n const error = new Error(errorMessage);\n error.name = 'SmartTransactionFailed';\n\n // Fail via the TransactionController's `failTransaction` action rather than\n // `updateTransaction` so the transaction lifecycle events\n // (`transactionFailed`, `transactionStatusUpdated`, `transactionFinished`)\n // are emitted. Downstream subscribers such as the bridge status controller\n // and metrics rely on these events; a plain state update leaves e.g. bridge\n // transactions stuck as pending forever.\n failTransaction(tx.id, error);\n }\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metamask-previews/smart-transactions-controller",
|
|
3
|
-
"version": "27.0.3-preview-
|
|
3
|
+
"version": "27.0.3-preview-576eebcfe",
|
|
4
4
|
"description": "Improves success rates for swaps by trialing transactions privately and finding minimum fees",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Ethereum",
|