@metamask-previews/bridge-status-controller 73.1.0-preview-e12e4a38f → 74.0.0-preview-4f9d41d
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 +9 -1
- package/dist/bridge-status-controller.cjs +167 -21
- package/dist/bridge-status-controller.cjs.map +1 -1
- package/dist/bridge-status-controller.d.cts +6 -1
- package/dist/bridge-status-controller.d.cts.map +1 -1
- package/dist/bridge-status-controller.d.mts +6 -1
- package/dist/bridge-status-controller.d.mts.map +1 -1
- package/dist/bridge-status-controller.mjs +167 -21
- package/dist/bridge-status-controller.mjs.map +1 -1
- package/dist/constants.cjs +1 -0
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.cts.map +1 -1
- package/dist/constants.d.mts.map +1 -1
- package/dist/constants.mjs +1 -0
- package/dist/constants.mjs.map +1 -1
- package/dist/index.cjs +12 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +3 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +3 -0
- package/dist/index.mjs.map +1 -1
- package/dist/quote-status-manager/constants.cjs +181 -0
- package/dist/quote-status-manager/constants.cjs.map +1 -0
- package/dist/quote-status-manager/constants.d.cts +137 -0
- package/dist/quote-status-manager/constants.d.cts.map +1 -0
- package/dist/quote-status-manager/constants.d.mts +137 -0
- package/dist/quote-status-manager/constants.d.mts.map +1 -0
- package/dist/quote-status-manager/constants.mjs +178 -0
- package/dist/quote-status-manager/constants.mjs.map +1 -0
- package/dist/quote-status-manager/errors.cjs +51 -0
- package/dist/quote-status-manager/errors.cjs.map +1 -0
- package/dist/quote-status-manager/errors.d.cts +45 -0
- package/dist/quote-status-manager/errors.d.cts.map +1 -0
- package/dist/quote-status-manager/errors.d.mts +45 -0
- package/dist/quote-status-manager/errors.d.mts.map +1 -0
- package/dist/quote-status-manager/errors.mjs +46 -0
- package/dist/quote-status-manager/errors.mjs.map +1 -0
- package/dist/quote-status-manager/quote-status-api-service.cjs +241 -0
- package/dist/quote-status-manager/quote-status-api-service.cjs.map +1 -0
- package/dist/quote-status-manager/quote-status-api-service.d.cts +93 -0
- package/dist/quote-status-manager/quote-status-api-service.d.cts.map +1 -0
- package/dist/quote-status-manager/quote-status-api-service.d.mts +93 -0
- package/dist/quote-status-manager/quote-status-api-service.d.mts.map +1 -0
- package/dist/quote-status-manager/quote-status-api-service.mjs +237 -0
- package/dist/quote-status-manager/quote-status-api-service.mjs.map +1 -0
- package/dist/quote-status-manager/quote-status-entry-store.cjs +271 -0
- package/dist/quote-status-manager/quote-status-entry-store.cjs.map +1 -0
- package/dist/quote-status-manager/quote-status-entry-store.d.cts +144 -0
- package/dist/quote-status-manager/quote-status-entry-store.d.cts.map +1 -0
- package/dist/quote-status-manager/quote-status-entry-store.d.mts +144 -0
- package/dist/quote-status-manager/quote-status-entry-store.d.mts.map +1 -0
- package/dist/quote-status-manager/quote-status-entry-store.mjs +267 -0
- package/dist/quote-status-manager/quote-status-entry-store.mjs.map +1 -0
- package/dist/quote-status-manager/quote-status-get-with-retry-outcome.cjs +29 -0
- package/dist/quote-status-manager/quote-status-get-with-retry-outcome.cjs.map +1 -0
- package/dist/quote-status-manager/quote-status-get-with-retry-outcome.d.cts +32 -0
- package/dist/quote-status-manager/quote-status-get-with-retry-outcome.d.cts.map +1 -0
- package/dist/quote-status-manager/quote-status-get-with-retry-outcome.d.mts +32 -0
- package/dist/quote-status-manager/quote-status-get-with-retry-outcome.d.mts.map +1 -0
- package/dist/quote-status-manager/quote-status-get-with-retry-outcome.mjs +25 -0
- package/dist/quote-status-manager/quote-status-get-with-retry-outcome.mjs.map +1 -0
- package/dist/quote-status-manager/quote-status-state-fsm.cjs +107 -0
- package/dist/quote-status-manager/quote-status-state-fsm.cjs.map +1 -0
- package/dist/quote-status-manager/quote-status-state-fsm.d.cts +57 -0
- package/dist/quote-status-manager/quote-status-state-fsm.d.cts.map +1 -0
- package/dist/quote-status-manager/quote-status-state-fsm.d.mts +57 -0
- package/dist/quote-status-manager/quote-status-state-fsm.d.mts.map +1 -0
- package/dist/quote-status-manager/quote-status-state-fsm.mjs +103 -0
- package/dist/quote-status-manager/quote-status-state-fsm.mjs.map +1 -0
- package/dist/quote-status-manager/quote-status-update-with-retry-outcome.cjs +27 -0
- package/dist/quote-status-manager/quote-status-update-with-retry-outcome.cjs.map +1 -0
- package/dist/quote-status-manager/quote-status-update-with-retry-outcome.d.cts +30 -0
- package/dist/quote-status-manager/quote-status-update-with-retry-outcome.d.cts.map +1 -0
- package/dist/quote-status-manager/quote-status-update-with-retry-outcome.d.mts +30 -0
- package/dist/quote-status-manager/quote-status-update-with-retry-outcome.d.mts.map +1 -0
- package/dist/quote-status-manager/quote-status-update-with-retry-outcome.mjs +23 -0
- package/dist/quote-status-manager/quote-status-update-with-retry-outcome.mjs.map +1 -0
- package/dist/quote-status-manager/quotes-status-manager.cjs +477 -0
- package/dist/quote-status-manager/quotes-status-manager.cjs.map +1 -0
- package/dist/quote-status-manager/quotes-status-manager.d.cts +124 -0
- package/dist/quote-status-manager/quotes-status-manager.d.cts.map +1 -0
- package/dist/quote-status-manager/quotes-status-manager.d.mts +124 -0
- package/dist/quote-status-manager/quotes-status-manager.d.mts.map +1 -0
- package/dist/quote-status-manager/quotes-status-manager.mjs +473 -0
- package/dist/quote-status-manager/quotes-status-manager.mjs.map +1 -0
- package/dist/quote-status-manager/types.cjs +8 -0
- package/dist/quote-status-manager/types.cjs.map +1 -0
- package/dist/quote-status-manager/types.d.cts +145 -0
- package/dist/quote-status-manager/types.d.cts.map +1 -0
- package/dist/quote-status-manager/types.d.mts +145 -0
- package/dist/quote-status-manager/types.d.mts.map +1 -0
- package/dist/quote-status-manager/types.mjs +6 -0
- package/dist/quote-status-manager/types.mjs.map +1 -0
- package/dist/quote-status-manager/utils.cjs +11 -0
- package/dist/quote-status-manager/utils.cjs.map +1 -0
- package/dist/quote-status-manager/utils.d.cts +7 -0
- package/dist/quote-status-manager/utils.d.cts.map +1 -0
- package/dist/quote-status-manager/utils.d.mts +7 -0
- package/dist/quote-status-manager/utils.d.mts.map +1 -0
- package/dist/quote-status-manager/utils.mjs +7 -0
- package/dist/quote-status-manager/utils.mjs.map +1 -0
- package/dist/quote-status-manager/validators.cjs +44 -0
- package/dist/quote-status-manager/validators.cjs.map +1 -0
- package/dist/quote-status-manager/validators.d.cts +172 -0
- package/dist/quote-status-manager/validators.d.cts.map +1 -0
- package/dist/quote-status-manager/validators.d.mts +172 -0
- package/dist/quote-status-manager/validators.d.mts.map +1 -0
- package/dist/quote-status-manager/validators.mjs +39 -0
- package/dist/quote-status-manager/validators.mjs.map +1 -0
- package/dist/types.cjs +2 -0
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +15 -3
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +15 -3
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs +2 -0
- package/dist/types.mjs.map +1 -1
- package/dist/utils/history.cjs +1 -0
- package/dist/utils/history.cjs.map +1 -1
- package/dist/utils/history.d.cts.map +1 -1
- package/dist/utils/history.d.mts.map +1 -1
- package/dist/utils/history.mjs +1 -0
- package/dist/utils/history.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.cjs","sourceRoot":"","sources":["../../src/utils/history.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n StatusTypes,\n isCrossChain,\n isNonEvmChainId,\n isTronChainId,\n} from '@metamask/bridge-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\n\nimport type {\n BridgeHistoryItem,\n BridgeStatusControllerMessenger,\n BridgeStatusControllerState,\n StartPollingForBridgeTxStatusArgsSerialized,\n} from '../types';\nimport { getMaxPendingHistoryItemAgeMs } from './feature-flags';\n\nconst updateHistoryItem = (\n oldHistoryItem: BridgeHistoryItem,\n txMeta: { id: string; hash?: string },\n): Partial<BridgeHistoryItem> => {\n return {\n ...oldHistoryItem,\n txMetaId: txMeta.id,\n originalTransactionId: oldHistoryItem.originalTransactionId ?? txMeta.id,\n status: {\n ...oldHistoryItem.status,\n srcChain: {\n ...oldHistoryItem.status.srcChain,\n txHash: txMeta.hash ?? oldHistoryItem.status.srcChain?.txHash,\n },\n },\n };\n};\n\nexport const rekeyHistoryItemInState = (\n state: BridgeStatusControllerState,\n oldKey: string,\n newKey: string,\n txMeta: { id: string; hash?: string },\n): boolean => {\n const historyItem = state.txHistory[oldKey];\n if (!historyItem) {\n return false;\n }\n\n state.txHistory[newKey] = {\n ...historyItem,\n ...updateHistoryItem(historyItem, txMeta),\n };\n delete state.txHistory[oldKey];\n return true;\n};\n\nexport const isBatchSellHistoryItem = (\n historyItem: BridgeHistoryItem,\n): boolean => Boolean(historyItem?.batchSellData);\n\n/**\n * Returns the history entry that matches the txMeta by id, actionId, batchId, or txHash\n *\n * @param txHistory - The transaction history\n * @param txMeta - The transaction meta\n * @returns The history entry that matches the txMeta\n */\nexport const getMatchingHistoryEntryForTxMeta = (\n txHistory: BridgeStatusControllerState['txHistory'],\n txMeta: TransactionMeta,\n): [string, BridgeHistoryItem] | undefined => {\n const historyEntries = Object.entries(txHistory);\n\n return historyEntries.find(([key, value]) => {\n const {\n txMetaId,\n actionId,\n batchId,\n status: {\n srcChain: { txHash },\n },\n } = value;\n return (\n key === txMeta.id ||\n key === txMeta.actionId ||\n txMetaId === txMeta.id ||\n (actionId ? actionId === txMeta.actionId : false) ||\n // When the batch is not atomic (BatchSell), ignore batchId matching to prevent txs\n // in the batch from getting marked complete/failed too early if one fails\n // Multiple BatchSell STX trades may have the same batchId\n (Boolean(batchId) &&\n !isBatchSellHistoryItem(value) &&\n batchId === txMeta.batchId) ||\n (txHash ? txHash.toLowerCase() === txMeta.hash?.toLowerCase() : false)\n );\n });\n};\n\n/**\n * Returns the history entry whose approvalTxId matches the approval transaction\n *\n * @param txHistory - The transaction history\n * @param txMeta - The transaction meta\n * @returns The history entry that matches the txMeta\n */\nexport const getMatchingHistoryEntryForApprovalTxMeta = (\n txHistory: BridgeStatusControllerState['txHistory'],\n txMeta: TransactionMeta,\n): [string, BridgeHistoryItem] | undefined => {\n const historyEntries = Object.entries(txHistory);\n\n return historyEntries.find(([_, value]) =>\n value.approvalTxId ? value.approvalTxId === txMeta.id : false,\n );\n};\n\n/**\n * Returns the BatchSell history items in the same batch as the provided tx hash.\n *\n * @param txHistory - The bridge status controller's history to search for matching history items\n * @param txHashOrId - the hash or txMeta.id of a single trade in a BatchSell\n * @returns The matching history items for the tx hash and a boolean indicating if it's a 7702 batch.\n * @example\n * getBatchSellHistoryItemsForTxHash(txHistory, id)\n * If id is the hash or txMetaId of a BatchSell trade, it will return the history items for\n * the trade and all other trades in the same batch.\n */\nexport const getBatchSellHistoryItemsForTxHash = (\n txHistory: BridgeStatusControllerState['txHistory'],\n txHashOrId?: string,\n): { historyItems: BridgeHistoryItem[]; is7702Batch: boolean } => {\n const historyItems = Object.values(txHistory);\n\n if (!txHashOrId) {\n return {\n historyItems: [],\n is7702Batch: false,\n };\n }\n\n /**\n * Either a delegation tx or a single STX BatchSell trade\n */\n const parentHistoryItem = historyItems.find(\n ({ status, txMetaId }) =>\n status.srcChain.txHash?.toLowerCase() === txHashOrId.toLowerCase() ||\n txMetaId === txHashOrId,\n );\n\n // Match by batchId or by quoteId\n const matchingHistoryItems =\n parentHistoryItem?.quoteIds?.map((quoteId) => txHistory[quoteId]) ??\n historyItems.filter(\n ({ batchId }) =>\n batchId &&\n parentHistoryItem?.batchId &&\n batchId === parentHistoryItem.batchId,\n );\n\n return {\n historyItems: matchingHistoryItems.filter((item) => item !== undefined),\n is7702Batch:\n Boolean(parentHistoryItem) &&\n Boolean(parentHistoryItem?.quoteIds?.length),\n };\n};\n\n/**\n * Determines the key to use for storing a bridge history item.\n * Uses actionId for pre-submission tracking, or bridgeTxMetaId for post-submission.\n *\n * @deprecated specify an explicit history key instead\n * @param actionId - The action ID used for pre-submission tracking\n * @param bridgeTxMetaId - The transaction meta ID from bridgeTxMeta\n * @param syntheticTransactionId - The transactionId of the intent's placeholder transaction\n * @returns The key to use for the history item\n * @throws Error if neither actionId nor bridgeTxMetaId is provided\n */\nexport function getHistoryKey(\n actionId: string | undefined,\n bridgeTxMetaId: string | undefined,\n syntheticTransactionId?: string,\n): string {\n const historyKey = actionId ?? bridgeTxMetaId ?? syntheticTransactionId;\n if (!historyKey) {\n throw new Error(\n 'Cannot add tx to history: either actionId, bridgeTxMeta.id, or syntheticTransactionId must be provided',\n );\n }\n return historyKey;\n}\n\nexport const getInitialHistoryItem = (\n args: StartPollingForBridgeTxStatusArgsSerialized,\n): BridgeHistoryItem => {\n const {\n bridgeTxMeta,\n quoteResponse,\n startTime,\n slippagePercentage,\n initialDestAssetBalance,\n targetContractAddress,\n approvalTxId,\n isStxEnabled,\n location,\n abTests,\n activeAbTests,\n accountAddress: selectedAddress,\n originalTransactionId,\n actionId,\n tokenSecurityTypeDestination,\n inputPrimaryDenomination,\n batchSellData,\n quoteIds,\n } = args;\n\n // Write all non-status fields to state so we can reference the quote in Activity list without the Bridge API\n // We know it's in progress but not the exact status yet\n const txHistoryItem: BridgeHistoryItem = {\n txMetaId: bridgeTxMeta?.id,\n actionId,\n originalTransactionId: originalTransactionId ?? bridgeTxMeta?.id, // Keep original for intent transactions\n batchId: bridgeTxMeta?.batchId,\n quote: quoteResponse.quote,\n startTime,\n estimatedProcessingTimeInSeconds:\n quoteResponse.estimatedProcessingTimeInSeconds,\n slippagePercentage,\n pricingData: {\n amountSent: quoteResponse.sentAmount?.amount ?? '0',\n amountSentInUsd: quoteResponse.sentAmount?.usd ?? undefined,\n quotedGasInUsd: quoteResponse.gasFee?.effective?.usd ?? undefined,\n quotedReturnInUsd: quoteResponse.toTokenAmount?.usd ?? undefined,\n quotedGasAmount: quoteResponse.gasFee?.effective?.amount ?? undefined,\n },\n initialDestAssetBalance,\n targetContractAddress,\n account: selectedAddress,\n status: {\n // We always have a PENDING status when we start polling for a tx, don't need the Bridge API for that\n // Also we know the bare minimum fields for status at this point in time\n status: StatusTypes.PENDING,\n srcChain: {\n chainId: quoteResponse.quote.srcChainId,\n // We don't set the initial tx hash for STX transactions because they return a hash on submission\n // but it is not finalized until confirmation on chain\n txHash:\n isNonEvmChainId(quoteResponse.quote.srcChainId) || !isStxEnabled\n ? bridgeTxMeta?.hash\n : undefined,\n },\n },\n hasApprovalTx: Boolean(quoteResponse.approval),\n approvalTxId,\n isStxEnabled: Boolean(isStxEnabled),\n featureId: quoteResponse.featureId,\n location,\n ...(abTests && { abTests }),\n ...(activeAbTests && { activeAbTests }),\n ...(tokenSecurityTypeDestination !== undefined && {\n tokenSecurityTypeDestination,\n }),\n ...(inputPrimaryDenomination !== undefined && {\n inputPrimaryDenomination,\n }),\n };\n\n if (batchSellData) {\n txHistoryItem.batchSellData = batchSellData;\n }\n if (quoteIds) {\n txHistoryItem.quoteIds = quoteIds;\n }\n\n return txHistoryItem;\n};\n\nexport const shouldPollHistoryItem = (\n historyItem: BridgeHistoryItem,\n): boolean => {\n const isIntent = Boolean(historyItem?.quote?.intent);\n const isBridgeTx = isCrossChain(\n historyItem.quote.srcChainId,\n historyItem.quote.destChainId,\n );\n const isTronTx = isTronChainId(historyItem.quote.srcChainId);\n\n return [isBridgeTx, isIntent, isTronTx].some(Boolean);\n};\n\nexport const isHistoryItemTooOld = (\n messenger: BridgeStatusControllerMessenger,\n historyItem: BridgeHistoryItem,\n): boolean => {\n const maxPendingHistoryItemAgeMs = getMaxPendingHistoryItemAgeMs(messenger);\n\n return Date.now() - historyItem.startTime > maxPendingHistoryItemAgeMs;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"history.cjs","sourceRoot":"","sources":["../../src/utils/history.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n StatusTypes,\n isCrossChain,\n isNonEvmChainId,\n isTronChainId,\n} from '@metamask/bridge-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\n\nimport type {\n BridgeHistoryItem,\n BridgeStatusControllerMessenger,\n BridgeStatusControllerState,\n StartPollingForBridgeTxStatusArgsSerialized,\n} from '../types';\nimport { getMaxPendingHistoryItemAgeMs } from './feature-flags';\n\nconst updateHistoryItem = (\n oldHistoryItem: BridgeHistoryItem,\n txMeta: { id: string; hash?: string },\n): Partial<BridgeHistoryItem> => {\n return {\n ...oldHistoryItem,\n txMetaId: txMeta.id,\n originalTransactionId: oldHistoryItem.originalTransactionId ?? txMeta.id,\n status: {\n ...oldHistoryItem.status,\n srcChain: {\n ...oldHistoryItem.status.srcChain,\n txHash: txMeta.hash ?? oldHistoryItem.status.srcChain?.txHash,\n },\n },\n };\n};\n\nexport const rekeyHistoryItemInState = (\n state: BridgeStatusControllerState,\n oldKey: string,\n newKey: string,\n txMeta: { id: string; hash?: string },\n): boolean => {\n const historyItem = state.txHistory[oldKey];\n if (!historyItem) {\n return false;\n }\n\n state.txHistory[newKey] = {\n ...historyItem,\n ...updateHistoryItem(historyItem, txMeta),\n };\n delete state.txHistory[oldKey];\n return true;\n};\n\nexport const isBatchSellHistoryItem = (\n historyItem: BridgeHistoryItem,\n): boolean => Boolean(historyItem?.batchSellData);\n\n/**\n * Returns the history entry that matches the txMeta by id, actionId, batchId, or txHash\n *\n * @param txHistory - The transaction history\n * @param txMeta - The transaction meta\n * @returns The history entry that matches the txMeta\n */\nexport const getMatchingHistoryEntryForTxMeta = (\n txHistory: BridgeStatusControllerState['txHistory'],\n txMeta: TransactionMeta,\n): [string, BridgeHistoryItem] | undefined => {\n const historyEntries = Object.entries(txHistory);\n\n return historyEntries.find(([key, value]) => {\n const {\n txMetaId,\n actionId,\n batchId,\n status: {\n srcChain: { txHash },\n },\n } = value;\n return (\n key === txMeta.id ||\n key === txMeta.actionId ||\n txMetaId === txMeta.id ||\n (actionId ? actionId === txMeta.actionId : false) ||\n // When the batch is not atomic (BatchSell), ignore batchId matching to prevent txs\n // in the batch from getting marked complete/failed too early if one fails\n // Multiple BatchSell STX trades may have the same batchId\n (Boolean(batchId) &&\n !isBatchSellHistoryItem(value) &&\n batchId === txMeta.batchId) ||\n (txHash ? txHash.toLowerCase() === txMeta.hash?.toLowerCase() : false)\n );\n });\n};\n\n/**\n * Returns the history entry whose approvalTxId matches the approval transaction\n *\n * @param txHistory - The transaction history\n * @param txMeta - The transaction meta\n * @returns The history entry that matches the txMeta\n */\nexport const getMatchingHistoryEntryForApprovalTxMeta = (\n txHistory: BridgeStatusControllerState['txHistory'],\n txMeta: TransactionMeta,\n): [string, BridgeHistoryItem] | undefined => {\n const historyEntries = Object.entries(txHistory);\n\n return historyEntries.find(([_, value]) =>\n value.approvalTxId ? value.approvalTxId === txMeta.id : false,\n );\n};\n\n/**\n * Returns the BatchSell history items in the same batch as the provided tx hash.\n *\n * @param txHistory - The bridge status controller's history to search for matching history items\n * @param txHashOrId - the hash or txMeta.id of a single trade in a BatchSell\n * @returns The matching history items for the tx hash and a boolean indicating if it's a 7702 batch.\n * @example\n * getBatchSellHistoryItemsForTxHash(txHistory, id)\n * If id is the hash or txMetaId of a BatchSell trade, it will return the history items for\n * the trade and all other trades in the same batch.\n */\nexport const getBatchSellHistoryItemsForTxHash = (\n txHistory: BridgeStatusControllerState['txHistory'],\n txHashOrId?: string,\n): { historyItems: BridgeHistoryItem[]; is7702Batch: boolean } => {\n const historyItems = Object.values(txHistory);\n\n if (!txHashOrId) {\n return {\n historyItems: [],\n is7702Batch: false,\n };\n }\n\n /**\n * Either a delegation tx or a single STX BatchSell trade\n */\n const parentHistoryItem = historyItems.find(\n ({ status, txMetaId }) =>\n status.srcChain.txHash?.toLowerCase() === txHashOrId.toLowerCase() ||\n txMetaId === txHashOrId,\n );\n\n // Match by batchId or by quoteId\n const matchingHistoryItems =\n parentHistoryItem?.quoteIds?.map((quoteId) => txHistory[quoteId]) ??\n historyItems.filter(\n ({ batchId }) =>\n batchId &&\n parentHistoryItem?.batchId &&\n batchId === parentHistoryItem.batchId,\n );\n\n return {\n historyItems: matchingHistoryItems.filter((item) => item !== undefined),\n is7702Batch:\n Boolean(parentHistoryItem) &&\n Boolean(parentHistoryItem?.quoteIds?.length),\n };\n};\n\n/**\n * Determines the key to use for storing a bridge history item.\n * Uses actionId for pre-submission tracking, or bridgeTxMetaId for post-submission.\n *\n * @deprecated specify an explicit history key instead\n * @param actionId - The action ID used for pre-submission tracking\n * @param bridgeTxMetaId - The transaction meta ID from bridgeTxMeta\n * @param syntheticTransactionId - The transactionId of the intent's placeholder transaction\n * @returns The key to use for the history item\n * @throws Error if neither actionId nor bridgeTxMetaId is provided\n */\nexport function getHistoryKey(\n actionId: string | undefined,\n bridgeTxMetaId: string | undefined,\n syntheticTransactionId?: string,\n): string {\n const historyKey = actionId ?? bridgeTxMetaId ?? syntheticTransactionId;\n if (!historyKey) {\n throw new Error(\n 'Cannot add tx to history: either actionId, bridgeTxMeta.id, or syntheticTransactionId must be provided',\n );\n }\n return historyKey;\n}\n\nexport const getInitialHistoryItem = (\n args: StartPollingForBridgeTxStatusArgsSerialized,\n): BridgeHistoryItem => {\n const {\n bridgeTxMeta,\n quoteResponse,\n startTime,\n slippagePercentage,\n initialDestAssetBalance,\n targetContractAddress,\n approvalTxId,\n isStxEnabled,\n location,\n abTests,\n activeAbTests,\n accountAddress: selectedAddress,\n originalTransactionId,\n actionId,\n tokenSecurityTypeDestination,\n inputPrimaryDenomination,\n batchSellData,\n quoteIds,\n } = args;\n\n // Write all non-status fields to state so we can reference the quote in Activity list without the Bridge API\n // We know it's in progress but not the exact status yet\n const txHistoryItem: BridgeHistoryItem = {\n txMetaId: bridgeTxMeta?.id,\n actionId,\n originalTransactionId: originalTransactionId ?? bridgeTxMeta?.id, // Keep original for intent transactions\n batchId: bridgeTxMeta?.batchId,\n quote: quoteResponse.quote,\n quoteId: quoteResponse.quoteId,\n startTime,\n estimatedProcessingTimeInSeconds:\n quoteResponse.estimatedProcessingTimeInSeconds,\n slippagePercentage,\n pricingData: {\n amountSent: quoteResponse.sentAmount?.amount ?? '0',\n amountSentInUsd: quoteResponse.sentAmount?.usd ?? undefined,\n quotedGasInUsd: quoteResponse.gasFee?.effective?.usd ?? undefined,\n quotedReturnInUsd: quoteResponse.toTokenAmount?.usd ?? undefined,\n quotedGasAmount: quoteResponse.gasFee?.effective?.amount ?? undefined,\n },\n initialDestAssetBalance,\n targetContractAddress,\n account: selectedAddress,\n status: {\n // We always have a PENDING status when we start polling for a tx, don't need the Bridge API for that\n // Also we know the bare minimum fields for status at this point in time\n status: StatusTypes.PENDING,\n srcChain: {\n chainId: quoteResponse.quote.srcChainId,\n // We don't set the initial tx hash for STX transactions because they return a hash on submission\n // but it is not finalized until confirmation on chain\n txHash:\n isNonEvmChainId(quoteResponse.quote.srcChainId) || !isStxEnabled\n ? bridgeTxMeta?.hash\n : undefined,\n },\n },\n hasApprovalTx: Boolean(quoteResponse.approval),\n approvalTxId,\n isStxEnabled: Boolean(isStxEnabled),\n featureId: quoteResponse.featureId,\n location,\n ...(abTests && { abTests }),\n ...(activeAbTests && { activeAbTests }),\n ...(tokenSecurityTypeDestination !== undefined && {\n tokenSecurityTypeDestination,\n }),\n ...(inputPrimaryDenomination !== undefined && {\n inputPrimaryDenomination,\n }),\n };\n\n if (batchSellData) {\n txHistoryItem.batchSellData = batchSellData;\n }\n if (quoteIds) {\n txHistoryItem.quoteIds = quoteIds;\n }\n\n return txHistoryItem;\n};\n\nexport const shouldPollHistoryItem = (\n historyItem: BridgeHistoryItem,\n): boolean => {\n const isIntent = Boolean(historyItem?.quote?.intent);\n const isBridgeTx = isCrossChain(\n historyItem.quote.srcChainId,\n historyItem.quote.destChainId,\n );\n const isTronTx = isTronChainId(historyItem.quote.srcChainId);\n\n return [isBridgeTx, isIntent, isTronTx].some(Boolean);\n};\n\nexport const isHistoryItemTooOld = (\n messenger: BridgeStatusControllerMessenger,\n historyItem: BridgeHistoryItem,\n): boolean => {\n const maxPendingHistoryItemAgeMs = getMaxPendingHistoryItemAgeMs(messenger);\n\n return Date.now() - historyItem.startTime > maxPendingHistoryItemAgeMs;\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.d.cts","sourceRoot":"","sources":["../../src/utils/history.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,yCAAyC;AAExE,OAAO,KAAK,EACV,iBAAiB,EACjB,+BAA+B,EAC/B,2BAA2B,EAC3B,2CAA2C,EAC5C,qBAAiB;AAqBlB,eAAO,MAAM,uBAAuB,UAC3B,2BAA2B,UAC1B,MAAM,UACN,MAAM,UACN;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,KACpC,OAYF,CAAC;AAEF,eAAO,MAAM,sBAAsB,gBACpB,iBAAiB,KAC7B,OAA8C,CAAC;AAElD;;;;;;GAMG;AACH,eAAO,MAAM,gCAAgC,cAChC,2BAA2B,CAAC,WAAW,CAAC,UAC3C,eAAe,KACtB,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,SA0BhC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,wCAAwC,cACxC,2BAA2B,CAAC,WAAW,CAAC,UAC3C,eAAe,KACtB,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,SAMhC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iCAAiC,cACjC,2BAA2B,CAAC,WAAW,CAAC,eACtC,MAAM;kBACF,iBAAiB,EAAE;iBAAe,OAAO;CAmC3D,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,sBAAsB,CAAC,EAAE,MAAM,GAC9B,MAAM,CAQR;AAED,eAAO,MAAM,qBAAqB,SAC1B,2CAA2C,KAChD,
|
|
1
|
+
{"version":3,"file":"history.d.cts","sourceRoot":"","sources":["../../src/utils/history.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,yCAAyC;AAExE,OAAO,KAAK,EACV,iBAAiB,EACjB,+BAA+B,EAC/B,2BAA2B,EAC3B,2CAA2C,EAC5C,qBAAiB;AAqBlB,eAAO,MAAM,uBAAuB,UAC3B,2BAA2B,UAC1B,MAAM,UACN,MAAM,UACN;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,KACpC,OAYF,CAAC;AAEF,eAAO,MAAM,sBAAsB,gBACpB,iBAAiB,KAC7B,OAA8C,CAAC;AAElD;;;;;;GAMG;AACH,eAAO,MAAM,gCAAgC,cAChC,2BAA2B,CAAC,WAAW,CAAC,UAC3C,eAAe,KACtB,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,SA0BhC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,wCAAwC,cACxC,2BAA2B,CAAC,WAAW,CAAC,UAC3C,eAAe,KACtB,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,SAMhC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iCAAiC,cACjC,2BAA2B,CAAC,WAAW,CAAC,eACtC,MAAM;kBACF,iBAAiB,EAAE;iBAAe,OAAO;CAmC3D,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,sBAAsB,CAAC,EAAE,MAAM,GAC9B,MAAM,CAQR;AAED,eAAO,MAAM,qBAAqB,SAC1B,2CAA2C,KAChD,iBAkFF,CAAC;AAEF,eAAO,MAAM,qBAAqB,gBACnB,iBAAiB,KAC7B,OASF,CAAC;AAEF,eAAO,MAAM,mBAAmB,4DAEjB,iBAAiB,KAC7B,OAIF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.d.mts","sourceRoot":"","sources":["../../src/utils/history.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,yCAAyC;AAExE,OAAO,KAAK,EACV,iBAAiB,EACjB,+BAA+B,EAC/B,2BAA2B,EAC3B,2CAA2C,EAC5C,qBAAiB;AAqBlB,eAAO,MAAM,uBAAuB,UAC3B,2BAA2B,UAC1B,MAAM,UACN,MAAM,UACN;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,KACpC,OAYF,CAAC;AAEF,eAAO,MAAM,sBAAsB,gBACpB,iBAAiB,KAC7B,OAA8C,CAAC;AAElD;;;;;;GAMG;AACH,eAAO,MAAM,gCAAgC,cAChC,2BAA2B,CAAC,WAAW,CAAC,UAC3C,eAAe,KACtB,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,SA0BhC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,wCAAwC,cACxC,2BAA2B,CAAC,WAAW,CAAC,UAC3C,eAAe,KACtB,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,SAMhC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iCAAiC,cACjC,2BAA2B,CAAC,WAAW,CAAC,eACtC,MAAM;kBACF,iBAAiB,EAAE;iBAAe,OAAO;CAmC3D,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,sBAAsB,CAAC,EAAE,MAAM,GAC9B,MAAM,CAQR;AAED,eAAO,MAAM,qBAAqB,SAC1B,2CAA2C,KAChD,
|
|
1
|
+
{"version":3,"file":"history.d.mts","sourceRoot":"","sources":["../../src/utils/history.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,yCAAyC;AAExE,OAAO,KAAK,EACV,iBAAiB,EACjB,+BAA+B,EAC/B,2BAA2B,EAC3B,2CAA2C,EAC5C,qBAAiB;AAqBlB,eAAO,MAAM,uBAAuB,UAC3B,2BAA2B,UAC1B,MAAM,UACN,MAAM,UACN;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,KACpC,OAYF,CAAC;AAEF,eAAO,MAAM,sBAAsB,gBACpB,iBAAiB,KAC7B,OAA8C,CAAC;AAElD;;;;;;GAMG;AACH,eAAO,MAAM,gCAAgC,cAChC,2BAA2B,CAAC,WAAW,CAAC,UAC3C,eAAe,KACtB,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,SA0BhC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,wCAAwC,cACxC,2BAA2B,CAAC,WAAW,CAAC,UAC3C,eAAe,KACtB,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,SAMhC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iCAAiC,cACjC,2BAA2B,CAAC,WAAW,CAAC,eACtC,MAAM;kBACF,iBAAiB,EAAE;iBAAe,OAAO;CAmC3D,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,sBAAsB,CAAC,EAAE,MAAM,GAC9B,MAAM,CAQR;AAED,eAAO,MAAM,qBAAqB,SAC1B,2CAA2C,KAChD,iBAkFF,CAAC;AAEF,eAAO,MAAM,qBAAqB,gBACnB,iBAAiB,KAC7B,OASF,CAAC;AAEF,eAAO,MAAM,mBAAmB,4DAEjB,iBAAiB,KAC7B,OAIF,CAAC"}
|
package/dist/utils/history.mjs
CHANGED
|
@@ -125,6 +125,7 @@ export const getInitialHistoryItem = (args) => {
|
|
|
125
125
|
originalTransactionId: originalTransactionId ?? bridgeTxMeta?.id, // Keep original for intent transactions
|
|
126
126
|
batchId: bridgeTxMeta?.batchId,
|
|
127
127
|
quote: quoteResponse.quote,
|
|
128
|
+
quoteId: quoteResponse.quoteId,
|
|
128
129
|
startTime,
|
|
129
130
|
estimatedProcessingTimeInSeconds: quoteResponse.estimatedProcessingTimeInSeconds,
|
|
130
131
|
slippagePercentage,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.mjs","sourceRoot":"","sources":["../../src/utils/history.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n StatusTypes,\n isCrossChain,\n isNonEvmChainId,\n isTronChainId,\n} from '@metamask/bridge-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\n\nimport type {\n BridgeHistoryItem,\n BridgeStatusControllerMessenger,\n BridgeStatusControllerState,\n StartPollingForBridgeTxStatusArgsSerialized,\n} from '../types';\nimport { getMaxPendingHistoryItemAgeMs } from './feature-flags';\n\nconst updateHistoryItem = (\n oldHistoryItem: BridgeHistoryItem,\n txMeta: { id: string; hash?: string },\n): Partial<BridgeHistoryItem> => {\n return {\n ...oldHistoryItem,\n txMetaId: txMeta.id,\n originalTransactionId: oldHistoryItem.originalTransactionId ?? txMeta.id,\n status: {\n ...oldHistoryItem.status,\n srcChain: {\n ...oldHistoryItem.status.srcChain,\n txHash: txMeta.hash ?? oldHistoryItem.status.srcChain?.txHash,\n },\n },\n };\n};\n\nexport const rekeyHistoryItemInState = (\n state: BridgeStatusControllerState,\n oldKey: string,\n newKey: string,\n txMeta: { id: string; hash?: string },\n): boolean => {\n const historyItem = state.txHistory[oldKey];\n if (!historyItem) {\n return false;\n }\n\n state.txHistory[newKey] = {\n ...historyItem,\n ...updateHistoryItem(historyItem, txMeta),\n };\n delete state.txHistory[oldKey];\n return true;\n};\n\nexport const isBatchSellHistoryItem = (\n historyItem: BridgeHistoryItem,\n): boolean => Boolean(historyItem?.batchSellData);\n\n/**\n * Returns the history entry that matches the txMeta by id, actionId, batchId, or txHash\n *\n * @param txHistory - The transaction history\n * @param txMeta - The transaction meta\n * @returns The history entry that matches the txMeta\n */\nexport const getMatchingHistoryEntryForTxMeta = (\n txHistory: BridgeStatusControllerState['txHistory'],\n txMeta: TransactionMeta,\n): [string, BridgeHistoryItem] | undefined => {\n const historyEntries = Object.entries(txHistory);\n\n return historyEntries.find(([key, value]) => {\n const {\n txMetaId,\n actionId,\n batchId,\n status: {\n srcChain: { txHash },\n },\n } = value;\n return (\n key === txMeta.id ||\n key === txMeta.actionId ||\n txMetaId === txMeta.id ||\n (actionId ? actionId === txMeta.actionId : false) ||\n // When the batch is not atomic (BatchSell), ignore batchId matching to prevent txs\n // in the batch from getting marked complete/failed too early if one fails\n // Multiple BatchSell STX trades may have the same batchId\n (Boolean(batchId) &&\n !isBatchSellHistoryItem(value) &&\n batchId === txMeta.batchId) ||\n (txHash ? txHash.toLowerCase() === txMeta.hash?.toLowerCase() : false)\n );\n });\n};\n\n/**\n * Returns the history entry whose approvalTxId matches the approval transaction\n *\n * @param txHistory - The transaction history\n * @param txMeta - The transaction meta\n * @returns The history entry that matches the txMeta\n */\nexport const getMatchingHistoryEntryForApprovalTxMeta = (\n txHistory: BridgeStatusControllerState['txHistory'],\n txMeta: TransactionMeta,\n): [string, BridgeHistoryItem] | undefined => {\n const historyEntries = Object.entries(txHistory);\n\n return historyEntries.find(([_, value]) =>\n value.approvalTxId ? value.approvalTxId === txMeta.id : false,\n );\n};\n\n/**\n * Returns the BatchSell history items in the same batch as the provided tx hash.\n *\n * @param txHistory - The bridge status controller's history to search for matching history items\n * @param txHashOrId - the hash or txMeta.id of a single trade in a BatchSell\n * @returns The matching history items for the tx hash and a boolean indicating if it's a 7702 batch.\n * @example\n * getBatchSellHistoryItemsForTxHash(txHistory, id)\n * If id is the hash or txMetaId of a BatchSell trade, it will return the history items for\n * the trade and all other trades in the same batch.\n */\nexport const getBatchSellHistoryItemsForTxHash = (\n txHistory: BridgeStatusControllerState['txHistory'],\n txHashOrId?: string,\n): { historyItems: BridgeHistoryItem[]; is7702Batch: boolean } => {\n const historyItems = Object.values(txHistory);\n\n if (!txHashOrId) {\n return {\n historyItems: [],\n is7702Batch: false,\n };\n }\n\n /**\n * Either a delegation tx or a single STX BatchSell trade\n */\n const parentHistoryItem = historyItems.find(\n ({ status, txMetaId }) =>\n status.srcChain.txHash?.toLowerCase() === txHashOrId.toLowerCase() ||\n txMetaId === txHashOrId,\n );\n\n // Match by batchId or by quoteId\n const matchingHistoryItems =\n parentHistoryItem?.quoteIds?.map((quoteId) => txHistory[quoteId]) ??\n historyItems.filter(\n ({ batchId }) =>\n batchId &&\n parentHistoryItem?.batchId &&\n batchId === parentHistoryItem.batchId,\n );\n\n return {\n historyItems: matchingHistoryItems.filter((item) => item !== undefined),\n is7702Batch:\n Boolean(parentHistoryItem) &&\n Boolean(parentHistoryItem?.quoteIds?.length),\n };\n};\n\n/**\n * Determines the key to use for storing a bridge history item.\n * Uses actionId for pre-submission tracking, or bridgeTxMetaId for post-submission.\n *\n * @deprecated specify an explicit history key instead\n * @param actionId - The action ID used for pre-submission tracking\n * @param bridgeTxMetaId - The transaction meta ID from bridgeTxMeta\n * @param syntheticTransactionId - The transactionId of the intent's placeholder transaction\n * @returns The key to use for the history item\n * @throws Error if neither actionId nor bridgeTxMetaId is provided\n */\nexport function getHistoryKey(\n actionId: string | undefined,\n bridgeTxMetaId: string | undefined,\n syntheticTransactionId?: string,\n): string {\n const historyKey = actionId ?? bridgeTxMetaId ?? syntheticTransactionId;\n if (!historyKey) {\n throw new Error(\n 'Cannot add tx to history: either actionId, bridgeTxMeta.id, or syntheticTransactionId must be provided',\n );\n }\n return historyKey;\n}\n\nexport const getInitialHistoryItem = (\n args: StartPollingForBridgeTxStatusArgsSerialized,\n): BridgeHistoryItem => {\n const {\n bridgeTxMeta,\n quoteResponse,\n startTime,\n slippagePercentage,\n initialDestAssetBalance,\n targetContractAddress,\n approvalTxId,\n isStxEnabled,\n location,\n abTests,\n activeAbTests,\n accountAddress: selectedAddress,\n originalTransactionId,\n actionId,\n tokenSecurityTypeDestination,\n inputPrimaryDenomination,\n batchSellData,\n quoteIds,\n } = args;\n\n // Write all non-status fields to state so we can reference the quote in Activity list without the Bridge API\n // We know it's in progress but not the exact status yet\n const txHistoryItem: BridgeHistoryItem = {\n txMetaId: bridgeTxMeta?.id,\n actionId,\n originalTransactionId: originalTransactionId ?? bridgeTxMeta?.id, // Keep original for intent transactions\n batchId: bridgeTxMeta?.batchId,\n quote: quoteResponse.quote,\n startTime,\n estimatedProcessingTimeInSeconds:\n quoteResponse.estimatedProcessingTimeInSeconds,\n slippagePercentage,\n pricingData: {\n amountSent: quoteResponse.sentAmount?.amount ?? '0',\n amountSentInUsd: quoteResponse.sentAmount?.usd ?? undefined,\n quotedGasInUsd: quoteResponse.gasFee?.effective?.usd ?? undefined,\n quotedReturnInUsd: quoteResponse.toTokenAmount?.usd ?? undefined,\n quotedGasAmount: quoteResponse.gasFee?.effective?.amount ?? undefined,\n },\n initialDestAssetBalance,\n targetContractAddress,\n account: selectedAddress,\n status: {\n // We always have a PENDING status when we start polling for a tx, don't need the Bridge API for that\n // Also we know the bare minimum fields for status at this point in time\n status: StatusTypes.PENDING,\n srcChain: {\n chainId: quoteResponse.quote.srcChainId,\n // We don't set the initial tx hash for STX transactions because they return a hash on submission\n // but it is not finalized until confirmation on chain\n txHash:\n isNonEvmChainId(quoteResponse.quote.srcChainId) || !isStxEnabled\n ? bridgeTxMeta?.hash\n : undefined,\n },\n },\n hasApprovalTx: Boolean(quoteResponse.approval),\n approvalTxId,\n isStxEnabled: Boolean(isStxEnabled),\n featureId: quoteResponse.featureId,\n location,\n ...(abTests && { abTests }),\n ...(activeAbTests && { activeAbTests }),\n ...(tokenSecurityTypeDestination !== undefined && {\n tokenSecurityTypeDestination,\n }),\n ...(inputPrimaryDenomination !== undefined && {\n inputPrimaryDenomination,\n }),\n };\n\n if (batchSellData) {\n txHistoryItem.batchSellData = batchSellData;\n }\n if (quoteIds) {\n txHistoryItem.quoteIds = quoteIds;\n }\n\n return txHistoryItem;\n};\n\nexport const shouldPollHistoryItem = (\n historyItem: BridgeHistoryItem,\n): boolean => {\n const isIntent = Boolean(historyItem?.quote?.intent);\n const isBridgeTx = isCrossChain(\n historyItem.quote.srcChainId,\n historyItem.quote.destChainId,\n );\n const isTronTx = isTronChainId(historyItem.quote.srcChainId);\n\n return [isBridgeTx, isIntent, isTronTx].some(Boolean);\n};\n\nexport const isHistoryItemTooOld = (\n messenger: BridgeStatusControllerMessenger,\n historyItem: BridgeHistoryItem,\n): boolean => {\n const maxPendingHistoryItemAgeMs = getMaxPendingHistoryItemAgeMs(messenger);\n\n return Date.now() - historyItem.startTime > maxPendingHistoryItemAgeMs;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"history.mjs","sourceRoot":"","sources":["../../src/utils/history.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n StatusTypes,\n isCrossChain,\n isNonEvmChainId,\n isTronChainId,\n} from '@metamask/bridge-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\n\nimport type {\n BridgeHistoryItem,\n BridgeStatusControllerMessenger,\n BridgeStatusControllerState,\n StartPollingForBridgeTxStatusArgsSerialized,\n} from '../types';\nimport { getMaxPendingHistoryItemAgeMs } from './feature-flags';\n\nconst updateHistoryItem = (\n oldHistoryItem: BridgeHistoryItem,\n txMeta: { id: string; hash?: string },\n): Partial<BridgeHistoryItem> => {\n return {\n ...oldHistoryItem,\n txMetaId: txMeta.id,\n originalTransactionId: oldHistoryItem.originalTransactionId ?? txMeta.id,\n status: {\n ...oldHistoryItem.status,\n srcChain: {\n ...oldHistoryItem.status.srcChain,\n txHash: txMeta.hash ?? oldHistoryItem.status.srcChain?.txHash,\n },\n },\n };\n};\n\nexport const rekeyHistoryItemInState = (\n state: BridgeStatusControllerState,\n oldKey: string,\n newKey: string,\n txMeta: { id: string; hash?: string },\n): boolean => {\n const historyItem = state.txHistory[oldKey];\n if (!historyItem) {\n return false;\n }\n\n state.txHistory[newKey] = {\n ...historyItem,\n ...updateHistoryItem(historyItem, txMeta),\n };\n delete state.txHistory[oldKey];\n return true;\n};\n\nexport const isBatchSellHistoryItem = (\n historyItem: BridgeHistoryItem,\n): boolean => Boolean(historyItem?.batchSellData);\n\n/**\n * Returns the history entry that matches the txMeta by id, actionId, batchId, or txHash\n *\n * @param txHistory - The transaction history\n * @param txMeta - The transaction meta\n * @returns The history entry that matches the txMeta\n */\nexport const getMatchingHistoryEntryForTxMeta = (\n txHistory: BridgeStatusControllerState['txHistory'],\n txMeta: TransactionMeta,\n): [string, BridgeHistoryItem] | undefined => {\n const historyEntries = Object.entries(txHistory);\n\n return historyEntries.find(([key, value]) => {\n const {\n txMetaId,\n actionId,\n batchId,\n status: {\n srcChain: { txHash },\n },\n } = value;\n return (\n key === txMeta.id ||\n key === txMeta.actionId ||\n txMetaId === txMeta.id ||\n (actionId ? actionId === txMeta.actionId : false) ||\n // When the batch is not atomic (BatchSell), ignore batchId matching to prevent txs\n // in the batch from getting marked complete/failed too early if one fails\n // Multiple BatchSell STX trades may have the same batchId\n (Boolean(batchId) &&\n !isBatchSellHistoryItem(value) &&\n batchId === txMeta.batchId) ||\n (txHash ? txHash.toLowerCase() === txMeta.hash?.toLowerCase() : false)\n );\n });\n};\n\n/**\n * Returns the history entry whose approvalTxId matches the approval transaction\n *\n * @param txHistory - The transaction history\n * @param txMeta - The transaction meta\n * @returns The history entry that matches the txMeta\n */\nexport const getMatchingHistoryEntryForApprovalTxMeta = (\n txHistory: BridgeStatusControllerState['txHistory'],\n txMeta: TransactionMeta,\n): [string, BridgeHistoryItem] | undefined => {\n const historyEntries = Object.entries(txHistory);\n\n return historyEntries.find(([_, value]) =>\n value.approvalTxId ? value.approvalTxId === txMeta.id : false,\n );\n};\n\n/**\n * Returns the BatchSell history items in the same batch as the provided tx hash.\n *\n * @param txHistory - The bridge status controller's history to search for matching history items\n * @param txHashOrId - the hash or txMeta.id of a single trade in a BatchSell\n * @returns The matching history items for the tx hash and a boolean indicating if it's a 7702 batch.\n * @example\n * getBatchSellHistoryItemsForTxHash(txHistory, id)\n * If id is the hash or txMetaId of a BatchSell trade, it will return the history items for\n * the trade and all other trades in the same batch.\n */\nexport const getBatchSellHistoryItemsForTxHash = (\n txHistory: BridgeStatusControllerState['txHistory'],\n txHashOrId?: string,\n): { historyItems: BridgeHistoryItem[]; is7702Batch: boolean } => {\n const historyItems = Object.values(txHistory);\n\n if (!txHashOrId) {\n return {\n historyItems: [],\n is7702Batch: false,\n };\n }\n\n /**\n * Either a delegation tx or a single STX BatchSell trade\n */\n const parentHistoryItem = historyItems.find(\n ({ status, txMetaId }) =>\n status.srcChain.txHash?.toLowerCase() === txHashOrId.toLowerCase() ||\n txMetaId === txHashOrId,\n );\n\n // Match by batchId or by quoteId\n const matchingHistoryItems =\n parentHistoryItem?.quoteIds?.map((quoteId) => txHistory[quoteId]) ??\n historyItems.filter(\n ({ batchId }) =>\n batchId &&\n parentHistoryItem?.batchId &&\n batchId === parentHistoryItem.batchId,\n );\n\n return {\n historyItems: matchingHistoryItems.filter((item) => item !== undefined),\n is7702Batch:\n Boolean(parentHistoryItem) &&\n Boolean(parentHistoryItem?.quoteIds?.length),\n };\n};\n\n/**\n * Determines the key to use for storing a bridge history item.\n * Uses actionId for pre-submission tracking, or bridgeTxMetaId for post-submission.\n *\n * @deprecated specify an explicit history key instead\n * @param actionId - The action ID used for pre-submission tracking\n * @param bridgeTxMetaId - The transaction meta ID from bridgeTxMeta\n * @param syntheticTransactionId - The transactionId of the intent's placeholder transaction\n * @returns The key to use for the history item\n * @throws Error if neither actionId nor bridgeTxMetaId is provided\n */\nexport function getHistoryKey(\n actionId: string | undefined,\n bridgeTxMetaId: string | undefined,\n syntheticTransactionId?: string,\n): string {\n const historyKey = actionId ?? bridgeTxMetaId ?? syntheticTransactionId;\n if (!historyKey) {\n throw new Error(\n 'Cannot add tx to history: either actionId, bridgeTxMeta.id, or syntheticTransactionId must be provided',\n );\n }\n return historyKey;\n}\n\nexport const getInitialHistoryItem = (\n args: StartPollingForBridgeTxStatusArgsSerialized,\n): BridgeHistoryItem => {\n const {\n bridgeTxMeta,\n quoteResponse,\n startTime,\n slippagePercentage,\n initialDestAssetBalance,\n targetContractAddress,\n approvalTxId,\n isStxEnabled,\n location,\n abTests,\n activeAbTests,\n accountAddress: selectedAddress,\n originalTransactionId,\n actionId,\n tokenSecurityTypeDestination,\n inputPrimaryDenomination,\n batchSellData,\n quoteIds,\n } = args;\n\n // Write all non-status fields to state so we can reference the quote in Activity list without the Bridge API\n // We know it's in progress but not the exact status yet\n const txHistoryItem: BridgeHistoryItem = {\n txMetaId: bridgeTxMeta?.id,\n actionId,\n originalTransactionId: originalTransactionId ?? bridgeTxMeta?.id, // Keep original for intent transactions\n batchId: bridgeTxMeta?.batchId,\n quote: quoteResponse.quote,\n quoteId: quoteResponse.quoteId,\n startTime,\n estimatedProcessingTimeInSeconds:\n quoteResponse.estimatedProcessingTimeInSeconds,\n slippagePercentage,\n pricingData: {\n amountSent: quoteResponse.sentAmount?.amount ?? '0',\n amountSentInUsd: quoteResponse.sentAmount?.usd ?? undefined,\n quotedGasInUsd: quoteResponse.gasFee?.effective?.usd ?? undefined,\n quotedReturnInUsd: quoteResponse.toTokenAmount?.usd ?? undefined,\n quotedGasAmount: quoteResponse.gasFee?.effective?.amount ?? undefined,\n },\n initialDestAssetBalance,\n targetContractAddress,\n account: selectedAddress,\n status: {\n // We always have a PENDING status when we start polling for a tx, don't need the Bridge API for that\n // Also we know the bare minimum fields for status at this point in time\n status: StatusTypes.PENDING,\n srcChain: {\n chainId: quoteResponse.quote.srcChainId,\n // We don't set the initial tx hash for STX transactions because they return a hash on submission\n // but it is not finalized until confirmation on chain\n txHash:\n isNonEvmChainId(quoteResponse.quote.srcChainId) || !isStxEnabled\n ? bridgeTxMeta?.hash\n : undefined,\n },\n },\n hasApprovalTx: Boolean(quoteResponse.approval),\n approvalTxId,\n isStxEnabled: Boolean(isStxEnabled),\n featureId: quoteResponse.featureId,\n location,\n ...(abTests && { abTests }),\n ...(activeAbTests && { activeAbTests }),\n ...(tokenSecurityTypeDestination !== undefined && {\n tokenSecurityTypeDestination,\n }),\n ...(inputPrimaryDenomination !== undefined && {\n inputPrimaryDenomination,\n }),\n };\n\n if (batchSellData) {\n txHistoryItem.batchSellData = batchSellData;\n }\n if (quoteIds) {\n txHistoryItem.quoteIds = quoteIds;\n }\n\n return txHistoryItem;\n};\n\nexport const shouldPollHistoryItem = (\n historyItem: BridgeHistoryItem,\n): boolean => {\n const isIntent = Boolean(historyItem?.quote?.intent);\n const isBridgeTx = isCrossChain(\n historyItem.quote.srcChainId,\n historyItem.quote.destChainId,\n );\n const isTronTx = isTronChainId(historyItem.quote.srcChainId);\n\n return [isBridgeTx, isIntent, isTronTx].some(Boolean);\n};\n\nexport const isHistoryItemTooOld = (\n messenger: BridgeStatusControllerMessenger,\n historyItem: BridgeHistoryItem,\n): boolean => {\n const maxPendingHistoryItemAgeMs = getMaxPendingHistoryItemAgeMs(messenger);\n\n return Date.now() - historyItem.startTime > maxPendingHistoryItemAgeMs;\n};\n"]}
|
package/package.json
CHANGED