@0xsequence/marketplace-sdk 0.4.8 → 0.5.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/{chunk-2OJB35FS.js → chunk-5NORRVPM.js} +5 -5
- package/dist/{chunk-2OJB35FS.js.map → chunk-5NORRVPM.js.map} +1 -1
- package/dist/{chunk-ATDCYXXV.js → chunk-6YHHCGGY.js} +2 -2
- package/dist/{chunk-WRMJ5FZM.js → chunk-HV2X2VZN.js} +874 -194
- package/dist/chunk-HV2X2VZN.js.map +1 -0
- package/dist/{chunk-AQT3BQ67.js → chunk-J2XJZ6SJ.js} +12 -5
- package/dist/chunk-J2XJZ6SJ.js.map +1 -0
- package/dist/{chunk-JEOUQFT3.js → chunk-LJAB3S6U.js} +4 -3
- package/dist/chunk-LJAB3S6U.js.map +1 -0
- package/dist/{chunk-7WCZP6FN.js → chunk-OUVFTA63.js} +649 -386
- package/dist/chunk-OUVFTA63.js.map +1 -0
- package/dist/{chunk-XXML5K3X.js → chunk-QTJF5GDQ.js} +2 -2
- package/dist/{chunk-LF44FCG5.js → chunk-TQWM4ER6.js} +2 -2
- package/dist/{chunk-LF44FCG5.js.map → chunk-TQWM4ER6.js.map} +1 -1
- package/dist/{chunk-6R4G7J6Q.js → chunk-WSCUPAGR.js} +33 -5
- package/dist/chunk-WSCUPAGR.js.map +1 -0
- package/dist/{create-config-D5WqfUft.d.ts → create-config-BXvwUh55.d.ts} +2 -2
- package/dist/index.css +31 -17
- package/dist/index.d.ts +3 -3
- package/dist/index.js +1 -1
- package/dist/{marketplace-config-C_fDWzz0.d.ts → marketplace-config-znEu4L0K.d.ts} +1 -1
- package/dist/{marketplace.gen-B8S8fflj.d.ts → marketplace.gen-CCJ-URn2.d.ts} +16 -4
- package/dist/react/_internal/api/index.d.ts +3 -2
- package/dist/react/_internal/api/index.js +3 -1
- package/dist/react/_internal/index.d.ts +5 -5
- package/dist/react/_internal/index.js +3 -1
- package/dist/react/_internal/wagmi/index.d.ts +3 -3
- package/dist/react/hooks/index.d.ts +249 -74
- package/dist/react/hooks/index.js +18 -5
- package/dist/react/index.css +37 -17
- package/dist/react/index.css.map +1 -1
- package/dist/react/index.d.ts +6 -6
- package/dist/react/index.js +22 -9
- package/dist/react/ssr/index.js +4 -0
- package/dist/react/ssr/index.js.map +1 -1
- package/dist/react/ui/components/collectible-card/index.css +37 -17
- package/dist/react/ui/components/collectible-card/index.css.map +1 -1
- package/dist/react/ui/components/collectible-card/index.d.ts +27 -4
- package/dist/react/ui/components/collectible-card/index.js +8 -9
- package/dist/react/ui/icons/index.js +3 -3
- package/dist/react/ui/index.css +37 -17
- package/dist/react/ui/index.css.map +1 -1
- package/dist/react/ui/index.d.ts +3 -3
- package/dist/react/ui/index.js +8 -9
- package/dist/react/ui/modals/_internal/components/actionModal/index.d.ts +3 -3
- package/dist/react/ui/modals/_internal/components/actionModal/index.js +5 -5
- package/dist/{sdk-config-BXVH8PS2.d.ts → sdk-config-B32_2bG3.d.ts} +29 -7
- package/dist/{services-CdXAIjt1.d.ts → services-BRBVE0mm.d.ts} +1 -1
- package/dist/styles/index.css +31 -17
- package/dist/styles/index.css.map +1 -1
- package/dist/styles/index.d.ts +2 -2
- package/dist/styles/index.js +2 -2
- package/dist/types/index.d.ts +3 -3
- package/dist/types/index.js +1 -1
- package/dist/{types-eX4P9xju.d.ts → types-Yto6KrTN.d.ts} +2 -2
- package/dist/utils/index.d.ts +3 -3
- package/dist/utils/index.js +1 -1
- package/package.json +16 -16
- package/src/react/_internal/api/__mocks__/marketplace.msw.ts +4 -0
- package/src/react/_internal/api/marketplace.gen.ts +45 -7
- package/src/react/_internal/api/query-keys.ts +4 -0
- package/src/react/_internal/wallet/useWallet.ts +30 -46
- package/src/react/_internal/wallet/wallet.ts +52 -6
- package/src/react/hooks/index.ts +4 -0
- package/src/react/hooks/options/__mocks__/marketplaceConfig.msw.ts +10 -1
- package/src/react/hooks/useAutoSelectFeeOption.tsx +104 -0
- package/src/react/hooks/useCancelOrder.tsx +57 -1
- package/src/react/hooks/useCollectionBalanceDetails.tsx +87 -0
- package/src/react/hooks/useCollectionDetails.tsx +35 -0
- package/src/react/hooks/useCollectionDetailsPolling.tsx +60 -0
- package/src/react/ui/components/_internals/action-button/ActionButton.tsx +36 -118
- package/src/react/ui/components/_internals/action-button/components/ActionButtonBody.tsx +52 -0
- package/src/react/ui/components/_internals/action-button/components/NonOwnerActions.tsx +72 -0
- package/src/react/ui/components/_internals/action-button/components/OwnerActions.tsx +81 -0
- package/src/react/ui/components/_internals/action-button/hooks/useActionButtonLogic.ts +93 -0
- package/src/react/ui/components/_internals/action-button/store.ts +47 -0
- package/src/react/ui/components/_internals/action-button/styles.css.ts +8 -0
- package/src/react/ui/components/collectible-card/CollectibleCard.tsx +35 -18
- package/src/react/ui/components/collectible-card/Footer.tsx +5 -8
- package/src/react/ui/components/collectible-card/styles.css.ts +44 -31
- package/src/react/ui/icons/CartIcon.tsx +46 -0
- package/src/react/ui/modals/BuyModal/Modal.tsx +0 -2
- package/src/react/ui/modals/BuyModal/__tests__/Modal.test.tsx +253 -0
- package/src/react/ui/modals/BuyModal/__tests__/store.test.ts +100 -0
- package/src/react/ui/modals/BuyModal/hooks/__tests__/useBuyCollectable.test.tsx +402 -0
- package/src/react/ui/modals/BuyModal/hooks/__tests__/useCheckoutOptions.test.tsx +267 -0
- package/src/react/ui/modals/BuyModal/hooks/__tests__/useFees.test.tsx +166 -0
- package/src/react/ui/modals/BuyModal/hooks/__tests__/useLoadData.test.tsx +209 -0
- package/src/react/ui/modals/BuyModal/hooks/useBuyCollectable.ts +7 -4
- package/src/react/ui/modals/BuyModal/hooks/useCheckoutOptions.ts +19 -17
- package/src/react/ui/modals/BuyModal/hooks/useLoadData.ts +9 -7
- package/src/react/ui/modals/BuyModal/modals/Modal1155.tsx +36 -18
- package/src/react/ui/modals/BuyModal/modals/__tests__/CheckoutModal.test.tsx +162 -0
- package/src/react/ui/modals/BuyModal/modals/__tests__/Modal1155.test.tsx +243 -0
- package/src/react/ui/modals/BuyModal/store.ts +11 -10
- package/src/react/ui/modals/CreateListingModal/Modal.tsx +26 -3
- package/src/react/ui/modals/CreateListingModal/__tests__/Modal.test.tsx +141 -29
- package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/useHandleTransfer.tsx +5 -1
- package/src/react/ui/modals/_internal/components/actionModal/ActionModal.tsx +20 -11
- package/src/react/ui/modals/_internal/components/currencyOptionsSelect/__tests__/index.test.tsx +13 -58
- package/src/react/ui/modals/_internal/components/priceInput/__tests__/index.test.tsx +2 -0
- package/src/react/ui/modals/_internal/components/transactionStatusModal/__tests__/TransactionStatusModal.test.tsx +18 -19
- package/src/react/ui/modals/_internal/components/transactionStatusModal/__tests__/utils.test.ts +2 -0
- package/src/react/ui/modals/_internal/components/transactionStatusModal/hooks/useTransactionStatus.ts +62 -0
- package/src/react/ui/modals/_internal/components/transactionStatusModal/index.tsx +53 -100
- package/src/react/ui/modals/_internal/components/transactionStatusModal/store.ts +2 -10
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/chunk-6R4G7J6Q.js.map +0 -1
- package/dist/chunk-7WCZP6FN.js.map +0 -1
- package/dist/chunk-AQT3BQ67.js.map +0 -1
- package/dist/chunk-FWN2MCLI.js +0 -425
- package/dist/chunk-FWN2MCLI.js.map +0 -1
- package/dist/chunk-JEOUQFT3.js.map +0 -1
- package/dist/chunk-WRMJ5FZM.js.map +0 -1
- /package/dist/{chunk-ATDCYXXV.js.map → chunk-6YHHCGGY.js.map} +0 -0
- /package/dist/{chunk-XXML5K3X.js.map → chunk-QTJF5GDQ.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/react/ui/modals/_internal/components/actionModal/ActionModal.tsx","../src/react/ui/modals/_internal/components/waasFeeOptionsBox/index.tsx","../src/react/hooks/useCurrencyBalance.tsx","../src/react/ui/modals/_internal/components/waasFeeOptionsSelect/WaasFeeOptionsSelect.tsx","../src/react/ui/components/_internals/custom-select/CustomSelect.tsx","../src/react/ui/components/_internals/custom-select/styles.css.ts","../src/react/ui/modals/_internal/components/waasFeeOptionsBox/store.ts","../src/react/ui/modals/_internal/components/waasFeeOptionsBox/styles.css.ts","../src/react/ui/modals/_internal/components/actionModal/store.ts"],"sourcesContent":["'use client';\n\nimport type React from 'react';\nimport { useState, type ComponentProps } from 'react';\n\nimport {\n\tBox,\n\tButton,\n\tCloseIcon,\n\tIconButton,\n\tSpinner,\n\tText,\n} from '@0xsequence/design-system';\nimport { observer } from '@legendapp/state/react';\nimport { Close, Content, Overlay, Portal, Root } from '@radix-ui/react-dialog';\nimport { getProviderEl } from '../../../../../_internal';\nimport {\n\tcloseButton,\n\tcta as ctaStyle,\n\tdialogContent,\n\tdialogOverlay,\n} from './styles.css';\nimport WaasFeeOptionsBox from '../waasFeeOptionsBox';\nimport { useSwitchChainModal } from '../switchChainModal';\nimport { useWallet } from '../../../../../_internal/wallet/useWallet';\n\nexport interface ActionModalProps {\n\tisOpen: boolean;\n\tonClose: () => void;\n\ttitle: string;\n\tchildren: React.ReactNode;\n\tctas: {\n\t\tlabel: string;\n\t\tonClick: (() => Promise<void>) | (() => void);\n\t\tpending?: boolean;\n\t\tdisabled?: boolean;\n\t\thidden?: boolean;\n\t\tvariant?: ComponentProps<typeof Button>['variant'];\n\t\ttestid?: string;\n\t}[];\n\tchainId: number;\n}\n\nexport const ActionModal = observer(\n\t({ isOpen, onClose, title, children, ctas, chainId }: ActionModalProps) => {\n\t\tconst [isSelectingFees, setIsSelectingFees] = useState(false);\n\t\tconst { show: showSwitchChainModal } = useSwitchChainModal();\n\t\tconst { wallet } = useWallet();\n\n\t\tconst checkChain = async ({ onSuccess }: { onSuccess: () => void }) => {\n\t\t\tconst walletChainId = await wallet?.getChainId();\n\t\t\tconst chainMismatch = walletChainId !== Number(chainId);\n\t\t\tif (chainMismatch) {\n\t\t\t\tshowSwitchChainModal({\n\t\t\t\t\tchainIdToSwitchTo: Number(chainId),\n\t\t\t\t\tonSuccess,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tonSuccess();\n\t\t\t}\n\t\t};\n\n\t\tif (wallet?.isWaaS) {\n\t\t\twallet.switchChain(Number(chainId));\n\t\t}\n\n\t\treturn (\n\t\t\t<Root open={isOpen && !!chainId}>\n\t\t\t\t<Portal container={getProviderEl()}>\n\t\t\t\t\t<Overlay className={dialogOverlay} />\n\t\t\t\t\t<Content className={dialogContent.narrow}>\n\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\tdisplay=\"flex\"\n\t\t\t\t\t\t\tflexGrow={'1'}\n\t\t\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\t\t\tflexDirection=\"column\"\n\t\t\t\t\t\t\tgap=\"4\"\n\t\t\t\t\t\t\tposition={'relative'}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\tfontSize=\"medium\"\n\t\t\t\t\t\t\t\tfontWeight=\"bold\"\n\t\t\t\t\t\t\t\ttextAlign=\"center\"\n\t\t\t\t\t\t\t\twidth=\"full\"\n\t\t\t\t\t\t\t\tcolor=\"text100\"\n\t\t\t\t\t\t\t\tfontFamily=\"body\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t</Text>\n\n\t\t\t\t\t\t\t{children}\n\n\t\t\t\t\t\t\t<Box width=\"full\" display=\"flex\" flexDirection=\"column\" gap=\"2\">\n\t\t\t\t\t\t\t\t{ctas.map(\n\t\t\t\t\t\t\t\t\t(cta) =>\n\t\t\t\t\t\t\t\t\t\t!cta.hidden && (\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\tkey={cta.label}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={ctaStyle}\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={async () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tawait checkChain({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonSuccess: () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcta.onClick();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\tvariant={cta.variant || 'primary'}\n\t\t\t\t\t\t\t\t\t\t\t\tpending={cta.pending}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={cta.disabled || isSelectingFees}\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\t\t\t\t\t\t\twidth=\"full\"\n\t\t\t\t\t\t\t\t\t\t\t\tdata-testid={cta.testid}\n\t\t\t\t\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay=\"flex\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgap=\"2\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent=\"center\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{cta.pending && <Spinner size=\"sm\" />}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{cta.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t</Box>\n\n\t\t\t\t\t\t<WaasFeeOptionsBox\n\t\t\t\t\t\t\tchainId={chainId}\n\t\t\t\t\t\t\tonFeeOptionsLoaded={() => setIsSelectingFees(true)}\n\t\t\t\t\t\t\tonFeeOptionConfirmed={() => setIsSelectingFees(false)}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<Close className={closeButton} asChild onClick={onClose}>\n\t\t\t\t\t\t\t<IconButton size=\"xs\" aria-label=\"Close modal\" icon={CloseIcon} />\n\t\t\t\t\t\t</Close>\n\t\t\t\t\t</Content>\n\t\t\t\t</Portal>\n\t\t\t</Root>\n\t\t);\n\t},\n);\n","import {\n\tBox,\n\tButton,\n\tSkeleton,\n\tText,\n\tWarningIcon,\n} from '@0xsequence/design-system';\nimport { useWaasFeeOptions } from '@0xsequence/kit';\nimport { observer } from '@legendapp/state/react';\nimport { useEffect } from 'react';\nimport { type Hex, zeroAddress } from 'viem';\nimport { useAccount } from 'wagmi';\nimport { useCurrencyBalance } from '../../../../../hooks/useCurrencyBalance';\nimport WaasFeeOptionsSelect, {\n\ttype FeeOption,\n} from '../waasFeeOptionsSelect/WaasFeeOptionsSelect';\nimport { waasFeeOptionsModal$ } from './store';\nimport { feeOptionsWrapper } from './styles.css';\n\ntype WaasFeeOptionsBoxProps = {\n\tonFeeOptionsLoaded: () => void;\n\tonFeeOptionConfirmed: () => void;\n\tchainId: number;\n};\n\nconst WaasFeeOptionsBox = observer(\n\t({\n\t\tonFeeOptionsLoaded,\n\t\tonFeeOptionConfirmed,\n\t\tchainId,\n\t}: WaasFeeOptionsBoxProps) => {\n\t\tconst { address: userAddress } = useAccount();\n\t\tconst selectedFeeOption$ = waasFeeOptionsModal$.selectedFeeOption;\n\t\tconst [pendingFeeOptionConfirmation, confirmPendingFeeOption] =\n\t\t\tuseWaasFeeOptions();\n\t\tconst { data: currencyBalance, isLoading: currencyBalanceLoading } =\n\t\t\tuseCurrencyBalance({\n\t\t\t\tchainId,\n\t\t\t\tcurrencyAddress: (selectedFeeOption$.token.contractAddress.get() ||\n\t\t\t\t\tzeroAddress) as Hex,\n\t\t\t\tuserAddress: userAddress as Hex,\n\t\t\t});\n\n\t\t// biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n\t\tuseEffect(() => {\n\t\t\tif (pendingFeeOptionConfirmation) {\n\t\t\t\tonFeeOptionsLoaded();\n\t\t\t}\n\t\t}, [pendingFeeOptionConfirmation]);\n\n\t\tconst selectedFeeOption = selectedFeeOption$.get();\n\t\tconst insufficientBalance = (() => {\n\t\t\tif (!selectedFeeOption?.value || !selectedFeeOption.token.decimals) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (!currencyBalance?.value && currencyBalance?.value !== 0n) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst feeValue = BigInt(selectedFeeOption.value);\n\t\t\t\treturn currencyBalance.value === 0n || currencyBalance.value < feeValue;\n\t\t\t} catch {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t})();\n\n\t\tconst handleConfirmFeeOption = () => {\n\t\t\tif (!selectedFeeOption?.token || !pendingFeeOptionConfirmation?.id)\n\t\t\t\treturn;\n\n\t\t\tconfirmPendingFeeOption(\n\t\t\t\tpendingFeeOptionConfirmation?.id,\n\t\t\t\tselectedFeeOption.token.contractAddress || zeroAddress,\n\t\t\t);\n\n\t\t\tonFeeOptionConfirmed();\n\t\t};\n\n\t\tif (!pendingFeeOptionConfirmation) return null;\n\n\t\treturn (\n\t\t\t<Box className={feeOptionsWrapper}>\n\t\t\t\t<Text\n\t\t\t\t\tfontSize=\"medium\"\n\t\t\t\t\tfontFamily=\"body\"\n\t\t\t\t\tfontWeight=\"bold\"\n\t\t\t\t\tmarginBottom=\"2\"\n\t\t\t\t>\n\t\t\t\t\tSelect a fee option\n\t\t\t\t</Text>\n\n\t\t\t\t<WaasFeeOptionsSelect\n\t\t\t\t\toptions={(pendingFeeOptionConfirmation?.options as FeeOption[]) || []}\n\t\t\t\t\tselectedFeeOption$={selectedFeeOption$}\n\t\t\t\t/>\n\n\t\t\t\t<Box\n\t\t\t\t\tdisplay=\"flex\"\n\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\tjustifyContent=\"space-between\"\n\t\t\t\t\twidth=\"full\"\n\t\t\t\t>\n\t\t\t\t\t{currencyBalanceLoading ? (\n\t\t\t\t\t\t<Skeleton style={{ height: 15 }} borderRadius=\"md\" width=\"1/3\" />\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Box display=\"flex\" alignItems=\"center\" gap=\"2\">\n\t\t\t\t\t\t\t{insufficientBalance && (\n\t\t\t\t\t\t\t\t<WarningIcon color=\"negative\" size=\"xs\" />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\tfontSize=\"small\"\n\t\t\t\t\t\t\t\tfontWeight=\"semibold\"\n\t\t\t\t\t\t\t\tfontFamily=\"body\"\n\t\t\t\t\t\t\t\tcolor={insufficientBalance ? 'negative' : 'text100'}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tYou have {currencyBalance?.formatted || '0'}{' '}\n\t\t\t\t\t\t\t\t{selectedFeeOption?.token.symbol}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<Button\n\t\t\t\t\t\tdisabled={\n\t\t\t\t\t\t\t!selectedFeeOption?.token ||\n\t\t\t\t\t\t\tinsufficientBalance ||\n\t\t\t\t\t\t\tcurrencyBalanceLoading\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpending={currencyBalanceLoading}\n\t\t\t\t\t\tonClick={handleConfirmFeeOption}\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t<Box display=\"flex\" alignItems=\"center\" gap=\"2\">\n\t\t\t\t\t\t\t\tConfirm\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvariant={insufficientBalance ? 'danger' : 'primary'}\n\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t/>\n\t\t\t\t</Box>\n\t\t\t</Box>\n\t\t);\n\t},\n);\n\nexport default WaasFeeOptionsBox;\n","import { skipToken, useQuery } from '@tanstack/react-query';\nimport { type Address, erc20Abi, formatUnits, zeroAddress } from 'viem';\nimport { getPublicRpcClient } from '../../utils';\n\nexport function useCurrencyBalance({\n\tcurrencyAddress,\n\tchainId,\n\tuserAddress,\n}: {\n\tcurrencyAddress: Address | undefined;\n\tchainId: number | undefined;\n\tuserAddress: Address | undefined;\n}) {\n\treturn useQuery({\n\t\tqueryKey: ['balance', currencyAddress, chainId, userAddress],\n\t\tqueryFn:\n\t\t\t!!userAddress && !!chainId && !!currencyAddress\n\t\t\t\t? async () => {\n\t\t\t\t\t\tif (!userAddress) return null;\n\n\t\t\t\t\t\tconst publicClient = getPublicRpcClient(chainId);\n\n\t\t\t\t\t\tif (currencyAddress === zeroAddress) {\n\t\t\t\t\t\t\tconst balance = await publicClient.getBalance({\n\t\t\t\t\t\t\t\taddress: userAddress,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tvalue: balance,\n\t\t\t\t\t\t\t\tformatted: formatUnits(balance, 18),\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst [balance, decimals] = await Promise.all([\n\t\t\t\t\t\t\tpublicClient.readContract({\n\t\t\t\t\t\t\t\taddress: currencyAddress,\n\t\t\t\t\t\t\t\tabi: erc20Abi,\n\t\t\t\t\t\t\t\tfunctionName: 'balanceOf',\n\t\t\t\t\t\t\t\targs: [userAddress],\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tpublicClient.readContract({\n\t\t\t\t\t\t\t\taddress: currencyAddress,\n\t\t\t\t\t\t\t\tabi: erc20Abi,\n\t\t\t\t\t\t\t\tfunctionName: 'decimals',\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t]);\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tvalue: balance,\n\t\t\t\t\t\t\tformatted: formatUnits(balance, decimals),\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t: skipToken,\n\t});\n}\n","import { Box, Image, Text } from '@0xsequence/design-system';\nimport type { Observable } from '@legendapp/state';\nimport { observer } from '@legendapp/state/react';\nimport { useEffect } from 'react';\nimport { formatUnits } from 'viem';\nimport {\n\tCustomSelect,\n\ttype SelectItem,\n} from '../../../../components/_internals/custom-select/CustomSelect';\n\nexport type FeeOption = {\n\tgasLimit: number;\n\tto: string;\n\ttoken: {\n\t\tchainId: number;\n\t\tcontractAddress: string | null;\n\t\tdecimals: number;\n\t\tlogoURL: string;\n\t\tname: string;\n\t\tsymbol: string;\n\t\ttokenID: string | null;\n\t\ttype: string;\n\t};\n\tvalue: string;\n};\n\nconst WaasFeeOptionsSelect = observer(\n\t({\n\t\toptions,\n\t\tselectedFeeOption$,\n\t}: {\n\t\toptions: FeeOption[];\n\t\tselectedFeeOption$: Observable<FeeOption | undefined>;\n\t}) => {\n\t\tconst feeOptions = options\n\t\t\t.filter((option) => option.token.contractAddress !== null)\n\t\t\t.map((option) => {\n\t\t\t\tconst value = option.token.contractAddress ?? '';\n\t\t\t\treturn FeeOptionSelectItem({ value, option });\n\t\t\t});\n\n\t\t// biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n\t\tuseEffect(() => {\n\t\t\tif (options.length > 0 && !selectedFeeOption$.get())\n\t\t\t\tselectedFeeOption$.set(options[0]);\n\t\t}, [options]);\n\n\t\tif (options.length === 0 || !selectedFeeOption$.get()?.token) return null;\n\n\t\treturn (\n\t\t\t<CustomSelect\n\t\t\t\titems={feeOptions}\n\t\t\t\tonValueChange={(value) => {\n\t\t\t\t\tconst selectedOption = options.find(\n\t\t\t\t\t\t(option) => option.token.contractAddress === value,\n\t\t\t\t\t);\n\n\t\t\t\t\tselectedFeeOption$.set(selectedOption);\n\t\t\t\t}}\n\t\t\t\tdefaultValue={\n\t\t\t\t\tselectedFeeOption$.get()?.token.contractAddress\n\t\t\t\t\t\t? FeeOptionSelectItem({\n\t\t\t\t\t\t\t\tvalue: selectedFeeOption$.get()?.token.contractAddress ?? '',\n\t\t\t\t\t\t\t\toption: selectedFeeOption$.get() ?? options[0],\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t/>\n\t\t);\n\t},\n);\n\nfunction FeeOptionSelectItem({\n\tvalue,\n\toption,\n}: {\n\tvalue: string;\n\toption: FeeOption;\n}) {\n\treturn {\n\t\tvalue,\n\t\tcontent: (\n\t\t\t<Box display=\"flex\" alignItems=\"center\" gap=\"2\">\n\t\t\t\t<Image\n\t\t\t\t\tsrc={option.token.logoURL}\n\t\t\t\t\talt={option.token.symbol}\n\t\t\t\t\twidth=\"3\"\n\t\t\t\t\theight=\"3\"\n\t\t\t\t/>\n\n\t\t\t\t<Box display=\"flex\" gap=\"1\">\n\t\t\t\t\t<Text color=\"text100\" fontSize=\"small\" fontFamily=\"body\">\n\t\t\t\t\t\tFee\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tcolor=\"text50\"\n\t\t\t\t\t\tfontSize=\"small\"\n\t\t\t\t\t\tfontFamily=\"body\"\n\t\t\t\t\t\tfontWeight=\"semibold\"\n\t\t\t\t\t>\n\t\t\t\t\t\t(in {option.token.symbol})\n\t\t\t\t\t</Text>\n\n\t\t\t\t\t<Text color=\"text100\" fontSize=\"small\" fontFamily=\"body\">\n\t\t\t\t\t\t:\n\t\t\t\t\t</Text>\n\t\t\t\t</Box>\n\n\t\t\t\t<Text fontSize=\"small\" fontFamily=\"body\">\n\t\t\t\t\t{formatUnits(BigInt(option.value), option.token.decimals || 0)}\n\t\t\t\t</Text>\n\t\t\t</Box>\n\t\t),\n\t} as SelectItem;\n}\n\nexport default WaasFeeOptionsSelect;\n","import { CheckmarkIcon, ChevronDownIcon } from '@0xsequence/design-system';\nimport * as Select from '@radix-ui/react-select';\nimport React, { type ReactNode } from 'react';\nimport { content, item, itemIndicator, trigger } from './styles.css';\n\nexport interface SelectItem {\n\tvalue: string;\n\tcontent: ReactNode;\n\tdisabled?: boolean;\n}\n\ninterface CustomSelectProps {\n\titems: SelectItem[];\n\tonValueChange?: (value: string) => void;\n\tdefaultValue?: SelectItem;\n}\n\nconst CustomSelectItem = React.forwardRef<\n\tHTMLDivElement,\n\tSelect.SelectItemProps & { children: ReactNode }\n>(({ children, ...props }, forwardedRef) => {\n\treturn (\n\t\t<Select.Item className={item} {...props} ref={forwardedRef}>\n\t\t\t<Select.ItemText>{children}</Select.ItemText>\n\t\t\t<Select.ItemIndicator className={itemIndicator}>\n\t\t\t\t<CheckmarkIcon size=\"xs\" />\n\t\t\t</Select.ItemIndicator>\n\t\t</Select.Item>\n\t);\n});\n\nexport const CustomSelect: React.FC<CustomSelectProps> = ({\n\titems,\n\tonValueChange,\n\tdefaultValue,\n}) => {\n\treturn (\n\t\t<Select.Root\n\t\t\tonValueChange={onValueChange}\n\t\t\tdefaultValue={defaultValue?.value}\n\t\t>\n\t\t\t<Select.Trigger className={trigger}>\n\t\t\t\t<Select.Value />\n\t\t\t\t<Select.Icon>\n\t\t\t\t\t<ChevronDownIcon size=\"xs\" />\n\t\t\t\t</Select.Icon>\n\t\t\t</Select.Trigger>\n\n\t\t\t<Select.Portal>\n\t\t\t\t<Select.Content className={content}>\n\t\t\t\t\t<Select.Viewport>\n\t\t\t\t\t\t{items.map((item) => (\n\t\t\t\t\t\t\t<CustomSelectItem\n\t\t\t\t\t\t\t\tkey={item.value}\n\t\t\t\t\t\t\t\tvalue={item.value}\n\t\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{item.content}\n\t\t\t\t\t\t\t</CustomSelectItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</Select.Viewport>\n\t\t\t\t</Select.Content>\n\t\t\t</Select.Portal>\n\t\t</Select.Root>\n\t);\n};\n","import 'src/react/ui/components/_internals/custom-select/styles.css.ts.vanilla.css?source=LnN0eWxlc19pdGVtX18xZGR0dWprMjpob3ZlciB7CiAgYmFja2dyb3VuZDogdmFyKC0tc2VxLWNvbG9ycy1iYWNrZ3JvdW5kLW11dGVkKTsKfQ==';\nexport var content = 'fyvr11eg fyvr11es fyvr11f4 fyvr11fg fyvr11hc fyvr11i0 fyvr11g0 fyvr11go fyvr11q0 fyvr11qg fyvr12g3 fyvr12ar fyvr1203 fyvr125f fyvr12hr fyvr12cf fyvr121r fyvr1273 fyvr11vx fyvr11r0 fyvr11rt';\nexport var item = 'styles_item__1ddtujk2 fyvr11h0 fyvr11ho fyvr11fo fyvr11gc fyvr1v4 fyvr1x8 fyvr1zs fyvr111g fyvr11ik fyvr12k9 fyvr11l8 fyvr11ow fyvr14g fyvr11m4 fyvr11rc fyvr12nf';\nexport var itemIndicator = 'fyvr11lw fyvr1qk fyvr11lk fyvr11ow fyvr11no';\nexport var trigger = 'fyvr11hk fyvr11i8 fyvr11g8 fyvr11gw fyvr1zg fyvr111k fyvr11lk fyvr11ow fyvr11no fyvr11ik fyvr14g fyvr11cg fyvr11ur fyvr12k9 fyvr12nf fyvr12i9 fyvr11a4';","import { observable } from '@legendapp/state';\nimport type { FeeOption } from '../waasFeeOptionsSelect/WaasFeeOptionsSelect';\n\ntype WaasFeeOptionsModalState = {\n\tselectedFeeOption: FeeOption | undefined;\n};\n\nconst initialState = {\n\tselectedFeeOption: undefined,\n} as WaasFeeOptionsModalState;\n\nexport const waasFeeOptionsModal$ = observable(initialState);\n","import 'src/react/ui/modals/_internal/components/waasFeeOptionsBox/styles.css.ts.vanilla.css?source=LnN0eWxlc19mZWVPcHRpb25zV3JhcHBlcl9fMTI0aWswdzAgewogIGJvdHRvbTogLTE0MHB4Owp9Ci5zdHlsZXNfZGlhbG9nQ29udGVudF9fMTI0aWswdzIgewogIHRvcDogNTAlOwogIGxlZnQ6IDUwJTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICBwYWRkaW5nOiAyNHB4Owp9Ci5zdHlsZXNfY3RhX18xMjRpazB3MyB7CiAgYm9yZGVyLXJhZGl1czogMTJweCAhaW1wb3J0YW50Owp9Ci5zdHlsZXNfY3RhX18xMjRpazB3MyA+IGRpdiB7CiAganVzdGlmeS1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDsKfQ==';\nexport var cta = 'styles_cta__124ik0w3';\nexport var dialogContent = 'styles_dialogContent__124ik0w2 fyvr11hg fyvr11i4 fyvr11g4 fyvr11gs fyvr11l8 fyvr11ul fyvr11m0 fyvr11rv';\nexport var dialogOverlay = 'fyvr1m0 fyvr1o8 fyvr1qg fyvr1so fyvr11vl fyvr11m0 fyvr11rv';\nexport var feeOptionsWrapper = 'styles_feeOptionsWrapper__124ik0w0 fyvr11hg fyvr11i4 fyvr11g4 fyvr11gs fyvr1vc fyvr1xg fyvr1zk fyvr111o fyvr11lw fyvr11w9 fyvr11r0 fyvr12g fyvr1qg fyvr11l8 fyvr11mc fyvr11cg';","import { type Observable, observable } from '@legendapp/state';\nimport type { ChainId } from '../../../../../_internal';\nimport type { Address } from 'viem';\n\nexport interface ActionModalState {\n\tisOpen: boolean;\n\tchainId: ChainId | null;\n\tcollectionAddress: Address | null;\n}\n\nexport function createActionModalStore() {\n\treturn observable<ActionModalState>({\n\t\tisOpen: false,\n\t\tchainId: null,\n\t\tcollectionAddress: null,\n\t});\n}\n\nexport function openModal(store: Observable<ActionModalState>) {\n\tstore.isOpen.set(true);\n}\n\nexport function closeModal(store: Observable<ActionModalState>) {\n\tstore.isOpen.set(false);\n}\n"],"mappings":"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","names":["Box","Button","Text","observer","Content","Portal","Root","Box","Text","observer","useEffect","zeroAddress","balance","formatUnits","item","jsx","jsxs","formatUnits","jsx","jsxs","observer","zeroAddress","useEffect","Box","Text","jsx","jsxs","observer","Root","Portal","Content","Box","Text","cta","Button","observable"]}
|
package/dist/chunk-FWN2MCLI.js
DELETED
|
@@ -1,425 +0,0 @@
|
|
|
1
|
-
"use client"
|
|
2
|
-
import {
|
|
3
|
-
InfoIcon_default
|
|
4
|
-
} from "./chunk-XXML5K3X.js";
|
|
5
|
-
import {
|
|
6
|
-
SEQUENCE_MARKET_V1_ADDRESS,
|
|
7
|
-
SEQUENCE_MARKET_V2_ADDRESS
|
|
8
|
-
} from "./chunk-Y75XGZOB.js";
|
|
9
|
-
import {
|
|
10
|
-
alertMessageBox,
|
|
11
|
-
alertMessageBoxVariants,
|
|
12
|
-
closeButton,
|
|
13
|
-
dialogOverlay,
|
|
14
|
-
switchChainCta,
|
|
15
|
-
switchChainModalContent
|
|
16
|
-
} from "./chunk-FI723DGL.js";
|
|
17
|
-
import {
|
|
18
|
-
getPresentableChainName,
|
|
19
|
-
getPublicRpcClient
|
|
20
|
-
} from "./chunk-XP3WY5AX.js";
|
|
21
|
-
import {
|
|
22
|
-
ERC1155_ABI
|
|
23
|
-
} from "./chunk-WFE6OCYF.js";
|
|
24
|
-
import {
|
|
25
|
-
getProviderEl
|
|
26
|
-
} from "./chunk-YOKGP2EQ.js";
|
|
27
|
-
import {
|
|
28
|
-
ChainSwitchError,
|
|
29
|
-
TransactionConfirmationError,
|
|
30
|
-
TransactionExecutionError,
|
|
31
|
-
TransactionSignatureError,
|
|
32
|
-
UserRejectedRequestError
|
|
33
|
-
} from "./chunk-WM4RGBFQ.js";
|
|
34
|
-
|
|
35
|
-
// src/react/_internal/wallet/useWallet.ts
|
|
36
|
-
import { useAccount, useSwitchChain, useWalletClient } from "wagmi";
|
|
37
|
-
|
|
38
|
-
// src/react/_internal/wallet/wallet.ts
|
|
39
|
-
import {
|
|
40
|
-
custom,
|
|
41
|
-
erc20Abi,
|
|
42
|
-
erc721Abi,
|
|
43
|
-
hexToBigInt,
|
|
44
|
-
isHex
|
|
45
|
-
} from "viem";
|
|
46
|
-
|
|
47
|
-
// src/react/_internal/logger.ts
|
|
48
|
-
var TransactionLogger = class {
|
|
49
|
-
constructor(context, enabled = true) {
|
|
50
|
-
this.context = context;
|
|
51
|
-
this.enabled = enabled;
|
|
52
|
-
}
|
|
53
|
-
formatData(data) {
|
|
54
|
-
if (data instanceof Error) {
|
|
55
|
-
return {
|
|
56
|
-
name: data.name,
|
|
57
|
-
message: data.message,
|
|
58
|
-
cause: data.cause instanceof Error ? this.formatData(data.cause) : data.cause,
|
|
59
|
-
stack: data.stack?.split("\n").slice(0, 3)
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
if (Array.isArray(data)) {
|
|
63
|
-
return data.map((item) => this.formatData(item));
|
|
64
|
-
}
|
|
65
|
-
if (typeof data === "object" && data !== null) {
|
|
66
|
-
return Object.fromEntries(
|
|
67
|
-
Object.entries(data).map(([key, value]) => [
|
|
68
|
-
key,
|
|
69
|
-
this.formatData(value)
|
|
70
|
-
])
|
|
71
|
-
);
|
|
72
|
-
}
|
|
73
|
-
return data;
|
|
74
|
-
}
|
|
75
|
-
log(level, message, data) {
|
|
76
|
-
if (!this.enabled) return;
|
|
77
|
-
console[level](
|
|
78
|
-
`[${this.context}] ${message}`,
|
|
79
|
-
data ? this.formatData(data) : ""
|
|
80
|
-
);
|
|
81
|
-
}
|
|
82
|
-
debug(message, data) {
|
|
83
|
-
this.log("debug", message, data);
|
|
84
|
-
}
|
|
85
|
-
error(message, error) {
|
|
86
|
-
this.log("error", message, error);
|
|
87
|
-
}
|
|
88
|
-
info(message, data) {
|
|
89
|
-
this.log("info", message, data);
|
|
90
|
-
}
|
|
91
|
-
state(from, to) {
|
|
92
|
-
this.info(`State transition: ${from} -> ${to}`);
|
|
93
|
-
}
|
|
94
|
-
};
|
|
95
|
-
var createLogger = (context, enabled = true) => new TransactionLogger(context, enabled);
|
|
96
|
-
|
|
97
|
-
// src/react/_internal/wallet/wallet.ts
|
|
98
|
-
var wallet = ({
|
|
99
|
-
wallet: wallet2,
|
|
100
|
-
chains,
|
|
101
|
-
connector
|
|
102
|
-
}) => {
|
|
103
|
-
const logger = createLogger("Wallet");
|
|
104
|
-
const walletInstance = {
|
|
105
|
-
transport: custom(wallet2.transport),
|
|
106
|
-
isWaaS: connector.id.endsWith("waas"),
|
|
107
|
-
walletKind: connector.id === "sequence" ? "sequence" /* sequence */ : "unknown" /* unknown */,
|
|
108
|
-
getChainId: wallet2.getChainId,
|
|
109
|
-
address: async () => {
|
|
110
|
-
let address = wallet2.account?.address;
|
|
111
|
-
if (!address) {
|
|
112
|
-
[address] = await wallet2.getAddresses();
|
|
113
|
-
}
|
|
114
|
-
return address;
|
|
115
|
-
},
|
|
116
|
-
switchChain: async (chainId) => {
|
|
117
|
-
logger.debug("Switching chain", { targetChainId: chainId });
|
|
118
|
-
try {
|
|
119
|
-
await wallet2.switchChain({
|
|
120
|
-
id: chainId
|
|
121
|
-
});
|
|
122
|
-
logger.info("Chain switch successful", { chainId });
|
|
123
|
-
return;
|
|
124
|
-
} catch (e) {
|
|
125
|
-
const error = e;
|
|
126
|
-
logger.error("Chain switch failed", error);
|
|
127
|
-
switch (error.name) {
|
|
128
|
-
case "SwitchChainNotSupportedError":
|
|
129
|
-
throw new ChainSwitchError(await wallet2.getChainId(), chainId);
|
|
130
|
-
case "UserRejectedRequestError":
|
|
131
|
-
throw new UserRejectedRequestError();
|
|
132
|
-
case "ChainNotConfiguredError":
|
|
133
|
-
return;
|
|
134
|
-
default:
|
|
135
|
-
throw new ChainSwitchError(await wallet2.getChainId(), chainId);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
},
|
|
139
|
-
handleSignMessageStep: async (stepItem) => {
|
|
140
|
-
try {
|
|
141
|
-
if (stepItem.id === "signEIP191" /* signEIP191 */) {
|
|
142
|
-
logger.debug("Signing with EIP-191", { data: stepItem.data });
|
|
143
|
-
const message = isHex(stepItem.data) ? { raw: stepItem.data } : stepItem.data;
|
|
144
|
-
return await wallet2.signMessage({
|
|
145
|
-
account: wallet2.account,
|
|
146
|
-
message
|
|
147
|
-
});
|
|
148
|
-
} else if (stepItem.id === "signEIP712" /* signEIP712 */) {
|
|
149
|
-
logger.debug("Signing with EIP-712", {
|
|
150
|
-
domain: stepItem.domain,
|
|
151
|
-
types: stepItem.signature?.types
|
|
152
|
-
});
|
|
153
|
-
return await wallet2.signTypedData({
|
|
154
|
-
account: wallet2.account,
|
|
155
|
-
domain: stepItem.signature.domain,
|
|
156
|
-
// biome-ignore lint/style/noNonNullAssertion: <explanation>
|
|
157
|
-
types: stepItem.signature.types,
|
|
158
|
-
// biome-ignore lint/style/noNonNullAssertion: <explanation>
|
|
159
|
-
primaryType: stepItem.signature.primaryType,
|
|
160
|
-
// biome-ignore lint/style/noNonNullAssertion: <explanation>
|
|
161
|
-
message: stepItem.signature.value
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
} catch (error) {
|
|
165
|
-
logger.error("Signature failed", error);
|
|
166
|
-
throw new TransactionSignatureError(stepItem.id, error);
|
|
167
|
-
}
|
|
168
|
-
},
|
|
169
|
-
handleSendTransactionStep: async (chainId, stepItem) => {
|
|
170
|
-
logger.debug("Sending transaction", {
|
|
171
|
-
chainId,
|
|
172
|
-
to: stepItem.to,
|
|
173
|
-
value: stepItem.value
|
|
174
|
-
});
|
|
175
|
-
const chain = chains.find((chain2) => chain2.id === chainId);
|
|
176
|
-
try {
|
|
177
|
-
return await wallet2.sendTransaction({
|
|
178
|
-
chain,
|
|
179
|
-
data: stepItem.data,
|
|
180
|
-
account: wallet2.account,
|
|
181
|
-
to: stepItem.to,
|
|
182
|
-
value: hexToBigInt(stepItem.value || "0x0"),
|
|
183
|
-
...stepItem.maxFeePerGas && {
|
|
184
|
-
maxFeePerGas: hexToBigInt(stepItem.maxFeePerGas)
|
|
185
|
-
},
|
|
186
|
-
...stepItem.maxPriorityFeePerGas && {
|
|
187
|
-
maxPriorityFeePerGas: hexToBigInt(stepItem.maxPriorityFeePerGas)
|
|
188
|
-
},
|
|
189
|
-
...stepItem.gas && {
|
|
190
|
-
gas: hexToBigInt(stepItem.gas)
|
|
191
|
-
}
|
|
192
|
-
});
|
|
193
|
-
} catch (error) {
|
|
194
|
-
logger.error("Transaction failed", error);
|
|
195
|
-
throw new TransactionExecutionError(stepItem.id, error);
|
|
196
|
-
}
|
|
197
|
-
},
|
|
198
|
-
handleConfirmTransactionStep: async (txHash, chainId) => {
|
|
199
|
-
logger.debug("Confirming transaction", { txHash, chainId });
|
|
200
|
-
try {
|
|
201
|
-
const publicClient = getPublicRpcClient(chainId);
|
|
202
|
-
const receipt = await publicClient.waitForTransactionReceipt({
|
|
203
|
-
hash: txHash
|
|
204
|
-
});
|
|
205
|
-
logger.info("Transaction confirmed", { txHash, receipt });
|
|
206
|
-
return receipt;
|
|
207
|
-
} catch (error) {
|
|
208
|
-
logger.error("Transaction confirmation failed", error);
|
|
209
|
-
throw new TransactionConfirmationError(txHash, error);
|
|
210
|
-
}
|
|
211
|
-
},
|
|
212
|
-
hasTokenApproval: async ({
|
|
213
|
-
tokenType,
|
|
214
|
-
contractAddress,
|
|
215
|
-
spender
|
|
216
|
-
}) => {
|
|
217
|
-
const publicClient = getPublicRpcClient(await wallet2.getChainId());
|
|
218
|
-
const walletAddress = await walletInstance.address();
|
|
219
|
-
const spenderAddress = spender === "sequenceMarketV1" ? SEQUENCE_MARKET_V1_ADDRESS : spender === "sequenceMarketV2" ? SEQUENCE_MARKET_V2_ADDRESS : spender;
|
|
220
|
-
switch (tokenType) {
|
|
221
|
-
case "ERC20":
|
|
222
|
-
return await publicClient.readContract({
|
|
223
|
-
address: contractAddress,
|
|
224
|
-
abi: erc20Abi,
|
|
225
|
-
functionName: "allowance",
|
|
226
|
-
args: [walletAddress, spenderAddress]
|
|
227
|
-
});
|
|
228
|
-
case "ERC721":
|
|
229
|
-
return await publicClient.readContract({
|
|
230
|
-
address: contractAddress,
|
|
231
|
-
abi: erc721Abi,
|
|
232
|
-
functionName: "isApprovedForAll",
|
|
233
|
-
args: [walletAddress, spenderAddress]
|
|
234
|
-
});
|
|
235
|
-
case "ERC1155":
|
|
236
|
-
return await publicClient.readContract({
|
|
237
|
-
address: contractAddress,
|
|
238
|
-
abi: ERC1155_ABI,
|
|
239
|
-
functionName: "isApprovedForAll",
|
|
240
|
-
args: [walletAddress, spenderAddress]
|
|
241
|
-
});
|
|
242
|
-
default:
|
|
243
|
-
throw new Error("Unsupported contract type for approval checking");
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
};
|
|
247
|
-
return walletInstance;
|
|
248
|
-
};
|
|
249
|
-
|
|
250
|
-
// src/react/_internal/wallet/useWallet.ts
|
|
251
|
-
var useWallet = () => {
|
|
252
|
-
const { chains } = useSwitchChain();
|
|
253
|
-
const { data: walletClient, isLoading: walletClientIsLoading } = useWalletClient();
|
|
254
|
-
const { connector, isConnected, isConnecting } = useAccount();
|
|
255
|
-
if (walletClientIsLoading || isConnecting) {
|
|
256
|
-
return {
|
|
257
|
-
status: "loading",
|
|
258
|
-
wallet: null,
|
|
259
|
-
isLoading: true,
|
|
260
|
-
isError: false
|
|
261
|
-
};
|
|
262
|
-
}
|
|
263
|
-
if (!walletClient || !connector || !isConnected) {
|
|
264
|
-
return {
|
|
265
|
-
status: "error",
|
|
266
|
-
wallet: null,
|
|
267
|
-
isLoading: false,
|
|
268
|
-
isError: true
|
|
269
|
-
};
|
|
270
|
-
}
|
|
271
|
-
return {
|
|
272
|
-
status: "success",
|
|
273
|
-
wallet: wallet({
|
|
274
|
-
wallet: walletClient,
|
|
275
|
-
chains,
|
|
276
|
-
connector
|
|
277
|
-
}),
|
|
278
|
-
isLoading: false,
|
|
279
|
-
isError: false
|
|
280
|
-
};
|
|
281
|
-
};
|
|
282
|
-
|
|
283
|
-
// src/react/ui/modals/_internal/components/switchChainModal/index.tsx
|
|
284
|
-
import {
|
|
285
|
-
Button,
|
|
286
|
-
CloseIcon,
|
|
287
|
-
IconButton,
|
|
288
|
-
Spinner,
|
|
289
|
-
Text as Text2
|
|
290
|
-
} from "@0xsequence/design-system";
|
|
291
|
-
import { observer } from "@legendapp/state/react";
|
|
292
|
-
import { Close, Content, Overlay, Portal, Root } from "@radix-ui/react-dialog";
|
|
293
|
-
import { useSwitchChain as useSwitchChain2 } from "wagmi";
|
|
294
|
-
|
|
295
|
-
// src/react/ui/modals/_internal/components/alertMessage/index.tsx
|
|
296
|
-
import { Box, Text, WarningIcon } from "@0xsequence/design-system";
|
|
297
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
298
|
-
function AlertMessage({ message, type }) {
|
|
299
|
-
return /* @__PURE__ */ jsxs(Box, { className: `${alertMessageBox} ${alertMessageBoxVariants[type]}`, children: [
|
|
300
|
-
/* @__PURE__ */ jsx(
|
|
301
|
-
Text,
|
|
302
|
-
{
|
|
303
|
-
color: "white",
|
|
304
|
-
fontSize: "normal",
|
|
305
|
-
fontWeight: "medium",
|
|
306
|
-
fontFamily: "body",
|
|
307
|
-
children: message
|
|
308
|
-
}
|
|
309
|
-
),
|
|
310
|
-
type === "warning" && /* @__PURE__ */ jsx(WarningIcon, { size: "sm", color: "white" }),
|
|
311
|
-
type === "info" && /* @__PURE__ */ jsx(InfoIcon_default, { size: "sm", color: "white" })
|
|
312
|
-
] });
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
// src/react/ui/modals/_internal/components/switchChainModal/store.ts
|
|
316
|
-
import { observable } from "@legendapp/state";
|
|
317
|
-
var initialState = {
|
|
318
|
-
isOpen: false,
|
|
319
|
-
open: ({ chainIdToSwitchTo, onError, onSuccess, onClose }) => {
|
|
320
|
-
switchChainModal$.state.set({
|
|
321
|
-
...switchChainModal$.state.get(),
|
|
322
|
-
chainIdToSwitchTo,
|
|
323
|
-
onError,
|
|
324
|
-
onSuccess,
|
|
325
|
-
onClose
|
|
326
|
-
});
|
|
327
|
-
switchChainModal$.isOpen.set(true);
|
|
328
|
-
},
|
|
329
|
-
close: () => {
|
|
330
|
-
switchChainModal$.isOpen.set(false);
|
|
331
|
-
},
|
|
332
|
-
state: {
|
|
333
|
-
chainIdToSwitchTo: void 0,
|
|
334
|
-
onError: void 0,
|
|
335
|
-
onSuccess: void 0,
|
|
336
|
-
onClose: void 0,
|
|
337
|
-
isSwitching: false
|
|
338
|
-
}
|
|
339
|
-
};
|
|
340
|
-
var switchChainModal$ = observable(initialState);
|
|
341
|
-
|
|
342
|
-
// src/react/ui/modals/_internal/components/switchChainModal/index.tsx
|
|
343
|
-
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
344
|
-
var useSwitchChainModal = () => {
|
|
345
|
-
return {
|
|
346
|
-
show: (args) => switchChainModal$.open(args),
|
|
347
|
-
close: () => switchChainModal$.delete(),
|
|
348
|
-
isSwitching$: switchChainModal$.state.isSwitching
|
|
349
|
-
};
|
|
350
|
-
};
|
|
351
|
-
var SwitchChainModal = observer(() => {
|
|
352
|
-
const chainIdToSwitchTo = switchChainModal$.state.chainIdToSwitchTo.get();
|
|
353
|
-
const isSwitching$ = switchChainModal$.state.isSwitching;
|
|
354
|
-
const chainName = chainIdToSwitchTo ? getPresentableChainName(chainIdToSwitchTo) : "";
|
|
355
|
-
const { switchChainAsync } = useSwitchChain2();
|
|
356
|
-
async function handleSwitchChain() {
|
|
357
|
-
isSwitching$.set(true);
|
|
358
|
-
try {
|
|
359
|
-
if (!chainIdToSwitchTo) return;
|
|
360
|
-
await switchChainAsync({ chainId: Number(chainIdToSwitchTo) });
|
|
361
|
-
if (switchChainModal$.state.onSuccess && typeof switchChainModal$.state.onSuccess === "function") {
|
|
362
|
-
switchChainModal$.state.onSuccess();
|
|
363
|
-
}
|
|
364
|
-
switchChainModal$.delete();
|
|
365
|
-
} catch (error) {
|
|
366
|
-
if (error instanceof Error && switchChainModal$.state.onError.get() && typeof switchChainModal$.state.onError.get() === "function") {
|
|
367
|
-
switchChainModal$.state.onError.get()?.(error);
|
|
368
|
-
}
|
|
369
|
-
} finally {
|
|
370
|
-
isSwitching$.set(false);
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
return /* @__PURE__ */ jsx2(Root, { open: switchChainModal$.isOpen.get(), children: /* @__PURE__ */ jsxs2(Portal, { container: getProviderEl(), children: [
|
|
374
|
-
/* @__PURE__ */ jsx2(Overlay, { className: dialogOverlay }),
|
|
375
|
-
/* @__PURE__ */ jsxs2(Content, { className: switchChainModalContent, children: [
|
|
376
|
-
/* @__PURE__ */ jsx2(Text2, { fontSize: "large", fontWeight: "bold", color: "text100", children: "Wrong network" }),
|
|
377
|
-
/* @__PURE__ */ jsx2(
|
|
378
|
-
AlertMessage,
|
|
379
|
-
{
|
|
380
|
-
type: "warning",
|
|
381
|
-
message: `You need to switch to ${chainName} network before completing the transaction`
|
|
382
|
-
}
|
|
383
|
-
),
|
|
384
|
-
/* @__PURE__ */ jsx2(
|
|
385
|
-
Button,
|
|
386
|
-
{
|
|
387
|
-
name: "switch-chain",
|
|
388
|
-
id: "switch-chain-button",
|
|
389
|
-
size: "sm",
|
|
390
|
-
label: isSwitching$.get() ? /* @__PURE__ */ jsx2(Spinner, { "data-testid": "switch-chain-spinner" }) : "Switch Network",
|
|
391
|
-
variant: "primary",
|
|
392
|
-
pending: isSwitching$.get(),
|
|
393
|
-
shape: "square",
|
|
394
|
-
className: isSwitching$.get() ? switchChainCta.pending : switchChainCta.default,
|
|
395
|
-
justifySelf: "flex-end",
|
|
396
|
-
onClick: handleSwitchChain
|
|
397
|
-
}
|
|
398
|
-
),
|
|
399
|
-
/* @__PURE__ */ jsx2(
|
|
400
|
-
Close,
|
|
401
|
-
{
|
|
402
|
-
"data-testid": "switch-chain-modal-close-button",
|
|
403
|
-
onClick: () => {
|
|
404
|
-
if (switchChainModal$.state.onClose && typeof switchChainModal$.state.onClose === "function") {
|
|
405
|
-
switchChainModal$.state.onClose();
|
|
406
|
-
}
|
|
407
|
-
switchChainModal$.delete();
|
|
408
|
-
},
|
|
409
|
-
className: closeButton,
|
|
410
|
-
asChild: true,
|
|
411
|
-
children: /* @__PURE__ */ jsx2(IconButton, { size: "xs", "aria-label": "Close modal", icon: CloseIcon })
|
|
412
|
-
}
|
|
413
|
-
)
|
|
414
|
-
] })
|
|
415
|
-
] }) });
|
|
416
|
-
});
|
|
417
|
-
var switchChainModal_default = SwitchChainModal;
|
|
418
|
-
|
|
419
|
-
export {
|
|
420
|
-
useWallet,
|
|
421
|
-
AlertMessage,
|
|
422
|
-
useSwitchChainModal,
|
|
423
|
-
switchChainModal_default
|
|
424
|
-
};
|
|
425
|
-
//# sourceMappingURL=chunk-FWN2MCLI.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/react/_internal/wallet/useWallet.ts","../src/react/_internal/wallet/wallet.ts","../src/react/_internal/logger.ts","../src/react/ui/modals/_internal/components/switchChainModal/index.tsx","../src/react/ui/modals/_internal/components/alertMessage/index.tsx","../src/react/ui/modals/_internal/components/switchChainModal/store.ts"],"sourcesContent":["import { useAccount, useSwitchChain, useWalletClient } from 'wagmi';\nimport { wallet, type WalletInstance } from './wallet';\n\ntype UseWalletReturn =\n\t| {\n\t\t\tstatus: 'loading';\n\t\t\twallet: null;\n\t\t\tisLoading: true;\n\t\t\tisError: false;\n\t }\n\t| {\n\t\t\tstatus: 'error';\n\t\t\twallet: null;\n\t\t\tisLoading: false;\n\t\t\tisError: true;\n\t }\n\t| {\n\t\t\tstatus: 'success';\n\t\t\twallet: WalletInstance;\n\t\t\tisLoading: false;\n\t\t\tisError: false;\n\t };\n\nexport const useWallet = (): UseWalletReturn => {\n\tconst { chains } = useSwitchChain();\n\tconst { data: walletClient, isLoading: walletClientIsLoading } =\n\t\tuseWalletClient();\n\tconst { connector, isConnected, isConnecting } = useAccount();\n\n\tif (walletClientIsLoading || isConnecting) {\n\t\treturn {\n\t\t\tstatus: 'loading',\n\t\t\twallet: null,\n\t\t\tisLoading: true,\n\t\t\tisError: false,\n\t\t};\n\t}\n\n\tif (!walletClient || !connector || !isConnected) {\n\t\treturn {\n\t\t\tstatus: 'error',\n\t\t\twallet: null,\n\t\t\tisLoading: false,\n\t\t\tisError: true,\n\t\t};\n\t}\n\n\treturn {\n\t\tstatus: 'success',\n\t\twallet: wallet({\n\t\t\twallet: walletClient,\n\t\t\tchains,\n\t\t\tconnector,\n\t\t}),\n\t\tisLoading: false,\n\t\tisError: false,\n\t};\n};\n","import {\n\ttype Account,\n\ttype Address,\n\ttype Chain,\n\ttype Hex,\n\ttype TransactionReceipt,\n\ttype TypedDataDomain,\n\ttype WalletClient as ViemWalletClient,\n\tcustom,\n\terc20Abi,\n\terc721Abi,\n\thexToBigInt,\n\tisHex,\n} from 'viem';\nimport type { Connector } from 'wagmi';\nimport type { SwitchChainErrorType } from 'wagmi/actions';\nimport { ERC1155_ABI, getPublicRpcClient } from '../../../utils';\nimport {\n\tChainSwitchError,\n\tTransactionConfirmationError,\n\tTransactionExecutionError,\n\tTransactionSignatureError,\n\tUserRejectedRequestError,\n} from '../../../utils/_internal/error/transaction';\nimport { StepType, WalletKind } from '../api';\nimport { createLogger } from '../logger';\nimport type { SignatureStep, TransactionStep } from '../utils';\nimport {\n\tSEQUENCE_MARKET_V1_ADDRESS,\n\tSEQUENCE_MARKET_V2_ADDRESS,\n} from '../../../consts';\n\ninterface WalletClient extends Omit<ViemWalletClient, 'account'> {\n\taccount: Account;\n}\n\nexport interface WalletInstance {\n\ttransport: ReturnType<typeof custom>;\n\tisWaaS: boolean;\n\twalletKind: WalletKind;\n\tgetChainId: () => Promise<number>;\n\tswitchChain: (chainId: number) => Promise<void>;\n\taddress: () => Promise<Hex>;\n\thandleSignMessageStep: (stepItem: SignatureStep) => Promise<Hex | undefined>;\n\thandleSendTransactionStep: (\n\t\tchainId: number,\n\t\tstepItem: TransactionStep,\n\t) => Promise<Hex>;\n\thandleConfirmTransactionStep: (\n\t\ttxHash: Hex,\n\t\tchainId: number,\n\t) => Promise<TransactionReceipt>;\n\thasTokenApproval: (args: {\n\t\ttokenType: 'ERC20' | 'ERC721' | 'ERC1155';\n\t\tcontractAddress: Address;\n\t\tspender: Address | 'sequenceMarketV1' | 'sequenceMarketV2';\n\t}) => Promise<bigint | boolean>;\n}\n\nexport const wallet = ({\n\twallet,\n\tchains,\n\tconnector,\n}: {\n\twallet: WalletClient;\n\tchains: readonly [Chain, ...Chain[]];\n\tconnector: Connector;\n}): WalletInstance => {\n\tconst logger = createLogger('Wallet');\n\n\tconst walletInstance = {\n\t\ttransport: custom(wallet.transport),\n\t\tisWaaS: connector.id.endsWith('waas'),\n\t\twalletKind:\n\t\t\tconnector.id === 'sequence' ? WalletKind.sequence : WalletKind.unknown,\n\t\tgetChainId: wallet.getChainId,\n\t\taddress: async () => {\n\t\t\tlet address = wallet.account?.address;\n\t\t\tif (!address) {\n\t\t\t\t[address] = await wallet.getAddresses();\n\t\t\t}\n\t\t\treturn address;\n\t\t},\n\t\tswitchChain: async (chainId: number) => {\n\t\t\tlogger.debug('Switching chain', { targetChainId: chainId });\n\n\t\t\ttry {\n\t\t\t\tawait wallet.switchChain({\n\t\t\t\t\tid: chainId,\n\t\t\t\t});\n\t\t\t\tlogger.info('Chain switch successful', { chainId });\n\t\t\t\treturn;\n\t\t\t} catch (e) {\n\t\t\t\tconst error = e as SwitchChainErrorType;\n\t\t\t\tlogger.error('Chain switch failed', error);\n\n\t\t\t\tswitch (error.name) {\n\t\t\t\t\tcase 'SwitchChainNotSupportedError':\n\t\t\t\t\t\tthrow new ChainSwitchError(await wallet.getChainId(), chainId);\n\t\t\t\t\tcase 'UserRejectedRequestError':\n\t\t\t\t\t\tthrow new UserRejectedRequestError();\n\t\t\t\t\tcase 'ChainNotConfiguredError':\n\t\t\t\t\t\treturn;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new ChainSwitchError(await wallet.getChainId(), chainId);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thandleSignMessageStep: async (stepItem: SignatureStep) => {\n\t\t\ttry {\n\t\t\t\tif (stepItem.id === StepType.signEIP191) {\n\t\t\t\t\tlogger.debug('Signing with EIP-191', { data: stepItem.data });\n\t\t\t\t\tconst message = isHex(stepItem.data)\n\t\t\t\t\t\t? { raw: stepItem.data }\n\t\t\t\t\t\t: stepItem.data;\n\t\t\t\t\treturn await wallet.signMessage({\n\t\t\t\t\t\taccount: wallet.account,\n\t\t\t\t\t\tmessage,\n\t\t\t\t\t});\n\t\t\t\t\t// biome-ignore lint/style/noUselessElse: <explanation>\n\t\t\t\t} else if (stepItem.id === StepType.signEIP712) {\n\t\t\t\t\tlogger.debug('Signing with EIP-712', {\n\t\t\t\t\t\tdomain: stepItem.domain,\n\t\t\t\t\t\ttypes: stepItem.signature?.types,\n\t\t\t\t\t});\n\t\t\t\t\treturn await wallet.signTypedData({\n\t\t\t\t\t\taccount: wallet.account,\n\t\t\t\t\t\tdomain: stepItem.signature!.domain as TypedDataDomain,\n\t\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: <explanation>\n\t\t\t\t\t\ttypes: stepItem.signature!.types,\n\t\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: <explanation>\n\t\t\t\t\t\tprimaryType: stepItem.signature!.primaryType,\n\t\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: <explanation>\n\t\t\t\t\t\tmessage: stepItem.signature!.value,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Signature failed', error);\n\t\t\t\tthrow new TransactionSignatureError(stepItem.id, error as Error);\n\t\t\t}\n\t\t},\n\t\thandleSendTransactionStep: async (\n\t\t\tchainId: number,\n\t\t\tstepItem: TransactionStep,\n\t\t) => {\n\t\t\tlogger.debug('Sending transaction', {\n\t\t\t\tchainId,\n\t\t\t\tto: stepItem.to,\n\t\t\t\tvalue: stepItem.value,\n\t\t\t});\n\n\t\t\tconst chain = chains.find((chain) => chain.id === chainId);\n\t\t\ttry {\n\t\t\t\treturn await wallet.sendTransaction({\n\t\t\t\t\tchain,\n\t\t\t\t\tdata: stepItem.data,\n\t\t\t\t\taccount: wallet.account,\n\t\t\t\t\tto: stepItem.to,\n\t\t\t\t\tvalue: hexToBigInt(stepItem.value || '0x0'),\n\t\t\t\t\t...(stepItem.maxFeePerGas && {\n\t\t\t\t\t\tmaxFeePerGas: hexToBigInt(stepItem.maxFeePerGas),\n\t\t\t\t\t}),\n\t\t\t\t\t...(stepItem.maxPriorityFeePerGas && {\n\t\t\t\t\t\tmaxPriorityFeePerGas: hexToBigInt(stepItem.maxPriorityFeePerGas),\n\t\t\t\t\t}),\n\t\t\t\t\t...(stepItem.gas && {\n\t\t\t\t\t\tgas: hexToBigInt(stepItem.gas),\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Transaction failed', error);\n\t\t\t\tthrow new TransactionExecutionError(stepItem.id, error as Error);\n\t\t\t}\n\t\t},\n\t\thandleConfirmTransactionStep: async (txHash: Hex, chainId: number) => {\n\t\t\tlogger.debug('Confirming transaction', { txHash, chainId });\n\n\t\t\ttry {\n\t\t\t\tconst publicClient = getPublicRpcClient(chainId);\n\t\t\t\tconst receipt = await publicClient.waitForTransactionReceipt({\n\t\t\t\t\thash: txHash as Address,\n\t\t\t\t});\n\t\t\t\tlogger.info('Transaction confirmed', { txHash, receipt });\n\t\t\t\treturn receipt;\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Transaction confirmation failed', error);\n\t\t\t\tthrow new TransactionConfirmationError(txHash, error as Error);\n\t\t\t}\n\t\t},\n\t\thasTokenApproval: async ({\n\t\t\ttokenType,\n\t\t\tcontractAddress,\n\t\t\tspender,\n\t\t}: {\n\t\t\ttokenType: 'ERC20' | 'ERC721' | 'ERC1155';\n\t\t\tcontractAddress: Address;\n\t\t\tspender: Address | 'sequenceMarketV1' | 'sequenceMarketV2';\n\t\t}) => {\n\t\t\tconst publicClient = getPublicRpcClient(await wallet.getChainId());\n\t\t\tconst walletAddress = await walletInstance.address();\n\t\t\tconst spenderAddress =\n\t\t\t\tspender === 'sequenceMarketV1'\n\t\t\t\t\t? SEQUENCE_MARKET_V1_ADDRESS\n\t\t\t\t\t: spender === 'sequenceMarketV2'\n\t\t\t\t\t\t? SEQUENCE_MARKET_V2_ADDRESS\n\t\t\t\t\t\t: spender;\n\n\t\t\tswitch (tokenType) {\n\t\t\t\tcase 'ERC20':\n\t\t\t\t\treturn await publicClient.readContract({\n\t\t\t\t\t\taddress: contractAddress as Hex,\n\t\t\t\t\t\tabi: erc20Abi,\n\t\t\t\t\t\tfunctionName: 'allowance',\n\t\t\t\t\t\targs: [walletAddress, spenderAddress],\n\t\t\t\t\t});\n\t\t\t\tcase 'ERC721':\n\t\t\t\t\treturn await publicClient.readContract({\n\t\t\t\t\t\taddress: contractAddress as Hex,\n\t\t\t\t\t\tabi: erc721Abi,\n\t\t\t\t\t\tfunctionName: 'isApprovedForAll',\n\t\t\t\t\t\targs: [walletAddress, spenderAddress],\n\t\t\t\t\t});\n\t\t\t\tcase 'ERC1155':\n\t\t\t\t\treturn await publicClient.readContract({\n\t\t\t\t\t\taddress: contractAddress as Hex,\n\t\t\t\t\t\tabi: ERC1155_ABI,\n\t\t\t\t\t\tfunctionName: 'isApprovedForAll',\n\t\t\t\t\t\targs: [walletAddress, spenderAddress],\n\t\t\t\t\t});\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error('Unsupported contract type for approval checking');\n\t\t\t}\n\t\t},\n\t};\n\n\treturn walletInstance;\n};\n","export class TransactionLogger {\n\tconstructor(\n\t\tprivate readonly context: string,\n\t\tprivate readonly enabled: boolean = true,\n\t) {}\n\n\tprivate formatData(data: unknown): unknown {\n\t\tif (data instanceof Error) {\n\t\t\treturn {\n\t\t\t\tname: data.name,\n\t\t\t\tmessage: data.message,\n\t\t\t\tcause:\n\t\t\t\t\tdata.cause instanceof Error\n\t\t\t\t\t\t? this.formatData(data.cause)\n\t\t\t\t\t\t: data.cause,\n\t\t\t\tstack: data.stack?.split('\\n').slice(0, 3),\n\t\t\t};\n\t\t}\n\n\t\tif (Array.isArray(data)) {\n\t\t\treturn data.map((item) => this.formatData(item));\n\t\t}\n\n\t\tif (typeof data === 'object' && data !== null) {\n\t\t\treturn Object.fromEntries(\n\t\t\t\tObject.entries(data).map(([key, value]) => [\n\t\t\t\t\tkey,\n\t\t\t\t\tthis.formatData(value),\n\t\t\t\t]),\n\t\t\t);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tprivate log(\n\t\tlevel: 'debug' | 'error' | 'info',\n\t\tmessage: string,\n\t\tdata?: unknown,\n\t) {\n\t\tif (!this.enabled) return;\n\t\tconsole[level](\n\t\t\t`[${this.context}] ${message}`,\n\t\t\tdata ? this.formatData(data) : '',\n\t\t);\n\t}\n\n\tdebug(message: string, data?: unknown) {\n\t\tthis.log('debug', message, data);\n\t}\n\n\terror(message: string, error: unknown) {\n\t\tthis.log('error', message, error);\n\t}\n\n\tinfo(message: string, data?: unknown) {\n\t\tthis.log('info', message, data);\n\t}\n\n\tstate(from: string, to: string) {\n\t\tthis.info(`State transition: ${from} -> ${to}`);\n\t}\n}\n\nexport const createLogger = (context: string, enabled = true) =>\n\tnew TransactionLogger(context, enabled);\n","import {\n\tButton,\n\tCloseIcon,\n\tIconButton,\n\tSpinner,\n\tText,\n} from '@0xsequence/design-system';\nimport { observer } from '@legendapp/state/react';\nimport { Close, Content, Overlay, Portal, Root } from '@radix-ui/react-dialog';\nimport { useSwitchChain } from 'wagmi';\nimport { getPresentableChainName } from '../../../../../../utils/network';\nimport { getProviderEl, type ChainId } from '../../../../../_internal';\nimport AlertMessage from '../alertMessage';\nimport { switchChainModal$ } from './store';\nimport {\n\tcloseButton,\n\tdialogOverlay,\n\tswitchChainCta,\n\tswitchChainModalContent,\n} from './styles.css';\nimport type { SwitchChainError } from 'viem';\n\nexport type ShowSwitchChainModalArgs = {\n\tchainIdToSwitchTo: ChainId;\n\tonSuccess?: () => void;\n\tonError?: (error: SwitchChainError) => void;\n\tonClose?: () => void;\n};\n\nexport const useSwitchChainModal = () => {\n\treturn {\n\t\tshow: (args: ShowSwitchChainModalArgs) => switchChainModal$.open(args),\n\t\tclose: () => switchChainModal$.delete(),\n\t\tisSwitching$: switchChainModal$.state.isSwitching,\n\t};\n};\n\nconst SwitchChainModal = observer(() => {\n\tconst chainIdToSwitchTo = switchChainModal$.state.chainIdToSwitchTo.get();\n\tconst isSwitching$ = switchChainModal$.state.isSwitching;\n\tconst chainName = chainIdToSwitchTo\n\t\t? getPresentableChainName(chainIdToSwitchTo)\n\t\t: '';\n\tconst { switchChainAsync } = useSwitchChain();\n\n\tasync function handleSwitchChain() {\n\t\tisSwitching$.set(true);\n\n\t\ttry {\n\t\t\tif (!chainIdToSwitchTo) return;\n\t\t\tawait switchChainAsync({ chainId: Number(chainIdToSwitchTo) });\n\n\t\t\tif (\n\t\t\t\tswitchChainModal$.state.onSuccess &&\n\t\t\t\ttypeof switchChainModal$.state.onSuccess === 'function'\n\t\t\t) {\n\t\t\t\tswitchChainModal$.state.onSuccess();\n\t\t\t}\n\n\t\t\tswitchChainModal$.delete();\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\terror instanceof Error &&\n\t\t\t\tswitchChainModal$.state.onError.get() &&\n\t\t\t\ttypeof switchChainModal$.state.onError.get() === 'function'\n\t\t\t) {\n\t\t\t\tswitchChainModal$.state.onError.get()?.(error as SwitchChainError);\n\t\t\t}\n\t\t} finally {\n\t\t\tisSwitching$.set(false);\n\t\t}\n\t}\n\n\treturn (\n\t\t<Root open={switchChainModal$.isOpen.get()}>\n\t\t\t<Portal container={getProviderEl()}>\n\t\t\t\t<Overlay className={dialogOverlay} />\n\n\t\t\t\t<Content className={switchChainModalContent}>\n\t\t\t\t\t<Text fontSize=\"large\" fontWeight=\"bold\" color=\"text100\">\n\t\t\t\t\t\tWrong network\n\t\t\t\t\t</Text>\n\n\t\t\t\t\t<AlertMessage\n\t\t\t\t\t\ttype=\"warning\"\n\t\t\t\t\t\tmessage={`You need to switch to ${chainName} network before completing the transaction`}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<Button\n\t\t\t\t\t\tname=\"switch-chain\"\n\t\t\t\t\t\tid=\"switch-chain-button\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\tisSwitching$.get() ? (\n\t\t\t\t\t\t\t\t<Spinner data-testid=\"switch-chain-spinner\" />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t'Switch Network'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\tpending={isSwitching$.get()}\n\t\t\t\t\t\tshape=\"square\"\n\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\tisSwitching$.get()\n\t\t\t\t\t\t\t\t? switchChainCta.pending\n\t\t\t\t\t\t\t\t: switchChainCta.default\n\t\t\t\t\t\t}\n\t\t\t\t\t\tjustifySelf=\"flex-end\"\n\t\t\t\t\t\tonClick={handleSwitchChain}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<Close\n\t\t\t\t\t\tdata-testid=\"switch-chain-modal-close-button\"\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tswitchChainModal$.state.onClose &&\n\t\t\t\t\t\t\t\ttypeof switchChainModal$.state.onClose === 'function'\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tswitchChainModal$.state.onClose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tswitchChainModal$.delete();\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={closeButton}\n\t\t\t\t\t\tasChild\n\t\t\t\t\t>\n\t\t\t\t\t\t<IconButton size=\"xs\" aria-label=\"Close modal\" icon={CloseIcon} />\n\t\t\t\t\t</Close>\n\t\t\t\t</Content>\n\t\t\t</Portal>\n\t\t</Root>\n\t);\n});\n\nexport default SwitchChainModal;\n","import { Box, Text, WarningIcon } from '@0xsequence/design-system';\nimport SvgInfoIcon from '../../../../icons/InfoIcon';\nimport { alertMessageBox, alertMessageBoxVariants } from './styles.css';\n\ntype AlertMessageProps = {\n\tmessage: string;\n\ttype: 'warning' | 'info';\n};\n\nexport default function AlertMessage({ message, type }: AlertMessageProps) {\n\treturn (\n\t\t<Box className={`${alertMessageBox} ${alertMessageBoxVariants[type]}`}>\n\t\t\t<Text\n\t\t\t\tcolor=\"white\"\n\t\t\t\tfontSize=\"normal\"\n\t\t\t\tfontWeight=\"medium\"\n\t\t\t\tfontFamily=\"body\"\n\t\t\t>\n\t\t\t\t{message}\n\t\t\t</Text>\n\n\t\t\t{type === 'warning' && <WarningIcon size=\"sm\" color=\"white\" />}\n\t\t\t{type === 'info' && <SvgInfoIcon size=\"sm\" color=\"white\" />}\n\t\t</Box>\n\t);\n}\n","import { observable } from '@legendapp/state';\nimport type { ShowSwitchChainModalArgs } from '.';\nimport type { ChainId } from '../../../../../_internal';\nimport type { SwitchChainError } from 'viem';\n\nexport interface SwitchChainModalState {\n\tisOpen: boolean;\n\topen: (args: ShowSwitchChainModalArgs) => void;\n\tclose: () => void;\n\tstate: {\n\t\tchainIdToSwitchTo: ChainId | undefined;\n\t\tisSwitching: boolean;\n\t\tonSuccess: (() => void) | undefined;\n\t\tonError: undefined | ((error: SwitchChainError) => void);\n\t\tonClose: (() => void) | undefined;\n\t};\n}\n\nexport const initialState: SwitchChainModalState = {\n\tisOpen: false,\n\topen: ({ chainIdToSwitchTo, onError, onSuccess, onClose }) => {\n\t\tswitchChainModal$.state.set({\n\t\t\t...switchChainModal$.state.get(),\n\t\t\tchainIdToSwitchTo,\n\t\t\tonError,\n\t\t\tonSuccess,\n\t\t\tonClose,\n\t\t});\n\t\tswitchChainModal$.isOpen.set(true);\n\t},\n\tclose: () => {\n\t\tswitchChainModal$.isOpen.set(false);\n\t},\n\tstate: {\n\t\tchainIdToSwitchTo: undefined,\n\t\tonError: undefined,\n\t\tonSuccess: undefined,\n\t\tonClose: undefined,\n\t\tisSwitching: false,\n\t},\n};\n\nexport const switchChainModal$ = observable(initialState);\n"],"mappings":"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","names":["wallet","chain","Text","useSwitchChain","jsx","jsxs","useSwitchChain","Text"]}
|