@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.
Files changed (126) hide show
  1. package/CHANGELOG.md +9 -1
  2. package/dist/bridge-status-controller.cjs +167 -21
  3. package/dist/bridge-status-controller.cjs.map +1 -1
  4. package/dist/bridge-status-controller.d.cts +6 -1
  5. package/dist/bridge-status-controller.d.cts.map +1 -1
  6. package/dist/bridge-status-controller.d.mts +6 -1
  7. package/dist/bridge-status-controller.d.mts.map +1 -1
  8. package/dist/bridge-status-controller.mjs +167 -21
  9. package/dist/bridge-status-controller.mjs.map +1 -1
  10. package/dist/constants.cjs +1 -0
  11. package/dist/constants.cjs.map +1 -1
  12. package/dist/constants.d.cts.map +1 -1
  13. package/dist/constants.d.mts.map +1 -1
  14. package/dist/constants.mjs +1 -0
  15. package/dist/constants.mjs.map +1 -1
  16. package/dist/index.cjs +12 -6
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.cts +3 -1
  19. package/dist/index.d.cts.map +1 -1
  20. package/dist/index.d.mts +3 -1
  21. package/dist/index.d.mts.map +1 -1
  22. package/dist/index.mjs +3 -0
  23. package/dist/index.mjs.map +1 -1
  24. package/dist/quote-status-manager/constants.cjs +181 -0
  25. package/dist/quote-status-manager/constants.cjs.map +1 -0
  26. package/dist/quote-status-manager/constants.d.cts +137 -0
  27. package/dist/quote-status-manager/constants.d.cts.map +1 -0
  28. package/dist/quote-status-manager/constants.d.mts +137 -0
  29. package/dist/quote-status-manager/constants.d.mts.map +1 -0
  30. package/dist/quote-status-manager/constants.mjs +178 -0
  31. package/dist/quote-status-manager/constants.mjs.map +1 -0
  32. package/dist/quote-status-manager/errors.cjs +51 -0
  33. package/dist/quote-status-manager/errors.cjs.map +1 -0
  34. package/dist/quote-status-manager/errors.d.cts +45 -0
  35. package/dist/quote-status-manager/errors.d.cts.map +1 -0
  36. package/dist/quote-status-manager/errors.d.mts +45 -0
  37. package/dist/quote-status-manager/errors.d.mts.map +1 -0
  38. package/dist/quote-status-manager/errors.mjs +46 -0
  39. package/dist/quote-status-manager/errors.mjs.map +1 -0
  40. package/dist/quote-status-manager/quote-status-api-service.cjs +241 -0
  41. package/dist/quote-status-manager/quote-status-api-service.cjs.map +1 -0
  42. package/dist/quote-status-manager/quote-status-api-service.d.cts +93 -0
  43. package/dist/quote-status-manager/quote-status-api-service.d.cts.map +1 -0
  44. package/dist/quote-status-manager/quote-status-api-service.d.mts +93 -0
  45. package/dist/quote-status-manager/quote-status-api-service.d.mts.map +1 -0
  46. package/dist/quote-status-manager/quote-status-api-service.mjs +237 -0
  47. package/dist/quote-status-manager/quote-status-api-service.mjs.map +1 -0
  48. package/dist/quote-status-manager/quote-status-entry-store.cjs +271 -0
  49. package/dist/quote-status-manager/quote-status-entry-store.cjs.map +1 -0
  50. package/dist/quote-status-manager/quote-status-entry-store.d.cts +144 -0
  51. package/dist/quote-status-manager/quote-status-entry-store.d.cts.map +1 -0
  52. package/dist/quote-status-manager/quote-status-entry-store.d.mts +144 -0
  53. package/dist/quote-status-manager/quote-status-entry-store.d.mts.map +1 -0
  54. package/dist/quote-status-manager/quote-status-entry-store.mjs +267 -0
  55. package/dist/quote-status-manager/quote-status-entry-store.mjs.map +1 -0
  56. package/dist/quote-status-manager/quote-status-get-with-retry-outcome.cjs +29 -0
  57. package/dist/quote-status-manager/quote-status-get-with-retry-outcome.cjs.map +1 -0
  58. package/dist/quote-status-manager/quote-status-get-with-retry-outcome.d.cts +32 -0
  59. package/dist/quote-status-manager/quote-status-get-with-retry-outcome.d.cts.map +1 -0
  60. package/dist/quote-status-manager/quote-status-get-with-retry-outcome.d.mts +32 -0
  61. package/dist/quote-status-manager/quote-status-get-with-retry-outcome.d.mts.map +1 -0
  62. package/dist/quote-status-manager/quote-status-get-with-retry-outcome.mjs +25 -0
  63. package/dist/quote-status-manager/quote-status-get-with-retry-outcome.mjs.map +1 -0
  64. package/dist/quote-status-manager/quote-status-state-fsm.cjs +107 -0
  65. package/dist/quote-status-manager/quote-status-state-fsm.cjs.map +1 -0
  66. package/dist/quote-status-manager/quote-status-state-fsm.d.cts +57 -0
  67. package/dist/quote-status-manager/quote-status-state-fsm.d.cts.map +1 -0
  68. package/dist/quote-status-manager/quote-status-state-fsm.d.mts +57 -0
  69. package/dist/quote-status-manager/quote-status-state-fsm.d.mts.map +1 -0
  70. package/dist/quote-status-manager/quote-status-state-fsm.mjs +103 -0
  71. package/dist/quote-status-manager/quote-status-state-fsm.mjs.map +1 -0
  72. package/dist/quote-status-manager/quote-status-update-with-retry-outcome.cjs +27 -0
  73. package/dist/quote-status-manager/quote-status-update-with-retry-outcome.cjs.map +1 -0
  74. package/dist/quote-status-manager/quote-status-update-with-retry-outcome.d.cts +30 -0
  75. package/dist/quote-status-manager/quote-status-update-with-retry-outcome.d.cts.map +1 -0
  76. package/dist/quote-status-manager/quote-status-update-with-retry-outcome.d.mts +30 -0
  77. package/dist/quote-status-manager/quote-status-update-with-retry-outcome.d.mts.map +1 -0
  78. package/dist/quote-status-manager/quote-status-update-with-retry-outcome.mjs +23 -0
  79. package/dist/quote-status-manager/quote-status-update-with-retry-outcome.mjs.map +1 -0
  80. package/dist/quote-status-manager/quotes-status-manager.cjs +477 -0
  81. package/dist/quote-status-manager/quotes-status-manager.cjs.map +1 -0
  82. package/dist/quote-status-manager/quotes-status-manager.d.cts +124 -0
  83. package/dist/quote-status-manager/quotes-status-manager.d.cts.map +1 -0
  84. package/dist/quote-status-manager/quotes-status-manager.d.mts +124 -0
  85. package/dist/quote-status-manager/quotes-status-manager.d.mts.map +1 -0
  86. package/dist/quote-status-manager/quotes-status-manager.mjs +473 -0
  87. package/dist/quote-status-manager/quotes-status-manager.mjs.map +1 -0
  88. package/dist/quote-status-manager/types.cjs +8 -0
  89. package/dist/quote-status-manager/types.cjs.map +1 -0
  90. package/dist/quote-status-manager/types.d.cts +145 -0
  91. package/dist/quote-status-manager/types.d.cts.map +1 -0
  92. package/dist/quote-status-manager/types.d.mts +145 -0
  93. package/dist/quote-status-manager/types.d.mts.map +1 -0
  94. package/dist/quote-status-manager/types.mjs +6 -0
  95. package/dist/quote-status-manager/types.mjs.map +1 -0
  96. package/dist/quote-status-manager/utils.cjs +11 -0
  97. package/dist/quote-status-manager/utils.cjs.map +1 -0
  98. package/dist/quote-status-manager/utils.d.cts +7 -0
  99. package/dist/quote-status-manager/utils.d.cts.map +1 -0
  100. package/dist/quote-status-manager/utils.d.mts +7 -0
  101. package/dist/quote-status-manager/utils.d.mts.map +1 -0
  102. package/dist/quote-status-manager/utils.mjs +7 -0
  103. package/dist/quote-status-manager/utils.mjs.map +1 -0
  104. package/dist/quote-status-manager/validators.cjs +44 -0
  105. package/dist/quote-status-manager/validators.cjs.map +1 -0
  106. package/dist/quote-status-manager/validators.d.cts +172 -0
  107. package/dist/quote-status-manager/validators.d.cts.map +1 -0
  108. package/dist/quote-status-manager/validators.d.mts +172 -0
  109. package/dist/quote-status-manager/validators.d.mts.map +1 -0
  110. package/dist/quote-status-manager/validators.mjs +39 -0
  111. package/dist/quote-status-manager/validators.mjs.map +1 -0
  112. package/dist/types.cjs +2 -0
  113. package/dist/types.cjs.map +1 -1
  114. package/dist/types.d.cts +15 -3
  115. package/dist/types.d.cts.map +1 -1
  116. package/dist/types.d.mts +15 -3
  117. package/dist/types.d.mts.map +1 -1
  118. package/dist/types.mjs +2 -0
  119. package/dist/types.mjs.map +1 -1
  120. package/dist/utils/history.cjs +1 -0
  121. package/dist/utils/history.cjs.map +1 -1
  122. package/dist/utils/history.d.cts.map +1 -1
  123. package/dist/utils/history.d.mts.map +1 -1
  124. package/dist/utils/history.mjs +1 -0
  125. package/dist/utils/history.mjs.map +1 -1
  126. 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":";;;AAAA,mEAKqC;AASrC,uDAAgE;AAEhE,MAAM,iBAAiB,GAAG,CACxB,cAAiC,EACjC,MAAqC,EACT,EAAE;IAC9B,OAAO;QACL,GAAG,cAAc;QACjB,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,qBAAqB,EAAE,cAAc,CAAC,qBAAqB,IAAI,MAAM,CAAC,EAAE;QACxE,MAAM,EAAE;YACN,GAAG,cAAc,CAAC,MAAM;YACxB,QAAQ,EAAE;gBACR,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ;gBACjC,MAAM,EAAE,MAAM,CAAC,IAAI,IAAI,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM;aAC9D;SACF;KACF,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,uBAAuB,GAAG,CACrC,KAAkC,EAClC,MAAc,EACd,MAAc,EACd,MAAqC,EAC5B,EAAE;IACX,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG;QACxB,GAAG,WAAW;QACd,GAAG,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC;KAC1C,CAAC;IACF,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAjBW,QAAA,uBAAuB,2BAiBlC;AAEK,MAAM,sBAAsB,GAAG,CACpC,WAA8B,EACrB,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AAFrC,QAAA,sBAAsB,0BAEe;AAElD;;;;;;GAMG;AACI,MAAM,gCAAgC,GAAG,CAC9C,SAAmD,EACnD,MAAuB,EACkB,EAAE;IAC3C,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEjD,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC1C,MAAM,EACJ,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,MAAM,EAAE,EACN,QAAQ,EAAE,EAAE,MAAM,EAAE,GACrB,GACF,GAAG,KAAK,CAAC;QACV,OAAO,CACL,GAAG,KAAK,MAAM,CAAC,EAAE;YACjB,GAAG,KAAK,MAAM,CAAC,QAAQ;YACvB,QAAQ,KAAK,MAAM,CAAC,EAAE;YACtB,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;YACjD,mFAAmF;YACnF,0EAA0E;YAC1E,0DAA0D;YAC1D,CAAC,OAAO,CAAC,OAAO,CAAC;gBACf,CAAC,IAAA,8BAAsB,EAAC,KAAK,CAAC;gBAC9B,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC;YAC7B,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CACvE,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AA7BW,QAAA,gCAAgC,oCA6B3C;AAEF;;;;;;GAMG;AACI,MAAM,wCAAwC,GAAG,CACtD,SAAmD,EACnD,MAAuB,EACkB,EAAE;IAC3C,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEjD,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CACxC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAC9D,CAAC;AACJ,CAAC,CAAC;AATW,QAAA,wCAAwC,4CASnD;AAEF;;;;;;;;;;GAUG;AACI,MAAM,iCAAiC,GAAG,CAC/C,SAAmD,EACnD,UAAmB,EAC0C,EAAE;IAC/D,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAE9C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO;YACL,YAAY,EAAE,EAAE;YAChB,WAAW,EAAE,KAAK;SACnB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,iBAAiB,GAAG,YAAY,CAAC,IAAI,CACzC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CACvB,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,UAAU,CAAC,WAAW,EAAE;QAClE,QAAQ,KAAK,UAAU,CAC1B,CAAC;IAEF,iCAAiC;IACjC,MAAM,oBAAoB,GACxB,iBAAiB,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACjE,YAAY,CAAC,MAAM,CACjB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CACd,OAAO;YACP,iBAAiB,EAAE,OAAO;YAC1B,OAAO,KAAK,iBAAiB,CAAC,OAAO,CACxC,CAAC;IAEJ,OAAO;QACL,YAAY,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC;QACvE,WAAW,EACT,OAAO,CAAC,iBAAiB,CAAC;YAC1B,OAAO,CAAC,iBAAiB,EAAE,QAAQ,EAAE,MAAM,CAAC;KAC/C,CAAC;AACJ,CAAC,CAAC;AAtCW,QAAA,iCAAiC,qCAsC5C;AAEF;;;;;;;;;;GAUG;AACH,SAAgB,aAAa,CAC3B,QAA4B,EAC5B,cAAkC,EAClC,sBAA+B;IAE/B,MAAM,UAAU,GAAG,QAAQ,IAAI,cAAc,IAAI,sBAAsB,CAAC;IACxE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CACb,wGAAwG,CACzG,CAAC;IACJ,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAZD,sCAYC;AAEM,MAAM,qBAAqB,GAAG,CACnC,IAAiD,EAC9B,EAAE;IACrB,MAAM,EACJ,YAAY,EACZ,aAAa,EACb,SAAS,EACT,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,aAAa,EACb,cAAc,EAAE,eAAe,EAC/B,qBAAqB,EACrB,QAAQ,EACR,4BAA4B,EAC5B,wBAAwB,EACxB,aAAa,EACb,QAAQ,GACT,GAAG,IAAI,CAAC;IAET,6GAA6G;IAC7G,wDAAwD;IACxD,MAAM,aAAa,GAAsB;QACvC,QAAQ,EAAE,YAAY,EAAE,EAAE;QAC1B,QAAQ;QACR,qBAAqB,EAAE,qBAAqB,IAAI,YAAY,EAAE,EAAE,EAAE,wCAAwC;QAC1G,OAAO,EAAE,YAAY,EAAE,OAAO;QAC9B,KAAK,EAAE,aAAa,CAAC,KAAK;QAC1B,OAAO,EAAE,aAAa,CAAC,OAAO;QAC9B,SAAS;QACT,gCAAgC,EAC9B,aAAa,CAAC,gCAAgC;QAChD,kBAAkB;QAClB,WAAW,EAAE;YACX,UAAU,EAAE,aAAa,CAAC,UAAU,EAAE,MAAM,IAAI,GAAG;YACnD,eAAe,EAAE,aAAa,CAAC,UAAU,EAAE,GAAG,IAAI,SAAS;YAC3D,cAAc,EAAE,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,SAAS;YACjE,iBAAiB,EAAE,aAAa,CAAC,aAAa,EAAE,GAAG,IAAI,SAAS;YAChE,eAAe,EAAE,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,IAAI,SAAS;SACtE;QACD,uBAAuB;QACvB,qBAAqB;QACrB,OAAO,EAAE,eAAe;QACxB,MAAM,EAAE;YACN,qGAAqG;YACrG,wEAAwE;YACxE,MAAM,EAAE,+BAAW,CAAC,OAAO;YAC3B,QAAQ,EAAE;gBACR,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,UAAU;gBACvC,iGAAiG;gBACjG,sDAAsD;gBACtD,MAAM,EACJ,IAAA,mCAAe,EAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY;oBAC9D,CAAC,CAAC,YAAY,EAAE,IAAI;oBACpB,CAAC,CAAC,SAAS;aAChB;SACF;QACD,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC;QAC9C,YAAY;QACZ,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC;QACnC,SAAS,EAAE,aAAa,CAAC,SAAS;QAClC,QAAQ;QACR,GAAG,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,CAAC;QAC3B,GAAG,CAAC,aAAa,IAAI,EAAE,aAAa,EAAE,CAAC;QACvC,GAAG,CAAC,4BAA4B,KAAK,SAAS,IAAI;YAChD,4BAA4B;SAC7B,CAAC;QACF,GAAG,CAAC,wBAAwB,KAAK,SAAS,IAAI;YAC5C,wBAAwB;SACzB,CAAC;KACH,CAAC;IAEF,IAAI,aAAa,EAAE,CAAC;QAClB,aAAa,CAAC,aAAa,GAAG,aAAa,CAAC;IAC9C,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,aAAa,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACpC,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC,CAAC;AApFW,QAAA,qBAAqB,yBAoFhC;AAEK,MAAM,qBAAqB,GAAG,CACnC,WAA8B,EACrB,EAAE;IACX,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,IAAA,gCAAY,EAC7B,WAAW,CAAC,KAAK,CAAC,UAAU,EAC5B,WAAW,CAAC,KAAK,CAAC,WAAW,CAC9B,CAAC;IACF,MAAM,QAAQ,GAAG,IAAA,iCAAa,EAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAE7D,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxD,CAAC,CAAC;AAXW,QAAA,qBAAqB,yBAWhC;AAEK,MAAM,mBAAmB,GAAG,CACjC,SAA0C,EAC1C,WAA8B,EACrB,EAAE;IACX,MAAM,0BAA0B,GAAG,IAAA,6CAA6B,EAAC,SAAS,CAAC,CAAC;IAE5E,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,SAAS,GAAG,0BAA0B,CAAC;AACzE,CAAC,CAAC;AAPW,QAAA,mBAAmB,uBAO9B","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,iBAiFF,CAAC;AAEF,eAAO,MAAM,qBAAqB,gBACnB,iBAAiB,KAC7B,OASF,CAAC;AAEF,eAAO,MAAM,mBAAmB,4DAEjB,iBAAiB,KAC7B,OAIF,CAAC"}
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,iBAiFF,CAAC;AAEF,eAAO,MAAM,qBAAqB,gBACnB,iBAAiB,KAC7B,OASF,CAAC;AAEF,eAAO,MAAM,mBAAmB,4DAEjB,iBAAiB,KAC7B,OAIF,CAAC"}
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"}
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask-previews/bridge-status-controller",
3
- "version": "73.1.0-preview-e12e4a38f",
3
+ "version": "74.0.0-preview-4f9d41d",
4
4
  "description": "Manages bridge-related status fetching functionality for MetaMask",
5
5
  "keywords": [
6
6
  "Ethereum",