@daimo/pay 1.15.0 → 1.16.1

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 (375) hide show
  1. package/build/components/DaimoPayButton/index.d.ts +13 -0
  2. package/build/hooks/useConnect.d.ts +8 -8
  3. package/build/hooks/useLocales.d.ts +2 -1
  4. package/build/hooks/useWalletPaymentOptions.d.ts +12 -1
  5. package/build/index.d.ts +626 -15
  6. package/build/localizations/locales/en-US.d.ts +2 -0
  7. package/build/localizations/locales/index.d.ts +1 -0
  8. package/build/package.json.js +6 -4
  9. package/build/package.json.js.map +1 -1
  10. package/build/payment/paymentFsm.d.ts +5 -0
  11. package/build/payment/paymentUtils.d.ts +6 -0
  12. package/build/src/assets/MobileWithLogos.js +320 -1
  13. package/build/src/assets/MobileWithLogos.js.map +1 -1
  14. package/build/src/assets/ScanIconWithLogos.js +216 -10
  15. package/build/src/assets/ScanIconWithLogos.js.map +1 -1
  16. package/build/src/assets/browsers.js +963 -7
  17. package/build/src/assets/browsers.js.map +1 -1
  18. package/build/src/assets/chains.js +633 -103
  19. package/build/src/assets/chains.js.map +1 -1
  20. package/build/src/assets/coins.js +38 -1
  21. package/build/src/assets/coins.js.map +1 -1
  22. package/build/src/assets/crepe.js +35 -1
  23. package/build/src/assets/crepe.js.map +1 -1
  24. package/build/src/assets/icons.js +258 -15
  25. package/build/src/assets/icons.js.map +1 -1
  26. package/build/src/assets/logos.js +1510 -140
  27. package/build/src/assets/logos.js.map +1 -1
  28. package/build/src/assets/wallet.js +32 -1
  29. package/build/src/assets/wallet.js.map +1 -1
  30. package/build/src/assets/wave.js +41 -1
  31. package/build/src/assets/wave.js.map +1 -1
  32. package/build/src/components/Common/Alert/index.js +4 -1
  33. package/build/src/components/Common/Alert/index.js.map +1 -1
  34. package/build/src/components/Common/Alert/styles.js +4 -4
  35. package/build/src/components/Common/Alert/styles.js.map +1 -1
  36. package/build/src/components/Common/AmountInput/AmountInputField.js +29 -18
  37. package/build/src/components/Common/AmountInput/AmountInputField.js.map +1 -1
  38. package/build/src/components/Common/AmountInput/index.js +112 -99
  39. package/build/src/components/Common/AmountInput/index.js.map +1 -1
  40. package/build/src/components/Common/Avatar/index.js +63 -51
  41. package/build/src/components/Common/Avatar/index.js.map +1 -1
  42. package/build/src/components/Common/Avatar/styles.js +9 -14
  43. package/build/src/components/Common/Avatar/styles.js.map +1 -1
  44. package/build/src/components/Common/BrowserIcon/index.js +15 -14
  45. package/build/src/components/Common/BrowserIcon/index.js.map +1 -1
  46. package/build/src/components/Common/BrowserIcon/styles.js +1 -1
  47. package/build/src/components/Common/BrowserIcon/styles.js.map +1 -1
  48. package/build/src/components/Common/Button/index.js +131 -25
  49. package/build/src/components/Common/Button/index.js.map +1 -1
  50. package/build/src/components/Common/Button/styles.js +20 -24
  51. package/build/src/components/Common/Button/styles.js.map +1 -1
  52. package/build/src/components/Common/Chain/index.js +130 -14
  53. package/build/src/components/Common/Chain/index.js.map +1 -1
  54. package/build/src/components/Common/Chain/styles.js +9 -13
  55. package/build/src/components/Common/Chain/styles.js.map +1 -1
  56. package/build/src/components/Common/ChainSelectList/index.js +232 -89
  57. package/build/src/components/Common/ChainSelectList/index.js.map +1 -1
  58. package/build/src/components/Common/ChainSelectList/styles.js +11 -13
  59. package/build/src/components/Common/ChainSelectList/styles.js.map +1 -1
  60. package/build/src/components/Common/CircleTimer.js +85 -41
  61. package/build/src/components/Common/CircleTimer.js.map +1 -1
  62. package/build/src/components/Common/ConnectorList/index.js +106 -80
  63. package/build/src/components/Common/ConnectorList/index.js.map +1 -1
  64. package/build/src/components/Common/ConnectorList/styles.js +28 -36
  65. package/build/src/components/Common/ConnectorList/styles.js.map +1 -1
  66. package/build/src/components/Common/CopyToClipboard/CopyToClipboardIcon.js +16 -9
  67. package/build/src/components/Common/CopyToClipboard/CopyToClipboardIcon.js.map +1 -1
  68. package/build/src/components/Common/CopyToClipboard/index.js +3 -5
  69. package/build/src/components/Common/CopyToClipboard/index.js.map +1 -1
  70. package/build/src/components/Common/CustomQRCode/QRCode.js +120 -57
  71. package/build/src/components/Common/CustomQRCode/QRCode.js.map +1 -1
  72. package/build/src/components/Common/CustomQRCode/index.js +60 -10
  73. package/build/src/components/Common/CustomQRCode/index.js.map +1 -1
  74. package/build/src/components/Common/CustomQRCode/styles.js +6 -6
  75. package/build/src/components/Common/CustomQRCode/styles.js.map +1 -1
  76. package/build/src/components/Common/FitText/index.js +24 -17
  77. package/build/src/components/Common/FitText/index.js.map +1 -1
  78. package/build/src/components/Common/Modal/index.js +481 -267
  79. package/build/src/components/Common/Modal/index.js.map +1 -1
  80. package/build/src/components/Common/Modal/styles.js +44 -48
  81. package/build/src/components/Common/Modal/styles.js.map +1 -1
  82. package/build/src/components/Common/OptionsList/index.js +75 -33
  83. package/build/src/components/Common/OptionsList/index.js.map +1 -1
  84. package/build/src/components/Common/OptionsList/styles.js +7 -8
  85. package/build/src/components/Common/OptionsList/styles.js.map +1 -1
  86. package/build/src/components/Common/OrderHeader/index.js +109 -65
  87. package/build/src/components/Common/OrderHeader/index.js.map +1 -1
  88. package/build/src/components/Common/PaymentBreakdown/index.js +29 -7
  89. package/build/src/components/Common/PaymentBreakdown/index.js.map +1 -1
  90. package/build/src/components/Common/Portal/index.js +21 -22
  91. package/build/src/components/Common/Portal/index.js.map +1 -1
  92. package/build/src/components/Common/PoweredByFooter/index.js +39 -21
  93. package/build/src/components/Common/PoweredByFooter/index.js.map +1 -1
  94. package/build/src/components/Common/ScrollArea/index.js +107 -52
  95. package/build/src/components/Common/ScrollArea/index.js.map +1 -1
  96. package/build/src/components/Common/ScrollArea/styles.js +7 -11
  97. package/build/src/components/Common/ScrollArea/styles.js.map +1 -1
  98. package/build/src/components/Common/SelectAnotherMethodButton/index.js +67 -55
  99. package/build/src/components/Common/SelectAnotherMethodButton/index.js.map +1 -1
  100. package/build/src/components/Common/Spinner/index.js +56 -16
  101. package/build/src/components/Common/Spinner/index.js.map +1 -1
  102. package/build/src/components/Common/Spinner/styles.js +2 -2
  103. package/build/src/components/Common/Spinner/styles.js.map +1 -1
  104. package/build/src/components/Common/SwitchButton/index.js +18 -15
  105. package/build/src/components/Common/SwitchButton/index.js.map +1 -1
  106. package/build/src/components/Common/ThemedButton/index.js +37 -16
  107. package/build/src/components/Common/ThemedButton/index.js.map +1 -1
  108. package/build/src/components/Common/ThemedButton/styles.js +2 -2
  109. package/build/src/components/Common/ThemedButton/styles.js.map +1 -1
  110. package/build/src/components/Common/TokenChainLogo/index.js +14 -8
  111. package/build/src/components/Common/TokenChainLogo/index.js.map +1 -1
  112. package/build/src/components/Common/Tooltip/index.js +115 -83
  113. package/build/src/components/Common/Tooltip/index.js.map +1 -1
  114. package/build/src/components/Common/Tooltip/styles.js +8 -8
  115. package/build/src/components/Common/Tooltip/styles.js.map +1 -1
  116. package/build/src/components/Common/WalletChainLogo/index.js +13 -6
  117. package/build/src/components/Common/WalletChainLogo/index.js.map +1 -1
  118. package/build/src/components/DaimoPayButton/index.js +170 -176
  119. package/build/src/components/DaimoPayButton/index.js.map +1 -1
  120. package/build/src/components/DaimoPayButton/styles.js +4 -4
  121. package/build/src/components/DaimoPayButton/styles.js.map +1 -1
  122. package/build/src/components/DaimoPayModal/ConnectUsing.js +50 -24
  123. package/build/src/components/DaimoPayModal/ConnectUsing.js.map +1 -1
  124. package/build/src/components/DaimoPayModal/ConnectWithInjector/index.js +303 -163
  125. package/build/src/components/DaimoPayModal/ConnectWithInjector/index.js.map +1 -1
  126. package/build/src/components/DaimoPayModal/ConnectWithInjector/styles.js +10 -12
  127. package/build/src/components/DaimoPayModal/ConnectWithInjector/styles.js.map +1 -1
  128. package/build/src/components/DaimoPayModal/ConnectWithQRCode.js +69 -39
  129. package/build/src/components/DaimoPayModal/ConnectWithQRCode.js.map +1 -1
  130. package/build/src/components/DaimoPayModal/index.js +409 -416
  131. package/build/src/components/DaimoPayModal/index.js.map +1 -1
  132. package/build/src/components/DaimoPayThemeProvider/DaimoPayThemeProvider.js +15 -11
  133. package/build/src/components/DaimoPayThemeProvider/DaimoPayThemeProvider.js.map +1 -1
  134. package/build/src/components/Pages/About/graphics.js +796 -130
  135. package/build/src/components/Pages/About/graphics.js.map +1 -1
  136. package/build/src/components/Pages/About/index.js +203 -110
  137. package/build/src/components/Pages/About/index.js.map +1 -1
  138. package/build/src/components/Pages/About/styles.js +11 -15
  139. package/build/src/components/Pages/About/styles.js.map +1 -1
  140. package/build/src/components/Pages/Confirmation/index.js +72 -41
  141. package/build/src/components/Pages/Confirmation/index.js.map +1 -1
  142. package/build/src/components/Pages/Connectors/index.js +50 -16
  143. package/build/src/components/Pages/Connectors/index.js.map +1 -1
  144. package/build/src/components/Pages/Connectors/styles.js +10 -10
  145. package/build/src/components/Pages/Connectors/styles.js.map +1 -1
  146. package/build/src/components/Pages/DownloadApp/index.js +23 -18
  147. package/build/src/components/Pages/DownloadApp/index.js.map +1 -1
  148. package/build/src/components/Pages/Error/index.js +27 -15
  149. package/build/src/components/Pages/Error/index.js.map +1 -1
  150. package/build/src/components/Pages/MobileConnectors/index.js +50 -44
  151. package/build/src/components/Pages/MobileConnectors/index.js.map +1 -1
  152. package/build/src/components/Pages/MobileConnectors/styles.js +9 -11
  153. package/build/src/components/Pages/MobileConnectors/styles.js.map +1 -1
  154. package/build/src/components/Pages/Onboarding/index.js +20 -4
  155. package/build/src/components/Pages/Onboarding/index.js.map +1 -1
  156. package/build/src/components/Pages/Onboarding/styles.js +13 -13
  157. package/build/src/components/Pages/Onboarding/styles.js.map +1 -1
  158. package/build/src/components/Pages/PayWithToken/index.js +133 -122
  159. package/build/src/components/Pages/PayWithToken/index.js.map +1 -1
  160. package/build/src/components/Pages/SelectAmount/index.js +12 -5
  161. package/build/src/components/Pages/SelectAmount/index.js.map +1 -1
  162. package/build/src/components/Pages/SelectDepositAddressAmount/index.js +56 -38
  163. package/build/src/components/Pages/SelectDepositAddressAmount/index.js.map +1 -1
  164. package/build/src/components/Pages/SelectDepositAddressChain/index.js +57 -40
  165. package/build/src/components/Pages/SelectDepositAddressChain/index.js.map +1 -1
  166. package/build/src/components/Pages/SelectExchange/index.js +29 -24
  167. package/build/src/components/Pages/SelectExchange/index.js.map +1 -1
  168. package/build/src/components/Pages/SelectExternalAmount/index.js +57 -41
  169. package/build/src/components/Pages/SelectExternalAmount/index.js.map +1 -1
  170. package/build/src/components/Pages/SelectMethod/index.js +201 -183
  171. package/build/src/components/Pages/SelectMethod/index.js.map +1 -1
  172. package/build/src/components/Pages/SelectToken/index.js +72 -46
  173. package/build/src/components/Pages/SelectToken/index.js.map +1 -1
  174. package/build/src/components/Pages/SelectWalletAmount/index.js +40 -32
  175. package/build/src/components/Pages/SelectWalletAmount/index.js.map +1 -1
  176. package/build/src/components/Pages/SelectWalletChain/index.js +40 -36
  177. package/build/src/components/Pages/SelectWalletChain/index.js.map +1 -1
  178. package/build/src/components/Pages/SelectZKP/index.js +29 -24
  179. package/build/src/components/Pages/SelectZKP/index.js.map +1 -1
  180. package/build/src/components/Pages/Solana/ConnectorSolana/index.js +60 -45
  181. package/build/src/components/Pages/Solana/ConnectorSolana/index.js.map +1 -1
  182. package/build/src/components/Pages/Solana/PayWithSolanaToken/index.js +73 -61
  183. package/build/src/components/Pages/Solana/PayWithSolanaToken/index.js.map +1 -1
  184. package/build/src/components/Pages/Solana/SelectSolanaAmount/index.js +12 -5
  185. package/build/src/components/Pages/Solana/SelectSolanaAmount/index.js.map +1 -1
  186. package/build/src/components/Pages/SwitchNetworks/index.js +29 -10
  187. package/build/src/components/Pages/SwitchNetworks/index.js.map +1 -1
  188. package/build/src/components/Pages/WaitingDepositAddress/index.js +339 -178
  189. package/build/src/components/Pages/WaitingDepositAddress/index.js.map +1 -1
  190. package/build/src/components/Pages/WaitingExternal/index.js +69 -46
  191. package/build/src/components/Pages/WaitingExternal/index.js.map +1 -1
  192. package/build/src/components/Pages/WaitingWallet/index.js +37 -16
  193. package/build/src/components/Pages/WaitingWallet/index.js.map +1 -1
  194. package/build/src/components/Spinners/CircleSpinner/index.js +96 -7
  195. package/build/src/components/Spinners/CircleSpinner/index.js.map +1 -1
  196. package/build/src/components/Spinners/CircleSpinner/styles.js +6 -7
  197. package/build/src/components/Spinners/CircleSpinner/styles.js.map +1 -1
  198. package/build/src/components/Spinners/ExternalPaymentSpinner/index.js +18 -9
  199. package/build/src/components/Spinners/ExternalPaymentSpinner/index.js.map +1 -1
  200. package/build/src/components/Spinners/SquircleSpinner/index.js +60 -7
  201. package/build/src/components/Spinners/SquircleSpinner/index.js.map +1 -1
  202. package/build/src/components/Spinners/SquircleSpinner/styles.js +4 -4
  203. package/build/src/components/Spinners/SquircleSpinner/styles.js.map +1 -1
  204. package/build/src/components/Spinners/TokenLogoSpinner/index.js +12 -1
  205. package/build/src/components/Spinners/TokenLogoSpinner/index.js.map +1 -1
  206. package/build/src/components/Spinners/TokenLogoSpinner/styles.js +1 -1
  207. package/build/src/components/Spinners/TokenLogoSpinner/styles.js.map +1 -1
  208. package/build/src/components/Spinners/WalletPaymentSpinner/index.js +27 -20
  209. package/build/src/components/Spinners/WalletPaymentSpinner/index.js.map +1 -1
  210. package/build/src/components/Spinners/styles.js +3 -4
  211. package/build/src/components/Spinners/styles.js.map +1 -1
  212. package/build/src/constants/defaultTheme.js +1 -1
  213. package/build/src/constants/defaultTheme.js.map +1 -1
  214. package/build/src/constants/routes.js +29 -30
  215. package/build/src/constants/routes.js.map +1 -1
  216. package/build/src/defaultConfig.js +49 -46
  217. package/build/src/defaultConfig.js.map +1 -1
  218. package/build/src/defaultConnectors.js +32 -19
  219. package/build/src/defaultConnectors.js.map +1 -1
  220. package/build/src/hooks/useChainIsSupported.js +3 -5
  221. package/build/src/hooks/useChainIsSupported.js.map +1 -1
  222. package/build/src/hooks/useChains.js +3 -4
  223. package/build/src/hooks/useChains.js.map +1 -1
  224. package/build/src/hooks/useConnect.js +51 -39
  225. package/build/src/hooks/useConnect.js.map +1 -1
  226. package/build/src/hooks/useConnectCallback.js +15 -12
  227. package/build/src/hooks/useConnectCallback.js.map +1 -1
  228. package/build/src/hooks/useConnectors.js +2 -2
  229. package/build/src/hooks/useConnectors.js.map +1 -1
  230. package/build/src/hooks/useDaimoPay.js +98 -82
  231. package/build/src/hooks/useDaimoPay.js.map +1 -1
  232. package/build/src/hooks/useDaimoPayStatus.js +4 -15
  233. package/build/src/hooks/useDaimoPayStatus.js.map +1 -1
  234. package/build/src/hooks/useDaimoPayUI.js +7 -7
  235. package/build/src/hooks/useDaimoPayUI.js.map +1 -1
  236. package/build/src/hooks/useDepositAddressOptions.js +29 -25
  237. package/build/src/hooks/useDepositAddressOptions.js.map +1 -1
  238. package/build/src/hooks/useEnsFallbackConfig.js +5 -5
  239. package/build/src/hooks/useEnsFallbackConfig.js.map +1 -1
  240. package/build/src/hooks/useExternalPaymentOptions.js +57 -52
  241. package/build/src/hooks/useExternalPaymentOptions.js.map +1 -1
  242. package/build/src/hooks/useFitText.js +120 -135
  243. package/build/src/hooks/useFitText.js.map +1 -1
  244. package/build/src/hooks/useFocusTrap.js +33 -37
  245. package/build/src/hooks/useFocusTrap.js.map +1 -1
  246. package/build/src/hooks/useIsMobile.js +3 -3
  247. package/build/src/hooks/useIsMobile.js.map +1 -1
  248. package/build/src/hooks/useIsMounted.js +3 -5
  249. package/build/src/hooks/useIsMounted.js.map +1 -1
  250. package/build/src/hooks/useLastConnector.js +15 -15
  251. package/build/src/hooks/useLastConnector.js.map +1 -1
  252. package/build/src/hooks/useLocales.js +44 -42
  253. package/build/src/hooks/useLocales.js.map +1 -1
  254. package/build/src/hooks/useLockBodyScroll.js +38 -44
  255. package/build/src/hooks/useLockBodyScroll.js.map +1 -1
  256. package/build/src/hooks/useOrderUsdLimits.js +17 -19
  257. package/build/src/hooks/useOrderUsdLimits.js.map +1 -1
  258. package/build/src/hooks/usePayContext.js +3 -5
  259. package/build/src/hooks/usePayContext.js.map +1 -1
  260. package/build/src/hooks/usePaymentState.js +351 -321
  261. package/build/src/hooks/usePaymentState.js.map +1 -1
  262. package/build/src/hooks/usePrevious.js +6 -7
  263. package/build/src/hooks/usePrevious.js.map +1 -1
  264. package/build/src/hooks/useSolanaPaymentOptions.js +33 -33
  265. package/build/src/hooks/useSolanaPaymentOptions.js.map +1 -1
  266. package/build/src/hooks/useTokenOptions.js +131 -95
  267. package/build/src/hooks/useTokenOptions.js.map +1 -1
  268. package/build/src/hooks/useUntronAvailability.js +26 -34
  269. package/build/src/hooks/useUntronAvailability.js.map +1 -1
  270. package/build/src/hooks/useWalletPaymentOptions.js +86 -61
  271. package/build/src/hooks/useWalletPaymentOptions.js.map +1 -1
  272. package/build/src/hooks/useWindowSize.js +16 -16
  273. package/build/src/hooks/useWindowSize.js.map +1 -1
  274. package/build/src/localizations/index.js +28 -31
  275. package/build/src/localizations/index.js.map +1 -1
  276. package/build/src/localizations/locales/ar-AE.js +88 -88
  277. package/build/src/localizations/locales/ar-AE.js.map +1 -1
  278. package/build/src/localizations/locales/ca-AD.js +88 -88
  279. package/build/src/localizations/locales/ca-AD.js.map +1 -1
  280. package/build/src/localizations/locales/ee-EE.js +96 -88
  281. package/build/src/localizations/locales/ee-EE.js.map +1 -1
  282. package/build/src/localizations/locales/en-US.js +134 -124
  283. package/build/src/localizations/locales/en-US.js.map +1 -1
  284. package/build/src/localizations/locales/es-ES.js +126 -124
  285. package/build/src/localizations/locales/es-ES.js.map +1 -1
  286. package/build/src/localizations/locales/fa-IR.js +88 -88
  287. package/build/src/localizations/locales/fa-IR.js.map +1 -1
  288. package/build/src/localizations/locales/fr-FR.js +88 -88
  289. package/build/src/localizations/locales/fr-FR.js.map +1 -1
  290. package/build/src/localizations/locales/ja-JP.js +88 -88
  291. package/build/src/localizations/locales/ja-JP.js.map +1 -1
  292. package/build/src/localizations/locales/pt-BR.js +96 -88
  293. package/build/src/localizations/locales/pt-BR.js.map +1 -1
  294. package/build/src/localizations/locales/ru-RU.js +92 -88
  295. package/build/src/localizations/locales/ru-RU.js.map +1 -1
  296. package/build/src/localizations/locales/tr-TR.js +96 -88
  297. package/build/src/localizations/locales/tr-TR.js.map +1 -1
  298. package/build/src/localizations/locales/vi-VN.js +96 -88
  299. package/build/src/localizations/locales/vi-VN.js.map +1 -1
  300. package/build/src/localizations/locales/zh-CN.js +88 -88
  301. package/build/src/localizations/locales/zh-CN.js.map +1 -1
  302. package/build/src/payment/paymentEffects.js +237 -264
  303. package/build/src/payment/paymentEffects.js.map +1 -1
  304. package/build/src/payment/paymentFsm.js +167 -187
  305. package/build/src/payment/paymentFsm.js.map +1 -1
  306. package/build/src/payment/paymentStore.js +8 -10
  307. package/build/src/payment/paymentStore.js.map +1 -1
  308. package/build/src/payment/paymentUtils.js +10 -0
  309. package/build/src/payment/paymentUtils.js.map +1 -0
  310. package/build/src/provider/DaimoPayProvider.js +258 -245
  311. package/build/src/provider/DaimoPayProvider.js.map +1 -1
  312. package/build/src/provider/PayContext.js +0 -1
  313. package/build/src/provider/PayContext.js.map +1 -1
  314. package/build/src/provider/PaymentProvider.js +18 -17
  315. package/build/src/provider/PaymentProvider.js.map +1 -1
  316. package/build/src/provider/SolanaContextProvider.js +6 -3
  317. package/build/src/provider/SolanaContextProvider.js.map +1 -1
  318. package/build/src/provider/Web3ContextProvider.js +23 -23
  319. package/build/src/provider/Web3ContextProvider.js.map +1 -1
  320. package/build/src/stateStore.js +28 -74
  321. package/build/src/stateStore.js.map +1 -1
  322. package/build/src/styles/defaultTheme.js +64 -73
  323. package/build/src/styles/defaultTheme.js.map +1 -1
  324. package/build/src/styles/index.js +202 -217
  325. package/build/src/styles/index.js.map +1 -1
  326. package/build/src/styles/styled/index.js +0 -10
  327. package/build/src/styles/styled/index.js.map +1 -1
  328. package/build/src/styles/themes/base.js +136 -136
  329. package/build/src/styles/themes/base.js.map +1 -1
  330. package/build/src/styles/themes/index.js.map +1 -1
  331. package/build/src/styles/themes/midnight.js +71 -71
  332. package/build/src/styles/themes/midnight.js.map +1 -1
  333. package/build/src/styles/themes/minimal.js +75 -75
  334. package/build/src/styles/themes/minimal.js.map +1 -1
  335. package/build/src/styles/themes/nouns.js +76 -76
  336. package/build/src/styles/themes/nouns.js.map +1 -1
  337. package/build/src/styles/themes/retro.js +88 -88
  338. package/build/src/styles/themes/retro.js.map +1 -1
  339. package/build/src/styles/themes/rounded.js +84 -84
  340. package/build/src/styles/themes/rounded.js.map +1 -1
  341. package/build/src/styles/themes/soft.js +66 -66
  342. package/build/src/styles/themes/soft.js.map +1 -1
  343. package/build/src/styles/themes/web95.js +95 -95
  344. package/build/src/styles/themes/web95.js.map +1 -1
  345. package/build/src/utils/exports.js +0 -1
  346. package/build/src/utils/exports.js.map +1 -1
  347. package/build/src/utils/format.js +25 -63
  348. package/build/src/utils/format.js.map +1 -1
  349. package/build/src/utils/index.js +23 -20
  350. package/build/src/utils/index.js.map +1 -1
  351. package/build/src/utils/p3.js +8 -9
  352. package/build/src/utils/p3.js.map +1 -1
  353. package/build/src/utils/platform.js +6 -8
  354. package/build/src/utils/platform.js.map +1 -1
  355. package/build/src/utils/polling.js +31 -31
  356. package/build/src/utils/polling.js.map +1 -1
  357. package/build/src/utils/supportUrl.js +9 -9
  358. package/build/src/utils/supportUrl.js.map +1 -1
  359. package/build/src/utils/trpc.js +11 -11
  360. package/build/src/utils/trpc.js.map +1 -1
  361. package/build/src/utils/validateInput.js +9 -29
  362. package/build/src/utils/validateInput.js.map +1 -1
  363. package/build/src/wallets/index.js +13 -22
  364. package/build/src/wallets/index.js.map +1 -1
  365. package/build/src/wallets/useWallets.js +183 -181
  366. package/build/src/wallets/useWallets.js.map +1 -1
  367. package/build/src/wallets/walletConfigs.js +230 -235
  368. package/build/src/wallets/walletConfigs.js.map +1 -1
  369. package/build/src/world-mini-app/WorldPayButton.js +113 -118
  370. package/build/src/world-mini-app/WorldPayButton.js.map +1 -1
  371. package/build/src/world-mini-app/promptWorldPayment.js +49 -47
  372. package/build/src/world-mini-app/promptWorldPayment.js.map +1 -1
  373. package/build/types-7ed033b6.d.ts +66 -0
  374. package/build/world.d.ts +89 -1
  375. package/package.json +6 -4
@@ -1,213 +1,193 @@
1
1
  import { assert, DaimoPayOrderMode, DaimoPayIntentStatus, isHydrated } from '@daimo/pay-common';
2
2
  import { parseUnits } from 'viem';
3
+ import { getDisplayExpiresAt } from './paymentUtils.js';
3
4
 
4
5
  const initialPaymentState = { type: "idle" };
5
- /**
6
- * Master payment reducer.
7
- */
8
6
  function paymentReducer(state, event) {
9
- switch (state.type) {
10
- case "idle":
11
- return reduceIdle(state, event);
12
- case "preview":
13
- return reducePreview(state, event);
14
- case "unhydrated":
15
- return reduceUnhydrated(state, event);
16
- case "payment_unpaid":
17
- return reducePaymentUnpaid(state, event);
18
- case "payment_started":
19
- return reducePaymentStarted(state, event);
20
- case "payment_completed":
21
- case "payment_bounced":
22
- case "error":
23
- return reduceTerminal(state, event);
24
- /* satisfies exhaustiveness */
25
- default:
26
- // Exhaustive check: Using `never` will cause lint failure if not all
27
- // state types are handled
28
- const _exhaustive = state;
29
- return _exhaustive;
30
- }
7
+ switch (state.type) {
8
+ case "idle":
9
+ return reduceIdle(state, event);
10
+ case "preview":
11
+ return reducePreview(state, event);
12
+ case "unhydrated":
13
+ return reduceUnhydrated(state, event);
14
+ case "payment_unpaid":
15
+ return reducePaymentUnpaid(state, event);
16
+ case "payment_started":
17
+ return reducePaymentStarted(state, event);
18
+ case "payment_completed":
19
+ case "payment_bounced":
20
+ case "error":
21
+ return reduceTerminal(state, event);
22
+ /* satisfies exhaustiveness */
23
+ default:
24
+ const _exhaustive = state;
25
+ return _exhaustive;
26
+ }
31
27
  }
32
- /* --------------------------------------------------
33
- reducer helpers – one function per state
34
- ---------------------------------------------------*/
35
28
  function reduceIdle(state, event) {
36
- switch (event.type) {
37
- case "preview_generated": {
38
- const stateFromOrder = getStateFromOrder(event.order);
39
- // If order is already hydrated or in terminal state, use that state
40
- if (stateFromOrder.type !== "unhydrated") {
41
- return stateFromOrder;
42
- }
43
- // Order is not hydrated/processed, handle as preview
44
- return {
45
- type: "preview",
46
- order: event.order,
47
- payParamsData: event.payParamsData,
48
- };
49
- }
50
- case "order_loaded": {
51
- return getStateFromOrder(event.order);
52
- }
53
- case "error":
54
- return {
55
- type: "error",
56
- order: event.order,
57
- message: event.message,
58
- };
59
- case "reset":
60
- return initialPaymentState;
61
- default:
62
- return state;
29
+ switch (event.type) {
30
+ case "preview_generated": {
31
+ const stateFromOrder = getStateFromOrder(event.order);
32
+ if (stateFromOrder.type !== "unhydrated") {
33
+ return stateFromOrder;
34
+ }
35
+ return {
36
+ type: "preview",
37
+ order: event.order,
38
+ payParamsData: event.payParamsData
39
+ };
40
+ }
41
+ case "order_loaded": {
42
+ return getStateFromOrder(event.order);
63
43
  }
44
+ case "error":
45
+ return {
46
+ type: "error",
47
+ order: event.order,
48
+ message: event.message
49
+ };
50
+ case "reset":
51
+ return initialPaymentState;
52
+ default:
53
+ return state;
54
+ }
64
55
  }
65
56
  function reducePreview(state, event) {
66
- assert(state.order.mode !== DaimoPayOrderMode.HYDRATED, "reducePreview called on hydrated order");
67
- switch (event.type) {
68
- case "order_hydrated":
69
- return { type: "payment_unpaid", order: event.order };
70
- case "set_chosen_usd": {
71
- const token = state.order.destFinalCallTokenAmount.token;
72
- const tokenUnits = (event.usd / token.priceFromUsd).toString();
73
- const tokenAmount = parseUnits(tokenUnits, token.decimals);
74
- // Stay in preview state, but update the order's destFinalCallTokenAmount
75
- return {
76
- type: "preview",
77
- order: {
78
- ...state.order,
79
- destFinalCallTokenAmount: {
80
- token,
81
- amount: tokenAmount.toString(),
82
- usd: event.usd,
83
- },
84
- },
85
- payParamsData: state.payParamsData,
86
- };
87
- }
88
- case "error":
89
- return {
90
- type: "error",
91
- order: event.order,
92
- message: event.message,
93
- };
94
- case "reset":
95
- return initialPaymentState;
96
- default:
97
- return state;
57
+ assert(
58
+ state.order.mode !== DaimoPayOrderMode.HYDRATED,
59
+ "reducePreview called on hydrated order"
60
+ );
61
+ switch (event.type) {
62
+ case "order_hydrated":
63
+ return getStateFromHydratedOrder(event.order);
64
+ case "set_chosen_usd": {
65
+ const token = state.order.destFinalCallTokenAmount.token;
66
+ const tokenUnits = (event.usd / token.priceFromUsd).toString();
67
+ const tokenAmount = parseUnits(tokenUnits, token.decimals);
68
+ return {
69
+ type: "preview",
70
+ order: {
71
+ ...state.order,
72
+ destFinalCallTokenAmount: {
73
+ token,
74
+ amount: tokenAmount.toString(),
75
+ usd: event.usd
76
+ }
77
+ },
78
+ payParamsData: state.payParamsData
79
+ };
98
80
  }
81
+ case "error":
82
+ return {
83
+ type: "error",
84
+ order: event.order,
85
+ message: event.message
86
+ };
87
+ case "reset":
88
+ return initialPaymentState;
89
+ default:
90
+ return state;
91
+ }
99
92
  }
100
93
  function reduceUnhydrated(state, event) {
101
- switch (event.type) {
102
- case "order_hydrated":
103
- return { type: "payment_unpaid", order: event.order };
104
- case "error":
105
- return {
106
- type: "error",
107
- order: event.order,
108
- message: event.message,
109
- };
110
- case "reset":
111
- return initialPaymentState;
112
- default:
113
- return state;
114
- }
94
+ switch (event.type) {
95
+ case "order_hydrated":
96
+ return { type: "payment_unpaid", order: event.order };
97
+ case "error":
98
+ return {
99
+ type: "error",
100
+ order: event.order,
101
+ message: event.message
102
+ };
103
+ case "reset":
104
+ return initialPaymentState;
105
+ default:
106
+ return state;
107
+ }
115
108
  }
116
109
  function reducePaymentUnpaid(state, event) {
117
- switch (event.type) {
118
- case "payment_verified": {
119
- if (event.order.intentStatus === DaimoPayIntentStatus.UNPAID) {
120
- // The payment was not detected on chain, or some other error occurred.
121
- return {
122
- type: "error",
123
- order: event.order,
124
- message: "Payment failed",
125
- };
126
- }
127
- return getStateFromHydratedOrder(state, event.order);
128
- }
129
- case "order_refreshed":
130
- return getStateFromHydratedOrder(state, event.order);
131
- case "error":
132
- return {
133
- type: "error",
134
- order: event.order,
135
- message: event.message,
136
- };
137
- case "reset":
138
- return initialPaymentState;
139
- default:
140
- return state;
110
+ switch (event.type) {
111
+ case "payment_verified": {
112
+ if (event.order.intentStatus === DaimoPayIntentStatus.UNPAID) {
113
+ return {
114
+ type: "error",
115
+ order: event.order,
116
+ message: "Payment failed"
117
+ };
118
+ }
119
+ return getStateFromHydratedOrder(event.order);
141
120
  }
121
+ case "order_refreshed":
122
+ return getStateFromHydratedOrder(event.order);
123
+ case "error":
124
+ return {
125
+ type: "error",
126
+ order: event.order,
127
+ message: event.message
128
+ };
129
+ case "reset":
130
+ return initialPaymentState;
131
+ default:
132
+ return state;
133
+ }
142
134
  }
143
135
  function reducePaymentStarted(state, event) {
144
- switch (event.type) {
145
- case "order_refreshed":
146
- return getStateFromHydratedOrder(state, event.order);
147
- case "error":
148
- return {
149
- type: "error",
150
- order: event.order,
151
- message: event.message,
152
- };
153
- case "reset":
154
- return initialPaymentState;
155
- default:
156
- return state;
157
- }
136
+ switch (event.type) {
137
+ case "order_refreshed":
138
+ return getStateFromHydratedOrder(event.order);
139
+ case "error":
140
+ return {
141
+ type: "error",
142
+ order: event.order,
143
+ message: event.message
144
+ };
145
+ case "reset":
146
+ return initialPaymentState;
147
+ default:
148
+ return state;
149
+ }
158
150
  }
159
- /**
160
- * Determines the appropriate payment state based on an order's status and mode.
161
- * Returns the appropriate payment state based on the order's mode and intent status.
162
- */
163
151
  function getStateFromOrder(order) {
164
- if (order.intentStatus === DaimoPayIntentStatus.COMPLETED) {
165
- assert(order.mode === DaimoPayOrderMode.HYDRATED, `[PAYMENT_REDUCER] order ${order.id} is ${order.intentStatus} but not hydrated`);
166
- return { type: "payment_completed", order };
167
- }
168
- else if (order.intentStatus === DaimoPayIntentStatus.BOUNCED) {
169
- assert(order.mode === DaimoPayOrderMode.HYDRATED, `[PAYMENT_REDUCER] order ${order.id} is ${order.intentStatus} but not hydrated`);
170
- return { type: "payment_bounced", order };
171
- }
172
- else if (order.intentStatus === DaimoPayIntentStatus.STARTED) {
173
- assert(order.mode === DaimoPayOrderMode.HYDRATED, `[PAYMENT_REDUCER] order ${order.id} is ${order.intentStatus} but not hydrated`);
174
- return { type: "payment_started", order };
175
- }
176
- else if (order.mode === DaimoPayOrderMode.HYDRATED) {
177
- return { type: "payment_unpaid", order };
178
- }
179
- else {
180
- // Order is not hydrated (SALE or CHOOSE_AMOUNT mode)
181
- return { type: "unhydrated", order };
182
- }
152
+ if (order.mode === DaimoPayOrderMode.HYDRATED) {
153
+ return getStateFromHydratedOrder(order);
154
+ } else {
155
+ return { type: "unhydrated", order };
156
+ }
183
157
  }
184
- /**
185
- * Determines the appropriate payment state for a hydrated order. Progresses
186
- * the payment through different processing states.
187
- */
188
- function getStateFromHydratedOrder(state, order) {
189
- assert(isHydrated(order), `[PAYMENT_REDUCER] unhydrated`);
190
- switch (order.intentStatus) {
191
- case DaimoPayIntentStatus.UNPAID:
192
- return { type: "payment_unpaid", order };
193
- case DaimoPayIntentStatus.STARTED:
194
- return { type: "payment_started", order };
195
- case DaimoPayIntentStatus.COMPLETED:
196
- return { type: "payment_completed", order };
197
- case DaimoPayIntentStatus.BOUNCED:
198
- return { type: "payment_bounced", order };
199
- default:
200
- return state;
201
- }
158
+ function getStateFromHydratedOrder(order) {
159
+ assert(isHydrated(order), `[PAYMENT_REDUCER] unhydrated`);
160
+ switch (order.intentStatus) {
161
+ case DaimoPayIntentStatus.COMPLETED:
162
+ return { type: "payment_completed", order };
163
+ case DaimoPayIntentStatus.BOUNCED:
164
+ return { type: "payment_bounced", order };
165
+ }
166
+ const displayExpiresAt = getDisplayExpiresAt(order);
167
+ if (Date.now() / 1e3 > displayExpiresAt) {
168
+ return {
169
+ type: "error",
170
+ order,
171
+ message: "Payment expired. Please restart."
172
+ };
173
+ }
174
+ switch (order.intentStatus) {
175
+ case DaimoPayIntentStatus.UNPAID:
176
+ return { type: "payment_unpaid", order };
177
+ case DaimoPayIntentStatus.STARTED:
178
+ return { type: "payment_started", order };
179
+ default:
180
+ return { type: "error", order, message: `Status: ${order.intentStatus}` };
181
+ }
202
182
  }
203
183
  function reduceTerminal(state, event) {
204
- switch (event.type) {
205
- case "reset":
206
- return initialPaymentState;
207
- // In terminal states we ignore everything except reset
208
- default:
209
- return state;
210
- }
184
+ switch (event.type) {
185
+ case "reset":
186
+ return initialPaymentState;
187
+ // In terminal states we ignore everything except reset
188
+ default:
189
+ return state;
190
+ }
211
191
  }
212
192
 
213
193
  export { initialPaymentState, paymentReducer };
@@ -1 +1 @@
1
- {"version":3,"file":"paymentFsm.js","sources":["../../../src/payment/paymentFsm.ts"],"sourcesContent":[null],"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} 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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"}
@@ -2,18 +2,16 @@ import { waitForState, createStore } from '../stateStore.js';
2
2
  import { paymentReducer, initialPaymentState } from './paymentFsm.js';
3
3
 
4
4
  function createPaymentStore() {
5
- const store = createStore(paymentReducer, initialPaymentState);
6
- return store;
5
+ const store = createStore(paymentReducer, initialPaymentState);
6
+ return store;
7
7
  }
8
- /**
9
- * Wait for the `PaymentStore` to enter a state matching any of `validTypes`,
10
- * or reject as soon as it hits the `"error"` state.
11
- *
12
- * @returns Promise<T> resolving with the first matching state or rejecting with
13
- * the error message
14
- */
15
8
  function waitForPaymentState(store, ...validTypes) {
16
- return waitForState(store, (s) => validTypes.includes(s.type), (s) => s.type === "error", (s) => s.message);
9
+ return waitForState(
10
+ store,
11
+ (s) => validTypes.includes(s.type),
12
+ (s) => s.type === "error",
13
+ (s) => s.message
14
+ );
17
15
  }
18
16
 
19
17
  export { createPaymentStore, waitForPaymentState };
@@ -1 +1 @@
1
- {"version":3,"file":"paymentStore.js","sources":["../../../src/payment/paymentStore.ts"],"sourcesContent":[null],"names":[],"mappings":";;;SAYgB,kBAAkB,GAAA;IAChC,MAAM,KAAK,GAAG,WAAW,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;AAC/D,IAAA,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;AAMG;SACa,mBAAmB,CAGjC,KAAmB,EACnB,GAAG,UAAa,EAAA;AAEhB,IAAA,OAAO,YAAY,CAKjB,KAAK,EACL,CAAC,CAAC,KACC,UAA8C,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAClE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,OAAO,EACzB,CAAC,CAAC,KAAM,CAA8C,CAAC,OAAO,CAC/D,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"paymentStore.js","sources":["../../../src/payment/paymentStore.ts"],"sourcesContent":["import { createStore, waitForState } from \"../stateStore\";\nimport {\n initialPaymentState,\n PaymentEvent,\n paymentReducer,\n PaymentState,\n} from \"./paymentFsm\";\n\nexport type PaymentStore = ReturnType<\n typeof createStore<PaymentState, PaymentEvent>\n>;\n\nexport function createPaymentStore(): PaymentStore {\n const store = createStore(paymentReducer, initialPaymentState);\n return store;\n}\n\n/**\n * Wait for the `PaymentStore` to enter a state matching any of `validTypes`,\n * or reject as soon as it hits the `\"error\"` state.\n *\n * @returns Promise<T> resolving with the first matching state or rejecting with\n * the error message\n */\nexport function waitForPaymentState<\n const T extends readonly PaymentState[\"type\"][],\n>(\n store: PaymentStore,\n ...validTypes: T\n): Promise<Extract<PaymentState, { type: T[number] }>> {\n return waitForState<\n PaymentState,\n PaymentEvent,\n Extract<PaymentState, { type: T[number] }>\n >(\n store,\n (s): s is Extract<PaymentState, { type: T[number] }> =>\n (validTypes as readonly PaymentState[\"type\"][]).includes(s.type),\n (s) => s.type === \"error\",\n (s) => (s as Extract<PaymentState, { type: \"error\" }>).message,\n );\n}\n"],"names":[],"mappings":";;;AAYO,SAAS,kBAAmC,GAAA;AACjD,EAAM,MAAA,KAAA,GAAQ,WAAY,CAAA,cAAA,EAAgB,mBAAmB,CAAA,CAAA;AAC7D,EAAO,OAAA,KAAA,CAAA;AACT,CAAA;AASgB,SAAA,mBAAA,CAGd,UACG,UACkD,EAAA;AACrD,EAAO,OAAA,YAAA;AAAA,IAKL,KAAA;AAAA,IACA,CAAC,CAAA,KACE,UAA+C,CAAA,QAAA,CAAS,EAAE,IAAI,CAAA;AAAA,IACjE,CAAC,CAAM,KAAA,CAAA,CAAE,IAAS,KAAA,OAAA;AAAA,IAClB,CAAC,MAAO,CAA+C,CAAA,OAAA;AAAA,GACzD,CAAA;AACF;;;;"}
@@ -0,0 +1,10 @@
1
+ function getDisplayExpiresAt(order) {
2
+ if (order.expirationTs == null) {
3
+ return 1e9;
4
+ }
5
+ const expirationTs = Number(order.expirationTs);
6
+ return expirationTs - 3600;
7
+ }
8
+
9
+ export { getDisplayExpiresAt };
10
+ //# sourceMappingURL=paymentUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paymentUtils.js","sources":["../../../src/payment/paymentUtils.ts"],"sourcesContent":["import { DaimoPayHydratedOrder } from \"@daimo/pay-common\";\n\n/**\n * Display payments as \"expired\" 1h before their actual expiration.\n * This ensures that users don't send payments that may arrive post-expiry.\n */\nexport function getDisplayExpiresAt(order: DaimoPayHydratedOrder) {\n if (order.expirationTs == null) {\n return 1e9; // past expiration\n }\n const expirationTs = Number(order.expirationTs);\n return expirationTs - 3600;\n}\n"],"names":[],"mappings":"AAMO,SAAS,oBAAoB,KAA8B,EAAA;AAChE,EAAI,IAAA,KAAA,CAAM,gBAAgB,IAAM,EAAA;AAC9B,IAAO,OAAA,GAAA,CAAA;AAAA,GACT;AACA,EAAM,MAAA,YAAA,GAAe,MAAO,CAAA,KAAA,CAAM,YAAY,CAAA,CAAA;AAC9C,EAAA,OAAO,YAAe,GAAA,IAAA,CAAA;AACxB;;;;"}