thirdweb 5.100.2 → 5.101.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (356) hide show
  1. package/dist/cjs/bridge/Webhook.js +105 -0
  2. package/dist/cjs/bridge/Webhook.js.map +1 -0
  3. package/dist/cjs/bridge/index.js +4 -1
  4. package/dist/cjs/bridge/index.js.map +1 -1
  5. package/dist/cjs/version.js +1 -1
  6. package/dist/esm/bridge/Webhook.js +102 -0
  7. package/dist/esm/bridge/Webhook.js.map +1 -0
  8. package/dist/esm/bridge/index.js +2 -0
  9. package/dist/esm/bridge/index.js.map +1 -1
  10. package/dist/esm/version.js +1 -1
  11. package/dist/types/bridge/Webhook.d.ts +82 -0
  12. package/dist/types/bridge/Webhook.d.ts.map +1 -0
  13. package/dist/types/bridge/index.d.ts +4 -1
  14. package/dist/types/bridge/index.d.ts.map +1 -1
  15. package/dist/types/react/core/account/provider.d.ts +1 -1
  16. package/dist/types/react/core/account/provider.d.ts.map +1 -1
  17. package/dist/types/react/core/design-system/CustomThemeProvider.d.ts +1 -1
  18. package/dist/types/react/core/design-system/CustomThemeProvider.d.ts.map +1 -1
  19. package/dist/types/react/core/providers/thirdweb-provider.d.ts +1 -1
  20. package/dist/types/react/core/providers/thirdweb-provider.d.ts.map +1 -1
  21. package/dist/types/react/core/wallet/provider.d.ts +1 -1
  22. package/dist/types/react/core/wallet/provider.d.ts.map +1 -1
  23. package/dist/types/react/native/providers/thirdweb-provider.d.ts +1 -1
  24. package/dist/types/react/native/providers/thirdweb-provider.d.ts.map +1 -1
  25. package/dist/types/react/native/ui/AutoConnect/AutoConnect.d.ts +1 -1
  26. package/dist/types/react/native/ui/AutoConnect/AutoConnect.d.ts.map +1 -1
  27. package/dist/types/react/native/ui/components/Address.d.ts +1 -1
  28. package/dist/types/react/native/ui/components/Address.d.ts.map +1 -1
  29. package/dist/types/react/native/ui/components/ChainIcon.d.ts +1 -1
  30. package/dist/types/react/native/ui/components/ChainIcon.d.ts.map +1 -1
  31. package/dist/types/react/native/ui/components/Header.d.ts +1 -1
  32. package/dist/types/react/native/ui/components/Header.d.ts.map +1 -1
  33. package/dist/types/react/native/ui/components/RNImage.d.ts +1 -1
  34. package/dist/types/react/native/ui/components/RNImage.d.ts.map +1 -1
  35. package/dist/types/react/native/ui/components/TokenIcon.d.ts +1 -1
  36. package/dist/types/react/native/ui/components/TokenIcon.d.ts.map +1 -1
  37. package/dist/types/react/native/ui/components/WalletImage.d.ts +1 -1
  38. package/dist/types/react/native/ui/components/WalletImage.d.ts.map +1 -1
  39. package/dist/types/react/native/ui/components/button.d.ts +2 -2
  40. package/dist/types/react/native/ui/components/button.d.ts.map +1 -1
  41. package/dist/types/react/native/ui/components/input.d.ts +2 -2
  42. package/dist/types/react/native/ui/components/input.d.ts.map +1 -1
  43. package/dist/types/react/native/ui/components/spacer.d.ts +1 -1
  44. package/dist/types/react/native/ui/components/spacer.d.ts.map +1 -1
  45. package/dist/types/react/native/ui/components/text.d.ts +1 -1
  46. package/dist/types/react/native/ui/components/text.d.ts.map +1 -1
  47. package/dist/types/react/native/ui/components/view.d.ts +1 -1
  48. package/dist/types/react/native/ui/components/view.d.ts.map +1 -1
  49. package/dist/types/react/native/ui/connect/ConnectButton.d.ts +1 -1
  50. package/dist/types/react/native/ui/connect/ConnectButton.d.ts.map +1 -1
  51. package/dist/types/react/native/ui/connect/ConnectModal.d.ts +2 -2
  52. package/dist/types/react/native/ui/connect/ConnectModal.d.ts.map +1 -1
  53. package/dist/types/react/native/ui/connect/ConnectedButton.d.ts +1 -1
  54. package/dist/types/react/native/ui/connect/ConnectedButton.d.ts.map +1 -1
  55. package/dist/types/react/native/ui/connect/ConnectedModal.d.ts +1 -1
  56. package/dist/types/react/native/ui/connect/ConnectedModal.d.ts.map +1 -1
  57. package/dist/types/react/native/ui/connect/ErrorView.d.ts +1 -1
  58. package/dist/types/react/native/ui/connect/ErrorView.d.ts.map +1 -1
  59. package/dist/types/react/native/ui/connect/ExternalWalletsList.d.ts +2 -2
  60. package/dist/types/react/native/ui/connect/ExternalWalletsList.d.ts.map +1 -1
  61. package/dist/types/react/native/ui/connect/InAppWalletUI.d.ts +3 -3
  62. package/dist/types/react/native/ui/connect/InAppWalletUI.d.ts.map +1 -1
  63. package/dist/types/react/native/ui/connect/LoadingView.d.ts +1 -1
  64. package/dist/types/react/native/ui/connect/LoadingView.d.ts.map +1 -1
  65. package/dist/types/react/native/ui/connect/ReceiveScreen.d.ts +1 -1
  66. package/dist/types/react/native/ui/connect/ReceiveScreen.d.ts.map +1 -1
  67. package/dist/types/react/native/ui/connect/SendScreen.d.ts +1 -1
  68. package/dist/types/react/native/ui/connect/SendScreen.d.ts.map +1 -1
  69. package/dist/types/react/native/ui/connect/SuccessView.d.ts +1 -1
  70. package/dist/types/react/native/ui/connect/SuccessView.d.ts.map +1 -1
  71. package/dist/types/react/native/ui/connect/TokenListScreen.d.ts +2 -2
  72. package/dist/types/react/native/ui/connect/TokenListScreen.d.ts.map +1 -1
  73. package/dist/types/react/native/ui/connect/WalletLoadingThumbnail.d.ts +1 -1
  74. package/dist/types/react/native/ui/connect/WalletLoadingThumbnail.d.ts.map +1 -1
  75. package/dist/types/react/native/ui/prebuilt/Account/address.d.ts +1 -1
  76. package/dist/types/react/native/ui/prebuilt/Account/address.d.ts.map +1 -1
  77. package/dist/types/react/native/ui/prebuilt/Account/avatar.d.ts +1 -1
  78. package/dist/types/react/native/ui/prebuilt/Account/avatar.d.ts.map +1 -1
  79. package/dist/types/react/native/ui/prebuilt/Account/balance.d.ts +1 -1
  80. package/dist/types/react/native/ui/prebuilt/Account/balance.d.ts.map +1 -1
  81. package/dist/types/react/native/ui/prebuilt/Account/blobbie.d.ts +2 -2
  82. package/dist/types/react/native/ui/prebuilt/Account/blobbie.d.ts.map +1 -1
  83. package/dist/types/react/native/ui/prebuilt/Account/name.d.ts +1 -1
  84. package/dist/types/react/native/ui/prebuilt/Account/name.d.ts.map +1 -1
  85. package/dist/types/react/native/ui/prebuilt/Wallet/icon.d.ts +2 -2
  86. package/dist/types/react/native/ui/prebuilt/Wallet/icon.d.ts.map +1 -1
  87. package/dist/types/react/native/ui/prebuilt/Wallet/name.d.ts +1 -1
  88. package/dist/types/react/native/ui/prebuilt/Wallet/name.d.ts.map +1 -1
  89. package/dist/types/react/native/ui/transaction/TransactionButton.d.ts +1 -1
  90. package/dist/types/react/native/ui/transaction/TransactionButton.d.ts.map +1 -1
  91. package/dist/types/react/web/providers/thirdweb-provider.d.ts +1 -1
  92. package/dist/types/react/web/providers/thirdweb-provider.d.ts.map +1 -1
  93. package/dist/types/react/web/providers/wallet-ui-states-provider.d.ts +1 -1
  94. package/dist/types/react/web/providers/wallet-ui-states-provider.d.ts.map +1 -1
  95. package/dist/types/react/web/ui/AutoConnect/AutoConnect.d.ts +1 -1
  96. package/dist/types/react/web/ui/AutoConnect/AutoConnect.d.ts.map +1 -1
  97. package/dist/types/react/web/ui/ConnectWallet/Blobbie.d.ts +1 -1
  98. package/dist/types/react/web/ui/ConnectWallet/Blobbie.d.ts.map +1 -1
  99. package/dist/types/react/web/ui/ConnectWallet/ConnectButton.d.ts +1 -1
  100. package/dist/types/react/web/ui/ConnectWallet/ConnectButton.d.ts.map +1 -1
  101. package/dist/types/react/web/ui/ConnectWallet/Details.d.ts +5 -5
  102. package/dist/types/react/web/ui/ConnectWallet/Details.d.ts.map +1 -1
  103. package/dist/types/react/web/ui/ConnectWallet/Modal/AllWalletsUI.d.ts +1 -1
  104. package/dist/types/react/web/ui/ConnectWallet/Modal/AllWalletsUI.d.ts.map +1 -1
  105. package/dist/types/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.d.ts +1 -1
  106. package/dist/types/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.d.ts.map +1 -1
  107. package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectEmbed.d.ts +1 -1
  108. package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectEmbed.d.ts.map +1 -1
  109. package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectModal.d.ts +1 -1
  110. package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectModal.d.ts.map +1 -1
  111. package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectModalContent.d.ts +1 -1
  112. package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectModalContent.d.ts.map +1 -1
  113. package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectModalSkeleton.d.ts +2 -2
  114. package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectModalSkeleton.d.ts.map +1 -1
  115. package/dist/types/react/web/ui/ConnectWallet/Modal/DeepLinkConnectUI.d.ts +1 -1
  116. package/dist/types/react/web/ui/ConnectWallet/Modal/DeepLinkConnectUI.d.ts.map +1 -1
  117. package/dist/types/react/web/ui/ConnectWallet/Modal/InjectedConnectUI.d.ts +1 -1
  118. package/dist/types/react/web/ui/ConnectWallet/Modal/InjectedConnectUI.d.ts.map +1 -1
  119. package/dist/types/react/web/ui/ConnectWallet/Modal/SmartWalletConnectUI.d.ts +1 -1
  120. package/dist/types/react/web/ui/ConnectWallet/Modal/SmartWalletConnectUI.d.ts.map +1 -1
  121. package/dist/types/react/web/ui/ConnectWallet/Modal/TOS.d.ts +1 -1
  122. package/dist/types/react/web/ui/ConnectWallet/Modal/TOS.d.ts.map +1 -1
  123. package/dist/types/react/web/ui/ConnectWallet/NetworkSelector.d.ts +1 -1
  124. package/dist/types/react/web/ui/ConnectWallet/NetworkSelector.d.ts.map +1 -1
  125. package/dist/types/react/web/ui/ConnectWallet/PoweredByTW.d.ts +1 -1
  126. package/dist/types/react/web/ui/ConnectWallet/PoweredByTW.d.ts.map +1 -1
  127. package/dist/types/react/web/ui/ConnectWallet/TransactionsScreen.d.ts +1 -1
  128. package/dist/types/react/web/ui/ConnectWallet/TransactionsScreen.d.ts.map +1 -1
  129. package/dist/types/react/web/ui/ConnectWallet/WalletEntryButton.d.ts +1 -1
  130. package/dist/types/react/web/ui/ConnectWallet/WalletEntryButton.d.ts.map +1 -1
  131. package/dist/types/react/web/ui/ConnectWallet/WalletSelector.d.ts +1 -1
  132. package/dist/types/react/web/ui/ConnectWallet/WalletSelector.d.ts.map +1 -1
  133. package/dist/types/react/web/ui/ConnectWallet/WalletTypeRowButton.d.ts +1 -1
  134. package/dist/types/react/web/ui/ConnectWallet/WalletTypeRowButton.d.ts.map +1 -1
  135. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.d.ts +1 -1
  136. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.d.ts.map +1 -1
  137. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/DirectPaymentModeScreen.d.ts +1 -1
  138. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/DirectPaymentModeScreen.d.ts.map +1 -1
  139. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/EstimatedTimeAndFees.d.ts +1 -1
  140. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/EstimatedTimeAndFees.d.ts.map +1 -1
  141. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/LazyBuyScreen.d.ts +1 -1
  142. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/LazyBuyScreen.d.ts.map +1 -1
  143. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/PayProviderSelection.d.ts +1 -1
  144. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/PayProviderSelection.d.ts.map +1 -1
  145. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/PayTokenIcon.d.ts +1 -1
  146. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/PayTokenIcon.d.ts.map +1 -1
  147. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/PayWIthCreditCard.d.ts +1 -1
  148. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/PayWIthCreditCard.d.ts.map +1 -1
  149. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/Stepper.d.ts +2 -2
  150. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/Stepper.d.ts.map +1 -1
  151. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.d.ts +1 -1
  152. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.d.ts.map +1 -1
  153. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/CurrencySelection.d.ts +1 -1
  154. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/CurrencySelection.d.ts.map +1 -1
  155. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatScreenContent.d.ts +1 -1
  156. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatScreenContent.d.ts.map +1 -1
  157. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatSteps.d.ts +1 -1
  158. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatSteps.d.ts.map +1 -1
  159. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/OnRampScreen.d.ts +1 -1
  160. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/OnRampScreen.d.ts.map +1 -1
  161. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/Providers.d.ts +1 -1
  162. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/Providers.d.ts.map +1 -1
  163. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/SwapDetailsScreen.d.ts +1 -1
  164. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/SwapDetailsScreen.d.ts.map +1 -1
  165. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/TokenInfoRow.d.ts +1 -1
  166. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/TokenInfoRow.d.ts.map +1 -1
  167. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/BuyTokenInput.d.ts +1 -1
  168. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/BuyTokenInput.d.ts.map +1 -1
  169. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/ConfirmationScreen.d.ts +1 -1
  170. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/ConfirmationScreen.d.ts.map +1 -1
  171. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/ErrorText.d.ts +1 -1
  172. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/ErrorText.d.ts.map +1 -1
  173. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/Fees.d.ts +2 -2
  174. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/Fees.d.ts.map +1 -1
  175. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/FiatValue.d.ts +1 -1
  176. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/FiatValue.d.ts.map +1 -1
  177. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.d.ts +1 -1
  178. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.d.ts.map +1 -1
  179. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/StepConnector.d.ts +1 -1
  180. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/StepConnector.d.ts.map +1 -1
  181. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/SwapFlow.d.ts +1 -1
  182. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/SwapFlow.d.ts.map +1 -1
  183. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/SwapScreenContent.d.ts +1 -1
  184. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/SwapScreenContent.d.ts.map +1 -1
  185. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/SwapStatusScreen.d.ts +1 -1
  186. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/SwapStatusScreen.d.ts.map +1 -1
  187. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/SwapSummary.d.ts +1 -1
  188. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/SwapSummary.d.ts.map +1 -1
  189. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/TokenSelectorScreen.d.ts +1 -1
  190. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/TokenSelectorScreen.d.ts.map +1 -1
  191. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/TransferConfirmationScreen.d.ts +1 -1
  192. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/TransferConfirmationScreen.d.ts.map +1 -1
  193. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/TransferFlow.d.ts +1 -1
  194. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/TransferFlow.d.ts.map +1 -1
  195. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/WalletRow.d.ts +1 -1
  196. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/WalletRow.d.ts.map +1 -1
  197. package/dist/types/react/web/ui/ConnectWallet/screens/Details/WalletManagerScreen.d.ts +1 -1
  198. package/dist/types/react/web/ui/ConnectWallet/screens/Details/WalletManagerScreen.d.ts.map +1 -1
  199. package/dist/types/react/web/ui/ConnectWallet/screens/LinkProfileScreen.d.ts +1 -1
  200. package/dist/types/react/web/ui/ConnectWallet/screens/LinkProfileScreen.d.ts.map +1 -1
  201. package/dist/types/react/web/ui/ConnectWallet/screens/LinkedProfilesScreen.d.ts +1 -1
  202. package/dist/types/react/web/ui/ConnectWallet/screens/LinkedProfilesScreen.d.ts.map +1 -1
  203. package/dist/types/react/web/ui/ConnectWallet/screens/ManageWalletScreen.d.ts +1 -1
  204. package/dist/types/react/web/ui/ConnectWallet/screens/ManageWalletScreen.d.ts.map +1 -1
  205. package/dist/types/react/web/ui/ConnectWallet/screens/PrivateKey.d.ts +1 -1
  206. package/dist/types/react/web/ui/ConnectWallet/screens/PrivateKey.d.ts.map +1 -1
  207. package/dist/types/react/web/ui/ConnectWallet/screens/ReceiveFunds.d.ts +1 -1
  208. package/dist/types/react/web/ui/ConnectWallet/screens/ReceiveFunds.d.ts.map +1 -1
  209. package/dist/types/react/web/ui/ConnectWallet/screens/SendFunds.d.ts +2 -2
  210. package/dist/types/react/web/ui/ConnectWallet/screens/SendFunds.d.ts.map +1 -1
  211. package/dist/types/react/web/ui/ConnectWallet/screens/StartScreen.d.ts +1 -1
  212. package/dist/types/react/web/ui/ConnectWallet/screens/StartScreen.d.ts.map +1 -1
  213. package/dist/types/react/web/ui/ConnectWallet/screens/TokenSelector.d.ts +1 -1
  214. package/dist/types/react/web/ui/ConnectWallet/screens/TokenSelector.d.ts.map +1 -1
  215. package/dist/types/react/web/ui/ConnectWallet/screens/ViewAssets.d.ts +1 -1
  216. package/dist/types/react/web/ui/ConnectWallet/screens/ViewAssets.d.ts.map +1 -1
  217. package/dist/types/react/web/ui/ConnectWallet/screens/ViewNFTs.d.ts +2 -2
  218. package/dist/types/react/web/ui/ConnectWallet/screens/ViewNFTs.d.ts.map +1 -1
  219. package/dist/types/react/web/ui/ConnectWallet/screens/ViewTokens.d.ts +2 -2
  220. package/dist/types/react/web/ui/ConnectWallet/screens/ViewTokens.d.ts.map +1 -1
  221. package/dist/types/react/web/ui/ConnectWallet/screens/WalletConnectDisconnectScreen.d.ts +1 -1
  222. package/dist/types/react/web/ui/ConnectWallet/screens/WalletConnectDisconnectScreen.d.ts.map +1 -1
  223. package/dist/types/react/web/ui/ConnectWallet/screens/WalletConnectReceiverScreen.d.ts +1 -1
  224. package/dist/types/react/web/ui/ConnectWallet/screens/WalletConnectReceiverScreen.d.ts.map +1 -1
  225. package/dist/types/react/web/ui/ConnectWallet/screens/WalletLogoSpinner.d.ts +1 -1
  226. package/dist/types/react/web/ui/ConnectWallet/screens/WalletLogoSpinner.d.ts.map +1 -1
  227. package/dist/types/react/web/ui/ConnectWallet/screens/WalletSwitcherConnectionScreen.d.ts +1 -1
  228. package/dist/types/react/web/ui/ConnectWallet/screens/WalletSwitcherConnectionScreen.d.ts.map +1 -1
  229. package/dist/types/react/web/ui/ConnectWallet/screens/WalletTransactionHistory.d.ts +1 -1
  230. package/dist/types/react/web/ui/ConnectWallet/screens/WalletTransactionHistory.d.ts.map +1 -1
  231. package/dist/types/react/web/ui/PayEmbed.d.ts +1 -1
  232. package/dist/types/react/web/ui/PayEmbed.d.ts.map +1 -1
  233. package/dist/types/react/web/ui/SiteEmbed.d.ts +1 -1
  234. package/dist/types/react/web/ui/SiteEmbed.d.ts.map +1 -1
  235. package/dist/types/react/web/ui/SiteLink.d.ts +1 -1
  236. package/dist/types/react/web/ui/SiteLink.d.ts.map +1 -1
  237. package/dist/types/react/web/ui/TransactionButton/DepositScreen.d.ts +1 -1
  238. package/dist/types/react/web/ui/TransactionButton/DepositScreen.d.ts.map +1 -1
  239. package/dist/types/react/web/ui/TransactionButton/ExecutingScreen.d.ts +1 -1
  240. package/dist/types/react/web/ui/TransactionButton/ExecutingScreen.d.ts.map +1 -1
  241. package/dist/types/react/web/ui/TransactionButton/TransactionModal.d.ts +1 -1
  242. package/dist/types/react/web/ui/TransactionButton/TransactionModal.d.ts.map +1 -1
  243. package/dist/types/react/web/ui/TransactionButton/index.d.ts +1 -1
  244. package/dist/types/react/web/ui/TransactionButton/index.d.ts.map +1 -1
  245. package/dist/types/react/web/ui/components/OTPInput.d.ts +1 -1
  246. package/dist/types/react/web/ui/components/OTPInput.d.ts.map +1 -1
  247. package/dist/types/react/web/ui/components/QRCode.d.ts +1 -1
  248. package/dist/types/react/web/ui/components/QRCode.d.ts.map +1 -1
  249. package/dist/types/react/web/ui/components/StepBar.d.ts +1 -1
  250. package/dist/types/react/web/ui/components/StepBar.d.ts.map +1 -1
  251. package/dist/types/react/web/ui/components/SwitchNetwork.d.ts +1 -1
  252. package/dist/types/react/web/ui/components/SwitchNetwork.d.ts.map +1 -1
  253. package/dist/types/react/web/ui/components/Tabs.d.ts +1 -1
  254. package/dist/types/react/web/ui/components/Tabs.d.ts.map +1 -1
  255. package/dist/types/react/web/ui/components/TextDivider.d.ts +1 -1
  256. package/dist/types/react/web/ui/components/TextDivider.d.ts.map +1 -1
  257. package/dist/types/react/web/ui/components/TokenIcon.d.ts +1 -1
  258. package/dist/types/react/web/ui/components/TokenIcon.d.ts.map +1 -1
  259. package/dist/types/react/web/ui/components/WalletImage.d.ts +1 -1
  260. package/dist/types/react/web/ui/components/WalletImage.d.ts.map +1 -1
  261. package/dist/types/react/web/ui/components/basic.d.ts +2 -2
  262. package/dist/types/react/web/ui/components/basic.d.ts.map +1 -1
  263. package/dist/types/react/web/ui/components/token/TokenRow.d.ts +1 -1
  264. package/dist/types/react/web/ui/components/token/TokenRow.d.ts.map +1 -1
  265. package/dist/types/react/web/ui/components/token/TokenSymbol.d.ts +1 -1
  266. package/dist/types/react/web/ui/components/token/TokenSymbol.d.ts.map +1 -1
  267. package/dist/types/react/web/ui/prebuilt/Account/address.d.ts +1 -1
  268. package/dist/types/react/web/ui/prebuilt/Account/address.d.ts.map +1 -1
  269. package/dist/types/react/web/ui/prebuilt/Account/avatar.d.ts +1 -1
  270. package/dist/types/react/web/ui/prebuilt/Account/avatar.d.ts.map +1 -1
  271. package/dist/types/react/web/ui/prebuilt/Account/balance.d.ts +1 -1
  272. package/dist/types/react/web/ui/prebuilt/Account/balance.d.ts.map +1 -1
  273. package/dist/types/react/web/ui/prebuilt/Account/blobbie.d.ts +1 -1
  274. package/dist/types/react/web/ui/prebuilt/Account/blobbie.d.ts.map +1 -1
  275. package/dist/types/react/web/ui/prebuilt/Account/name.d.ts +1 -1
  276. package/dist/types/react/web/ui/prebuilt/Account/name.d.ts.map +1 -1
  277. package/dist/types/react/web/ui/prebuilt/Chain/icon.d.ts +1 -1
  278. package/dist/types/react/web/ui/prebuilt/Chain/icon.d.ts.map +1 -1
  279. package/dist/types/react/web/ui/prebuilt/Chain/name.d.ts +1 -1
  280. package/dist/types/react/web/ui/prebuilt/Chain/name.d.ts.map +1 -1
  281. package/dist/types/react/web/ui/prebuilt/Chain/provider.d.ts +1 -1
  282. package/dist/types/react/web/ui/prebuilt/Chain/provider.d.ts.map +1 -1
  283. package/dist/types/react/web/ui/prebuilt/NFT/description.d.ts +1 -1
  284. package/dist/types/react/web/ui/prebuilt/NFT/description.d.ts.map +1 -1
  285. package/dist/types/react/web/ui/prebuilt/NFT/media.d.ts +1 -1
  286. package/dist/types/react/web/ui/prebuilt/NFT/media.d.ts.map +1 -1
  287. package/dist/types/react/web/ui/prebuilt/NFT/name.d.ts +1 -1
  288. package/dist/types/react/web/ui/prebuilt/NFT/name.d.ts.map +1 -1
  289. package/dist/types/react/web/ui/prebuilt/NFT/provider.d.ts +1 -1
  290. package/dist/types/react/web/ui/prebuilt/NFT/provider.d.ts.map +1 -1
  291. package/dist/types/react/web/ui/prebuilt/Token/icon.d.ts +1 -1
  292. package/dist/types/react/web/ui/prebuilt/Token/icon.d.ts.map +1 -1
  293. package/dist/types/react/web/ui/prebuilt/Token/name.d.ts +1 -1
  294. package/dist/types/react/web/ui/prebuilt/Token/name.d.ts.map +1 -1
  295. package/dist/types/react/web/ui/prebuilt/Token/provider.d.ts +1 -1
  296. package/dist/types/react/web/ui/prebuilt/Token/provider.d.ts.map +1 -1
  297. package/dist/types/react/web/ui/prebuilt/Token/symbol.d.ts +1 -1
  298. package/dist/types/react/web/ui/prebuilt/Token/symbol.d.ts.map +1 -1
  299. package/dist/types/react/web/ui/prebuilt/Wallet/icon.d.ts +2 -2
  300. package/dist/types/react/web/ui/prebuilt/Wallet/icon.d.ts.map +1 -1
  301. package/dist/types/react/web/ui/prebuilt/Wallet/name.d.ts +1 -1
  302. package/dist/types/react/web/ui/prebuilt/Wallet/name.d.ts.map +1 -1
  303. package/dist/types/react/web/ui/prebuilt/thirdweb/BuyDirectListingButton/index.d.ts +1 -1
  304. package/dist/types/react/web/ui/prebuilt/thirdweb/BuyDirectListingButton/index.d.ts.map +1 -1
  305. package/dist/types/react/web/ui/prebuilt/thirdweb/ClaimButton/index.d.ts +1 -1
  306. package/dist/types/react/web/ui/prebuilt/thirdweb/ClaimButton/index.d.ts.map +1 -1
  307. package/dist/types/react/web/ui/prebuilt/thirdweb/CreateDirectListingButton/index.d.ts +1 -1
  308. package/dist/types/react/web/ui/prebuilt/thirdweb/CreateDirectListingButton/index.d.ts.map +1 -1
  309. package/dist/types/react/web/wallets/ecosystem/EcosystemWalletConnectUI.d.ts +1 -1
  310. package/dist/types/react/web/wallets/ecosystem/EcosystemWalletConnectUI.d.ts.map +1 -1
  311. package/dist/types/react/web/wallets/ecosystem/EcosystemWalletFormUI.d.ts +1 -1
  312. package/dist/types/react/web/wallets/ecosystem/EcosystemWalletFormUI.d.ts.map +1 -1
  313. package/dist/types/react/web/wallets/ecosystem/EcosystemWalletHeader.d.ts +1 -1
  314. package/dist/types/react/web/wallets/ecosystem/EcosystemWalletHeader.d.ts.map +1 -1
  315. package/dist/types/react/web/wallets/in-app/CountrySelector.d.ts +1 -1
  316. package/dist/types/react/web/wallets/in-app/CountrySelector.d.ts.map +1 -1
  317. package/dist/types/react/web/wallets/in-app/InAppWalletConnectUI.d.ts +1 -1
  318. package/dist/types/react/web/wallets/in-app/InAppWalletConnectUI.d.ts.map +1 -1
  319. package/dist/types/react/web/wallets/in-app/InAppWalletFormUI.d.ts +1 -1
  320. package/dist/types/react/web/wallets/in-app/InAppWalletFormUI.d.ts.map +1 -1
  321. package/dist/types/react/web/wallets/in-app/InAppWalletSelectionUI.d.ts +1 -1
  322. package/dist/types/react/web/wallets/in-app/InAppWalletSelectionUI.d.ts.map +1 -1
  323. package/dist/types/react/web/wallets/in-app/InputSelectionUI.d.ts +1 -1
  324. package/dist/types/react/web/wallets/in-app/InputSelectionUI.d.ts.map +1 -1
  325. package/dist/types/react/web/wallets/in-app/WalletAuth.d.ts +1 -1
  326. package/dist/types/react/web/wallets/in-app/WalletAuth.d.ts.map +1 -1
  327. package/dist/types/react/web/wallets/shared/CoinbaseSDKConnection.d.ts +1 -1
  328. package/dist/types/react/web/wallets/shared/CoinbaseSDKConnection.d.ts.map +1 -1
  329. package/dist/types/react/web/wallets/shared/ConnectWalletSocialOptions.d.ts +1 -1
  330. package/dist/types/react/web/wallets/shared/ConnectWalletSocialOptions.d.ts.map +1 -1
  331. package/dist/types/react/web/wallets/shared/ErrorState.d.ts +1 -1
  332. package/dist/types/react/web/wallets/shared/ErrorState.d.ts.map +1 -1
  333. package/dist/types/react/web/wallets/shared/GuestLogin.d.ts +1 -1
  334. package/dist/types/react/web/wallets/shared/GuestLogin.d.ts.map +1 -1
  335. package/dist/types/react/web/wallets/shared/LoadingScreen.d.ts +1 -1
  336. package/dist/types/react/web/wallets/shared/LoadingScreen.d.ts.map +1 -1
  337. package/dist/types/react/web/wallets/shared/LoadingState.d.ts +1 -1
  338. package/dist/types/react/web/wallets/shared/LoadingState.d.ts.map +1 -1
  339. package/dist/types/react/web/wallets/shared/OTPLoginUI.d.ts +1 -1
  340. package/dist/types/react/web/wallets/shared/OTPLoginUI.d.ts.map +1 -1
  341. package/dist/types/react/web/wallets/shared/PassKeyLogin.d.ts +1 -1
  342. package/dist/types/react/web/wallets/shared/PassKeyLogin.d.ts.map +1 -1
  343. package/dist/types/react/web/wallets/shared/SocialLogin.d.ts +1 -1
  344. package/dist/types/react/web/wallets/shared/SocialLogin.d.ts.map +1 -1
  345. package/dist/types/transaction/actions/to-serializable-transaction.d.ts +2 -2
  346. package/dist/types/utils/abi/decodeFunctionData.d.ts +1 -1
  347. package/dist/types/utils/abi/decodeFunctionData.d.ts.map +1 -1
  348. package/dist/types/utils/abi/decodeFunctionResult.d.ts +1 -1
  349. package/dist/types/utils/abi/decodeFunctionResult.d.ts.map +1 -1
  350. package/dist/types/version.d.ts +1 -1
  351. package/dist/types/wallets/in-app/native/helpers/storage/local.d.ts +1 -1
  352. package/package.json +6 -5
  353. package/src/bridge/Webhook.test.ts +589 -0
  354. package/src/bridge/Webhook.ts +139 -0
  355. package/src/bridge/index.ts +4 -1
  356. package/src/version.ts +1 -1
@@ -0,0 +1,589 @@
1
+ import crypto from "node:crypto";
2
+ import { describe, expect, it } from "vitest";
3
+ import { type WebhookPayload, parse } from "./Webhook.js";
4
+
5
+ const secret = "test-secret";
6
+
7
+ // Helper function to generate signature
8
+ // Accepts any JSON-serialisable body (either the already-stringified payload or
9
+ // the raw object) and returns just the computed signature string.
10
+ const generateSignature = async (
11
+ timestamp: string,
12
+ body: unknown,
13
+ ): Promise<string> => {
14
+ const payloadString = typeof body === "string" ? body : JSON.stringify(body);
15
+
16
+ return crypto
17
+ .createHmac("sha256", secret)
18
+ .update(`${timestamp}.${payloadString}`)
19
+ .digest("hex");
20
+ };
21
+
22
+ describe("parseIncomingWebhook", () => {
23
+ const testTimestamp = Math.floor(Date.now() / 1000).toString();
24
+ const validPayload: WebhookPayload = {
25
+ version: 2,
26
+ data: {
27
+ paymentId: "pay123",
28
+ clientId: "client123",
29
+ action: "TRANSFER",
30
+ status: "COMPLETED",
31
+ originToken: "0x1234567890123456789012345678901234567890" as const,
32
+ originAmount: "1.0",
33
+ destinationToken: "0x1234567890123456789012345678901234567890",
34
+ destinationAmount: "1.0",
35
+ sender: "0x1234567890123456789012345678901234567890",
36
+ receiver: "0x1234567890123456789012345678901234567890",
37
+ type: "transfer",
38
+ transactions: [
39
+ "0x1234567890123456789012345678901234567890",
40
+ "0x1234567890123456789012345678901234567890",
41
+ ],
42
+ developerFeeBps: 100,
43
+ developerFeeRecipient: "0x1234567890123456789012345678901234567890",
44
+ purchaseData: {},
45
+ },
46
+ };
47
+
48
+ it("should successfully verify a valid webhook", async () => {
49
+ const signature = await generateSignature(
50
+ testTimestamp,
51
+ JSON.stringify(validPayload),
52
+ );
53
+ const headers = {
54
+ "x-payload-signature": signature,
55
+ "x-timestamp": testTimestamp,
56
+ };
57
+
58
+ const result = await parse(JSON.stringify(validPayload), headers, secret);
59
+ expect(result).toEqual(validPayload);
60
+ });
61
+
62
+ it("should accept alternative header names", async () => {
63
+ const signature = await generateSignature(
64
+ testTimestamp,
65
+ JSON.stringify(validPayload),
66
+ );
67
+ const headers = {
68
+ "x-pay-signature": signature,
69
+ "x-pay-timestamp": testTimestamp,
70
+ };
71
+
72
+ const result = await parse(JSON.stringify(validPayload), headers, secret);
73
+ expect(result).toEqual(validPayload);
74
+ });
75
+
76
+ it("should throw error for missing headers", async () => {
77
+ const headers: Record<string, string> = {};
78
+ await expect(
79
+ parse(JSON.stringify(validPayload), headers, secret),
80
+ ).rejects.toThrow(
81
+ "Missing required webhook headers: signature or timestamp",
82
+ );
83
+ });
84
+
85
+ it("should throw error for invalid signature", async () => {
86
+ const headers = {
87
+ "x-payload-signature": "invalid-signature",
88
+ "x-timestamp": testTimestamp,
89
+ };
90
+
91
+ await expect(
92
+ parse(JSON.stringify(validPayload), headers, secret),
93
+ ).rejects.toThrow("Invalid webhook signature");
94
+ });
95
+
96
+ it("should throw error for expired timestamp", async () => {
97
+ const oldTimestamp = (Math.floor(Date.now() / 1000) - 400).toString(); // 400 seconds old
98
+ const signature = await generateSignature(
99
+ oldTimestamp,
100
+ JSON.stringify(validPayload),
101
+ );
102
+ const headers = {
103
+ "x-payload-signature": signature,
104
+ "x-timestamp": oldTimestamp,
105
+ };
106
+
107
+ await expect(
108
+ parse(JSON.stringify(validPayload), headers, secret, 300),
109
+ ).rejects.toThrow(/Webhook timestamp is too old/);
110
+ });
111
+
112
+ it("should throw error for invalid JSON payload", async () => {
113
+ const invalidPayload = "invalid-json";
114
+ const signature = await generateSignature(testTimestamp, invalidPayload);
115
+ const headers = {
116
+ "x-payload-signature": signature,
117
+ "x-timestamp": testTimestamp,
118
+ };
119
+
120
+ await expect(parse(invalidPayload, headers, secret)).rejects.toThrow(
121
+ "Invalid webhook payload: not valid JSON",
122
+ );
123
+ });
124
+
125
+ it("should throw error for version 1 payload", async () => {
126
+ const v1Payload = {
127
+ version: 1,
128
+ data: {
129
+ someField: "value",
130
+ },
131
+ };
132
+ const v1PayloadString = JSON.stringify(v1Payload);
133
+ const signature = await generateSignature(testTimestamp, v1PayloadString);
134
+ const headers = {
135
+ "x-payload-signature": signature,
136
+ "x-timestamp": testTimestamp,
137
+ };
138
+
139
+ await expect(parse(v1PayloadString, headers, secret)).rejects.toThrow(
140
+ "Invalid webhook payload: version 1 is no longer supported, please upgrade to webhook version 2.",
141
+ );
142
+ });
143
+
144
+ it("should accept payload within tolerance window", async () => {
145
+ const recentTimestamp = (Math.floor(Date.now() / 1000) - 200).toString(); // 200 seconds old
146
+ const signature = await generateSignature(
147
+ recentTimestamp,
148
+ JSON.stringify(validPayload),
149
+ );
150
+ const headers = {
151
+ "x-payload-signature": signature,
152
+ "x-timestamp": recentTimestamp,
153
+ };
154
+
155
+ const result = await parse(
156
+ JSON.stringify(validPayload),
157
+ headers,
158
+ secret,
159
+ 300,
160
+ );
161
+ expect(result).toEqual(validPayload);
162
+ });
163
+
164
+ describe("payload validation", () => {
165
+ it("should throw error for non-object payload", async () => {
166
+ const invalidPayload = JSON.stringify("not-an-object");
167
+ const signature = await generateSignature(testTimestamp, invalidPayload);
168
+ const headers = {
169
+ "x-payload-signature": signature,
170
+ "x-timestamp": testTimestamp,
171
+ };
172
+
173
+ await expect(
174
+ parse(invalidPayload, headers, secret),
175
+ ).rejects.toHaveProperty("name", "$ZodError");
176
+ });
177
+
178
+ it("should throw error for missing version", async () => {
179
+ const invalidPayload = {
180
+ data: {
181
+ transactionId: "tx123",
182
+ },
183
+ };
184
+ const payloadString = JSON.stringify(invalidPayload);
185
+ const signature = await generateSignature(testTimestamp, payloadString);
186
+ const headers = {
187
+ "x-payload-signature": signature,
188
+ "x-timestamp": testTimestamp,
189
+ };
190
+
191
+ await expect(
192
+ parse(payloadString, headers, secret),
193
+ ).rejects.toHaveProperty("name", "$ZodError");
194
+ });
195
+
196
+ it("should throw error for missing data object", async () => {
197
+ const invalidPayload = {
198
+ version: 2,
199
+ };
200
+ const payloadString = JSON.stringify(invalidPayload);
201
+ const signature = await generateSignature(testTimestamp, payloadString);
202
+ const headers = {
203
+ "x-payload-signature": signature,
204
+ "x-timestamp": testTimestamp,
205
+ };
206
+
207
+ await expect(
208
+ parse(payloadString, headers, secret),
209
+ ).rejects.toHaveProperty("name", "$ZodError");
210
+ });
211
+
212
+ it("should throw error for missing required fields", async () => {
213
+ const invalidPayload = {
214
+ version: 2,
215
+ data: {
216
+ transactionId: "tx123",
217
+ // Missing other required fields
218
+ },
219
+ };
220
+ const payloadString = JSON.stringify(invalidPayload);
221
+ const signature = await generateSignature(testTimestamp, payloadString);
222
+ const headers = {
223
+ "x-payload-signature": signature,
224
+ "x-timestamp": testTimestamp,
225
+ };
226
+
227
+ await expect(
228
+ parse(payloadString, headers, secret),
229
+ ).rejects.toHaveProperty("name", "$ZodError");
230
+ });
231
+
232
+ it("should throw error for invalid action type", async () => {
233
+ const invalidPayload = {
234
+ version: 2,
235
+ data: {
236
+ ...validPayload.data,
237
+ action: "INVALID_ACTION", // Invalid action type
238
+ },
239
+ };
240
+ const payloadString = JSON.stringify(invalidPayload);
241
+ const signature = await generateSignature(testTimestamp, payloadString);
242
+ const headers = {
243
+ "x-payload-signature": signature,
244
+ "x-timestamp": testTimestamp,
245
+ };
246
+
247
+ await expect(
248
+ parse(payloadString, headers, secret),
249
+ ).rejects.toHaveProperty("name", "$ZodError");
250
+ });
251
+
252
+ it("should throw error for invalid status type", async () => {
253
+ const invalidPayload = {
254
+ version: 2,
255
+ data: {
256
+ ...validPayload.data,
257
+ status: "INVALID_STATUS", // Invalid status type
258
+ },
259
+ };
260
+ const payloadString = JSON.stringify(invalidPayload);
261
+ const signature = await generateSignature(testTimestamp, payloadString);
262
+ const headers = {
263
+ "x-payload-signature": signature,
264
+ "x-timestamp": testTimestamp,
265
+ };
266
+
267
+ await expect(
268
+ parse(payloadString, headers, secret),
269
+ ).rejects.toHaveProperty("name", "$ZodError");
270
+ });
271
+
272
+ it("should throw error for invalid hex address", async () => {
273
+ const invalidPayload = {
274
+ version: 2,
275
+ data: {
276
+ ...validPayload.data,
277
+ destinationToken: "invalid-address", // Invalid hex address
278
+ },
279
+ };
280
+ const payloadString = JSON.stringify(invalidPayload);
281
+ const signature = await generateSignature(testTimestamp, payloadString);
282
+ const headers = {
283
+ "x-payload-signature": signature,
284
+ "x-timestamp": testTimestamp,
285
+ };
286
+
287
+ await expect(
288
+ parse(payloadString, headers, secret),
289
+ ).rejects.toHaveProperty("name", "$ZodError");
290
+ });
291
+
292
+ it("should throw error for invalid transactions array", async () => {
293
+ const invalidPayload = {
294
+ version: 2,
295
+ data: {
296
+ ...validPayload.data,
297
+ transactions: "not-an-array", // Invalid transactions type
298
+ },
299
+ };
300
+ const payloadString = JSON.stringify(invalidPayload);
301
+ const signature = await generateSignature(testTimestamp, payloadString);
302
+ const headers = {
303
+ "x-payload-signature": signature,
304
+ "x-timestamp": testTimestamp,
305
+ };
306
+
307
+ await expect(
308
+ parse(payloadString, headers, secret),
309
+ ).rejects.toHaveProperty("name", "$ZodError");
310
+ });
311
+
312
+ it("should throw error for invalid developerFeeBps type", async () => {
313
+ const invalidPayload = {
314
+ version: 2,
315
+ data: {
316
+ ...validPayload.data,
317
+ developerFeeBps: "not-a-number", // Invalid value (cannot coerce to number)
318
+ },
319
+ };
320
+ const payloadString = JSON.stringify(invalidPayload);
321
+ const signature = await generateSignature(testTimestamp, payloadString);
322
+ const headers = {
323
+ "x-payload-signature": signature,
324
+ "x-timestamp": testTimestamp,
325
+ };
326
+
327
+ await expect(
328
+ parse(payloadString, headers, secret),
329
+ ).rejects.toHaveProperty("name", "$ZodError");
330
+ });
331
+
332
+ it("should throw error for invalid purchaseData type", async () => {
333
+ const invalidPayload = {
334
+ version: 2,
335
+ data: {
336
+ ...validPayload.data,
337
+ purchaseData: null, // Invalid purchaseData type
338
+ },
339
+ };
340
+ const payloadString = JSON.stringify(invalidPayload);
341
+ const signature = await generateSignature(testTimestamp, payloadString);
342
+ const headers = {
343
+ "x-payload-signature": signature,
344
+ "x-timestamp": testTimestamp,
345
+ };
346
+
347
+ await expect(
348
+ parse(payloadString, headers, secret),
349
+ ).rejects.toHaveProperty("name", "$ZodError");
350
+ });
351
+
352
+ // Additional tests for full branch coverage
353
+
354
+ it("should throw error for invalid paymentId type", async () => {
355
+ const invalidPayload = {
356
+ version: 2,
357
+ data: {
358
+ ...validPayload.data,
359
+ paymentId: 123, // number instead of string
360
+ },
361
+ };
362
+ const payloadString = JSON.stringify(invalidPayload);
363
+ const signature = await generateSignature(testTimestamp, payloadString);
364
+ const headers = {
365
+ "x-payload-signature": signature,
366
+ "x-timestamp": testTimestamp,
367
+ };
368
+
369
+ await expect(
370
+ parse(payloadString, headers, secret),
371
+ ).rejects.toHaveProperty("name", "$ZodError");
372
+ });
373
+
374
+ it("should throw error for invalid paymentLinkId type", async () => {
375
+ const invalidPayload = {
376
+ version: 2,
377
+ data: {
378
+ ...validPayload.data,
379
+ paymentLinkId: 123, // number instead of string
380
+ },
381
+ };
382
+ const payloadString = JSON.stringify(invalidPayload);
383
+ const signature = await generateSignature(testTimestamp, payloadString);
384
+ const headers = {
385
+ "x-payload-signature": signature,
386
+ "x-timestamp": testTimestamp,
387
+ };
388
+
389
+ await expect(
390
+ parse(payloadString, headers, secret),
391
+ ).rejects.toHaveProperty("name", "$ZodError");
392
+ });
393
+
394
+ it("should throw error for invalid clientId type", async () => {
395
+ const invalidPayload = {
396
+ version: 2,
397
+ data: {
398
+ ...validPayload.data,
399
+ clientId: 123, // number instead of string
400
+ },
401
+ };
402
+ const payloadString = JSON.stringify(invalidPayload);
403
+ const signature = await generateSignature(testTimestamp, payloadString);
404
+ const headers = {
405
+ "x-payload-signature": signature,
406
+ "x-timestamp": testTimestamp,
407
+ };
408
+
409
+ await expect(
410
+ parse(payloadString, headers, secret),
411
+ ).rejects.toHaveProperty("name", "$ZodError");
412
+ });
413
+
414
+ it("should throw error for invalid originToken type", async () => {
415
+ const invalidPayload = {
416
+ version: 2,
417
+ data: {
418
+ ...validPayload.data,
419
+ originToken: 123, // number instead of string
420
+ },
421
+ };
422
+ const payloadString = JSON.stringify(invalidPayload);
423
+ const signature = await generateSignature(testTimestamp, payloadString);
424
+ const headers = {
425
+ "x-payload-signature": signature,
426
+ "x-timestamp": testTimestamp,
427
+ };
428
+
429
+ await expect(
430
+ parse(payloadString, headers, secret),
431
+ ).rejects.toHaveProperty("name", "$ZodError");
432
+ });
433
+
434
+ it("should throw error for invalid originAmount type", async () => {
435
+ const invalidPayload = {
436
+ version: 2,
437
+ data: {
438
+ ...validPayload.data,
439
+ originAmount: 123, // number instead of string
440
+ },
441
+ };
442
+ const payloadString = JSON.stringify(invalidPayload);
443
+ const signature = await generateSignature(testTimestamp, payloadString);
444
+ const headers = {
445
+ "x-payload-signature": signature,
446
+ "x-timestamp": testTimestamp,
447
+ };
448
+
449
+ await expect(
450
+ parse(payloadString, headers, secret),
451
+ ).rejects.toHaveProperty("name", "$ZodError");
452
+ });
453
+
454
+ it("should throw error for invalid destinationAmount type", async () => {
455
+ const invalidPayload = {
456
+ version: 2,
457
+ data: {
458
+ ...validPayload.data,
459
+ destinationAmount: 123, // number instead of string
460
+ },
461
+ };
462
+ const payloadString = JSON.stringify(invalidPayload);
463
+ const signature = await generateSignature(testTimestamp, payloadString);
464
+ const headers = {
465
+ "x-payload-signature": signature,
466
+ "x-timestamp": testTimestamp,
467
+ };
468
+
469
+ await expect(
470
+ parse(payloadString, headers, secret),
471
+ ).rejects.toHaveProperty("name", "$ZodError");
472
+ });
473
+
474
+ it("should throw error for invalid sender address", async () => {
475
+ const invalidPayload = {
476
+ version: 2,
477
+ data: {
478
+ ...validPayload.data,
479
+ sender: "invalid-address", // not 0x-prefixed
480
+ },
481
+ };
482
+ const payloadString = JSON.stringify(invalidPayload);
483
+ const signature = await generateSignature(testTimestamp, payloadString);
484
+ const headers = {
485
+ "x-payload-signature": signature,
486
+ "x-timestamp": testTimestamp,
487
+ };
488
+
489
+ await expect(
490
+ parse(payloadString, headers, secret),
491
+ ).rejects.toHaveProperty("name", "$ZodError");
492
+ });
493
+
494
+ it("should throw error for invalid receiver address", async () => {
495
+ const invalidPayload = {
496
+ version: 2,
497
+ data: {
498
+ ...validPayload.data,
499
+ receiver: "invalid-address", // not 0x-prefixed
500
+ },
501
+ };
502
+ const payloadString = JSON.stringify(invalidPayload);
503
+ const signature = await generateSignature(testTimestamp, payloadString);
504
+ const headers = {
505
+ "x-payload-signature": signature,
506
+ "x-timestamp": testTimestamp,
507
+ };
508
+
509
+ await expect(
510
+ parse(payloadString, headers, secret),
511
+ ).rejects.toHaveProperty("name", "$ZodError");
512
+ });
513
+
514
+ it("should throw error for invalid type field", async () => {
515
+ const invalidPayload = {
516
+ version: 2,
517
+ data: {
518
+ ...validPayload.data,
519
+ type: 123, // number instead of string
520
+ },
521
+ };
522
+ const payloadString = JSON.stringify(invalidPayload);
523
+ const signature = await generateSignature(testTimestamp, payloadString);
524
+ const headers = {
525
+ "x-payload-signature": signature,
526
+ "x-timestamp": testTimestamp,
527
+ };
528
+
529
+ await expect(
530
+ parse(payloadString, headers, secret),
531
+ ).rejects.toHaveProperty("name", "$ZodError");
532
+ });
533
+
534
+ it("should throw error for invalid developerFeeRecipient address", async () => {
535
+ const invalidPayload = {
536
+ version: 2,
537
+ data: {
538
+ ...validPayload.data,
539
+ developerFeeRecipient: "invalid-address", // not 0x-prefixed
540
+ },
541
+ };
542
+ const payloadString = JSON.stringify(invalidPayload);
543
+ const signature = await generateSignature(testTimestamp, payloadString);
544
+ const headers = {
545
+ "x-payload-signature": signature,
546
+ "x-timestamp": testTimestamp,
547
+ };
548
+
549
+ await expect(
550
+ parse(payloadString, headers, secret),
551
+ ).rejects.toHaveProperty("name", "$ZodError");
552
+ });
553
+
554
+ it("should throw error for version 1 payload missing data object", async () => {
555
+ const invalidPayload = {
556
+ version: 1,
557
+ // no data field
558
+ } as unknown as WebhookPayload;
559
+ const payloadString = JSON.stringify(invalidPayload);
560
+ const signature = await generateSignature(testTimestamp, payloadString);
561
+ const headers = {
562
+ "x-payload-signature": signature,
563
+ "x-timestamp": testTimestamp,
564
+ };
565
+
566
+ await expect(
567
+ parse(payloadString, headers, secret),
568
+ ).rejects.toHaveProperty("name", "$ZodError");
569
+ });
570
+ });
571
+
572
+ it("should throw error for unsupported webhook version", async () => {
573
+ const invalidPayload = {
574
+ version: 3,
575
+ data: {},
576
+ };
577
+ const payloadString = JSON.stringify(invalidPayload);
578
+ const signature = await generateSignature(testTimestamp, payloadString);
579
+ const headers = {
580
+ "x-payload-signature": signature,
581
+ "x-timestamp": testTimestamp,
582
+ };
583
+
584
+ await expect(parse(payloadString, headers, secret)).rejects.toHaveProperty(
585
+ "name",
586
+ "$ZodError",
587
+ );
588
+ });
589
+ });