@daimo/pay 1.16.1 → 1.16.3

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 (228) hide show
  1. package/build/index.d.ts +7 -5
  2. package/build/package.json.js +2 -2
  3. package/build/src/components/Common/OrderHeader/index.js +8 -9
  4. package/build/src/components/Common/OrderHeader/index.js.map +1 -1
  5. package/build/src/components/Common/SelectAnotherMethodButton/index.js +15 -3
  6. package/build/src/components/Common/SelectAnotherMethodButton/index.js.map +1 -1
  7. package/build/src/components/DaimoPayButton/index.js +2 -1
  8. package/build/src/components/DaimoPayButton/index.js.map +1 -1
  9. package/build/src/components/DaimoPayModal/index.js +13 -3
  10. package/build/src/components/DaimoPayModal/index.js.map +1 -1
  11. package/build/src/components/Pages/SelectDepositAddressChain/index.js +1 -1
  12. package/build/src/components/Pages/SelectDepositAddressChain/index.js.map +1 -1
  13. package/build/src/components/Pages/SelectExchange/index.js +2 -2
  14. package/build/src/components/Pages/SelectExchange/index.js.map +1 -1
  15. package/build/src/components/Pages/SelectMethod/index.js +0 -1
  16. package/build/src/components/Pages/SelectMethod/index.js.map +1 -1
  17. package/build/src/components/Pages/SelectToken/index.js +2 -2
  18. package/build/src/components/Pages/SelectToken/index.js.map +1 -1
  19. package/build/src/components/Pages/SelectZKP/index.js +2 -2
  20. package/build/src/components/Pages/SelectZKP/index.js.map +1 -1
  21. package/build/src/hooks/usePaymentState.js.map +1 -1
  22. package/build/src/hooks/useTokenOptions.js +2 -2
  23. package/build/src/hooks/useTokenOptions.js.map +1 -1
  24. package/build/src/payment/paymentFsm.js.map +1 -1
  25. package/build/src/world-mini-app/WorldPayButton.js +7 -2
  26. package/build/src/world-mini-app/WorldPayButton.js.map +1 -1
  27. package/build/world.d.ts +3 -0
  28. package/package.json +3 -3
  29. package/build/assets/MobileWithLogos.d.ts +0 -2
  30. package/build/assets/ScanIconWithLogos.d.ts +0 -6
  31. package/build/assets/browsers.d.ts +0 -10
  32. package/build/assets/chains.d.ts +0 -28
  33. package/build/assets/coins.d.ts +0 -2
  34. package/build/assets/crepe.d.ts +0 -3
  35. package/build/assets/icons.d.ts +0 -35
  36. package/build/assets/logos.d.ts +0 -207
  37. package/build/assets/wallet.d.ts +0 -3
  38. package/build/assets/wave.d.ts +0 -2
  39. package/build/components/Common/Alert/index.d.ts +0 -6
  40. package/build/components/Common/Alert/styles.d.ts +0 -2
  41. package/build/components/Common/Alert/types.d.ts +0 -5
  42. package/build/components/Common/AmountInput/AmountInputField.d.ts +0 -8
  43. package/build/components/Common/AmountInput/index.d.ts +0 -9
  44. package/build/components/Common/Avatar/index.d.ts +0 -17
  45. package/build/components/Common/Avatar/styles.d.ts +0 -2
  46. package/build/components/Common/BrowserIcon/index.d.ts +0 -4
  47. package/build/components/Common/BrowserIcon/styles.d.ts +0 -1
  48. package/build/components/Common/BrowserIcon/types.d.ts +0 -3
  49. package/build/components/Common/Button/index.d.ts +0 -4
  50. package/build/components/Common/Button/styles.d.ts +0 -10
  51. package/build/components/Common/Button/types.d.ts +0 -15
  52. package/build/components/Common/Chain/index.d.ts +0 -9
  53. package/build/components/Common/Chain/styles.d.ts +0 -4
  54. package/build/components/Common/ChainSelectList/index.d.ts +0 -4
  55. package/build/components/Common/ChainSelectList/styles.d.ts +0 -9
  56. package/build/components/Common/CircleTimer.d.ts +0 -17
  57. package/build/components/Common/ConnectorList/index.d.ts +0 -2
  58. package/build/components/Common/ConnectorList/styles.d.ts +0 -8
  59. package/build/components/Common/CopyToClipboard/CopyToClipboardIcon.d.ts +0 -6
  60. package/build/components/Common/CopyToClipboard/index.d.ts +0 -7
  61. package/build/components/Common/CustomQRCode/QRCode.d.ts +0 -12
  62. package/build/components/Common/CustomQRCode/index.d.ts +0 -6
  63. package/build/components/Common/CustomQRCode/styles.d.ts +0 -6
  64. package/build/components/Common/CustomQRCode/types.d.ts +0 -11
  65. package/build/components/Common/DynamicContainer/index.d.ts +0 -7
  66. package/build/components/Common/FitText/index.d.ts +0 -8
  67. package/build/components/Common/LazyImage/index.d.ts +0 -8
  68. package/build/components/Common/Logo/index.d.ts +0 -8
  69. package/build/components/Common/Logo/styles.d.ts +0 -3
  70. package/build/components/Common/Modal/index.d.ts +0 -25
  71. package/build/components/Common/Modal/styles.d.ts +0 -25
  72. package/build/components/Common/OptionsList/index.d.ts +0 -17
  73. package/build/components/Common/OptionsList/styles.d.ts +0 -5
  74. package/build/components/Common/OrderHeader/index.d.ts +0 -5
  75. package/build/components/Common/PaymentBreakdown/index.d.ts +0 -6
  76. package/build/components/Common/Portal/index.d.ts +0 -2
  77. package/build/components/Common/PoweredByFooter/index.d.ts +0 -5
  78. package/build/components/Common/ScrollArea/index.d.ts +0 -9
  79. package/build/components/Common/ScrollArea/styles.d.ts +0 -3
  80. package/build/components/Common/SelectAnotherMethodButton/index.d.ts +0 -1
  81. package/build/components/Common/Spinner/index.d.ts +0 -1
  82. package/build/components/Common/Spinner/styles.d.ts +0 -1
  83. package/build/components/Common/SquareTimer.d.ts +0 -19
  84. package/build/components/Common/SwitchButton/index.d.ts +0 -6
  85. package/build/components/Common/ThemedButton/index.d.ts +0 -15
  86. package/build/components/Common/ThemedButton/styles.d.ts +0 -2
  87. package/build/components/Common/TokenChainLogo/index.d.ts +0 -7
  88. package/build/components/Common/Tooltip/index.d.ts +0 -4
  89. package/build/components/Common/Tooltip/styles.d.ts +0 -3
  90. package/build/components/Common/Tooltip/types.d.ts +0 -9
  91. package/build/components/Common/WalletChainLogo/index.d.ts +0 -6
  92. package/build/components/DaimoPayButton/index.d.ts +0 -149
  93. package/build/components/DaimoPayButton/styles.d.ts +0 -4
  94. package/build/components/DaimoPayModal/ConnectUsing.d.ts +0 -2
  95. package/build/components/DaimoPayModal/ConnectWithInjector/index.d.ts +0 -15
  96. package/build/components/DaimoPayModal/ConnectWithInjector/styles.d.ts +0 -6
  97. package/build/components/DaimoPayModal/ConnectWithQRCode.d.ts +0 -12
  98. package/build/components/DaimoPayModal/index.d.ts +0 -8
  99. package/build/components/DaimoPayThemeProvider/DaimoPayThemeProvider.d.ts +0 -16
  100. package/build/components/Pages/About/graphics.d.ts +0 -11
  101. package/build/components/Pages/About/index.d.ts +0 -3
  102. package/build/components/Pages/About/styles.d.ts +0 -8
  103. package/build/components/Pages/Confirmation/index.d.ts +0 -3
  104. package/build/components/Pages/Connectors/index.d.ts +0 -3
  105. package/build/components/Pages/Connectors/styles.d.ts +0 -9
  106. package/build/components/Pages/DownloadApp/index.d.ts +0 -2
  107. package/build/components/Pages/Error/index.d.ts +0 -1
  108. package/build/components/Pages/MobileConnectors/index.d.ts +0 -3
  109. package/build/components/Pages/MobileConnectors/styles.d.ts +0 -5
  110. package/build/components/Pages/Onboarding/index.d.ts +0 -3
  111. package/build/components/Pages/Onboarding/styles.d.ts +0 -9
  112. package/build/components/Pages/PayWithToken/index.d.ts +0 -3
  113. package/build/components/Pages/SelectAmount/index.d.ts +0 -3
  114. package/build/components/Pages/SelectDepositAddressAmount/index.d.ts +0 -3
  115. package/build/components/Pages/SelectDepositAddressChain/index.d.ts +0 -3
  116. package/build/components/Pages/SelectExchange/index.d.ts +0 -3
  117. package/build/components/Pages/SelectExternalAmount/index.d.ts +0 -3
  118. package/build/components/Pages/SelectMethod/index.d.ts +0 -1
  119. package/build/components/Pages/SelectMethod/styles.d.ts +0 -9
  120. package/build/components/Pages/SelectToken/index.d.ts +0 -1
  121. package/build/components/Pages/SelectWalletAmount/index.d.ts +0 -3
  122. package/build/components/Pages/SelectWalletChain/index.d.ts +0 -3
  123. package/build/components/Pages/SelectZKP/index.d.ts +0 -3
  124. package/build/components/Pages/Solana/ConnectorSolana/index.d.ts +0 -4
  125. package/build/components/Pages/Solana/PayWithSolanaToken/index.d.ts +0 -3
  126. package/build/components/Pages/Solana/SelectSolanaAmount/index.d.ts +0 -3
  127. package/build/components/Pages/SwitchNetworks/index.d.ts +0 -3
  128. package/build/components/Pages/WaitingDepositAddress/index.d.ts +0 -1
  129. package/build/components/Pages/WaitingExternal/index.d.ts +0 -3
  130. package/build/components/Pages/WaitingWallet/index.d.ts +0 -3
  131. package/build/components/Spinners/CircleSpinner/index.d.ts +0 -9
  132. package/build/components/Spinners/CircleSpinner/styles.d.ts +0 -5
  133. package/build/components/Spinners/ExternalPaymentSpinner/index.d.ts +0 -5
  134. package/build/components/Spinners/SquircleSpinner/index.d.ts +0 -5
  135. package/build/components/Spinners/SquircleSpinner/styles.d.ts +0 -4
  136. package/build/components/Spinners/TokenLogoSpinner/index.d.ts +0 -5
  137. package/build/components/Spinners/TokenLogoSpinner/styles.d.ts +0 -1
  138. package/build/components/Spinners/WalletPaymentSpinner/index.d.ts +0 -5
  139. package/build/components/Spinners/styles.d.ts +0 -2
  140. package/build/constants/defaultTheme.d.ts +0 -4
  141. package/build/constants/routes.d.ts +0 -28
  142. package/build/defaultConfig.d.ts +0 -17
  143. package/build/defaultConnectors.d.ts +0 -14
  144. package/build/hooks/useChainIsSupported.d.ts +0 -2
  145. package/build/hooks/useChains.d.ts +0 -3
  146. package/build/hooks/useConnect.d.ts +0 -110
  147. package/build/hooks/useConnectCallback.d.ts +0 -8
  148. package/build/hooks/useConnectors.d.ts +0 -3
  149. package/build/hooks/useDaimoPay.d.ts +0 -94
  150. package/build/hooks/useDaimoPayStatus.d.ts +0 -15
  151. package/build/hooks/useDaimoPayUI.d.ts +0 -6
  152. package/build/hooks/useDepositAddressOptions.d.ts +0 -10
  153. package/build/hooks/useEnsFallbackConfig.d.ts +0 -2
  154. package/build/hooks/useExternalPaymentOptions.d.ts +0 -12
  155. package/build/hooks/useFitText.d.ts +0 -14
  156. package/build/hooks/useFocusTrap.d.ts +0 -1
  157. package/build/hooks/useGoogleFont.d.ts +0 -3
  158. package/build/hooks/useIsMobile.d.ts +0 -5
  159. package/build/hooks/useIsMounted.d.ts +0 -3
  160. package/build/hooks/useLastConnector.d.ts +0 -4
  161. package/build/hooks/useLocalStorage.d.ts +0 -7
  162. package/build/hooks/useLocales.d.ts +0 -2
  163. package/build/hooks/useLockBodyScroll.d.ts +0 -1
  164. package/build/hooks/useModal.d.ts +0 -8
  165. package/build/hooks/useOrderUsdLimits.d.ts +0 -7
  166. package/build/hooks/usePayContext.d.ts +0 -2
  167. package/build/hooks/usePaymentState.d.ts +0 -67
  168. package/build/hooks/usePrevious.d.ts +0 -1
  169. package/build/hooks/useSolanaPaymentOptions.d.ts +0 -13
  170. package/build/hooks/useTokenOptions.d.ts +0 -5
  171. package/build/hooks/useUntronAvailability.d.ts +0 -14
  172. package/build/hooks/useWalletPaymentOptions.d.ts +0 -31
  173. package/build/hooks/useWindowSize.d.ts +0 -4
  174. package/build/localizations/index.d.ts +0 -2
  175. package/build/localizations/locales/ar-AE.d.ts +0 -3
  176. package/build/localizations/locales/ca-AD.d.ts +0 -3
  177. package/build/localizations/locales/ee-EE.d.ts +0 -3
  178. package/build/localizations/locales/en-US.d.ts +0 -128
  179. package/build/localizations/locales/es-ES.d.ts +0 -3
  180. package/build/localizations/locales/fa-IR.d.ts +0 -3
  181. package/build/localizations/locales/fr-FR.d.ts +0 -3
  182. package/build/localizations/locales/index.d.ts +0 -3
  183. package/build/localizations/locales/ja-JP.d.ts +0 -91
  184. package/build/localizations/locales/pt-BR.d.ts +0 -3
  185. package/build/localizations/locales/ru-RU.d.ts +0 -3
  186. package/build/localizations/locales/tr-TR.d.ts +0 -3
  187. package/build/localizations/locales/vi-VN.d.ts +0 -3
  188. package/build/localizations/locales/zh-CN.d.ts +0 -3
  189. package/build/payment/paymentEffects.d.ts +0 -12
  190. package/build/payment/paymentFsm.d.ts +0 -131
  191. package/build/payment/paymentStore.d.ts +0 -14
  192. package/build/payment/paymentUtils.d.ts +0 -6
  193. package/build/provider/DaimoPayProvider.d.ts +0 -24
  194. package/build/provider/PayContext.d.ts +0 -66
  195. package/build/provider/PaymentProvider.d.ts +0 -8
  196. package/build/provider/SolanaContextProvider.d.ts +0 -6
  197. package/build/provider/Web3ContextProvider.d.ts +0 -24
  198. package/build/stateStore.d.ts +0 -66
  199. package/build/styles/defaultTheme.d.ts +0 -3
  200. package/build/styles/index.d.ts +0 -1
  201. package/build/styles/styled/index.d.ts +0 -12
  202. package/build/styles/themes/base.d.ts +0 -129
  203. package/build/styles/themes/index.d.ts +0 -673
  204. package/build/styles/themes/midnight.d.ts +0 -74
  205. package/build/styles/themes/minimal.d.ts +0 -94
  206. package/build/styles/themes/nouns.d.ts +0 -79
  207. package/build/styles/themes/retro.d.ts +0 -89
  208. package/build/styles/themes/rounded.d.ts +0 -86
  209. package/build/styles/themes/soft.d.ts +0 -69
  210. package/build/styles/themes/web95.d.ts +0 -91
  211. package/build/styles/types.d.ts +0 -80
  212. package/build/types.d.ts +0 -46
  213. package/build/utils/exports.d.ts +0 -1
  214. package/build/utils/format.d.ts +0 -49
  215. package/build/utils/index.d.ts +0 -17
  216. package/build/utils/localstorage.d.ts +0 -9
  217. package/build/utils/p3.d.ts +0 -2
  218. package/build/utils/platform.d.ts +0 -2
  219. package/build/utils/polling.d.ts +0 -13
  220. package/build/utils/supportUrl.d.ts +0 -2
  221. package/build/utils/trpc.d.ts +0 -4
  222. package/build/utils/validateInput.d.ts +0 -16
  223. package/build/utils/wallets.d.ts +0 -24
  224. package/build/wallets/index.d.ts +0 -5
  225. package/build/wallets/useWallets.d.ts +0 -16
  226. package/build/wallets/walletConfigs.d.ts +0 -29
  227. package/build/world-mini-app/WorldPayButton.d.ts +0 -84
  228. package/build/world-mini-app/promptWorldPayment.d.ts +0 -9
@@ -19,7 +19,7 @@ const SelectDepositAddressChain = () => {
19
19
  untronAvailable
20
20
  } = paymentState;
21
21
  return /* @__PURE__ */ jsxs(PageContent, { children: [
22
- /* @__PURE__ */ jsx(OrderHeader, { minified: true }),
22
+ /* @__PURE__ */ jsx(OrderHeader, { minified: true, show: "hideCoin" }),
23
23
  !depositAddressOptions.loading && depositAddressOptions.options?.length === 0 && /* @__PURE__ */ jsxs(
24
24
  ModalContent,
25
25
  {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/Pages/SelectDepositAddressChain/index.tsx"],"sourcesContent":["import React from \"react\";\nimport { ROUTES } from \"../../../constants/routes\";\nimport { usePayContext } from \"../../../hooks/usePayContext\";\n\nimport { ModalContent, ModalH1, PageContent } from \"../../Common/Modal/styles\";\n\nimport {\n DaimoPayOrderMode,\n DepositAddressPaymentOptions,\n} from \"@daimo/pay-common\";\nimport { useDaimoPay } from \"../../../hooks/useDaimoPay\";\nimport { OptionsList } from \"../../Common/OptionsList\";\nimport { OrderHeader } from \"../../Common/OrderHeader\";\nimport SelectAnotherMethodButton from \"../../Common/SelectAnotherMethodButton\";\n\nconst SelectDepositAddressChain: React.FC = () => {\n const { setRoute, paymentState } = usePayContext();\n const pay = useDaimoPay();\n const { order } = pay;\n const {\n isDepositFlow,\n setSelectedDepositAddressOption,\n depositAddressOptions,\n untronAvailable,\n } = paymentState;\n\n return (\n <PageContent>\n <OrderHeader minified />\n\n {!depositAddressOptions.loading &&\n depositAddressOptions.options?.length === 0 && (\n <ModalContent\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n paddingTop: 16,\n paddingBottom: 16,\n }}\n >\n <ModalH1>Chains unavailable.</ModalH1>\n <SelectAnotherMethodButton />\n </ModalContent>\n )}\n\n <OptionsList\n requiredSkeletons={4}\n isLoading={depositAddressOptions.loading}\n options={(depositAddressOptions.options ?? [])\n .map((option) => {\n const disabled =\n // Disable if usd below min\n (option.minimumUsd > 0 &&\n order?.mode === DaimoPayOrderMode.HYDRATED &&\n order.usdValue < option.minimumUsd) ||\n // Disable if TRON_USDT unavailable\n (option.id === DepositAddressPaymentOptions.TRON_USDT &&\n untronAvailable === false);\n\n return {\n id: option.id,\n title: option.id,\n icons: [option.logoURI],\n disabled,\n onClick: () => {\n setSelectedDepositAddressOption(option);\n const meta = { event: \"click-option\", option: option.id };\n if (isDepositFlow) {\n setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_AMOUNT, meta);\n } else {\n setRoute(ROUTES.WAITING_DEPOSIT_ADDRESS, meta);\n }\n },\n };\n })\n // Push disabled options to the bottom of the list\n .sort((a, b) => Number(a.disabled) - Number(b.disabled))}\n />\n </PageContent>\n );\n};\n\nexport default SelectDepositAddressChain;\n"],"names":[],"mappings":";;;;;;;;;;AAeA,MAAM,4BAAsC,MAAM;AAChD,EAAA,MAAM,EAAE,QAAA,EAAU,YAAa,EAAA,GAAI,aAAc,EAAA,CAAA;AACjD,EAAA,MAAM,MAAM,WAAY,EAAA,CAAA;AACxB,EAAM,MAAA,EAAE,OAAU,GAAA,GAAA,CAAA;AAClB,EAAM,MAAA;AAAA,IACJ,aAAA;AAAA,IACA,+BAAA;AAAA,IACA,qBAAA;AAAA,IACA,eAAA;AAAA,GACE,GAAA,YAAA,CAAA;AAEJ,EAAA,4BACG,WACC,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,WAAA,EAAA,EAAY,UAAQ,IAAC,EAAA,CAAA;AAAA,IAErB,CAAC,qBAAsB,CAAA,OAAA,IACtB,qBAAsB,CAAA,OAAA,EAAS,WAAW,CACxC,oBAAA,IAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,KAAO,EAAA;AAAA,UACL,OAAS,EAAA,MAAA;AAAA,UACT,UAAY,EAAA,QAAA;AAAA,UACZ,cAAgB,EAAA,QAAA;AAAA,UAChB,UAAY,EAAA,EAAA;AAAA,UACZ,aAAe,EAAA,EAAA;AAAA,SACjB;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,WAAQ,QAAmB,EAAA,qBAAA,EAAA,CAAA;AAAA,8BAC3B,yBAA0B,EAAA,EAAA,CAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAC7B;AAAA,oBAGJ,GAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,iBAAmB,EAAA,CAAA;AAAA,QACnB,WAAW,qBAAsB,CAAA,OAAA;AAAA,QACjC,UAAU,qBAAsB,CAAA,OAAA,IAAW,EACxC,EAAA,GAAA,CAAI,CAAC,MAAW,KAAA;AACf,UAAM,MAAA,QAAA;AAAA;AAAA,YAEH,MAAA,CAAO,aAAa,CACnB,IAAA,KAAA,EAAO,SAAS,iBAAkB,CAAA,QAAA,IAClC,KAAM,CAAA,QAAA,GAAW,MAAO,CAAA,UAAA;AAAA,YAEzB,MAAO,CAAA,EAAA,KAAO,4BAA6B,CAAA,SAAA,IAC1C,eAAoB,KAAA,KAAA;AAAA,WAAA,CAAA;AAExB,UAAO,OAAA;AAAA,YACL,IAAI,MAAO,CAAA,EAAA;AAAA,YACX,OAAO,MAAO,CAAA,EAAA;AAAA,YACd,KAAA,EAAO,CAAC,MAAA,CAAO,OAAO,CAAA;AAAA,YACtB,QAAA;AAAA,YACA,SAAS,MAAM;AACb,cAAA,+BAAA,CAAgC,MAAM,CAAA,CAAA;AACtC,cAAA,MAAM,OAAO,EAAE,KAAA,EAAO,cAAgB,EAAA,MAAA,EAAQ,OAAO,EAAG,EAAA,CAAA;AACxD,cAAA,IAAI,aAAe,EAAA;AACjB,gBAAS,QAAA,CAAA,MAAA,CAAO,+BAA+B,IAAI,CAAA,CAAA;AAAA,eAC9C,MAAA;AACL,gBAAS,QAAA,CAAA,MAAA,CAAO,yBAAyB,IAAI,CAAA,CAAA;AAAA,eAC/C;AAAA,aACF;AAAA,WACF,CAAA;AAAA,SACD,CAAA,CAEA,IAAK,CAAA,CAAC,CAAG,EAAA,CAAA,KAAM,MAAO,CAAA,CAAA,CAAE,QAAQ,CAAA,GAAI,MAAO,CAAA,CAAA,CAAE,QAAQ,CAAC,CAAA;AAAA,OAAA;AAAA,KAC3D;AAAA,GACF,EAAA,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/Pages/SelectDepositAddressChain/index.tsx"],"sourcesContent":["import React from \"react\";\nimport { ROUTES } from \"../../../constants/routes\";\nimport { usePayContext } from \"../../../hooks/usePayContext\";\n\nimport { ModalContent, ModalH1, PageContent } from \"../../Common/Modal/styles\";\n\nimport {\n DaimoPayOrderMode,\n DepositAddressPaymentOptions,\n} from \"@daimo/pay-common\";\nimport { useDaimoPay } from \"../../../hooks/useDaimoPay\";\nimport { OptionsList } from \"../../Common/OptionsList\";\nimport { OrderHeader } from \"../../Common/OrderHeader\";\nimport SelectAnotherMethodButton from \"../../Common/SelectAnotherMethodButton\";\n\nconst SelectDepositAddressChain: React.FC = () => {\n const { setRoute, paymentState } = usePayContext();\n const pay = useDaimoPay();\n const { order } = pay;\n const {\n isDepositFlow,\n setSelectedDepositAddressOption,\n depositAddressOptions,\n untronAvailable,\n } = paymentState;\n\n return (\n <PageContent>\n <OrderHeader minified show=\"hideCoin\" />\n\n {!depositAddressOptions.loading &&\n depositAddressOptions.options?.length === 0 && (\n <ModalContent\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n paddingTop: 16,\n paddingBottom: 16,\n }}\n >\n <ModalH1>Chains unavailable.</ModalH1>\n <SelectAnotherMethodButton />\n </ModalContent>\n )}\n\n <OptionsList\n requiredSkeletons={4}\n isLoading={depositAddressOptions.loading}\n options={(depositAddressOptions.options ?? [])\n .map((option) => {\n const disabled =\n // Disable if usd below min\n (option.minimumUsd > 0 &&\n order?.mode === DaimoPayOrderMode.HYDRATED &&\n order.usdValue < option.minimumUsd) ||\n // Disable if TRON_USDT unavailable\n (option.id === DepositAddressPaymentOptions.TRON_USDT &&\n untronAvailable === false);\n\n return {\n id: option.id,\n title: option.id,\n icons: [option.logoURI],\n disabled,\n onClick: () => {\n setSelectedDepositAddressOption(option);\n const meta = { event: \"click-option\", option: option.id };\n if (isDepositFlow) {\n setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_AMOUNT, meta);\n } else {\n setRoute(ROUTES.WAITING_DEPOSIT_ADDRESS, meta);\n }\n },\n };\n })\n // Push disabled options to the bottom of the list\n .sort((a, b) => Number(a.disabled) - Number(b.disabled))}\n />\n </PageContent>\n );\n};\n\nexport default SelectDepositAddressChain;\n"],"names":[],"mappings":";;;;;;;;;;AAeA,MAAM,4BAAsC,MAAM;AAChD,EAAA,MAAM,EAAE,QAAA,EAAU,YAAa,EAAA,GAAI,aAAc,EAAA,CAAA;AACjD,EAAA,MAAM,MAAM,WAAY,EAAA,CAAA;AACxB,EAAM,MAAA,EAAE,OAAU,GAAA,GAAA,CAAA;AAClB,EAAM,MAAA;AAAA,IACJ,aAAA;AAAA,IACA,+BAAA;AAAA,IACA,qBAAA;AAAA,IACA,eAAA;AAAA,GACE,GAAA,YAAA,CAAA;AAEJ,EAAA,4BACG,WACC,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,WAAY,EAAA,EAAA,QAAA,EAAQ,IAAC,EAAA,IAAA,EAAK,UAAW,EAAA,CAAA;AAAA,IAErC,CAAC,qBAAsB,CAAA,OAAA,IACtB,qBAAsB,CAAA,OAAA,EAAS,WAAW,CACxC,oBAAA,IAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,KAAO,EAAA;AAAA,UACL,OAAS,EAAA,MAAA;AAAA,UACT,UAAY,EAAA,QAAA;AAAA,UACZ,cAAgB,EAAA,QAAA;AAAA,UAChB,UAAY,EAAA,EAAA;AAAA,UACZ,aAAe,EAAA,EAAA;AAAA,SACjB;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,WAAQ,QAAmB,EAAA,qBAAA,EAAA,CAAA;AAAA,8BAC3B,yBAA0B,EAAA,EAAA,CAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAC7B;AAAA,oBAGJ,GAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,iBAAmB,EAAA,CAAA;AAAA,QACnB,WAAW,qBAAsB,CAAA,OAAA;AAAA,QACjC,UAAU,qBAAsB,CAAA,OAAA,IAAW,EACxC,EAAA,GAAA,CAAI,CAAC,MAAW,KAAA;AACf,UAAM,MAAA,QAAA;AAAA;AAAA,YAEH,MAAA,CAAO,aAAa,CACnB,IAAA,KAAA,EAAO,SAAS,iBAAkB,CAAA,QAAA,IAClC,KAAM,CAAA,QAAA,GAAW,MAAO,CAAA,UAAA;AAAA,YAEzB,MAAO,CAAA,EAAA,KAAO,4BAA6B,CAAA,SAAA,IAC1C,eAAoB,KAAA,KAAA;AAAA,WAAA,CAAA;AAExB,UAAO,OAAA;AAAA,YACL,IAAI,MAAO,CAAA,EAAA;AAAA,YACX,OAAO,MAAO,CAAA,EAAA;AAAA,YACd,KAAA,EAAO,CAAC,MAAA,CAAO,OAAO,CAAA;AAAA,YACtB,QAAA;AAAA,YACA,SAAS,MAAM;AACb,cAAA,+BAAA,CAAgC,MAAM,CAAA,CAAA;AACtC,cAAA,MAAM,OAAO,EAAE,KAAA,EAAO,cAAgB,EAAA,MAAA,EAAQ,OAAO,EAAG,EAAA,CAAA;AACxD,cAAA,IAAI,aAAe,EAAA;AACjB,gBAAS,QAAA,CAAA,MAAA,CAAO,+BAA+B,IAAI,CAAA,CAAA;AAAA,eAC9C,MAAA;AACL,gBAAS,QAAA,CAAA,MAAA,CAAO,yBAAyB,IAAI,CAAA,CAAA;AAAA,eAC/C;AAAA,aACF;AAAA,WACF,CAAA;AAAA,SACD,CAAA,CAEA,IAAK,CAAA,CAAC,CAAG,EAAA,CAAA,KAAM,MAAO,CAAA,CAAA,CAAE,QAAQ,CAAA,GAAI,MAAO,CAAA,CAAA,CAAE,QAAQ,CAAC,CAAA;AAAA,OAAA;AAAA,KAC3D;AAAA,GACF,EAAA,CAAA,CAAA;AAEJ;;;;"}
@@ -11,7 +11,7 @@ const SelectExchange = () => {
11
11
  const exchangeOptions = externalPaymentOptions.options.get("exchange");
12
12
  if (!exchangeOptions) {
13
13
  return /* @__PURE__ */ jsxs(PageContent, { children: [
14
- /* @__PURE__ */ jsx(OrderHeader, { minified: true, show: "zkp2p" }),
14
+ /* @__PURE__ */ jsx(OrderHeader, { minified: true, show: "hideCoin" }),
15
15
  /* @__PURE__ */ jsx(ModalH1, { children: "No Exchange options available" })
16
16
  ] });
17
17
  }
@@ -32,7 +32,7 @@ const SelectExchange = () => {
32
32
  subtitle: option.message
33
33
  }));
34
34
  return /* @__PURE__ */ jsxs(PageContent, { children: [
35
- /* @__PURE__ */ jsx(OrderHeader, { minified: true, show: "zkp2p" }),
35
+ /* @__PURE__ */ jsx(OrderHeader, { minified: true, show: "hideCoin" }),
36
36
  /* @__PURE__ */ jsx(OptionsList, { options })
37
37
  ] });
38
38
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/Pages/SelectExchange/index.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { ModalH1, PageContent } from \"../../Common/Modal/styles\";\n\nimport { ROUTES } from \"../../../constants/routes\";\nimport { usePayContext } from \"../../../hooks/usePayContext\";\nimport { OptionsList } from \"../../Common/OptionsList\";\nimport { OrderHeader } from \"../../Common/OrderHeader\";\n\nconst SelectExchange: React.FC = () => {\n const { paymentState, setRoute } = usePayContext();\n const { externalPaymentOptions, setSelectedExternalOption } = paymentState;\n const exchangeOptions = externalPaymentOptions.options.get(\"exchange\");\n\n if (!exchangeOptions) {\n return (\n <PageContent>\n <OrderHeader minified show=\"zkp2p\" />\n <ModalH1>No Exchange options available</ModalH1>\n </PageContent>\n );\n }\n\n const options = exchangeOptions.map((option) => ({\n id: option.id,\n title: option.cta,\n icons: [option.logoURI],\n onClick: () => {\n setSelectedExternalOption(option);\n const meta = { event: \"click-option\", option: option.id };\n if (paymentState.isDepositFlow) {\n setRoute(ROUTES.SELECT_EXTERNAL_AMOUNT, meta);\n } else {\n setRoute(ROUTES.WAITING_EXTERNAL, meta);\n }\n },\n disabled: option.disabled,\n subtitle: option.message,\n }));\n\n return (\n <PageContent>\n <OrderHeader minified show=\"zkp2p\" />\n <OptionsList options={options} />\n </PageContent>\n );\n};\n\nexport default SelectExchange;\n"],"names":[],"mappings":";;;;;;;AASA,MAAM,iBAA2B,MAAM;AACrC,EAAA,MAAM,EAAE,YAAA,EAAc,QAAS,EAAA,GAAI,aAAc,EAAA,CAAA;AACjD,EAAM,MAAA,EAAE,sBAAwB,EAAA,yBAAA,EAA8B,GAAA,YAAA,CAAA;AAC9D,EAAA,MAAM,eAAkB,GAAA,sBAAA,CAAuB,OAAQ,CAAA,GAAA,CAAI,UAAU,CAAA,CAAA;AAErE,EAAA,IAAI,CAAC,eAAiB,EAAA;AACpB,IAAA,4BACG,WACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,WAAY,EAAA,EAAA,QAAA,EAAQ,IAAC,EAAA,IAAA,EAAK,OAAQ,EAAA,CAAA;AAAA,sBACnC,GAAA,CAAC,WAAQ,QAA6B,EAAA,+BAAA,EAAA,CAAA;AAAA,KACxC,EAAA,CAAA,CAAA;AAAA,GAEJ;AAEA,EAAA,MAAM,OAAU,GAAA,eAAA,CAAgB,GAAI,CAAA,CAAC,MAAY,MAAA;AAAA,IAC/C,IAAI,MAAO,CAAA,EAAA;AAAA,IACX,OAAO,MAAO,CAAA,GAAA;AAAA,IACd,KAAA,EAAO,CAAC,MAAA,CAAO,OAAO,CAAA;AAAA,IACtB,SAAS,MAAM;AACb,MAAA,yBAAA,CAA0B,MAAM,CAAA,CAAA;AAChC,MAAA,MAAM,OAAO,EAAE,KAAA,EAAO,cAAgB,EAAA,MAAA,EAAQ,OAAO,EAAG,EAAA,CAAA;AACxD,MAAA,IAAI,aAAa,aAAe,EAAA;AAC9B,QAAS,QAAA,CAAA,MAAA,CAAO,wBAAwB,IAAI,CAAA,CAAA;AAAA,OACvC,MAAA;AACL,QAAS,QAAA,CAAA,MAAA,CAAO,kBAAkB,IAAI,CAAA,CAAA;AAAA,OACxC;AAAA,KACF;AAAA,IACA,UAAU,MAAO,CAAA,QAAA;AAAA,IACjB,UAAU,MAAO,CAAA,OAAA;AAAA,GACjB,CAAA,CAAA,CAAA;AAEF,EAAA,4BACG,WACC,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,WAAY,EAAA,EAAA,QAAA,EAAQ,IAAC,EAAA,IAAA,EAAK,OAAQ,EAAA,CAAA;AAAA,oBACnC,GAAA,CAAC,eAAY,OAAkB,EAAA,CAAA;AAAA,GACjC,EAAA,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/Pages/SelectExchange/index.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { ModalH1, PageContent } from \"../../Common/Modal/styles\";\n\nimport { ROUTES } from \"../../../constants/routes\";\nimport { usePayContext } from \"../../../hooks/usePayContext\";\nimport { OptionsList } from \"../../Common/OptionsList\";\nimport { OrderHeader } from \"../../Common/OrderHeader\";\n\nconst SelectExchange: React.FC = () => {\n const { paymentState, setRoute } = usePayContext();\n const { externalPaymentOptions, setSelectedExternalOption } = paymentState;\n const exchangeOptions = externalPaymentOptions.options.get(\"exchange\");\n\n if (!exchangeOptions) {\n return (\n <PageContent>\n <OrderHeader minified show=\"hideCoin\" />\n <ModalH1>No Exchange options available</ModalH1>\n </PageContent>\n );\n }\n\n const options = exchangeOptions.map((option) => ({\n id: option.id,\n title: option.cta,\n icons: [option.logoURI],\n onClick: () => {\n setSelectedExternalOption(option);\n const meta = { event: \"click-option\", option: option.id };\n if (paymentState.isDepositFlow) {\n setRoute(ROUTES.SELECT_EXTERNAL_AMOUNT, meta);\n } else {\n setRoute(ROUTES.WAITING_EXTERNAL, meta);\n }\n },\n disabled: option.disabled,\n subtitle: option.message,\n }));\n\n return (\n <PageContent>\n <OrderHeader minified show=\"hideCoin\" />\n <OptionsList options={options} />\n </PageContent>\n );\n};\n\nexport default SelectExchange;\n"],"names":[],"mappings":";;;;;;;AASA,MAAM,iBAA2B,MAAM;AACrC,EAAA,MAAM,EAAE,YAAA,EAAc,QAAS,EAAA,GAAI,aAAc,EAAA,CAAA;AACjD,EAAM,MAAA,EAAE,sBAAwB,EAAA,yBAAA,EAA8B,GAAA,YAAA,CAAA;AAC9D,EAAA,MAAM,eAAkB,GAAA,sBAAA,CAAuB,OAAQ,CAAA,GAAA,CAAI,UAAU,CAAA,CAAA;AAErE,EAAA,IAAI,CAAC,eAAiB,EAAA;AACpB,IAAA,4BACG,WACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,WAAY,EAAA,EAAA,QAAA,EAAQ,IAAC,EAAA,IAAA,EAAK,UAAW,EAAA,CAAA;AAAA,sBACtC,GAAA,CAAC,WAAQ,QAA6B,EAAA,+BAAA,EAAA,CAAA;AAAA,KACxC,EAAA,CAAA,CAAA;AAAA,GAEJ;AAEA,EAAA,MAAM,OAAU,GAAA,eAAA,CAAgB,GAAI,CAAA,CAAC,MAAY,MAAA;AAAA,IAC/C,IAAI,MAAO,CAAA,EAAA;AAAA,IACX,OAAO,MAAO,CAAA,GAAA;AAAA,IACd,KAAA,EAAO,CAAC,MAAA,CAAO,OAAO,CAAA;AAAA,IACtB,SAAS,MAAM;AACb,MAAA,yBAAA,CAA0B,MAAM,CAAA,CAAA;AAChC,MAAA,MAAM,OAAO,EAAE,KAAA,EAAO,cAAgB,EAAA,MAAA,EAAQ,OAAO,EAAG,EAAA,CAAA;AACxD,MAAA,IAAI,aAAa,aAAe,EAAA;AAC9B,QAAS,QAAA,CAAA,MAAA,CAAO,wBAAwB,IAAI,CAAA,CAAA;AAAA,OACvC,MAAA;AACL,QAAS,QAAA,CAAA,MAAA,CAAO,kBAAkB,IAAI,CAAA,CAAA;AAAA,OACxC;AAAA,KACF;AAAA,IACA,UAAU,MAAO,CAAA,QAAA;AAAA,IACjB,UAAU,MAAO,CAAA,OAAA;AAAA,GACjB,CAAA,CAAA,CAAA;AAEF,EAAA,4BACG,WACC,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,WAAY,EAAA,EAAA,QAAA,EAAQ,IAAC,EAAA,IAAA,EAAK,UAAW,EAAA,CAAA;AAAA,oBACtC,GAAA,CAAC,eAAY,OAAkB,EAAA,CAAA;AAAA,GACjC,EAAA,CAAA,CAAA;AAEJ;;;;"}
@@ -29,7 +29,6 @@ function SelectMethod() {
29
29
  const {
30
30
  connected: isSolanaConnected,
31
31
  wallet: solanaWallet,
32
- wallets: solanaWallets,
33
32
  disconnect: disconnectSolana,
34
33
  publicKey
35
34
  } = useWallet();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/Pages/SelectMethod/index.tsx"],"sourcesContent":["import React from \"react\";\nimport { ROUTES } from \"../../../constants/routes\";\nimport { usePayContext } from \"../../../hooks/usePayContext\";\n\nimport { PageContent } from \"../../Common/Modal/styles\";\n\nimport { getAddressContraction } from \"@daimo/pay-common\";\nimport { useWallet } from \"@solana/wallet-adapter-react\";\nimport { Connector, useAccount, useDisconnect } from \"wagmi\";\nimport { Base, Ethereum, Solana, Tron } from \"../../../assets/chains\";\nimport {\n MetaMask,\n Phantom,\n Rabby,\n Rainbow,\n Trust,\n WalletIcon,\n} from \"../../../assets/logos\";\nimport useIsMobile from \"../../../hooks/useIsMobile\";\nimport useLocales from \"../../../hooks/useLocales\";\nimport { flattenChildren } from \"../../../utils\";\nimport { walletConfigs } from \"../../../wallets/walletConfigs\";\nimport { Option, OptionsList } from \"../../Common/OptionsList\";\nimport { OrderHeader } from \"../../Common/OrderHeader\";\nimport PoweredByFooter from \"../../Common/PoweredByFooter\";\nimport WalletChainLogo from \"../../Common/WalletChainLogo\";\n\nexport default function SelectMethod() {\n const locales = useLocales();\n const payWithString = flattenChildren(locales.payWith).join(\"\");\n const { isMobile, isIOS, isAndroid } = useIsMobile();\n\n const {\n address,\n chain,\n isConnected: isEthConnected,\n connector,\n } = useAccount();\n const {\n connected: isSolanaConnected,\n wallet: solanaWallet,\n wallets: solanaWallets,\n disconnect: disconnectSolana,\n publicKey,\n } = useWallet();\n const { setRoute, paymentState, log, disableMobileInjector } =\n usePayContext();\n const { showSolanaPaymentMethod } = paymentState;\n const { disconnectAsync } = useDisconnect();\n\n const { externalPaymentOptions, senderEnsName } = paymentState;\n\n // Decide whether to show the connected eth account, solana account, or both.\n // Desktop: Always show connected wallets when available\n // Mobile: Only show connected wallets when mobile injector is enabled (!disableMobileInjector)\n const showConnectedEth =\n isEthConnected && (!isMobile || !disableMobileInjector);\n const showConnectedSolana =\n isSolanaConnected && (!isMobile || !disableMobileInjector);\n\n const getConnectedWalletOptions = () => {\n const showChainLogo =\n isEthConnected && isSolanaConnected && showSolanaPaymentMethod;\n\n const connectedOptions: Option[] = [];\n\n if (showConnectedEth) {\n const ethWalletDisplayName =\n senderEnsName ?? (address ? getAddressContraction(address) : \"wallet\");\n\n // Prefer icon from walletConfigs if there's a name match, otherwise fall back\n // to the connector-provided icon, and finally to the generic WalletIcon.\n let walletIcon: JSX.Element;\n\n const matchedConfig = Object.values(walletConfigs).find((cfg) => {\n if (!cfg.name || !connector?.name) return false;\n const cfgName = cfg.name.toLowerCase();\n const connName = connector.name.toLowerCase();\n return cfgName.includes(connName) || connName.includes(cfgName);\n });\n\n if (matchedConfig?.icon) {\n walletIcon =\n typeof matchedConfig.icon === \"string\" ? (\n <img src={matchedConfig.icon} alt={matchedConfig.name} />\n ) : (\n (matchedConfig.icon as JSX.Element)\n );\n } else if (connector?.icon) {\n walletIcon = (\n <div style={{ borderRadius: \"22.5%\", overflow: \"hidden\" }}>\n <img src={connector.icon} alt={connector.name} />\n </div>\n );\n } else {\n walletIcon = <WalletIcon />;\n }\n\n const connectedEthWalletOption = {\n id: \"connectedWallet\",\n title: `${payWithString} ${ethWalletDisplayName}`,\n icons: [\n <WalletChainLogo\n key=\"eth\"\n walletIcon={walletIcon}\n walletName={connector?.name || \"Wallet\"}\n chainLogo={showChainLogo ? <Ethereum /> : null}\n />,\n ],\n onClick: () => {\n paymentState.setTokenMode(\"evm\");\n setRoute(ROUTES.SELECT_TOKEN, {\n event: \"click-wallet\",\n walletId: connector?.id,\n chainId: chain?.id,\n address: address,\n });\n },\n };\n connectedOptions.push(connectedEthWalletOption);\n }\n\n if (showConnectedSolana && showSolanaPaymentMethod) {\n const solWalletDisplayName = getAddressContraction(\n publicKey?.toBase58() ?? \"\",\n );\n\n // Prefer icon from walletConfigs if available\n let solWalletIcon: React.ReactNode;\n const solMatchedConfig = Object.values(walletConfigs).find((cfg) => {\n if (!cfg.name) return false;\n const cfgName = cfg.name.toLowerCase();\n const solName = solanaWallet?.adapter.name.toLowerCase() || \"\";\n return cfgName.includes(solName) || solName.includes(cfgName);\n });\n\n if (solMatchedConfig?.icon) {\n solWalletIcon =\n typeof solMatchedConfig.icon === \"string\" ? (\n <img src={solMatchedConfig.icon} alt={solMatchedConfig.name} />\n ) : (\n (solMatchedConfig.icon as JSX.Element)\n );\n } else if (solanaWallet?.adapter.icon) {\n solWalletIcon = solanaWallet.adapter.icon;\n } else {\n solWalletIcon = <Solana />;\n }\n\n const connectedSolWalletOption = {\n id: \"connectedSolanaWallet\",\n title: `${payWithString} ${solWalletDisplayName}`,\n icons: [\n <WalletChainLogo\n key=\"sol-wallet\"\n walletIcon={solWalletIcon}\n walletName={solanaWallet?.adapter.name || \"Wallet\"}\n chainLogo={showChainLogo && <Solana />}\n />,\n ],\n onClick: () => {\n paymentState.setTokenMode(\"solana\");\n setRoute(ROUTES.SELECT_TOKEN, {\n event: \"click-wallet\",\n walletId: solanaWallet?.adapter.name,\n chainId: \"solana\",\n address: publicKey?.toBase58(),\n });\n },\n };\n\n connectedOptions.push(connectedSolWalletOption);\n }\n\n return connectedOptions;\n };\n\n const connectedWalletOptions = getConnectedWalletOptions();\n const unconnectedWalletOption = {\n id: \"unconnectedWallet\",\n title:\n isEthConnected || isSolanaConnected\n ? locales.payWithAnotherWallet\n : locales.payWithWallet,\n icons: getBestUnconnectedWalletIcons(connector, isMobile),\n onClick: async () => {\n await disconnectAsync();\n await disconnectSolana();\n setRoute(ROUTES.CONNECTORS);\n },\n };\n\n const options: {\n id: string;\n title: string;\n subtitle?: string;\n icons: (React.ReactNode | string)[];\n onClick: () => void;\n disabled?: boolean;\n }[] = [];\n options.push(...connectedWalletOptions);\n options.push(unconnectedWalletOption);\n\n log(\n `[SELECT_METHOD] loading: ${externalPaymentOptions.loading}, options: ${JSON.stringify(\n externalPaymentOptions.options,\n )}`,\n );\n\n // Pay with Exchange\n const exchangeOptions = externalPaymentOptions.options.get(\"exchange\") ?? [];\n\n const showExchangePaymentMethod = exchangeOptions.length > 0;\n if (showExchangePaymentMethod) {\n options.push({\n id: \"exchange\",\n title: locales.payWithExchange,\n icons: exchangeOptions.slice(0, 3).map((option) => option.logoURI),\n onClick: () => {\n setRoute(ROUTES.SELECT_EXCHANGE, {\n event: \"click-option\",\n option: \"exchange\",\n });\n },\n });\n }\n\n const depositAddressOption = getDepositAddressOption(setRoute, locales);\n options.push(depositAddressOption);\n\n // ZKP2P is currently only available on desktop. Check if the user is on\n // desktop and if any ZKP2P options are available.\n const zkp2pOptions = externalPaymentOptions.options.get(\"zkp2p\") ?? [];\n const showZkp2pPaymentMethod = !isMobile && zkp2pOptions.length > 0;\n if (showZkp2pPaymentMethod) {\n options.push({\n id: \"ZKP2P\",\n title: locales.payViaPaymentApp,\n icons: zkp2pOptions.slice(0, 2).map((option) => option.logoURI),\n onClick: () => {\n setRoute(ROUTES.SELECT_ZKP2P);\n },\n });\n }\n\n // Order disabled to bottom\n options.sort((a, b) => (a.disabled ? 1 : 0) - (b.disabled ? 1 : 0));\n\n return (\n <PageContent>\n <OrderHeader />\n\n <OptionsList\n requiredSkeletons={isMobile ? 4 : 3} // TODO: programmatically determine skeletons to best avoid layout shifts\n isLoading={externalPaymentOptions.loading}\n options={externalPaymentOptions.loading ? [] : options}\n />\n <PoweredByFooter />\n </PageContent>\n );\n}\n\n// Get 3 icons, skipping the one that is already connected\nfunction getBestUnconnectedWalletIcons(\n connector: Connector | undefined,\n isMobile: boolean,\n) {\n const icons: JSX.Element[] = [];\n const strippedId = connector?.id.toLowerCase(); // some connector ids can have weird casing and or suffixes and prefixes\n const [isRainbow, isPhantom, isRabby, isMetaMask] = [\n strippedId?.includes(\"rainbow\"),\n strippedId?.includes(\"trust\"),\n strippedId?.includes(\"phantom\"),\n strippedId?.includes(\"coinbase\"),\n strippedId?.includes(\"metamask\"),\n strippedId?.includes(\"rabby\"),\n strippedId?.includes(\"metamask\"),\n ];\n\n if (isMobile) {\n icons.push(<MetaMask />);\n icons.push(<Trust background />);\n icons.push(<Rainbow />);\n } else {\n if (!isMetaMask) icons.push(<MetaMask />);\n if (!isRainbow) icons.push(<Rainbow />);\n if (!isPhantom) icons.push(<Phantom />);\n if (!isRabby && icons.length < 3) icons.push(<Rabby />);\n }\n\n return icons;\n}\n\nfunction getDepositAddressOption(\n setRoute: (route: ROUTES, data?: Record<string, any>) => void,\n locales: ReturnType<typeof useLocales>,\n) {\n return {\n id: \"depositAddress\",\n title: locales.payToAddress,\n icons: [<Ethereum key=\"eth\" />, <Tron key=\"tron\" />, <Base key=\"base\" />],\n onClick: () => {\n setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN);\n },\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/Pages/SelectMethod/index.tsx"],"sourcesContent":["import React from \"react\";\nimport { ROUTES } from \"../../../constants/routes\";\nimport { usePayContext } from \"../../../hooks/usePayContext\";\n\nimport { PageContent } from \"../../Common/Modal/styles\";\n\nimport { getAddressContraction } from \"@daimo/pay-common\";\nimport { useWallet } from \"@solana/wallet-adapter-react\";\nimport { Connector, useAccount, useDisconnect } from \"wagmi\";\nimport { Base, Ethereum, Solana, Tron } from \"../../../assets/chains\";\nimport {\n MetaMask,\n Phantom,\n Rabby,\n Rainbow,\n Trust,\n WalletIcon,\n} from \"../../../assets/logos\";\nimport useIsMobile from \"../../../hooks/useIsMobile\";\nimport useLocales from \"../../../hooks/useLocales\";\nimport { flattenChildren } from \"../../../utils\";\nimport { walletConfigs } from \"../../../wallets/walletConfigs\";\nimport { Option, OptionsList } from \"../../Common/OptionsList\";\nimport { OrderHeader } from \"../../Common/OrderHeader\";\nimport PoweredByFooter from \"../../Common/PoweredByFooter\";\nimport WalletChainLogo from \"../../Common/WalletChainLogo\";\n\nexport default function SelectMethod() {\n const locales = useLocales();\n const payWithString = flattenChildren(locales.payWith).join(\"\");\n const { isMobile, isIOS, isAndroid } = useIsMobile();\n\n const {\n address,\n chain,\n isConnected: isEthConnected,\n connector,\n } = useAccount();\n const {\n connected: isSolanaConnected,\n wallet: solanaWallet,\n disconnect: disconnectSolana,\n publicKey,\n } = useWallet();\n const { setRoute, paymentState, log, disableMobileInjector } =\n usePayContext();\n const { showSolanaPaymentMethod } = paymentState;\n const { disconnectAsync } = useDisconnect();\n\n const { externalPaymentOptions, senderEnsName } = paymentState;\n\n // Decide whether to show the connected eth account, solana account, or both.\n // Desktop: Always show connected wallets when available\n // Mobile: Only show connected wallets when mobile injector is enabled (!disableMobileInjector)\n const showConnectedEth =\n isEthConnected && (!isMobile || !disableMobileInjector);\n const showConnectedSolana =\n isSolanaConnected && (!isMobile || !disableMobileInjector);\n\n const getConnectedWalletOptions = () => {\n const showChainLogo =\n isEthConnected && isSolanaConnected && showSolanaPaymentMethod;\n\n const connectedOptions: Option[] = [];\n\n if (showConnectedEth) {\n const ethWalletDisplayName =\n senderEnsName ?? (address ? getAddressContraction(address) : \"wallet\");\n\n // Prefer icon from walletConfigs if there's a name match, otherwise fall back\n // to the connector-provided icon, and finally to the generic WalletIcon.\n let walletIcon: JSX.Element;\n\n const matchedConfig = Object.values(walletConfigs).find((cfg) => {\n if (!cfg.name || !connector?.name) return false;\n const cfgName = cfg.name.toLowerCase();\n const connName = connector.name.toLowerCase();\n return cfgName.includes(connName) || connName.includes(cfgName);\n });\n\n if (matchedConfig?.icon) {\n walletIcon =\n typeof matchedConfig.icon === \"string\" ? (\n <img src={matchedConfig.icon} alt={matchedConfig.name} />\n ) : (\n (matchedConfig.icon as JSX.Element)\n );\n } else if (connector?.icon) {\n walletIcon = (\n <div style={{ borderRadius: \"22.5%\", overflow: \"hidden\" }}>\n <img src={connector.icon} alt={connector.name} />\n </div>\n );\n } else {\n walletIcon = <WalletIcon />;\n }\n\n const connectedEthWalletOption = {\n id: \"connectedWallet\",\n title: `${payWithString} ${ethWalletDisplayName}`,\n icons: [\n <WalletChainLogo\n key=\"eth\"\n walletIcon={walletIcon}\n walletName={connector?.name || \"Wallet\"}\n chainLogo={showChainLogo ? <Ethereum /> : null}\n />,\n ],\n onClick: () => {\n paymentState.setTokenMode(\"evm\");\n setRoute(ROUTES.SELECT_TOKEN, {\n event: \"click-wallet\",\n walletId: connector?.id,\n chainId: chain?.id,\n address: address,\n });\n },\n };\n connectedOptions.push(connectedEthWalletOption);\n }\n\n if (showConnectedSolana && showSolanaPaymentMethod) {\n const solWalletDisplayName = getAddressContraction(\n publicKey?.toBase58() ?? \"\",\n );\n\n // Prefer icon from walletConfigs if available\n let solWalletIcon: React.ReactNode;\n const solMatchedConfig = Object.values(walletConfigs).find((cfg) => {\n if (!cfg.name) return false;\n const cfgName = cfg.name.toLowerCase();\n const solName = solanaWallet?.adapter.name.toLowerCase() || \"\";\n return cfgName.includes(solName) || solName.includes(cfgName);\n });\n\n if (solMatchedConfig?.icon) {\n solWalletIcon =\n typeof solMatchedConfig.icon === \"string\" ? (\n <img src={solMatchedConfig.icon} alt={solMatchedConfig.name} />\n ) : (\n (solMatchedConfig.icon as JSX.Element)\n );\n } else if (solanaWallet?.adapter.icon) {\n solWalletIcon = solanaWallet.adapter.icon;\n } else {\n solWalletIcon = <Solana />;\n }\n\n const connectedSolWalletOption = {\n id: \"connectedSolanaWallet\",\n title: `${payWithString} ${solWalletDisplayName}`,\n icons: [\n <WalletChainLogo\n key=\"sol-wallet\"\n walletIcon={solWalletIcon}\n walletName={solanaWallet?.adapter.name || \"Wallet\"}\n chainLogo={showChainLogo && <Solana />}\n />,\n ],\n onClick: () => {\n paymentState.setTokenMode(\"solana\");\n setRoute(ROUTES.SELECT_TOKEN, {\n event: \"click-wallet\",\n walletId: solanaWallet?.adapter.name,\n chainId: \"solana\",\n address: publicKey?.toBase58(),\n });\n },\n };\n\n connectedOptions.push(connectedSolWalletOption);\n }\n\n return connectedOptions;\n };\n\n const connectedWalletOptions = getConnectedWalletOptions();\n const unconnectedWalletOption = {\n id: \"unconnectedWallet\",\n title:\n isEthConnected || isSolanaConnected\n ? locales.payWithAnotherWallet\n : locales.payWithWallet,\n icons: getBestUnconnectedWalletIcons(connector, isMobile),\n onClick: async () => {\n await disconnectAsync();\n await disconnectSolana();\n setRoute(ROUTES.CONNECTORS);\n },\n };\n\n const options: {\n id: string;\n title: string;\n subtitle?: string;\n icons: (React.ReactNode | string)[];\n onClick: () => void;\n disabled?: boolean;\n }[] = [];\n options.push(...connectedWalletOptions);\n options.push(unconnectedWalletOption);\n\n log(\n `[SELECT_METHOD] loading: ${externalPaymentOptions.loading}, options: ${JSON.stringify(\n externalPaymentOptions.options,\n )}`,\n );\n\n // Pay with Exchange\n const exchangeOptions = externalPaymentOptions.options.get(\"exchange\") ?? [];\n\n const showExchangePaymentMethod = exchangeOptions.length > 0;\n if (showExchangePaymentMethod) {\n options.push({\n id: \"exchange\",\n title: locales.payWithExchange,\n icons: exchangeOptions.slice(0, 3).map((option) => option.logoURI),\n onClick: () => {\n setRoute(ROUTES.SELECT_EXCHANGE, {\n event: \"click-option\",\n option: \"exchange\",\n });\n },\n });\n }\n\n const depositAddressOption = getDepositAddressOption(setRoute, locales);\n options.push(depositAddressOption);\n\n // ZKP2P is currently only available on desktop. Check if the user is on\n // desktop and if any ZKP2P options are available.\n const zkp2pOptions = externalPaymentOptions.options.get(\"zkp2p\") ?? [];\n const showZkp2pPaymentMethod = !isMobile && zkp2pOptions.length > 0;\n if (showZkp2pPaymentMethod) {\n options.push({\n id: \"ZKP2P\",\n title: locales.payViaPaymentApp,\n icons: zkp2pOptions.slice(0, 2).map((option) => option.logoURI),\n onClick: () => {\n setRoute(ROUTES.SELECT_ZKP2P);\n },\n });\n }\n\n // Order disabled to bottom\n options.sort((a, b) => (a.disabled ? 1 : 0) - (b.disabled ? 1 : 0));\n\n return (\n <PageContent>\n <OrderHeader />\n\n <OptionsList\n requiredSkeletons={isMobile ? 4 : 3} // TODO: programmatically determine skeletons to best avoid layout shifts\n isLoading={externalPaymentOptions.loading}\n options={externalPaymentOptions.loading ? [] : options}\n />\n <PoweredByFooter />\n </PageContent>\n );\n}\n\n// Get 3 icons, skipping the one that is already connected\nfunction getBestUnconnectedWalletIcons(\n connector: Connector | undefined,\n isMobile: boolean,\n) {\n const icons: JSX.Element[] = [];\n const strippedId = connector?.id.toLowerCase(); // some connector ids can have weird casing and or suffixes and prefixes\n const [isRainbow, isPhantom, isRabby, isMetaMask] = [\n strippedId?.includes(\"rainbow\"),\n strippedId?.includes(\"trust\"),\n strippedId?.includes(\"phantom\"),\n strippedId?.includes(\"coinbase\"),\n strippedId?.includes(\"metamask\"),\n strippedId?.includes(\"rabby\"),\n strippedId?.includes(\"metamask\"),\n ];\n\n if (isMobile) {\n icons.push(<MetaMask />);\n icons.push(<Trust background />);\n icons.push(<Rainbow />);\n } else {\n if (!isMetaMask) icons.push(<MetaMask />);\n if (!isRainbow) icons.push(<Rainbow />);\n if (!isPhantom) icons.push(<Phantom />);\n if (!isRabby && icons.length < 3) icons.push(<Rabby />);\n }\n\n return icons;\n}\n\nfunction getDepositAddressOption(\n setRoute: (route: ROUTES, data?: Record<string, any>) => void,\n locales: ReturnType<typeof useLocales>,\n) {\n return {\n id: \"depositAddress\",\n title: locales.payToAddress,\n icons: [<Ethereum key=\"eth\" />, <Tron key=\"tron\" />, <Base key=\"base\" />],\n onClick: () => {\n setRoute(ROUTES.SELECT_DEPOSIT_ADDRESS_CHAIN);\n },\n };\n}\n"],"names":[],"mappings":"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"}
@@ -23,7 +23,7 @@ function SelectToken() {
23
23
  const solanaWallets = useWallet();
24
24
  const isSolConnected = solanaWallets.connected;
25
25
  const isConnected = isEvmConnected || isSolConnected;
26
- const isAnotherMethodButtonVisible = optionsList.length > 0 && tokenMode !== "all";
26
+ const isAnotherMethodButtonVisible = optionsList.length > 0 && tokenMode !== "showCoin";
27
27
  return /* @__PURE__ */ jsxs(PageContent, { children: [
28
28
  /* @__PURE__ */ jsx(OrderHeader, { minified: true, show: tokenMode }),
29
29
  /* @__PURE__ */ jsx(
@@ -38,7 +38,7 @@ function SelectToken() {
38
38
  }
39
39
  ),
40
40
  !isLoading && isConnected && optionsList.length === 0 && /* @__PURE__ */ jsx(InsufficientBalance, {}),
41
- !isLoading && !isConnected && tokenMode === "all" && /* @__PURE__ */ jsx(ConnectButton, {}),
41
+ !isLoading && !isConnected && tokenMode === "showCoin" && /* @__PURE__ */ jsx(ConnectButton, {}),
42
42
  isAnotherMethodButtonVisible && /* @__PURE__ */ jsx(SelectAnotherMethodButton, {})
43
43
  ] });
44
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/Pages/SelectToken/index.tsx"],"sourcesContent":["import { useWallet } from \"@solana/wallet-adapter-react\";\nimport { injected, useAccount } from \"wagmi\";\nimport { Ethereum, Solana } from \"../../../assets/chains\";\nimport defaultTheme from \"../../../constants/defaultTheme\";\nimport { useConnect } from \"../../../hooks/useConnect\";\nimport useIsMobile from \"../../../hooks/useIsMobile\";\nimport useLocales from \"../../../hooks/useLocales\";\nimport { usePayContext } from \"../../../hooks/usePayContext\";\nimport { useTokenOptions } from \"../../../hooks/useTokenOptions\";\nimport { ModalContent, ModalH1, PageContent } from \"../../Common/Modal/styles\";\nimport { OptionsList } from \"../../Common/OptionsList\";\nimport { OrderHeader } from \"../../Common/OrderHeader\";\nimport SelectAnotherMethodButton from \"../../Common/SelectAnotherMethodButton\";\n\nexport default function SelectToken() {\n const { isMobile } = useIsMobile();\n const isMobileFormat =\n isMobile || window?.innerWidth < defaultTheme.mobileWidth;\n\n const { paymentState } = usePayContext();\n const { tokenMode } = paymentState;\n const { optionsList, isLoading } = useTokenOptions(tokenMode);\n const { isConnected: isEvmConnected } = useAccount();\n\n const solanaWallets = useWallet();\n const isSolConnected = solanaWallets.connected;\n const isConnected = isEvmConnected || isSolConnected;\n\n const isAnotherMethodButtonVisible =\n optionsList.length > 0 && tokenMode !== \"all\";\n\n return (\n <PageContent>\n <OrderHeader minified show={tokenMode} />\n <OptionsList\n requiredSkeletons={4}\n isLoading={isLoading}\n options={optionsList}\n scrollHeight={\n isAnotherMethodButtonVisible && isMobileFormat ? 225 : 300\n }\n orDivider={isAnotherMethodButtonVisible}\n hideBottomLine={!isAnotherMethodButtonVisible}\n />\n {!isLoading && isConnected && optionsList.length === 0 && (\n <InsufficientBalance />\n )}\n {!isLoading && !isConnected && tokenMode === \"all\" && <ConnectButton />}\n {isAnotherMethodButtonVisible && <SelectAnotherMethodButton />}\n </PageContent>\n );\n}\n\nfunction InsufficientBalance() {\n const locales = useLocales();\n return (\n <ModalContent\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n paddingTop: 16,\n paddingBottom: 16,\n }}\n >\n <ModalH1>{locales.insufficientBalance}</ModalH1>\n <SelectAnotherMethodButton />\n </ModalContent>\n );\n}\n\nfunction ConnectButton() {\n const locales = useLocales();\n const { connect } = useConnect();\n const solanaWallets = useWallet();\n // On Android, filter out the Android Intent deeplink fake wallet.\n const filteredWallets = solanaWallets.wallets.filter(\n (w) => w.adapter.name !== \"Mobile Wallet Adapter\",\n );\n const hasSolanaWallet = filteredWallets.length > 0;\n\n const icons = [<Ethereum key=\"ethereum\" />];\n if (hasSolanaWallet) {\n icons.push(<Solana key=\"solana\" />);\n }\n\n const onClick = () => {\n connect({\n connector: injected(),\n });\n if (hasSolanaWallet) {\n if (solanaWallets.wallet == null) {\n solanaWallets.select(solanaWallets.wallets[0].adapter.name);\n }\n solanaWallets.connect();\n }\n };\n\n const connectOption = {\n id: \"connect-wallet\",\n title: locales.connectWallet,\n icons,\n onClick,\n };\n\n return <OptionsList options={[connectOption]} />;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/Pages/SelectToken/index.tsx"],"sourcesContent":["import { useWallet } from \"@solana/wallet-adapter-react\";\nimport { injected, useAccount } from \"wagmi\";\nimport { Ethereum, Solana } from \"../../../assets/chains\";\nimport defaultTheme from \"../../../constants/defaultTheme\";\nimport { useConnect } from \"../../../hooks/useConnect\";\nimport useIsMobile from \"../../../hooks/useIsMobile\";\nimport useLocales from \"../../../hooks/useLocales\";\nimport { usePayContext } from \"../../../hooks/usePayContext\";\nimport { useTokenOptions } from \"../../../hooks/useTokenOptions\";\nimport { ModalContent, ModalH1, PageContent } from \"../../Common/Modal/styles\";\nimport { OptionsList } from \"../../Common/OptionsList\";\nimport { OrderHeader } from \"../../Common/OrderHeader\";\nimport SelectAnotherMethodButton from \"../../Common/SelectAnotherMethodButton\";\n\nexport default function SelectToken() {\n const { isMobile } = useIsMobile();\n const isMobileFormat =\n isMobile || window?.innerWidth < defaultTheme.mobileWidth;\n\n const { paymentState } = usePayContext();\n const { tokenMode } = paymentState;\n const { optionsList, isLoading } = useTokenOptions(tokenMode);\n const { isConnected: isEvmConnected } = useAccount();\n\n const solanaWallets = useWallet();\n const isSolConnected = solanaWallets.connected;\n const isConnected = isEvmConnected || isSolConnected;\n\n const isAnotherMethodButtonVisible =\n optionsList.length > 0 && tokenMode !== \"showCoin\";\n\n return (\n <PageContent>\n <OrderHeader minified show={tokenMode} />\n <OptionsList\n requiredSkeletons={4}\n isLoading={isLoading}\n options={optionsList}\n scrollHeight={\n isAnotherMethodButtonVisible && isMobileFormat ? 225 : 300\n }\n orDivider={isAnotherMethodButtonVisible}\n hideBottomLine={!isAnotherMethodButtonVisible}\n />\n {!isLoading && isConnected && optionsList.length === 0 && (\n <InsufficientBalance />\n )}\n {!isLoading && !isConnected && tokenMode === \"showCoin\" && (\n <ConnectButton />\n )}\n {isAnotherMethodButtonVisible && <SelectAnotherMethodButton />}\n </PageContent>\n );\n}\n\nfunction InsufficientBalance() {\n const locales = useLocales();\n return (\n <ModalContent\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n paddingTop: 16,\n paddingBottom: 16,\n }}\n >\n <ModalH1>{locales.insufficientBalance}</ModalH1>\n <SelectAnotherMethodButton />\n </ModalContent>\n );\n}\n\nfunction ConnectButton() {\n const locales = useLocales();\n const { connect } = useConnect();\n const solanaWallets = useWallet();\n // On Android, filter out the Android Intent deeplink fake wallet.\n const filteredWallets = solanaWallets.wallets.filter(\n (w) => w.adapter.name !== \"Mobile Wallet Adapter\",\n );\n const hasSolanaWallet = filteredWallets.length > 0;\n\n const icons = [<Ethereum key=\"ethereum\" />];\n if (hasSolanaWallet) {\n icons.push(<Solana key=\"solana\" />);\n }\n\n const onClick = () => {\n connect({\n connector: injected(),\n });\n if (hasSolanaWallet) {\n if (solanaWallets.wallet == null) {\n solanaWallets.select(solanaWallets.wallets[0].adapter.name);\n }\n solanaWallets.connect();\n }\n };\n\n const connectOption = {\n id: \"connect-wallet\",\n title: locales.connectWallet,\n icons,\n onClick,\n };\n\n return <OptionsList options={[connectOption]} />;\n}\n"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ const SelectZKP = () => {
11
11
  const zkp2pOptions = externalPaymentOptions.options.get("zkp2p");
12
12
  if (!zkp2pOptions) {
13
13
  return /* @__PURE__ */ jsxs(PageContent, { children: [
14
- /* @__PURE__ */ jsx(OrderHeader, { minified: true, show: "zkp2p" }),
14
+ /* @__PURE__ */ jsx(OrderHeader, { minified: true, show: "hideCoin" }),
15
15
  /* @__PURE__ */ jsx(ModalH1, { children: "No ZKP2P options available" })
16
16
  ] });
17
17
  }
@@ -32,7 +32,7 @@ const SelectZKP = () => {
32
32
  subtitle: option.message
33
33
  }));
34
34
  return /* @__PURE__ */ jsxs(PageContent, { children: [
35
- /* @__PURE__ */ jsx(OrderHeader, { minified: true, show: "zkp2p" }),
35
+ /* @__PURE__ */ jsx(OrderHeader, { minified: true, show: "hideCoin" }),
36
36
  /* @__PURE__ */ jsx(OptionsList, { options })
37
37
  ] });
38
38
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/Pages/SelectZKP/index.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { ModalH1, PageContent } from \"../../Common/Modal/styles\";\n\nimport { ROUTES } from \"../../../constants/routes\";\nimport { usePayContext } from \"../../../hooks/usePayContext\";\nimport { OptionsList } from \"../../Common/OptionsList\";\nimport { OrderHeader } from \"../../Common/OrderHeader\";\n\nconst SelectZKP: React.FC = () => {\n const { paymentState, setRoute } = usePayContext();\n const { externalPaymentOptions, setSelectedExternalOption } = paymentState;\n const zkp2pOptions = externalPaymentOptions.options.get(\"zkp2p\");\n\n if (!zkp2pOptions) {\n return (\n <PageContent>\n <OrderHeader minified show=\"zkp2p\" />\n <ModalH1>No ZKP2P options available</ModalH1>\n </PageContent>\n );\n }\n\n const options = zkp2pOptions.map((option) => ({\n id: option.id,\n title: option.cta,\n icons: [option.logoURI],\n onClick: () => {\n setSelectedExternalOption(option);\n const meta = { event: \"click-option\", option: option.id };\n if (paymentState.isDepositFlow) {\n setRoute(ROUTES.SELECT_EXTERNAL_AMOUNT, meta);\n } else {\n setRoute(ROUTES.WAITING_EXTERNAL, meta);\n }\n },\n disabled: option.disabled,\n subtitle: option.message,\n }));\n\n return (\n <PageContent>\n <OrderHeader minified show=\"zkp2p\" />\n <OptionsList options={options} />\n </PageContent>\n );\n};\n\nexport default SelectZKP;\n"],"names":[],"mappings":";;;;;;;AASA,MAAM,YAAsB,MAAM;AAChC,EAAA,MAAM,EAAE,YAAA,EAAc,QAAS,EAAA,GAAI,aAAc,EAAA,CAAA;AACjD,EAAM,MAAA,EAAE,sBAAwB,EAAA,yBAAA,EAA8B,GAAA,YAAA,CAAA;AAC9D,EAAA,MAAM,YAAe,GAAA,sBAAA,CAAuB,OAAQ,CAAA,GAAA,CAAI,OAAO,CAAA,CAAA;AAE/D,EAAA,IAAI,CAAC,YAAc,EAAA;AACjB,IAAA,4BACG,WACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,WAAY,EAAA,EAAA,QAAA,EAAQ,IAAC,EAAA,IAAA,EAAK,OAAQ,EAAA,CAAA;AAAA,sBACnC,GAAA,CAAC,WAAQ,QAA0B,EAAA,4BAAA,EAAA,CAAA;AAAA,KACrC,EAAA,CAAA,CAAA;AAAA,GAEJ;AAEA,EAAA,MAAM,OAAU,GAAA,YAAA,CAAa,GAAI,CAAA,CAAC,MAAY,MAAA;AAAA,IAC5C,IAAI,MAAO,CAAA,EAAA;AAAA,IACX,OAAO,MAAO,CAAA,GAAA;AAAA,IACd,KAAA,EAAO,CAAC,MAAA,CAAO,OAAO,CAAA;AAAA,IACtB,SAAS,MAAM;AACb,MAAA,yBAAA,CAA0B,MAAM,CAAA,CAAA;AAChC,MAAA,MAAM,OAAO,EAAE,KAAA,EAAO,cAAgB,EAAA,MAAA,EAAQ,OAAO,EAAG,EAAA,CAAA;AACxD,MAAA,IAAI,aAAa,aAAe,EAAA;AAC9B,QAAS,QAAA,CAAA,MAAA,CAAO,wBAAwB,IAAI,CAAA,CAAA;AAAA,OACvC,MAAA;AACL,QAAS,QAAA,CAAA,MAAA,CAAO,kBAAkB,IAAI,CAAA,CAAA;AAAA,OACxC;AAAA,KACF;AAAA,IACA,UAAU,MAAO,CAAA,QAAA;AAAA,IACjB,UAAU,MAAO,CAAA,OAAA;AAAA,GACjB,CAAA,CAAA,CAAA;AAEF,EAAA,4BACG,WACC,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,WAAY,EAAA,EAAA,QAAA,EAAQ,IAAC,EAAA,IAAA,EAAK,OAAQ,EAAA,CAAA;AAAA,oBACnC,GAAA,CAAC,eAAY,OAAkB,EAAA,CAAA;AAAA,GACjC,EAAA,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/Pages/SelectZKP/index.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { ModalH1, PageContent } from \"../../Common/Modal/styles\";\n\nimport { ROUTES } from \"../../../constants/routes\";\nimport { usePayContext } from \"../../../hooks/usePayContext\";\nimport { OptionsList } from \"../../Common/OptionsList\";\nimport { OrderHeader } from \"../../Common/OrderHeader\";\n\nconst SelectZKP: React.FC = () => {\n const { paymentState, setRoute } = usePayContext();\n const { externalPaymentOptions, setSelectedExternalOption } = paymentState;\n const zkp2pOptions = externalPaymentOptions.options.get(\"zkp2p\");\n\n if (!zkp2pOptions) {\n return (\n <PageContent>\n <OrderHeader minified show=\"hideCoin\" />\n <ModalH1>No ZKP2P options available</ModalH1>\n </PageContent>\n );\n }\n\n const options = zkp2pOptions.map((option) => ({\n id: option.id,\n title: option.cta,\n icons: [option.logoURI],\n onClick: () => {\n setSelectedExternalOption(option);\n const meta = { event: \"click-option\", option: option.id };\n if (paymentState.isDepositFlow) {\n setRoute(ROUTES.SELECT_EXTERNAL_AMOUNT, meta);\n } else {\n setRoute(ROUTES.WAITING_EXTERNAL, meta);\n }\n },\n disabled: option.disabled,\n subtitle: option.message,\n }));\n\n return (\n <PageContent>\n <OrderHeader minified show=\"hideCoin\" />\n <OptionsList options={options} />\n </PageContent>\n );\n};\n\nexport default SelectZKP;\n"],"names":[],"mappings":";;;;;;;AASA,MAAM,YAAsB,MAAM;AAChC,EAAA,MAAM,EAAE,YAAA,EAAc,QAAS,EAAA,GAAI,aAAc,EAAA,CAAA;AACjD,EAAM,MAAA,EAAE,sBAAwB,EAAA,yBAAA,EAA8B,GAAA,YAAA,CAAA;AAC9D,EAAA,MAAM,YAAe,GAAA,sBAAA,CAAuB,OAAQ,CAAA,GAAA,CAAI,OAAO,CAAA,CAAA;AAE/D,EAAA,IAAI,CAAC,YAAc,EAAA;AACjB,IAAA,4BACG,WACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,WAAY,EAAA,EAAA,QAAA,EAAQ,IAAC,EAAA,IAAA,EAAK,UAAW,EAAA,CAAA;AAAA,sBACtC,GAAA,CAAC,WAAQ,QAA0B,EAAA,4BAAA,EAAA,CAAA;AAAA,KACrC,EAAA,CAAA,CAAA;AAAA,GAEJ;AAEA,EAAA,MAAM,OAAU,GAAA,YAAA,CAAa,GAAI,CAAA,CAAC,MAAY,MAAA;AAAA,IAC5C,IAAI,MAAO,CAAA,EAAA;AAAA,IACX,OAAO,MAAO,CAAA,GAAA;AAAA,IACd,KAAA,EAAO,CAAC,MAAA,CAAO,OAAO,CAAA;AAAA,IACtB,SAAS,MAAM;AACb,MAAA,yBAAA,CAA0B,MAAM,CAAA,CAAA;AAChC,MAAA,MAAM,OAAO,EAAE,KAAA,EAAO,cAAgB,EAAA,MAAA,EAAQ,OAAO,EAAG,EAAA,CAAA;AACxD,MAAA,IAAI,aAAa,aAAe,EAAA;AAC9B,QAAS,QAAA,CAAA,MAAA,CAAO,wBAAwB,IAAI,CAAA,CAAA;AAAA,OACvC,MAAA;AACL,QAAS,QAAA,CAAA,MAAA,CAAO,kBAAkB,IAAI,CAAA,CAAA;AAAA,OACxC;AAAA,KACF;AAAA,IACA,UAAU,MAAO,CAAA,QAAA;AAAA,IACjB,UAAU,MAAO,CAAA,OAAA;AAAA,GACjB,CAAA,CAAA,CAAA;AAEF,EAAA,4BACG,WACC,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,WAAY,EAAA,EAAA,QAAA,EAAQ,IAAC,EAAA,IAAA,EAAK,UAAW,EAAA,CAAA;AAAA,oBACtC,GAAA,CAAC,eAAY,OAAkB,EAAA,CAAA;AAAA,GACjC,EAAA,CAAA,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"usePaymentState.js","sources":["../../../src/hooks/usePaymentState.ts"],"sourcesContent":["import {\n assert,\n assertNotNull,\n DaimoPayHydratedOrderWithOrg,\n debugJson,\n DepositAddressPaymentOptionData,\n DepositAddressPaymentOptionMetadata,\n DepositAddressPaymentOptions,\n ethereum,\n ExternalPaymentOptionMetadata,\n ExternalPaymentOptions,\n getOrderDestChainId,\n isCCTPV1Chain,\n PlatformType,\n readDaimoPayOrderID,\n SolanaPublicKey,\n WalletPaymentOption,\n writeDaimoPayOrderID,\n} from \"@daimo/pay-common\";\nimport { useConnection, useWallet } from \"@solana/wallet-adapter-react\";\nimport { VersionedTransaction } from \"@solana/web3.js\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport {\n erc20Abi,\n getAddress,\n Hex,\n hexToBytes,\n isHex,\n zeroAddress,\n} from \"viem\";\nimport {\n useAccount,\n useEnsName,\n useSendTransaction,\n useWriteContract,\n} from \"wagmi\";\n\nimport { PayButtonPaymentProps } from \"../components/DaimoPayButton\";\nimport { ROUTES } from \"../constants/routes\";\nimport { PayParams } from \"../payment/paymentFsm\";\nimport { detectPlatform } from \"../utils/platform\";\nimport { TrpcClient } from \"../utils/trpc\";\nimport { WalletConfigProps } from \"../wallets/walletConfigs\";\nimport { useDaimoPay } from \"./useDaimoPay\";\nimport { useDepositAddressOptions } from \"./useDepositAddressOptions\";\nimport { useExternalPaymentOptions } from \"./useExternalPaymentOptions\";\nimport useIsMobile from \"./useIsMobile\";\nimport { useOrderUsdLimits } from \"./useOrderUsdLimits\";\nimport { useSolanaPaymentOptions } from \"./useSolanaPaymentOptions\";\nimport { useUntronAvailability } from \"./useUntronAvailability\";\nimport { useWalletPaymentOptions } from \"./useWalletPaymentOptions\";\n\n/** Wallet payment details, sent to processSourcePayment after submitting tx. */\nexport type SourcePayment = Parameters<\n TrpcClient[\"processSourcePayment\"][\"mutate\"]\n>[0];\n\n/** Creates (or loads) a payment and manages the corresponding modal. */\nexport interface PaymentState {\n generatePreviewOrder: () => void;\n resetOrder: (payParams?: Partial<PayParams>) => Promise<void>;\n\n /// DaimoPayButton props\n buttonProps: PayButtonPaymentProps | undefined;\n setButtonProps: (props: PayButtonPaymentProps | undefined) => void;\n\n /// Pay ID for loading an existing order\n setPayId: (id: string | undefined) => void;\n /// Pay params for creating an order on the fly,\n setPayParams: (payParams: PayParams | undefined) => Promise<void>;\n\n /// True if the user is entering an amount (deposit) vs preset (checkout).\n isDepositFlow: boolean;\n paymentWaitingMessage: string | undefined;\n /// External payment options, loaded from server and filtered by EITHER\n /// 1. the DaimoPayButton paymentOptions, or 2. those of daimoPayOrder\n externalPaymentOptions: ReturnType<typeof useExternalPaymentOptions>;\n selectedWallet: WalletConfigProps | undefined;\n selectedWalletDeepLink: string | undefined;\n showSolanaPaymentMethod: boolean;\n walletPaymentOptions: ReturnType<typeof useWalletPaymentOptions>;\n solanaPaymentOptions: ReturnType<typeof useSolanaPaymentOptions>;\n depositAddressOptions: ReturnType<typeof useDepositAddressOptions>;\n /** Whether Untron receivers are currently available. `null` when unknown. */\n untronAvailable: boolean | null;\n selectedExternalOption: ExternalPaymentOptionMetadata | undefined;\n selectedTokenOption: WalletPaymentOption | undefined;\n selectedSolanaTokenOption: WalletPaymentOption | undefined;\n selectedDepositAddressOption: DepositAddressPaymentOptionMetadata | undefined;\n getOrderUsdLimit: () => number;\n setPaymentWaitingMessage: (message: string | undefined) => void;\n tokenMode: \"evm\" | \"solana\" | \"all\";\n setTokenMode: (mode: \"evm\" | \"solana\" | \"all\") => void;\n setSelectedWallet: (wallet: WalletConfigProps | undefined) => void;\n setSelectedWalletDeepLink: (deepLink: string | undefined) => void;\n setSelectedExternalOption: (\n option: ExternalPaymentOptionMetadata | undefined,\n ) => void;\n setSelectedTokenOption: (option: WalletPaymentOption | undefined) => void;\n setSelectedSolanaTokenOption: (\n option: WalletPaymentOption | undefined,\n ) => void;\n setSelectedDepositAddressOption: (\n option: DepositAddressPaymentOptionMetadata | undefined,\n ) => void;\n setChosenUsd: (usd: number) => void;\n payWithToken: (\n walletOption: WalletPaymentOption,\n ) => Promise<{ txHash?: Hex; success: boolean }>;\n payWithExternal: (option: ExternalPaymentOptions) => Promise<string>;\n payWithDepositAddress: (\n option: DepositAddressPaymentOptions,\n ) => Promise<DepositAddressPaymentOptionData | null>;\n payWithSolanaToken: (\n inputToken: SolanaPublicKey,\n ) => Promise<{ txHash: string; success: boolean }>;\n openInWalletBrowser: (wallet: WalletConfigProps, amountUsd?: number) => void;\n senderEnsName: string | undefined;\n}\n\nexport function usePaymentState({\n trpc,\n lockPayParams,\n setRoute,\n log,\n redirectReturnUrl,\n}: {\n trpc: TrpcClient;\n lockPayParams: boolean;\n setRoute: (route: ROUTES, data?: Record<string, any>) => void;\n log: (...args: any[]) => void;\n redirectReturnUrl?: string;\n}): PaymentState {\n const pay = useDaimoPay();\n\n // Browser state.\n const [platform, setPlatform] = useState<PlatformType>();\n useEffect(() => {\n setPlatform(detectPlatform(window.navigator.userAgent));\n }, []);\n\n // Wallet state.\n const { address: ethWalletAddress } = useAccount();\n const { data: senderEnsName } = useEnsName({\n chainId: ethereum.chainId,\n address: ethWalletAddress,\n });\n const { sendTransactionAsync } = useSendTransaction();\n const { writeContractAsync } = useWriteContract();\n\n // Solana wallet state.\n const solanaWallet = useWallet();\n const { connection } = useConnection();\n const solanaPubKey = solanaWallet.publicKey?.toBase58();\n\n // Solana bridging is only supported on CCTPv1 chains.\n const destChainId = pay.order == null ? null : getOrderDestChainId(pay.order);\n const showSolanaPaymentMethod =\n destChainId != null && isCCTPV1Chain(destChainId);\n\n // From DaimoPayButton props\n const [buttonProps, setButtonProps] = useState<PayButtonPaymentProps>();\n const [currPayParams, setCurrPayParams] = useState<PayParams>();\n\n const [paymentWaitingMessage, setPaymentWaitingMessage] = useState<string>();\n const [isDepositFlow, setIsDepositFlow] = useState<boolean>(false);\n\n // UI state. Selection for external payment (Binance, etc) vs wallet payment.\n const externalPaymentOptions = useExternalPaymentOptions({\n trpc,\n // allow <DaimoPayButton payId={...} paymentOptions={override} />\n filterIds:\n buttonProps?.paymentOptions ?? pay.order?.metadata.payer?.paymentOptions,\n platform,\n usdRequired: pay.order?.destFinalCallTokenAmount.usd,\n mode: pay.order?.mode,\n });\n const walletPaymentOptions = useWalletPaymentOptions({\n trpc,\n address: ethWalletAddress,\n usdRequired: pay.order?.destFinalCallTokenAmount.usd,\n destChainId: pay.order?.destFinalCallTokenAmount.token.chainId,\n destAddress: pay.order?.destFinalCall.to,\n preferredChains: pay.order?.metadata.payer?.preferredChains,\n preferredTokens: pay.order?.metadata.payer?.preferredTokens,\n evmChains: pay.order?.metadata.payer?.evmChains,\n passthroughTokens: pay.order?.metadata.payer?.passthroughTokens,\n isDepositFlow,\n log,\n });\n const solanaPaymentOptions = useSolanaPaymentOptions({\n trpc,\n address: solanaPubKey,\n usdRequired: pay.order?.destFinalCallTokenAmount.usd,\n isDepositFlow,\n showSolanaPaymentMethod,\n });\n const depositAddressOptions = useDepositAddressOptions({\n trpc,\n usdRequired: pay.order?.destFinalCallTokenAmount.usd,\n mode: pay.order?.mode,\n });\n\n // Poll for Untron receiver availability so components can disable unsupported chains promptly.\n const { available: untronAvailable } = useUntronAvailability({ trpc });\n\n const chainOrderUsdLimits = useOrderUsdLimits({ trpc });\n\n const [selectedExternalOption, setSelectedExternalOption] =\n useState<ExternalPaymentOptionMetadata>();\n\n const [selectedTokenOption, setSelectedTokenOption] =\n useState<WalletPaymentOption>();\n\n const [selectedSolanaTokenOption, setSelectedSolanaTokenOption] =\n useState<WalletPaymentOption>();\n\n const [selectedDepositAddressOption, setSelectedDepositAddressOption] =\n useState<DepositAddressPaymentOptionMetadata>();\n\n const [selectedWallet, setSelectedWallet] = useState<WalletConfigProps>();\n const [selectedWalletDeepLink, setSelectedWalletDeepLink] =\n useState<string>();\n\n const getOrderUsdLimit = () => {\n const DEFAULT_USD_LIMIT = 20000;\n if (pay.order == null || chainOrderUsdLimits.loading) {\n return DEFAULT_USD_LIMIT;\n }\n const destChainId = pay.order.destFinalCallTokenAmount.token.chainId;\n return destChainId in chainOrderUsdLimits.limits\n ? chainOrderUsdLimits.limits[destChainId]\n : DEFAULT_USD_LIMIT;\n };\n\n /** Commit to a token + amount = initiate payment. */\n const payWithToken = async (\n walletOption: WalletPaymentOption,\n ): Promise<{ txHash?: Hex; success: boolean }> => {\n assert(\n ethWalletAddress != null,\n `[PAY TOKEN] null ethWalletAddress when paying on ethereum`,\n );\n assert(\n pay.paymentState === \"preview\" ||\n pay.paymentState === \"unhydrated\" ||\n pay.paymentState === \"payment_unpaid\",\n `[PAY TOKEN] paymentState is ${pay.paymentState}, must be preview or unhydrated or payment_unpaid`,\n );\n\n let hydratedOrder: DaimoPayHydratedOrderWithOrg;\n const { required, fees } = walletOption;\n const paymentAmount = BigInt(required.amount) + BigInt(fees.amount);\n if (pay.paymentState !== \"payment_unpaid\") {\n assert(\n required.token.token === fees.token.token,\n `[PAY TOKEN] required token ${debugJson(required)} does not match fees token ${debugJson(fees)}`,\n );\n\n // Will refund to ethWalletAddress if refundAddress was not set in payParams\n const res = await pay.hydrateOrder(ethWalletAddress);\n hydratedOrder = res.order;\n\n log(\n `[PAY TOKEN] hydrated order: ${debugJson(\n hydratedOrder,\n )}, paying ${paymentAmount} of token ${required.token.token}`,\n );\n } else {\n hydratedOrder = pay.order;\n }\n\n const paymentTxHash = await (async () => {\n const dest = walletOption.passthroughAddress ?? hydratedOrder.intentAddr;\n try {\n if (required.token.token === zeroAddress) {\n return await sendTransactionAsync({\n to: dest,\n value: paymentAmount,\n });\n } else {\n return await writeContractAsync({\n abi: erc20Abi,\n address: getAddress(required.token.token),\n functionName: \"transfer\",\n args: [dest, paymentAmount],\n });\n }\n } catch (e) {\n console.error(`[PAY TOKEN] error sending token: ${e}`);\n throw e;\n }\n })();\n\n // Special case. Handle Rabby bug, where it returns the *Safe signature*\n // instead of a txHash for a queued, unsubmitted Safe transaction.\n if (!isHex(paymentTxHash) || paymentTxHash.length !== 66) {\n log(\n `[PAY TOKEN] wallet bug detected. ignoring invalid payment txHash: ${paymentTxHash}`,\n );\n return { success: true };\n }\n\n try {\n await pay.payEthSource({\n paymentTxHash,\n sourceChainId: required.token.chainId,\n payerAddress: ethWalletAddress,\n sourceToken: getAddress(required.token.token),\n sourceAmount: paymentAmount,\n });\n return { txHash: paymentTxHash, success: true };\n } catch {\n console.error(\n `[PAY TOKEN] could not verify payment tx on chain: ${paymentTxHash}`,\n );\n return { txHash: paymentTxHash, success: false };\n }\n };\n\n const payWithSolanaToken = async (\n inputToken: SolanaPublicKey,\n ): Promise<{ txHash: string; success: boolean }> => {\n const payerPublicKey = solanaWallet.publicKey;\n assert(\n payerPublicKey != null,\n \"[PAY SOLANA] null payerPublicKey when paying on solana\",\n );\n assert(\n pay.order?.id != null,\n \"[PAY SOLANA] null orderId when paying on solana\",\n );\n assert(\n pay.paymentState === \"preview\" ||\n pay.paymentState === \"unhydrated\" ||\n pay.paymentState === \"payment_unpaid\",\n `[PAY SOLANA] paymentState is ${pay.paymentState}, must be preview or unhydrated or payment_unpaid`,\n );\n\n let hydratedOrder: DaimoPayHydratedOrderWithOrg;\n if (pay.paymentState !== \"payment_unpaid\") {\n const res = await pay.hydrateOrder();\n hydratedOrder = res.order;\n\n log(\n `[PAY SOLANA] Hydrated order: ${JSON.stringify(\n hydratedOrder,\n )}, checking out with Solana ${inputToken}`,\n );\n } else {\n hydratedOrder = pay.order;\n }\n\n const paymentTxHash = await (async () => {\n try {\n const serializedTx = await trpc.getSolanaSwapAndBurnTx.query({\n orderId: pay.order.id.toString(),\n userPublicKey: assertNotNull(\n payerPublicKey,\n \"[PAY SOLANA] wallet.publicKey cannot be null\",\n ).toString(),\n inputTokenMint: inputToken,\n });\n const tx = VersionedTransaction.deserialize(hexToBytes(serializedTx));\n const txHash = await solanaWallet.sendTransaction(tx, connection);\n return txHash;\n } catch (e) {\n console.error(e);\n throw e;\n }\n })();\n\n try {\n await pay.paySolanaSource({\n paymentTxHash: paymentTxHash,\n sourceToken: inputToken,\n });\n return { txHash: paymentTxHash, success: true };\n } catch {\n console.error(\n `[PAY SOLANA] could not verify payment tx on chain: ${paymentTxHash}`,\n );\n return { txHash: paymentTxHash, success: false };\n }\n };\n\n const payWithExternal = async (option: ExternalPaymentOptions) => {\n assert(pay.order != null, \"[PAY EXTERNAL] order cannot be null\");\n assert(platform != null, \"[PAY EXTERNAL] platform cannot be null\");\n\n const { order } = await pay.hydrateOrder();\n const externalPaymentOptionData =\n await trpc.getExternalPaymentOptionData.query({\n id: order.id.toString(),\n externalPaymentOption: option,\n platform,\n redirectReturnUrl,\n });\n assert(\n externalPaymentOptionData != null,\n \"[PAY EXTERNAL] missing externalPaymentOptionData\",\n );\n\n log(\n `[PAY EXTERNAL] hydrated order: ${debugJson(\n order,\n )}, checking out with external payment: ${option}`,\n );\n\n setPaymentWaitingMessage(externalPaymentOptionData.waitingMessage);\n\n return externalPaymentOptionData.url;\n };\n\n const payWithDepositAddress = async (\n option: DepositAddressPaymentOptions,\n ) => {\n const { order } = await pay.hydrateOrder();\n\n log(\n `[PAY DEPOSIT ADDRESS] hydrated order ${order.id} for ${order.usdValue} USD, checking out with deposit address: ${option}`,\n );\n\n const result = await trpc.getDepositAddressForOrder.query({\n orderId: order.id.toString(),\n option,\n });\n\n return \"error\" in result ? null : result;\n };\n\n const { isIOS } = useIsMobile();\n\n const openInWalletBrowser = (\n wallet: WalletConfigProps,\n amountUsd?: number,\n ) => {\n const paymentState = pay.paymentState;\n assert(\n paymentState === \"payment_unpaid\",\n `[OPEN IN WALLET BROWSER] paymentState is ${paymentState}, must be payment_unpaid`,\n );\n assert(\n wallet.getDaimoPayDeeplink != null,\n `openInWalletBrowser: missing deeplink for ${wallet.name}`,\n );\n\n const payId = writeDaimoPayOrderID(pay.order.id);\n const deeplink = wallet.getDaimoPayDeeplink(payId);\n // If we are in IOS, we don't open the deeplink in a new window, because it\n // will not work, the link will be opened in the page WAITING_WALLET\n if (!isIOS) {\n window.open(deeplink, \"_blank\");\n }\n setSelectedWallet(wallet);\n setSelectedWalletDeepLink(deeplink);\n setRoute(ROUTES.WAITING_WALLET, {\n amountUsd,\n payId,\n wallet_name: wallet.name,\n });\n };\n\n /** User picked a different deposit amount. */\n const setChosenUsd = (usd: number) => {\n assert(\n pay.paymentState === \"preview\",\n \"[SET CHOSEN USD] paymentState is not preview\",\n );\n\n // Too expensive to make an API call to regenerate preview order each time\n // the user changes the amount. Instead, we modify the order in memory.\n pay.setChosenUsd(usd);\n };\n\n const setPayId = useCallback(\n async (payId: string | undefined) => {\n if (lockPayParams || payId == null) return;\n const id = readDaimoPayOrderID(payId).toString();\n\n if (pay.order?.id && BigInt(id) == pay.order.id) {\n // Already loaded, ignore.\n return;\n }\n\n pay.reset();\n pay.setPayId(payId);\n },\n [lockPayParams, pay],\n );\n\n /** Called whenever params change. */\n const setPayParams = async (payParams: PayParams | undefined) => {\n if (lockPayParams) return;\n assert(payParams != null, \"[SET PAY PARAMS] payParams cannot be null\");\n\n log(\"[SET PAY PARAMS] setting payParams\", payParams);\n pay.reset();\n await pay.createPreviewOrder(payParams);\n setCurrPayParams(payParams);\n setIsDepositFlow(payParams.toUnits == null);\n };\n\n const generatePreviewOrder = async () => {\n pay.reset();\n if (currPayParams == null) return;\n await pay.createPreviewOrder(currPayParams);\n };\n\n const resetOrder = useCallback(\n async (payParams?: Partial<PayParams>) => {\n const mergedPayParams: PayParams | undefined =\n payParams != null && currPayParams != null\n ? { ...currPayParams, ...payParams }\n : currPayParams;\n\n // Clear the old order & state\n pay.reset();\n setSelectedExternalOption(undefined);\n setSelectedTokenOption(undefined);\n setSelectedSolanaTokenOption(undefined);\n setSelectedDepositAddressOption(undefined);\n setSelectedWallet(undefined);\n setSelectedWalletDeepLink(undefined);\n setPaymentWaitingMessage(undefined);\n\n // Set the new payParams\n if (mergedPayParams) {\n await pay.createPreviewOrder(mergedPayParams);\n setCurrPayParams(mergedPayParams);\n setIsDepositFlow(mergedPayParams.toUnits == null);\n }\n\n setRoute(ROUTES.SELECT_METHOD);\n },\n [setRoute, pay, currPayParams],\n );\n\n const [tokenMode, setTokenMode] = useState<\"evm\" | \"solana\" | \"all\">(\"evm\");\n\n return {\n buttonProps,\n setButtonProps,\n setPayId,\n setPayParams,\n tokenMode,\n setTokenMode,\n generatePreviewOrder,\n isDepositFlow,\n paymentWaitingMessage,\n selectedExternalOption,\n selectedTokenOption,\n selectedSolanaTokenOption,\n externalPaymentOptions,\n showSolanaPaymentMethod,\n selectedWallet,\n selectedWalletDeepLink,\n walletPaymentOptions,\n solanaPaymentOptions,\n depositAddressOptions,\n selectedDepositAddressOption,\n getOrderUsdLimit,\n resetOrder,\n setSelectedWallet,\n setSelectedWalletDeepLink,\n setPaymentWaitingMessage,\n setSelectedExternalOption,\n setSelectedTokenOption,\n setSelectedSolanaTokenOption,\n setSelectedDepositAddressOption,\n setChosenUsd,\n payWithToken,\n payWithExternal,\n payWithDepositAddress,\n payWithSolanaToken,\n openInWalletBrowser,\n senderEnsName: senderEnsName ?? undefined,\n untronAvailable,\n };\n}\n"],"names":["destChainId"],"mappings":"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"}
1
+ {"version":3,"file":"usePaymentState.js","sources":["../../../src/hooks/usePaymentState.ts"],"sourcesContent":["import {\n assert,\n assertNotNull,\n DaimoPayHydratedOrderWithOrg,\n debugJson,\n DepositAddressPaymentOptionData,\n DepositAddressPaymentOptionMetadata,\n DepositAddressPaymentOptions,\n ethereum,\n ExternalPaymentOptionMetadata,\n ExternalPaymentOptions,\n getOrderDestChainId,\n isCCTPV1Chain,\n PlatformType,\n readDaimoPayOrderID,\n SolanaPublicKey,\n WalletPaymentOption,\n writeDaimoPayOrderID,\n} from \"@daimo/pay-common\";\nimport { useConnection, useWallet } from \"@solana/wallet-adapter-react\";\nimport { VersionedTransaction } from \"@solana/web3.js\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport {\n erc20Abi,\n getAddress,\n Hex,\n hexToBytes,\n isHex,\n zeroAddress,\n} from \"viem\";\nimport {\n useAccount,\n useEnsName,\n useSendTransaction,\n useWriteContract,\n} from \"wagmi\";\n\nimport { PayButtonPaymentProps } from \"../components/DaimoPayButton\";\nimport { ROUTES } from \"../constants/routes\";\nimport { PayParams } from \"../payment/paymentFsm\";\nimport { detectPlatform } from \"../utils/platform\";\nimport { TrpcClient } from \"../utils/trpc\";\nimport { WalletConfigProps } from \"../wallets/walletConfigs\";\nimport { useDaimoPay } from \"./useDaimoPay\";\nimport { useDepositAddressOptions } from \"./useDepositAddressOptions\";\nimport { useExternalPaymentOptions } from \"./useExternalPaymentOptions\";\nimport useIsMobile from \"./useIsMobile\";\nimport { useOrderUsdLimits } from \"./useOrderUsdLimits\";\nimport { useSolanaPaymentOptions } from \"./useSolanaPaymentOptions\";\nimport { useUntronAvailability } from \"./useUntronAvailability\";\nimport { useWalletPaymentOptions } from \"./useWalletPaymentOptions\";\n\n/** Wallet payment details, sent to processSourcePayment after submitting tx. */\nexport type SourcePayment = Parameters<\n TrpcClient[\"processSourcePayment\"][\"mutate\"]\n>[0];\n\n/** Creates (or loads) a payment and manages the corresponding modal. */\nexport interface PaymentState {\n generatePreviewOrder: () => void;\n resetOrder: (payParams?: Partial<PayParams>) => Promise<void>;\n\n /// DaimoPayButton props\n buttonProps: PayButtonPaymentProps | undefined;\n setButtonProps: (props: PayButtonPaymentProps | undefined) => void;\n\n /// Pay ID for loading an existing order\n setPayId: (id: string | undefined) => void;\n /// Pay params for creating an order on the fly,\n setPayParams: (payParams: PayParams | undefined) => Promise<void>;\n\n /// True if the user is entering an amount (deposit) vs preset (checkout).\n isDepositFlow: boolean;\n paymentWaitingMessage: string | undefined;\n /// External payment options, loaded from server and filtered by EITHER\n /// 1. the DaimoPayButton paymentOptions, or 2. those of daimoPayOrder\n externalPaymentOptions: ReturnType<typeof useExternalPaymentOptions>;\n selectedWallet: WalletConfigProps | undefined;\n selectedWalletDeepLink: string | undefined;\n showSolanaPaymentMethod: boolean;\n walletPaymentOptions: ReturnType<typeof useWalletPaymentOptions>;\n solanaPaymentOptions: ReturnType<typeof useSolanaPaymentOptions>;\n depositAddressOptions: ReturnType<typeof useDepositAddressOptions>;\n /** Whether Untron receivers are currently available. `null` when unknown. */\n untronAvailable: boolean | null;\n selectedExternalOption: ExternalPaymentOptionMetadata | undefined;\n selectedTokenOption: WalletPaymentOption | undefined;\n selectedSolanaTokenOption: WalletPaymentOption | undefined;\n selectedDepositAddressOption: DepositAddressPaymentOptionMetadata | undefined;\n getOrderUsdLimit: () => number;\n setPaymentWaitingMessage: (message: string | undefined) => void;\n tokenMode: \"evm\" | \"solana\" | \"showCoin\";\n setTokenMode: (mode: \"evm\" | \"solana\" | \"showCoin\") => void;\n setSelectedWallet: (wallet: WalletConfigProps | undefined) => void;\n setSelectedWalletDeepLink: (deepLink: string | undefined) => void;\n setSelectedExternalOption: (\n option: ExternalPaymentOptionMetadata | undefined,\n ) => void;\n setSelectedTokenOption: (option: WalletPaymentOption | undefined) => void;\n setSelectedSolanaTokenOption: (\n option: WalletPaymentOption | undefined,\n ) => void;\n setSelectedDepositAddressOption: (\n option: DepositAddressPaymentOptionMetadata | undefined,\n ) => void;\n setChosenUsd: (usd: number) => void;\n payWithToken: (\n walletOption: WalletPaymentOption,\n ) => Promise<{ txHash?: Hex; success: boolean }>;\n payWithExternal: (option: ExternalPaymentOptions) => Promise<string>;\n payWithDepositAddress: (\n option: DepositAddressPaymentOptions,\n ) => Promise<DepositAddressPaymentOptionData | null>;\n payWithSolanaToken: (\n inputToken: SolanaPublicKey,\n ) => Promise<{ txHash: string; success: boolean }>;\n openInWalletBrowser: (wallet: WalletConfigProps, amountUsd?: number) => void;\n senderEnsName: string | undefined;\n}\n\nexport function usePaymentState({\n trpc,\n lockPayParams,\n setRoute,\n log,\n redirectReturnUrl,\n}: {\n trpc: TrpcClient;\n lockPayParams: boolean;\n setRoute: (route: ROUTES, data?: Record<string, any>) => void;\n log: (...args: any[]) => void;\n redirectReturnUrl?: string;\n}): PaymentState {\n const pay = useDaimoPay();\n\n // Browser state.\n const [platform, setPlatform] = useState<PlatformType>();\n useEffect(() => {\n setPlatform(detectPlatform(window.navigator.userAgent));\n }, []);\n\n // Wallet state.\n const { address: ethWalletAddress } = useAccount();\n const { data: senderEnsName } = useEnsName({\n chainId: ethereum.chainId,\n address: ethWalletAddress,\n });\n const { sendTransactionAsync } = useSendTransaction();\n const { writeContractAsync } = useWriteContract();\n\n // Solana wallet state.\n const solanaWallet = useWallet();\n const { connection } = useConnection();\n const solanaPubKey = solanaWallet.publicKey?.toBase58();\n\n // Solana bridging is only supported on CCTPv1 chains.\n const destChainId = pay.order == null ? null : getOrderDestChainId(pay.order);\n const showSolanaPaymentMethod =\n destChainId != null && isCCTPV1Chain(destChainId);\n\n // From DaimoPayButton props\n const [buttonProps, setButtonProps] = useState<PayButtonPaymentProps>();\n const [currPayParams, setCurrPayParams] = useState<PayParams>();\n\n const [paymentWaitingMessage, setPaymentWaitingMessage] = useState<string>();\n const [isDepositFlow, setIsDepositFlow] = useState<boolean>(false);\n\n // UI state. Selection for external payment (Binance, etc) vs wallet payment.\n const externalPaymentOptions = useExternalPaymentOptions({\n trpc,\n // allow <DaimoPayButton payId={...} paymentOptions={override} />\n filterIds:\n buttonProps?.paymentOptions ?? pay.order?.metadata.payer?.paymentOptions,\n platform,\n usdRequired: pay.order?.destFinalCallTokenAmount.usd,\n mode: pay.order?.mode,\n });\n const walletPaymentOptions = useWalletPaymentOptions({\n trpc,\n address: ethWalletAddress,\n usdRequired: pay.order?.destFinalCallTokenAmount.usd,\n destChainId: pay.order?.destFinalCallTokenAmount.token.chainId,\n destAddress: pay.order?.destFinalCall.to,\n preferredChains: pay.order?.metadata.payer?.preferredChains,\n preferredTokens: pay.order?.metadata.payer?.preferredTokens,\n evmChains: pay.order?.metadata.payer?.evmChains,\n passthroughTokens: pay.order?.metadata.payer?.passthroughTokens,\n isDepositFlow,\n log,\n });\n const solanaPaymentOptions = useSolanaPaymentOptions({\n trpc,\n address: solanaPubKey,\n usdRequired: pay.order?.destFinalCallTokenAmount.usd,\n isDepositFlow,\n showSolanaPaymentMethod,\n });\n const depositAddressOptions = useDepositAddressOptions({\n trpc,\n usdRequired: pay.order?.destFinalCallTokenAmount.usd,\n mode: pay.order?.mode,\n });\n\n // Poll for Untron receiver availability so components can disable unsupported chains promptly.\n const { available: untronAvailable } = useUntronAvailability({ trpc });\n\n const chainOrderUsdLimits = useOrderUsdLimits({ trpc });\n\n const [selectedExternalOption, setSelectedExternalOption] =\n useState<ExternalPaymentOptionMetadata>();\n\n const [selectedTokenOption, setSelectedTokenOption] =\n useState<WalletPaymentOption>();\n\n const [selectedSolanaTokenOption, setSelectedSolanaTokenOption] =\n useState<WalletPaymentOption>();\n\n const [selectedDepositAddressOption, setSelectedDepositAddressOption] =\n useState<DepositAddressPaymentOptionMetadata>();\n\n const [selectedWallet, setSelectedWallet] = useState<WalletConfigProps>();\n const [selectedWalletDeepLink, setSelectedWalletDeepLink] =\n useState<string>();\n\n const getOrderUsdLimit = () => {\n const DEFAULT_USD_LIMIT = 20000;\n if (pay.order == null || chainOrderUsdLimits.loading) {\n return DEFAULT_USD_LIMIT;\n }\n const destChainId = pay.order.destFinalCallTokenAmount.token.chainId;\n return destChainId in chainOrderUsdLimits.limits\n ? chainOrderUsdLimits.limits[destChainId]\n : DEFAULT_USD_LIMIT;\n };\n\n /** Commit to a token + amount = initiate payment. */\n const payWithToken = async (\n walletOption: WalletPaymentOption,\n ): Promise<{ txHash?: Hex; success: boolean }> => {\n assert(\n ethWalletAddress != null,\n `[PAY TOKEN] null ethWalletAddress when paying on ethereum`,\n );\n assert(\n pay.paymentState === \"preview\" ||\n pay.paymentState === \"unhydrated\" ||\n pay.paymentState === \"payment_unpaid\",\n `[PAY TOKEN] paymentState is ${pay.paymentState}, must be preview or unhydrated or payment_unpaid`,\n );\n\n let hydratedOrder: DaimoPayHydratedOrderWithOrg;\n const { required, fees } = walletOption;\n const paymentAmount = BigInt(required.amount) + BigInt(fees.amount);\n if (pay.paymentState !== \"payment_unpaid\") {\n assert(\n required.token.token === fees.token.token,\n `[PAY TOKEN] required token ${debugJson(required)} does not match fees token ${debugJson(fees)}`,\n );\n\n // Will refund to ethWalletAddress if refundAddress was not set in payParams\n const res = await pay.hydrateOrder(ethWalletAddress);\n hydratedOrder = res.order;\n\n log(\n `[PAY TOKEN] hydrated order: ${debugJson(\n hydratedOrder,\n )}, paying ${paymentAmount} of token ${required.token.token}`,\n );\n } else {\n hydratedOrder = pay.order;\n }\n\n const paymentTxHash = await (async () => {\n const dest = walletOption.passthroughAddress ?? hydratedOrder.intentAddr;\n try {\n if (required.token.token === zeroAddress) {\n return await sendTransactionAsync({\n to: dest,\n value: paymentAmount,\n });\n } else {\n return await writeContractAsync({\n abi: erc20Abi,\n address: getAddress(required.token.token),\n functionName: \"transfer\",\n args: [dest, paymentAmount],\n });\n }\n } catch (e) {\n console.error(`[PAY TOKEN] error sending token: ${e}`);\n throw e;\n }\n })();\n\n // Special case. Handle Rabby bug, where it returns the *Safe signature*\n // instead of a txHash for a queued, unsubmitted Safe transaction.\n if (!isHex(paymentTxHash) || paymentTxHash.length !== 66) {\n log(\n `[PAY TOKEN] wallet bug detected. ignoring invalid payment txHash: ${paymentTxHash}`,\n );\n return { success: true };\n }\n\n try {\n await pay.payEthSource({\n paymentTxHash,\n sourceChainId: required.token.chainId,\n payerAddress: ethWalletAddress,\n sourceToken: getAddress(required.token.token),\n sourceAmount: paymentAmount,\n });\n return { txHash: paymentTxHash, success: true };\n } catch {\n console.error(\n `[PAY TOKEN] could not verify payment tx on chain: ${paymentTxHash}`,\n );\n return { txHash: paymentTxHash, success: false };\n }\n };\n\n const payWithSolanaToken = async (\n inputToken: SolanaPublicKey,\n ): Promise<{ txHash: string; success: boolean }> => {\n const payerPublicKey = solanaWallet.publicKey;\n assert(\n payerPublicKey != null,\n \"[PAY SOLANA] null payerPublicKey when paying on solana\",\n );\n assert(\n pay.order?.id != null,\n \"[PAY SOLANA] null orderId when paying on solana\",\n );\n assert(\n pay.paymentState === \"preview\" ||\n pay.paymentState === \"unhydrated\" ||\n pay.paymentState === \"payment_unpaid\",\n `[PAY SOLANA] paymentState is ${pay.paymentState}, must be preview or unhydrated or payment_unpaid`,\n );\n\n let hydratedOrder: DaimoPayHydratedOrderWithOrg;\n if (pay.paymentState !== \"payment_unpaid\") {\n const res = await pay.hydrateOrder();\n hydratedOrder = res.order;\n\n log(\n `[PAY SOLANA] Hydrated order: ${JSON.stringify(\n hydratedOrder,\n )}, checking out with Solana ${inputToken}`,\n );\n } else {\n hydratedOrder = pay.order;\n }\n\n const paymentTxHash = await (async () => {\n try {\n const serializedTx = await trpc.getSolanaSwapAndBurnTx.query({\n orderId: pay.order.id.toString(),\n userPublicKey: assertNotNull(\n payerPublicKey,\n \"[PAY SOLANA] wallet.publicKey cannot be null\",\n ).toString(),\n inputTokenMint: inputToken,\n });\n const tx = VersionedTransaction.deserialize(hexToBytes(serializedTx));\n const txHash = await solanaWallet.sendTransaction(tx, connection);\n return txHash;\n } catch (e) {\n console.error(e);\n throw e;\n }\n })();\n\n try {\n await pay.paySolanaSource({\n paymentTxHash: paymentTxHash,\n sourceToken: inputToken,\n });\n return { txHash: paymentTxHash, success: true };\n } catch {\n console.error(\n `[PAY SOLANA] could not verify payment tx on chain: ${paymentTxHash}`,\n );\n return { txHash: paymentTxHash, success: false };\n }\n };\n\n const payWithExternal = async (option: ExternalPaymentOptions) => {\n assert(pay.order != null, \"[PAY EXTERNAL] order cannot be null\");\n assert(platform != null, \"[PAY EXTERNAL] platform cannot be null\");\n\n const { order } = await pay.hydrateOrder();\n const externalPaymentOptionData =\n await trpc.getExternalPaymentOptionData.query({\n id: order.id.toString(),\n externalPaymentOption: option,\n platform,\n redirectReturnUrl,\n });\n assert(\n externalPaymentOptionData != null,\n \"[PAY EXTERNAL] missing externalPaymentOptionData\",\n );\n\n log(\n `[PAY EXTERNAL] hydrated order: ${debugJson(\n order,\n )}, checking out with external payment: ${option}`,\n );\n\n setPaymentWaitingMessage(externalPaymentOptionData.waitingMessage);\n\n return externalPaymentOptionData.url;\n };\n\n const payWithDepositAddress = async (\n option: DepositAddressPaymentOptions,\n ) => {\n const { order } = await pay.hydrateOrder();\n\n log(\n `[PAY DEPOSIT ADDRESS] hydrated order ${order.id} for ${order.usdValue} USD, checking out with deposit address: ${option}`,\n );\n\n const result = await trpc.getDepositAddressForOrder.query({\n orderId: order.id.toString(),\n option,\n });\n\n return \"error\" in result ? null : result;\n };\n\n const { isIOS } = useIsMobile();\n\n const openInWalletBrowser = (\n wallet: WalletConfigProps,\n amountUsd?: number,\n ) => {\n const paymentState = pay.paymentState;\n assert(\n paymentState === \"payment_unpaid\",\n `[OPEN IN WALLET BROWSER] paymentState is ${paymentState}, must be payment_unpaid`,\n );\n assert(\n wallet.getDaimoPayDeeplink != null,\n `openInWalletBrowser: missing deeplink for ${wallet.name}`,\n );\n\n const payId = writeDaimoPayOrderID(pay.order.id);\n const deeplink = wallet.getDaimoPayDeeplink(payId);\n // If we are in IOS, we don't open the deeplink in a new window, because it\n // will not work, the link will be opened in the page WAITING_WALLET\n if (!isIOS) {\n window.open(deeplink, \"_blank\");\n }\n setSelectedWallet(wallet);\n setSelectedWalletDeepLink(deeplink);\n setRoute(ROUTES.WAITING_WALLET, {\n amountUsd,\n payId,\n wallet_name: wallet.name,\n });\n };\n\n /** User picked a different deposit amount. */\n const setChosenUsd = (usd: number) => {\n assert(\n pay.paymentState === \"preview\",\n \"[SET CHOSEN USD] paymentState is not preview\",\n );\n\n // Too expensive to make an API call to regenerate preview order each time\n // the user changes the amount. Instead, we modify the order in memory.\n pay.setChosenUsd(usd);\n };\n\n const setPayId = useCallback(\n async (payId: string | undefined) => {\n if (lockPayParams || payId == null) return;\n const id = readDaimoPayOrderID(payId).toString();\n\n if (pay.order?.id && BigInt(id) == pay.order.id) {\n // Already loaded, ignore.\n return;\n }\n\n pay.reset();\n pay.setPayId(payId);\n },\n [lockPayParams, pay],\n );\n\n /** Called whenever params change. */\n const setPayParams = async (payParams: PayParams | undefined) => {\n if (lockPayParams) return;\n assert(payParams != null, \"[SET PAY PARAMS] payParams cannot be null\");\n\n log(\"[SET PAY PARAMS] setting payParams\", payParams);\n pay.reset();\n await pay.createPreviewOrder(payParams);\n setCurrPayParams(payParams);\n setIsDepositFlow(payParams.toUnits == null);\n };\n\n const generatePreviewOrder = async () => {\n pay.reset();\n if (currPayParams == null) return;\n await pay.createPreviewOrder(currPayParams);\n };\n\n const resetOrder = useCallback(\n async (payParams?: Partial<PayParams>) => {\n const mergedPayParams: PayParams | undefined =\n payParams != null && currPayParams != null\n ? { ...currPayParams, ...payParams }\n : currPayParams;\n\n // Clear the old order & state\n pay.reset();\n setSelectedExternalOption(undefined);\n setSelectedTokenOption(undefined);\n setSelectedSolanaTokenOption(undefined);\n setSelectedDepositAddressOption(undefined);\n setSelectedWallet(undefined);\n setSelectedWalletDeepLink(undefined);\n setPaymentWaitingMessage(undefined);\n\n // Set the new payParams\n if (mergedPayParams) {\n await pay.createPreviewOrder(mergedPayParams);\n setCurrPayParams(mergedPayParams);\n setIsDepositFlow(mergedPayParams.toUnits == null);\n }\n\n setRoute(ROUTES.SELECT_METHOD);\n },\n [setRoute, pay, currPayParams],\n );\n\n const [tokenMode, setTokenMode] = useState<\"evm\" | \"solana\" | \"all\">(\"evm\");\n\n return {\n buttonProps,\n setButtonProps,\n setPayId,\n setPayParams,\n tokenMode,\n setTokenMode,\n generatePreviewOrder,\n isDepositFlow,\n paymentWaitingMessage,\n selectedExternalOption,\n selectedTokenOption,\n selectedSolanaTokenOption,\n externalPaymentOptions,\n showSolanaPaymentMethod,\n selectedWallet,\n selectedWalletDeepLink,\n walletPaymentOptions,\n solanaPaymentOptions,\n depositAddressOptions,\n selectedDepositAddressOption,\n getOrderUsdLimit,\n resetOrder,\n setSelectedWallet,\n setSelectedWalletDeepLink,\n setPaymentWaitingMessage,\n setSelectedExternalOption,\n setSelectedTokenOption,\n setSelectedSolanaTokenOption,\n setSelectedDepositAddressOption,\n setChosenUsd,\n payWithToken,\n payWithExternal,\n payWithDepositAddress,\n payWithSolanaToken,\n openInWalletBrowser,\n senderEnsName: senderEnsName ?? undefined,\n untronAvailable,\n };\n}\n"],"names":["destChainId"],"mappings":";;;;;;;;;;;;;;;;;AAwHO,SAAS,eAAgB,CAAA;AAAA,EAC9B,IAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,iBAAA;AACF,CAMiB,EAAA;AACf,EAAA,MAAM,MAAM,WAAY,EAAA,CAAA;AAGxB,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,QAAuB,EAAA,CAAA;AACvD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,WAAA,CAAY,cAAe,CAAA,MAAA,CAAO,SAAU,CAAA,SAAS,CAAC,CAAA,CAAA;AAAA,GACxD,EAAG,EAAE,CAAA,CAAA;AAGL,EAAA,MAAM,EAAE,OAAA,EAAS,gBAAiB,EAAA,GAAI,UAAW,EAAA,CAAA;AACjD,EAAA,MAAM,EAAE,IAAA,EAAM,aAAc,EAAA,GAAI,UAAW,CAAA;AAAA,IACzC,SAAS,QAAS,CAAA,OAAA;AAAA,IAClB,OAAS,EAAA,gBAAA;AAAA,GACV,CAAA,CAAA;AACD,EAAM,MAAA,EAAE,oBAAqB,EAAA,GAAI,kBAAmB,EAAA,CAAA;AACpD,EAAM,MAAA,EAAE,kBAAmB,EAAA,GAAI,gBAAiB,EAAA,CAAA;AAGhD,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAM,MAAA,EAAE,UAAW,EAAA,GAAI,aAAc,EAAA,CAAA;AACrC,EAAM,MAAA,YAAA,GAAe,YAAa,CAAA,SAAA,EAAW,QAAS,EAAA,CAAA;AAGtD,EAAA,MAAM,cAAc,GAAI,CAAA,KAAA,IAAS,OAAO,IAAO,GAAA,mBAAA,CAAoB,IAAI,KAAK,CAAA,CAAA;AAC5E,EAAA,MAAM,uBACJ,GAAA,WAAA,IAAe,IAAQ,IAAA,aAAA,CAAc,WAAW,CAAA,CAAA;AAGlD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,QAAgC,EAAA,CAAA;AACtE,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,QAAoB,EAAA,CAAA;AAE9D,EAAA,MAAM,CAAC,qBAAA,EAAuB,wBAAwB,CAAA,GAAI,QAAiB,EAAA,CAAA;AAC3E,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAkB,KAAK,CAAA,CAAA;AAGjE,EAAA,MAAM,yBAAyB,yBAA0B,CAAA;AAAA,IACvD,IAAA;AAAA;AAAA,IAEA,WACE,WAAa,EAAA,cAAA,IAAkB,GAAI,CAAA,KAAA,EAAO,SAAS,KAAO,EAAA,cAAA;AAAA,IAC5D,QAAA;AAAA,IACA,WAAA,EAAa,GAAI,CAAA,KAAA,EAAO,wBAAyB,CAAA,GAAA;AAAA,IACjD,IAAA,EAAM,IAAI,KAAO,EAAA,IAAA;AAAA,GAClB,CAAA,CAAA;AACD,EAAA,MAAM,uBAAuB,uBAAwB,CAAA;AAAA,IACnD,IAAA;AAAA,IACA,OAAS,EAAA,gBAAA;AAAA,IACT,WAAA,EAAa,GAAI,CAAA,KAAA,EAAO,wBAAyB,CAAA,GAAA;AAAA,IACjD,WAAa,EAAA,GAAA,CAAI,KAAO,EAAA,wBAAA,CAAyB,KAAM,CAAA,OAAA;AAAA,IACvD,WAAA,EAAa,GAAI,CAAA,KAAA,EAAO,aAAc,CAAA,EAAA;AAAA,IACtC,eAAiB,EAAA,GAAA,CAAI,KAAO,EAAA,QAAA,CAAS,KAAO,EAAA,eAAA;AAAA,IAC5C,eAAiB,EAAA,GAAA,CAAI,KAAO,EAAA,QAAA,CAAS,KAAO,EAAA,eAAA;AAAA,IAC5C,SAAW,EAAA,GAAA,CAAI,KAAO,EAAA,QAAA,CAAS,KAAO,EAAA,SAAA;AAAA,IACtC,iBAAmB,EAAA,GAAA,CAAI,KAAO,EAAA,QAAA,CAAS,KAAO,EAAA,iBAAA;AAAA,IAC9C,aAAA;AAAA,IACA,GAAA;AAAA,GACD,CAAA,CAAA;AACD,EAAA,MAAM,uBAAuB,uBAAwB,CAAA;AAAA,IACnD,IAAA;AAAA,IACA,OAAS,EAAA,YAAA;AAAA,IACT,WAAA,EAAa,GAAI,CAAA,KAAA,EAAO,wBAAyB,CAAA,GAAA;AAAA,IACjD,aAAA;AAAA,IACA,uBAAA;AAAA,GACD,CAAA,CAAA;AACD,EAAA,MAAM,wBAAwB,wBAAyB,CAAA;AAAA,IACrD,IAAA;AAAA,IACA,WAAA,EAAa,GAAI,CAAA,KAAA,EAAO,wBAAyB,CAAA,GAAA;AAAA,IACjD,IAAA,EAAM,IAAI,KAAO,EAAA,IAAA;AAAA,GAClB,CAAA,CAAA;AAGD,EAAA,MAAM,EAAE,SAAW,EAAA,eAAA,KAAoB,qBAAsB,CAAA,EAAE,MAAM,CAAA,CAAA;AAErE,EAAA,MAAM,mBAAsB,GAAA,iBAAA,CAAkB,EAAE,IAAA,EAAM,CAAA,CAAA;AAEtD,EAAA,MAAM,CAAC,sBAAA,EAAwB,yBAAyB,CAAA,GACtD,QAAwC,EAAA,CAAA;AAE1C,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAChD,QAA8B,EAAA,CAAA;AAEhC,EAAA,MAAM,CAAC,yBAAA,EAA2B,4BAA4B,CAAA,GAC5D,QAA8B,EAAA,CAAA;AAEhC,EAAA,MAAM,CAAC,4BAAA,EAA8B,+BAA+B,CAAA,GAClE,QAA8C,EAAA,CAAA;AAEhD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,QAA4B,EAAA,CAAA;AACxE,EAAA,MAAM,CAAC,sBAAA,EAAwB,yBAAyB,CAAA,GACtD,QAAiB,EAAA,CAAA;AAEnB,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,MAAM,iBAAoB,GAAA,GAAA,CAAA;AAC1B,IAAA,IAAI,GAAI,CAAA,KAAA,IAAS,IAAQ,IAAA,mBAAA,CAAoB,OAAS,EAAA;AACpD,MAAO,OAAA,iBAAA,CAAA;AAAA,KACT;AACA,IAAA,MAAMA,YAAc,GAAA,GAAA,CAAI,KAAM,CAAA,wBAAA,CAAyB,KAAM,CAAA,OAAA,CAAA;AAC7D,IAAA,OAAOA,gBAAe,mBAAoB,CAAA,MAAA,GACtC,mBAAoB,CAAA,MAAA,CAAOA,YAAW,CACtC,GAAA,iBAAA,CAAA;AAAA,GACN,CAAA;AAGA,EAAM,MAAA,YAAA,GAAe,OACnB,YACgD,KAAA;AAChD,IAAA,MAAA;AAAA,MACE,gBAAoB,IAAA,IAAA;AAAA,MACpB,CAAA,yDAAA,CAAA;AAAA,KACF,CAAA;AACA,IAAA,MAAA;AAAA,MACE,IAAI,YAAiB,KAAA,SAAA,IACnB,IAAI,YAAiB,KAAA,YAAA,IACrB,IAAI,YAAiB,KAAA,gBAAA;AAAA,MACvB,CAAA,4BAAA,EAA+B,IAAI,YAAY,CAAA,iDAAA,CAAA;AAAA,KACjD,CAAA;AAEA,IAAI,IAAA,aAAA,CAAA;AACJ,IAAM,MAAA,EAAE,QAAU,EAAA,IAAA,EAAS,GAAA,YAAA,CAAA;AAC3B,IAAA,MAAM,gBAAgB,MAAO,CAAA,QAAA,CAAS,MAAM,CAAI,GAAA,MAAA,CAAO,KAAK,MAAM,CAAA,CAAA;AAClE,IAAI,IAAA,GAAA,CAAI,iBAAiB,gBAAkB,EAAA;AACzC,MAAA,MAAA;AAAA,QACE,QAAS,CAAA,KAAA,CAAM,KAAU,KAAA,IAAA,CAAK,KAAM,CAAA,KAAA;AAAA,QACpC,8BAA8B,SAAU,CAAA,QAAQ,CAAC,CAA8B,2BAAA,EAAA,SAAA,CAAU,IAAI,CAAC,CAAA,CAAA;AAAA,OAChG,CAAA;AAGA,MAAA,MAAM,GAAM,GAAA,MAAM,GAAI,CAAA,YAAA,CAAa,gBAAgB,CAAA,CAAA;AACnD,MAAA,aAAA,GAAgB,GAAI,CAAA,KAAA,CAAA;AAEpB,MAAA,GAAA;AAAA,QACE,CAA+B,4BAAA,EAAA,SAAA;AAAA,UAC7B,aAAA;AAAA,SACD,CAAY,SAAA,EAAA,aAAa,CAAa,UAAA,EAAA,QAAA,CAAS,MAAM,KAAK,CAAA,CAAA;AAAA,OAC7D,CAAA;AAAA,KACK,MAAA;AACL,MAAA,aAAA,GAAgB,GAAI,CAAA,KAAA,CAAA;AAAA,KACtB;AAEA,IAAM,MAAA,aAAA,GAAgB,OAAO,YAAY;AACvC,MAAM,MAAA,IAAA,GAAO,YAAa,CAAA,kBAAA,IAAsB,aAAc,CAAA,UAAA,CAAA;AAC9D,MAAI,IAAA;AACF,QAAI,IAAA,QAAA,CAAS,KAAM,CAAA,KAAA,KAAU,WAAa,EAAA;AACxC,UAAA,OAAO,MAAM,oBAAqB,CAAA;AAAA,YAChC,EAAI,EAAA,IAAA;AAAA,YACJ,KAAO,EAAA,aAAA;AAAA,WACR,CAAA,CAAA;AAAA,SACI,MAAA;AACL,UAAA,OAAO,MAAM,kBAAmB,CAAA;AAAA,YAC9B,GAAK,EAAA,QAAA;AAAA,YACL,OAAS,EAAA,UAAA,CAAW,QAAS,CAAA,KAAA,CAAM,KAAK,CAAA;AAAA,YACxC,YAAc,EAAA,UAAA;AAAA,YACd,IAAA,EAAM,CAAC,IAAA,EAAM,aAAa,CAAA;AAAA,WAC3B,CAAA,CAAA;AAAA,SACH;AAAA,eACO,CAAG,EAAA;AACV,QAAQ,OAAA,CAAA,KAAA,CAAM,CAAoC,iCAAA,EAAA,CAAC,CAAE,CAAA,CAAA,CAAA;AACrD,QAAM,MAAA,CAAA,CAAA;AAAA,OACR;AAAA,KACC,GAAA,CAAA;AAIH,IAAA,IAAI,CAAC,KAAM,CAAA,aAAa,CAAK,IAAA,aAAA,CAAc,WAAW,EAAI,EAAA;AACxD,MAAA,GAAA;AAAA,QACE,qEAAqE,aAAa,CAAA,CAAA;AAAA,OACpF,CAAA;AACA,MAAO,OAAA,EAAE,SAAS,IAAK,EAAA,CAAA;AAAA,KACzB;AAEA,IAAI,IAAA;AACF,MAAA,MAAM,IAAI,YAAa,CAAA;AAAA,QACrB,aAAA;AAAA,QACA,aAAA,EAAe,SAAS,KAAM,CAAA,OAAA;AAAA,QAC9B,YAAc,EAAA,gBAAA;AAAA,QACd,WAAa,EAAA,UAAA,CAAW,QAAS,CAAA,KAAA,CAAM,KAAK,CAAA;AAAA,QAC5C,YAAc,EAAA,aAAA;AAAA,OACf,CAAA,CAAA;AACD,MAAA,OAAO,EAAE,MAAA,EAAQ,aAAe,EAAA,OAAA,EAAS,IAAK,EAAA,CAAA;AAAA,KACxC,CAAA,MAAA;AACN,MAAQ,OAAA,CAAA,KAAA;AAAA,QACN,qDAAqD,aAAa,CAAA,CAAA;AAAA,OACpE,CAAA;AACA,MAAA,OAAO,EAAE,MAAA,EAAQ,aAAe,EAAA,OAAA,EAAS,KAAM,EAAA,CAAA;AAAA,KACjD;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,kBAAA,GAAqB,OACzB,UACkD,KAAA;AAClD,IAAA,MAAM,iBAAiB,YAAa,CAAA,SAAA,CAAA;AACpC,IAAA,MAAA;AAAA,MACE,cAAkB,IAAA,IAAA;AAAA,MAClB,wDAAA;AAAA,KACF,CAAA;AACA,IAAA,MAAA;AAAA,MACE,GAAA,CAAI,OAAO,EAAM,IAAA,IAAA;AAAA,MACjB,iDAAA;AAAA,KACF,CAAA;AACA,IAAA,MAAA;AAAA,MACE,IAAI,YAAiB,KAAA,SAAA,IACnB,IAAI,YAAiB,KAAA,YAAA,IACrB,IAAI,YAAiB,KAAA,gBAAA;AAAA,MACvB,CAAA,6BAAA,EAAgC,IAAI,YAAY,CAAA,iDAAA,CAAA;AAAA,KAClD,CAAA;AAEA,IAAI,IAAA,aAAA,CAAA;AACJ,IAAI,IAAA,GAAA,CAAI,iBAAiB,gBAAkB,EAAA;AACzC,MAAM,MAAA,GAAA,GAAM,MAAM,GAAA,CAAI,YAAa,EAAA,CAAA;AACnC,MAAA,aAAA,GAAgB,GAAI,CAAA,KAAA,CAAA;AAEpB,MAAA,GAAA;AAAA,QACE,gCAAgC,IAAK,CAAA,SAAA;AAAA,UACnC,aAAA;AAAA,SACD,8BAA8B,UAAU,CAAA,CAAA;AAAA,OAC3C,CAAA;AAAA,KACK,MAAA;AACL,MAAA,aAAA,GAAgB,GAAI,CAAA,KAAA,CAAA;AAAA,KACtB;AAEA,IAAM,MAAA,aAAA,GAAgB,OAAO,YAAY;AACvC,MAAI,IAAA;AACF,QAAA,MAAM,YAAe,GAAA,MAAM,IAAK,CAAA,sBAAA,CAAuB,KAAM,CAAA;AAAA,UAC3D,OAAS,EAAA,GAAA,CAAI,KAAM,CAAA,EAAA,CAAG,QAAS,EAAA;AAAA,UAC/B,aAAe,EAAA,aAAA;AAAA,YACb,cAAA;AAAA,YACA,8CAAA;AAAA,YACA,QAAS,EAAA;AAAA,UACX,cAAgB,EAAA,UAAA;AAAA,SACjB,CAAA,CAAA;AACD,QAAA,MAAM,EAAK,GAAA,oBAAA,CAAqB,WAAY,CAAA,UAAA,CAAW,YAAY,CAAC,CAAA,CAAA;AACpE,QAAA,MAAM,MAAS,GAAA,MAAM,YAAa,CAAA,eAAA,CAAgB,IAAI,UAAU,CAAA,CAAA;AAChE,QAAO,OAAA,MAAA,CAAA;AAAA,eACA,CAAG,EAAA;AACV,QAAA,OAAA,CAAQ,MAAM,CAAC,CAAA,CAAA;AACf,QAAM,MAAA,CAAA,CAAA;AAAA,OACR;AAAA,KACC,GAAA,CAAA;AAEH,IAAI,IAAA;AACF,MAAA,MAAM,IAAI,eAAgB,CAAA;AAAA,QACxB,aAAA;AAAA,QACA,WAAa,EAAA,UAAA;AAAA,OACd,CAAA,CAAA;AACD,MAAA,OAAO,EAAE,MAAA,EAAQ,aAAe,EAAA,OAAA,EAAS,IAAK,EAAA,CAAA;AAAA,KACxC,CAAA,MAAA;AACN,MAAQ,OAAA,CAAA,KAAA;AAAA,QACN,sDAAsD,aAAa,CAAA,CAAA;AAAA,OACrE,CAAA;AACA,MAAA,OAAO,EAAE,MAAA,EAAQ,aAAe,EAAA,OAAA,EAAS,KAAM,EAAA,CAAA;AAAA,KACjD;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,eAAA,GAAkB,OAAO,MAAmC,KAAA;AAChE,IAAO,MAAA,CAAA,GAAA,CAAI,KAAS,IAAA,IAAA,EAAM,qCAAqC,CAAA,CAAA;AAC/D,IAAO,MAAA,CAAA,QAAA,IAAY,MAAM,wCAAwC,CAAA,CAAA;AAEjE,IAAA,MAAM,EAAE,KAAA,EAAU,GAAA,MAAM,IAAI,YAAa,EAAA,CAAA;AACzC,IAAA,MAAM,yBACJ,GAAA,MAAM,IAAK,CAAA,4BAAA,CAA6B,KAAM,CAAA;AAAA,MAC5C,EAAA,EAAI,KAAM,CAAA,EAAA,CAAG,QAAS,EAAA;AAAA,MACtB,qBAAuB,EAAA,MAAA;AAAA,MACvB,QAAA;AAAA,MACA,iBAAA;AAAA,KACD,CAAA,CAAA;AACH,IAAA,MAAA;AAAA,MACE,yBAA6B,IAAA,IAAA;AAAA,MAC7B,kDAAA;AAAA,KACF,CAAA;AAEA,IAAA,GAAA;AAAA,MACE,CAAkC,+BAAA,EAAA,SAAA;AAAA,QAChC,KAAA;AAAA,OACD,yCAAyC,MAAM,CAAA,CAAA;AAAA,KAClD,CAAA;AAEA,IAAA,wBAAA,CAAyB,0BAA0B,cAAc,CAAA,CAAA;AAEjE,IAAA,OAAO,yBAA0B,CAAA,GAAA,CAAA;AAAA,GACnC,CAAA;AAEA,EAAM,MAAA,qBAAA,GAAwB,OAC5B,MACG,KAAA;AACH,IAAA,MAAM,EAAE,KAAA,EAAU,GAAA,MAAM,IAAI,YAAa,EAAA,CAAA;AAEzC,IAAA,GAAA;AAAA,MACE,wCAAwC,KAAM,CAAA,EAAE,QAAQ,KAAM,CAAA,QAAQ,4CAA4C,MAAM,CAAA,CAAA;AAAA,KAC1H,CAAA;AAEA,IAAA,MAAM,MAAS,GAAA,MAAM,IAAK,CAAA,yBAAA,CAA0B,KAAM,CAAA;AAAA,MACxD,OAAA,EAAS,KAAM,CAAA,EAAA,CAAG,QAAS,EAAA;AAAA,MAC3B,MAAA;AAAA,KACD,CAAA,CAAA;AAED,IAAO,OAAA,OAAA,IAAW,SAAS,IAAO,GAAA,MAAA,CAAA;AAAA,GACpC,CAAA;AAEA,EAAM,MAAA,EAAE,KAAM,EAAA,GAAI,WAAY,EAAA,CAAA;AAE9B,EAAM,MAAA,mBAAA,GAAsB,CAC1B,MAAA,EACA,SACG,KAAA;AACH,IAAA,MAAM,eAAe,GAAI,CAAA,YAAA,CAAA;AACzB,IAAA,MAAA;AAAA,MACE,YAAiB,KAAA,gBAAA;AAAA,MACjB,4CAA4C,YAAY,CAAA,wBAAA,CAAA;AAAA,KAC1D,CAAA;AACA,IAAA,MAAA;AAAA,MACE,OAAO,mBAAuB,IAAA,IAAA;AAAA,MAC9B,CAAA,0CAAA,EAA6C,OAAO,IAAI,CAAA,CAAA;AAAA,KAC1D,CAAA;AAEA,IAAA,MAAM,KAAQ,GAAA,oBAAA,CAAqB,GAAI,CAAA,KAAA,CAAM,EAAE,CAAA,CAAA;AAC/C,IAAM,MAAA,QAAA,GAAW,MAAO,CAAA,mBAAA,CAAoB,KAAK,CAAA,CAAA;AAGjD,IAAA,IAAI,CAAC,KAAO,EAAA;AACV,MAAO,MAAA,CAAA,IAAA,CAAK,UAAU,QAAQ,CAAA,CAAA;AAAA,KAChC;AACA,IAAA,iBAAA,CAAkB,MAAM,CAAA,CAAA;AACxB,IAAA,yBAAA,CAA0B,QAAQ,CAAA,CAAA;AAClC,IAAA,QAAA,CAAS,OAAO,cAAgB,EAAA;AAAA,MAC9B,SAAA;AAAA,MACA,KAAA;AAAA,MACA,aAAa,MAAO,CAAA,IAAA;AAAA,KACrB,CAAA,CAAA;AAAA,GACH,CAAA;AAGA,EAAM,MAAA,YAAA,GAAe,CAAC,GAAgB,KAAA;AACpC,IAAA,MAAA;AAAA,MACE,IAAI,YAAiB,KAAA,SAAA;AAAA,MACrB,8CAAA;AAAA,KACF,CAAA;AAIA,IAAA,GAAA,CAAI,aAAa,GAAG,CAAA,CAAA;AAAA,GACtB,CAAA;AAEA,EAAA,MAAM,QAAW,GAAA,WAAA;AAAA,IACf,OAAO,KAA8B,KAAA;AACnC,MAAI,IAAA,aAAA,IAAiB,SAAS,IAAM,EAAA,OAAA;AACpC,MAAA,MAAM,EAAK,GAAA,mBAAA,CAAoB,KAAK,CAAA,CAAE,QAAS,EAAA,CAAA;AAE/C,MAAI,IAAA,GAAA,CAAI,OAAO,EAAM,IAAA,MAAA,CAAO,EAAE,CAAK,IAAA,GAAA,CAAI,MAAM,EAAI,EAAA;AAE/C,QAAA,OAAA;AAAA,OACF;AAEA,MAAA,GAAA,CAAI,KAAM,EAAA,CAAA;AACV,MAAA,GAAA,CAAI,SAAS,KAAK,CAAA,CAAA;AAAA,KACpB;AAAA,IACA,CAAC,eAAe,GAAG,CAAA;AAAA,GACrB,CAAA;AAGA,EAAM,MAAA,YAAA,GAAe,OAAO,SAAqC,KAAA;AAC/D,IAAA,IAAI,aAAe,EAAA,OAAA;AACnB,IAAO,MAAA,CAAA,SAAA,IAAa,MAAM,2CAA2C,CAAA,CAAA;AAErE,IAAA,GAAA,CAAI,sCAAsC,SAAS,CAAA,CAAA;AACnD,IAAA,GAAA,CAAI,KAAM,EAAA,CAAA;AACV,IAAM,MAAA,GAAA,CAAI,mBAAmB,SAAS,CAAA,CAAA;AACtC,IAAA,gBAAA,CAAiB,SAAS,CAAA,CAAA;AAC1B,IAAiB,gBAAA,CAAA,SAAA,CAAU,WAAW,IAAI,CAAA,CAAA;AAAA,GAC5C,CAAA;AAEA,EAAA,MAAM,uBAAuB,YAAY;AACvC,IAAA,GAAA,CAAI,KAAM,EAAA,CAAA;AACV,IAAA,IAAI,iBAAiB,IAAM,EAAA,OAAA;AAC3B,IAAM,MAAA,GAAA,CAAI,mBAAmB,aAAa,CAAA,CAAA;AAAA,GAC5C,CAAA;AAEA,EAAA,MAAM,UAAa,GAAA,WAAA;AAAA,IACjB,OAAO,SAAmC,KAAA;AACxC,MAAM,MAAA,eAAA,GACJ,SAAa,IAAA,IAAA,IAAQ,aAAiB,IAAA,IAAA,GAClC,EAAE,GAAG,aAAA,EAAe,GAAG,SAAA,EACvB,GAAA,aAAA,CAAA;AAGN,MAAA,GAAA,CAAI,KAAM,EAAA,CAAA;AACV,MAAA,yBAAA,CAA0B,KAAS,CAAA,CAAA,CAAA;AACnC,MAAA,sBAAA,CAAuB,KAAS,CAAA,CAAA,CAAA;AAChC,MAAA,4BAAA,CAA6B,KAAS,CAAA,CAAA,CAAA;AACtC,MAAA,+BAAA,CAAgC,KAAS,CAAA,CAAA,CAAA;AACzC,MAAA,iBAAA,CAAkB,KAAS,CAAA,CAAA,CAAA;AAC3B,MAAA,yBAAA,CAA0B,KAAS,CAAA,CAAA,CAAA;AACnC,MAAA,wBAAA,CAAyB,KAAS,CAAA,CAAA,CAAA;AAGlC,MAAA,IAAI,eAAiB,EAAA;AACnB,QAAM,MAAA,GAAA,CAAI,mBAAmB,eAAe,CAAA,CAAA;AAC5C,QAAA,gBAAA,CAAiB,eAAe,CAAA,CAAA;AAChC,QAAiB,gBAAA,CAAA,eAAA,CAAgB,WAAW,IAAI,CAAA,CAAA;AAAA,OAClD;AAEA,MAAA,QAAA,CAAS,OAAO,aAAa,CAAA,CAAA;AAAA,KAC/B;AAAA,IACA,CAAC,QAAU,EAAA,GAAA,EAAK,aAAa,CAAA;AAAA,GAC/B,CAAA;AAEA,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAmC,KAAK,CAAA,CAAA;AAE1E,EAAO,OAAA;AAAA,IACL,WAAA;AAAA,IACA,cAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA;AAAA,IACA,oBAAA;AAAA,IACA,aAAA;AAAA,IACA,qBAAA;AAAA,IACA,sBAAA;AAAA,IACA,mBAAA;AAAA,IACA,yBAAA;AAAA,IACA,sBAAA;AAAA,IACA,uBAAA;AAAA,IACA,cAAA;AAAA,IACA,sBAAA;AAAA,IACA,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,qBAAA;AAAA,IACA,4BAAA;AAAA,IACA,gBAAA;AAAA,IACA,UAAA;AAAA,IACA,iBAAA;AAAA,IACA,yBAAA;AAAA,IACA,wBAAA;AAAA,IACA,yBAAA;AAAA,IACA,sBAAA;AAAA,IACA,4BAAA;AAAA,IACA,+BAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA,qBAAA;AAAA,IACA,kBAAA;AAAA,IACA,mBAAA;AAAA,IACA,eAAe,aAAiB,IAAA,KAAA,CAAA;AAAA,IAChC,eAAA;AAAA,GACF,CAAA;AACF;;;;"}
@@ -24,7 +24,7 @@ function useTokenOptions(mode) {
24
24
  const nonPassthroughToken = isPassthrough ? pay.order?.destFinalCallTokenAmount.token : void 0;
25
25
  let optionsList = [];
26
26
  let isLoading = false;
27
- if (["evm", "all"].includes(mode)) {
27
+ if (["evm", "showCoin"].includes(mode)) {
28
28
  optionsList.push(
29
29
  ...getEvmTokenOptions(
30
30
  walletPaymentOptions.options ?? [],
@@ -37,7 +37,7 @@ function useTokenOptions(mode) {
37
37
  );
38
38
  isLoading ||= walletPaymentOptions.isLoading;
39
39
  }
40
- if (["solana", "all"].includes(mode)) {
40
+ if (["solana", "showCoin"].includes(mode)) {
41
41
  optionsList.push(
42
42
  ...getSolanaTokenOptions(
43
43
  solanaPaymentOptions.options ?? [],
@@ -1 +1 @@
1
- {"version":3,"file":"useTokenOptions.js","sources":["../../../src/hooks/useTokenOptions.tsx"],"sourcesContent":["/// Gets token options when paying from a connected wallet. Supports both EVM\n\nimport {\n DaimoPayToken,\n getChainName,\n Token,\n WalletPaymentOption,\n} from \"@daimo/pay-common\";\nimport { Option } from \"../components/Common/OptionsList\";\nimport TokenChainLogo from \"../components/Common/TokenChainLogo\";\nimport { ROUTES } from \"../constants/routes\";\nimport { flattenChildren } from \"../utils\";\nimport { formatUsd, roundTokenAmount } from \"../utils/format\";\nimport { useDaimoPay } from \"./useDaimoPay\";\nimport useLocales from \"./useLocales\";\nimport { usePayContext } from \"./usePayContext\";\n\n/// and Solana tokens. See OptionsList.\nexport function useTokenOptions(mode: \"evm\" | \"solana\" | \"all\"): {\n optionsList: Option[];\n isLoading: boolean;\n} {\n const { setRoute, paymentState } = usePayContext();\n const {\n isDepositFlow,\n walletPaymentOptions,\n solanaPaymentOptions,\n setSelectedTokenOption,\n setSelectedSolanaTokenOption,\n } = paymentState;\n\n // Get translations once and pass down to helpers to avoid violating\n // the Rules-of-Hooks (hooks can only be called inside React components\n // or custom hooks).\n const locales = useLocales();\n const onString = flattenChildren(locales.on).join(\"\");\n\n // HACK: special handling for portfolio deposits\n const pay = useDaimoPay();\n const isPassthrough = !!pay.order?.metadata.payer?.passthroughTokens?.length;\n const nonPassthroughToken = isPassthrough\n ? pay.order?.destFinalCallTokenAmount.token\n : undefined;\n\n let optionsList: Option[] = [];\n let isLoading = false;\n if ([\"evm\", \"all\"].includes(mode)) {\n optionsList.push(\n ...getEvmTokenOptions(\n walletPaymentOptions.options ?? [],\n isDepositFlow,\n setSelectedTokenOption,\n setRoute,\n onString,\n nonPassthroughToken,\n ),\n );\n isLoading ||= walletPaymentOptions.isLoading;\n }\n if ([\"solana\", \"all\"].includes(mode)) {\n optionsList.push(\n ...getSolanaTokenOptions(\n solanaPaymentOptions.options ?? [],\n isDepositFlow,\n setSelectedSolanaTokenOption,\n setRoute,\n onString,\n ),\n );\n isLoading ||= solanaPaymentOptions.isLoading;\n }\n\n optionsList.sort((a, b) => {\n const dDisabled = (a.disabled ? 1 : 0) - (b.disabled ? 1 : 0);\n if (dDisabled !== 0) return dDisabled;\n const dSort = (b.sortValue ?? 0) - (a.sortValue ?? 0);\n return dSort;\n });\n\n return { optionsList, isLoading };\n}\n\nfunction getEvmTokenOptions(\n options: WalletPaymentOption[],\n isDepositFlow: boolean,\n setSelectedTokenOption: (option: WalletPaymentOption) => void,\n setRoute: (route: ROUTES, meta?: any) => void,\n onString: string,\n nonPassthroughToken?: Token,\n) {\n return options.map((option) => {\n const chainName = getChainName(option.balance.token.chainId);\n const titlePrice = isDepositFlow\n ? formatUsd(option.balance.usd)\n : roundTokenAmount(option.required.amount, option.required.token);\n const title = `${titlePrice} ${option.balance.token.symbol} ${onString} ${chainName}`;\n\n const balanceStr = `${roundTokenAmount(option.balance.amount, option.balance.token)} ${option.balance.token.symbol}`;\n let subtitle =\n option.disabledReason ??\n `${isDepositFlow ? \"\" : \"Balance: \"}${balanceStr}`;\n const disabled = option.disabledReason != null;\n\n // HACK: special handling for portfolio deposits\n if (nonPassthroughToken != null) {\n const defaultSym = nonPassthroughToken.symbol;\n const optSym = option.balance.token.symbol;\n if (option.passthroughAddress == null && optSym !== defaultSym) {\n subtitle = `Convert to ${defaultSym}`;\n } else {\n subtitle = `Deposit ${optSym}`;\n }\n }\n const sortValue =\n option.balance.usd + (option.passthroughAddress == null ? 0 : 1e9);\n\n return {\n id: getDaimoTokenKey(option.balance.token),\n sortValue,\n title,\n subtitle,\n icons: [\n <TokenChainLogo\n key={getDaimoTokenKey(option.balance.token)}\n token={option.balance.token}\n />,\n ],\n onClick: () => {\n setSelectedTokenOption(option);\n const meta = {\n event: \"click-token\",\n tokenSymbol: option.balance.token.symbol,\n chainId: option.balance.token.chainId,\n };\n if (isDepositFlow) {\n setRoute(ROUTES.SELECT_AMOUNT, meta);\n } else {\n setRoute(ROUTES.PAY_WITH_TOKEN, meta);\n }\n },\n disabled,\n };\n });\n}\n\nfunction getSolanaTokenOptions(\n options: WalletPaymentOption[],\n isDepositFlow: boolean,\n setSelectedSolanaTokenOption: (option: WalletPaymentOption) => void,\n setRoute: (route: ROUTES, meta?: any) => void,\n onString: string,\n) {\n return options.map((option) => {\n const titlePrice = isDepositFlow\n ? formatUsd(option.balance.usd)\n : roundTokenAmount(option.required.amount, option.required.token);\n const title = `${titlePrice} ${option.balance.token.symbol} ${onString} Solana`;\n const balanceStr = `${roundTokenAmount(option.balance.amount, option.balance.token)} ${option.balance.token.symbol}`;\n const subtitle =\n option.disabledReason ??\n `${isDepositFlow ? \"\" : \"Balance: \"}${balanceStr}`;\n const disabled = option.disabledReason != null;\n\n return {\n id: getDaimoTokenKey(option.balance.token),\n sortValue: option.balance.usd,\n title,\n subtitle,\n icons: [\n <TokenChainLogo\n key={getDaimoTokenKey(option.balance.token)}\n token={option.balance.token}\n />,\n ],\n onClick: () => {\n setSelectedSolanaTokenOption(option);\n const meta = {\n event: \"click-solana-token\",\n tokenSymbol: option.balance.token.symbol,\n chainId: option.balance.token.chainId,\n };\n if (isDepositFlow) {\n setRoute(ROUTES.SOLANA_SELECT_AMOUNT, meta);\n } else {\n setRoute(ROUTES.SOLANA_PAY_WITH_TOKEN, meta);\n }\n },\n disabled,\n };\n });\n}\n\nfunction getDaimoTokenKey(token: DaimoPayToken) {\n return `${token.chainId}-${token.token}`;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useTokenOptions.js","sources":["../../../src/hooks/useTokenOptions.tsx"],"sourcesContent":["/// Gets token options when paying from a connected wallet. Supports both EVM\n\nimport {\n DaimoPayToken,\n getChainName,\n Token,\n WalletPaymentOption,\n} from \"@daimo/pay-common\";\nimport { Option } from \"../components/Common/OptionsList\";\nimport TokenChainLogo from \"../components/Common/TokenChainLogo\";\nimport { ROUTES } from \"../constants/routes\";\nimport { flattenChildren } from \"../utils\";\nimport { formatUsd, roundTokenAmount } from \"../utils/format\";\nimport { useDaimoPay } from \"./useDaimoPay\";\nimport useLocales from \"./useLocales\";\nimport { usePayContext } from \"./usePayContext\";\n\n/// and Solana tokens. See OptionsList.\nexport function useTokenOptions(mode: \"evm\" | \"solana\" | \"showCoin\"): {\n optionsList: Option[];\n isLoading: boolean;\n} {\n const { setRoute, paymentState } = usePayContext();\n const {\n isDepositFlow,\n walletPaymentOptions,\n solanaPaymentOptions,\n setSelectedTokenOption,\n setSelectedSolanaTokenOption,\n } = paymentState;\n\n // Get translations once and pass down to helpers to avoid violating\n // the Rules-of-Hooks (hooks can only be called inside React components\n // or custom hooks).\n const locales = useLocales();\n const onString = flattenChildren(locales.on).join(\"\");\n\n // HACK: special handling for portfolio deposits\n const pay = useDaimoPay();\n const isPassthrough = !!pay.order?.metadata.payer?.passthroughTokens?.length;\n const nonPassthroughToken = isPassthrough\n ? pay.order?.destFinalCallTokenAmount.token\n : undefined;\n\n let optionsList: Option[] = [];\n let isLoading = false;\n if ([\"evm\", \"showCoin\"].includes(mode)) {\n optionsList.push(\n ...getEvmTokenOptions(\n walletPaymentOptions.options ?? [],\n isDepositFlow,\n setSelectedTokenOption,\n setRoute,\n onString,\n nonPassthroughToken,\n ),\n );\n isLoading ||= walletPaymentOptions.isLoading;\n }\n if ([\"solana\", \"showCoin\"].includes(mode)) {\n optionsList.push(\n ...getSolanaTokenOptions(\n solanaPaymentOptions.options ?? [],\n isDepositFlow,\n setSelectedSolanaTokenOption,\n setRoute,\n onString,\n ),\n );\n isLoading ||= solanaPaymentOptions.isLoading;\n }\n\n optionsList.sort((a, b) => {\n const dDisabled = (a.disabled ? 1 : 0) - (b.disabled ? 1 : 0);\n if (dDisabled !== 0) return dDisabled;\n const dSort = (b.sortValue ?? 0) - (a.sortValue ?? 0);\n return dSort;\n });\n\n return { optionsList, isLoading };\n}\n\nfunction getEvmTokenOptions(\n options: WalletPaymentOption[],\n isDepositFlow: boolean,\n setSelectedTokenOption: (option: WalletPaymentOption) => void,\n setRoute: (route: ROUTES, meta?: any) => void,\n onString: string,\n nonPassthroughToken?: Token,\n) {\n return options.map((option) => {\n const chainName = getChainName(option.balance.token.chainId);\n const titlePrice = isDepositFlow\n ? formatUsd(option.balance.usd)\n : roundTokenAmount(option.required.amount, option.required.token);\n const title = `${titlePrice} ${option.balance.token.symbol} ${onString} ${chainName}`;\n\n const balanceStr = `${roundTokenAmount(option.balance.amount, option.balance.token)} ${option.balance.token.symbol}`;\n let subtitle =\n option.disabledReason ??\n `${isDepositFlow ? \"\" : \"Balance: \"}${balanceStr}`;\n const disabled = option.disabledReason != null;\n\n // HACK: special handling for portfolio deposits\n if (nonPassthroughToken != null) {\n const defaultSym = nonPassthroughToken.symbol;\n const optSym = option.balance.token.symbol;\n if (option.passthroughAddress == null && optSym !== defaultSym) {\n subtitle = `Convert to ${defaultSym}`;\n } else {\n subtitle = `Deposit ${optSym}`;\n }\n }\n const sortValue =\n option.balance.usd + (option.passthroughAddress == null ? 0 : 1e9);\n\n return {\n id: getDaimoTokenKey(option.balance.token),\n sortValue,\n title,\n subtitle,\n icons: [\n <TokenChainLogo\n key={getDaimoTokenKey(option.balance.token)}\n token={option.balance.token}\n />,\n ],\n onClick: () => {\n setSelectedTokenOption(option);\n const meta = {\n event: \"click-token\",\n tokenSymbol: option.balance.token.symbol,\n chainId: option.balance.token.chainId,\n };\n if (isDepositFlow) {\n setRoute(ROUTES.SELECT_AMOUNT, meta);\n } else {\n setRoute(ROUTES.PAY_WITH_TOKEN, meta);\n }\n },\n disabled,\n };\n });\n}\n\nfunction getSolanaTokenOptions(\n options: WalletPaymentOption[],\n isDepositFlow: boolean,\n setSelectedSolanaTokenOption: (option: WalletPaymentOption) => void,\n setRoute: (route: ROUTES, meta?: any) => void,\n onString: string,\n) {\n return options.map((option) => {\n const titlePrice = isDepositFlow\n ? formatUsd(option.balance.usd)\n : roundTokenAmount(option.required.amount, option.required.token);\n const title = `${titlePrice} ${option.balance.token.symbol} ${onString} Solana`;\n const balanceStr = `${roundTokenAmount(option.balance.amount, option.balance.token)} ${option.balance.token.symbol}`;\n const subtitle =\n option.disabledReason ??\n `${isDepositFlow ? \"\" : \"Balance: \"}${balanceStr}`;\n const disabled = option.disabledReason != null;\n\n return {\n id: getDaimoTokenKey(option.balance.token),\n sortValue: option.balance.usd,\n title,\n subtitle,\n icons: [\n <TokenChainLogo\n key={getDaimoTokenKey(option.balance.token)}\n token={option.balance.token}\n />,\n ],\n onClick: () => {\n setSelectedSolanaTokenOption(option);\n const meta = {\n event: \"click-solana-token\",\n tokenSymbol: option.balance.token.symbol,\n chainId: option.balance.token.chainId,\n };\n if (isDepositFlow) {\n setRoute(ROUTES.SOLANA_SELECT_AMOUNT, meta);\n } else {\n setRoute(ROUTES.SOLANA_PAY_WITH_TOKEN, meta);\n }\n },\n disabled,\n };\n });\n}\n\nfunction getDaimoTokenKey(token: DaimoPayToken) {\n return `${token.chainId}-${token.token}`;\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"paymentFsm.js","sources":["../../../src/payment/paymentFsm.ts"],"sourcesContent":["import {\n assert,\n DaimoPayHydratedOrderWithOrg,\n DaimoPayIntentStatus,\n DaimoPayOrder,\n DaimoPayOrderID,\n DaimoPayOrderMode,\n DaimoPayOrderWithOrg,\n DaimoPayUserMetadata,\n ExternalPaymentOptionsString,\n isHydrated,\n SolanaPublicKey,\n} from \"@daimo/pay-common\";\nimport { Address, Hex, parseUnits } from \"viem\";\nimport { getDisplayExpiresAt } from \"./paymentUtils\";\n\n/** Payment parameters. The payment is created only after user taps pay. */\nexport interface PayParams {\n /** App ID, for authentication. */\n appId: string;\n /** Destination chain ID. */\n toChain: number;\n /** The destination token to send. */\n toToken: Address;\n /**\n * The amount of the token to send.\n * If not provided, the user will be prompted to enter an amount.\n */\n toUnits?: string;\n /** The final address to transfer to or contract to call. */\n toAddress: Address;\n /** Calldata for final call, or empty data for transfer. */\n toCallData?: Hex;\n /** The intent verb, such as Pay, Deposit, or Purchase. Default: Pay */\n intent?: string;\n /** Payment options. By default, all are enabled. */\n paymentOptions?: ExternalPaymentOptionsString[];\n /** Preferred chain IDs. */\n preferredChains?: number[];\n /** Preferred tokens. These appear first in the token list. */\n preferredTokens?: { chain: number; address: Address }[];\n /** Only allow payments on these EVM chains. */\n evmChains?: number[];\n /** External ID. E.g. a correlation ID. */\n externalId?: string;\n /** Developer metadata. E.g. correlation ID. */\n metadata?: DaimoPayUserMetadata;\n /** The address to refund to if the payment bounces or a refund is requested. */\n refundAddress?: Address;\n /** Pass-through tokens. If the user pays via these tokens, they're sent directly without swapping. */\n passthroughTokens?: { chain: number; address: Address }[];\n}\n\nexport type PaymentState =\n // payParams and payId are set\n | { type: \"idle\" }\n // payParams are set, payId is not set. A preview order has been created\n // but not saved to the db\n | {\n type: \"preview\";\n order: DaimoPayOrderWithOrg;\n payParamsData: PayParamsData;\n }\n // payId is set, payParams are not set. An unhydrated order has been created\n // and saved to the db\n | { type: \"unhydrated\"; order: DaimoPayOrderWithOrg }\n // Order was hydrated and is waiting to be paid\n | { type: \"payment_unpaid\"; order: DaimoPayHydratedOrderWithOrg }\n // Order was paid, destination was not processed\n | { type: \"payment_started\"; order: DaimoPayHydratedOrderWithOrg }\n // Order was paid and processed successfully\n | { type: \"payment_completed\"; order: DaimoPayHydratedOrderWithOrg }\n // Order was paid but the destination failed to process\n | { type: \"payment_bounced\"; order: DaimoPayHydratedOrderWithOrg }\n // An error occurred\n | { type: \"error\"; order: DaimoPayOrder | undefined; message: string };\n\nexport type PaymentStateType = PaymentState[\"type\"];\n\nexport const initialPaymentState: PaymentState = { type: \"idle\" };\n\nexport type PaymentEvent =\n /* command events (kick off an effect) */\n | { type: \"set_pay_params\"; payParams: PayParams }\n | { type: \"set_pay_id\"; payId: DaimoPayOrderID }\n // HACK: edit the order in-memory to change the amount in deposit flow\n | { type: \"set_chosen_usd\"; usd: number }\n | { type: \"hydrate_order\"; refundAddress?: Address }\n | {\n type: \"pay_source\";\n }\n | {\n type: \"pay_ethereum_source\";\n paymentTxHash: Hex;\n sourceChainId: number;\n payerAddress: Address;\n sourceToken: Address;\n sourceAmount: bigint;\n }\n | {\n type: \"pay_solana_source\";\n paymentTxHash: string;\n sourceToken: SolanaPublicKey;\n }\n /* result events (effect finished) */\n | {\n type: \"preview_generated\";\n order: DaimoPayOrderWithOrg;\n payParamsData: PayParamsData;\n }\n | { type: \"order_loaded\"; order: DaimoPayOrderWithOrg }\n | { type: \"order_hydrated\"; order: DaimoPayHydratedOrderWithOrg }\n | {\n type: \"payment_verified\";\n order: DaimoPayHydratedOrderWithOrg;\n }\n | {\n type: \"order_refreshed\";\n order: DaimoPayOrderWithOrg | DaimoPayHydratedOrderWithOrg;\n }\n | { type: \"dest_processed\"; order: DaimoPayHydratedOrderWithOrg }\n /* failure / util */\n | {\n type: \"error\";\n order: DaimoPayOrder | undefined;\n message: string;\n }\n | { type: \"reset\" };\n\ntype PayParamsData = {\n appId: string;\n};\n\n/**\n * Master payment reducer.\n */\nexport function paymentReducer(\n state: PaymentState,\n event: PaymentEvent,\n): PaymentState {\n switch (state.type) {\n case \"idle\":\n return reduceIdle(state, event);\n case \"preview\":\n return reducePreview(state, event);\n case \"unhydrated\":\n return reduceUnhydrated(state, event);\n case \"payment_unpaid\":\n return reducePaymentUnpaid(state, event);\n case \"payment_started\":\n return reducePaymentStarted(state, event);\n case \"payment_completed\":\n case \"payment_bounced\":\n case \"error\":\n return reduceTerminal(state, event);\n /* satisfies exhaustiveness */\n default:\n // Exhaustive check: Using `never` will cause lint failure if not all\n // state types are handled\n const _exhaustive: never = state;\n return _exhaustive;\n }\n}\n\n/* --------------------------------------------------\n reducer helpers – one function per state\n---------------------------------------------------*/\n\nfunction reduceIdle(\n state: Extract<PaymentState, { type: \"idle\" }>,\n event: PaymentEvent,\n): PaymentState {\n switch (event.type) {\n case \"preview_generated\": {\n const stateFromOrder = getStateFromOrder(event.order);\n\n // If order is already hydrated or in terminal state, use that state\n if (stateFromOrder.type !== \"unhydrated\") {\n return stateFromOrder;\n }\n\n // Order is not hydrated/processed, handle as preview\n return {\n type: \"preview\",\n order: event.order,\n payParamsData: event.payParamsData,\n };\n }\n case \"order_loaded\": {\n return getStateFromOrder(event.order);\n }\n case \"error\":\n return {\n type: \"error\",\n order: event.order,\n message: event.message,\n };\n case \"reset\":\n return initialPaymentState;\n default:\n return state;\n }\n}\n\nfunction reducePreview(\n state: Extract<PaymentState, { type: \"preview\" }>,\n event: PaymentEvent,\n): PaymentState {\n assert(\n state.order.mode !== DaimoPayOrderMode.HYDRATED,\n \"reducePreview called on hydrated order\",\n );\n\n switch (event.type) {\n case \"order_hydrated\":\n return getStateFromHydratedOrder(event.order);\n case \"set_chosen_usd\": {\n const token = state.order.destFinalCallTokenAmount.token;\n const tokenUnits = (event.usd / token.priceFromUsd).toString();\n const tokenAmount = parseUnits(tokenUnits, token.decimals);\n\n // Stay in preview state, but update the order's destFinalCallTokenAmount\n return {\n type: \"preview\",\n order: {\n ...state.order,\n destFinalCallTokenAmount: {\n token,\n amount: tokenAmount.toString() as `${bigint}`,\n usd: event.usd,\n },\n },\n payParamsData: state.payParamsData,\n };\n }\n case \"error\":\n return {\n type: \"error\",\n order: event.order,\n message: event.message,\n };\n case \"reset\":\n return initialPaymentState;\n default:\n return state;\n }\n}\n\nfunction reduceUnhydrated(\n state: Extract<PaymentState, { type: \"unhydrated\" }>,\n event: PaymentEvent,\n): PaymentState {\n switch (event.type) {\n case \"order_hydrated\":\n return { type: \"payment_unpaid\", order: event.order };\n case \"error\":\n return {\n type: \"error\",\n order: event.order,\n message: event.message,\n };\n case \"reset\":\n return initialPaymentState;\n default:\n return state;\n }\n}\n\nfunction reducePaymentUnpaid(\n state: Extract<PaymentState, { type: \"payment_unpaid\" }>,\n event: PaymentEvent,\n): PaymentState {\n switch (event.type) {\n case \"payment_verified\": {\n if (event.order.intentStatus === DaimoPayIntentStatus.UNPAID) {\n // The payment was not detected on chain, or some other error occurred.\n return {\n type: \"error\",\n order: event.order,\n message: \"Payment failed\",\n };\n }\n return getStateFromHydratedOrder(event.order);\n }\n case \"order_refreshed\":\n return getStateFromHydratedOrder(event.order);\n case \"error\":\n return {\n type: \"error\",\n order: event.order,\n message: event.message,\n };\n case \"reset\":\n return initialPaymentState;\n default:\n return state;\n }\n}\n\nfunction reducePaymentStarted(\n state: Extract<PaymentState, { type: \"payment_started\" }>,\n event: PaymentEvent,\n): PaymentState {\n switch (event.type) {\n case \"order_refreshed\":\n return getStateFromHydratedOrder(event.order);\n case \"error\":\n return {\n type: \"error\",\n order: event.order,\n message: event.message,\n };\n case \"reset\":\n return initialPaymentState;\n default:\n return state;\n }\n}\n\n/**\n * Determines the appropriate payment state based on an order's status and mode.\n * Returns the appropriate payment state based on the order's mode and intent status.\n */\nfunction getStateFromOrder(order: DaimoPayOrderWithOrg): PaymentState {\n if (order.mode === DaimoPayOrderMode.HYDRATED) {\n return getStateFromHydratedOrder(order);\n } else {\n return { type: \"unhydrated\", order };\n }\n}\n\n/**\n * Determines the appropriate payment state for a hydrated order. Progresses\n * the payment through different processing states.\n */\nfunction getStateFromHydratedOrder(order: DaimoPayOrderWithOrg): PaymentState {\n assert(isHydrated(order), `[PAYMENT_REDUCER] unhydrated`);\n\n // Handle finished orders first\n switch (order.intentStatus) {\n case DaimoPayIntentStatus.COMPLETED:\n return { type: \"payment_completed\", order };\n case DaimoPayIntentStatus.BOUNCED:\n return { type: \"payment_bounced\", order };\n }\n\n // If unfinished, check if expired\n const displayExpiresAt = getDisplayExpiresAt(order);\n if (Date.now() / 1e3 > displayExpiresAt) {\n return {\n type: \"error\",\n order,\n message: \"Payment expired. Please restart.\",\n };\n }\n\n // Unfinished but not expired\n switch (order.intentStatus) {\n case DaimoPayIntentStatus.UNPAID:\n return { type: \"payment_unpaid\", order };\n case DaimoPayIntentStatus.STARTED:\n return { type: \"payment_started\", order };\n default:\n return { type: \"error\", order, message: `Status: ${order.intentStatus}` };\n }\n}\n\nfunction reduceTerminal(\n state: Extract<\n PaymentState,\n { type: \"payment_completed\" | \"payment_bounced\" | \"error\" }\n >,\n event: PaymentEvent,\n): PaymentState {\n switch (event.type) {\n case \"reset\":\n return initialPaymentState;\n // In terminal states we ignore everything except reset\n default:\n return state;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"paymentFsm.js","sources":["../../../src/payment/paymentFsm.ts"],"sourcesContent":["import {\n assert,\n DaimoPayHydratedOrderWithOrg,\n DaimoPayIntentStatus,\n DaimoPayOrder,\n DaimoPayOrderID,\n DaimoPayOrderMode,\n DaimoPayOrderWithOrg,\n DaimoPayUserMetadata,\n ExternalPaymentOptionsString,\n isHydrated,\n SolanaPublicKey,\n UniquePaymentOptionsString,\n} from \"@daimo/pay-common\";\nimport { Address, Hex, parseUnits } from \"viem\";\nimport { getDisplayExpiresAt } from \"./paymentUtils\";\n\n/** Payment parameters. The payment is created only after user taps pay. */\nexport interface PayParams {\n /** App ID, for authentication. */\n appId: string;\n /** Destination chain ID. */\n toChain: number;\n /** The destination token to send. */\n toToken: Address;\n /**\n * The amount of the token to send.\n * If not provided, the user will be prompted to enter an amount.\n */\n toUnits?: string;\n /** The final address to transfer to or contract to call. */\n toAddress: Address;\n /** Calldata for final call, or empty data for transfer. */\n toCallData?: Hex;\n /** The intent verb, such as Pay, Deposit, or Purchase. Default: Pay */\n intent?: string;\n /** Payment options. By default, all are enabled. */\n paymentOptions?: ExternalPaymentOptionsString[];\n /** Preferred chain IDs. */\n preferredChains?: number[];\n /** Preferred tokens. These appear first in the token list. */\n preferredTokens?: { chain: number; address: Address }[];\n /** Only allow payments on these EVM chains. */\n evmChains?: number[];\n /** External ID. E.g. a correlation ID. */\n externalId?: string;\n /** Developer metadata. E.g. correlation ID. */\n metadata?: DaimoPayUserMetadata;\n /** The address to refund to if the payment bounces or a refund is requested. */\n refundAddress?: Address;\n /** Pass-through tokens. If the user pays via these tokens, they're sent directly without swapping. */\n passthroughTokens?: { chain: number; address: Address }[];\n /** Only show one payment option to the user. */\n uniquePaymentOption?: UniquePaymentOptionsString;\n}\n\nexport type PaymentState =\n // payParams and payId are set\n | { type: \"idle\" }\n // payParams are set, payId is not set. A preview order has been created\n // but not saved to the db\n | {\n type: \"preview\";\n order: DaimoPayOrderWithOrg;\n payParamsData: PayParamsData;\n }\n // payId is set, payParams are not set. An unhydrated order has been created\n // and saved to the db\n | { type: \"unhydrated\"; order: DaimoPayOrderWithOrg }\n // Order was hydrated and is waiting to be paid\n | { type: \"payment_unpaid\"; order: DaimoPayHydratedOrderWithOrg }\n // Order was paid, destination was not processed\n | { type: \"payment_started\"; order: DaimoPayHydratedOrderWithOrg }\n // Order was paid and processed successfully\n | { type: \"payment_completed\"; order: DaimoPayHydratedOrderWithOrg }\n // Order was paid but the destination failed to process\n | { type: \"payment_bounced\"; order: DaimoPayHydratedOrderWithOrg }\n // An error occurred\n | { type: \"error\"; order: DaimoPayOrder | undefined; message: string };\n\nexport type PaymentStateType = PaymentState[\"type\"];\n\nexport const initialPaymentState: PaymentState = { type: \"idle\" };\n\nexport type PaymentEvent =\n /* command events (kick off an effect) */\n | { type: \"set_pay_params\"; payParams: PayParams }\n | { type: \"set_pay_id\"; payId: DaimoPayOrderID }\n // HACK: edit the order in-memory to change the amount in deposit flow\n | { type: \"set_chosen_usd\"; usd: number }\n | { type: \"hydrate_order\"; refundAddress?: Address }\n | {\n type: \"pay_source\";\n }\n | {\n type: \"pay_ethereum_source\";\n paymentTxHash: Hex;\n sourceChainId: number;\n payerAddress: Address;\n sourceToken: Address;\n sourceAmount: bigint;\n }\n | {\n type: \"pay_solana_source\";\n paymentTxHash: string;\n sourceToken: SolanaPublicKey;\n }\n /* result events (effect finished) */\n | {\n type: \"preview_generated\";\n order: DaimoPayOrderWithOrg;\n payParamsData: PayParamsData;\n }\n | { type: \"order_loaded\"; order: DaimoPayOrderWithOrg }\n | { type: \"order_hydrated\"; order: DaimoPayHydratedOrderWithOrg }\n | {\n type: \"payment_verified\";\n order: DaimoPayHydratedOrderWithOrg;\n }\n | {\n type: \"order_refreshed\";\n order: DaimoPayOrderWithOrg | DaimoPayHydratedOrderWithOrg;\n }\n | { type: \"dest_processed\"; order: DaimoPayHydratedOrderWithOrg }\n /* failure / util */\n | {\n type: \"error\";\n order: DaimoPayOrder | undefined;\n message: string;\n }\n | { type: \"reset\" };\n\ntype PayParamsData = {\n appId: string;\n};\n\n/**\n * Master payment reducer.\n */\nexport function paymentReducer(\n state: PaymentState,\n event: PaymentEvent,\n): PaymentState {\n switch (state.type) {\n case \"idle\":\n return reduceIdle(state, event);\n case \"preview\":\n return reducePreview(state, event);\n case \"unhydrated\":\n return reduceUnhydrated(state, event);\n case \"payment_unpaid\":\n return reducePaymentUnpaid(state, event);\n case \"payment_started\":\n return reducePaymentStarted(state, event);\n case \"payment_completed\":\n case \"payment_bounced\":\n case \"error\":\n return reduceTerminal(state, event);\n /* satisfies exhaustiveness */\n default:\n // Exhaustive check: Using `never` will cause lint failure if not all\n // state types are handled\n const _exhaustive: never = state;\n return _exhaustive;\n }\n}\n\n/* --------------------------------------------------\n reducer helpers – one function per state\n---------------------------------------------------*/\n\nfunction reduceIdle(\n state: Extract<PaymentState, { type: \"idle\" }>,\n event: PaymentEvent,\n): PaymentState {\n switch (event.type) {\n case \"preview_generated\": {\n const stateFromOrder = getStateFromOrder(event.order);\n\n // If order is already hydrated or in terminal state, use that state\n if (stateFromOrder.type !== \"unhydrated\") {\n return stateFromOrder;\n }\n\n // Order is not hydrated/processed, handle as preview\n return {\n type: \"preview\",\n order: event.order,\n payParamsData: event.payParamsData,\n };\n }\n case \"order_loaded\": {\n return getStateFromOrder(event.order);\n }\n case \"error\":\n return {\n type: \"error\",\n order: event.order,\n message: event.message,\n };\n case \"reset\":\n return initialPaymentState;\n default:\n return state;\n }\n}\n\nfunction reducePreview(\n state: Extract<PaymentState, { type: \"preview\" }>,\n event: PaymentEvent,\n): PaymentState {\n assert(\n state.order.mode !== DaimoPayOrderMode.HYDRATED,\n \"reducePreview called on hydrated order\",\n );\n\n switch (event.type) {\n case \"order_hydrated\":\n return getStateFromHydratedOrder(event.order);\n case \"set_chosen_usd\": {\n const token = state.order.destFinalCallTokenAmount.token;\n const tokenUnits = (event.usd / token.priceFromUsd).toString();\n const tokenAmount = parseUnits(tokenUnits, token.decimals);\n\n // Stay in preview state, but update the order's destFinalCallTokenAmount\n return {\n type: \"preview\",\n order: {\n ...state.order,\n destFinalCallTokenAmount: {\n token,\n amount: tokenAmount.toString() as `${bigint}`,\n usd: event.usd,\n },\n },\n payParamsData: state.payParamsData,\n };\n }\n case \"error\":\n return {\n type: \"error\",\n order: event.order,\n message: event.message,\n };\n case \"reset\":\n return initialPaymentState;\n default:\n return state;\n }\n}\n\nfunction reduceUnhydrated(\n state: Extract<PaymentState, { type: \"unhydrated\" }>,\n event: PaymentEvent,\n): PaymentState {\n switch (event.type) {\n case \"order_hydrated\":\n return { type: \"payment_unpaid\", order: event.order };\n case \"error\":\n return {\n type: \"error\",\n order: event.order,\n message: event.message,\n };\n case \"reset\":\n return initialPaymentState;\n default:\n return state;\n }\n}\n\nfunction reducePaymentUnpaid(\n state: Extract<PaymentState, { type: \"payment_unpaid\" }>,\n event: PaymentEvent,\n): PaymentState {\n switch (event.type) {\n case \"payment_verified\": {\n if (event.order.intentStatus === DaimoPayIntentStatus.UNPAID) {\n // The payment was not detected on chain, or some other error occurred.\n return {\n type: \"error\",\n order: event.order,\n message: \"Payment failed\",\n };\n }\n return getStateFromHydratedOrder(event.order);\n }\n case \"order_refreshed\":\n return getStateFromHydratedOrder(event.order);\n case \"error\":\n return {\n type: \"error\",\n order: event.order,\n message: event.message,\n };\n case \"reset\":\n return initialPaymentState;\n default:\n return state;\n }\n}\n\nfunction reducePaymentStarted(\n state: Extract<PaymentState, { type: \"payment_started\" }>,\n event: PaymentEvent,\n): PaymentState {\n switch (event.type) {\n case \"order_refreshed\":\n return getStateFromHydratedOrder(event.order);\n case \"error\":\n return {\n type: \"error\",\n order: event.order,\n message: event.message,\n };\n case \"reset\":\n return initialPaymentState;\n default:\n return state;\n }\n}\n\n/**\n * Determines the appropriate payment state based on an order's status and mode.\n * Returns the appropriate payment state based on the order's mode and intent status.\n */\nfunction getStateFromOrder(order: DaimoPayOrderWithOrg): PaymentState {\n if (order.mode === DaimoPayOrderMode.HYDRATED) {\n return getStateFromHydratedOrder(order);\n } else {\n return { type: \"unhydrated\", order };\n }\n}\n\n/**\n * Determines the appropriate payment state for a hydrated order. Progresses\n * the payment through different processing states.\n */\nfunction getStateFromHydratedOrder(order: DaimoPayOrderWithOrg): PaymentState {\n assert(isHydrated(order), `[PAYMENT_REDUCER] unhydrated`);\n\n // Handle finished orders first\n switch (order.intentStatus) {\n case DaimoPayIntentStatus.COMPLETED:\n return { type: \"payment_completed\", order };\n case DaimoPayIntentStatus.BOUNCED:\n return { type: \"payment_bounced\", order };\n }\n\n // If unfinished, check if expired\n const displayExpiresAt = getDisplayExpiresAt(order);\n if (Date.now() / 1e3 > displayExpiresAt) {\n return {\n type: \"error\",\n order,\n message: \"Payment expired. Please restart.\",\n };\n }\n\n // Unfinished but not expired\n switch (order.intentStatus) {\n case DaimoPayIntentStatus.UNPAID:\n return { type: \"payment_unpaid\", order };\n case DaimoPayIntentStatus.STARTED:\n return { type: \"payment_started\", order };\n default:\n return { type: \"error\", order, message: `Status: ${order.intentStatus}` };\n }\n}\n\nfunction reduceTerminal(\n state: Extract<\n PaymentState,\n { type: \"payment_completed\" | \"payment_bounced\" | \"error\" }\n >,\n event: PaymentEvent,\n): PaymentState {\n switch (event.type) {\n case \"reset\":\n return initialPaymentState;\n // In terminal states we ignore everything except reset\n default:\n return state;\n }\n}\n"],"names":[],"mappings":"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"}