thirdweb 5.100.2 → 5.101.1-nightly-5277eddb70b3cf7b3dccbb4570c677f49b8dc854-20250524000345

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