@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.
- package/build/components/DaimoPayButton/index.d.ts +13 -0
- package/build/hooks/useConnect.d.ts +8 -8
- package/build/hooks/useLocales.d.ts +2 -1
- package/build/hooks/useWalletPaymentOptions.d.ts +12 -1
- package/build/index.d.ts +626 -15
- package/build/localizations/locales/en-US.d.ts +2 -0
- package/build/localizations/locales/index.d.ts +1 -0
- package/build/package.json.js +6 -4
- package/build/package.json.js.map +1 -1
- package/build/payment/paymentFsm.d.ts +5 -0
- package/build/payment/paymentUtils.d.ts +6 -0
- package/build/src/assets/MobileWithLogos.js +320 -1
- package/build/src/assets/MobileWithLogos.js.map +1 -1
- package/build/src/assets/ScanIconWithLogos.js +216 -10
- package/build/src/assets/ScanIconWithLogos.js.map +1 -1
- package/build/src/assets/browsers.js +963 -7
- package/build/src/assets/browsers.js.map +1 -1
- package/build/src/assets/chains.js +633 -103
- package/build/src/assets/chains.js.map +1 -1
- package/build/src/assets/coins.js +38 -1
- package/build/src/assets/coins.js.map +1 -1
- package/build/src/assets/crepe.js +35 -1
- package/build/src/assets/crepe.js.map +1 -1
- package/build/src/assets/icons.js +258 -15
- package/build/src/assets/icons.js.map +1 -1
- package/build/src/assets/logos.js +1510 -140
- package/build/src/assets/logos.js.map +1 -1
- package/build/src/assets/wallet.js +32 -1
- package/build/src/assets/wallet.js.map +1 -1
- package/build/src/assets/wave.js +41 -1
- package/build/src/assets/wave.js.map +1 -1
- package/build/src/components/Common/Alert/index.js +4 -1
- package/build/src/components/Common/Alert/index.js.map +1 -1
- package/build/src/components/Common/Alert/styles.js +4 -4
- package/build/src/components/Common/Alert/styles.js.map +1 -1
- package/build/src/components/Common/AmountInput/AmountInputField.js +29 -18
- package/build/src/components/Common/AmountInput/AmountInputField.js.map +1 -1
- package/build/src/components/Common/AmountInput/index.js +112 -99
- package/build/src/components/Common/AmountInput/index.js.map +1 -1
- package/build/src/components/Common/Avatar/index.js +63 -51
- package/build/src/components/Common/Avatar/index.js.map +1 -1
- package/build/src/components/Common/Avatar/styles.js +9 -14
- package/build/src/components/Common/Avatar/styles.js.map +1 -1
- package/build/src/components/Common/BrowserIcon/index.js +15 -14
- package/build/src/components/Common/BrowserIcon/index.js.map +1 -1
- package/build/src/components/Common/BrowserIcon/styles.js +1 -1
- package/build/src/components/Common/BrowserIcon/styles.js.map +1 -1
- package/build/src/components/Common/Button/index.js +131 -25
- package/build/src/components/Common/Button/index.js.map +1 -1
- package/build/src/components/Common/Button/styles.js +20 -24
- package/build/src/components/Common/Button/styles.js.map +1 -1
- package/build/src/components/Common/Chain/index.js +130 -14
- package/build/src/components/Common/Chain/index.js.map +1 -1
- package/build/src/components/Common/Chain/styles.js +9 -13
- package/build/src/components/Common/Chain/styles.js.map +1 -1
- package/build/src/components/Common/ChainSelectList/index.js +232 -89
- package/build/src/components/Common/ChainSelectList/index.js.map +1 -1
- package/build/src/components/Common/ChainSelectList/styles.js +11 -13
- package/build/src/components/Common/ChainSelectList/styles.js.map +1 -1
- package/build/src/components/Common/CircleTimer.js +85 -41
- package/build/src/components/Common/CircleTimer.js.map +1 -1
- package/build/src/components/Common/ConnectorList/index.js +106 -80
- package/build/src/components/Common/ConnectorList/index.js.map +1 -1
- package/build/src/components/Common/ConnectorList/styles.js +28 -36
- package/build/src/components/Common/ConnectorList/styles.js.map +1 -1
- package/build/src/components/Common/CopyToClipboard/CopyToClipboardIcon.js +16 -9
- package/build/src/components/Common/CopyToClipboard/CopyToClipboardIcon.js.map +1 -1
- package/build/src/components/Common/CopyToClipboard/index.js +3 -5
- package/build/src/components/Common/CopyToClipboard/index.js.map +1 -1
- package/build/src/components/Common/CustomQRCode/QRCode.js +120 -57
- package/build/src/components/Common/CustomQRCode/QRCode.js.map +1 -1
- package/build/src/components/Common/CustomQRCode/index.js +60 -10
- package/build/src/components/Common/CustomQRCode/index.js.map +1 -1
- package/build/src/components/Common/CustomQRCode/styles.js +6 -6
- package/build/src/components/Common/CustomQRCode/styles.js.map +1 -1
- package/build/src/components/Common/FitText/index.js +24 -17
- package/build/src/components/Common/FitText/index.js.map +1 -1
- package/build/src/components/Common/Modal/index.js +481 -267
- package/build/src/components/Common/Modal/index.js.map +1 -1
- package/build/src/components/Common/Modal/styles.js +44 -48
- package/build/src/components/Common/Modal/styles.js.map +1 -1
- package/build/src/components/Common/OptionsList/index.js +75 -33
- package/build/src/components/Common/OptionsList/index.js.map +1 -1
- package/build/src/components/Common/OptionsList/styles.js +7 -8
- package/build/src/components/Common/OptionsList/styles.js.map +1 -1
- package/build/src/components/Common/OrderHeader/index.js +109 -65
- package/build/src/components/Common/OrderHeader/index.js.map +1 -1
- package/build/src/components/Common/PaymentBreakdown/index.js +29 -7
- package/build/src/components/Common/PaymentBreakdown/index.js.map +1 -1
- package/build/src/components/Common/Portal/index.js +21 -22
- package/build/src/components/Common/Portal/index.js.map +1 -1
- package/build/src/components/Common/PoweredByFooter/index.js +39 -21
- package/build/src/components/Common/PoweredByFooter/index.js.map +1 -1
- package/build/src/components/Common/ScrollArea/index.js +107 -52
- package/build/src/components/Common/ScrollArea/index.js.map +1 -1
- package/build/src/components/Common/ScrollArea/styles.js +7 -11
- package/build/src/components/Common/ScrollArea/styles.js.map +1 -1
- package/build/src/components/Common/SelectAnotherMethodButton/index.js +67 -55
- package/build/src/components/Common/SelectAnotherMethodButton/index.js.map +1 -1
- package/build/src/components/Common/Spinner/index.js +56 -16
- package/build/src/components/Common/Spinner/index.js.map +1 -1
- package/build/src/components/Common/Spinner/styles.js +2 -2
- package/build/src/components/Common/Spinner/styles.js.map +1 -1
- package/build/src/components/Common/SwitchButton/index.js +18 -15
- package/build/src/components/Common/SwitchButton/index.js.map +1 -1
- package/build/src/components/Common/ThemedButton/index.js +37 -16
- package/build/src/components/Common/ThemedButton/index.js.map +1 -1
- package/build/src/components/Common/ThemedButton/styles.js +2 -2
- package/build/src/components/Common/ThemedButton/styles.js.map +1 -1
- package/build/src/components/Common/TokenChainLogo/index.js +14 -8
- package/build/src/components/Common/TokenChainLogo/index.js.map +1 -1
- package/build/src/components/Common/Tooltip/index.js +115 -83
- package/build/src/components/Common/Tooltip/index.js.map +1 -1
- package/build/src/components/Common/Tooltip/styles.js +8 -8
- package/build/src/components/Common/Tooltip/styles.js.map +1 -1
- package/build/src/components/Common/WalletChainLogo/index.js +13 -6
- package/build/src/components/Common/WalletChainLogo/index.js.map +1 -1
- package/build/src/components/DaimoPayButton/index.js +170 -176
- package/build/src/components/DaimoPayButton/index.js.map +1 -1
- package/build/src/components/DaimoPayButton/styles.js +4 -4
- package/build/src/components/DaimoPayButton/styles.js.map +1 -1
- package/build/src/components/DaimoPayModal/ConnectUsing.js +50 -24
- package/build/src/components/DaimoPayModal/ConnectUsing.js.map +1 -1
- package/build/src/components/DaimoPayModal/ConnectWithInjector/index.js +303 -163
- package/build/src/components/DaimoPayModal/ConnectWithInjector/index.js.map +1 -1
- package/build/src/components/DaimoPayModal/ConnectWithInjector/styles.js +10 -12
- package/build/src/components/DaimoPayModal/ConnectWithInjector/styles.js.map +1 -1
- package/build/src/components/DaimoPayModal/ConnectWithQRCode.js +69 -39
- package/build/src/components/DaimoPayModal/ConnectWithQRCode.js.map +1 -1
- package/build/src/components/DaimoPayModal/index.js +409 -416
- package/build/src/components/DaimoPayModal/index.js.map +1 -1
- package/build/src/components/DaimoPayThemeProvider/DaimoPayThemeProvider.js +15 -11
- package/build/src/components/DaimoPayThemeProvider/DaimoPayThemeProvider.js.map +1 -1
- package/build/src/components/Pages/About/graphics.js +796 -130
- package/build/src/components/Pages/About/graphics.js.map +1 -1
- package/build/src/components/Pages/About/index.js +203 -110
- package/build/src/components/Pages/About/index.js.map +1 -1
- package/build/src/components/Pages/About/styles.js +11 -15
- package/build/src/components/Pages/About/styles.js.map +1 -1
- package/build/src/components/Pages/Confirmation/index.js +72 -41
- package/build/src/components/Pages/Confirmation/index.js.map +1 -1
- package/build/src/components/Pages/Connectors/index.js +50 -16
- package/build/src/components/Pages/Connectors/index.js.map +1 -1
- package/build/src/components/Pages/Connectors/styles.js +10 -10
- package/build/src/components/Pages/Connectors/styles.js.map +1 -1
- package/build/src/components/Pages/DownloadApp/index.js +23 -18
- package/build/src/components/Pages/DownloadApp/index.js.map +1 -1
- package/build/src/components/Pages/Error/index.js +27 -15
- package/build/src/components/Pages/Error/index.js.map +1 -1
- package/build/src/components/Pages/MobileConnectors/index.js +50 -44
- package/build/src/components/Pages/MobileConnectors/index.js.map +1 -1
- package/build/src/components/Pages/MobileConnectors/styles.js +9 -11
- package/build/src/components/Pages/MobileConnectors/styles.js.map +1 -1
- package/build/src/components/Pages/Onboarding/index.js +20 -4
- package/build/src/components/Pages/Onboarding/index.js.map +1 -1
- package/build/src/components/Pages/Onboarding/styles.js +13 -13
- package/build/src/components/Pages/Onboarding/styles.js.map +1 -1
- package/build/src/components/Pages/PayWithToken/index.js +133 -122
- package/build/src/components/Pages/PayWithToken/index.js.map +1 -1
- package/build/src/components/Pages/SelectAmount/index.js +12 -5
- package/build/src/components/Pages/SelectAmount/index.js.map +1 -1
- package/build/src/components/Pages/SelectDepositAddressAmount/index.js +56 -38
- package/build/src/components/Pages/SelectDepositAddressAmount/index.js.map +1 -1
- package/build/src/components/Pages/SelectDepositAddressChain/index.js +57 -40
- package/build/src/components/Pages/SelectDepositAddressChain/index.js.map +1 -1
- package/build/src/components/Pages/SelectExchange/index.js +29 -24
- package/build/src/components/Pages/SelectExchange/index.js.map +1 -1
- package/build/src/components/Pages/SelectExternalAmount/index.js +57 -41
- package/build/src/components/Pages/SelectExternalAmount/index.js.map +1 -1
- package/build/src/components/Pages/SelectMethod/index.js +201 -183
- package/build/src/components/Pages/SelectMethod/index.js.map +1 -1
- package/build/src/components/Pages/SelectToken/index.js +72 -46
- package/build/src/components/Pages/SelectToken/index.js.map +1 -1
- package/build/src/components/Pages/SelectWalletAmount/index.js +40 -32
- package/build/src/components/Pages/SelectWalletAmount/index.js.map +1 -1
- package/build/src/components/Pages/SelectWalletChain/index.js +40 -36
- package/build/src/components/Pages/SelectWalletChain/index.js.map +1 -1
- package/build/src/components/Pages/SelectZKP/index.js +29 -24
- package/build/src/components/Pages/SelectZKP/index.js.map +1 -1
- package/build/src/components/Pages/Solana/ConnectorSolana/index.js +60 -45
- package/build/src/components/Pages/Solana/ConnectorSolana/index.js.map +1 -1
- package/build/src/components/Pages/Solana/PayWithSolanaToken/index.js +73 -61
- package/build/src/components/Pages/Solana/PayWithSolanaToken/index.js.map +1 -1
- package/build/src/components/Pages/Solana/SelectSolanaAmount/index.js +12 -5
- package/build/src/components/Pages/Solana/SelectSolanaAmount/index.js.map +1 -1
- package/build/src/components/Pages/SwitchNetworks/index.js +29 -10
- package/build/src/components/Pages/SwitchNetworks/index.js.map +1 -1
- package/build/src/components/Pages/WaitingDepositAddress/index.js +339 -178
- package/build/src/components/Pages/WaitingDepositAddress/index.js.map +1 -1
- package/build/src/components/Pages/WaitingExternal/index.js +69 -46
- package/build/src/components/Pages/WaitingExternal/index.js.map +1 -1
- package/build/src/components/Pages/WaitingWallet/index.js +37 -16
- package/build/src/components/Pages/WaitingWallet/index.js.map +1 -1
- package/build/src/components/Spinners/CircleSpinner/index.js +96 -7
- package/build/src/components/Spinners/CircleSpinner/index.js.map +1 -1
- package/build/src/components/Spinners/CircleSpinner/styles.js +6 -7
- package/build/src/components/Spinners/CircleSpinner/styles.js.map +1 -1
- package/build/src/components/Spinners/ExternalPaymentSpinner/index.js +18 -9
- package/build/src/components/Spinners/ExternalPaymentSpinner/index.js.map +1 -1
- package/build/src/components/Spinners/SquircleSpinner/index.js +60 -7
- package/build/src/components/Spinners/SquircleSpinner/index.js.map +1 -1
- package/build/src/components/Spinners/SquircleSpinner/styles.js +4 -4
- package/build/src/components/Spinners/SquircleSpinner/styles.js.map +1 -1
- package/build/src/components/Spinners/TokenLogoSpinner/index.js +12 -1
- package/build/src/components/Spinners/TokenLogoSpinner/index.js.map +1 -1
- package/build/src/components/Spinners/TokenLogoSpinner/styles.js +1 -1
- package/build/src/components/Spinners/TokenLogoSpinner/styles.js.map +1 -1
- package/build/src/components/Spinners/WalletPaymentSpinner/index.js +27 -20
- package/build/src/components/Spinners/WalletPaymentSpinner/index.js.map +1 -1
- package/build/src/components/Spinners/styles.js +3 -4
- package/build/src/components/Spinners/styles.js.map +1 -1
- package/build/src/constants/defaultTheme.js +1 -1
- package/build/src/constants/defaultTheme.js.map +1 -1
- package/build/src/constants/routes.js +29 -30
- package/build/src/constants/routes.js.map +1 -1
- package/build/src/defaultConfig.js +49 -46
- package/build/src/defaultConfig.js.map +1 -1
- package/build/src/defaultConnectors.js +32 -19
- package/build/src/defaultConnectors.js.map +1 -1
- package/build/src/hooks/useChainIsSupported.js +3 -5
- package/build/src/hooks/useChainIsSupported.js.map +1 -1
- package/build/src/hooks/useChains.js +3 -4
- package/build/src/hooks/useChains.js.map +1 -1
- package/build/src/hooks/useConnect.js +51 -39
- package/build/src/hooks/useConnect.js.map +1 -1
- package/build/src/hooks/useConnectCallback.js +15 -12
- package/build/src/hooks/useConnectCallback.js.map +1 -1
- package/build/src/hooks/useConnectors.js +2 -2
- package/build/src/hooks/useConnectors.js.map +1 -1
- package/build/src/hooks/useDaimoPay.js +98 -82
- package/build/src/hooks/useDaimoPay.js.map +1 -1
- package/build/src/hooks/useDaimoPayStatus.js +4 -15
- package/build/src/hooks/useDaimoPayStatus.js.map +1 -1
- package/build/src/hooks/useDaimoPayUI.js +7 -7
- package/build/src/hooks/useDaimoPayUI.js.map +1 -1
- package/build/src/hooks/useDepositAddressOptions.js +29 -25
- package/build/src/hooks/useDepositAddressOptions.js.map +1 -1
- package/build/src/hooks/useEnsFallbackConfig.js +5 -5
- package/build/src/hooks/useEnsFallbackConfig.js.map +1 -1
- package/build/src/hooks/useExternalPaymentOptions.js +57 -52
- package/build/src/hooks/useExternalPaymentOptions.js.map +1 -1
- package/build/src/hooks/useFitText.js +120 -135
- package/build/src/hooks/useFitText.js.map +1 -1
- package/build/src/hooks/useFocusTrap.js +33 -37
- package/build/src/hooks/useFocusTrap.js.map +1 -1
- package/build/src/hooks/useIsMobile.js +3 -3
- package/build/src/hooks/useIsMobile.js.map +1 -1
- package/build/src/hooks/useIsMounted.js +3 -5
- package/build/src/hooks/useIsMounted.js.map +1 -1
- package/build/src/hooks/useLastConnector.js +15 -15
- package/build/src/hooks/useLastConnector.js.map +1 -1
- package/build/src/hooks/useLocales.js +44 -42
- package/build/src/hooks/useLocales.js.map +1 -1
- package/build/src/hooks/useLockBodyScroll.js +38 -44
- package/build/src/hooks/useLockBodyScroll.js.map +1 -1
- package/build/src/hooks/useOrderUsdLimits.js +17 -19
- package/build/src/hooks/useOrderUsdLimits.js.map +1 -1
- package/build/src/hooks/usePayContext.js +3 -5
- package/build/src/hooks/usePayContext.js.map +1 -1
- package/build/src/hooks/usePaymentState.js +351 -321
- package/build/src/hooks/usePaymentState.js.map +1 -1
- package/build/src/hooks/usePrevious.js +6 -7
- package/build/src/hooks/usePrevious.js.map +1 -1
- package/build/src/hooks/useSolanaPaymentOptions.js +33 -33
- package/build/src/hooks/useSolanaPaymentOptions.js.map +1 -1
- package/build/src/hooks/useTokenOptions.js +131 -95
- package/build/src/hooks/useTokenOptions.js.map +1 -1
- package/build/src/hooks/useUntronAvailability.js +26 -34
- package/build/src/hooks/useUntronAvailability.js.map +1 -1
- package/build/src/hooks/useWalletPaymentOptions.js +86 -61
- package/build/src/hooks/useWalletPaymentOptions.js.map +1 -1
- package/build/src/hooks/useWindowSize.js +16 -16
- package/build/src/hooks/useWindowSize.js.map +1 -1
- package/build/src/localizations/index.js +28 -31
- package/build/src/localizations/index.js.map +1 -1
- package/build/src/localizations/locales/ar-AE.js +88 -88
- package/build/src/localizations/locales/ar-AE.js.map +1 -1
- package/build/src/localizations/locales/ca-AD.js +88 -88
- package/build/src/localizations/locales/ca-AD.js.map +1 -1
- package/build/src/localizations/locales/ee-EE.js +96 -88
- package/build/src/localizations/locales/ee-EE.js.map +1 -1
- package/build/src/localizations/locales/en-US.js +134 -124
- package/build/src/localizations/locales/en-US.js.map +1 -1
- package/build/src/localizations/locales/es-ES.js +126 -124
- package/build/src/localizations/locales/es-ES.js.map +1 -1
- package/build/src/localizations/locales/fa-IR.js +88 -88
- package/build/src/localizations/locales/fa-IR.js.map +1 -1
- package/build/src/localizations/locales/fr-FR.js +88 -88
- package/build/src/localizations/locales/fr-FR.js.map +1 -1
- package/build/src/localizations/locales/ja-JP.js +88 -88
- package/build/src/localizations/locales/ja-JP.js.map +1 -1
- package/build/src/localizations/locales/pt-BR.js +96 -88
- package/build/src/localizations/locales/pt-BR.js.map +1 -1
- package/build/src/localizations/locales/ru-RU.js +92 -88
- package/build/src/localizations/locales/ru-RU.js.map +1 -1
- package/build/src/localizations/locales/tr-TR.js +96 -88
- package/build/src/localizations/locales/tr-TR.js.map +1 -1
- package/build/src/localizations/locales/vi-VN.js +96 -88
- package/build/src/localizations/locales/vi-VN.js.map +1 -1
- package/build/src/localizations/locales/zh-CN.js +88 -88
- package/build/src/localizations/locales/zh-CN.js.map +1 -1
- package/build/src/payment/paymentEffects.js +237 -264
- package/build/src/payment/paymentEffects.js.map +1 -1
- package/build/src/payment/paymentFsm.js +167 -187
- package/build/src/payment/paymentFsm.js.map +1 -1
- package/build/src/payment/paymentStore.js +8 -10
- package/build/src/payment/paymentStore.js.map +1 -1
- package/build/src/payment/paymentUtils.js +10 -0
- package/build/src/payment/paymentUtils.js.map +1 -0
- package/build/src/provider/DaimoPayProvider.js +258 -245
- package/build/src/provider/DaimoPayProvider.js.map +1 -1
- package/build/src/provider/PayContext.js +0 -1
- package/build/src/provider/PayContext.js.map +1 -1
- package/build/src/provider/PaymentProvider.js +18 -17
- package/build/src/provider/PaymentProvider.js.map +1 -1
- package/build/src/provider/SolanaContextProvider.js +6 -3
- package/build/src/provider/SolanaContextProvider.js.map +1 -1
- package/build/src/provider/Web3ContextProvider.js +23 -23
- package/build/src/provider/Web3ContextProvider.js.map +1 -1
- package/build/src/stateStore.js +28 -74
- package/build/src/stateStore.js.map +1 -1
- package/build/src/styles/defaultTheme.js +64 -73
- package/build/src/styles/defaultTheme.js.map +1 -1
- package/build/src/styles/index.js +202 -217
- package/build/src/styles/index.js.map +1 -1
- package/build/src/styles/styled/index.js +0 -10
- package/build/src/styles/styled/index.js.map +1 -1
- package/build/src/styles/themes/base.js +136 -136
- package/build/src/styles/themes/base.js.map +1 -1
- package/build/src/styles/themes/index.js.map +1 -1
- package/build/src/styles/themes/midnight.js +71 -71
- package/build/src/styles/themes/midnight.js.map +1 -1
- package/build/src/styles/themes/minimal.js +75 -75
- package/build/src/styles/themes/minimal.js.map +1 -1
- package/build/src/styles/themes/nouns.js +76 -76
- package/build/src/styles/themes/nouns.js.map +1 -1
- package/build/src/styles/themes/retro.js +88 -88
- package/build/src/styles/themes/retro.js.map +1 -1
- package/build/src/styles/themes/rounded.js +84 -84
- package/build/src/styles/themes/rounded.js.map +1 -1
- package/build/src/styles/themes/soft.js +66 -66
- package/build/src/styles/themes/soft.js.map +1 -1
- package/build/src/styles/themes/web95.js +95 -95
- package/build/src/styles/themes/web95.js.map +1 -1
- package/build/src/utils/exports.js +0 -1
- package/build/src/utils/exports.js.map +1 -1
- package/build/src/utils/format.js +25 -63
- package/build/src/utils/format.js.map +1 -1
- package/build/src/utils/index.js +23 -20
- package/build/src/utils/index.js.map +1 -1
- package/build/src/utils/p3.js +8 -9
- package/build/src/utils/p3.js.map +1 -1
- package/build/src/utils/platform.js +6 -8
- package/build/src/utils/platform.js.map +1 -1
- package/build/src/utils/polling.js +31 -31
- package/build/src/utils/polling.js.map +1 -1
- package/build/src/utils/supportUrl.js +9 -9
- package/build/src/utils/supportUrl.js.map +1 -1
- package/build/src/utils/trpc.js +11 -11
- package/build/src/utils/trpc.js.map +1 -1
- package/build/src/utils/validateInput.js +9 -29
- package/build/src/utils/validateInput.js.map +1 -1
- package/build/src/wallets/index.js +13 -22
- package/build/src/wallets/index.js.map +1 -1
- package/build/src/wallets/useWallets.js +183 -181
- package/build/src/wallets/useWallets.js.map +1 -1
- package/build/src/wallets/walletConfigs.js +230 -235
- package/build/src/wallets/walletConfigs.js.map +1 -1
- package/build/src/world-mini-app/WorldPayButton.js +113 -118
- package/build/src/world-mini-app/WorldPayButton.js.map +1 -1
- package/build/src/world-mini-app/promptWorldPayment.js +49 -47
- package/build/src/world-mini-app/promptWorldPayment.js.map +1 -1
- package/build/types-7ed033b6.d.ts +66 -0
- package/build/world.d.ts +89 -1
- 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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
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
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
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
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
}
|
|
168
|
-
|
|
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
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
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
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
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
|
-
|
|
6
|
-
|
|
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
|
-
|
|
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":[
|
|
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 @@
|
|
|
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;;;;"}
|