@relayprotocol/relay-kit-ui 9.1.3 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/_cjs/src/components/common/RefundReason.js.map +1 -1
  2. package/_cjs/src/components/common/TransactionModal/DepositAddressModalRenderer.js +7 -10
  3. package/_cjs/src/components/common/TransactionModal/DepositAddressModalRenderer.js.map +1 -1
  4. package/_cjs/src/components/common/TransactionModal/steps/DepositAddressValidatingStep.js.map +1 -1
  5. package/_cjs/src/components/common/TransactionModal/steps/ErrorStep.js +2 -2
  6. package/_cjs/src/components/common/TransactionModal/steps/ErrorStep.js.map +1 -1
  7. package/_cjs/src/components/common/TransactionModal/steps/SwapSuccessStep.js +15 -16
  8. package/_cjs/src/components/common/TransactionModal/steps/SwapSuccessStep.js.map +1 -1
  9. package/_cjs/src/components/widgets/OnrampWidget/modals/OnrampModal.js +10 -13
  10. package/_cjs/src/components/widgets/OnrampWidget/modals/OnrampModal.js.map +1 -1
  11. package/_cjs/src/components/widgets/SwapWidget/index.js +4 -4
  12. package/_cjs/src/components/widgets/SwapWidget/index.js.map +1 -1
  13. package/_cjs/src/components/widgets/SwapWidgetRenderer.js +5 -6
  14. package/_cjs/src/components/widgets/SwapWidgetRenderer.js.map +1 -1
  15. package/_cjs/src/constants/maxGasBuffer.js +1 -2
  16. package/_cjs/src/constants/maxGasBuffer.js.map +1 -1
  17. package/_cjs/src/constants/walletCompatibility.js +5 -2
  18. package/_cjs/src/constants/walletCompatibility.js.map +1 -1
  19. package/_cjs/src/providers/RelayKitProvider.js +22 -1
  20. package/_cjs/src/providers/RelayKitProvider.js.map +1 -1
  21. package/_cjs/src/types/RelayTransaction.js.map +1 -1
  22. package/_cjs/src/utils/nativeMaxAmount.js +4 -4
  23. package/_cjs/src/utils/nativeMaxAmount.js.map +1 -1
  24. package/_cjs/src/utils/relayTransaction.js +14 -1
  25. package/_cjs/src/utils/relayTransaction.js.map +1 -1
  26. package/_cjs/src/version.js +1 -1
  27. package/_cjs/src/version.js.map +1 -1
  28. package/_cjs/tsconfig.build.tsbuildinfo +1 -1
  29. package/_esm/src/components/common/RefundReason.js.map +1 -1
  30. package/_esm/src/components/common/TransactionModal/DepositAddressModalRenderer.js +10 -10
  31. package/_esm/src/components/common/TransactionModal/DepositAddressModalRenderer.js.map +1 -1
  32. package/_esm/src/components/common/TransactionModal/steps/DepositAddressValidatingStep.js +1 -1
  33. package/_esm/src/components/common/TransactionModal/steps/DepositAddressValidatingStep.js.map +1 -1
  34. package/_esm/src/components/common/TransactionModal/steps/ErrorStep.js +2 -2
  35. package/_esm/src/components/common/TransactionModal/steps/ErrorStep.js.map +1 -1
  36. package/_esm/src/components/common/TransactionModal/steps/SwapSuccessStep.js +15 -16
  37. package/_esm/src/components/common/TransactionModal/steps/SwapSuccessStep.js.map +1 -1
  38. package/_esm/src/components/widgets/OnrampWidget/modals/OnrampModal.js +14 -14
  39. package/_esm/src/components/widgets/OnrampWidget/modals/OnrampModal.js.map +1 -1
  40. package/_esm/src/components/widgets/SwapWidget/index.js +4 -4
  41. package/_esm/src/components/widgets/SwapWidget/index.js.map +1 -1
  42. package/_esm/src/components/widgets/SwapWidgetRenderer.js +5 -6
  43. package/_esm/src/components/widgets/SwapWidgetRenderer.js.map +1 -1
  44. package/_esm/src/constants/maxGasBuffer.js +0 -1
  45. package/_esm/src/constants/maxGasBuffer.js.map +1 -1
  46. package/_esm/src/constants/walletCompatibility.js +5 -2
  47. package/_esm/src/constants/walletCompatibility.js.map +1 -1
  48. package/_esm/src/providers/RelayKitProvider.js +31 -2
  49. package/_esm/src/providers/RelayKitProvider.js.map +1 -1
  50. package/_esm/src/types/RelayTransaction.js.map +1 -1
  51. package/_esm/src/utils/nativeMaxAmount.js +4 -4
  52. package/_esm/src/utils/nativeMaxAmount.js.map +1 -1
  53. package/_esm/src/utils/relayTransaction.js +20 -0
  54. package/_esm/src/utils/relayTransaction.js.map +1 -1
  55. package/_esm/src/version.js +1 -1
  56. package/_esm/src/version.js.map +1 -1
  57. package/_esm/tsconfig.build.tsbuildinfo +1 -1
  58. package/_types/src/components/common/RefundReason.d.ts +1 -1
  59. package/_types/src/components/common/TransactionModal/DepositAddressModalRenderer.d.ts.map +1 -1
  60. package/_types/src/components/common/TransactionModal/steps/DepositAddressValidatingStep.d.ts +2 -2
  61. package/_types/src/components/common/TransactionModal/steps/DepositAddressValidatingStep.d.ts.map +1 -1
  62. package/_types/src/components/common/TransactionModal/steps/SwapSuccessStep.d.ts.map +1 -1
  63. package/_types/src/components/widgets/OnrampWidget/modals/OnrampModal.d.ts.map +1 -1
  64. package/_types/src/components/widgets/SwapWidget/index.d.ts +0 -2
  65. package/_types/src/components/widgets/SwapWidget/index.d.ts.map +1 -1
  66. package/_types/src/components/widgets/SwapWidgetRenderer.d.ts +0 -2
  67. package/_types/src/components/widgets/SwapWidgetRenderer.d.ts.map +1 -1
  68. package/_types/src/constants/maxGasBuffer.d.ts +0 -1
  69. package/_types/src/constants/maxGasBuffer.d.ts.map +1 -1
  70. package/_types/src/constants/walletCompatibility.d.ts.map +1 -1
  71. package/_types/src/providers/RelayKitProvider.d.ts +13 -5
  72. package/_types/src/providers/RelayKitProvider.d.ts.map +1 -1
  73. package/_types/src/types/RelayTransaction.d.ts +1 -1
  74. package/_types/src/utils/nativeMaxAmount.d.ts +2 -2
  75. package/_types/src/utils/nativeMaxAmount.d.ts.map +1 -1
  76. package/_types/src/utils/relayTransaction.d.ts +16 -0
  77. package/_types/src/utils/relayTransaction.d.ts.map +1 -1
  78. package/_types/src/utils/tokens.d.ts +1 -1
  79. package/_types/src/version.d.ts +1 -1
  80. package/_types/src/version.d.ts.map +1 -1
  81. package/_types/tsconfig.build.tsbuildinfo +1 -1
  82. package/package.json +3 -3
  83. package/readme.md +14 -0
@@ -1 +1 @@
1
- {"version":3,"file":"RefundReason.js","sourceRoot":"","sources":["../../../../src/components/common/RefundReason.tsx"],"names":[],"mappings":";;;;AACA,gFAA4C;AAS5C,MAAM,YAAY,GAAgC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE;IACnE,IAAI,UAAU,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;QACtC,QAAQ,UAAU,EAAE,CAAC;YACnB,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,OAAO,CACL,iLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,uCAAuC,CAAC,CAAC,CAAC;gBAC7C,OAAO,CACL,wKAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,gCAAgC,CAAC,CAAC,CAAC;gBACtC,OAAO,CACL,uLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,OAAO,CACL,uLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,OAAO,CACL,6LAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,sBAAsB,CAAC,CAAC,CAAC;gBAC5B,OAAO,CACL,6KAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,OAAO,CACL,4MAGK,GAAG,EACN,uBAAC,mBAAM,IACL,IAAI,EAAC,gDAAgD,EACrD,MAAM,EAAC,QAAQ,gCAGR,EAAC,GAAG,4BACU,GAAG,IACzB,CACJ,CAAA;YACH,CAAC;YACD,KAAK,kCAAkC,CAAC,CAAC,CAAC;gBACxC,OAAO,CACL,kLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,0BAA0B,CAAC,CAAC,CAAC;gBAChC,OAAO,CACL,8JAE2B,GAAG,EAC5B,uBAAC,mBAAM,IACL,IAAI,EAAC,gDAAgD,EACrD,MAAM,EAAC,QAAQ,gCAGR,EAAC,GAAG,6BACW,GAAG,IAC1B,CACJ,CAAA;YACH,CAAC;YACD,KAAK,oBAAoB,CAAC;YAC1B,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,OAAO,CACL,qLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,0BAA0B,CAAC;YAChC,KAAK,wBAAwB,CAAC;YAC9B,KAAK,iCAAiC,CAAC;YACvC,KAAK,0BAA0B,CAAC;YAChC,KAAK,SAAS,CAAC;YACf,OAAO,CAAC,CAAC,CAAC;gBACR,OAAO,CACL,uIAES,GAAG,EACV,uBAAC,mBAAM,IACL,IAAI,EAAC,gDAAgD,EACrD,MAAM,EAAC,QAAQ,gCAGR,EAAC,GAAG,wCACsB,GAAG,IACrC,CACJ,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AAED,kBAAe,YAAY,CAAA","sourcesContent":["import type { paths } from '@relayprotocol/relay-sdk'\nimport Anchor from '../primitives/Anchor.js'\n\ntype RefundReasonProps = {\n reasonCode: NonNullable<\n NonNullable<\n paths['/requests/v2']['get']['responses']['200']['content']['application/json']['requests']\n >[0]['data']\n >['failReason']\n}\nconst RefundReason: React.FC<RefundReasonProps> = ({ reasonCode }) => {\n if (reasonCode && reasonCode != 'N/A') {\n switch (reasonCode) {\n case 'TOO_LITTLE_RECEIVED': {\n return (\n <>\n Your transaction has been refunded because the received amount was\n too low. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'NEW_CALLDATA_INCLUDES_HIGHER_RENT_FEE': {\n return (\n <>\n Your transaction has been refunded because network fees increased.\n Try adjusting the slippage or amount.\n </>\n )\n }\n case 'NEGATIVE_NEW_AMOUNT_AFTER_FEES': {\n return (\n <>\n Your transaction has been refunded because the fees exceeded the\n expected amount. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'NO_QUOTES': {\n return (\n <>\n Your transaction has been refunded because no swap routes were found\n for your request. Try a different token or amount.\n </>\n )\n }\n case 'REVERSE_SWAP_FAILED': {\n return (\n <>\n Your transaction has been refunded because the reverse swap couldn’t\n be completed. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'GENERATE_SWAP_FAILED': {\n return (\n <>\n Your transaction has been refunded because something went wrong\n while setting up your swap. Please try again.\n </>\n )\n }\n case 'SLIPPAGE': {\n return (\n <>\n Your transaction has been refunded because the market price shifted\n more than the allowed slippage. Try adjusting your slippage settings\n or{' '}\n <Anchor\n href=\"https://docs.relay.link/what-is-relay#intercom\"\n target=\"_blank\"\n >\n contact support\n </Anchor>{' '}\n if the issue persists.{' '}\n </>\n )\n }\n case 'DEPOSITED_AMOUNT_TOO_LOW_TO_FILL': {\n return (\n <>\n Your transaction has been refunded because the deposited amount was\n too low. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'AMOUNT_TOO_LOW_TO_REFUND': {\n return (\n <>\n Your transaction amount is insufficient to cover the gas cost for an\n automatic refund. Please{' '}\n <Anchor\n href=\"https://docs.relay.link/what-is-relay#intercom\"\n target=\"_blank\"\n >\n contact support\n </Anchor>{' '}\n if you need assistance.{' '}\n </>\n )\n }\n case 'EXECUTION_REVERTED':\n case 'MISSING_REVERT_DATA': {\n return (\n <>\n  Your transaction has been refunded because there was an issue\n during execution. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'DEPOSIT_ADDRESS_MISMATCH':\n case 'DEPOSIT_CHAIN_MISMATCH': //@ts-ignore: legacy reason code (insufficient balance)\n case 'INSUFFICIENT_BALANCE_FOR_REFUND':\n case 'SOLVER_CAPACITY_EXCEEDED':\n case 'UNKNOWN':\n default: {\n return (\n <>\n It looks like an unknown issue occurred during the transaction.\n Please{' '}\n <Anchor\n href=\"https://docs.relay.link/what-is-relay#intercom\"\n target=\"_blank\"\n >\n contact support\n </Anchor>{' '}\n if you have any further questions.{' '}\n </>\n )\n }\n }\n }\n}\n\nexport default RefundReason\n"]}
1
+ {"version":3,"file":"RefundReason.js","sourceRoot":"","sources":["../../../../src/components/common/RefundReason.tsx"],"names":[],"mappings":";;;;AACA,gFAA4C;AAS5C,MAAM,YAAY,GAAgC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE;IACnE,IAAI,UAAU,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;QACtC,QAAQ,UAAU,EAAE,CAAC;YACnB,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,OAAO,CACL,iLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,uCAAuC,CAAC,CAAC,CAAC;gBAC7C,OAAO,CACL,wKAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,gCAAgC,CAAC,CAAC,CAAC;gBACtC,OAAO,CACL,uLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,OAAO,CACL,uLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,OAAO,CACL,6LAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,sBAAsB,CAAC,CAAC,CAAC;gBAC5B,OAAO,CACL,6KAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,OAAO,CACL,4MAGK,GAAG,EACN,uBAAC,mBAAM,IACL,IAAI,EAAC,gDAAgD,EACrD,MAAM,EAAC,QAAQ,gCAGR,EAAC,GAAG,4BACU,GAAG,IACzB,CACJ,CAAA;YACH,CAAC;YACD,KAAK,kCAAkC,CAAC,CAAC,CAAC;gBACxC,OAAO,CACL,kLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,0BAA0B,CAAC,CAAC,CAAC;gBAChC,OAAO,CACL,8JAE2B,GAAG,EAC5B,uBAAC,mBAAM,IACL,IAAI,EAAC,gDAAgD,EACrD,MAAM,EAAC,QAAQ,gCAGR,EAAC,GAAG,6BACW,GAAG,IAC1B,CACJ,CAAA;YACH,CAAC;YACD,KAAK,oBAAoB,CAAC;YAC1B,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,OAAO,CACL,qLAGG,CACJ,CAAA;YACH,CAAC;YACD,KAAK,0BAA0B,CAAC;YAChC,KAAK,wBAAwB,CAAC;YAC9B,KAAK,iCAAiC,CAAC;YACvC,KAAK,0BAA0B,CAAC;YAChC,KAAK,SAAS,CAAC;YACf,OAAO,CAAC,CAAC,CAAC;gBACR,OAAO,CACL,uIAES,GAAG,EACV,uBAAC,mBAAM,IACL,IAAI,EAAC,gDAAgD,EACrD,MAAM,EAAC,QAAQ,gCAGR,EAAC,GAAG,wCACsB,GAAG,IACrC,CACJ,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AAED,kBAAe,YAAY,CAAA","sourcesContent":["import type { paths } from '@relayprotocol/relay-sdk'\nimport Anchor from '../primitives/Anchor.js'\n\ntype RefundReasonProps = {\n reasonCode: NonNullable<\n NonNullable<\n paths['/requests/v3']['get']['responses']['200']['content']['application/json']['requests']\n >[0]['data']\n >['failReason']\n}\nconst RefundReason: React.FC<RefundReasonProps> = ({ reasonCode }) => {\n if (reasonCode && reasonCode != 'N/A') {\n switch (reasonCode) {\n case 'TOO_LITTLE_RECEIVED': {\n return (\n <>\n Your transaction has been refunded because the received amount was\n too low. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'NEW_CALLDATA_INCLUDES_HIGHER_RENT_FEE': {\n return (\n <>\n Your transaction has been refunded because network fees increased.\n Try adjusting the slippage or amount.\n </>\n )\n }\n case 'NEGATIVE_NEW_AMOUNT_AFTER_FEES': {\n return (\n <>\n Your transaction has been refunded because the fees exceeded the\n expected amount. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'NO_QUOTES': {\n return (\n <>\n Your transaction has been refunded because no swap routes were found\n for your request. Try a different token or amount.\n </>\n )\n }\n case 'REVERSE_SWAP_FAILED': {\n return (\n <>\n Your transaction has been refunded because the reverse swap couldn’t\n be completed. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'GENERATE_SWAP_FAILED': {\n return (\n <>\n Your transaction has been refunded because something went wrong\n while setting up your swap. Please try again.\n </>\n )\n }\n case 'SLIPPAGE': {\n return (\n <>\n Your transaction has been refunded because the market price shifted\n more than the allowed slippage. Try adjusting your slippage settings\n or{' '}\n <Anchor\n href=\"https://docs.relay.link/what-is-relay#intercom\"\n target=\"_blank\"\n >\n contact support\n </Anchor>{' '}\n if the issue persists.{' '}\n </>\n )\n }\n case 'DEPOSITED_AMOUNT_TOO_LOW_TO_FILL': {\n return (\n <>\n Your transaction has been refunded because the deposited amount was\n too low. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'AMOUNT_TOO_LOW_TO_REFUND': {\n return (\n <>\n Your transaction amount is insufficient to cover the gas cost for an\n automatic refund. Please{' '}\n <Anchor\n href=\"https://docs.relay.link/what-is-relay#intercom\"\n target=\"_blank\"\n >\n contact support\n </Anchor>{' '}\n if you need assistance.{' '}\n </>\n )\n }\n case 'EXECUTION_REVERTED':\n case 'MISSING_REVERT_DATA': {\n return (\n <>\n  Your transaction has been refunded because there was an issue\n during execution. Try adjusting the slippage or amount.\n </>\n )\n }\n case 'DEPOSIT_ADDRESS_MISMATCH':\n case 'DEPOSIT_CHAIN_MISMATCH': //@ts-ignore: legacy reason code (insufficient balance)\n case 'INSUFFICIENT_BALANCE_FOR_REFUND':\n case 'SOLVER_CAPACITY_EXCEEDED':\n case 'UNKNOWN':\n default: {\n return (\n <>\n It looks like an unknown issue occurred during the transaction.\n Please{' '}\n <Anchor\n href=\"https://docs.relay.link/what-is-relay#intercom\"\n target=\"_blank\"\n >\n contact support\n </Anchor>{' '}\n if you have any further questions.{' '}\n </>\n )\n }\n }\n }\n}\n\nexport default RefundReason\n"]}
@@ -129,13 +129,9 @@ const DepositAddressModalRenderer = ({ open, address, fromChain, fromToken, toTo
129
129
  const { data: executionStatus } = (0, relay_kit_hooks_1.useDepositAddressStatus)(depositAddress ? { depositAddress } : undefined, relayClient?.baseApiUrl, {
130
130
  enabled: depositAddress !== undefined && open,
131
131
  refetchInterval(query) {
132
- const observableStates = ['waiting', 'pending', 'depositing'];
133
- if (!query.state.data?.status ||
134
- (depositAddress &&
135
- observableStates.includes(query.state.data?.status))) {
136
- return 1000;
137
- }
138
- return 0;
132
+ const terminalStates = ['success', 'failure', 'refund'];
133
+ const status = query.state.data?.status;
134
+ return status && terminalStates.includes(status) ? 0 : 1000;
139
135
  }
140
136
  });
141
137
  (0, react_1.useEffect)(() => {
@@ -171,7 +167,9 @@ const DepositAddressModalRenderer = ({ open, address, fromChain, fromToken, toTo
171
167
  setProgressStep(TransactionProgressStep.Success);
172
168
  invalidateBalanceQueries();
173
169
  }
174
- else if (executionStatus?.status === 'pending' || executionStatus?.status === 'depositing') {
170
+ else if (executionStatus?.status === 'pending' ||
171
+ executionStatus?.status === 'depositing' ||
172
+ executionStatus?.status === 'submitted') {
175
173
  const timeEstimateMs = ((quote?.details?.timeEstimate ?? 0) +
176
174
  (fromChain && fromChain.id === bitcoin_js_1.bitcoin.id ? 600 : 0)) *
177
175
  1000;
@@ -209,8 +207,7 @@ const DepositAddressModalRenderer = ({ open, address, fromChain, fromToken, toTo
209
207
  progressStep === TransactionProgressStep.Error) &&
210
208
  allTxHashes[0]
211
209
  ? {
212
- user: address,
213
- hash: allTxHashes[0]?.txHash
210
+ term: allTxHashes[0]?.txHash
214
211
  }
215
212
  : undefined, relayClient?.baseApiUrl, {
216
213
  enabled: (progressStep === TransactionProgressStep.Success ||
@@ -1 +1 @@
1
- {"version":3,"file":"DepositAddressModalRenderer.js","sourceRoot":"","sources":["../../../../../src/components/common/TransactionModal/DepositAddressModalRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n type FC,\n useMemo,\n useState,\n useEffect,\n type ReactNode,\n type SetStateAction,\n type Dispatch,\n useContext\n} from 'react'\nimport { parseUnits, type Address } from 'viem'\nimport {\n type AdaptedWallet,\n type Execute,\n type RelayChain\n} from '@relayprotocol/relay-sdk'\nimport {\n calculateFillTime,\n extractDepositRequestId\n} from '../../../utils/relayTransaction.js'\nimport type { Token } from '../../../types/index.js'\nimport {\n useRequests,\n useDepositAddressStatus,\n queryQuote,\n type DepositAddressStatusResponse\n} from '@relayprotocol/relay-kit-hooks'\nimport { useRelayClient } from '../../../hooks/index.js'\nimport { EventNames } from '../../../constants/events.js'\nimport { useHapticEvent } from '../../../providers/RelayKitProvider.js'\nimport { ProviderOptionsContext } from '../../../providers/RelayKitProvider.js'\nimport { useAccount } from 'wagmi'\nimport {\n calculatePriceTimeEstimate,\n extractDepositAddress,\n extractQuoteId\n} from '../../../utils/quote.js'\nimport { getDeadAddress } from '@relayprotocol/relay-sdk'\nimport { bitcoin } from '../../../utils/bitcoin.js'\nimport { errorToJSON } from '../../../utils/errors.js'\nimport { sha256 } from '../../../utils/hashing.js'\nimport { get15MinuteInterval } from '../../../utils/time.js'\n\nexport enum TransactionProgressStep {\n WaitingForDeposit,\n Validating,\n Success,\n Error\n}\n\nexport type TxHashes = { txHash: string; chainId: number }[]\n\nexport type ChildrenProps = {\n progressStep: TransactionProgressStep\n setProgressStep: Dispatch<SetStateAction<TransactionProgressStep>>\n quote?: Execute | null\n isFetchingQuote: boolean\n quoteError: Error | null\n swapError: Error | null\n setSwapError: Dispatch<SetStateAction<Error | null>>\n allTxHashes: TxHashes\n transaction?: ReturnType<typeof useRequests>['data']['0']\n seconds: number\n fillTime: string\n requestId: string | null\n depositAddress?: string\n executionStatus?: DepositAddressStatusResponse\n isLoadingTransaction: boolean\n toChain?: RelayChain | null\n timeEstimate?: { time: number; formattedTime: string }\n}\n\ntype Props = {\n open: boolean\n address?: string\n fromToken?: Token\n fromChain?: RelayChain\n toToken?: Token\n debouncedOutputAmountValue: string\n debouncedInputAmountValue: string\n recipient?: string\n customToAddress?: Address\n wallet?: AdaptedWallet\n invalidateBalanceQueries: () => void\n children: (props: ChildrenProps) => ReactNode\n onSuccess?: (\n quote?: Execute | null,\n executionStatus?: DepositAddressStatusResponse\n ) => void\n onAnalyticEvent?: (eventName: string, data?: any) => void\n onSwapError?: (error: string, data?: Execute) => void\n}\n\nexport const DepositAddressModalRenderer: FC<Props> = ({\n open,\n address,\n fromChain,\n fromToken,\n toToken,\n debouncedInputAmountValue,\n debouncedOutputAmountValue,\n recipient,\n invalidateBalanceQueries,\n children,\n onSuccess,\n onAnalyticEvent,\n onSwapError\n}) => {\n const haptic = useHapticEvent()\n const [quoteData, setQuoteData] = useState<Execute | null>(null)\n const [fetchingQuote, setFetchingQuote] = useState(false)\n const [quoteError, setQuoteError] = useState<Error | null>(null)\n const [progressStep, setProgressStep] = useState(\n TransactionProgressStep.WaitingForDeposit\n )\n const [swapError, setSwapError] = useState<Error | null>(null)\n\n const relayClient = useRelayClient()\n const providerOptionsContext = useContext(ProviderOptionsContext)\n const { connector } = useAccount()\n const deadAddress = getDeadAddress(fromChain?.vmType, fromChain?.id)\n\n const quote = fetchingQuote ? undefined : quoteData\n\n const requestId = useMemo(\n () => extractDepositRequestId(quote?.steps as Execute['steps']),\n [quote]\n )\n\n const depositAddress = useMemo(\n () => extractDepositAddress(quote?.steps as Execute['steps']),\n [quote]\n )\n\n useEffect(() => {\n if (!open) {\n if (quote) {\n onAnalyticEvent?.(EventNames.DEPOSIT_ADDRESS_MODAL_CLOSED)\n }\n setSwapError(null)\n setQuoteData(null)\n setFetchingQuote(false)\n setQuoteError(null)\n } else {\n setProgressStep(TransactionProgressStep.WaitingForDeposit)\n onAnalyticEvent?.(EventNames.DEPOSIT_ADDRESS_MODAL_OPEN)\n const quoteParameters: Parameters<typeof queryQuote>['1'] =\n fromToken && toToken\n ? {\n user: deadAddress,\n originChainId: fromToken.chainId,\n destinationChainId: toToken.chainId,\n originCurrency: fromToken.address,\n destinationCurrency: toToken.address,\n recipient: recipient as string,\n tradeType: 'EXACT_INPUT',\n appFees: providerOptionsContext.appFees,\n amount: parseUnits(\n debouncedInputAmountValue,\n fromToken.decimals\n ).toString(),\n referrer: relayClient?.source ?? undefined,\n useDepositAddress: true\n }\n : undefined\n const interval = get15MinuteInterval()\n const quoteRequestId = sha256({ ...quoteParameters, interval })\n onAnalyticEvent?.(EventNames.QUOTE_REQUESTED, {\n parameters: quoteParameters,\n quote_request_id: quoteRequestId,\n chain_id_in: quoteParameters?.originChainId,\n chain_id_out: quoteParameters?.destinationChainId\n })\n queryQuote(relayClient?.baseApiUrl, quoteParameters, {\n headers: {\n 'relay-sdk-version': relayClient?.version ?? 'unknown',\n 'relay-kit-ui-version': relayClient?.uiVersion ?? 'unknown'\n }\n })\n .then((quote) => {\n setFetchingQuote(false)\n if (!open) {\n return\n }\n setQuoteData(quote as Execute)\n const interval = get15MinuteInterval()\n const quoteRequestId = sha256({ ...quoteParameters, interval })\n onAnalyticEvent?.(EventNames.QUOTE_RECEIVED, {\n parameters: quoteParameters,\n wallet_connector: connector?.name,\n quote_id: quote.steps ? extractQuoteId(quote.steps) : undefined,\n quote_request_id: quoteRequestId,\n amount_in: quote.details?.currencyIn?.amountFormatted,\n amount_in_raw: quote.details?.currencyIn?.amount,\n currency_in: quote.details?.currencyIn?.currency?.symbol,\n chain_id_in: quote.details?.currencyIn?.currency?.chainId,\n amount_out: quote.details?.currencyOut?.amountFormatted,\n amount_out_raw: quote.details?.currencyOut?.amount,\n currency_out: quote.details?.currencyOut?.currency?.symbol,\n chain_id_out: quote.details?.currencyOut?.currency?.chainId,\n slippage_tolerance_destination_percentage:\n quote.details?.slippageTolerance?.destination?.percent,\n slippage_tolerance_origin_percentage:\n quote.details?.slippageTolerance?.origin?.percent,\n steps: quote.steps\n })\n })\n .catch((e) => {\n setFetchingQuote(false)\n if (!open) {\n return\n }\n const errorMessage = errorToJSON(\n e?.response?.data?.message\n ? new Error(e?.response?.data?.message)\n : e\n )\n const interval = get15MinuteInterval()\n const quoteRequestId = sha256({ ...quoteParameters, interval })\n onAnalyticEvent?.(EventNames.QUOTE_ERROR, {\n wallet_connector: connector?.name,\n error_message: errorMessage,\n parameters: quoteParameters,\n quote_request_id: quoteRequestId\n })\n setQuoteError(e)\n })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const { data: executionStatus } = useDepositAddressStatus(\n depositAddress ? { depositAddress } : undefined,\n relayClient?.baseApiUrl,\n {\n enabled: depositAddress !== undefined && open,\n refetchInterval(query) {\n const observableStates = ['waiting', 'pending', 'depositing']\n\n if (\n !query.state.data?.status ||\n (depositAddress &&\n observableStates.includes(query.state.data?.status))\n ) {\n return 1000\n }\n return 0\n }\n }\n )\n\n useEffect(() => {\n if (\n executionStatus?.status === 'failure' ||\n executionStatus?.status === 'refund' ||\n quoteError\n ) {\n const swapError = new Error(\n executionStatus?.details ??\n 'Oops! Something went wrong while processing your transaction.'\n )\n if (progressStep !== TransactionProgressStep.Error) {\n onSwapError?.(swapError.message, quote as Execute)\n }\n setProgressStep(TransactionProgressStep.Error)\n haptic('error')\n onAnalyticEvent?.(EventNames.DEPOSIT_ADDRESS_SWAP_ERROR, {\n error_message: errorToJSON(executionStatus?.details ?? quoteError),\n wallet_connector: connector?.name,\n quote_id: requestId,\n amount_in: parseFloat(`${debouncedInputAmountValue}`),\n currency_in: fromToken?.symbol,\n chain_id_in: fromToken?.chainId,\n amount_out: parseFloat(`${debouncedOutputAmountValue}`),\n currency_out: toToken?.symbol,\n chain_id_out: toToken?.chainId,\n txHashes: executionStatus?.txHashes ?? []\n })\n setSwapError(swapError)\n invalidateBalanceQueries()\n } else if (executionStatus?.status === 'success') {\n if (progressStep !== TransactionProgressStep.Success) {\n onSuccess?.(quote, executionStatus)\n }\n setProgressStep(TransactionProgressStep.Success)\n invalidateBalanceQueries()\n } else if (executionStatus?.status === 'pending' || executionStatus?.status === 'depositing') {\n const timeEstimateMs =\n ((quote?.details?.timeEstimate ?? 0) +\n (fromChain && fromChain.id === bitcoin.id ? 600 : 0)) *\n 1000\n const isDelayedTx =\n timeEstimateMs >\n (relayClient?.maxPollingAttemptsBeforeTimeout ?? 30) *\n (relayClient?.pollingInterval ?? 5000)\n if (isDelayedTx) {\n setProgressStep(TransactionProgressStep.Success)\n } else {\n setProgressStep(TransactionProgressStep.Validating)\n }\n }\n }, [executionStatus?.status, quoteError])\n\n const allTxHashes = useMemo(() => {\n const isRefund = executionStatus?.status === 'refund'\n const _allTxHashes: TxHashes = []\n\n executionStatus?.txHashes?.forEach((txHash) => {\n _allTxHashes.push({\n txHash,\n chainId: isRefund\n ? (toToken?.chainId as number) // Fixed: refund txs are on destination chain\n : (toToken?.chainId as number)\n })\n })\n\n executionStatus?.inTxHashes?.forEach((txHash) => {\n _allTxHashes.push({\n txHash,\n chainId: fromToken?.chainId as number\n })\n })\n\n return _allTxHashes\n }, [executionStatus?.txHashes, executionStatus?.inTxHashes])\n\n const { data: transactions, isLoading: isLoadingTransaction } = useRequests(\n (progressStep === TransactionProgressStep.Success ||\n progressStep === TransactionProgressStep.Error) &&\n allTxHashes[0]\n ? {\n user: address,\n hash: allTxHashes[0]?.txHash\n }\n : undefined,\n relayClient?.baseApiUrl,\n {\n enabled:\n (progressStep === TransactionProgressStep.Success ||\n progressStep === TransactionProgressStep.Error) &&\n allTxHashes[0]\n ? true\n : false,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchInterval: false,\n retryOnMount: false\n }\n )\n\n const transaction = transactions[0]\n\n const { fillTime, seconds } = calculateFillTime(transaction)\n const timeEstimate = calculatePriceTimeEstimate(quote?.details)\n const toChain = toToken?.chainId\n ? relayClient?.chains.find((chain) => chain.id === toToken?.chainId)\n : null\n\n return (\n <>\n {children({\n progressStep,\n setProgressStep,\n quote,\n isFetchingQuote: fetchingQuote,\n quoteError,\n swapError,\n setSwapError,\n allTxHashes,\n transaction,\n fillTime,\n seconds,\n requestId,\n depositAddress,\n executionStatus,\n isLoadingTransaction,\n toChain,\n timeEstimate\n })}\n </>\n )\n}\n"]}
1
+ {"version":3,"file":"DepositAddressModalRenderer.js","sourceRoot":"","sources":["../../../../../src/components/common/TransactionModal/DepositAddressModalRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n type FC,\n useMemo,\n useState,\n useEffect,\n type ReactNode,\n type SetStateAction,\n type Dispatch,\n useContext\n} from 'react'\nimport { parseUnits, type Address } from 'viem'\nimport {\n type AdaptedWallet,\n type Execute,\n type RelayChain\n} from '@relayprotocol/relay-sdk'\nimport {\n calculateFillTime,\n extractDepositRequestId\n} from '../../../utils/relayTransaction.js'\nimport type { Token } from '../../../types/index.js'\nimport {\n useRequests,\n useDepositAddressStatus,\n queryQuote,\n type DepositAddressStatusResponse\n} from '@relayprotocol/relay-kit-hooks'\nimport { useRelayClient } from '../../../hooks/index.js'\nimport { EventNames } from '../../../constants/events.js'\nimport { useHapticEvent } from '../../../providers/RelayKitProvider.js'\nimport { ProviderOptionsContext } from '../../../providers/RelayKitProvider.js'\nimport { useAccount } from 'wagmi'\nimport {\n calculatePriceTimeEstimate,\n extractDepositAddress,\n extractQuoteId\n} from '../../../utils/quote.js'\nimport { getDeadAddress } from '@relayprotocol/relay-sdk'\nimport { bitcoin } from '../../../utils/bitcoin.js'\nimport { errorToJSON } from '../../../utils/errors.js'\nimport { sha256 } from '../../../utils/hashing.js'\nimport { get15MinuteInterval } from '../../../utils/time.js'\n\nexport enum TransactionProgressStep {\n WaitingForDeposit,\n Validating,\n Success,\n Error\n}\n\nexport type TxHashes = { txHash: string; chainId: number }[]\n\nexport type ChildrenProps = {\n progressStep: TransactionProgressStep\n setProgressStep: Dispatch<SetStateAction<TransactionProgressStep>>\n quote?: Execute | null\n isFetchingQuote: boolean\n quoteError: Error | null\n swapError: Error | null\n setSwapError: Dispatch<SetStateAction<Error | null>>\n allTxHashes: TxHashes\n transaction?: ReturnType<typeof useRequests>['data']['0']\n seconds: number\n fillTime: string\n requestId: string | null\n depositAddress?: string\n executionStatus?: DepositAddressStatusResponse\n isLoadingTransaction: boolean\n toChain?: RelayChain | null\n timeEstimate?: { time: number; formattedTime: string }\n}\n\ntype Props = {\n open: boolean\n address?: string\n fromToken?: Token\n fromChain?: RelayChain\n toToken?: Token\n debouncedOutputAmountValue: string\n debouncedInputAmountValue: string\n recipient?: string\n customToAddress?: Address\n wallet?: AdaptedWallet\n invalidateBalanceQueries: () => void\n children: (props: ChildrenProps) => ReactNode\n onSuccess?: (\n quote?: Execute | null,\n executionStatus?: DepositAddressStatusResponse\n ) => void\n onAnalyticEvent?: (eventName: string, data?: any) => void\n onSwapError?: (error: string, data?: Execute) => void\n}\n\nexport const DepositAddressModalRenderer: FC<Props> = ({\n open,\n address,\n fromChain,\n fromToken,\n toToken,\n debouncedInputAmountValue,\n debouncedOutputAmountValue,\n recipient,\n invalidateBalanceQueries,\n children,\n onSuccess,\n onAnalyticEvent,\n onSwapError\n}) => {\n const haptic = useHapticEvent()\n const [quoteData, setQuoteData] = useState<Execute | null>(null)\n const [fetchingQuote, setFetchingQuote] = useState(false)\n const [quoteError, setQuoteError] = useState<Error | null>(null)\n const [progressStep, setProgressStep] = useState(\n TransactionProgressStep.WaitingForDeposit\n )\n const [swapError, setSwapError] = useState<Error | null>(null)\n\n const relayClient = useRelayClient()\n const providerOptionsContext = useContext(ProviderOptionsContext)\n const { connector } = useAccount()\n const deadAddress = getDeadAddress(fromChain?.vmType, fromChain?.id)\n\n const quote = fetchingQuote ? undefined : quoteData\n\n const requestId = useMemo(\n () => extractDepositRequestId(quote?.steps as Execute['steps']),\n [quote]\n )\n\n const depositAddress = useMemo(\n () => extractDepositAddress(quote?.steps as Execute['steps']),\n [quote]\n )\n\n useEffect(() => {\n if (!open) {\n if (quote) {\n onAnalyticEvent?.(EventNames.DEPOSIT_ADDRESS_MODAL_CLOSED)\n }\n setSwapError(null)\n setQuoteData(null)\n setFetchingQuote(false)\n setQuoteError(null)\n } else {\n setProgressStep(TransactionProgressStep.WaitingForDeposit)\n onAnalyticEvent?.(EventNames.DEPOSIT_ADDRESS_MODAL_OPEN)\n const quoteParameters: Parameters<typeof queryQuote>['1'] =\n fromToken && toToken\n ? {\n user: deadAddress,\n originChainId: fromToken.chainId,\n destinationChainId: toToken.chainId,\n originCurrency: fromToken.address,\n destinationCurrency: toToken.address,\n recipient: recipient as string,\n tradeType: 'EXACT_INPUT',\n appFees: providerOptionsContext.appFees,\n amount: parseUnits(\n debouncedInputAmountValue,\n fromToken.decimals\n ).toString(),\n referrer: relayClient?.source ?? undefined,\n useDepositAddress: true\n }\n : undefined\n const interval = get15MinuteInterval()\n const quoteRequestId = sha256({ ...quoteParameters, interval })\n onAnalyticEvent?.(EventNames.QUOTE_REQUESTED, {\n parameters: quoteParameters,\n quote_request_id: quoteRequestId,\n chain_id_in: quoteParameters?.originChainId,\n chain_id_out: quoteParameters?.destinationChainId\n })\n queryQuote(relayClient?.baseApiUrl, quoteParameters, {\n headers: {\n 'relay-sdk-version': relayClient?.version ?? 'unknown',\n 'relay-kit-ui-version': relayClient?.uiVersion ?? 'unknown'\n }\n })\n .then((quote) => {\n setFetchingQuote(false)\n if (!open) {\n return\n }\n setQuoteData(quote as Execute)\n const interval = get15MinuteInterval()\n const quoteRequestId = sha256({ ...quoteParameters, interval })\n onAnalyticEvent?.(EventNames.QUOTE_RECEIVED, {\n parameters: quoteParameters,\n wallet_connector: connector?.name,\n quote_id: quote.steps ? extractQuoteId(quote.steps) : undefined,\n quote_request_id: quoteRequestId,\n amount_in: quote.details?.currencyIn?.amountFormatted,\n amount_in_raw: quote.details?.currencyIn?.amount,\n currency_in: quote.details?.currencyIn?.currency?.symbol,\n chain_id_in: quote.details?.currencyIn?.currency?.chainId,\n amount_out: quote.details?.currencyOut?.amountFormatted,\n amount_out_raw: quote.details?.currencyOut?.amount,\n currency_out: quote.details?.currencyOut?.currency?.symbol,\n chain_id_out: quote.details?.currencyOut?.currency?.chainId,\n slippage_tolerance_destination_percentage:\n quote.details?.slippageTolerance?.destination?.percent,\n slippage_tolerance_origin_percentage:\n quote.details?.slippageTolerance?.origin?.percent,\n steps: quote.steps\n })\n })\n .catch((e) => {\n setFetchingQuote(false)\n if (!open) {\n return\n }\n const errorMessage = errorToJSON(\n e?.response?.data?.message\n ? new Error(e?.response?.data?.message)\n : e\n )\n const interval = get15MinuteInterval()\n const quoteRequestId = sha256({ ...quoteParameters, interval })\n onAnalyticEvent?.(EventNames.QUOTE_ERROR, {\n wallet_connector: connector?.name,\n error_message: errorMessage,\n parameters: quoteParameters,\n quote_request_id: quoteRequestId\n })\n setQuoteError(e)\n })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const { data: executionStatus } = useDepositAddressStatus(\n depositAddress ? { depositAddress } : undefined,\n relayClient?.baseApiUrl,\n {\n enabled: depositAddress !== undefined && open,\n refetchInterval(query) {\n // Keep polling until the request reaches a terminal state. Non-terminal\n // states (waiting, pending, depositing, submitted) and an unknown\n // status all continue polling.\n const terminalStates = ['success', 'failure', 'refund']\n const status = query.state.data?.status\n return status && terminalStates.includes(status) ? 0 : 1000\n }\n }\n )\n\n useEffect(() => {\n if (\n executionStatus?.status === 'failure' ||\n executionStatus?.status === 'refund' ||\n quoteError\n ) {\n const swapError = new Error(\n executionStatus?.details ??\n 'Oops! Something went wrong while processing your transaction.'\n )\n if (progressStep !== TransactionProgressStep.Error) {\n onSwapError?.(swapError.message, quote as Execute)\n }\n setProgressStep(TransactionProgressStep.Error)\n haptic('error')\n onAnalyticEvent?.(EventNames.DEPOSIT_ADDRESS_SWAP_ERROR, {\n error_message: errorToJSON(executionStatus?.details ?? quoteError),\n wallet_connector: connector?.name,\n quote_id: requestId,\n amount_in: parseFloat(`${debouncedInputAmountValue}`),\n currency_in: fromToken?.symbol,\n chain_id_in: fromToken?.chainId,\n amount_out: parseFloat(`${debouncedOutputAmountValue}`),\n currency_out: toToken?.symbol,\n chain_id_out: toToken?.chainId,\n txHashes: executionStatus?.txHashes ?? []\n })\n setSwapError(swapError)\n invalidateBalanceQueries()\n } else if (executionStatus?.status === 'success') {\n if (progressStep !== TransactionProgressStep.Success) {\n onSuccess?.(quote, executionStatus)\n }\n setProgressStep(TransactionProgressStep.Success)\n invalidateBalanceQueries()\n } else if (\n executionStatus?.status === 'pending' ||\n executionStatus?.status === 'depositing' ||\n executionStatus?.status === 'submitted'\n ) {\n const timeEstimateMs =\n ((quote?.details?.timeEstimate ?? 0) +\n (fromChain && fromChain.id === bitcoin.id ? 600 : 0)) *\n 1000\n const isDelayedTx =\n timeEstimateMs >\n (relayClient?.maxPollingAttemptsBeforeTimeout ?? 30) *\n (relayClient?.pollingInterval ?? 5000)\n if (isDelayedTx) {\n setProgressStep(TransactionProgressStep.Success)\n } else {\n setProgressStep(TransactionProgressStep.Validating)\n }\n }\n }, [executionStatus?.status, quoteError])\n\n const allTxHashes = useMemo(() => {\n const isRefund = executionStatus?.status === 'refund'\n const _allTxHashes: TxHashes = []\n\n executionStatus?.txHashes?.forEach((txHash) => {\n _allTxHashes.push({\n txHash,\n chainId: isRefund\n ? (toToken?.chainId as number) // Fixed: refund txs are on destination chain\n : (toToken?.chainId as number)\n })\n })\n\n executionStatus?.inTxHashes?.forEach((txHash) => {\n _allTxHashes.push({\n txHash,\n chainId: fromToken?.chainId as number\n })\n })\n\n return _allTxHashes\n }, [executionStatus?.txHashes, executionStatus?.inTxHashes])\n\n const { data: transactions, isLoading: isLoadingTransaction } = useRequests(\n (progressStep === TransactionProgressStep.Success ||\n progressStep === TransactionProgressStep.Error) &&\n allTxHashes[0]\n ? {\n term: allTxHashes[0]?.txHash\n }\n : undefined,\n relayClient?.baseApiUrl,\n {\n enabled:\n (progressStep === TransactionProgressStep.Success ||\n progressStep === TransactionProgressStep.Error) &&\n allTxHashes[0]\n ? true\n : false,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchInterval: false,\n retryOnMount: false\n }\n )\n\n const transaction = transactions[0]\n\n const { fillTime, seconds } = calculateFillTime(transaction)\n const timeEstimate = calculatePriceTimeEstimate(quote?.details)\n const toChain = toToken?.chainId\n ? relayClient?.chains.find((chain) => chain.id === toToken?.chainId)\n : null\n\n return (\n <>\n {children({\n progressStep,\n setProgressStep,\n quote,\n isFetchingQuote: fetchingQuote,\n quoteError,\n swapError,\n setSwapError,\n allTxHashes,\n transaction,\n fillTime,\n seconds,\n requestId,\n depositAddress,\n executionStatus,\n isLoadingTransaction,\n toChain,\n timeEstimate\n })}\n </>\n )\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DepositAddressValidatingStep.js","sourceRoot":"","sources":["../../../../../../src/components/common/TransactionModal/steps/DepositAddressValidatingStep.tsx"],"names":[],"mappings":";;;;AACA,2DAAyE;AACzE,+DAAwD;AAExD,yDAA2D;AAOpD,MAAM,4BAA4B,GAErC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;IAC3B,MAAM,WAAW,GAAG,IAAA,yBAAc,GAAE,CAAA;IACpC,MAAM,kBAAkB,GACtB,WAAW,EAAE,UAAU,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC;QACnE,CAAC,CAAC,6BAA6B;QAC/B,CAAC,CAAC,oBAAoB,CAAA;IAC1B,MAAM,MAAM,GAAG,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAEhE,OAAO,CACL,6DACE,wBAAC,eAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,KAAK,EAAC,QAAQ,EAAC,OAAO,EAAC,SAAS,aACvD,uBAAC,kCAAc,IACb,SAAS,EAAC,sEAAsE,GAChF,EACF,uBAAC,eAAI,IAAC,KAAK,EAAC,WAAW,EAAC,SAAS,EAAC,yCAAyC,qEAEpE,EACP,wBAAC,eAAI,IACH,KAAK,EAAC,QAAQ,EACd,KAAK,EAAC,OAAO,EACb,SAAS,EAAC,8BAA8B,uFAE+B,GAAG,EAC1E,wBAAC,iBAAM,IACL,IAAI,EAAE,GAAG,kBAAkB,gBAAgB,MAAM,EAAE,EACnD,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,UAAU,aAEb,GAAG,wBAEG,SAEJ,IACF,EACP,wBAAC,iBAAM,IACL,QAAQ,EAAE,IAAI,EACd,SAAS,EAAC,yGAAyG,aAEnH,uBAAC,kCAAc,IACb,SAAS,EAAC,4EAA4E,GACtF,8BAEK,IACR,CACJ,CAAA;AACH,CAAC,CAAA;AA/CY,QAAA,4BAA4B,gCA+CxC","sourcesContent":["import type { FC } from 'react'\nimport { Anchor, Button, Flex, Text } from '../../../primitives/index.js'\nimport { LoadingSpinner } from '../../LoadingSpinner.js'\nimport { useExecutionStatus } from '@relayprotocol/relay-kit-hooks'\nimport { useRelayClient } from '../../../../hooks/index.js'\n\ntype DepositAddressValidatingStepProps = {\n txHashes: string[]\n status: NonNullable<ReturnType<typeof useExecutionStatus>['data']>['status']\n}\n\nexport const DepositAddressValidatingStep: FC<\n DepositAddressValidatingStepProps\n> = ({ txHashes, status }) => {\n const relayClient = useRelayClient()\n const transactionBaseUrl =\n relayClient?.baseApiUrl && relayClient.baseApiUrl.includes('testnet')\n ? 'https://testnets.relay.link'\n : 'https://relay.link'\n const txHash = txHashes && txHashes[0] ? txHashes[0] : undefined\n\n return (\n <>\n <Flex direction=\"column\" align=\"center\" justify=\"between\">\n <LoadingSpinner\n className=\"relay:h-10 relay:w-10 relay:fill-[var(--relay-colors-primary-color)]\"\n />\n <Text style=\"subtitle2\" className=\"relay:mt-4 relay:mb-2 relay:text-center\">\n Funds received. Your transaction is now in progress.\n </Text>\n <Text\n color=\"subtle\"\n style=\"body2\"\n className=\"relay:mt-3 relay:text-center\"\n >\n Feel free to leave at any time, you can track your progress within the{' '}\n <Anchor\n href={`${transactionBaseUrl}/transaction/${txHash}`}\n target=\"_blank\"\n rel=\"noreffer\"\n >\n {' '}\n transaction page\n </Anchor>\n .\n </Text>\n </Flex>\n <Button\n disabled={true}\n className=\"relay:text-[color:var(--relay-colors-button-disabled-color)_!important] relay:mt-2 relay:justify-center\"\n >\n <LoadingSpinner\n className=\"relay:h-4 relay:w-4 relay:fill-[var(--relay-colors-button-disabled-color)]\"\n />\n Validating Transaction\n </Button>\n </>\n )\n}\n"]}
1
+ {"version":3,"file":"DepositAddressValidatingStep.js","sourceRoot":"","sources":["../../../../../../src/components/common/TransactionModal/steps/DepositAddressValidatingStep.tsx"],"names":[],"mappings":";;;;AACA,2DAAyE;AACzE,+DAAwD;AAExD,yDAA2D;AASpD,MAAM,4BAA4B,GAErC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;IAC3B,MAAM,WAAW,GAAG,IAAA,yBAAc,GAAE,CAAA;IACpC,MAAM,kBAAkB,GACtB,WAAW,EAAE,UAAU,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC;QACnE,CAAC,CAAC,6BAA6B;QAC/B,CAAC,CAAC,oBAAoB,CAAA;IAC1B,MAAM,MAAM,GAAG,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAEhE,OAAO,CACL,6DACE,wBAAC,eAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,KAAK,EAAC,QAAQ,EAAC,OAAO,EAAC,SAAS,aACvD,uBAAC,kCAAc,IACb,SAAS,EAAC,sEAAsE,GAChF,EACF,uBAAC,eAAI,IAAC,KAAK,EAAC,WAAW,EAAC,SAAS,EAAC,yCAAyC,qEAEpE,EACP,wBAAC,eAAI,IACH,KAAK,EAAC,QAAQ,EACd,KAAK,EAAC,OAAO,EACb,SAAS,EAAC,8BAA8B,uFAE+B,GAAG,EAC1E,wBAAC,iBAAM,IACL,IAAI,EAAE,GAAG,kBAAkB,gBAAgB,MAAM,EAAE,EACnD,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,UAAU,aAEb,GAAG,wBAEG,SAEJ,IACF,EACP,wBAAC,iBAAM,IACL,QAAQ,EAAE,IAAI,EACd,SAAS,EAAC,yGAAyG,aAEnH,uBAAC,kCAAc,IACb,SAAS,EAAC,4EAA4E,GACtF,8BAEK,IACR,CACJ,CAAA;AACH,CAAC,CAAA;AA/CY,QAAA,4BAA4B,gCA+CxC","sourcesContent":["import type { FC } from 'react'\nimport { Anchor, Button, Flex, Text } from '../../../primitives/index.js'\nimport { LoadingSpinner } from '../../LoadingSpinner.js'\nimport { useDepositAddressStatus } from '@relayprotocol/relay-kit-hooks'\nimport { useRelayClient } from '../../../../hooks/index.js'\n\ntype DepositAddressValidatingStepProps = {\n txHashes: string[]\n status: NonNullable<\n ReturnType<typeof useDepositAddressStatus>['data']\n >['status']\n}\n\nexport const DepositAddressValidatingStep: FC<\n DepositAddressValidatingStepProps\n> = ({ txHashes, status }) => {\n const relayClient = useRelayClient()\n const transactionBaseUrl =\n relayClient?.baseApiUrl && relayClient.baseApiUrl.includes('testnet')\n ? 'https://testnets.relay.link'\n : 'https://relay.link'\n const txHash = txHashes && txHashes[0] ? txHashes[0] : undefined\n\n return (\n <>\n <Flex direction=\"column\" align=\"center\" justify=\"between\">\n <LoadingSpinner\n className=\"relay:h-10 relay:w-10 relay:fill-[var(--relay-colors-primary-color)]\"\n />\n <Text style=\"subtitle2\" className=\"relay:mt-4 relay:mb-2 relay:text-center\">\n Funds received. Your transaction is now in progress.\n </Text>\n <Text\n color=\"subtle\"\n style=\"body2\"\n className=\"relay:mt-3 relay:text-center\"\n >\n Feel free to leave at any time, you can track your progress within the{' '}\n <Anchor\n href={`${transactionBaseUrl}/transaction/${txHash}`}\n target=\"_blank\"\n rel=\"noreffer\"\n >\n {' '}\n transaction page\n </Anchor>\n .\n </Text>\n </Flex>\n <Button\n disabled={true}\n className=\"relay:text-[color:var(--relay-colors-button-disabled-color)_!important] relay:mt-2 relay:justify-center\"\n >\n <LoadingSpinner\n className=\"relay:h-4 relay:w-4 relay:fill-[var(--relay-colors-button-disabled-color)]\"\n />\n Validating Transaction\n </Button>\n </>\n )\n}\n"]}
@@ -37,7 +37,7 @@ const ErrorStep = ({ error, address, allTxHashes, transaction, fromChain, toChai
37
37
  transaction.data?.outTxs &&
38
38
  transaction.data.outTxs.length > 0) {
39
39
  fillTx = {
40
- txHash: transaction.data.outTxs[0].hash,
40
+ txHash: transaction.data.outTxs[0].txHash,
41
41
  chainId: transaction.data.outTxs[0].chainId
42
42
  };
43
43
  }
@@ -57,7 +57,7 @@ const ErrorStep = ({ error, address, allTxHashes, transaction, fromChain, toChai
57
57
  const isWithdrawable = Boolean(transaction?.protocol?.isWithdrawable);
58
58
  const depositOrigin = transaction?.protocol?.deposit?.origin;
59
59
  const inTx = transaction?.data?.inTxs?.[0];
60
- const withdrawTxHash = depositOrigin?.transactionId ?? inTx?.hash;
60
+ const withdrawTxHash = depositOrigin?.transactionId ?? inTx?.txHash;
61
61
  const withdrawChainId = depositOrigin?.chainId ?? inTx?.chainId;
62
62
  const showWithdrawLink = !isRefund && isWithdrawable && withdrawTxHash && withdrawChainId;
63
63
  const withdrawHref = showWithdrawLink
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorStep.js","sourceRoot":"","sources":["../../../../../../src/components/common/TransactionModal/steps/ErrorStep.tsx"],"names":[],"mappings":"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","sourcesContent":["import { type FC } from 'react'\nimport { Anchor, Box, Button, Flex, Text } from '../../../primitives/index.js'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faCircleExclamation } from '@fortawesome/free-solid-svg-icons/faCircleExclamation'\nimport { faArrowRight } from '@fortawesome/free-solid-svg-icons/faArrowRight'\nimport ErrorWell from '../../ErrorWell.js'\nimport { type Address } from 'viem'\nimport { type TxHashes } from '../TransactionModalRenderer.js'\nimport { useRelayClient } from '../../../../hooks/index.js'\nimport { faCircleXmark } from '@fortawesome/free-solid-svg-icons/faCircleXmark'\nimport { faRotateRight } from '@fortawesome/free-solid-svg-icons/faRotateRight'\nimport type { useRequests } from '@relayprotocol/relay-kit-hooks'\nimport type { RelayChain } from '@relayprotocol/relay-sdk'\nimport { getTxBlockExplorerUrl } from '../../../../utils/getTxBlockExplorerUrl.js'\nimport { JSONToError } from '../../../../utils/errors.js'\nimport { TransactionsByChain } from './TransactionsByChain.js'\nimport RefundReason from '../../../common/RefundReason.js'\nimport Pill from '../../../primitives/Pill.js'\nimport { ChainTokenIcon } from '../../../primitives/ChainTokenIcon.js'\nimport type { Token } from '../../../../types/index.js'\n\ntype ErrorStepProps = {\n error?: Error | null\n address?: Address | string\n allTxHashes: TxHashes\n transaction?: ReturnType<typeof useRequests>['data']['0']\n fromChain?: RelayChain | null\n toChain?: RelayChain | null\n fromToken?: Token\n toToken?: Token\n fromAmountFormatted?: string\n toAmountFormatted?: string\n onOpenChange: (open: boolean) => void\n}\n\nexport const ErrorStep: FC<ErrorStepProps> = ({\n error,\n address,\n allTxHashes,\n transaction,\n fromChain,\n toChain,\n fromToken,\n toToken,\n fromAmountFormatted,\n toAmountFormatted,\n onOpenChange\n}) => {\n const parsedError = JSONToError(error)\n const errorMessage = transaction?.data?.failReason ?? parsedError?.message\n const isRefund =\n errorMessage?.toLowerCase()?.includes('refunded') ||\n transaction?.status === 'refund'\n const hasTxHashes = allTxHashes && allTxHashes.length > 0\n const isSolverStatusTimeout = parsedError?.message?.includes(\n 'solver status check'\n )\n const relayClient = useRelayClient()\n const baseTransactionUrl = relayClient?.baseApiUrl.includes('testnets')\n ? 'https://testnets.relay.link'\n : 'https://relay.link'\n const depositTx = allTxHashes ? allTxHashes[0] : undefined\n const depositTxUrl = getTxBlockExplorerUrl(\n depositTx?.chainId,\n relayClient?.chains,\n depositTx?.txHash\n )\n let fillTx: { txHash: string; chainId: number } | undefined = undefined\n\n if (isRefund) {\n if (\n transaction &&\n transaction.status === 'refund' &&\n transaction.data?.outTxs &&\n transaction.data.outTxs.length > 0\n ) {\n fillTx = {\n txHash: transaction.data.outTxs[0].hash as Address,\n chainId: transaction.data.outTxs[0].chainId as number\n }\n }\n } else {\n fillTx =\n allTxHashes && allTxHashes.length > 1\n ? allTxHashes[allTxHashes.length - 1]\n : undefined\n }\n const fillTxUrl = getTxBlockExplorerUrl(\n fillTx?.chainId,\n relayClient?.chains,\n fillTx?.txHash\n )\n\n const mergedError =\n isRefund && errorMessage ? new Error(errorMessage) : parsedError\n const refundDetails = transaction?.data?.refundCurrencyData\n const refundChain = transaction?.data?.refundCurrencyData?.currency?.chainId\n ? relayClient?.chains.find(\n (chain) =>\n chain.id === transaction.data?.refundCurrencyData?.currency?.chainId\n )\n : null\n\n const isWithdrawable = Boolean(transaction?.protocol?.isWithdrawable)\n const depositOrigin = transaction?.protocol?.deposit?.origin\n const inTx = transaction?.data?.inTxs?.[0]\n const withdrawTxHash = depositOrigin?.transactionId ?? inTx?.hash\n const withdrawChainId = depositOrigin?.chainId ?? inTx?.chainId\n const showWithdrawLink =\n !isRefund && isWithdrawable && withdrawTxHash && withdrawChainId\n const withdrawHref = showWithdrawLink\n ? `${baseTransactionUrl}/withdraw?${new URLSearchParams({\n tab: 'claim',\n chain: String(withdrawChainId),\n txHash: String(withdrawTxHash)\n }).toString()}`\n : undefined\n\n return (\n <Flex\n direction=\"column\"\n align=\"center\"\n justify=\"between\"\n className=\"relay:w-full\"\n >\n <div className=\"relay:animate-icon-pop-in\">\n {isRefund ? (\n <Box className=\"relay:mr-2 relay:text-[color:var(--relay-colors-gray9)]\">\n <FontAwesomeIcon icon={faRotateRight} style={{ height: 40 }} />\n </Box>\n ) : null}\n\n {!isRefund && isSolverStatusTimeout ? (\n <Box className=\"relay:mr-2 relay:text-[color:var(--relay-colors-amber9)]\">\n <FontAwesomeIcon\n icon={faCircleExclamation}\n style={{ height: 40 }}\n />\n </Box>\n ) : null}\n\n {!isRefund && !isSolverStatusTimeout ? (\n <Box className=\"relay:mr-2 relay:text-[color:var(--relay-colors-red9)]\">\n <FontAwesomeIcon icon={faCircleXmark} style={{ height: 40 }} />\n </Box>\n ) : null}\n </div>\n\n {isRefund ? (\n transaction?.data?.failReason === 'UNKNOWN' ||\n !transaction?.data?.failReason ? (\n <Flex\n direction=\"column\"\n className=\"relay:my-4 relay:text-center relay:items-center\"\n >\n <Text style=\"subtitle1\" className=\"relay:mb-4\">\n It looks like an unknown issue occurred during the transaction.\n {fromToken && fromAmountFormatted && fromChain\n ? ` We've refunded ${fromAmountFormatted} ${fromToken.symbol} on ${fromChain.displayName}.`\n : ` We've refunded your tokens.`}\n </Text>\n\n {/* Transaction Pills */}\n <Flex className=\"relay:items-center relay:gap-2\">\n {fromToken && fromChain ? (\n <Pill\n color=\"gray\"\n className=\"relay:items-center relay:py-2 relay:px-3\"\n >\n <ChainTokenIcon\n chainId={fromChain.id}\n tokenlogoURI={fromToken.logoURI}\n tokenSymbol={fromToken.symbol}\n size=\"base\"\n />\n <Text style=\"subtitle1\" className=\"relay:ml-2\">\n {fromAmountFormatted} {fromToken.symbol}\n </Text>\n </Pill>\n ) : (\n <Text style=\"subtitle1\">?</Text>\n )}\n\n <Flex className=\"relay:items-center relay:justify-center relay:p-2\">\n <FontAwesomeIcon style={{ width: 14 }} icon={faArrowRight} />\n </Flex>\n\n {toToken && toChain ? (\n <Pill\n color=\"gray\"\n className=\"relay:items-center relay:py-2 relay:px-3\"\n >\n <ChainTokenIcon\n chainId={toChain.id}\n tokenlogoURI={toToken.logoURI}\n tokenSymbol={toToken.symbol}\n size=\"base\"\n />\n <Text style=\"subtitle1\" className=\"relay:ml-2\">\n {toAmountFormatted} {toToken.symbol}\n </Text>\n </Pill>\n ) : (\n <Text style=\"subtitle1\">?</Text>\n )}\n </Flex>\n </Flex>\n ) : (\n <Text style=\"subtitle2\" className=\"relay:my-4 relay:text-center\">\n <RefundReason reasonCode={transaction?.data?.failReason} />\n {refundDetails\n ? ` We've refunded ${refundDetails.amountFormatted} ${refundDetails.currency?.symbol} on ${refundChain?.displayName}.`\n : ` We apologize for the inconvenience, a refund has been sent to your wallet address.`}\n </Text>\n )\n ) : (\n <>\n <ErrorWell\n error={mergedError}\n hasTxHashes={hasTxHashes}\n fromChain={fromChain}\n />\n {showWithdrawLink ? (\n <Text style=\"subtitle2\" className=\"relay:my-4 relay:text-center\">\n This transaction couldn&apos;t be refunded automatically. Visit\n the{' '}\n <Anchor\n href={withdrawHref}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Withdraw page\n </Anchor>{' '}\n to manually withdraw.\n </Text>\n ) : null}\n </>\n )}\n {depositTx || fillTx ? (\n <>\n <Flex\n direction=\"column\"\n className=\"relay:p-3 relay:border relay:border-solid relay:border-[var(--relay-colors-subtle-border-color)] relay:gap-3 relay:w-full relay:rounded-[12px] relay:mb-6\"\n >\n <TransactionsByChain\n allTxHashes={allTxHashes}\n fromChain={fromChain}\n toChain={toChain}\n isSolverStatusTimeout={isSolverStatusTimeout}\n refundData={refundDetails}\n fillTx={fillTx}\n />\n </Flex>\n\n <Flex className=\"relay:gap-3 relay:w-full\">\n <Button\n color=\"secondary\"\n cta={true}\n onClick={() => {\n window.open(\n depositTx\n ? `${baseTransactionUrl}/transaction/${depositTx.txHash}`\n : `${baseTransactionUrl}/transactions?address=${address}`,\n '_blank'\n )\n }}\n className=\"relay:justify-center relay:whitespace-nowrap\"\n >\n View Details\n </Button>\n <Button\n cta={true}\n onClick={() => {\n onOpenChange(false)\n }}\n className=\"relay:justify-center relay:w-full\"\n >\n Done\n </Button>\n </Flex>\n </>\n ) : (\n <Button\n cta={true}\n onClick={() => {\n onOpenChange(false)\n }}\n className=\"relay:justify-center relay:w-full\"\n >\n Done\n </Button>\n )}\n </Flex>\n )\n}\n"]}
1
+ {"version":3,"file":"ErrorStep.js","sourceRoot":"","sources":["../../../../../../src/components/common/TransactionModal/steps/ErrorStep.tsx"],"names":[],"mappings":"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","sourcesContent":["import { type FC } from 'react'\nimport { Anchor, Box, Button, Flex, Text } from '../../../primitives/index.js'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faCircleExclamation } from '@fortawesome/free-solid-svg-icons/faCircleExclamation'\nimport { faArrowRight } from '@fortawesome/free-solid-svg-icons/faArrowRight'\nimport ErrorWell from '../../ErrorWell.js'\nimport { type Address } from 'viem'\nimport { type TxHashes } from '../TransactionModalRenderer.js'\nimport { useRelayClient } from '../../../../hooks/index.js'\nimport { faCircleXmark } from '@fortawesome/free-solid-svg-icons/faCircleXmark'\nimport { faRotateRight } from '@fortawesome/free-solid-svg-icons/faRotateRight'\nimport type { useRequests } from '@relayprotocol/relay-kit-hooks'\nimport type { RelayChain } from '@relayprotocol/relay-sdk'\nimport { getTxBlockExplorerUrl } from '../../../../utils/getTxBlockExplorerUrl.js'\nimport { JSONToError } from '../../../../utils/errors.js'\nimport { TransactionsByChain } from './TransactionsByChain.js'\nimport RefundReason from '../../../common/RefundReason.js'\nimport Pill from '../../../primitives/Pill.js'\nimport { ChainTokenIcon } from '../../../primitives/ChainTokenIcon.js'\nimport type { Token } from '../../../../types/index.js'\n\ntype ErrorStepProps = {\n error?: Error | null\n address?: Address | string\n allTxHashes: TxHashes\n transaction?: ReturnType<typeof useRequests>['data']['0']\n fromChain?: RelayChain | null\n toChain?: RelayChain | null\n fromToken?: Token\n toToken?: Token\n fromAmountFormatted?: string\n toAmountFormatted?: string\n onOpenChange: (open: boolean) => void\n}\n\nexport const ErrorStep: FC<ErrorStepProps> = ({\n error,\n address,\n allTxHashes,\n transaction,\n fromChain,\n toChain,\n fromToken,\n toToken,\n fromAmountFormatted,\n toAmountFormatted,\n onOpenChange\n}) => {\n const parsedError = JSONToError(error)\n const errorMessage = transaction?.data?.failReason ?? parsedError?.message\n const isRefund =\n errorMessage?.toLowerCase()?.includes('refunded') ||\n transaction?.status === 'refund'\n const hasTxHashes = allTxHashes && allTxHashes.length > 0\n const isSolverStatusTimeout = parsedError?.message?.includes(\n 'solver status check'\n )\n const relayClient = useRelayClient()\n const baseTransactionUrl = relayClient?.baseApiUrl.includes('testnets')\n ? 'https://testnets.relay.link'\n : 'https://relay.link'\n const depositTx = allTxHashes ? allTxHashes[0] : undefined\n const depositTxUrl = getTxBlockExplorerUrl(\n depositTx?.chainId,\n relayClient?.chains,\n depositTx?.txHash\n )\n let fillTx: { txHash: string; chainId: number } | undefined = undefined\n\n if (isRefund) {\n if (\n transaction &&\n transaction.status === 'refund' &&\n transaction.data?.outTxs &&\n transaction.data.outTxs.length > 0\n ) {\n fillTx = {\n txHash: transaction.data.outTxs[0].txHash as Address,\n chainId: transaction.data.outTxs[0].chainId as number\n }\n }\n } else {\n fillTx =\n allTxHashes && allTxHashes.length > 1\n ? allTxHashes[allTxHashes.length - 1]\n : undefined\n }\n const fillTxUrl = getTxBlockExplorerUrl(\n fillTx?.chainId,\n relayClient?.chains,\n fillTx?.txHash\n )\n\n const mergedError =\n isRefund && errorMessage ? new Error(errorMessage) : parsedError\n const refundDetails = transaction?.data?.refundCurrencyData\n const refundChain = transaction?.data?.refundCurrencyData?.currency?.chainId\n ? relayClient?.chains.find(\n (chain) =>\n chain.id === transaction.data?.refundCurrencyData?.currency?.chainId\n )\n : null\n\n const isWithdrawable = Boolean(transaction?.protocol?.isWithdrawable)\n const depositOrigin = transaction?.protocol?.deposit?.origin\n const inTx = transaction?.data?.inTxs?.[0]\n const withdrawTxHash = depositOrigin?.transactionId ?? inTx?.txHash\n const withdrawChainId = depositOrigin?.chainId ?? inTx?.chainId\n const showWithdrawLink =\n !isRefund && isWithdrawable && withdrawTxHash && withdrawChainId\n const withdrawHref = showWithdrawLink\n ? `${baseTransactionUrl}/withdraw?${new URLSearchParams({\n tab: 'claim',\n chain: String(withdrawChainId),\n txHash: String(withdrawTxHash)\n }).toString()}`\n : undefined\n\n return (\n <Flex\n direction=\"column\"\n align=\"center\"\n justify=\"between\"\n className=\"relay:w-full\"\n >\n <div className=\"relay:animate-icon-pop-in\">\n {isRefund ? (\n <Box className=\"relay:mr-2 relay:text-[color:var(--relay-colors-gray9)]\">\n <FontAwesomeIcon icon={faRotateRight} style={{ height: 40 }} />\n </Box>\n ) : null}\n\n {!isRefund && isSolverStatusTimeout ? (\n <Box className=\"relay:mr-2 relay:text-[color:var(--relay-colors-amber9)]\">\n <FontAwesomeIcon\n icon={faCircleExclamation}\n style={{ height: 40 }}\n />\n </Box>\n ) : null}\n\n {!isRefund && !isSolverStatusTimeout ? (\n <Box className=\"relay:mr-2 relay:text-[color:var(--relay-colors-red9)]\">\n <FontAwesomeIcon icon={faCircleXmark} style={{ height: 40 }} />\n </Box>\n ) : null}\n </div>\n\n {isRefund ? (\n transaction?.data?.failReason === 'UNKNOWN' ||\n !transaction?.data?.failReason ? (\n <Flex\n direction=\"column\"\n className=\"relay:my-4 relay:text-center relay:items-center\"\n >\n <Text style=\"subtitle1\" className=\"relay:mb-4\">\n It looks like an unknown issue occurred during the transaction.\n {fromToken && fromAmountFormatted && fromChain\n ? ` We've refunded ${fromAmountFormatted} ${fromToken.symbol} on ${fromChain.displayName}.`\n : ` We've refunded your tokens.`}\n </Text>\n\n {/* Transaction Pills */}\n <Flex className=\"relay:items-center relay:gap-2\">\n {fromToken && fromChain ? (\n <Pill\n color=\"gray\"\n className=\"relay:items-center relay:py-2 relay:px-3\"\n >\n <ChainTokenIcon\n chainId={fromChain.id}\n tokenlogoURI={fromToken.logoURI}\n tokenSymbol={fromToken.symbol}\n size=\"base\"\n />\n <Text style=\"subtitle1\" className=\"relay:ml-2\">\n {fromAmountFormatted} {fromToken.symbol}\n </Text>\n </Pill>\n ) : (\n <Text style=\"subtitle1\">?</Text>\n )}\n\n <Flex className=\"relay:items-center relay:justify-center relay:p-2\">\n <FontAwesomeIcon style={{ width: 14 }} icon={faArrowRight} />\n </Flex>\n\n {toToken && toChain ? (\n <Pill\n color=\"gray\"\n className=\"relay:items-center relay:py-2 relay:px-3\"\n >\n <ChainTokenIcon\n chainId={toChain.id}\n tokenlogoURI={toToken.logoURI}\n tokenSymbol={toToken.symbol}\n size=\"base\"\n />\n <Text style=\"subtitle1\" className=\"relay:ml-2\">\n {toAmountFormatted} {toToken.symbol}\n </Text>\n </Pill>\n ) : (\n <Text style=\"subtitle1\">?</Text>\n )}\n </Flex>\n </Flex>\n ) : (\n <Text style=\"subtitle2\" className=\"relay:my-4 relay:text-center\">\n <RefundReason reasonCode={transaction?.data?.failReason} />\n {refundDetails\n ? ` We've refunded ${refundDetails.amountFormatted} ${refundDetails.currency?.symbol} on ${refundChain?.displayName}.`\n : ` We apologize for the inconvenience, a refund has been sent to your wallet address.`}\n </Text>\n )\n ) : (\n <>\n <ErrorWell\n error={mergedError}\n hasTxHashes={hasTxHashes}\n fromChain={fromChain}\n />\n {showWithdrawLink ? (\n <Text style=\"subtitle2\" className=\"relay:my-4 relay:text-center\">\n This transaction couldn&apos;t be refunded automatically. Visit\n the{' '}\n <Anchor\n href={withdrawHref}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Withdraw page\n </Anchor>{' '}\n to manually withdraw.\n </Text>\n ) : null}\n </>\n )}\n {depositTx || fillTx ? (\n <>\n <Flex\n direction=\"column\"\n className=\"relay:p-3 relay:border relay:border-solid relay:border-[var(--relay-colors-subtle-border-color)] relay:gap-3 relay:w-full relay:rounded-[12px] relay:mb-6\"\n >\n <TransactionsByChain\n allTxHashes={allTxHashes}\n fromChain={fromChain}\n toChain={toChain}\n isSolverStatusTimeout={isSolverStatusTimeout}\n refundData={refundDetails}\n fillTx={fillTx}\n />\n </Flex>\n\n <Flex className=\"relay:gap-3 relay:w-full\">\n <Button\n color=\"secondary\"\n cta={true}\n onClick={() => {\n window.open(\n depositTx\n ? `${baseTransactionUrl}/transaction/${depositTx.txHash}`\n : `${baseTransactionUrl}/transactions?address=${address}`,\n '_blank'\n )\n }}\n className=\"relay:justify-center relay:whitespace-nowrap\"\n >\n View Details\n </Button>\n <Button\n cta={true}\n onClick={() => {\n onOpenChange(false)\n }}\n className=\"relay:justify-center relay:w-full\"\n >\n Done\n </Button>\n </Flex>\n </>\n ) : (\n <Button\n cta={true}\n onClick={() => {\n onOpenChange(false)\n }}\n className=\"relay:justify-center relay:w-full\"\n >\n Done\n </Button>\n )}\n </Flex>\n )\n}\n"]}
@@ -17,6 +17,7 @@ const index_js_3 = require("../../../../icons/index.js");
17
17
  const RelayKitProvider_js_1 = require("../../../../providers/RelayKitProvider.js");
18
18
  const getTxBlockExplorerUrl_js_1 = require("../../../../utils/getTxBlockExplorerUrl.js");
19
19
  const truncate_js_1 = require("../../../../utils/truncate.js");
20
+ const relayTransaction_js_1 = require("../../../../utils/relayTransaction.js");
20
21
  const SwapSuccessStep = ({ fromToken, toToken, fromAmountFormatted, toAmountFormatted, allTxHashes, transaction, fillTime, seconds, timeEstimate, details, isLoadingTransaction, onOpenChange, requestId, isGasSponsored, currentCheckStatus }) => {
21
22
  const relayClient = (0, index_js_2.useRelayClient)();
22
23
  const haptic = (0, RelayKitProvider_js_1.useHapticEvent)();
@@ -24,18 +25,17 @@ const SwapSuccessStep = ({ fromToken, toToken, fromAmountFormatted, toAmountForm
24
25
  const isUnwrap = details?.operation === 'unwrap';
25
26
  const providerOptionsContext = (0, react_1.useContext)(RelayKitProvider_js_1.ProviderOptionsContext);
26
27
  const chains = relayClient?.chains;
27
- const _fromAmountFormatted = transaction?.data?.metadata?.currencyIn?.amount
28
- ? (0, numbers_js_1.formatSignificantDigits)(transaction?.data?.metadata?.currencyIn?.amount, transaction?.data?.metadata?.currencyIn?.currency?.decimals ?? 18)
28
+ const { currencyIn: requestCurrencyIn, currencyOut: requestCurrencyOut, currencyGasTopup: requestCurrencyGasTopup } = (0, relayTransaction_js_1.getRequestCurrencies)(transaction);
29
+ const _fromAmountFormatted = requestCurrencyIn?.amount
30
+ ? (0, numbers_js_1.formatSignificantDigits)(requestCurrencyIn.amount, requestCurrencyIn.currency?.decimals ?? 18)
29
31
  : fromAmountFormatted;
30
- const _fromToken = transaction?.data?.metadata?.currencyIn?.currency ?? fromToken;
31
- const fromTokenLogoUri = transaction?.data?.metadata?.currencyIn?.currency?.metadata?.logoURI ??
32
- fromToken?.logoURI;
33
- const _toAmountFormatted = transaction?.data?.metadata?.currencyOut?.amount
34
- ? (0, numbers_js_1.formatSignificantDigits)(transaction?.data?.metadata?.currencyOut?.amount, transaction?.data?.metadata?.currencyOut?.currency?.decimals ?? 18)
32
+ const _fromToken = requestCurrencyIn?.currency ?? fromToken;
33
+ const fromTokenLogoUri = requestCurrencyIn?.currency?.metadata?.logoURI ?? fromToken?.logoURI;
34
+ const _toAmountFormatted = requestCurrencyOut?.amount
35
+ ? (0, numbers_js_1.formatSignificantDigits)(requestCurrencyOut.amount, requestCurrencyOut.currency?.decimals ?? 18)
35
36
  : toAmountFormatted;
36
- const _toToken = transaction?.data?.metadata?.currencyOut?.currency ?? toToken;
37
- const toTokenLogoUri = transaction?.data?.metadata?.currencyOut?.currency?.metadata?.logoURI ??
38
- toToken?.logoURI;
37
+ const _toToken = requestCurrencyOut?.currency ?? toToken;
38
+ const toTokenLogoUri = requestCurrencyOut?.currency?.metadata?.logoURI ?? toToken?.logoURI;
39
39
  const baseTransactionUrl = relayClient?.baseApiUrl.includes('testnets')
40
40
  ? 'https://testnets.relay.link'
41
41
  : 'https://relay.link';
@@ -59,14 +59,13 @@ const SwapSuccessStep = ({ fromToken, toToken, fromAmountFormatted, toAmountForm
59
59
  const estimatedMinutes = isBitcoinOrigin || isBitcoinDestination
60
60
  ? 10
61
61
  : Math.round(timeEstimateMs / 1000 / 60);
62
- const gasTopUpAmountCurrency = transaction?.data?.metadata?.currencyGasTopup?.currency;
63
- const formattedGasTopUpAmount = transaction?.data?.metadata?.currencyGasTopup
64
- ?.amount
65
- ? (0, numbers_js_1.formatSignificantDigits)(BigInt(transaction?.data?.metadata?.currencyGasTopup?.amount), gasTopUpAmountCurrency?.decimals ?? 18)
62
+ const gasTopUpAmountCurrency = requestCurrencyGasTopup?.currency;
63
+ const formattedGasTopUpAmount = requestCurrencyGasTopup?.amount
64
+ ? (0, numbers_js_1.formatSignificantDigits)(BigInt(requestCurrencyGasTopup.amount), gasTopUpAmountCurrency?.decimals ?? 18)
66
65
  : undefined;
67
66
  const getTxHashForChain = (chainId, skipRefundCheck = false) => {
68
67
  if (isRefund && !skipRefundCheck) {
69
- const refundTxHash = transaction?.data?.outTxs?.[0]?.hash;
68
+ const refundTxHash = transaction?.data?.outTxs?.[0]?.txHash;
70
69
  const refundChainId = transaction?.data?.outTxs?.[0]?.chainId;
71
70
  if (refundChainId === chainId && refundTxHash) {
72
71
  return refundTxHash;
@@ -85,7 +84,7 @@ const SwapSuccessStep = ({ fromToken, toToken, fromAmountFormatted, toAmountForm
85
84
  ? `Bitcoin confirmation takes ${estimatedMinutes} minutes. Track progress on the transaction page.`
86
85
  : `Processing bridge, this will take ~${estimatedMinutes} ${estimatedMinutes === 1 ? 'min' : 'mins'}.` }), (0, jsx_runtime_1.jsxs)(index_js_1.Flex, { align: "center", className: "relay:gap-2 relay:mb-[24px]", children: [fromChain ? ((0, jsx_runtime_1.jsxs)(index_js_1.Pill, { color: "gray", className: "relay:items-center relay:py-2 relay:px-3", children: [(0, jsx_runtime_1.jsx)(index_js_1.ChainTokenIcon, { chainId: fromChain.id, tokenlogoURI: fromTokenLogoUri, tokenSymbol: _fromToken?.symbol, size: "sm", chainRadius: 2.5 }), (0, jsx_runtime_1.jsxs)(index_js_1.Text, { style: "subtitle1", className: "relay:ml-2", children: [_fromAmountFormatted, " ", _fromToken?.symbol] })] })) : ((0, jsx_runtime_1.jsx)(index_js_1.Text, { style: "subtitle1", children: "?" })), (0, jsx_runtime_1.jsx)(index_js_1.Flex, { className: "relay:items-center relay:justify-center relay:p-2", children: (0, jsx_runtime_1.jsx)(react_fontawesome_1.FontAwesomeIcon, { style: { width: 14 }, icon: faArrowRight_1.faArrowRight }) }), toChain ? ((0, jsx_runtime_1.jsxs)(index_js_1.Pill, { color: "gray", className: "relay:items-center relay:py-2 relay:px-3", children: [(0, jsx_runtime_1.jsx)(index_js_1.ChainTokenIcon, { chainId: toChain.id, tokenlogoURI: toTokenLogoUri, tokenSymbol: _toToken?.symbol, size: "sm", chainRadius: 2.5 }), (0, jsx_runtime_1.jsxs)(index_js_1.Text, { style: "subtitle1", className: "relay:ml-2", children: [_toAmountFormatted, " ", _toToken?.symbol] })] })) : ((0, jsx_runtime_1.jsx)(index_js_1.Text, { style: "subtitle1", children: "?" }))] }), (0, jsx_runtime_1.jsx)(index_js_1.Text, { style: "body2", className: "relay:rounded-[12px] relay:text-center relay:p-4 relay:bg-[var(--relay-colors-gray2)]", children: "You can close this modal while it finalizes on the blockchain. The transaction will continue in the background." }), (() => {
87
86
  if (isRefund) {
88
- const refundTxHash = transaction?.data?.outTxs?.[0]?.hash;
87
+ const refundTxHash = transaction?.data?.outTxs?.[0]?.txHash;
89
88
  const refundChainId = transaction?.data?.outTxs?.[0]?.chainId;
90
89
  if (refundTxHash && refundChainId) {
91
90
  const txUrl = getTxUrl(refundChainId, refundTxHash);
@@ -1 +1 @@
1
- {"version":3,"file":"SwapSuccessStep.js","sourceRoot":"","sources":["../../../../../../src/components/common/TransactionModal/steps/SwapSuccessStep.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useContext, type FC } from 'react'\nimport {\n Box,\n Button,\n Flex,\n Pill,\n Text,\n ChainTokenIcon,\n Skeleton,\n Anchor\n} from '../../../primitives/index.js'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { type TxHashes } from '../TransactionModalRenderer.js'\nimport { type Token } from '../../../../types/index.js'\nimport type { useRequests } from '@relayprotocol/relay-kit-hooks'\nimport { useRelayClient } from '../../../../hooks/index.js'\nimport { faClockFour } from '@fortawesome/free-solid-svg-icons/faClockFour'\nimport {\n ASSETS_RELAY_API,\n type Execute,\n type ExecuteStepItem\n} from '@relayprotocol/relay-sdk'\nimport { bitcoin } from '../../../../utils/bitcoin.js'\nimport { formatSignificantDigits } from '../../../../utils/numbers.js'\nimport { TransactionsByChain } from './TransactionsByChain.js'\nimport { faArrowRight } from '@fortawesome/free-solid-svg-icons/faArrowRight'\nimport { faCheck } from '@fortawesome/free-solid-svg-icons/faCheck'\nimport { RelayIcon, XIcon } from '../../../../icons/index.js'\nimport {\n ProviderOptionsContext,\n useHapticEvent\n} from '../../../../providers/RelayKitProvider.js'\nimport { getTxBlockExplorerUrl } from '../../../../utils/getTxBlockExplorerUrl.js'\nimport { truncateAddress } from '../../../../utils/truncate.js'\n\ntype SwapSuccessStepProps = {\n fromToken?: Token\n toToken?: Token\n fromAmountFormatted?: string\n toAmountFormatted?: string\n allTxHashes: TxHashes\n transaction?: ReturnType<typeof useRequests>['data']['0']\n seconds: number\n fillTime: string\n timeEstimate?: string\n details?: Execute['details'] | null\n isLoadingTransaction?: boolean\n onOpenChange: (open: boolean) => void\n requestId: string | null\n isGasSponsored?: boolean\n currentCheckStatus?: ExecuteStepItem['checkStatus']\n}\n\nexport const SwapSuccessStep: FC<SwapSuccessStepProps> = ({\n fromToken,\n toToken,\n fromAmountFormatted,\n toAmountFormatted,\n allTxHashes,\n transaction,\n fillTime,\n seconds,\n timeEstimate,\n details,\n isLoadingTransaction,\n onOpenChange,\n requestId,\n isGasSponsored,\n currentCheckStatus\n}) => {\n const relayClient = useRelayClient()\n const haptic = useHapticEvent()\n const isWrap = details?.operation === 'wrap'\n const isUnwrap = details?.operation === 'unwrap'\n const providerOptionsContext = useContext(ProviderOptionsContext)\n\n // Get chains data for explorer URL generation\n const chains = relayClient?.chains\n\n const _fromAmountFormatted = transaction?.data?.metadata?.currencyIn?.amount\n ? formatSignificantDigits(\n transaction?.data?.metadata?.currencyIn?.amount,\n transaction?.data?.metadata?.currencyIn?.currency?.decimals ?? 18\n )\n : fromAmountFormatted\n const _fromToken =\n transaction?.data?.metadata?.currencyIn?.currency ?? fromToken\n const fromTokenLogoUri =\n transaction?.data?.metadata?.currencyIn?.currency?.metadata?.logoURI ??\n fromToken?.logoURI\n const _toAmountFormatted = transaction?.data?.metadata?.currencyOut?.amount\n ? formatSignificantDigits(\n transaction?.data?.metadata?.currencyOut?.amount,\n transaction?.data?.metadata?.currencyOut?.currency?.decimals ?? 18\n )\n : toAmountFormatted\n const _toToken = transaction?.data?.metadata?.currencyOut?.currency ?? toToken\n const toTokenLogoUri =\n transaction?.data?.metadata?.currencyOut?.currency?.metadata?.logoURI ??\n toToken?.logoURI\n\n const baseTransactionUrl = relayClient?.baseApiUrl.includes('testnets')\n ? 'https://testnets.relay.link'\n : 'https://relay.link'\n const fromChain = _fromToken\n ? relayClient?.chains.find((chain) => chain.id === _fromToken?.chainId)\n : null\n const toChain = _toToken\n ? relayClient?.chains.find((chain) => chain.id === _toToken?.chainId)\n : null\n\n const isSameChainSwap = fromChain?.id === toChain?.id && !isWrap && !isUnwrap\n const delayedTxUrl = requestId\n ? `${baseTransactionUrl}/transaction/${requestId}`\n : null\n const timeEstimateMs = (details?.timeEstimate ?? 0) * 1000\n\n const isBitcoinOrigin = fromChain?.id === bitcoin.id\n const isBitcoinDestination = toChain?.id === bitcoin.id\n\n const isRefund =\n transaction?.status === 'refund' || transaction?.data?.refundCurrencyData\n\n // Show delayed screen when:\n // 1. Bitcoin as origin: Immediately (no status check needed, tx takes 10+ mins)\n // 2. Bitcoin as destination: When status reaches 'submitted'\n\n const isDelayedTx =\n isBitcoinOrigin ||\n (isBitcoinDestination &&\n (currentCheckStatus === 'submitted' || currentCheckStatus === 'success'))\n\n // Bitcoin transactions typically take 10+ minutes for confirmation\n const estimatedMinutes =\n isBitcoinOrigin || isBitcoinDestination\n ? 10\n : Math.round(timeEstimateMs / 1000 / 60)\n\n const gasTopUpAmountCurrency =\n transaction?.data?.metadata?.currencyGasTopup?.currency\n const formattedGasTopUpAmount = transaction?.data?.metadata?.currencyGasTopup\n ?.amount\n ? formatSignificantDigits(\n BigInt(transaction?.data?.metadata?.currencyGasTopup?.amount),\n gasTopUpAmountCurrency?.decimals ?? 18\n )\n : undefined\n\n // Helper function to get transaction hash for a specific chain\n const getTxHashForChain = (chainId: number, skipRefundCheck = false) => {\n if (isRefund && !skipRefundCheck) {\n const refundTxHash = transaction?.data?.outTxs?.[0]?.hash\n const refundChainId = transaction?.data?.outTxs?.[0]?.chainId\n if (refundChainId === chainId && refundTxHash) {\n return refundTxHash\n }\n if (transaction?.data?.refundCurrencyData && !refundTxHash) {\n return undefined\n }\n }\n return allTxHashes.find((tx) => tx.chainId === chainId)?.txHash\n }\n\n // Helper function to get transaction URL for a specific chain and hash\n const getTxUrl = (chainId: number, txHash: string) => {\n return getTxBlockExplorerUrl(chainId, chains, txHash)\n }\n\n const shareIconFill =\n providerOptionsContext.themeScheme === 'dark' ? '#fff' : '#000'\n\n return isDelayedTx ? (\n <>\n <Flex direction=\"column\" align=\"center\" justify=\"between\">\n <div className=\"relay:animate-icon-pop-in\">\n <Flex\n align=\"center\"\n justify=\"center\"\n className=\"relay:relative relay:rounded-full relay:h-[80px] relay:w-[78px] relay:bg-[var(--relay-colors-amber2)]\"\n >\n <svg\n className=\"relay:absolute relay:top-[7px] relay:left-0 relay:z-0\"\n width=\"76\"\n height=\"80\"\n viewBox=\"0 0 64 54\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <mask id=\"path-1-inside-1_1551_3458\" fill=\"white\">\n <path d=\"M60.5983 22C62.477 22 64.0187 23.5272 63.8194 25.3953C63.3839 29.4763 62.1661 33.4465 60.2215 37.0847C57.7408 41.7257 54.1538 45.6834 49.7782 48.607C45.4027 51.5307 40.3736 53.3301 35.1366 53.8459C29.8995 54.3617 24.616 53.578 19.7541 51.5641C14.8923 49.5503 10.6021 46.3685 7.26367 42.3006C3.92522 38.2327 1.64152 33.4042 0.614871 28.2429C-0.411778 23.0816 -0.149694 17.7467 1.37791 12.7109C2.57543 8.7632 4.52167 5.09478 7.09947 1.90114C8.27945 0.439263 10.4495 0.449489 11.7779 1.77792C13.1063 3.10635 13.0848 5.24829 11.9473 6.74343C10.1382 9.12126 8.76082 11.8094 7.88827 14.6858C6.68544 18.651 6.47907 22.8516 7.28745 26.9156C8.09583 30.9796 9.89401 34.7816 12.5227 37.9846C15.1514 41.1877 18.5294 43.693 22.3576 45.2787C26.1859 46.8644 30.346 47.4815 34.4697 47.0754C38.5934 46.6692 42.5532 45.2524 45.9985 42.9503C49.4438 40.6482 52.2682 37.532 54.2215 33.8776C55.6384 31.2267 56.5653 28.352 56.9674 25.3914C57.2203 23.5298 58.7197 22 60.5983 22Z\" />\n </mask>\n <path\n d=\"M60.5983 22C62.477 22 64.0187 23.5272 63.8194 25.3953C63.3839 29.4763 62.1661 33.4465 60.2215 37.0847C57.7408 41.7257 54.1538 45.6834 49.7782 48.607C45.4027 51.5307 40.3736 53.3301 35.1366 53.8459C29.8995 54.3617 24.616 53.578 19.7541 51.5641C14.8923 49.5503 10.6021 46.3685 7.26367 42.3006C3.92522 38.2327 1.64152 33.4042 0.614871 28.2429C-0.411778 23.0816 -0.149694 17.7467 1.37791 12.7109C2.57543 8.7632 4.52167 5.09478 7.09947 1.90114C8.27945 0.439263 10.4495 0.449489 11.7779 1.77792C13.1063 3.10635 13.0848 5.24829 11.9473 6.74343C10.1382 9.12126 8.76082 11.8094 7.88827 14.6858C6.68544 18.651 6.47907 22.8516 7.28745 26.9156C8.09583 30.9796 9.89401 34.7816 12.5227 37.9846C15.1514 41.1877 18.5294 43.693 22.3576 45.2787C26.1859 46.8644 30.346 47.4815 34.4697 47.0754C38.5934 46.6692 42.5532 45.2524 45.9985 42.9503C49.4438 40.6482 52.2682 37.532 54.2215 33.8776C55.6384 31.2267 56.5653 28.352 56.9674 25.3914C57.2203 23.5298 58.7197 22 60.5983 22Z\"\n stroke=\"#FFB224\"\n strokeWidth=\"8\"\n strokeLinejoin=\"round\"\n mask=\"url(#path-1-inside-1_1551_3458)\"\n />\n </svg>\n\n <Box\n className=\"relay:z-[1] relay:text-[color:var(--relay-colors-amber9)] relay:mr-2\"\n >\n <FontAwesomeIcon icon={faClockFour} style={{ height: 32 }} />\n </Box>\n </Flex>\n </div>\n\n <Text\n style=\"subtitle1\"\n className=\"relay:my-4 relay:text-center\"\n >\n {isBitcoinOrigin || isBitcoinDestination\n ? `Bitcoin confirmation takes ${estimatedMinutes} minutes. Track progress on the transaction page.`\n : `Processing bridge, this will take ~${estimatedMinutes} ${estimatedMinutes === 1 ? 'min' : 'mins'}.`}\n </Text>\n\n <Flex align=\"center\" className=\"relay:gap-2 relay:mb-[24px]\">\n {fromChain ? (\n <Pill color=\"gray\" className=\"relay:items-center relay:py-2 relay:px-3\">\n <ChainTokenIcon\n chainId={fromChain.id}\n tokenlogoURI={fromTokenLogoUri}\n tokenSymbol={_fromToken?.symbol}\n size=\"sm\"\n chainRadius={2.5}\n />\n <Text style=\"subtitle1\" className=\"relay:ml-2\">\n {_fromAmountFormatted} {_fromToken?.symbol}\n </Text>\n </Pill>\n ) : (\n <Text style=\"subtitle1\">?</Text>\n )}\n <Flex className=\"relay:items-center relay:justify-center relay:p-2\">\n <FontAwesomeIcon style={{ width: 14 }} icon={faArrowRight} />\n </Flex>\n {toChain ? (\n <Pill color=\"gray\" className=\"relay:items-center relay:py-2 relay:px-3\">\n <ChainTokenIcon\n chainId={toChain.id}\n tokenlogoURI={toTokenLogoUri}\n tokenSymbol={_toToken?.symbol}\n size=\"sm\"\n chainRadius={2.5}\n />\n <Text style=\"subtitle1\" className=\"relay:ml-2\">\n {_toAmountFormatted} {_toToken?.symbol}\n </Text>\n </Pill>\n ) : (\n <Text style=\"subtitle1\">?</Text>\n )}\n </Flex>\n <Text\n style=\"body2\"\n className=\"relay:rounded-[12px] relay:text-center relay:p-4 relay:bg-[var(--relay-colors-gray2)]\"\n >\n You can close this modal while it finalizes on the blockchain. The\n transaction will continue in the background.\n </Text>\n\n {(() => {\n // For refunds, show the refund tx from outTxs, not the original send tx\n if (isRefund) {\n const refundTxHash = transaction?.data?.outTxs?.[0]?.hash\n const refundChainId = transaction?.data?.outTxs?.[0]?.chainId\n\n // Only show if refund tx is available (don't fall back to send tx)\n if (refundTxHash && refundChainId) {\n const txUrl = getTxUrl(refundChainId, refundTxHash)\n const truncatedHash = truncateAddress(refundTxHash, '...', 6, 4)\n\n return txUrl && truncatedHash ? (\n <Anchor\n href={txUrl}\n target=\"_blank\"\n className=\"relay:text-center relay:text-[14px] relay:mt-[12px]\"\n >\n View Refund Tx: {truncatedHash}\n </Anchor>\n ) : null\n }\n // If refund but no outTxs yet, show loading or nothing\n return isLoadingTransaction ? (\n <Text\n style=\"body3\"\n color=\"subtle\"\n className=\"relay:text-center relay:mt-3\"\n >\n Fetching refund transaction...\n </Text>\n ) : null\n }\n\n // Normal flow: show the first tx hash\n if (allTxHashes && allTxHashes.length > 0) {\n const txHash = allTxHashes[0]?.txHash\n const chainId = allTxHashes[0]?.chainId\n const txUrl =\n txHash && chainId ? getTxUrl(chainId, txHash) : undefined\n const truncatedHash = truncateAddress(txHash, '...', 6, 4)\n\n return txUrl && truncatedHash ? (\n <Anchor\n href={txUrl}\n target=\"_blank\"\n className=\"relay:text-center relay:text-[14px] relay:mt-[12px]\"\n >\n View Tx: {truncatedHash}\n </Anchor>\n ) : null\n }\n\n return null\n })()}\n </Flex>\n\n {!delayedTxUrl ? (\n <Flex\n direction=\"column\"\n className=\"relay:p-3 relay:border relay:border-solid relay:border-[var(--relay-colors-subtle-border-color)] relay:gap-3 relay:w-full relay:rounded-[12px]\"\n >\n <TransactionsByChain\n allTxHashes={allTxHashes}\n fromChain={fromChain}\n toChain={toChain}\n fillTx={null}\n />\n </Flex>\n ) : null}\n\n <Flex className=\"relay:w-full relay:gap-3 relay:mt-[8px]\">\n <Button\n cta={true}\n color={'secondary'}\n onClick={() => {\n haptic('light')\n onOpenChange(false)\n }}\n className=\"relay:justify-center relay:w-full\"\n >\n Done\n </Button>\n {delayedTxUrl ? (\n <a href={delayedTxUrl} className=\"relay:w-full\" target=\"_blank\">\n <Button\n cta={true}\n color={'primary'}\n className=\"relay:justify-center relay:w-max\"\n >\n Track Progress\n </Button>\n </a>\n ) : null}\n </Flex>\n </>\n ) : (\n <>\n <Flex direction=\"column\" align=\"center\" justify=\"between\">\n <div className=\"relay:animate-icon-pop-in\">\n <Flex align=\"center\">\n <RelayIcon />\n <Flex\n align=\"center\"\n justify=\"center\"\n className=\"relay:rounded-full relay:border-2 relay:border-solid relay:border-white relay:w-[40px] relay:h-[40px] relay:bg-[var(--relay-colors-green9)] relay:text-white relay:ml-[-8px]\"\n >\n <FontAwesomeIcon\n icon={faCheck}\n className=\"relay:h-[20px] relay:text-white\"\n />\n </Flex>\n </Flex>\n </div>\n\n <Text\n style=\"h6\"\n className=\"relay:text-center relay:my-3 relay:[&_.green-time]:text-[color:var(--relay-colors-green11)]\"\n >\n {fillTime && fillTime !== '-' ? (\n <>\n Completed in <span className=\"green-time\">{fillTime}</span>\n </>\n ) : (\n 'Transaction Completed'\n )}\n </Text>\n\n <Flex\n direction=\"column\"\n className=\"relay:gap-3 relay:p-3 relay:border relay:border-solid relay:border-[var(--relay-colors-slate-5)] relay:rounded-[12px] relay:w-full\"\n >\n {_fromToken ? (\n <Flex direction=\"column\" className=\"relay:gap-[4px]\">\n <Text style=\"subtitle2\" color=\"subtle\">\n Sent\n </Text>\n <Flex justify=\"between\">\n <Flex align=\"center\" className=\"relay:gap-[4px]\">\n <ChainTokenIcon\n size=\"sm\"\n chainId={_fromToken.chainId}\n tokenlogoURI={fromTokenLogoUri}\n tokenSymbol={_fromToken.symbol}\n chainRadius={2.5}\n />\n {isLoadingTransaction ? (\n <Skeleton\n className=\"relay:h-[24px] relay:w-[60px] relay:bg-[var(--relay-colors-gray5)]\"\n />\n ) : (\n <Text style=\"h6\">\n {_fromAmountFormatted} {_fromToken.symbol}\n </Text>\n )}\n </Flex>\n {!isSameChainSwap &&\n _fromToken?.chainId &&\n (() => {\n // For \"Sent\" section, always use the original send tx (skip refund check)\n const txHash = getTxHashForChain(_fromToken.chainId, true)\n const txUrl = txHash\n ? getTxUrl(_fromToken.chainId, txHash)\n : undefined\n return txHash ? (\n <Anchor\n href={txUrl}\n target=\"_blank\"\n className=\"relay:text-[color:var(--relay-colors-primary11)] relay:text-[14px]\"\n >\n {truncateAddress(txHash, '...', 6, 4)}\n </Anchor>\n ) : null\n })()}\n </Flex>\n </Flex>\n ) : (\n <Text style=\"subtitle1\">?</Text>\n )}\n\n {_toToken ? (\n <Flex direction=\"column\" className=\"relay:gap-[4px]\">\n <Text style=\"subtitle2\" color=\"subtle\">\n Received\n </Text>\n <Flex justify=\"between\">\n <Flex align=\"center\" className=\"relay:gap-[4px]\">\n <ChainTokenIcon\n size=\"sm\"\n chainId={_toToken.chainId}\n tokenlogoURI={toTokenLogoUri}\n tokenSymbol={_toToken.symbol}\n chainRadius={2.5}\n />\n {isLoadingTransaction ? (\n <Skeleton\n className=\"relay:h-[24px] relay:w-[60px] relay:bg-[var(--relay-colors-gray5)]\"\n />\n ) : (\n <Text style=\"h6\">\n {_toAmountFormatted} {_toToken.symbol}\n </Text>\n )}\n </Flex>\n\n {_toToken?.chainId &&\n (() => {\n const txHash = getTxHashForChain(_toToken.chainId)\n const txUrl = txHash\n ? getTxUrl(_toToken.chainId, txHash)\n : undefined\n return txHash ? (\n <Anchor\n href={txUrl}\n target=\"_blank\"\n className=\"relay:text-[color:var(--relay-colors-primary11)] relay:text-[14px]\"\n >\n {truncateAddress(txHash, '...', 6, 4)}\n </Anchor>\n ) : null\n })()}\n </Flex>\n\n {/* Additional Gas - positioned below transaction hash with 8px spacing */}\n {formattedGasTopUpAmount && gasTopUpAmountCurrency ? (\n <Flex align=\"center\" className=\"relay:gap-[4px] relay:mt-[4px]\">\n <ChainTokenIcon\n size=\"sm\"\n chainId={gasTopUpAmountCurrency.chainId}\n tokenlogoURI={`${ASSETS_RELAY_API}/icons/currencies/${\n gasTopUpAmountCurrency?.symbol?.toLowerCase() ??\n gasTopUpAmountCurrency?.chainId\n }.png`}\n tokenSymbol={gasTopUpAmountCurrency.symbol}\n chainRadius={2.5}\n />\n <Text style=\"h6\">\n {formattedGasTopUpAmount} {gasTopUpAmountCurrency.symbol}\n </Text>\n </Flex>\n ) : null}\n </Flex>\n ) : (\n <Text style=\"subtitle1\">?</Text>\n )}\n </Flex>\n </Flex>\n\n <Flex className=\"relay:w-full relay:gap-3\">\n {requestId ? (\n <a\n href={`${baseTransactionUrl}/transaction/${requestId}`}\n className=\"relay:w-full\"\n target=\"_blank\"\n onClick={(e) => {\n e.stopPropagation()\n }}\n >\n <Button\n color=\"secondary\"\n cta={true}\n className=\"relay:justify-center relay:w-max\"\n >\n View Details\n </Button>\n </a>\n ) : null}\n <Button\n cta={true}\n onClick={() => {\n haptic('light')\n onOpenChange(false)\n }}\n className=\"relay:justify-center relay:w-full\"\n >\n Done\n </Button>\n </Flex>\n </>\n )\n}\n"]}
1
+ {"version":3,"file":"SwapSuccessStep.js","sourceRoot":"","sources":["../../../../../../src/components/common/TransactionModal/steps/SwapSuccessStep.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useContext, type FC } from 'react'\nimport {\n Box,\n Button,\n Flex,\n Pill,\n Text,\n ChainTokenIcon,\n Skeleton,\n Anchor\n} from '../../../primitives/index.js'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { type TxHashes } from '../TransactionModalRenderer.js'\nimport { type Token } from '../../../../types/index.js'\nimport type { useRequests } from '@relayprotocol/relay-kit-hooks'\nimport { useRelayClient } from '../../../../hooks/index.js'\nimport { faClockFour } from '@fortawesome/free-solid-svg-icons/faClockFour'\nimport {\n ASSETS_RELAY_API,\n type Execute,\n type ExecuteStepItem\n} from '@relayprotocol/relay-sdk'\nimport { bitcoin } from '../../../../utils/bitcoin.js'\nimport { formatSignificantDigits } from '../../../../utils/numbers.js'\nimport { TransactionsByChain } from './TransactionsByChain.js'\nimport { faArrowRight } from '@fortawesome/free-solid-svg-icons/faArrowRight'\nimport { faCheck } from '@fortawesome/free-solid-svg-icons/faCheck'\nimport { RelayIcon, XIcon } from '../../../../icons/index.js'\nimport {\n ProviderOptionsContext,\n useHapticEvent\n} from '../../../../providers/RelayKitProvider.js'\nimport { getTxBlockExplorerUrl } from '../../../../utils/getTxBlockExplorerUrl.js'\nimport { truncateAddress } from '../../../../utils/truncate.js'\nimport { getRequestCurrencies } from '../../../../utils/relayTransaction.js'\n\ntype SwapSuccessStepProps = {\n fromToken?: Token\n toToken?: Token\n fromAmountFormatted?: string\n toAmountFormatted?: string\n allTxHashes: TxHashes\n transaction?: ReturnType<typeof useRequests>['data']['0']\n seconds: number\n fillTime: string\n timeEstimate?: string\n details?: Execute['details'] | null\n isLoadingTransaction?: boolean\n onOpenChange: (open: boolean) => void\n requestId: string | null\n isGasSponsored?: boolean\n currentCheckStatus?: ExecuteStepItem['checkStatus']\n}\n\nexport const SwapSuccessStep: FC<SwapSuccessStepProps> = ({\n fromToken,\n toToken,\n fromAmountFormatted,\n toAmountFormatted,\n allTxHashes,\n transaction,\n fillTime,\n seconds,\n timeEstimate,\n details,\n isLoadingTransaction,\n onOpenChange,\n requestId,\n isGasSponsored,\n currentCheckStatus\n}) => {\n const relayClient = useRelayClient()\n const haptic = useHapticEvent()\n const isWrap = details?.operation === 'wrap'\n const isUnwrap = details?.operation === 'unwrap'\n const providerOptionsContext = useContext(ProviderOptionsContext)\n\n // Get chains data for explorer URL generation\n const chains = relayClient?.chains\n\n const {\n currencyIn: requestCurrencyIn,\n currencyOut: requestCurrencyOut,\n currencyGasTopup: requestCurrencyGasTopup\n } = getRequestCurrencies(transaction)\n\n const _fromAmountFormatted = requestCurrencyIn?.amount\n ? formatSignificantDigits(\n requestCurrencyIn.amount,\n requestCurrencyIn.currency?.decimals ?? 18\n )\n : fromAmountFormatted\n const _fromToken = requestCurrencyIn?.currency ?? fromToken\n const fromTokenLogoUri =\n requestCurrencyIn?.currency?.metadata?.logoURI ?? fromToken?.logoURI\n const _toAmountFormatted = requestCurrencyOut?.amount\n ? formatSignificantDigits(\n requestCurrencyOut.amount,\n requestCurrencyOut.currency?.decimals ?? 18\n )\n : toAmountFormatted\n const _toToken = requestCurrencyOut?.currency ?? toToken\n const toTokenLogoUri =\n requestCurrencyOut?.currency?.metadata?.logoURI ?? toToken?.logoURI\n\n const baseTransactionUrl = relayClient?.baseApiUrl.includes('testnets')\n ? 'https://testnets.relay.link'\n : 'https://relay.link'\n const fromChain = _fromToken\n ? relayClient?.chains.find((chain) => chain.id === _fromToken?.chainId)\n : null\n const toChain = _toToken\n ? relayClient?.chains.find((chain) => chain.id === _toToken?.chainId)\n : null\n\n const isSameChainSwap = fromChain?.id === toChain?.id && !isWrap && !isUnwrap\n const delayedTxUrl = requestId\n ? `${baseTransactionUrl}/transaction/${requestId}`\n : null\n const timeEstimateMs = (details?.timeEstimate ?? 0) * 1000\n\n const isBitcoinOrigin = fromChain?.id === bitcoin.id\n const isBitcoinDestination = toChain?.id === bitcoin.id\n\n const isRefund =\n transaction?.status === 'refund' || transaction?.data?.refundCurrencyData\n\n // Show delayed screen when:\n // 1. Bitcoin as origin: Immediately (no status check needed, tx takes 10+ mins)\n // 2. Bitcoin as destination: When status reaches 'submitted'\n\n const isDelayedTx =\n isBitcoinOrigin ||\n (isBitcoinDestination &&\n (currentCheckStatus === 'submitted' || currentCheckStatus === 'success'))\n\n // Bitcoin transactions typically take 10+ minutes for confirmation\n const estimatedMinutes =\n isBitcoinOrigin || isBitcoinDestination\n ? 10\n : Math.round(timeEstimateMs / 1000 / 60)\n\n const gasTopUpAmountCurrency = requestCurrencyGasTopup?.currency\n const formattedGasTopUpAmount = requestCurrencyGasTopup?.amount\n ? formatSignificantDigits(\n BigInt(requestCurrencyGasTopup.amount),\n gasTopUpAmountCurrency?.decimals ?? 18\n )\n : undefined\n\n // Helper function to get transaction hash for a specific chain\n const getTxHashForChain = (chainId: number, skipRefundCheck = false) => {\n if (isRefund && !skipRefundCheck) {\n const refundTxHash = transaction?.data?.outTxs?.[0]?.txHash\n const refundChainId = transaction?.data?.outTxs?.[0]?.chainId\n if (refundChainId === chainId && refundTxHash) {\n return refundTxHash\n }\n if (transaction?.data?.refundCurrencyData && !refundTxHash) {\n return undefined\n }\n }\n return allTxHashes.find((tx) => tx.chainId === chainId)?.txHash\n }\n\n // Helper function to get transaction URL for a specific chain and hash\n const getTxUrl = (chainId: number, txHash: string) => {\n return getTxBlockExplorerUrl(chainId, chains, txHash)\n }\n\n const shareIconFill =\n providerOptionsContext.themeScheme === 'dark' ? '#fff' : '#000'\n\n return isDelayedTx ? (\n <>\n <Flex direction=\"column\" align=\"center\" justify=\"between\">\n <div className=\"relay:animate-icon-pop-in\">\n <Flex\n align=\"center\"\n justify=\"center\"\n className=\"relay:relative relay:rounded-full relay:h-[80px] relay:w-[78px] relay:bg-[var(--relay-colors-amber2)]\"\n >\n <svg\n className=\"relay:absolute relay:top-[7px] relay:left-0 relay:z-0\"\n width=\"76\"\n height=\"80\"\n viewBox=\"0 0 64 54\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <mask id=\"path-1-inside-1_1551_3458\" fill=\"white\">\n <path d=\"M60.5983 22C62.477 22 64.0187 23.5272 63.8194 25.3953C63.3839 29.4763 62.1661 33.4465 60.2215 37.0847C57.7408 41.7257 54.1538 45.6834 49.7782 48.607C45.4027 51.5307 40.3736 53.3301 35.1366 53.8459C29.8995 54.3617 24.616 53.578 19.7541 51.5641C14.8923 49.5503 10.6021 46.3685 7.26367 42.3006C3.92522 38.2327 1.64152 33.4042 0.614871 28.2429C-0.411778 23.0816 -0.149694 17.7467 1.37791 12.7109C2.57543 8.7632 4.52167 5.09478 7.09947 1.90114C8.27945 0.439263 10.4495 0.449489 11.7779 1.77792C13.1063 3.10635 13.0848 5.24829 11.9473 6.74343C10.1382 9.12126 8.76082 11.8094 7.88827 14.6858C6.68544 18.651 6.47907 22.8516 7.28745 26.9156C8.09583 30.9796 9.89401 34.7816 12.5227 37.9846C15.1514 41.1877 18.5294 43.693 22.3576 45.2787C26.1859 46.8644 30.346 47.4815 34.4697 47.0754C38.5934 46.6692 42.5532 45.2524 45.9985 42.9503C49.4438 40.6482 52.2682 37.532 54.2215 33.8776C55.6384 31.2267 56.5653 28.352 56.9674 25.3914C57.2203 23.5298 58.7197 22 60.5983 22Z\" />\n </mask>\n <path\n d=\"M60.5983 22C62.477 22 64.0187 23.5272 63.8194 25.3953C63.3839 29.4763 62.1661 33.4465 60.2215 37.0847C57.7408 41.7257 54.1538 45.6834 49.7782 48.607C45.4027 51.5307 40.3736 53.3301 35.1366 53.8459C29.8995 54.3617 24.616 53.578 19.7541 51.5641C14.8923 49.5503 10.6021 46.3685 7.26367 42.3006C3.92522 38.2327 1.64152 33.4042 0.614871 28.2429C-0.411778 23.0816 -0.149694 17.7467 1.37791 12.7109C2.57543 8.7632 4.52167 5.09478 7.09947 1.90114C8.27945 0.439263 10.4495 0.449489 11.7779 1.77792C13.1063 3.10635 13.0848 5.24829 11.9473 6.74343C10.1382 9.12126 8.76082 11.8094 7.88827 14.6858C6.68544 18.651 6.47907 22.8516 7.28745 26.9156C8.09583 30.9796 9.89401 34.7816 12.5227 37.9846C15.1514 41.1877 18.5294 43.693 22.3576 45.2787C26.1859 46.8644 30.346 47.4815 34.4697 47.0754C38.5934 46.6692 42.5532 45.2524 45.9985 42.9503C49.4438 40.6482 52.2682 37.532 54.2215 33.8776C55.6384 31.2267 56.5653 28.352 56.9674 25.3914C57.2203 23.5298 58.7197 22 60.5983 22Z\"\n stroke=\"#FFB224\"\n strokeWidth=\"8\"\n strokeLinejoin=\"round\"\n mask=\"url(#path-1-inside-1_1551_3458)\"\n />\n </svg>\n\n <Box\n className=\"relay:z-[1] relay:text-[color:var(--relay-colors-amber9)] relay:mr-2\"\n >\n <FontAwesomeIcon icon={faClockFour} style={{ height: 32 }} />\n </Box>\n </Flex>\n </div>\n\n <Text\n style=\"subtitle1\"\n className=\"relay:my-4 relay:text-center\"\n >\n {isBitcoinOrigin || isBitcoinDestination\n ? `Bitcoin confirmation takes ${estimatedMinutes} minutes. Track progress on the transaction page.`\n : `Processing bridge, this will take ~${estimatedMinutes} ${estimatedMinutes === 1 ? 'min' : 'mins'}.`}\n </Text>\n\n <Flex align=\"center\" className=\"relay:gap-2 relay:mb-[24px]\">\n {fromChain ? (\n <Pill color=\"gray\" className=\"relay:items-center relay:py-2 relay:px-3\">\n <ChainTokenIcon\n chainId={fromChain.id}\n tokenlogoURI={fromTokenLogoUri}\n tokenSymbol={_fromToken?.symbol}\n size=\"sm\"\n chainRadius={2.5}\n />\n <Text style=\"subtitle1\" className=\"relay:ml-2\">\n {_fromAmountFormatted} {_fromToken?.symbol}\n </Text>\n </Pill>\n ) : (\n <Text style=\"subtitle1\">?</Text>\n )}\n <Flex className=\"relay:items-center relay:justify-center relay:p-2\">\n <FontAwesomeIcon style={{ width: 14 }} icon={faArrowRight} />\n </Flex>\n {toChain ? (\n <Pill color=\"gray\" className=\"relay:items-center relay:py-2 relay:px-3\">\n <ChainTokenIcon\n chainId={toChain.id}\n tokenlogoURI={toTokenLogoUri}\n tokenSymbol={_toToken?.symbol}\n size=\"sm\"\n chainRadius={2.5}\n />\n <Text style=\"subtitle1\" className=\"relay:ml-2\">\n {_toAmountFormatted} {_toToken?.symbol}\n </Text>\n </Pill>\n ) : (\n <Text style=\"subtitle1\">?</Text>\n )}\n </Flex>\n <Text\n style=\"body2\"\n className=\"relay:rounded-[12px] relay:text-center relay:p-4 relay:bg-[var(--relay-colors-gray2)]\"\n >\n You can close this modal while it finalizes on the blockchain. The\n transaction will continue in the background.\n </Text>\n\n {(() => {\n // For refunds, show the refund tx from outTxs, not the original send tx\n if (isRefund) {\n const refundTxHash = transaction?.data?.outTxs?.[0]?.txHash\n const refundChainId = transaction?.data?.outTxs?.[0]?.chainId\n\n // Only show if refund tx is available (don't fall back to send tx)\n if (refundTxHash && refundChainId) {\n const txUrl = getTxUrl(refundChainId, refundTxHash)\n const truncatedHash = truncateAddress(refundTxHash, '...', 6, 4)\n\n return txUrl && truncatedHash ? (\n <Anchor\n href={txUrl}\n target=\"_blank\"\n className=\"relay:text-center relay:text-[14px] relay:mt-[12px]\"\n >\n View Refund Tx: {truncatedHash}\n </Anchor>\n ) : null\n }\n // If refund but no outTxs yet, show loading or nothing\n return isLoadingTransaction ? (\n <Text\n style=\"body3\"\n color=\"subtle\"\n className=\"relay:text-center relay:mt-3\"\n >\n Fetching refund transaction...\n </Text>\n ) : null\n }\n\n // Normal flow: show the first tx hash\n if (allTxHashes && allTxHashes.length > 0) {\n const txHash = allTxHashes[0]?.txHash\n const chainId = allTxHashes[0]?.chainId\n const txUrl =\n txHash && chainId ? getTxUrl(chainId, txHash) : undefined\n const truncatedHash = truncateAddress(txHash, '...', 6, 4)\n\n return txUrl && truncatedHash ? (\n <Anchor\n href={txUrl}\n target=\"_blank\"\n className=\"relay:text-center relay:text-[14px] relay:mt-[12px]\"\n >\n View Tx: {truncatedHash}\n </Anchor>\n ) : null\n }\n\n return null\n })()}\n </Flex>\n\n {!delayedTxUrl ? (\n <Flex\n direction=\"column\"\n className=\"relay:p-3 relay:border relay:border-solid relay:border-[var(--relay-colors-subtle-border-color)] relay:gap-3 relay:w-full relay:rounded-[12px]\"\n >\n <TransactionsByChain\n allTxHashes={allTxHashes}\n fromChain={fromChain}\n toChain={toChain}\n fillTx={null}\n />\n </Flex>\n ) : null}\n\n <Flex className=\"relay:w-full relay:gap-3 relay:mt-[8px]\">\n <Button\n cta={true}\n color={'secondary'}\n onClick={() => {\n haptic('light')\n onOpenChange(false)\n }}\n className=\"relay:justify-center relay:w-full\"\n >\n Done\n </Button>\n {delayedTxUrl ? (\n <a href={delayedTxUrl} className=\"relay:w-full\" target=\"_blank\">\n <Button\n cta={true}\n color={'primary'}\n className=\"relay:justify-center relay:w-max\"\n >\n Track Progress\n </Button>\n </a>\n ) : null}\n </Flex>\n </>\n ) : (\n <>\n <Flex direction=\"column\" align=\"center\" justify=\"between\">\n <div className=\"relay:animate-icon-pop-in\">\n <Flex align=\"center\">\n <RelayIcon />\n <Flex\n align=\"center\"\n justify=\"center\"\n className=\"relay:rounded-full relay:border-2 relay:border-solid relay:border-white relay:w-[40px] relay:h-[40px] relay:bg-[var(--relay-colors-green9)] relay:text-white relay:ml-[-8px]\"\n >\n <FontAwesomeIcon\n icon={faCheck}\n className=\"relay:h-[20px] relay:text-white\"\n />\n </Flex>\n </Flex>\n </div>\n\n <Text\n style=\"h6\"\n className=\"relay:text-center relay:my-3 relay:[&_.green-time]:text-[color:var(--relay-colors-green11)]\"\n >\n {fillTime && fillTime !== '-' ? (\n <>\n Completed in <span className=\"green-time\">{fillTime}</span>\n </>\n ) : (\n 'Transaction Completed'\n )}\n </Text>\n\n <Flex\n direction=\"column\"\n className=\"relay:gap-3 relay:p-3 relay:border relay:border-solid relay:border-[var(--relay-colors-slate-5)] relay:rounded-[12px] relay:w-full\"\n >\n {_fromToken ? (\n <Flex direction=\"column\" className=\"relay:gap-[4px]\">\n <Text style=\"subtitle2\" color=\"subtle\">\n Sent\n </Text>\n <Flex justify=\"between\">\n <Flex align=\"center\" className=\"relay:gap-[4px]\">\n <ChainTokenIcon\n size=\"sm\"\n chainId={_fromToken.chainId}\n tokenlogoURI={fromTokenLogoUri}\n tokenSymbol={_fromToken.symbol}\n chainRadius={2.5}\n />\n {isLoadingTransaction ? (\n <Skeleton\n className=\"relay:h-[24px] relay:w-[60px] relay:bg-[var(--relay-colors-gray5)]\"\n />\n ) : (\n <Text style=\"h6\">\n {_fromAmountFormatted} {_fromToken.symbol}\n </Text>\n )}\n </Flex>\n {!isSameChainSwap &&\n _fromToken?.chainId &&\n (() => {\n // For \"Sent\" section, always use the original send tx (skip refund check)\n const txHash = getTxHashForChain(_fromToken.chainId, true)\n const txUrl = txHash\n ? getTxUrl(_fromToken.chainId, txHash)\n : undefined\n return txHash ? (\n <Anchor\n href={txUrl}\n target=\"_blank\"\n className=\"relay:text-[color:var(--relay-colors-primary11)] relay:text-[14px]\"\n >\n {truncateAddress(txHash, '...', 6, 4)}\n </Anchor>\n ) : null\n })()}\n </Flex>\n </Flex>\n ) : (\n <Text style=\"subtitle1\">?</Text>\n )}\n\n {_toToken ? (\n <Flex direction=\"column\" className=\"relay:gap-[4px]\">\n <Text style=\"subtitle2\" color=\"subtle\">\n Received\n </Text>\n <Flex justify=\"between\">\n <Flex align=\"center\" className=\"relay:gap-[4px]\">\n <ChainTokenIcon\n size=\"sm\"\n chainId={_toToken.chainId}\n tokenlogoURI={toTokenLogoUri}\n tokenSymbol={_toToken.symbol}\n chainRadius={2.5}\n />\n {isLoadingTransaction ? (\n <Skeleton\n className=\"relay:h-[24px] relay:w-[60px] relay:bg-[var(--relay-colors-gray5)]\"\n />\n ) : (\n <Text style=\"h6\">\n {_toAmountFormatted} {_toToken.symbol}\n </Text>\n )}\n </Flex>\n\n {_toToken?.chainId &&\n (() => {\n const txHash = getTxHashForChain(_toToken.chainId)\n const txUrl = txHash\n ? getTxUrl(_toToken.chainId, txHash)\n : undefined\n return txHash ? (\n <Anchor\n href={txUrl}\n target=\"_blank\"\n className=\"relay:text-[color:var(--relay-colors-primary11)] relay:text-[14px]\"\n >\n {truncateAddress(txHash, '...', 6, 4)}\n </Anchor>\n ) : null\n })()}\n </Flex>\n\n {/* Additional Gas - positioned below transaction hash with 8px spacing */}\n {formattedGasTopUpAmount && gasTopUpAmountCurrency ? (\n <Flex align=\"center\" className=\"relay:gap-[4px] relay:mt-[4px]\">\n <ChainTokenIcon\n size=\"sm\"\n chainId={gasTopUpAmountCurrency.chainId}\n tokenlogoURI={`${ASSETS_RELAY_API}/icons/currencies/${\n gasTopUpAmountCurrency?.symbol?.toLowerCase() ??\n gasTopUpAmountCurrency?.chainId\n }.png`}\n tokenSymbol={gasTopUpAmountCurrency.symbol}\n chainRadius={2.5}\n />\n <Text style=\"h6\">\n {formattedGasTopUpAmount} {gasTopUpAmountCurrency.symbol}\n </Text>\n </Flex>\n ) : null}\n </Flex>\n ) : (\n <Text style=\"subtitle1\">?</Text>\n )}\n </Flex>\n </Flex>\n\n <Flex className=\"relay:w-full relay:gap-3\">\n {requestId ? (\n <a\n href={`${baseTransactionUrl}/transaction/${requestId}`}\n className=\"relay:w-full\"\n target=\"_blank\"\n onClick={(e) => {\n e.stopPropagation()\n }}\n >\n <Button\n color=\"secondary\"\n cta={true}\n className=\"relay:justify-center relay:w-max\"\n >\n View Details\n </Button>\n </a>\n ) : null}\n <Button\n cta={true}\n onClick={() => {\n haptic('light')\n onOpenChange(false)\n }}\n className=\"relay:justify-center relay:w-full\"\n >\n Done\n </Button>\n </Flex>\n </>\n )\n}\n"]}