diff --git a/examples/react/src/components/Homepage.tsx b/examples/react/src/components/Homepage.tsx
index c1343b43..d588e793 100644
--- a/examples/react/src/components/Homepage.tsx
+++ b/examples/react/src/components/Homepage.tsx
@@ -5,7 +5,8 @@ import {
validateEthProof,
useTheme as useKitTheme,
useWaasFeeOptions,
- useIndexerClient
+ useIndexerClient,
+ getModalPositionCss
} from '@0xsequence/kit'
import { useOpenWalletModal } from '@0xsequence/kit-wallet'
import { useCheckoutModal } from '@0xsequence/kit-checkout'
@@ -36,9 +37,12 @@ import {
Switch,
Select,
IconButton,
- CheckmarkIcon
+ CheckmarkIcon,
+ Modal,
+ TextInput
} from '@0xsequence/design-system'
import { allNetworks } from '@0xsequence/network'
+import { AnimatePresence } from 'framer-motion'
import { Footer } from './Footer'
import { messageToSign } from '../constants'
import { delay, formatAddress, getCheckoutSettings } from '../utils'
@@ -63,6 +67,12 @@ export const Homepage = () => {
const { data: walletClient } = useWalletClient()
const { switchChain } = useSwitchChain()
+ const [isCheckoutInfoModalOpen, setIsCheckoutInfoModalOpen] = React.useState(false)
+
+ const [checkoutOrderId, setCheckoutOrderId] = React.useState('')
+ const [checkoutTokenContractAddress, setCheckoutTokenContractAddress] = React.useState('')
+ const [checkoutTokenId, setCheckoutTokenId] = React.useState('')
+
const connections = useConnections()
const isWaasConnection = connections.find(c => c.connector.id.includes('waas')) !== undefined
@@ -324,7 +334,23 @@ export const Homepage = () => {
}
const onClickCheckout = () => {
- triggerCheckout(getCheckoutSettings(address))
+ setIsCheckoutInfoModalOpen(true)
+ }
+
+ const onCheckoutInfoConfirm = () => {
+ setIsCheckoutInfoModalOpen(false)
+ if (checkoutOrderId !== '' && checkoutTokenContractAddress !== '' && checkoutTokenId !== '') {
+ const checkoutSettings = getCheckoutSettings(
+ checkoutOrderId,
+ address || '',
+ checkoutTokenContractAddress,
+ checkoutTokenId,
+ 137,
+ 1,
+ true
+ )
+ triggerCheckout(checkoutSettings)
+ }
}
const SwitchThemeButton = () => {
@@ -370,11 +396,11 @@ export const Homepage = () => {
description="Connect a Sequence wallet to view, swap, send, and receive collections"
onClick={() => setOpenWalletModal(true)}
/>
- {/* */}
+ />
{
{!isMobile && }
+
+
+ {isCheckoutInfoModalOpen && (
+ setIsCheckoutInfoModalOpen(false)}
+ >
+
+
+
+ Order ID
+
+ setCheckoutOrderId(ev.target.value)}
+ placeholder="Order Id"
+ data-1p-ignore
+ />
+
+ Token Contract Address
+
+ setCheckoutTokenContractAddress(ev.target.value)}
+ placeholder="Token Contract Address"
+ data-1p-ignore
+ />
+
+ Token ID
+
+ setCheckoutTokenId(ev.target.value)}
+ placeholder="Token Id"
+ data-1p-ignore
+ />
+
+
+
+
+ )}
+
)
}
diff --git a/examples/react/src/utils/helpers.ts b/examples/react/src/utils/helpers.ts
index fda8355a..0d50adf0 100644
--- a/examples/react/src/utils/helpers.ts
+++ b/examples/react/src/utils/helpers.ts
@@ -1,3 +1,6 @@
+import { Address } from 'viem'
+import { CheckoutSettings } from '@0xsequence/kit-checkout'
+
export const truncateAtMiddle = (text: string, truncateAt: number) => {
let finalText = text
@@ -15,3 +18,36 @@ export const formatAddress = (text: string) => {
export const delay = (ms: number) => {
return new Promise(resolve => setTimeout(resolve, ms))
}
+
+export const getCheckoutSettings = (
+ blockchainNftId: string,
+ recipientAddress: string | Address,
+ tokenContractAddress: string,
+ tokenId: string,
+ chainId: number,
+ quantity: number,
+ isDev?: boolean
+) => {
+ const checkoutSettings: CheckoutSettings = {
+ sardineCheckout: {
+ chainId,
+ defaultPaymentMethodType: 'us_debit',
+ platform: 'horizon',
+ contractAddress: '0xB537a160472183f2150d42EB1c3DD6684A55f74c',
+ blockchainNftId: blockchainNftId,
+ recipientAddress: recipientAddress,
+ quantity,
+ isDev
+ },
+ orderSummaryItems: [
+ {
+ chainId,
+ contractAddress: tokenContractAddress,
+ tokenId,
+ quantityRaw: String(quantity)
+ }
+ ]
+ }
+
+ return checkoutSettings
+}
\ No newline at end of file
diff --git a/examples/react/src/utils/index.ts b/examples/react/src/utils/index.ts
index 0311a684..b2a4c751 100644
--- a/examples/react/src/utils/index.ts
+++ b/examples/react/src/utils/index.ts
@@ -1,2 +1 @@
-export * from './settings'
export * from './helpers'
diff --git a/examples/react/src/utils/settings.ts b/examples/react/src/utils/settings.ts
deleted file mode 100644
index bf7df637..00000000
--- a/examples/react/src/utils/settings.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import { CheckoutSettings } from '@0xsequence/kit-checkout'
-
-export const getCheckoutSettings = (address?: string) => {
- const checkoutSettings: CheckoutSettings = {
- cryptoCheckout: {
- chainId: 137,
- triggerTransaction: async () => {
- console.log('triggered transaction')
- },
- coinQuantity: {
- contractAddress: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174',
- amountRequiredRaw: '10000000000'
- }
- },
- orderSummaryItems: [
- {
- contractAddress: '0x631998e91476da5b870d741192fc5cbc55f5a52e',
- tokenId: '66597',
- quantityRaw: '100'
- },
- {
- contractAddress: '0x624e4fa6980afcf8ea27bfe08e2fb5979b64df1c',
- tokenId: '1741',
- quantityRaw: '100'
- }
- ]
- }
-
- return checkoutSettings
-}
diff --git a/packages/checkout/package.json b/packages/checkout/package.json
index 7c4ab085..3a02499f 100644
--- a/packages/checkout/package.json
+++ b/packages/checkout/package.json
@@ -1,6 +1,6 @@
{
"name": "@0xsequence/kit-checkout",
- "version": "2.4.0",
+ "version": "2.4.1",
"description": "Checkout UI for Sequence Kit",
"repository": "https://github.com/0xsequence/kit/tree/master/packages/checkout",
"main": "dist/0xsequence-kit-checkout.cjs.js",
diff --git a/packages/checkout/src/api/data.ts b/packages/checkout/src/api/data.ts
index 5a1091a4..2f4a35a6 100644
--- a/packages/checkout/src/api/data.ts
+++ b/packages/checkout/src/api/data.ts
@@ -1,72 +1,189 @@
import { getNetwork } from '@0xsequence/kit'
+import { SequenceAPIClient, Token, TokenPrice, GetCoinPricesReturn } from '@0xsequence/api'
+import { TokenMetadata } from '@0xsequence/metadata'
+import { ChainId, networks } from '@0xsequence/network'
+
import { getPaperNetworkName } from '../utils'
-import { SequenceAPIClient } from '@0xsequence/api'
+import { SardineCheckout } from '..'
-export interface FetchPaperSecretArgs {
- apiClient: SequenceAPIClient
- chainId: number
- email: string
- abi: string
- contractAddress: string
- recipientAddress: string
- receiptTitle: string
- collectionContractAddress?: string
- methodArguments: MethodArguments
- currency: string
- currencyAmount: string
- methodName: string
+export interface FetchSardineClientTokenReturn {
+ token: string,
+ orderId: string,
}
export interface MethodArguments {
[key: string]: any
}
-export const fetchPaperSecret = async ({
- apiClient,
- chainId,
- email,
- contractAddress,
- abi,
- receiptTitle,
- collectionContractAddress,
- methodArguments,
- currency,
- currencyAmount,
- methodName,
- recipientAddress
-}: FetchPaperSecretArgs) => {
- const network = getNetwork(chainId)
- const chainName = getPaperNetworkName(network)
+export const fetchSardineClientToken = async (order: SardineCheckout, isDev: boolean, projectAccessKey: string, tokenMetadata?: TokenMetadata): Promise => {
+ const randomNumber = Math.floor(Math.random() * 1000000)
+ const timestamp = new Date().getTime()
+ const referenceId = `sequence-kit-${randomNumber}-${timestamp}-${order.recipientAddress}-${networks[order.chainId as ChainId].name}-${order.contractAddress}-${order.contractAddress}-${order.recipientAddress}`
+
- const paramsJson = JSON.stringify({
- title: receiptTitle,
- email,
- limitPerTransaction: 1,
- quantity: 1,
- mintMethod: {
- args: methodArguments,
- payment: {
- currency,
- value: `${currencyAmount} * $QUANTITY`
- },
- name: methodName
+ // Test credentials: https://docs.sardine.ai/docs/integrate-payments/nft-checkout-testing-credentials
+ const accessKey = isDev ? '17xhjK4yjRf1fr0am8kgKfICAAAAAAAAA' : projectAccessKey
+ const url = isDev ? 'https://dev-api.sequence.app/rpc/API/GetSardineNFTCheckoutToken' : 'https://api.sequence.app/rpc/API/GetSardineNFTCheckoutToken'
+
+ const res = await fetch(url, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ 'X-Access-Key': `${accessKey || ''}`
},
- walletAddress: recipientAddress,
- ...(collectionContractAddress
- ? {
- contractArgs: {
- collectionContractAddress
- }
+ body: JSON.stringify(
+ {
+ params: {
+ referenceId,
+ expiresIn: 3600,
+ paymentMethodTypeConfig: {
+ enabled: ['us_debit', 'us_credit', 'international_debit', 'international_credit', 'ach'],
+ default: order.defaultPaymentMethodType
+ },
+ name: tokenMetadata?.name || 'Unknown',
+ imageUrl: tokenMetadata?.image || '',
+ network: networks[order.chainId as ChainId].name,
+ recipientAddress: order.recipientAddress,
+ platform: 'horizon',
+ blockchainNftId: order.blockchainNftId,
+ contractAddress: order.contractAddress,
+ executionType: 'smart_contract',
+ quantity: Number(order.quantity),
+ decimals: Number(order.decimals),
}
- : {})
+ }
+ )
})
- const { secret } = await apiClient.paperSessionSecret2({
- chainName,
- contractAddress,
- abi,
- paramsJson
+ const { resp: { orderId, token } } = await res.json()
+
+ return ({
+ token,
+ orderId,
})
+}
+
- return secret
+export const fetchSardineOrderStatus = async (orderId: string, isDev: boolean, projectAccessKey: string) => {
+ // Test credentials: https://docs.sardine.ai/docs/integrate-payments/nft-checkout-testing-credentials
+ const accessKey = isDev ? '17xhjK4yjRf1fr0am8kgKfICAAAAAAAAA' : projectAccessKey
+ const url = isDev ? 'https://dev-api.sequence.app/rpc/API/GetSardineNFTCheckoutOrderStatus' : 'https://api.sequence.app/rpc/API/GetSardineNFTCheckoutOrderStatus'
+ const response = await fetch(url, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ 'X-Access-Key': `${accessKey}`
+ },
+ body: JSON.stringify({
+ orderId,
+ })
+ })
+
+ const json = await response.json()
+ console.log('json:', json)
+ return json
+}
+
+export interface Country {
+ code: string,
}
+
+export const fetchSupportedCountryCodes = async (): Promise => {
+ // Can also be fetches from sardine api
+ const supportedCountries = [
+ 'AL',
+ 'AO',
+ 'AT',
+ 'BB',
+ 'BE',
+ 'BZ',
+ 'BJ',
+ 'BO',
+ 'BR',
+ 'BG',
+ 'KH',
+ 'KY',
+ 'CL',
+ 'CO',
+ 'KM',
+ 'CR',
+ 'HR',
+ 'CY',
+ 'CZ',
+ 'DK',
+ 'DM',
+ 'DO',
+ 'EC',
+ 'EG',
+ 'SV',
+ 'GQ',
+ 'EE',
+ 'FO',
+ 'FI',
+ 'FR',
+ 'GF',
+ 'DE',
+ 'GR',
+ 'GN',
+ 'GW',
+ 'GY',
+ 'HT',
+ 'HN',
+ 'HU',
+ 'IS',
+ 'ID',
+ 'IE',
+ 'IL',
+ 'IT',
+ 'JM',
+ 'JP',
+ 'KG',
+ 'LA',
+ 'LV',
+ 'LI',
+ 'LT',
+ 'LU',
+ 'MG',
+ 'MY',
+ 'MV',
+ 'MT',
+ 'MR',
+ 'MX',
+ 'MN',
+ 'MZ',
+ 'NL',
+ 'NO',
+ 'OM',
+ 'PA',
+ 'PY',
+ 'PE',
+ 'PH',
+ 'PL',
+ 'PT',
+ 'RO',
+ 'KN',
+ 'MF',
+ 'SA',
+ 'SC',
+ 'SG',
+ 'SK',
+ 'SI',
+ 'KR',
+ 'ES',
+ 'LK',
+ 'SE',
+ 'CH',
+ 'TZ',
+ 'TH',
+ 'TT',
+ 'TR',
+ 'AE',
+ 'GB',
+ 'UY',
+ 'UZ',
+ 'VU',
+ 'VN',
+ ]
+
+ return supportedCountries.map(countryCode => ({ code: countryCode }))
+}
\ No newline at end of file
diff --git a/packages/checkout/src/contexts/CheckoutModal.tsx b/packages/checkout/src/contexts/CheckoutModal.tsx
index 2e3cbe9f..0ed4e9e3 100644
--- a/packages/checkout/src/contexts/CheckoutModal.tsx
+++ b/packages/checkout/src/contexts/CheckoutModal.tsx
@@ -8,27 +8,28 @@ interface CoinQuantity {
}
interface OrderSummaryItem {
+ chainId: number
contractAddress: string
quantityRaw: string
tokenId: string
}
+export interface SardineCheckout {
+ defaultPaymentMethodType: 'us_debit' | 'us_credit' | 'international_debit' | 'international_credit' | 'ach'
+ chainId: number
+ platform: string
+ contractAddress: string
+ blockchainNftId: string
+ recipientAddress: string
+ quantity: number
+ decimals?: number
+ onSuccess?: (transactionHash: string, settings: SardineCheckout) => void
+ onError?: (error: Error, settings: SardineCheckout) => void
+ isDev?: boolean
+}
+
export interface CheckoutSettings {
- creditCardCheckout?: {
- chainId: number
- abi: string
- methodName: string
- contractAddress: string
- recipientAddress: string
- receiptTitle: string
- methodArguments: MethodArguments
- currency: string
- currencyAmount: string
- collectionContractAddress?: string
- email?: string
- onSuccess?: (transactionHash: string) => void
- onError?: (error: Error) => void
- }
+ sardineCheckout?: SardineCheckout,
cryptoCheckout?: {
chainId: number
triggerTransaction: () => void
diff --git a/packages/checkout/src/contexts/Navigation.tsx b/packages/checkout/src/contexts/Navigation.tsx
index 5cab25ba..6b174e61 100644
--- a/packages/checkout/src/contexts/Navigation.tsx
+++ b/packages/checkout/src/contexts/Navigation.tsx
@@ -28,7 +28,8 @@ export interface TransactionErrorNavigation {
}
export interface TransactionPendingParams {
- transactionId: string
+ orderId: string
+ authToken: string
}
export interface TransactionPendingNavigation {
diff --git a/packages/checkout/src/shared/components/KitCheckoutProvider.tsx b/packages/checkout/src/shared/components/KitCheckoutProvider.tsx
index 004baa55..3a327417 100644
--- a/packages/checkout/src/shared/components/KitCheckoutProvider.tsx
+++ b/packages/checkout/src/shared/components/KitCheckoutProvider.tsx
@@ -5,7 +5,7 @@ import { AnimatePresence } from 'framer-motion'
import { getModalPositionCss, useTheme } from '@0xsequence/kit'
-import { PaperTransactionForm, PendingTransaction, TransactionError, TransactionSuccess, CheckoutSelection } from '../../views'
+import { PendingTransaction, TransactionError, TransactionSuccess, CheckoutSelection } from '../../views'
import { History, Navigation, NavigationContextProvider, CheckoutModalContextProvider, CheckoutSettings } from '../../contexts'
import { NavigationHeader } from '../../shared/components/NavigationHeader'
@@ -21,31 +21,6 @@ export const DEFAULT_LOCATION: Navigation = {
location: 'select-method-checkout'
}
-// export const DEFAULT_LOCATION: Navigation = {
-// location: 'transaction-form',
-// }
-
-// export const DEFAULT_LOCATION: Navigation = {
-// location: 'transaction-pending',
-// params: {
-// transactionId: '48a47f94-475b-41f2-8370-7b3d279ba662'
-// }
-// }
-
-// export const DEFAULT_LOCATION: Navigation = {
-// location: 'transaction-success',
-// params: {
-// transactionHash: '0x48a47f94-475b-41f2-8370-7b3d279ba662'
-// }
-// }
-
-// export const DEFAULT_LOCATION: Navigation = {
-// location: 'transaction-error',
-// params: {
-// error: new Error('an error occurred'),
-// }
-// }
-
export const KitCheckoutProvider = (props: KitCheckoutProvider) => {
const queryClient = new QueryClient()
@@ -85,7 +60,7 @@ export const KitCheckoutContent = ({ children }: KitCheckoutProvider) => {
return
case 'transaction-form':
default:
- return
+ return
}
}
@@ -126,6 +101,7 @@ export const KitCheckoutContent = ({ children }: KitCheckoutProvider) => {
}
}}
scroll={false}
+ isDismissible={navigation.location !== 'transaction-pending'}
backdropColor="backgroundBackdrop"
onClose={() => setOpenCheckoutModal(false)}
>
diff --git a/packages/checkout/src/shared/components/NavigationHeader.tsx b/packages/checkout/src/shared/components/NavigationHeader.tsx
index 6b883684..b8a38289 100644
--- a/packages/checkout/src/shared/components/NavigationHeader.tsx
+++ b/packages/checkout/src/shared/components/NavigationHeader.tsx
@@ -44,7 +44,7 @@ export const NavigationHeader = ({ secondaryText, primaryText, disableBack = fal
) : (
)}
-
+
{secondaryText}
diff --git a/packages/checkout/src/shared/components/PaperTransaction.tsx b/packages/checkout/src/shared/components/PaperTransaction.tsx
deleted file mode 100644
index 5b2379e1..00000000
--- a/packages/checkout/src/shared/components/PaperTransaction.tsx
+++ /dev/null
@@ -1,190 +0,0 @@
-import React, { useState, useEffect, ChangeEvent } from 'react'
-import { Box, Button, Card, Spinner, Text, TextInput, EditIcon, CheckmarkIcon } from '@0xsequence/design-system'
-import { CheckoutWithCard } from '@paperxyz/react-client-sdk'
-import { useNavigation } from '../../hooks'
-import { fetchPaperSecret } from '../../api'
-import { CheckoutSettings } from '../../contexts/CheckoutModal'
-import { useAPIClient } from '@0xsequence/kit'
-export interface PaperTransactionProps {
- settings: CheckoutSettings
-}
-
-export const PaperTransaction = ({ settings }: PaperTransactionProps) => {
- const apiClient = useAPIClient()
- const [emailEditState, setEmailEditState] = useState(true)
- const [email, setEmail] = useState(settings.creditCardCheckout?.email || '')
- const [inputEmailAddress, setInputEmailAddress] = useState(email)
- const [paperSecret, setPaperSecret] = useState(null)
- const [paperSecretLoading, setPaperSecretLoading] = useState(false)
- const { setNavigation } = useNavigation()
-
- const onClickEditEmail = () => {
- if (emailEditState) {
- setEmail(inputEmailAddress || '')
- }
- if (!emailEditState) {
- setInputEmailAddress(email)
- }
- setEmailEditState(!emailEditState)
- }
-
- const fetchSecret = async () => {
- setPaperSecretLoading(true)
-
- try {
- if (!email) {
- throw new Error('No email address found')
- }
-
- if (!settings.creditCardCheckout) {
- throw new Error('No credit card checkout settings found')
- }
-
- const secret = await fetchPaperSecret({
- apiClient,
- email,
- ...settings.creditCardCheckout
- })
-
- setPaperSecret(secret)
- } catch (e) {
- console.error('Failed to fetch paper secret', e)
- setNavigation({
- location: 'transaction-error',
- params: {
- error: e as Error
- }
- })
- }
-
- setPaperSecretLoading(false)
- }
-
- useEffect(() => {
- const timer = setInterval(() => {
- // This is a workaround for the KYC modal not becoming clickable
- // The alternative of using the onReview callback does not work due
- // to race conditions
- const paperJsSdkModal = document.getElementById('paper-js-sdk-modal')
- if (paperJsSdkModal) {
- paperJsSdkModal.style.pointerEvents = 'visible'
- }
- }, 100)
- return () => {
- clearInterval(timer)
- }
- }, [])
-
- useEffect(() => {
- if (email !== '') {
- fetchSecret()
- }
- }, [email])
-
- const isValidEmailAddress = () => {
- const emailRegEx = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,})+$/
- const isValidEmail = emailRegEx.test(inputEmailAddress || '')
- return isValidEmail
- }
-
- const emailAddressOnChange = (ev: ChangeEvent) => {
- setInputEmailAddress(ev.target.value)
- }
-
- const onPending = (transactionId: string) => {
- setNavigation({
- location: 'transaction-pending',
- params: {
- transactionId
- }
- })
- }
-
- const onError = (error: Error) => {
- setNavigation({
- location: 'transaction-error',
- params: {
- error
- }
- })
- }
-
- const getEmailInput = () => {
- if (emailEditState) {
- return (
-
-
-
- Receipt email address
-
-
-
-
-
- )
- }
-
- return (
-
-
-
- Receipt email address
-
-
- {email}
-
-
-
-
- )
- }
-
- return (
-
- {getEmailInput()}
- {paperSecretLoading && (
-
-
-
- )}
- {paperSecret && !paperSecretLoading && (
-
- {}}
- onPaymentSuccess={result => {
- // @ts-ignore-next-line
- onPending(result.id)
- }}
- onError={error => {
- console.error('Payment error:', error)
- onError(error.error)
- }}
- options={{
- // colorBackground: '#cce3de',
- colorPrimary: '#447dd1',
- colorText: '#ffffff',
- borderRadius: 12
- }}
- />
-
- )}
-
- )
-}
diff --git a/packages/checkout/src/views/CheckoutSelection/component/OrderSummaryItem.tsx b/packages/checkout/src/views/CheckoutSelection/component/OrderSummaryItem.tsx
index d9394dea..93561578 100644
--- a/packages/checkout/src/views/CheckoutSelection/component/OrderSummaryItem.tsx
+++ b/packages/checkout/src/views/CheckoutSelection/component/OrderSummaryItem.tsx
@@ -36,7 +36,7 @@ export const OrderSummaryItem = ({ contractAddress, tokenId, quantityRaw, chainI
-
+
diff --git a/packages/checkout/src/views/CheckoutSelection/index.tsx b/packages/checkout/src/views/CheckoutSelection/index.tsx
index 627ed463..0f546488 100644
--- a/packages/checkout/src/views/CheckoutSelection/index.tsx
+++ b/packages/checkout/src/views/CheckoutSelection/index.tsx
@@ -1,13 +1,19 @@
import React from 'react'
import { ethers } from 'ethers'
-import { Box, Button, ChevronRightIcon, Divider, Text, PaymentsIcon, vars } from '@0xsequence/design-system'
-
-import { getNativeTokenInfoByChainId, useBalances, useContractInfo } from '@0xsequence/kit'
+import { Box, Button, ChevronRightIcon, Divider, HelpIcon, Text, TooltipPrimitive, Tooltip, PaymentsIcon, vars } from '@0xsequence/design-system'
+import {
+ getNativeTokenInfoByChainId,
+ useBalances,
+ useContractInfo,
+ useTokenMetadata,
+ useProjectAccessKey
+} from '@0xsequence/kit'
import { useAccount, useConfig } from 'wagmi'
import { OrderSummaryItem } from './component/OrderSummaryItem'
+import { fetchSardineClientToken, fetchSardineOrderStatus } from '../../api'
import { CoinIcon } from '../../shared/components/CoinIcon'
import { Skeleton } from '../../shared/components/Skeleton'
import { HEADER_HEIGHT } from '../../constants'
@@ -20,15 +26,16 @@ export const CheckoutSelection = () => {
const { setNavigation } = useNavigation()
const { closeCheckout, settings } = useCheckoutModal()
const { address: accountAddress } = useAccount()
+ const projectAccessKey = useProjectAccessKey()
const cryptoCheckoutSettings = settings?.cryptoCheckout
- // const creditCardCheckoutSettings = settings?.creditCardCheckout
+ const creditCardCheckoutSettings = settings?.sardineCheckout
+ const displayCreditCardCheckout = !!creditCardCheckoutSettings
const displayCryptoCheckout = !!cryptoCheckoutSettings
- // const displayCreditCardCheckout = !!creditCardCheckoutSettings
- const { data: contractInfoData, isPending: isPendingContractInfo } = useContractInfo(
+ const { data: contractInfoData, isLoading: isPendingContractInfo } = useContractInfo(
cryptoCheckoutSettings?.chainId || 1,
- cryptoCheckoutSettings?.coinQuantity?.contractAddress || ''
+ cryptoCheckoutSettings?.coinQuantity?.contractAddress || '',
)
const { data: balancesData, isPending: isPendingBalances } = useBalances({
@@ -55,12 +62,37 @@ export const CheckoutSelection = () => {
const orderSummaryItems = settings?.orderSummaryItems || []
- const chainId = settings?.cryptoCheckout?.chainId || 1
+ const chainId = settings?.cryptoCheckout?.chainId || settings?.sardineCheckout?.chainId || 1
+
+ const { data: tokensMetadata, isLoading: isTokenMetadataLoading } = useTokenMetadata(
+ chainId,
+ orderSummaryItems[0].contractAddress,
+ [orderSummaryItems[0].tokenId]
+ )
+ const tokenMetadata = tokensMetadata ? tokensMetadata[0] : undefined
+
+ const triggerSardineTransaction = async () => {
+ console.log('trigger sardine transaction')
+
+ if (settings?.sardineCheckout) {
+ const isDev = settings?.sardineCheckout?.isDev || false
+ const { token, orderId } = await fetchSardineClientToken(settings.sardineCheckout, isDev, projectAccessKey, tokenMetadata)
+
+ setNavigation({
+ location: 'transaction-pending',
+ params: { orderId, authToken: token }
+ })
+ }
+ }
const onClickPayWithCard = () => {
- setNavigation({
- location: 'transaction-form'
- })
+ if (settings?.sardineCheckout) {
+ triggerSardineTransaction()
+ } else {
+ setNavigation({
+ location: 'transaction-form'
+ })
+ }
}
const onClickPayWithCrypto = () => {
@@ -82,9 +114,24 @@ export const CheckoutSelection = () => {
>
{orderSummaryItems.length > 0 && (
<>
-
- Order summary
-
+
+
+ Order summary
+
+
+ Please note that NFTs are digital assets
and as such cannot delivered physically.
+ >
+ }
+ >
+
+
+
+
+
{orderSummaryItems.map((orderSummaryItem, index) => {
return
@@ -120,7 +167,7 @@ export const CheckoutSelection = () => {
)}
- {/* {displayCreditCardCheckout && (
+ {displayCreditCardCheckout && (
)
diff --git a/packages/checkout/src/views/index.ts b/packages/checkout/src/views/index.ts
index ba584db6..5110bd5a 100644
--- a/packages/checkout/src/views/index.ts
+++ b/packages/checkout/src/views/index.ts
@@ -1,4 +1,3 @@
-export * from './PaperTransactionForm'
export * from './PendingTransaction'
export * from './TransactionSuccess'
export * from './TransactionError'
diff --git a/packages/connectors/package.json b/packages/connectors/package.json
index c8e49a80..11820b40 100644
--- a/packages/connectors/package.json
+++ b/packages/connectors/package.json
@@ -1,6 +1,6 @@
{
"name": "@0xsequence/kit-connectors",
- "version": "2.4.0",
+ "version": "2.4.1",
"description": "Wallets for Sequence Kit",
"repository": "https://github.com/0xsequence/kit/tree/master/packages/connectors",
"main": "dist/0xsequence-kit-connectors.cjs.js",
diff --git a/packages/kit/package.json b/packages/kit/package.json
index 0a4c044f..5bb8c788 100644
--- a/packages/kit/package.json
+++ b/packages/kit/package.json
@@ -1,6 +1,6 @@
{
"name": "@0xsequence/kit",
- "version": "2.4.0",
+ "version": "2.4.1",
"description": "Core package for Sequence Kit",
"keywords": [
"sequence",
diff --git a/packages/wallet/package.json b/packages/wallet/package.json
index f7e3054b..dd008f9c 100644
--- a/packages/wallet/package.json
+++ b/packages/wallet/package.json
@@ -1,6 +1,6 @@
{
"name": "@0xsequence/kit-wallet",
- "version": "2.4.0",
+ "version": "2.4.1",
"description": "Wallet UI for Sequence Kit",
"repository": "https://github.com/0xsequence/kit/tree/master/packages/wallet",
"main": "dist/0xsequence-kit-wallet.cjs.js",