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.
- package/dist/cjs/bridge/Webhook.js +121 -0
- package/dist/cjs/bridge/Webhook.js.map +1 -0
- package/dist/cjs/bridge/index.js +4 -1
- package/dist/cjs/bridge/index.js.map +1 -1
- package/dist/cjs/bridge/types/Errors.js.map +1 -1
- package/dist/cjs/react/web/utils/errors.js +7 -10
- package/dist/cjs/react/web/utils/errors.js.map +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/version.js.map +1 -1
- package/dist/esm/bridge/Webhook.js +118 -0
- package/dist/esm/bridge/Webhook.js.map +1 -0
- package/dist/esm/bridge/index.js +2 -0
- package/dist/esm/bridge/index.js.map +1 -1
- package/dist/esm/bridge/types/Errors.js.map +1 -1
- package/dist/esm/react/web/utils/errors.js +7 -10
- package/dist/esm/react/web/utils/errors.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/types/bridge/Webhook.d.ts +114 -0
- package/dist/types/bridge/Webhook.d.ts.map +1 -0
- package/dist/types/bridge/index.d.ts +4 -1
- package/dist/types/bridge/index.d.ts.map +1 -1
- package/dist/types/bridge/types/Errors.d.ts +1 -1
- package/dist/types/bridge/types/Errors.d.ts.map +1 -1
- package/dist/types/react/core/account/provider.d.ts +1 -1
- package/dist/types/react/core/account/provider.d.ts.map +1 -1
- package/dist/types/react/core/design-system/CustomThemeProvider.d.ts +1 -1
- package/dist/types/react/core/design-system/CustomThemeProvider.d.ts.map +1 -1
- package/dist/types/react/core/providers/thirdweb-provider.d.ts +1 -1
- package/dist/types/react/core/providers/thirdweb-provider.d.ts.map +1 -1
- package/dist/types/react/core/wallet/provider.d.ts +1 -1
- package/dist/types/react/core/wallet/provider.d.ts.map +1 -1
- package/dist/types/react/native/providers/thirdweb-provider.d.ts +1 -1
- package/dist/types/react/native/providers/thirdweb-provider.d.ts.map +1 -1
- package/dist/types/react/native/ui/AutoConnect/AutoConnect.d.ts +1 -1
- package/dist/types/react/native/ui/AutoConnect/AutoConnect.d.ts.map +1 -1
- package/dist/types/react/native/ui/components/Address.d.ts +1 -1
- package/dist/types/react/native/ui/components/Address.d.ts.map +1 -1
- package/dist/types/react/native/ui/components/ChainIcon.d.ts +1 -1
- package/dist/types/react/native/ui/components/ChainIcon.d.ts.map +1 -1
- package/dist/types/react/native/ui/components/Header.d.ts +1 -1
- package/dist/types/react/native/ui/components/Header.d.ts.map +1 -1
- package/dist/types/react/native/ui/components/RNImage.d.ts +1 -1
- package/dist/types/react/native/ui/components/RNImage.d.ts.map +1 -1
- package/dist/types/react/native/ui/components/TokenIcon.d.ts +1 -1
- package/dist/types/react/native/ui/components/TokenIcon.d.ts.map +1 -1
- package/dist/types/react/native/ui/components/WalletImage.d.ts +1 -1
- package/dist/types/react/native/ui/components/WalletImage.d.ts.map +1 -1
- package/dist/types/react/native/ui/components/button.d.ts +2 -2
- package/dist/types/react/native/ui/components/button.d.ts.map +1 -1
- package/dist/types/react/native/ui/components/input.d.ts +2 -2
- package/dist/types/react/native/ui/components/input.d.ts.map +1 -1
- package/dist/types/react/native/ui/components/spacer.d.ts +1 -1
- package/dist/types/react/native/ui/components/spacer.d.ts.map +1 -1
- package/dist/types/react/native/ui/components/text.d.ts +1 -1
- package/dist/types/react/native/ui/components/text.d.ts.map +1 -1
- package/dist/types/react/native/ui/components/view.d.ts +1 -1
- package/dist/types/react/native/ui/components/view.d.ts.map +1 -1
- package/dist/types/react/native/ui/connect/ConnectButton.d.ts +1 -1
- package/dist/types/react/native/ui/connect/ConnectButton.d.ts.map +1 -1
- package/dist/types/react/native/ui/connect/ConnectModal.d.ts +2 -2
- package/dist/types/react/native/ui/connect/ConnectModal.d.ts.map +1 -1
- package/dist/types/react/native/ui/connect/ConnectedButton.d.ts +1 -1
- package/dist/types/react/native/ui/connect/ConnectedButton.d.ts.map +1 -1
- package/dist/types/react/native/ui/connect/ConnectedModal.d.ts +1 -1
- package/dist/types/react/native/ui/connect/ConnectedModal.d.ts.map +1 -1
- package/dist/types/react/native/ui/connect/ErrorView.d.ts +1 -1
- package/dist/types/react/native/ui/connect/ErrorView.d.ts.map +1 -1
- package/dist/types/react/native/ui/connect/ExternalWalletsList.d.ts +2 -2
- package/dist/types/react/native/ui/connect/ExternalWalletsList.d.ts.map +1 -1
- package/dist/types/react/native/ui/connect/InAppWalletUI.d.ts +3 -3
- package/dist/types/react/native/ui/connect/InAppWalletUI.d.ts.map +1 -1
- package/dist/types/react/native/ui/connect/LoadingView.d.ts +1 -1
- package/dist/types/react/native/ui/connect/LoadingView.d.ts.map +1 -1
- package/dist/types/react/native/ui/connect/ReceiveScreen.d.ts +1 -1
- package/dist/types/react/native/ui/connect/ReceiveScreen.d.ts.map +1 -1
- package/dist/types/react/native/ui/connect/SendScreen.d.ts +1 -1
- package/dist/types/react/native/ui/connect/SendScreen.d.ts.map +1 -1
- package/dist/types/react/native/ui/connect/SuccessView.d.ts +1 -1
- package/dist/types/react/native/ui/connect/SuccessView.d.ts.map +1 -1
- package/dist/types/react/native/ui/connect/TokenListScreen.d.ts +2 -2
- package/dist/types/react/native/ui/connect/TokenListScreen.d.ts.map +1 -1
- package/dist/types/react/native/ui/connect/WalletLoadingThumbnail.d.ts +1 -1
- package/dist/types/react/native/ui/connect/WalletLoadingThumbnail.d.ts.map +1 -1
- package/dist/types/react/native/ui/prebuilt/Account/address.d.ts +1 -1
- package/dist/types/react/native/ui/prebuilt/Account/address.d.ts.map +1 -1
- package/dist/types/react/native/ui/prebuilt/Account/avatar.d.ts +1 -1
- package/dist/types/react/native/ui/prebuilt/Account/avatar.d.ts.map +1 -1
- package/dist/types/react/native/ui/prebuilt/Account/balance.d.ts +1 -1
- package/dist/types/react/native/ui/prebuilt/Account/balance.d.ts.map +1 -1
- package/dist/types/react/native/ui/prebuilt/Account/blobbie.d.ts +2 -2
- package/dist/types/react/native/ui/prebuilt/Account/blobbie.d.ts.map +1 -1
- package/dist/types/react/native/ui/prebuilt/Account/name.d.ts +1 -1
- package/dist/types/react/native/ui/prebuilt/Account/name.d.ts.map +1 -1
- package/dist/types/react/native/ui/prebuilt/Wallet/icon.d.ts +2 -2
- package/dist/types/react/native/ui/prebuilt/Wallet/icon.d.ts.map +1 -1
- package/dist/types/react/native/ui/prebuilt/Wallet/name.d.ts +1 -1
- package/dist/types/react/native/ui/prebuilt/Wallet/name.d.ts.map +1 -1
- package/dist/types/react/native/ui/transaction/TransactionButton.d.ts +1 -1
- package/dist/types/react/native/ui/transaction/TransactionButton.d.ts.map +1 -1
- package/dist/types/react/web/providers/thirdweb-provider.d.ts +1 -1
- package/dist/types/react/web/providers/thirdweb-provider.d.ts.map +1 -1
- package/dist/types/react/web/providers/wallet-ui-states-provider.d.ts +1 -1
- package/dist/types/react/web/providers/wallet-ui-states-provider.d.ts.map +1 -1
- package/dist/types/react/web/ui/AutoConnect/AutoConnect.d.ts +1 -1
- package/dist/types/react/web/ui/AutoConnect/AutoConnect.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Blobbie.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Blobbie.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/ConnectButton.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/ConnectButton.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Details.d.ts +5 -5
- package/dist/types/react/web/ui/ConnectWallet/Details.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Modal/AllWalletsUI.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Modal/AllWalletsUI.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectEmbed.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectEmbed.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectModal.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectModal.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectModalContent.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectModalContent.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectModalSkeleton.d.ts +2 -2
- package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectModalSkeleton.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Modal/DeepLinkConnectUI.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Modal/DeepLinkConnectUI.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Modal/InjectedConnectUI.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Modal/InjectedConnectUI.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Modal/SmartWalletConnectUI.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Modal/SmartWalletConnectUI.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Modal/TOS.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Modal/TOS.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/NetworkSelector.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/NetworkSelector.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/PoweredByTW.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/PoweredByTW.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/TransactionsScreen.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/TransactionsScreen.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/WalletEntryButton.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/WalletEntryButton.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/WalletSelector.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/WalletSelector.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/WalletTypeRowButton.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/WalletTypeRowButton.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/DirectPaymentModeScreen.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/DirectPaymentModeScreen.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/EstimatedTimeAndFees.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/EstimatedTimeAndFees.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/LazyBuyScreen.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/LazyBuyScreen.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/PayProviderSelection.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/PayProviderSelection.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/PayTokenIcon.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/PayTokenIcon.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/PayWIthCreditCard.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/PayWIthCreditCard.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/Stepper.d.ts +2 -2
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/Stepper.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/CurrencySelection.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/CurrencySelection.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatScreenContent.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatScreenContent.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatSteps.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatSteps.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/OnRampScreen.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/OnRampScreen.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/Providers.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/Providers.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/SwapDetailsScreen.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/SwapDetailsScreen.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/TokenInfoRow.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/TokenInfoRow.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/BuyTokenInput.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/BuyTokenInput.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/ConfirmationScreen.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/ConfirmationScreen.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/ErrorText.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/ErrorText.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/Fees.d.ts +2 -2
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/Fees.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/FiatValue.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/FiatValue.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/StepConnector.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/StepConnector.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/SwapFlow.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/SwapFlow.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/SwapScreenContent.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/SwapScreenContent.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/SwapStatusScreen.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/SwapStatusScreen.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/SwapSummary.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/SwapSummary.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/TokenSelectorScreen.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/TokenSelectorScreen.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/TransferConfirmationScreen.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/TransferConfirmationScreen.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/TransferFlow.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/TransferFlow.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/WalletRow.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/WalletRow.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Details/WalletManagerScreen.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Details/WalletManagerScreen.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/LinkProfileScreen.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/LinkProfileScreen.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/LinkedProfilesScreen.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/LinkedProfilesScreen.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/ManageWalletScreen.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/ManageWalletScreen.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/PrivateKey.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/PrivateKey.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/ReceiveFunds.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/ReceiveFunds.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/SendFunds.d.ts +2 -2
- package/dist/types/react/web/ui/ConnectWallet/screens/SendFunds.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/StartScreen.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/StartScreen.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/TokenSelector.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/TokenSelector.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/ViewAssets.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/ViewAssets.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/ViewNFTs.d.ts +2 -2
- package/dist/types/react/web/ui/ConnectWallet/screens/ViewNFTs.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/ViewTokens.d.ts +2 -2
- package/dist/types/react/web/ui/ConnectWallet/screens/ViewTokens.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/WalletConnectDisconnectScreen.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/WalletConnectDisconnectScreen.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/WalletConnectReceiverScreen.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/WalletConnectReceiverScreen.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/WalletLogoSpinner.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/WalletLogoSpinner.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/WalletSwitcherConnectionScreen.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/WalletSwitcherConnectionScreen.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/WalletTransactionHistory.d.ts +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/WalletTransactionHistory.d.ts.map +1 -1
- package/dist/types/react/web/ui/PayEmbed.d.ts +1 -1
- package/dist/types/react/web/ui/PayEmbed.d.ts.map +1 -1
- package/dist/types/react/web/ui/SiteEmbed.d.ts +1 -1
- package/dist/types/react/web/ui/SiteEmbed.d.ts.map +1 -1
- package/dist/types/react/web/ui/SiteLink.d.ts +1 -1
- package/dist/types/react/web/ui/SiteLink.d.ts.map +1 -1
- package/dist/types/react/web/ui/TransactionButton/DepositScreen.d.ts +1 -1
- package/dist/types/react/web/ui/TransactionButton/DepositScreen.d.ts.map +1 -1
- package/dist/types/react/web/ui/TransactionButton/ExecutingScreen.d.ts +1 -1
- package/dist/types/react/web/ui/TransactionButton/ExecutingScreen.d.ts.map +1 -1
- package/dist/types/react/web/ui/TransactionButton/TransactionModal.d.ts +1 -1
- package/dist/types/react/web/ui/TransactionButton/TransactionModal.d.ts.map +1 -1
- package/dist/types/react/web/ui/TransactionButton/index.d.ts +1 -1
- package/dist/types/react/web/ui/TransactionButton/index.d.ts.map +1 -1
- package/dist/types/react/web/ui/components/OTPInput.d.ts +1 -1
- package/dist/types/react/web/ui/components/OTPInput.d.ts.map +1 -1
- package/dist/types/react/web/ui/components/QRCode.d.ts +1 -1
- package/dist/types/react/web/ui/components/QRCode.d.ts.map +1 -1
- package/dist/types/react/web/ui/components/StepBar.d.ts +1 -1
- package/dist/types/react/web/ui/components/StepBar.d.ts.map +1 -1
- package/dist/types/react/web/ui/components/SwitchNetwork.d.ts +1 -1
- package/dist/types/react/web/ui/components/SwitchNetwork.d.ts.map +1 -1
- package/dist/types/react/web/ui/components/Tabs.d.ts +1 -1
- package/dist/types/react/web/ui/components/Tabs.d.ts.map +1 -1
- package/dist/types/react/web/ui/components/TextDivider.d.ts +1 -1
- package/dist/types/react/web/ui/components/TextDivider.d.ts.map +1 -1
- package/dist/types/react/web/ui/components/TokenIcon.d.ts +1 -1
- package/dist/types/react/web/ui/components/TokenIcon.d.ts.map +1 -1
- package/dist/types/react/web/ui/components/WalletImage.d.ts +1 -1
- package/dist/types/react/web/ui/components/WalletImage.d.ts.map +1 -1
- package/dist/types/react/web/ui/components/basic.d.ts +2 -2
- package/dist/types/react/web/ui/components/basic.d.ts.map +1 -1
- package/dist/types/react/web/ui/components/token/TokenRow.d.ts +1 -1
- package/dist/types/react/web/ui/components/token/TokenRow.d.ts.map +1 -1
- package/dist/types/react/web/ui/components/token/TokenSymbol.d.ts +1 -1
- package/dist/types/react/web/ui/components/token/TokenSymbol.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/Account/address.d.ts +1 -1
- package/dist/types/react/web/ui/prebuilt/Account/address.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/Account/avatar.d.ts +1 -1
- package/dist/types/react/web/ui/prebuilt/Account/avatar.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/Account/balance.d.ts +1 -1
- package/dist/types/react/web/ui/prebuilt/Account/balance.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/Account/blobbie.d.ts +1 -1
- package/dist/types/react/web/ui/prebuilt/Account/blobbie.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/Account/name.d.ts +1 -1
- package/dist/types/react/web/ui/prebuilt/Account/name.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/Chain/icon.d.ts +1 -1
- package/dist/types/react/web/ui/prebuilt/Chain/icon.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/Chain/name.d.ts +1 -1
- package/dist/types/react/web/ui/prebuilt/Chain/name.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/Chain/provider.d.ts +1 -1
- package/dist/types/react/web/ui/prebuilt/Chain/provider.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/NFT/description.d.ts +1 -1
- package/dist/types/react/web/ui/prebuilt/NFT/description.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/NFT/media.d.ts +1 -1
- package/dist/types/react/web/ui/prebuilt/NFT/media.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/NFT/name.d.ts +1 -1
- package/dist/types/react/web/ui/prebuilt/NFT/name.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/NFT/provider.d.ts +1 -1
- package/dist/types/react/web/ui/prebuilt/NFT/provider.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/Token/icon.d.ts +1 -1
- package/dist/types/react/web/ui/prebuilt/Token/icon.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/Token/name.d.ts +1 -1
- package/dist/types/react/web/ui/prebuilt/Token/name.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/Token/provider.d.ts +1 -1
- package/dist/types/react/web/ui/prebuilt/Token/provider.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/Token/symbol.d.ts +1 -1
- package/dist/types/react/web/ui/prebuilt/Token/symbol.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/Wallet/icon.d.ts +2 -2
- package/dist/types/react/web/ui/prebuilt/Wallet/icon.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/Wallet/name.d.ts +1 -1
- package/dist/types/react/web/ui/prebuilt/Wallet/name.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/thirdweb/BuyDirectListingButton/index.d.ts +1 -1
- package/dist/types/react/web/ui/prebuilt/thirdweb/BuyDirectListingButton/index.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/thirdweb/ClaimButton/index.d.ts +1 -1
- package/dist/types/react/web/ui/prebuilt/thirdweb/ClaimButton/index.d.ts.map +1 -1
- package/dist/types/react/web/ui/prebuilt/thirdweb/CreateDirectListingButton/index.d.ts +1 -1
- package/dist/types/react/web/ui/prebuilt/thirdweb/CreateDirectListingButton/index.d.ts.map +1 -1
- package/dist/types/react/web/utils/errors.d.ts.map +1 -1
- package/dist/types/react/web/wallets/ecosystem/EcosystemWalletConnectUI.d.ts +1 -1
- package/dist/types/react/web/wallets/ecosystem/EcosystemWalletConnectUI.d.ts.map +1 -1
- package/dist/types/react/web/wallets/ecosystem/EcosystemWalletFormUI.d.ts +1 -1
- package/dist/types/react/web/wallets/ecosystem/EcosystemWalletFormUI.d.ts.map +1 -1
- package/dist/types/react/web/wallets/ecosystem/EcosystemWalletHeader.d.ts +1 -1
- package/dist/types/react/web/wallets/ecosystem/EcosystemWalletHeader.d.ts.map +1 -1
- package/dist/types/react/web/wallets/in-app/CountrySelector.d.ts +1 -1
- package/dist/types/react/web/wallets/in-app/CountrySelector.d.ts.map +1 -1
- package/dist/types/react/web/wallets/in-app/InAppWalletConnectUI.d.ts +1 -1
- package/dist/types/react/web/wallets/in-app/InAppWalletConnectUI.d.ts.map +1 -1
- package/dist/types/react/web/wallets/in-app/InAppWalletFormUI.d.ts +1 -1
- package/dist/types/react/web/wallets/in-app/InAppWalletFormUI.d.ts.map +1 -1
- package/dist/types/react/web/wallets/in-app/InAppWalletSelectionUI.d.ts +1 -1
- package/dist/types/react/web/wallets/in-app/InAppWalletSelectionUI.d.ts.map +1 -1
- package/dist/types/react/web/wallets/in-app/InputSelectionUI.d.ts +1 -1
- package/dist/types/react/web/wallets/in-app/InputSelectionUI.d.ts.map +1 -1
- package/dist/types/react/web/wallets/in-app/WalletAuth.d.ts +1 -1
- package/dist/types/react/web/wallets/in-app/WalletAuth.d.ts.map +1 -1
- package/dist/types/react/web/wallets/shared/CoinbaseSDKConnection.d.ts +1 -1
- package/dist/types/react/web/wallets/shared/CoinbaseSDKConnection.d.ts.map +1 -1
- package/dist/types/react/web/wallets/shared/ConnectWalletSocialOptions.d.ts +1 -1
- package/dist/types/react/web/wallets/shared/ConnectWalletSocialOptions.d.ts.map +1 -1
- package/dist/types/react/web/wallets/shared/ErrorState.d.ts +1 -1
- package/dist/types/react/web/wallets/shared/ErrorState.d.ts.map +1 -1
- package/dist/types/react/web/wallets/shared/GuestLogin.d.ts +1 -1
- package/dist/types/react/web/wallets/shared/GuestLogin.d.ts.map +1 -1
- package/dist/types/react/web/wallets/shared/LoadingScreen.d.ts +1 -1
- package/dist/types/react/web/wallets/shared/LoadingScreen.d.ts.map +1 -1
- package/dist/types/react/web/wallets/shared/LoadingState.d.ts +1 -1
- package/dist/types/react/web/wallets/shared/LoadingState.d.ts.map +1 -1
- package/dist/types/react/web/wallets/shared/OTPLoginUI.d.ts +1 -1
- package/dist/types/react/web/wallets/shared/OTPLoginUI.d.ts.map +1 -1
- package/dist/types/react/web/wallets/shared/PassKeyLogin.d.ts +1 -1
- package/dist/types/react/web/wallets/shared/PassKeyLogin.d.ts.map +1 -1
- package/dist/types/react/web/wallets/shared/SocialLogin.d.ts +1 -1
- package/dist/types/react/web/wallets/shared/SocialLogin.d.ts.map +1 -1
- package/dist/types/transaction/actions/to-serializable-transaction.d.ts +2 -2
- package/dist/types/utils/abi/decodeFunctionData.d.ts +1 -1
- package/dist/types/utils/abi/decodeFunctionData.d.ts.map +1 -1
- package/dist/types/utils/abi/decodeFunctionResult.d.ts +1 -1
- package/dist/types/utils/abi/decodeFunctionResult.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/version.d.ts.map +1 -1
- package/dist/types/wallets/in-app/native/helpers/storage/local.d.ts +1 -1
- package/package.json +4 -3
- package/src/bridge/Webhook.test.ts +605 -0
- package/src/bridge/Webhook.ts +155 -0
- package/src/bridge/index.ts +4 -1
- package/src/bridge/types/Errors.ts +1 -0
- package/src/react/web/utils/errors.ts +7 -13
- package/src/version.ts +1 -1
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "thirdweb",
|
3
|
-
"version": "5.
|
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
|
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
|
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
|
+
});
|