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