@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
@@ -13,126 +13,121 @@ import useIsMobile from '../hooks/useIsMobile.js';
13
13
  import { ThemeContainer } from '../components/Common/ThemedButton/styles.js';
14
14
 
15
15
  function WorldPayButton(props) {
16
- const { theme, mode, customTheme } = props;
17
- const context = usePayContext();
18
- return (jsx(WorldPayButtonCustom, { ...props, children: ({ show, isMiniKitReady }) => (jsx(ResetContainer, { "$useTheme": theme ?? context.theme, "$useMode": mode ?? context.mode, "$customTheme": customTheme ?? context.customTheme, children: jsx(ThemeContainer, { onClick: props.disabled || !isMiniKitReady ? undefined : show, children: jsx(ThemedButton, { children: jsx(DaimoPayButtonInner, {}) }) }) })) }));
16
+ const { theme, mode, customTheme } = props;
17
+ const context = usePayContext();
18
+ return /* @__PURE__ */ jsx(WorldPayButtonCustom, { ...props, children: ({ show, isMiniKitReady }) => /* @__PURE__ */ jsx(
19
+ ResetContainer,
20
+ {
21
+ $useTheme: theme ?? context.theme,
22
+ $useMode: mode ?? context.mode,
23
+ $customTheme: customTheme ?? context.customTheme,
24
+ children: /* @__PURE__ */ jsx(
25
+ ThemeContainer,
26
+ {
27
+ onClick: props.disabled || !isMiniKitReady ? void 0 : show,
28
+ children: /* @__PURE__ */ jsx(ThemedButton, { children: /* @__PURE__ */ jsx(DaimoPayButtonInner, {}) })
29
+ }
30
+ )
31
+ }
32
+ ) });
19
33
  }
20
34
  function WorldPayButtonCustom(props) {
21
- const pay = useDaimoPay();
22
- const context = usePayContext();
23
- const { paymentState, log } = context;
24
- const [isMiniKitReady, setIsMiniKitReady] = useState(false);
25
- const { isIOS } = useIsMobile();
26
- // Payment events: call these three event handlers.
27
- const { onPaymentStarted, onPaymentCompleted, onPaymentBounced } = props;
28
- // Install Minikit if not already installed
29
- useEffect(() => {
30
- log("[WORLD] Installing MiniKit");
31
- const result = MiniKit.install();
32
- log("[WORLD] MiniKit install result", result);
33
- log("[WORLD] MiniKit is installed", MiniKit.isInstalled());
34
- setIsMiniKitReady(MiniKit.isInstalled());
35
- // eslint-disable-next-line react-hooks/exhaustive-deps
36
- }, []);
37
- // Set the payParams
38
- useEffect(() => {
39
- log("[WORLD] Creating preview order");
40
- paymentState.setPayParams(props);
41
- // eslint-disable-next-line react-hooks/exhaustive-deps
42
- }, [JSON.stringify(props || {})]);
43
- // Set the showContactSupport flag
44
- useEffect(() => {
45
- // Links are broken on iOS in World App, so hide the contact support button
46
- context.setShowContactSupport(!isIOS);
47
- // eslint-disable-next-line react-hooks/exhaustive-deps
48
- }, [isIOS]);
49
- // Emit onPaymentStart handler when payment state changes to payment_started
50
- const sentStart = useRef(false);
51
- useEffect(() => {
52
- if (sentStart.current)
53
- return;
54
- if (pay.paymentState !== "payment_started")
55
- return;
56
- // TODO: Populate source payment details immediately when the user pays.
57
- // Use this hack because source chain id is not immediately populated when
58
- // payment_started
59
- const sourceChainId = getOrderSourceChainId(pay.order);
60
- if (sourceChainId == null)
61
- return;
62
- sentStart.current = true;
63
- onPaymentStarted?.({
64
- type: DaimoPayEventType.PaymentStarted,
65
- paymentId: writeDaimoPayOrderID(pay.order.id),
66
- chainId: sourceChainId,
67
- txHash: pay.order.sourceInitiateTxHash,
68
- payment: getDaimoPayOrderView(pay.order),
69
- });
70
- // eslint-disable-next-line react-hooks/exhaustive-deps
71
- }, [pay.order, pay.paymentState]);
72
- // Emit onPaymentComplete or onPaymentBounced handler when payment state
73
- // changes to payment_completed or payment_bounced
74
- const sentComplete = useRef(false);
75
- useEffect(() => {
76
- if (sentComplete.current)
77
- return;
78
- if (pay.paymentState !== "payment_completed" &&
79
- pay.paymentState !== "payment_bounced")
80
- return;
81
- sentComplete.current = true;
82
- const eventType = pay.paymentState === "payment_completed"
83
- ? DaimoPayEventType.PaymentCompleted
84
- : DaimoPayEventType.PaymentBounced;
85
- const event = {
86
- type: eventType,
87
- paymentId: writeDaimoPayOrderID(pay.order.id),
88
- chainId: getOrderDestChainId(pay.order),
89
- txHash: assertNotNull(pay.order.destFastFinishTxHash ?? pay.order.destClaimTxHash, `[WORLD PAY BUTTON] dest tx hash null on order ${pay.order.id} when intent status is ${pay.order.intentStatus}`),
90
- payment: getDaimoPayOrderView(pay.order),
91
- };
92
- if (pay.paymentState === "payment_completed") {
93
- onPaymentCompleted?.(event);
94
- }
95
- else if (pay.paymentState === "payment_bounced") {
96
- onPaymentBounced?.(event);
97
- }
98
- // eslint-disable-next-line react-hooks/exhaustive-deps
99
- }, [pay.order, pay.paymentState]);
100
- // Navigate to the confirmation page in the modal to show the spinner
101
- const showSpinner = useCallback(() => {
102
- log(`[WORLD] showing spinner ${pay.order?.id}`);
103
- const modalOptions = {
104
- closeOnSuccess: props.closeOnSuccess,
105
- resetOnSuccess: props.resetOnSuccess,
106
- };
107
- context.showPayment(modalOptions);
108
- context.setRoute(ROUTES.CONFIRMATION);
109
- }, [context, pay.order?.id, log, props.closeOnSuccess, props.resetOnSuccess]);
110
- // Show the Worldcoin payment drawer and pop open the Daimo Pay modal
111
- const show = useCallback(async () => {
112
- log(`[WORLD] showing payment ${pay.order?.id}`);
113
- if (!isMiniKitReady) {
114
- console.error("[WORLD] MiniKit is not installed. Please install @worldcoin/minikit-js to use this feature.");
115
- return;
116
- }
117
- if (["payment_started", "payment_completed", "payment_bounced"].includes(pay.paymentState)) {
118
- showSpinner();
119
- return;
120
- }
121
- log(`[WORLD] hydrating order ${pay.order?.id}`);
122
- const { order } = await pay.hydrateOrder();
123
- log(`[WORLD] hydrated order ${pay.order?.id}. Prompting payment with MiniKit`);
124
- const payRes = await promptWorldcoinPayment(order, context.trpc);
125
- if (payRes == null || payRes.finalPayload.status == "error") {
126
- log("[WORLD] Failed to prompt Worldcoin payment: ", payRes);
127
- return;
128
- }
129
- log(`[WORLD] triggering payment search on ${pay.order?.id}`);
130
- pay.paySource();
131
- // Optimistically assume the source payment is correct and show the
132
- // confirmation spinner
133
- showSpinner();
134
- }, [pay, showSpinner, context.trpc, isMiniKitReady, log]);
135
- return props.children({ show, isMiniKitReady });
35
+ const pay = useDaimoPay();
36
+ const context = usePayContext();
37
+ const { paymentState, log } = context;
38
+ const [isMiniKitReady, setIsMiniKitReady] = useState(false);
39
+ const { isIOS } = useIsMobile();
40
+ const { onPaymentStarted, onPaymentCompleted, onPaymentBounced } = props;
41
+ useEffect(() => {
42
+ log("[WORLD] Installing MiniKit");
43
+ const result = MiniKit.install();
44
+ log("[WORLD] MiniKit install result", result);
45
+ log("[WORLD] MiniKit is installed", MiniKit.isInstalled());
46
+ setIsMiniKitReady(MiniKit.isInstalled());
47
+ }, []);
48
+ useEffect(() => {
49
+ log("[WORLD] Creating preview order");
50
+ paymentState.setPayParams(props);
51
+ }, [JSON.stringify(props || {})]);
52
+ useEffect(() => {
53
+ context.setShowContactSupport(!isIOS);
54
+ }, [isIOS]);
55
+ const sentStart = useRef(false);
56
+ useEffect(() => {
57
+ if (sentStart.current) return;
58
+ if (pay.paymentState !== "payment_started") return;
59
+ const sourceChainId = getOrderSourceChainId(pay.order);
60
+ if (sourceChainId == null) return;
61
+ sentStart.current = true;
62
+ onPaymentStarted?.({
63
+ type: DaimoPayEventType.PaymentStarted,
64
+ paymentId: writeDaimoPayOrderID(pay.order.id),
65
+ chainId: sourceChainId,
66
+ txHash: pay.order.sourceInitiateTxHash,
67
+ payment: getDaimoPayOrderView(pay.order)
68
+ });
69
+ }, [pay.order, pay.paymentState]);
70
+ const sentComplete = useRef(false);
71
+ useEffect(() => {
72
+ if (sentComplete.current) return;
73
+ if (pay.paymentState !== "payment_completed" && pay.paymentState !== "payment_bounced")
74
+ return;
75
+ sentComplete.current = true;
76
+ const eventType = pay.paymentState === "payment_completed" ? DaimoPayEventType.PaymentCompleted : DaimoPayEventType.PaymentBounced;
77
+ const event = {
78
+ type: eventType,
79
+ paymentId: writeDaimoPayOrderID(pay.order.id),
80
+ chainId: getOrderDestChainId(pay.order),
81
+ txHash: assertNotNull(
82
+ pay.order.destFastFinishTxHash ?? pay.order.destClaimTxHash,
83
+ `[WORLD PAY BUTTON] dest tx hash null on order ${pay.order.id} when intent status is ${pay.order.intentStatus}`
84
+ ),
85
+ payment: getDaimoPayOrderView(pay.order)
86
+ };
87
+ if (pay.paymentState === "payment_completed") {
88
+ onPaymentCompleted?.(event);
89
+ } else if (pay.paymentState === "payment_bounced") {
90
+ onPaymentBounced?.(event);
91
+ }
92
+ }, [pay.order, pay.paymentState]);
93
+ const showSpinner = useCallback(() => {
94
+ log(`[WORLD] showing spinner ${pay.order?.id}`);
95
+ const modalOptions = {
96
+ closeOnSuccess: props.closeOnSuccess,
97
+ resetOnSuccess: props.resetOnSuccess
98
+ };
99
+ context.showPayment(modalOptions);
100
+ context.setRoute(ROUTES.CONFIRMATION);
101
+ }, [context, pay.order?.id, log, props.closeOnSuccess, props.resetOnSuccess]);
102
+ const show = useCallback(async () => {
103
+ log(`[WORLD] showing payment ${pay.order?.id}`);
104
+ if (!isMiniKitReady) {
105
+ console.error(
106
+ "[WORLD] MiniKit is not installed. Please install @worldcoin/minikit-js to use this feature."
107
+ );
108
+ return;
109
+ }
110
+ if (["payment_started", "payment_completed", "payment_bounced"].includes(
111
+ pay.paymentState
112
+ )) {
113
+ showSpinner();
114
+ return;
115
+ }
116
+ log(`[WORLD] hydrating order ${pay.order?.id}`);
117
+ const { order } = await pay.hydrateOrder();
118
+ log(
119
+ `[WORLD] hydrated order ${pay.order?.id}. Prompting payment with MiniKit`
120
+ );
121
+ const payRes = await promptWorldcoinPayment(order, context.trpc);
122
+ if (payRes == null || payRes.finalPayload.status == "error") {
123
+ log("[WORLD] Failed to prompt Worldcoin payment: ", payRes);
124
+ return;
125
+ }
126
+ log(`[WORLD] triggering payment search on ${pay.order?.id}`);
127
+ pay.paySource();
128
+ showSpinner();
129
+ }, [pay, showSpinner, context.trpc, isMiniKitReady, log]);
130
+ return props.children({ show, isMiniKitReady });
136
131
  }
137
132
  WorldPayButtonCustom.displayName = "WorldPayButton.Custom";
138
133
  WorldPayButton.Custom = WorldPayButtonCustom;
@@ -1 +1 @@
1
- {"version":3,"file":"WorldPayButton.js","sources":["../../../src/world-mini-app/WorldPayButton.tsx"],"sourcesContent":[null],"names":["_jsx"],"mappings":";;;;;;;;;;;;;;AAuGM,SAAU,cAAc,CAAC,KAA0B,EAAA;IACvD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;AAC3C,IAAA,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;AAEhC,IAAA,QACEA,GAAA,CAAC,oBAAoB,EAAA,EAAA,GAAK,KAAK,EAC5B,QAAA,EAAA,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MACxBA,GAAC,CAAA,cAAc,EACF,EAAA,WAAA,EAAA,KAAK,IAAI,OAAO,CAAC,KAAK,EAAA,UAAA,EACvB,IAAI,IAAI,OAAO,CAAC,IAAI,EAAA,cAAA,EAChB,WAAW,IAAI,OAAO,CAAC,WAAW,EAEhD,QAAA,EAAAA,GAAA,CAAC,cAAc,EAAA,EACb,OAAO,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC,cAAc,GAAG,SAAS,GAAG,IAAI,EAE7D,QAAA,EAAAA,GAAA,CAAC,YAAY,EACX,EAAA,QAAA,EAAAA,GAAA,CAAC,mBAAmB,EAAA,EAAA,CAAG,GACV,EACA,CAAA,EAAA,CACF,CAClB,EAAA,CACoB,EACvB;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAgC,EAAA;AAC5D,IAAA,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;AAC1B,IAAA,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;AAChC,IAAA,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACtC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5D,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,WAAW,EAAE,CAAC;;IAGhC,MAAM,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC;;IAGzE,SAAS,CAAC,MAAK;QACb,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAClC,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;AACjC,QAAA,GAAG,CAAC,gCAAgC,EAAE,MAAM,CAAC,CAAC;QAC9C,GAAG,CAAC,8BAA8B,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AAC3D,QAAA,iBAAiB,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;;KAE1C,EAAE,EAAE,CAAC,CAAC;;IAGP,SAAS,CAAC,MAAK;QACb,GAAG,CAAC,gCAAgC,CAAC,CAAC;AACtC,QAAA,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;;AAEnC,KAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;;IAGlC,SAAS,CAAC,MAAK;;AAEb,QAAA,OAAO,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,CAAC;;AAExC,KAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;;AAGZ,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,SAAS,CAAC,MAAK;QACb,IAAI,SAAS,CAAC,OAAO;YAAE,OAAO;AAC9B,QAAA,IAAI,GAAG,CAAC,YAAY,KAAK,iBAAiB;YAAE,OAAO;;;;QAKnD,MAAM,aAAa,GAAG,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,aAAa,IAAI,IAAI;YAAE,OAAO;AAElC,QAAA,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;AACzB,QAAA,gBAAgB,GAAG;YACjB,IAAI,EAAE,iBAAiB,CAAC,cAAc;YACtC,SAAS,EAAE,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AAC7C,YAAA,OAAO,EAAE,aAAa;AACtB,YAAA,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,oBAAoB;AACtC,YAAA,OAAO,EAAE,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;AACzC,SAAA,CAAC,CAAC;;KAEJ,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;;;AAIlC,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,SAAS,CAAC,MAAK;QACb,IAAI,YAAY,CAAC,OAAO;YAAE,OAAO;AACjC,QAAA,IACE,GAAG,CAAC,YAAY,KAAK,mBAAmB;YACxC,GAAG,CAAC,YAAY,KAAK,iBAAiB;YAEtC,OAAO;AAET,QAAA,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC;AAC5B,QAAA,MAAM,SAAS,GACb,GAAG,CAAC,YAAY,KAAK,mBAAmB;cACpC,iBAAiB,CAAC,gBAAgB;AACpC,cAAE,iBAAiB,CAAC,cAAc,CAAC;AACvC,QAAA,MAAM,KAAK,GAAG;AACZ,YAAA,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AAC7C,YAAA,OAAO,EAAE,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC;AACvC,YAAA,MAAM,EAAE,aAAa,CACnB,GAAG,CAAC,KAAK,CAAC,oBAAoB,IAAI,GAAG,CAAC,KAAK,CAAC,eAAe,EAC3D,CAAA,8CAAA,EAAiD,GAAG,CAAC,KAAK,CAAC,EAAE,CAAA,uBAAA,EAA0B,GAAG,CAAC,KAAK,CAAC,YAAY,CAAA,CAAE,CAChH;AACD,YAAA,OAAO,EAAE,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;SACzC,CAAC;AAEF,QAAA,IAAI,GAAG,CAAC,YAAY,KAAK,mBAAmB,EAAE;AAC5C,YAAA,kBAAkB,GAAG,KAA8B,CAAC,CAAC;SACtD;AAAM,aAAA,IAAI,GAAG,CAAC,YAAY,KAAK,iBAAiB,EAAE;AACjD,YAAA,gBAAgB,GAAG,KAA4B,CAAC,CAAC;SAClD;;KAEF,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;;AAGlC,IAAA,MAAM,WAAW,GAAG,WAAW,CAAC,MAAK;QACnC,GAAG,CAAC,2BAA2B,GAAG,CAAC,KAAK,EAAE,EAAE,CAAE,CAAA,CAAC,CAAC;AAChD,QAAA,MAAM,YAAY,GAAG;YACnB,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,cAAc,EAAE,KAAK,CAAC,cAAc;SACrC,CAAC;AACF,QAAA,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAClC,QAAA,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KACvC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;;AAG9E,IAAA,MAAM,IAAI,GAAG,WAAW,CAAC,YAAW;QAClC,GAAG,CAAC,2BAA2B,GAAG,CAAC,KAAK,EAAE,EAAE,CAAE,CAAA,CAAC,CAAC;QAChD,IAAI,CAAC,cAAc,EAAE;AACnB,YAAA,OAAO,CAAC,KAAK,CACX,6FAA6F,CAC9F,CAAC;YACF,OAAO;SACR;AAED,QAAA,IACE,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,CAAC,QAAQ,CAClE,GAAG,CAAC,YAAY,CACjB,EACD;AACA,YAAA,WAAW,EAAE,CAAC;YACd,OAAO;SACR;QAED,GAAG,CAAC,2BAA2B,GAAG,CAAC,KAAK,EAAE,EAAE,CAAE,CAAA,CAAC,CAAC;QAChD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC;QAC3C,GAAG,CACD,0BAA0B,GAAG,CAAC,KAAK,EAAE,EAAE,CAAkC,gCAAA,CAAA,CAC1E,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AACjE,QAAA,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,IAAI,OAAO,EAAE;AAC3D,YAAA,GAAG,CAAC,8CAA8C,EAAE,MAAM,CAAC,CAAC;YAC5D,OAAO;SACR;QAED,GAAG,CAAC,wCAAwC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAE,CAAA,CAAC,CAAC;QAC7D,GAAG,CAAC,SAAS,EAAE,CAAC;;;AAIhB,QAAA,WAAW,EAAE,CAAC;AAChB,KAAC,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC;IAE1D,OAAO,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,oBAAoB,CAAC,WAAW,GAAG,uBAAuB,CAAC;AAE3D,cAAc,CAAC,MAAM,GAAG,oBAAoB;;;;"}
1
+ {"version":3,"file":"WorldPayButton.js","sources":["../../../src/world-mini-app/WorldPayButton.tsx"],"sourcesContent":["import {\n assertNotNull,\n DaimoPayEventType,\n DaimoPayUserMetadata,\n getDaimoPayOrderView,\n getOrderDestChainId,\n getOrderSourceChainId,\n PaymentBouncedEvent,\n PaymentCompletedEvent,\n PaymentStartedEvent,\n writeDaimoPayOrderID,\n} from \"@daimo/pay-common\";\nimport { ReactElement, useCallback, useEffect, useRef, useState } from \"react\";\nimport { Address, Hex } from \"viem\";\nimport ThemedButton, {\n ThemeContainer,\n} from \"../components/Common/ThemedButton\";\nimport { DaimoPayButtonInner } from \"../components/DaimoPayButton\";\nimport { ROUTES } from \"../constants/routes\";\nimport { useDaimoPay } from \"../hooks/useDaimoPay\";\nimport { usePayContext } from \"../hooks/usePayContext\";\nimport { ResetContainer } from \"../styles\";\nimport { CustomTheme, Mode, Theme } from \"../types\";\nimport { promptWorldcoinPayment } from \"./promptWorldPayment\";\n\nimport { MiniKit } from \"@worldcoin/minikit-js\";\nimport useIsMobile from \"../hooks/useIsMobile\";\n\nexport type WorldPayButtonPaymentProps = {\n /**\n * Your public app ID. Specify either (payId) or (appId + parameters).\n */\n appId: string;\n /**\n * Destination chain ID.\n */\n toChain: number;\n /**\n * The destination token to send, completing payment. Must be an ERC-20\n * token or the zero address, indicating the native token / ETH.\n */\n toToken: Address;\n /**\n * The amount of destination token to send (transfer or approve).\n */\n toUnits: string;\n /**\n * The destination address to transfer to, or contract to call.\n */\n toAddress: Address;\n /**\n * Optional calldata to call an arbitrary function on `toAddress`.\n */\n toCallData?: Hex;\n /**\n * The intent verb, such as \"Pay\", \"Deposit\", or \"Purchase\".\n */\n intent?: string;\n /**\n * External ID. E.g. a correlation ID.\n */\n externalId?: string;\n /**\n * Developer metadata. E.g. correlation ID.\n * */\n metadata?: DaimoPayUserMetadata;\n /**\n * The address to refund to if the payment bounces.\n */\n refundAddress?: Address;\n};\n\ntype WorldPayButtonCommonProps = WorldPayButtonPaymentProps & {\n /** Called when user sends payment and transaction is seen on chain */\n onPaymentStarted?: (event: PaymentStartedEvent) => void;\n /** Called when destination transfer or call completes successfully */\n onPaymentCompleted?: (event: PaymentCompletedEvent) => void;\n /** Called when destination call reverts and funds are refunded */\n onPaymentBounced?: (event: PaymentBouncedEvent) => void;\n /** Automatically close the modal after a successful payment. */\n closeOnSuccess?: boolean;\n /** Reset the payment after a successful payment. */\n resetOnSuccess?: boolean;\n};\n\nexport type WorldPayButtonProps = WorldPayButtonCommonProps & {\n /** Light mode, dark mode, or auto. */\n mode?: Mode;\n /** Named theme. See docs for options. */\n theme?: Theme;\n /** Custom theme. See docs for options. */\n customTheme?: CustomTheme;\n /** Disable interaction. */\n disabled?: boolean;\n};\n\nexport type WorldPayButtonCustomProps = WorldPayButtonCommonProps & {\n children: (renderProps: {\n show: () => void;\n isMiniKitReady: boolean;\n }) => ReactElement;\n};\n\nexport function WorldPayButton(props: WorldPayButtonProps) {\n const { theme, mode, customTheme } = props;\n const context = usePayContext();\n\n return (\n <WorldPayButtonCustom {...props}>\n {({ show, isMiniKitReady }) => (\n <ResetContainer\n $useTheme={theme ?? context.theme}\n $useMode={mode ?? context.mode}\n $customTheme={customTheme ?? context.customTheme}\n >\n <ThemeContainer\n onClick={props.disabled || !isMiniKitReady ? undefined : show}\n >\n <ThemedButton>\n <DaimoPayButtonInner />\n </ThemedButton>\n </ThemeContainer>\n </ResetContainer>\n )}\n </WorldPayButtonCustom>\n );\n}\n\nfunction WorldPayButtonCustom(props: WorldPayButtonCustomProps) {\n const pay = useDaimoPay();\n const context = usePayContext();\n const { paymentState, log } = context;\n const [isMiniKitReady, setIsMiniKitReady] = useState(false);\n const { isIOS } = useIsMobile();\n\n // Payment events: call these three event handlers.\n const { onPaymentStarted, onPaymentCompleted, onPaymentBounced } = props;\n\n // Install Minikit if not already installed\n useEffect(() => {\n log(\"[WORLD] Installing MiniKit\");\n const result = MiniKit.install();\n log(\"[WORLD] MiniKit install result\", result);\n log(\"[WORLD] MiniKit is installed\", MiniKit.isInstalled());\n setIsMiniKitReady(MiniKit.isInstalled());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Set the payParams\n useEffect(() => {\n log(\"[WORLD] Creating preview order\");\n paymentState.setPayParams(props);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(props || {})]);\n\n // Set the showContactSupport flag\n useEffect(() => {\n // Links are broken on iOS in World App, so hide the contact support button\n context.setShowContactSupport(!isIOS);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isIOS]);\n\n // Emit onPaymentStart handler when payment state changes to payment_started\n const sentStart = useRef(false);\n useEffect(() => {\n if (sentStart.current) return;\n if (pay.paymentState !== \"payment_started\") return;\n\n // TODO: Populate source payment details immediately when the user pays.\n // Use this hack because source chain id is not immediately populated when\n // payment_started\n const sourceChainId = getOrderSourceChainId(pay.order);\n if (sourceChainId == null) return;\n\n sentStart.current = true;\n onPaymentStarted?.({\n type: DaimoPayEventType.PaymentStarted,\n paymentId: writeDaimoPayOrderID(pay.order.id),\n chainId: sourceChainId,\n txHash: pay.order.sourceInitiateTxHash,\n payment: getDaimoPayOrderView(pay.order),\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pay.order, pay.paymentState]);\n\n // Emit onPaymentComplete or onPaymentBounced handler when payment state\n // changes to payment_completed or payment_bounced\n const sentComplete = useRef(false);\n useEffect(() => {\n if (sentComplete.current) return;\n if (\n pay.paymentState !== \"payment_completed\" &&\n pay.paymentState !== \"payment_bounced\"\n )\n return;\n\n sentComplete.current = true;\n const eventType =\n pay.paymentState === \"payment_completed\"\n ? DaimoPayEventType.PaymentCompleted\n : DaimoPayEventType.PaymentBounced;\n const event = {\n type: eventType,\n paymentId: writeDaimoPayOrderID(pay.order.id),\n chainId: getOrderDestChainId(pay.order),\n txHash: assertNotNull(\n pay.order.destFastFinishTxHash ?? pay.order.destClaimTxHash,\n `[WORLD PAY BUTTON] dest tx hash null on order ${pay.order.id} when intent status is ${pay.order.intentStatus}`,\n ),\n payment: getDaimoPayOrderView(pay.order),\n };\n\n if (pay.paymentState === \"payment_completed\") {\n onPaymentCompleted?.(event as PaymentCompletedEvent);\n } else if (pay.paymentState === \"payment_bounced\") {\n onPaymentBounced?.(event as PaymentBouncedEvent);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pay.order, pay.paymentState]);\n\n // Navigate to the confirmation page in the modal to show the spinner\n const showSpinner = useCallback(() => {\n log(`[WORLD] showing spinner ${pay.order?.id}`);\n const modalOptions = {\n closeOnSuccess: props.closeOnSuccess,\n resetOnSuccess: props.resetOnSuccess,\n };\n context.showPayment(modalOptions);\n context.setRoute(ROUTES.CONFIRMATION);\n }, [context, pay.order?.id, log, props.closeOnSuccess, props.resetOnSuccess]);\n\n // Show the Worldcoin payment drawer and pop open the Daimo Pay modal\n const show = useCallback(async () => {\n log(`[WORLD] showing payment ${pay.order?.id}`);\n if (!isMiniKitReady) {\n console.error(\n \"[WORLD] MiniKit is not installed. Please install @worldcoin/minikit-js to use this feature.\",\n );\n return;\n }\n\n if (\n [\"payment_started\", \"payment_completed\", \"payment_bounced\"].includes(\n pay.paymentState,\n )\n ) {\n showSpinner();\n return;\n }\n\n log(`[WORLD] hydrating order ${pay.order?.id}`);\n const { order } = await pay.hydrateOrder();\n log(\n `[WORLD] hydrated order ${pay.order?.id}. Prompting payment with MiniKit`,\n );\n const payRes = await promptWorldcoinPayment(order, context.trpc);\n if (payRes == null || payRes.finalPayload.status == \"error\") {\n log(\"[WORLD] Failed to prompt Worldcoin payment: \", payRes);\n return;\n }\n\n log(`[WORLD] triggering payment search on ${pay.order?.id}`);\n pay.paySource();\n\n // Optimistically assume the source payment is correct and show the\n // confirmation spinner\n showSpinner();\n }, [pay, showSpinner, context.trpc, isMiniKitReady, log]);\n\n return props.children({ show, isMiniKitReady });\n}\n\nWorldPayButtonCustom.displayName = \"WorldPayButton.Custom\";\n\nWorldPayButton.Custom = WorldPayButtonCustom;\n"],"names":[],"mappings":"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"}
@@ -2,55 +2,57 @@ import { worldchainWLD, worldchainUSDC, assert } from '@daimo/pay-common';
2
2
  import { getAddress } from 'viem';
3
3
  import { MiniKit, Tokens } from '@worldcoin/minikit-js';
4
4
 
5
- /**
6
- * Open Worldcoin's payment drawer and prompt the user to pay a Daimo Pay order.
7
- */
8
5
  async function promptWorldcoinPayment(order, trpc) {
9
- try {
10
- if (!MiniKit.isInstalled()) {
11
- console.error("[WORLD] MiniKit is not installed. Please install @worldcoin/minikit-js to use this feature.");
12
- return null;
13
- }
14
- const paymentOptions = (await trpc.getTokenPaymentOptions.query({
15
- orderId: order.id,
16
- tokens: [
17
- {
18
- chainId: worldchainWLD.chainId,
19
- token: worldchainWLD.token,
20
- },
21
- {
22
- chainId: worldchainUSDC.chainId,
23
- token: worldchainUSDC.token,
24
- },
25
- ],
26
- }));
27
- const wld = paymentOptions.find((opt) => getAddress(opt.token.token) === getAddress(worldchainWLD.token));
28
- const usdc = paymentOptions.find((opt) => getAddress(opt.token.token) === getAddress(worldchainUSDC.token));
29
- assert(wld != null, "WLD DP token not found");
30
- assert(usdc != null, "USDC DP token not found");
31
- const paymentId = crypto.randomUUID().replace(/-/g, "");
32
- const payload = {
33
- reference: paymentId,
34
- to: order.intentAddr,
35
- tokens: [
36
- {
37
- symbol: Tokens.WLD,
38
- token_amount: wld.amount,
39
- },
40
- {
41
- symbol: Tokens.USDC,
42
- token_amount: usdc.amount,
43
- },
44
- ],
45
- description: order.metadata.intent,
46
- };
47
- const { finalPayload } = await MiniKit.commandsAsync.pay(payload);
48
- return { paymentId, finalPayload };
49
- }
50
- catch (error) {
51
- console.error("[WORLD] Error sending payment", error);
52
- return null;
6
+ try {
7
+ if (!MiniKit.isInstalled()) {
8
+ console.error(
9
+ "[WORLD] MiniKit is not installed. Please install @worldcoin/minikit-js to use this feature."
10
+ );
11
+ return null;
53
12
  }
13
+ const paymentOptions = await trpc.getTokenPaymentOptions.query({
14
+ orderId: order.id,
15
+ tokens: [
16
+ {
17
+ chainId: worldchainWLD.chainId,
18
+ token: worldchainWLD.token
19
+ },
20
+ {
21
+ chainId: worldchainUSDC.chainId,
22
+ token: worldchainUSDC.token
23
+ }
24
+ ]
25
+ });
26
+ const wld = paymentOptions.find(
27
+ (opt) => getAddress(opt.token.token) === getAddress(worldchainWLD.token)
28
+ );
29
+ const usdc = paymentOptions.find(
30
+ (opt) => getAddress(opt.token.token) === getAddress(worldchainUSDC.token)
31
+ );
32
+ assert(wld != null, "WLD DP token not found");
33
+ assert(usdc != null, "USDC DP token not found");
34
+ const paymentId = crypto.randomUUID().replace(/-/g, "");
35
+ const payload = {
36
+ reference: paymentId,
37
+ to: order.intentAddr,
38
+ tokens: [
39
+ {
40
+ symbol: Tokens.WLD,
41
+ token_amount: wld.amount
42
+ },
43
+ {
44
+ symbol: Tokens.USDC,
45
+ token_amount: usdc.amount
46
+ }
47
+ ],
48
+ description: order.metadata.intent
49
+ };
50
+ const { finalPayload } = await MiniKit.commandsAsync.pay(payload);
51
+ return { paymentId, finalPayload };
52
+ } catch (error) {
53
+ console.error("[WORLD] Error sending payment", error);
54
+ return null;
55
+ }
54
56
  }
55
57
 
56
58
  export { promptWorldcoinPayment };
@@ -1 +1 @@
1
- {"version":3,"file":"promptWorldPayment.js","sources":["../../../src/world-mini-app/promptWorldPayment.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAgBA;;AAEG;AACI,eAAe,sBAAsB,CAC1C,KAAmC,EACnC,IAAS,EAAA;AAET,IAAA,IAAI;AACF,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE;AAC1B,YAAA,OAAO,CAAC,KAAK,CACX,6FAA6F,CAC9F,CAAC;AACF,YAAA,OAAO,IAAI,CAAC;SACb;QAED,MAAM,cAAc,IAAI,MAAM,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;YAC9D,OAAO,EAAE,KAAK,CAAC,EAAE;AACjB,YAAA,MAAM,EAAE;AACN,gBAAA;oBACE,OAAO,EAAE,aAAa,CAAC,OAAO;oBAC9B,KAAK,EAAE,aAAa,CAAC,KAAK;AAC3B,iBAAA;AACD,gBAAA;oBACE,OAAO,EAAE,cAAc,CAAC,OAAO;oBAC/B,KAAK,EAAE,cAAc,CAAC,KAAK;AAC5B,iBAAA;AACF,aAAA;AACF,SAAA,CAAC,CAA0B,CAAC;QAE7B,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,CAC7B,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CACzE,CAAC;QACF,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAC9B,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,CAC1E,CAAC;AAEF,QAAA,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,wBAAwB,CAAC,CAAC;AAC9C,QAAA,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE,yBAAyB,CAAC,CAAC;AAEhD,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACxD,QAAA,MAAM,OAAO,GAAoB;AAC/B,YAAA,SAAS,EAAE,SAAS;YACpB,EAAE,EAAE,KAAK,CAAC,UAAU;AACpB,YAAA,MAAM,EAAE;AACN,gBAAA;oBACE,MAAM,EAAE,MAAM,CAAC,GAAG;oBAClB,YAAY,EAAE,GAAG,CAAC,MAAM;AACzB,iBAAA;AACD,gBAAA;oBACE,MAAM,EAAE,MAAM,CAAC,IAAI;oBACnB,YAAY,EAAE,IAAI,CAAC,MAAM;AAC1B,iBAAA;AACF,aAAA;AACD,YAAA,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;SACnC,CAAC;AACF,QAAA,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAClE,QAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;KACpC;IAAC,OAAO,KAAc,EAAE;AACvB,QAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;AACtD,QAAA,OAAO,IAAI,CAAC;KACb;AACH;;;;"}
1
+ {"version":3,"file":"promptWorldPayment.js","sources":["../../../src/world-mini-app/promptWorldPayment.ts"],"sourcesContent":["import {\n assert,\n DaimoPayHydratedOrderWithOrg,\n DaimoPayTokenAmount,\n worldchainUSDC,\n worldchainWLD,\n} from \"@daimo/pay-common\";\nimport { getAddress } from \"viem\";\n\nimport {\n MiniAppPaymentPayload,\n MiniKit,\n PayCommandInput,\n Tokens,\n} from \"@worldcoin/minikit-js\";\n\n/**\n * Open Worldcoin's payment drawer and prompt the user to pay a Daimo Pay order.\n */\nexport async function promptWorldcoinPayment(\n order: DaimoPayHydratedOrderWithOrg,\n trpc: any,\n): Promise<{ paymentId: string; finalPayload: MiniAppPaymentPayload } | null> {\n try {\n if (!MiniKit.isInstalled()) {\n console.error(\n \"[WORLD] MiniKit is not installed. Please install @worldcoin/minikit-js to use this feature.\",\n );\n return null;\n }\n\n const paymentOptions = (await trpc.getTokenPaymentOptions.query({\n orderId: order.id,\n tokens: [\n {\n chainId: worldchainWLD.chainId,\n token: worldchainWLD.token,\n },\n {\n chainId: worldchainUSDC.chainId,\n token: worldchainUSDC.token,\n },\n ],\n })) as DaimoPayTokenAmount[];\n\n const wld = paymentOptions.find(\n (opt) => getAddress(opt.token.token) === getAddress(worldchainWLD.token),\n );\n const usdc = paymentOptions.find(\n (opt) => getAddress(opt.token.token) === getAddress(worldchainUSDC.token),\n );\n\n assert(wld != null, \"WLD DP token not found\");\n assert(usdc != null, \"USDC DP token not found\");\n\n const paymentId = crypto.randomUUID().replace(/-/g, \"\");\n const payload: PayCommandInput = {\n reference: paymentId,\n to: order.intentAddr,\n tokens: [\n {\n symbol: Tokens.WLD,\n token_amount: wld.amount,\n },\n {\n symbol: Tokens.USDC,\n token_amount: usdc.amount,\n },\n ],\n description: order.metadata.intent,\n };\n const { finalPayload } = await MiniKit.commandsAsync.pay(payload);\n return { paymentId, finalPayload };\n } catch (error: unknown) {\n console.error(\"[WORLD] Error sending payment\", error);\n return null;\n }\n}\n"],"names":[],"mappings":";;;;AAmBsB,eAAA,sBAAA,CACpB,OACA,IAC4E,EAAA;AAC5E,EAAI,IAAA;AACF,IAAI,IAAA,CAAC,OAAQ,CAAA,WAAA,EAAe,EAAA;AAC1B,MAAQ,OAAA,CAAA,KAAA;AAAA,QACN,6FAAA;AAAA,OACF,CAAA;AACA,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AAEA,IAAA,MAAM,cAAkB,GAAA,MAAM,IAAK,CAAA,sBAAA,CAAuB,KAAM,CAAA;AAAA,MAC9D,SAAS,KAAM,CAAA,EAAA;AAAA,MACf,MAAQ,EAAA;AAAA,QACN;AAAA,UACE,SAAS,aAAc,CAAA,OAAA;AAAA,UACvB,OAAO,aAAc,CAAA,KAAA;AAAA,SACvB;AAAA,QACA;AAAA,UACE,SAAS,cAAe,CAAA,OAAA;AAAA,UACxB,OAAO,cAAe,CAAA,KAAA;AAAA,SACxB;AAAA,OACF;AAAA,KACD,CAAA,CAAA;AAED,IAAA,MAAM,MAAM,cAAe,CAAA,IAAA;AAAA,MACzB,CAAC,QAAQ,UAAW,CAAA,GAAA,CAAI,MAAM,KAAK,CAAA,KAAM,UAAW,CAAA,aAAA,CAAc,KAAK,CAAA;AAAA,KACzE,CAAA;AACA,IAAA,MAAM,OAAO,cAAe,CAAA,IAAA;AAAA,MAC1B,CAAC,QAAQ,UAAW,CAAA,GAAA,CAAI,MAAM,KAAK,CAAA,KAAM,UAAW,CAAA,cAAA,CAAe,KAAK,CAAA;AAAA,KAC1E,CAAA;AAEA,IAAO,MAAA,CAAA,GAAA,IAAO,MAAM,wBAAwB,CAAA,CAAA;AAC5C,IAAO,MAAA,CAAA,IAAA,IAAQ,MAAM,yBAAyB,CAAA,CAAA;AAE9C,IAAA,MAAM,YAAY,MAAO,CAAA,UAAA,EAAa,CAAA,OAAA,CAAQ,MAAM,EAAE,CAAA,CAAA;AACtD,IAAA,MAAM,OAA2B,GAAA;AAAA,MAC/B,SAAW,EAAA,SAAA;AAAA,MACX,IAAI,KAAM,CAAA,UAAA;AAAA,MACV,MAAQ,EAAA;AAAA,QACN;AAAA,UACE,QAAQ,MAAO,CAAA,GAAA;AAAA,UACf,cAAc,GAAI,CAAA,MAAA;AAAA,SACpB;AAAA,QACA;AAAA,UACE,QAAQ,MAAO,CAAA,IAAA;AAAA,UACf,cAAc,IAAK,CAAA,MAAA;AAAA,SACrB;AAAA,OACF;AAAA,MACA,WAAA,EAAa,MAAM,QAAS,CAAA,MAAA;AAAA,KAC9B,CAAA;AACA,IAAA,MAAM,EAAE,YAAa,EAAA,GAAI,MAAM,OAAQ,CAAA,aAAA,CAAc,IAAI,OAAO,CAAA,CAAA;AAChE,IAAO,OAAA,EAAE,WAAW,YAAa,EAAA,CAAA;AAAA,WAC1B,KAAgB,EAAA;AACvB,IAAQ,OAAA,CAAA,KAAA,CAAM,iCAAiC,KAAK,CAAA,CAAA;AACpD,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACF;;;;"}
@@ -0,0 +1,66 @@
1
+ import React__default, { ReactNode } from 'react';
2
+
3
+ type Hash = `0x${string}`;
4
+ type CustomAvatarProps = {
5
+ address?: Hash | undefined;
6
+ ensName?: string | undefined;
7
+ ensImage?: string;
8
+ size: number;
9
+ radius: number;
10
+ };
11
+ /** Icon for an Ethereum address. Supports ENS names and avatars. */
12
+ declare const Avatar: React__default.FC<{
13
+ address?: Hash | undefined;
14
+ name?: string | undefined;
15
+ size?: number;
16
+ radius?: number;
17
+ }>;
18
+
19
+ type Languages$1 = "ar-AE" | "en-US" | "ee-EE" | "es-ES" | "fa-IR" | "fr-FR" | "ja-JP" | "pt-BR" | "zh-CN" | "ca-AD" | "ru-RU" | "zh-CN" | "tr-TR" | "vi-VN";
20
+
21
+ type Languages = Languages$1;
22
+ type Theme = "auto" | "web95" | "retro" | "soft" | "midnight" | "minimal" | "rounded" | "nouns";
23
+ type Mode = "light" | "dark" | "auto";
24
+ type CustomTheme = any;
25
+ type All = {
26
+ theme?: Theme;
27
+ mode?: Mode;
28
+ customTheme?: CustomTheme;
29
+ lang?: Languages;
30
+ };
31
+
32
+ /** Global options, across all pay buttons and payments. */
33
+ type DaimoPayContextOptions = {
34
+ language?: Languages;
35
+ hideBalance?: boolean;
36
+ hideTooltips?: boolean;
37
+ hideQuestionMarkCTA?: boolean;
38
+ hideNoWalletCTA?: boolean;
39
+ hideRecentBadge?: boolean;
40
+ /** Avoids layout shift when the DaimoPay modal is open by adding padding to the body */
41
+ avoidLayoutShift?: boolean;
42
+ /** Automatically embeds Google Font of the current theme. Does not work with custom themes */
43
+ embedGoogleFonts?: boolean;
44
+ truncateLongENSAddress?: boolean;
45
+ reducedMotion?: boolean;
46
+ disclaimer?: ReactNode | string;
47
+ bufferPolyfill?: boolean;
48
+ customAvatar?: React.FC<CustomAvatarProps>;
49
+ initialChainId?: number;
50
+ enforceSupportedChains?: boolean;
51
+ ethereumOnboardingUrl?: string;
52
+ walletOnboardingUrl?: string;
53
+ /** Blur the background when the modal is open */
54
+ overlayBlur?: number;
55
+ /** Disable mobile wallet injector detection */
56
+ disableMobileInjector?: boolean;
57
+ };
58
+ /** Modal UI options, set on the pay button triggering that modal. */
59
+ type DaimoPayModalOptions = {
60
+ closeOnSuccess?: boolean;
61
+ resetOnSuccess?: boolean;
62
+ connectedWalletOnly?: boolean;
63
+ };
64
+
65
+ export { Avatar as A };
66
+ export type { CustomTheme as C, DaimoPayContextOptions as D, Languages as L, Mode as M, Theme as T, DaimoPayModalOptions as a, CustomAvatarProps as b, All as c };
package/build/world.d.ts CHANGED
@@ -1 +1,89 @@
1
- export { WorldPayButton, WorldPayButtonCustomProps, WorldPayButtonProps, } from "./world-mini-app/WorldPayButton";
1
+ import * as React from 'react';
2
+ import { ReactElement } from 'react';
3
+ import * as react_jsx_runtime from 'react/jsx-runtime';
4
+ import { PaymentStartedEvent, PaymentCompletedEvent, PaymentBouncedEvent, DaimoPayUserMetadata } from '@daimo/pay-common';
5
+ import { Address, Hex } from 'viem';
6
+ import { M as Mode, T as Theme, C as CustomTheme } from './types-7ed033b6.js';
7
+
8
+ type WorldPayButtonPaymentProps = {
9
+ /**
10
+ * Your public app ID. Specify either (payId) or (appId + parameters).
11
+ */
12
+ appId: string;
13
+ /**
14
+ * Destination chain ID.
15
+ */
16
+ toChain: number;
17
+ /**
18
+ * The destination token to send, completing payment. Must be an ERC-20
19
+ * token or the zero address, indicating the native token / ETH.
20
+ */
21
+ toToken: Address;
22
+ /**
23
+ * The amount of destination token to send (transfer or approve).
24
+ */
25
+ toUnits: string;
26
+ /**
27
+ * The destination address to transfer to, or contract to call.
28
+ */
29
+ toAddress: Address;
30
+ /**
31
+ * Optional calldata to call an arbitrary function on `toAddress`.
32
+ */
33
+ toCallData?: Hex;
34
+ /**
35
+ * The intent verb, such as "Pay", "Deposit", or "Purchase".
36
+ */
37
+ intent?: string;
38
+ /**
39
+ * External ID. E.g. a correlation ID.
40
+ */
41
+ externalId?: string;
42
+ /**
43
+ * Developer metadata. E.g. correlation ID.
44
+ * */
45
+ metadata?: DaimoPayUserMetadata;
46
+ /**
47
+ * The address to refund to if the payment bounces.
48
+ */
49
+ refundAddress?: Address;
50
+ };
51
+ type WorldPayButtonCommonProps = WorldPayButtonPaymentProps & {
52
+ /** Called when user sends payment and transaction is seen on chain */
53
+ onPaymentStarted?: (event: PaymentStartedEvent) => void;
54
+ /** Called when destination transfer or call completes successfully */
55
+ onPaymentCompleted?: (event: PaymentCompletedEvent) => void;
56
+ /** Called when destination call reverts and funds are refunded */
57
+ onPaymentBounced?: (event: PaymentBouncedEvent) => void;
58
+ /** Automatically close the modal after a successful payment. */
59
+ closeOnSuccess?: boolean;
60
+ /** Reset the payment after a successful payment. */
61
+ resetOnSuccess?: boolean;
62
+ };
63
+ type WorldPayButtonProps = WorldPayButtonCommonProps & {
64
+ /** Light mode, dark mode, or auto. */
65
+ mode?: Mode;
66
+ /** Named theme. See docs for options. */
67
+ theme?: Theme;
68
+ /** Custom theme. See docs for options. */
69
+ customTheme?: CustomTheme;
70
+ /** Disable interaction. */
71
+ disabled?: boolean;
72
+ };
73
+ type WorldPayButtonCustomProps = WorldPayButtonCommonProps & {
74
+ children: (renderProps: {
75
+ show: () => void;
76
+ isMiniKitReady: boolean;
77
+ }) => ReactElement;
78
+ };
79
+ declare function WorldPayButton(props: WorldPayButtonProps): react_jsx_runtime.JSX.Element;
80
+ declare namespace WorldPayButton {
81
+ var Custom: typeof WorldPayButtonCustom;
82
+ }
83
+ declare function WorldPayButtonCustom(props: WorldPayButtonCustomProps): ReactElement<any, string | React.JSXElementConstructor<any>>;
84
+ declare namespace WorldPayButtonCustom {
85
+ var displayName: string;
86
+ }
87
+
88
+ export { WorldPayButton };
89
+ export type { WorldPayButtonCustomProps, WorldPayButtonProps };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@daimo/pay",
3
3
  "private": false,
4
- "version": "1.15.0",
4
+ "version": "1.16.1",
5
5
  "author": "Daimo",
6
6
  "homepage": "https://pay.daimo.com",
7
7
  "license": "BSD-2-Clause license",
@@ -33,8 +33,7 @@
33
33
  "lint": "eslint 'src/**/*.{js,jsx,ts,tsx}' --max-warnings=0"
34
34
  },
35
35
  "dependencies": {
36
- "@daimo/pay-common": "1.15.0",
37
- "@rollup/plugin-typescript": "^12.1.2",
36
+ "@daimo/pay-common": "1.16.1",
38
37
  "@solana/wallet-adapter-base": "^0.9.23",
39
38
  "@solana/wallet-adapter-react": "^0.15.35",
40
39
  "@solana/web3.js": "^1.95.4",
@@ -57,7 +56,7 @@
57
56
  "react": "18.x || 19.x",
58
57
  "react-dom": "18.x || 19.x",
59
58
  "viem": ">=2.22.0",
60
- "wagmi": "2.x"
59
+ "wagmi": "^2.16.4"
61
60
  },
62
61
  "peerDependenciesMeta": {
63
62
  "@worldcoin/minikit-js": {
@@ -66,6 +65,8 @@
66
65
  },
67
66
  "devDependencies": {
68
67
  "@rollup/plugin-json": "^6.1.0",
68
+ "@rollup/plugin-node-resolve": "^15.3.1",
69
+ "@rollup/plugin-typescript": "^12.1.4",
69
70
  "@types/node": "^20.14.12",
70
71
  "@types/qrcode": "^1.4.2",
71
72
  "@types/react": "^18.2.47",
@@ -75,6 +76,7 @@
75
76
  "eslint-plugin-react-hooks": "^5.2.0",
76
77
  "rollup": "^3.29.5",
77
78
  "rollup-plugin-dts": "^6.1.1",
79
+ "rollup-plugin-esbuild": "^6.2.1",
78
80
  "rollup-plugin-peer-deps-external": "^2.2.4",
79
81
  "rollup-plugin-visualizer": "^5.5.4",
80
82
  "typescript-plugin-styled-components": "^3.0.0"