@daimo/pay 1.18.0 → 1.18.1
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/build/index.d.ts +1 -1
- package/build/package.json.js +3 -3
- package/build/src/hooks/usePaymentState.js +3 -3
- package/build/src/hooks/usePaymentState.js.map +1 -1
- package/build/src/world-mini-app/WorldPayButton.js +1 -1
- package/build/src/world-mini-app/WorldPayButton.js.map +1 -1
- package/build/src/world-mini-app/useWithdrawToWorld.js +70 -0
- package/build/src/world-mini-app/useWithdrawToWorld.js.map +1 -0
- package/build/src/world-mini-app/useWorldSignIn.js +74 -0
- package/build/src/world-mini-app/useWorldSignIn.js.map +1 -0
- package/build/src/world.js +1 -0
- package/build/src/world.js.map +1 -1
- package/build/world.d.ts +9 -2
- package/package.json +3 -3
- package/build/src/assets/coins.js +0 -43
- package/build/src/assets/coins.js.map +0 -1
- package/build/src/assets/crepe.js +0 -42
- package/build/src/assets/crepe.js.map +0 -1
- package/build/src/assets/wallet.js +0 -39
- package/build/src/assets/wallet.js.map +0 -1
- package/build/src/components/Common/CopyToClipboard/index.js +0 -33
- package/build/src/components/Common/CopyToClipboard/index.js.map +0 -1
- package/build/src/components/Pages/Connectors/styles.js +0 -267
- package/build/src/components/Pages/Connectors/styles.js.map +0 -1
- package/build/types-7ed033b6.d.ts +0 -66
package/build/index.d.ts
CHANGED
|
@@ -525,7 +525,7 @@ interface PaymentState {
|
|
|
525
525
|
resetOrder: (payParams?: Partial<PayParams>) => Promise<void>;
|
|
526
526
|
buttonProps: PayButtonPaymentProps | undefined;
|
|
527
527
|
setButtonProps: (props: PayButtonPaymentProps | undefined) => void;
|
|
528
|
-
setPayId: (id: string | undefined) => void
|
|
528
|
+
setPayId: (id: string | undefined) => Promise<void>;
|
|
529
529
|
setPayParams: (payParams: PayParams | undefined) => Promise<void>;
|
|
530
530
|
isDepositFlow: boolean;
|
|
531
531
|
paymentWaitingMessage: string | undefined;
|
package/build/package.json.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var name = "@daimo/pay";
|
|
2
|
-
var version = "1.18.
|
|
2
|
+
var version = "1.18.1";
|
|
3
3
|
var author = "Daimo";
|
|
4
4
|
var homepage = "https://pay.daimo.com";
|
|
5
5
|
var license = "BSD-2-Clause license";
|
|
@@ -31,7 +31,7 @@ var scripts = {
|
|
|
31
31
|
lint: "eslint 'src/**/*.{js,jsx,ts,tsx}' --max-warnings=0"
|
|
32
32
|
};
|
|
33
33
|
var dependencies = {
|
|
34
|
-
"@daimo/pay-common": "1.18.
|
|
34
|
+
"@daimo/pay-common": "1.18.1",
|
|
35
35
|
"@solana/wallet-adapter-base": "^0.9.23",
|
|
36
36
|
"@solana/wallet-adapter-react": "^0.15.35",
|
|
37
37
|
"@solana/web3.js": "^1.95.4",
|
|
@@ -50,7 +50,7 @@ var dependencies = {
|
|
|
50
50
|
};
|
|
51
51
|
var peerDependencies = {
|
|
52
52
|
"@tanstack/react-query": ">=5.0.0",
|
|
53
|
-
"@worldcoin/minikit-js": ">=1.9.
|
|
53
|
+
"@worldcoin/minikit-js": ">=1.9.8",
|
|
54
54
|
react: "18.x || 19.x",
|
|
55
55
|
"react-dom": "18.x || 19.x",
|
|
56
56
|
viem: ">=2.22.0",
|
|
@@ -282,16 +282,16 @@ function usePaymentState({
|
|
|
282
282
|
};
|
|
283
283
|
const setPayId = useCallback(
|
|
284
284
|
async (payId) => {
|
|
285
|
-
if (
|
|
285
|
+
if (payId == null) return;
|
|
286
286
|
const id = readDaimoPayOrderID(payId).toString();
|
|
287
287
|
if (pay.order?.id && BigInt(id) == pay.order.id) {
|
|
288
288
|
return;
|
|
289
289
|
}
|
|
290
290
|
pay.reset();
|
|
291
|
-
pay.setPayId(payId);
|
|
291
|
+
await pay.setPayId(payId);
|
|
292
292
|
setIsDepositFlow(false);
|
|
293
293
|
},
|
|
294
|
-
[
|
|
294
|
+
[pay]
|
|
295
295
|
);
|
|
296
296
|
const setPayParams = async (payParams) => {
|
|
297
297
|
if (lockPayParams) return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePaymentState.js","sources":["../../../src/hooks/usePaymentState.ts"],"sourcesContent":["import {\n assert,\n assertNotNull,\n DaimoPayHydratedOrderWithOrg,\n debugJson,\n DepositAddressPaymentOptionData,\n DepositAddressPaymentOptionMetadata,\n DepositAddressPaymentOptions,\n ethereum,\n ExternalPaymentOptionMetadata,\n ExternalPaymentOptions,\n isNativeToken,\n PlatformType,\n readDaimoPayOrderID,\n SolanaPublicKey,\n WalletPaymentOption,\n writeDaimoPayOrderID,\n} from \"@daimo/pay-common\";\nimport { useConnection, useWallet } from \"@solana/wallet-adapter-react\";\nimport { VersionedTransaction } from \"@solana/web3.js\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { erc20Abi, getAddress, Hex, hexToBytes, isHex } from \"viem\";\nimport {\n useAccount,\n useEnsName,\n useSendTransaction,\n useWriteContract,\n} from \"wagmi\";\n\nimport { PayButtonPaymentProps } from \"../components/DaimoPayButton\";\nimport { ROUTES } from \"../constants/routes\";\nimport { PayParams } from \"../payment/paymentFsm\";\nimport { detectPlatform } from \"../utils/platform\";\nimport { TrpcClient } from \"../utils/trpc\";\nimport { WalletConfigProps } from \"../wallets/walletConfigs\";\nimport { useDaimoPay } from \"./useDaimoPay\";\nimport { useDepositAddressOptions } from \"./useDepositAddressOptions\";\nimport { useExternalPaymentOptions } from \"./useExternalPaymentOptions\";\nimport useIsMobile from \"./useIsMobile\";\nimport { useOrderUsdLimits } from \"./useOrderUsdLimits\";\nimport { useSolanaPaymentOptions } from \"./useSolanaPaymentOptions\";\nimport { useUntronAvailability } from \"./useUntronAvailability\";\nimport { useWalletPaymentOptions } from \"./useWalletPaymentOptions\";\n\n/** Wallet payment details, sent to processSourcePayment after submitting tx. */\nexport type SourcePayment = Parameters<\n TrpcClient[\"processSourcePayment\"][\"mutate\"]\n>[0];\n\n/** Creates (or loads) a payment and manages the corresponding modal. */\nexport interface PaymentState {\n generatePreviewOrder: () => void;\n resetOrder: (payParams?: Partial<PayParams>) => Promise<void>;\n\n /// DaimoPayButton props\n buttonProps: PayButtonPaymentProps | undefined;\n setButtonProps: (props: PayButtonPaymentProps | undefined) => void;\n\n /// Pay ID for loading an existing order\n setPayId: (id: string | undefined) => void;\n /// Pay params for creating an order on the fly,\n setPayParams: (payParams: PayParams | undefined) => Promise<void>;\n\n /// True if the user is entering an amount (deposit) vs preset (checkout).\n isDepositFlow: boolean;\n paymentWaitingMessage: string | undefined;\n /// External payment options, loaded from server and filtered by EITHER\n /// 1. the DaimoPayButton paymentOptions, or 2. those of daimoPayOrder\n externalPaymentOptions: ReturnType<typeof useExternalPaymentOptions>;\n selectedWallet: WalletConfigProps | undefined;\n selectedWalletDeepLink: string | undefined;\n walletPaymentOptions: ReturnType<typeof useWalletPaymentOptions>;\n solanaPaymentOptions: ReturnType<typeof useSolanaPaymentOptions>;\n depositAddressOptions: ReturnType<typeof useDepositAddressOptions>;\n /** Whether Untron receivers are currently available. `null` when unknown. */\n untronAvailable: boolean | null;\n selectedExternalOption: ExternalPaymentOptionMetadata | undefined;\n selectedTokenOption: WalletPaymentOption | undefined;\n selectedSolanaTokenOption: WalletPaymentOption | undefined;\n selectedDepositAddressOption: DepositAddressPaymentOptionMetadata | undefined;\n getOrderUsdLimit: () => number;\n setPaymentWaitingMessage: (message: string | undefined) => void;\n tokenMode: \"evm\" | \"solana\" | \"all\";\n setTokenMode: (mode: \"evm\" | \"solana\" | \"all\") => void;\n setSelectedWallet: (wallet: WalletConfigProps | undefined) => void;\n setSelectedWalletDeepLink: (deepLink: string | undefined) => void;\n setSelectedExternalOption: (\n option: ExternalPaymentOptionMetadata | undefined,\n ) => void;\n setSelectedTokenOption: (option: WalletPaymentOption | undefined) => void;\n setSelectedSolanaTokenOption: (\n option: WalletPaymentOption | undefined,\n ) => void;\n setSelectedDepositAddressOption: (\n option: DepositAddressPaymentOptionMetadata | undefined,\n ) => void;\n setChosenUsd: (usd: number) => void;\n payWithToken: (\n walletOption: WalletPaymentOption,\n ) => Promise<{ txHash?: Hex; success: boolean }>;\n payWithExternal: (option: ExternalPaymentOptions) => Promise<string>;\n payWithDepositAddress: (\n option: DepositAddressPaymentOptions,\n ) => Promise<DepositAddressPaymentOptionData | null>;\n payWithSolanaToken: (\n inputToken: SolanaPublicKey,\n ) => Promise<{ txHash: string; success: boolean }>;\n openInWalletBrowser: (wallet: WalletConfigProps, amountUsd?: number) => void;\n senderEnsName: string | undefined;\n}\n\nexport function usePaymentState({\n trpc,\n lockPayParams,\n setRoute,\n log,\n redirectReturnUrl,\n}: {\n trpc: TrpcClient;\n lockPayParams: boolean;\n setRoute: (route: ROUTES, data?: Record<string, any>) => void;\n log: (...args: any[]) => void;\n redirectReturnUrl?: string;\n}): PaymentState {\n const pay = useDaimoPay();\n\n // Browser state.\n const [platform, setPlatform] = useState<PlatformType>();\n useEffect(() => {\n setPlatform(detectPlatform(window.navigator.userAgent));\n }, []);\n\n // Wallet state.\n const { address: ethWalletAddress } = useAccount();\n const { data: senderEnsName } = useEnsName({\n chainId: ethereum.chainId,\n address: ethWalletAddress,\n });\n const { sendTransactionAsync } = useSendTransaction();\n const { writeContractAsync } = useWriteContract();\n\n // Solana wallet state.\n const solanaWallet = useWallet();\n const { connection } = useConnection();\n const solanaPubKey = solanaWallet.publicKey?.toBase58();\n\n // From DaimoPayButton props\n const [buttonProps, setButtonProps] = useState<PayButtonPaymentProps>();\n const [currPayParams, setCurrPayParams] = useState<PayParams>();\n\n const [paymentWaitingMessage, setPaymentWaitingMessage] = useState<string>();\n const [isDepositFlow, setIsDepositFlow] = useState<boolean>(false);\n\n // UI state. Selection for external payment (Binance, etc) vs wallet payment.\n const externalPaymentOptions = useExternalPaymentOptions({\n trpc,\n // allow <DaimoPayButton payId={...} paymentOptions={override} />\n filterIds:\n buttonProps?.paymentOptions ?? pay.order?.metadata.payer?.paymentOptions,\n platform,\n usdRequired: pay.order?.destFinalCallTokenAmount.usd,\n mode: pay.order?.mode,\n });\n const walletPaymentOptions = useWalletPaymentOptions({\n trpc,\n address: ethWalletAddress,\n usdRequired: pay.order?.destFinalCallTokenAmount.usd,\n destChainId: pay.order?.destFinalCallTokenAmount.token.chainId,\n destAddress: pay.order?.destFinalCall.to,\n preferredChains: pay.order?.metadata.payer?.preferredChains,\n preferredTokens: pay.order?.metadata.payer?.preferredTokens,\n evmChains: pay.order?.metadata.payer?.evmChains,\n passthroughTokens: pay.order?.metadata.payer?.passthroughTokens,\n isDepositFlow,\n log,\n });\n const solanaPaymentOptions = useSolanaPaymentOptions({\n trpc,\n address: solanaPubKey,\n usdRequired: pay.order?.destFinalCallTokenAmount.usd,\n isDepositFlow,\n });\n const depositAddressOptions = useDepositAddressOptions({\n trpc,\n usdRequired: pay.order?.destFinalCallTokenAmount.usd,\n mode: pay.order?.mode,\n });\n\n // Poll for Untron receiver availability so components can disable unsupported chains promptly.\n const { available: untronAvailable } = useUntronAvailability({ trpc });\n\n const chainOrderUsdLimits = useOrderUsdLimits({ trpc });\n\n const [selectedExternalOption, setSelectedExternalOption] =\n useState<ExternalPaymentOptionMetadata>();\n\n const [selectedTokenOption, setSelectedTokenOption] =\n useState<WalletPaymentOption>();\n\n const [selectedSolanaTokenOption, setSelectedSolanaTokenOption] =\n useState<WalletPaymentOption>();\n\n const [selectedDepositAddressOption, setSelectedDepositAddressOption] =\n useState<DepositAddressPaymentOptionMetadata>();\n\n const [selectedWallet, setSelectedWallet] = useState<WalletConfigProps>();\n const [selectedWalletDeepLink, setSelectedWalletDeepLink] =\n useState<string>();\n\n const getOrderUsdLimit = () => {\n const DEFAULT_USD_LIMIT = 20000;\n if (pay.order == null || chainOrderUsdLimits.loading) {\n return DEFAULT_USD_LIMIT;\n }\n const destChainId = pay.order.destFinalCallTokenAmount.token.chainId;\n return destChainId in chainOrderUsdLimits.limits\n ? chainOrderUsdLimits.limits[destChainId]\n : DEFAULT_USD_LIMIT;\n };\n\n /** Commit to a token + amount = initiate payment. */\n const payWithToken = async (\n walletOption: WalletPaymentOption,\n ): Promise<{ txHash?: Hex; success: boolean }> => {\n assert(\n ethWalletAddress != null,\n `[PAY TOKEN] null ethWalletAddress when paying on ethereum`,\n );\n assert(\n pay.paymentState === \"preview\" ||\n pay.paymentState === \"unhydrated\" ||\n pay.paymentState === \"payment_unpaid\",\n `[PAY TOKEN] paymentState is ${pay.paymentState}, must be preview or unhydrated or payment_unpaid`,\n );\n\n let hydratedOrder: DaimoPayHydratedOrderWithOrg;\n const { required, fees } = walletOption;\n const paymentAmount = BigInt(required.amount) + BigInt(fees.amount);\n if (pay.paymentState !== \"payment_unpaid\") {\n assert(\n required.token.token === fees.token.token,\n `[PAY TOKEN] required token ${debugJson(required)} does not match fees token ${debugJson(fees)}`,\n );\n\n // Will refund to ethWalletAddress if refundAddress was not set in payParams\n const res = await pay.hydrateOrder(ethWalletAddress);\n hydratedOrder = res.order;\n\n log(\n `[PAY TOKEN] hydrated order: ${debugJson(\n hydratedOrder,\n )}, paying ${paymentAmount} of token ${required.token.token}`,\n );\n } else {\n hydratedOrder = pay.order;\n }\n\n const paymentTxHash = await (async () => {\n const dest = walletOption.passthroughAddress ?? hydratedOrder.intentAddr;\n try {\n if (isNativeToken(getAddress(required.token.token))) {\n return await sendTransactionAsync({\n to: dest,\n value: paymentAmount,\n });\n } else {\n return await writeContractAsync({\n abi: erc20Abi,\n address: getAddress(required.token.token),\n functionName: \"transfer\",\n args: [dest, paymentAmount],\n });\n }\n } catch (e) {\n console.error(`[PAY TOKEN] error sending token: ${e}`);\n throw e;\n }\n })();\n\n // Special case. Handle Rabby bug, where it returns the *Safe signature*\n // instead of a txHash for a queued, unsubmitted Safe transaction.\n if (!isHex(paymentTxHash) || paymentTxHash.length !== 66) {\n log(\n `[PAY TOKEN] wallet bug detected. ignoring invalid payment txHash: ${paymentTxHash}`,\n );\n return { success: true };\n }\n\n try {\n await pay.payEthSource({\n paymentTxHash,\n sourceChainId: required.token.chainId,\n payerAddress: ethWalletAddress,\n sourceToken: getAddress(required.token.token),\n sourceAmount: paymentAmount,\n });\n return { txHash: paymentTxHash, success: true };\n } catch {\n console.error(\n `[PAY TOKEN] could not verify payment tx on chain: ${paymentTxHash}`,\n );\n return { txHash: paymentTxHash, success: false };\n }\n };\n\n const payWithSolanaToken = async (\n inputToken: SolanaPublicKey,\n ): Promise<{ txHash: string; success: boolean }> => {\n const payerPublicKey = solanaWallet.publicKey;\n assert(\n payerPublicKey != null,\n \"[PAY SOLANA] null payerPublicKey when paying on solana\",\n );\n assert(\n pay.order?.id != null,\n \"[PAY SOLANA] null orderId when paying on solana\",\n );\n assert(\n pay.paymentState === \"preview\" ||\n pay.paymentState === \"unhydrated\" ||\n pay.paymentState === \"payment_unpaid\",\n `[PAY SOLANA] paymentState is ${pay.paymentState}, must be preview or unhydrated or payment_unpaid`,\n );\n\n let hydratedOrder: DaimoPayHydratedOrderWithOrg;\n if (pay.paymentState !== \"payment_unpaid\") {\n const res = await pay.hydrateOrder();\n hydratedOrder = res.order;\n\n log(\n `[PAY SOLANA] Hydrated order: ${JSON.stringify(\n hydratedOrder,\n )}, checking out with Solana ${inputToken}`,\n );\n } else {\n hydratedOrder = pay.order;\n }\n\n const paymentTxHash = await (async () => {\n try {\n const serializedTx = await trpc.getSolanaSwapAndBurnTx.query({\n orderId: pay.order.id.toString(),\n userPublicKey: assertNotNull(\n payerPublicKey,\n \"[PAY SOLANA] wallet.publicKey cannot be null\",\n ).toString(),\n inputTokenMint: inputToken,\n });\n const tx = VersionedTransaction.deserialize(hexToBytes(serializedTx));\n const txHash = await solanaWallet.sendTransaction(tx, connection);\n return txHash;\n } catch (e) {\n console.error(e);\n throw e;\n }\n })();\n\n try {\n await pay.paySolanaSource({\n paymentTxHash: paymentTxHash,\n sourceToken: inputToken,\n });\n return { txHash: paymentTxHash, success: true };\n } catch {\n console.error(\n `[PAY SOLANA] could not verify payment tx on chain: ${paymentTxHash}`,\n );\n return { txHash: paymentTxHash, success: false };\n }\n };\n\n const payWithExternal = async (option: ExternalPaymentOptions) => {\n assert(pay.order != null, \"[PAY EXTERNAL] order cannot be null\");\n assert(platform != null, \"[PAY EXTERNAL] platform cannot be null\");\n\n const { order } = await pay.hydrateOrder();\n const externalPaymentOptionData =\n await trpc.getExternalPaymentOptionData.query({\n id: order.id.toString(),\n externalPaymentOption: option,\n platform,\n redirectReturnUrl,\n });\n assert(\n externalPaymentOptionData != null,\n \"[PAY EXTERNAL] missing externalPaymentOptionData\",\n );\n\n log(\n `[PAY EXTERNAL] hydrated order: ${debugJson(\n order,\n )}, checking out with external payment: ${option}`,\n );\n\n setPaymentWaitingMessage(externalPaymentOptionData.waitingMessage);\n\n return externalPaymentOptionData.url;\n };\n\n const payWithDepositAddress = async (\n option: DepositAddressPaymentOptions,\n ) => {\n const { order } = await pay.hydrateOrder();\n\n log(\n `[PAY DEPOSIT ADDRESS] hydrated order ${order.id} for ${order.usdValue} USD, checking out with deposit address: ${option}`,\n );\n\n const result = await trpc.getDepositAddressForOrder.query({\n orderId: order.id.toString(),\n option,\n });\n\n return \"error\" in result ? null : result;\n };\n\n const { isIOS } = useIsMobile();\n\n const openInWalletBrowser = (\n wallet: WalletConfigProps,\n amountUsd?: number,\n ) => {\n const paymentState = pay.paymentState;\n assert(\n paymentState === \"payment_unpaid\",\n `[OPEN IN WALLET BROWSER] paymentState is ${paymentState}, must be payment_unpaid`,\n );\n assert(\n wallet.getDaimoPayDeeplink != null,\n `openInWalletBrowser: missing deeplink for ${wallet.name}`,\n );\n\n const payId = writeDaimoPayOrderID(pay.order.id);\n const deeplink = wallet.getDaimoPayDeeplink(payId);\n // If we are in IOS, we don't open the deeplink in a new window, because it\n // will not work, the link will be opened in the page WAITING_WALLET\n if (!isIOS) {\n window.open(deeplink, \"_blank\");\n }\n setSelectedWallet(wallet);\n setSelectedWalletDeepLink(deeplink);\n setRoute(ROUTES.WAITING_WALLET, {\n amountUsd,\n payId,\n wallet_name: wallet.name,\n });\n };\n\n /** User picked a different deposit amount. */\n const setChosenUsd = (usd: number) => {\n assert(\n pay.paymentState === \"preview\",\n \"[SET CHOSEN USD] paymentState is not preview\",\n );\n\n // Too expensive to make an API call to regenerate preview order each time\n // the user changes the amount. Instead, we modify the order in memory.\n pay.setChosenUsd(usd);\n };\n\n const setPayId = useCallback(\n async (payId: string | undefined) => {\n if (lockPayParams || payId == null) return;\n const id = readDaimoPayOrderID(payId).toString();\n\n if (pay.order?.id && BigInt(id) == pay.order.id) {\n // Already loaded, ignore.\n return;\n }\n\n pay.reset();\n pay.setPayId(payId);\n setIsDepositFlow(false);\n },\n [lockPayParams, pay],\n );\n\n /** Called whenever params change. */\n const setPayParams = async (payParams: PayParams | undefined) => {\n if (lockPayParams) return;\n assert(payParams != null, \"[SET PAY PARAMS] payParams cannot be null\");\n\n log(\"[SET PAY PARAMS] setting payParams\", payParams);\n pay.reset();\n setCurrPayParams(payParams);\n setIsDepositFlow(payParams.toUnits == null);\n await pay.createPreviewOrder(payParams);\n };\n\n const generatePreviewOrder = async () => {\n pay.reset();\n if (currPayParams == null) return;\n await pay.createPreviewOrder(currPayParams);\n };\n\n const resetOrder = useCallback(\n async (payParams?: Partial<PayParams>) => {\n const mergedPayParams: PayParams | undefined =\n payParams != null && currPayParams != null\n ? { ...currPayParams, ...payParams }\n : currPayParams;\n\n // Clear the old order & state\n pay.reset();\n setSelectedExternalOption(undefined);\n setSelectedTokenOption(undefined);\n setSelectedSolanaTokenOption(undefined);\n setSelectedDepositAddressOption(undefined);\n setSelectedWallet(undefined);\n setSelectedWalletDeepLink(undefined);\n setPaymentWaitingMessage(undefined);\n\n // Set the new payParams\n if (mergedPayParams) {\n setCurrPayParams(mergedPayParams);\n setIsDepositFlow(mergedPayParams.toUnits == null);\n await pay.createPreviewOrder(mergedPayParams);\n }\n\n setRoute(ROUTES.SELECT_METHOD);\n },\n [setRoute, pay, currPayParams],\n );\n\n const [tokenMode, setTokenMode] = useState<\"evm\" | \"solana\" | \"all\">(\"evm\");\n\n return {\n buttonProps,\n setButtonProps,\n setPayId,\n setPayParams,\n tokenMode,\n setTokenMode,\n generatePreviewOrder,\n isDepositFlow,\n paymentWaitingMessage,\n selectedExternalOption,\n selectedTokenOption,\n selectedSolanaTokenOption,\n externalPaymentOptions,\n selectedWallet,\n selectedWalletDeepLink,\n walletPaymentOptions,\n solanaPaymentOptions,\n depositAddressOptions,\n selectedDepositAddressOption,\n getOrderUsdLimit,\n resetOrder,\n setSelectedWallet,\n setSelectedWalletDeepLink,\n setPaymentWaitingMessage,\n setSelectedExternalOption,\n setSelectedTokenOption,\n setSelectedSolanaTokenOption,\n setSelectedDepositAddressOption,\n setChosenUsd,\n payWithToken,\n payWithExternal,\n payWithDepositAddress,\n payWithSolanaToken,\n openInWalletBrowser,\n senderEnsName: senderEnsName ?? undefined,\n untronAvailable,\n };\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AA+GO,SAAS,eAAgB,CAAA;AAAA,EAC9B,IAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,iBAAA;AACF,CAMiB,EAAA;AACf,EAAA,MAAM,MAAM,WAAY,EAAA,CAAA;AAGxB,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,QAAuB,EAAA,CAAA;AACvD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,WAAA,CAAY,cAAe,CAAA,MAAA,CAAO,SAAU,CAAA,SAAS,CAAC,CAAA,CAAA;AAAA,GACxD,EAAG,EAAE,CAAA,CAAA;AAGL,EAAA,MAAM,EAAE,OAAA,EAAS,gBAAiB,EAAA,GAAI,UAAW,EAAA,CAAA;AACjD,EAAA,MAAM,EAAE,IAAA,EAAM,aAAc,EAAA,GAAI,UAAW,CAAA;AAAA,IACzC,SAAS,QAAS,CAAA,OAAA;AAAA,IAClB,OAAS,EAAA,gBAAA;AAAA,GACV,CAAA,CAAA;AACD,EAAM,MAAA,EAAE,oBAAqB,EAAA,GAAI,kBAAmB,EAAA,CAAA;AACpD,EAAM,MAAA,EAAE,kBAAmB,EAAA,GAAI,gBAAiB,EAAA,CAAA;AAGhD,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAM,MAAA,EAAE,UAAW,EAAA,GAAI,aAAc,EAAA,CAAA;AACrC,EAAM,MAAA,YAAA,GAAe,YAAa,CAAA,SAAA,EAAW,QAAS,EAAA,CAAA;AAGtD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,QAAgC,EAAA,CAAA;AACtE,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,QAAoB,EAAA,CAAA;AAE9D,EAAA,MAAM,CAAC,qBAAA,EAAuB,wBAAwB,CAAA,GAAI,QAAiB,EAAA,CAAA;AAC3E,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAkB,KAAK,CAAA,CAAA;AAGjE,EAAA,MAAM,yBAAyB,yBAA0B,CAAA;AAAA,IACvD,IAAA;AAAA;AAAA,IAEA,WACE,WAAa,EAAA,cAAA,IAAkB,GAAI,CAAA,KAAA,EAAO,SAAS,KAAO,EAAA,cAAA;AAAA,IAC5D,QAAA;AAAA,IACA,WAAA,EAAa,GAAI,CAAA,KAAA,EAAO,wBAAyB,CAAA,GAAA;AAAA,IACjD,IAAA,EAAM,IAAI,KAAO,EAAA,IAAA;AAAA,GAClB,CAAA,CAAA;AACD,EAAA,MAAM,uBAAuB,uBAAwB,CAAA;AAAA,IACnD,IAAA;AAAA,IACA,OAAS,EAAA,gBAAA;AAAA,IACT,WAAA,EAAa,GAAI,CAAA,KAAA,EAAO,wBAAyB,CAAA,GAAA;AAAA,IACjD,WAAa,EAAA,GAAA,CAAI,KAAO,EAAA,wBAAA,CAAyB,KAAM,CAAA,OAAA;AAAA,IACvD,WAAA,EAAa,GAAI,CAAA,KAAA,EAAO,aAAc,CAAA,EAAA;AAAA,IACtC,eAAiB,EAAA,GAAA,CAAI,KAAO,EAAA,QAAA,CAAS,KAAO,EAAA,eAAA;AAAA,IAC5C,eAAiB,EAAA,GAAA,CAAI,KAAO,EAAA,QAAA,CAAS,KAAO,EAAA,eAAA;AAAA,IAC5C,SAAW,EAAA,GAAA,CAAI,KAAO,EAAA,QAAA,CAAS,KAAO,EAAA,SAAA;AAAA,IACtC,iBAAmB,EAAA,GAAA,CAAI,KAAO,EAAA,QAAA,CAAS,KAAO,EAAA,iBAAA;AAAA,IAC9C,aAAA;AAAA,IACA,GAAA;AAAA,GACD,CAAA,CAAA;AACD,EAAA,MAAM,uBAAuB,uBAAwB,CAAA;AAAA,IACnD,IAAA;AAAA,IACA,OAAS,EAAA,YAAA;AAAA,IACT,WAAA,EAAa,GAAI,CAAA,KAAA,EAAO,wBAAyB,CAAA,GAAA;AAAA,IACjD,aAAA;AAAA,GACD,CAAA,CAAA;AACD,EAAA,MAAM,wBAAwB,wBAAyB,CAAA;AAAA,IACrD,IAAA;AAAA,IACA,WAAA,EAAa,GAAI,CAAA,KAAA,EAAO,wBAAyB,CAAA,GAAA;AAAA,IACjD,IAAA,EAAM,IAAI,KAAO,EAAA,IAAA;AAAA,GAClB,CAAA,CAAA;AAGD,EAAA,MAAM,EAAE,SAAW,EAAA,eAAA,KAAoB,qBAAsB,CAAA,EAAE,MAAM,CAAA,CAAA;AAErE,EAAA,MAAM,mBAAsB,GAAA,iBAAA,CAAkB,EAAE,IAAA,EAAM,CAAA,CAAA;AAEtD,EAAA,MAAM,CAAC,sBAAA,EAAwB,yBAAyB,CAAA,GACtD,QAAwC,EAAA,CAAA;AAE1C,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAChD,QAA8B,EAAA,CAAA;AAEhC,EAAA,MAAM,CAAC,yBAAA,EAA2B,4BAA4B,CAAA,GAC5D,QAA8B,EAAA,CAAA;AAEhC,EAAA,MAAM,CAAC,4BAAA,EAA8B,+BAA+B,CAAA,GAClE,QAA8C,EAAA,CAAA;AAEhD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,QAA4B,EAAA,CAAA;AACxE,EAAA,MAAM,CAAC,sBAAA,EAAwB,yBAAyB,CAAA,GACtD,QAAiB,EAAA,CAAA;AAEnB,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,MAAM,iBAAoB,GAAA,GAAA,CAAA;AAC1B,IAAA,IAAI,GAAI,CAAA,KAAA,IAAS,IAAQ,IAAA,mBAAA,CAAoB,OAAS,EAAA;AACpD,MAAO,OAAA,iBAAA,CAAA;AAAA,KACT;AACA,IAAA,MAAM,WAAc,GAAA,GAAA,CAAI,KAAM,CAAA,wBAAA,CAAyB,KAAM,CAAA,OAAA,CAAA;AAC7D,IAAA,OAAO,eAAe,mBAAoB,CAAA,MAAA,GACtC,mBAAoB,CAAA,MAAA,CAAO,WAAW,CACtC,GAAA,iBAAA,CAAA;AAAA,GACN,CAAA;AAGA,EAAM,MAAA,YAAA,GAAe,OACnB,YACgD,KAAA;AAChD,IAAA,MAAA;AAAA,MACE,gBAAoB,IAAA,IAAA;AAAA,MACpB,CAAA,yDAAA,CAAA;AAAA,KACF,CAAA;AACA,IAAA,MAAA;AAAA,MACE,IAAI,YAAiB,KAAA,SAAA,IACnB,IAAI,YAAiB,KAAA,YAAA,IACrB,IAAI,YAAiB,KAAA,gBAAA;AAAA,MACvB,CAAA,4BAAA,EAA+B,IAAI,YAAY,CAAA,iDAAA,CAAA;AAAA,KACjD,CAAA;AAEA,IAAI,IAAA,aAAA,CAAA;AACJ,IAAM,MAAA,EAAE,QAAU,EAAA,IAAA,EAAS,GAAA,YAAA,CAAA;AAC3B,IAAA,MAAM,gBAAgB,MAAO,CAAA,QAAA,CAAS,MAAM,CAAI,GAAA,MAAA,CAAO,KAAK,MAAM,CAAA,CAAA;AAClE,IAAI,IAAA,GAAA,CAAI,iBAAiB,gBAAkB,EAAA;AACzC,MAAA,MAAA;AAAA,QACE,QAAS,CAAA,KAAA,CAAM,KAAU,KAAA,IAAA,CAAK,KAAM,CAAA,KAAA;AAAA,QACpC,8BAA8B,SAAU,CAAA,QAAQ,CAAC,CAA8B,2BAAA,EAAA,SAAA,CAAU,IAAI,CAAC,CAAA,CAAA;AAAA,OAChG,CAAA;AAGA,MAAA,MAAM,GAAM,GAAA,MAAM,GAAI,CAAA,YAAA,CAAa,gBAAgB,CAAA,CAAA;AACnD,MAAA,aAAA,GAAgB,GAAI,CAAA,KAAA,CAAA;AAEpB,MAAA,GAAA;AAAA,QACE,CAA+B,4BAAA,EAAA,SAAA;AAAA,UAC7B,aAAA;AAAA,SACD,CAAY,SAAA,EAAA,aAAa,CAAa,UAAA,EAAA,QAAA,CAAS,MAAM,KAAK,CAAA,CAAA;AAAA,OAC7D,CAAA;AAAA,KACK,MAAA;AACL,MAAA,aAAA,GAAgB,GAAI,CAAA,KAAA,CAAA;AAAA,KACtB;AAEA,IAAM,MAAA,aAAA,GAAgB,OAAO,YAAY;AACvC,MAAM,MAAA,IAAA,GAAO,YAAa,CAAA,kBAAA,IAAsB,aAAc,CAAA,UAAA,CAAA;AAC9D,MAAI,IAAA;AACF,QAAA,IAAI,cAAc,UAAW,CAAA,QAAA,CAAS,KAAM,CAAA,KAAK,CAAC,CAAG,EAAA;AACnD,UAAA,OAAO,MAAM,oBAAqB,CAAA;AAAA,YAChC,EAAI,EAAA,IAAA;AAAA,YACJ,KAAO,EAAA,aAAA;AAAA,WACR,CAAA,CAAA;AAAA,SACI,MAAA;AACL,UAAA,OAAO,MAAM,kBAAmB,CAAA;AAAA,YAC9B,GAAK,EAAA,QAAA;AAAA,YACL,OAAS,EAAA,UAAA,CAAW,QAAS,CAAA,KAAA,CAAM,KAAK,CAAA;AAAA,YACxC,YAAc,EAAA,UAAA;AAAA,YACd,IAAA,EAAM,CAAC,IAAA,EAAM,aAAa,CAAA;AAAA,WAC3B,CAAA,CAAA;AAAA,SACH;AAAA,eACO,CAAG,EAAA;AACV,QAAQ,OAAA,CAAA,KAAA,CAAM,CAAoC,iCAAA,EAAA,CAAC,CAAE,CAAA,CAAA,CAAA;AACrD,QAAM,MAAA,CAAA,CAAA;AAAA,OACR;AAAA,KACC,GAAA,CAAA;AAIH,IAAA,IAAI,CAAC,KAAM,CAAA,aAAa,CAAK,IAAA,aAAA,CAAc,WAAW,EAAI,EAAA;AACxD,MAAA,GAAA;AAAA,QACE,qEAAqE,aAAa,CAAA,CAAA;AAAA,OACpF,CAAA;AACA,MAAO,OAAA,EAAE,SAAS,IAAK,EAAA,CAAA;AAAA,KACzB;AAEA,IAAI,IAAA;AACF,MAAA,MAAM,IAAI,YAAa,CAAA;AAAA,QACrB,aAAA;AAAA,QACA,aAAA,EAAe,SAAS,KAAM,CAAA,OAAA;AAAA,QAC9B,YAAc,EAAA,gBAAA;AAAA,QACd,WAAa,EAAA,UAAA,CAAW,QAAS,CAAA,KAAA,CAAM,KAAK,CAAA;AAAA,QAC5C,YAAc,EAAA,aAAA;AAAA,OACf,CAAA,CAAA;AACD,MAAA,OAAO,EAAE,MAAA,EAAQ,aAAe,EAAA,OAAA,EAAS,IAAK,EAAA,CAAA;AAAA,KACxC,CAAA,MAAA;AACN,MAAQ,OAAA,CAAA,KAAA;AAAA,QACN,qDAAqD,aAAa,CAAA,CAAA;AAAA,OACpE,CAAA;AACA,MAAA,OAAO,EAAE,MAAA,EAAQ,aAAe,EAAA,OAAA,EAAS,KAAM,EAAA,CAAA;AAAA,KACjD;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,kBAAA,GAAqB,OACzB,UACkD,KAAA;AAClD,IAAA,MAAM,iBAAiB,YAAa,CAAA,SAAA,CAAA;AACpC,IAAA,MAAA;AAAA,MACE,cAAkB,IAAA,IAAA;AAAA,MAClB,wDAAA;AAAA,KACF,CAAA;AACA,IAAA,MAAA;AAAA,MACE,GAAA,CAAI,OAAO,EAAM,IAAA,IAAA;AAAA,MACjB,iDAAA;AAAA,KACF,CAAA;AACA,IAAA,MAAA;AAAA,MACE,IAAI,YAAiB,KAAA,SAAA,IACnB,IAAI,YAAiB,KAAA,YAAA,IACrB,IAAI,YAAiB,KAAA,gBAAA;AAAA,MACvB,CAAA,6BAAA,EAAgC,IAAI,YAAY,CAAA,iDAAA,CAAA;AAAA,KAClD,CAAA;AAEA,IAAI,IAAA,aAAA,CAAA;AACJ,IAAI,IAAA,GAAA,CAAI,iBAAiB,gBAAkB,EAAA;AACzC,MAAM,MAAA,GAAA,GAAM,MAAM,GAAA,CAAI,YAAa,EAAA,CAAA;AACnC,MAAA,aAAA,GAAgB,GAAI,CAAA,KAAA,CAAA;AAEpB,MAAA,GAAA;AAAA,QACE,gCAAgC,IAAK,CAAA,SAAA;AAAA,UACnC,aAAA;AAAA,SACD,8BAA8B,UAAU,CAAA,CAAA;AAAA,OAC3C,CAAA;AAAA,KACK,MAAA;AACL,MAAA,aAAA,GAAgB,GAAI,CAAA,KAAA,CAAA;AAAA,KACtB;AAEA,IAAM,MAAA,aAAA,GAAgB,OAAO,YAAY;AACvC,MAAI,IAAA;AACF,QAAA,MAAM,YAAe,GAAA,MAAM,IAAK,CAAA,sBAAA,CAAuB,KAAM,CAAA;AAAA,UAC3D,OAAS,EAAA,GAAA,CAAI,KAAM,CAAA,EAAA,CAAG,QAAS,EAAA;AAAA,UAC/B,aAAe,EAAA,aAAA;AAAA,YACb,cAAA;AAAA,YACA,8CAAA;AAAA,YACA,QAAS,EAAA;AAAA,UACX,cAAgB,EAAA,UAAA;AAAA,SACjB,CAAA,CAAA;AACD,QAAA,MAAM,EAAK,GAAA,oBAAA,CAAqB,WAAY,CAAA,UAAA,CAAW,YAAY,CAAC,CAAA,CAAA;AACpE,QAAA,MAAM,MAAS,GAAA,MAAM,YAAa,CAAA,eAAA,CAAgB,IAAI,UAAU,CAAA,CAAA;AAChE,QAAO,OAAA,MAAA,CAAA;AAAA,eACA,CAAG,EAAA;AACV,QAAA,OAAA,CAAQ,MAAM,CAAC,CAAA,CAAA;AACf,QAAM,MAAA,CAAA,CAAA;AAAA,OACR;AAAA,KACC,GAAA,CAAA;AAEH,IAAI,IAAA;AACF,MAAA,MAAM,IAAI,eAAgB,CAAA;AAAA,QACxB,aAAA;AAAA,QACA,WAAa,EAAA,UAAA;AAAA,OACd,CAAA,CAAA;AACD,MAAA,OAAO,EAAE,MAAA,EAAQ,aAAe,EAAA,OAAA,EAAS,IAAK,EAAA,CAAA;AAAA,KACxC,CAAA,MAAA;AACN,MAAQ,OAAA,CAAA,KAAA;AAAA,QACN,sDAAsD,aAAa,CAAA,CAAA;AAAA,OACrE,CAAA;AACA,MAAA,OAAO,EAAE,MAAA,EAAQ,aAAe,EAAA,OAAA,EAAS,KAAM,EAAA,CAAA;AAAA,KACjD;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,eAAA,GAAkB,OAAO,MAAmC,KAAA;AAChE,IAAO,MAAA,CAAA,GAAA,CAAI,KAAS,IAAA,IAAA,EAAM,qCAAqC,CAAA,CAAA;AAC/D,IAAO,MAAA,CAAA,QAAA,IAAY,MAAM,wCAAwC,CAAA,CAAA;AAEjE,IAAA,MAAM,EAAE,KAAA,EAAU,GAAA,MAAM,IAAI,YAAa,EAAA,CAAA;AACzC,IAAA,MAAM,yBACJ,GAAA,MAAM,IAAK,CAAA,4BAAA,CAA6B,KAAM,CAAA;AAAA,MAC5C,EAAA,EAAI,KAAM,CAAA,EAAA,CAAG,QAAS,EAAA;AAAA,MACtB,qBAAuB,EAAA,MAAA;AAAA,MACvB,QAAA;AAAA,MACA,iBAAA;AAAA,KACD,CAAA,CAAA;AACH,IAAA,MAAA;AAAA,MACE,yBAA6B,IAAA,IAAA;AAAA,MAC7B,kDAAA;AAAA,KACF,CAAA;AAEA,IAAA,GAAA;AAAA,MACE,CAAkC,+BAAA,EAAA,SAAA;AAAA,QAChC,KAAA;AAAA,OACD,yCAAyC,MAAM,CAAA,CAAA;AAAA,KAClD,CAAA;AAEA,IAAA,wBAAA,CAAyB,0BAA0B,cAAc,CAAA,CAAA;AAEjE,IAAA,OAAO,yBAA0B,CAAA,GAAA,CAAA;AAAA,GACnC,CAAA;AAEA,EAAM,MAAA,qBAAA,GAAwB,OAC5B,MACG,KAAA;AACH,IAAA,MAAM,EAAE,KAAA,EAAU,GAAA,MAAM,IAAI,YAAa,EAAA,CAAA;AAEzC,IAAA,GAAA;AAAA,MACE,wCAAwC,KAAM,CAAA,EAAE,QAAQ,KAAM,CAAA,QAAQ,4CAA4C,MAAM,CAAA,CAAA;AAAA,KAC1H,CAAA;AAEA,IAAA,MAAM,MAAS,GAAA,MAAM,IAAK,CAAA,yBAAA,CAA0B,KAAM,CAAA;AAAA,MACxD,OAAA,EAAS,KAAM,CAAA,EAAA,CAAG,QAAS,EAAA;AAAA,MAC3B,MAAA;AAAA,KACD,CAAA,CAAA;AAED,IAAO,OAAA,OAAA,IAAW,SAAS,IAAO,GAAA,MAAA,CAAA;AAAA,GACpC,CAAA;AAEA,EAAM,MAAA,EAAE,KAAM,EAAA,GAAI,WAAY,EAAA,CAAA;AAE9B,EAAM,MAAA,mBAAA,GAAsB,CAC1B,MAAA,EACA,SACG,KAAA;AACH,IAAA,MAAM,eAAe,GAAI,CAAA,YAAA,CAAA;AACzB,IAAA,MAAA;AAAA,MACE,YAAiB,KAAA,gBAAA;AAAA,MACjB,4CAA4C,YAAY,CAAA,wBAAA,CAAA;AAAA,KAC1D,CAAA;AACA,IAAA,MAAA;AAAA,MACE,OAAO,mBAAuB,IAAA,IAAA;AAAA,MAC9B,CAAA,0CAAA,EAA6C,OAAO,IAAI,CAAA,CAAA;AAAA,KAC1D,CAAA;AAEA,IAAA,MAAM,KAAQ,GAAA,oBAAA,CAAqB,GAAI,CAAA,KAAA,CAAM,EAAE,CAAA,CAAA;AAC/C,IAAM,MAAA,QAAA,GAAW,MAAO,CAAA,mBAAA,CAAoB,KAAK,CAAA,CAAA;AAGjD,IAAA,IAAI,CAAC,KAAO,EAAA;AACV,MAAO,MAAA,CAAA,IAAA,CAAK,UAAU,QAAQ,CAAA,CAAA;AAAA,KAChC;AACA,IAAA,iBAAA,CAAkB,MAAM,CAAA,CAAA;AACxB,IAAA,yBAAA,CAA0B,QAAQ,CAAA,CAAA;AAClC,IAAA,QAAA,CAAS,OAAO,cAAgB,EAAA;AAAA,MAC9B,SAAA;AAAA,MACA,KAAA;AAAA,MACA,aAAa,MAAO,CAAA,IAAA;AAAA,KACrB,CAAA,CAAA;AAAA,GACH,CAAA;AAGA,EAAM,MAAA,YAAA,GAAe,CAAC,GAAgB,KAAA;AACpC,IAAA,MAAA;AAAA,MACE,IAAI,YAAiB,KAAA,SAAA;AAAA,MACrB,8CAAA;AAAA,KACF,CAAA;AAIA,IAAA,GAAA,CAAI,aAAa,GAAG,CAAA,CAAA;AAAA,GACtB,CAAA;AAEA,EAAA,MAAM,QAAW,GAAA,WAAA;AAAA,IACf,OAAO,KAA8B,KAAA;AACnC,MAAI,IAAA,aAAA,IAAiB,SAAS,IAAM,EAAA,OAAA;AACpC,MAAA,MAAM,EAAK,GAAA,mBAAA,CAAoB,KAAK,CAAA,CAAE,QAAS,EAAA,CAAA;AAE/C,MAAI,IAAA,GAAA,CAAI,OAAO,EAAM,IAAA,MAAA,CAAO,EAAE,CAAK,IAAA,GAAA,CAAI,MAAM,EAAI,EAAA;AAE/C,QAAA,OAAA;AAAA,OACF;AAEA,MAAA,GAAA,CAAI,KAAM,EAAA,CAAA;AACV,MAAA,GAAA,CAAI,SAAS,KAAK,CAAA,CAAA;AAClB,MAAA,gBAAA,CAAiB,KAAK,CAAA,CAAA;AAAA,KACxB;AAAA,IACA,CAAC,eAAe,GAAG,CAAA;AAAA,GACrB,CAAA;AAGA,EAAM,MAAA,YAAA,GAAe,OAAO,SAAqC,KAAA;AAC/D,IAAA,IAAI,aAAe,EAAA,OAAA;AACnB,IAAO,MAAA,CAAA,SAAA,IAAa,MAAM,2CAA2C,CAAA,CAAA;AAErE,IAAA,GAAA,CAAI,sCAAsC,SAAS,CAAA,CAAA;AACnD,IAAA,GAAA,CAAI,KAAM,EAAA,CAAA;AACV,IAAA,gBAAA,CAAiB,SAAS,CAAA,CAAA;AAC1B,IAAiB,gBAAA,CAAA,SAAA,CAAU,WAAW,IAAI,CAAA,CAAA;AAC1C,IAAM,MAAA,GAAA,CAAI,mBAAmB,SAAS,CAAA,CAAA;AAAA,GACxC,CAAA;AAEA,EAAA,MAAM,uBAAuB,YAAY;AACvC,IAAA,GAAA,CAAI,KAAM,EAAA,CAAA;AACV,IAAA,IAAI,iBAAiB,IAAM,EAAA,OAAA;AAC3B,IAAM,MAAA,GAAA,CAAI,mBAAmB,aAAa,CAAA,CAAA;AAAA,GAC5C,CAAA;AAEA,EAAA,MAAM,UAAa,GAAA,WAAA;AAAA,IACjB,OAAO,SAAmC,KAAA;AACxC,MAAM,MAAA,eAAA,GACJ,SAAa,IAAA,IAAA,IAAQ,aAAiB,IAAA,IAAA,GAClC,EAAE,GAAG,aAAA,EAAe,GAAG,SAAA,EACvB,GAAA,aAAA,CAAA;AAGN,MAAA,GAAA,CAAI,KAAM,EAAA,CAAA;AACV,MAAA,yBAAA,CAA0B,KAAS,CAAA,CAAA,CAAA;AACnC,MAAA,sBAAA,CAAuB,KAAS,CAAA,CAAA,CAAA;AAChC,MAAA,4BAAA,CAA6B,KAAS,CAAA,CAAA,CAAA;AACtC,MAAA,+BAAA,CAAgC,KAAS,CAAA,CAAA,CAAA;AACzC,MAAA,iBAAA,CAAkB,KAAS,CAAA,CAAA,CAAA;AAC3B,MAAA,yBAAA,CAA0B,KAAS,CAAA,CAAA,CAAA;AACnC,MAAA,wBAAA,CAAyB,KAAS,CAAA,CAAA,CAAA;AAGlC,MAAA,IAAI,eAAiB,EAAA;AACnB,QAAA,gBAAA,CAAiB,eAAe,CAAA,CAAA;AAChC,QAAiB,gBAAA,CAAA,eAAA,CAAgB,WAAW,IAAI,CAAA,CAAA;AAChD,QAAM,MAAA,GAAA,CAAI,mBAAmB,eAAe,CAAA,CAAA;AAAA,OAC9C;AAEA,MAAA,QAAA,CAAS,OAAO,aAAa,CAAA,CAAA;AAAA,KAC/B;AAAA,IACA,CAAC,QAAU,EAAA,GAAA,EAAK,aAAa,CAAA;AAAA,GAC/B,CAAA;AAEA,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAmC,KAAK,CAAA,CAAA;AAE1E,EAAO,OAAA;AAAA,IACL,WAAA;AAAA,IACA,cAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA;AAAA,IACA,oBAAA;AAAA,IACA,aAAA;AAAA,IACA,qBAAA;AAAA,IACA,sBAAA;AAAA,IACA,mBAAA;AAAA,IACA,yBAAA;AAAA,IACA,sBAAA;AAAA,IACA,cAAA;AAAA,IACA,sBAAA;AAAA,IACA,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,qBAAA;AAAA,IACA,4BAAA;AAAA,IACA,gBAAA;AAAA,IACA,UAAA;AAAA,IACA,iBAAA;AAAA,IACA,yBAAA;AAAA,IACA,wBAAA;AAAA,IACA,yBAAA;AAAA,IACA,sBAAA;AAAA,IACA,4BAAA;AAAA,IACA,+BAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA,qBAAA;AAAA,IACA,kBAAA;AAAA,IACA,mBAAA;AAAA,IACA,eAAe,aAAiB,IAAA,KAAA,CAAA;AAAA,IAChC,eAAA;AAAA,GACF,CAAA;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"usePaymentState.js","sources":["../../../src/hooks/usePaymentState.ts"],"sourcesContent":["import {\n assert,\n assertNotNull,\n DaimoPayHydratedOrderWithOrg,\n debugJson,\n DepositAddressPaymentOptionData,\n DepositAddressPaymentOptionMetadata,\n DepositAddressPaymentOptions,\n ethereum,\n ExternalPaymentOptionMetadata,\n ExternalPaymentOptions,\n isNativeToken,\n PlatformType,\n readDaimoPayOrderID,\n SolanaPublicKey,\n WalletPaymentOption,\n writeDaimoPayOrderID,\n} from \"@daimo/pay-common\";\nimport { useConnection, useWallet } from \"@solana/wallet-adapter-react\";\nimport { VersionedTransaction } from \"@solana/web3.js\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { erc20Abi, getAddress, Hex, hexToBytes, isHex } from \"viem\";\nimport {\n useAccount,\n useEnsName,\n useSendTransaction,\n useWriteContract,\n} from \"wagmi\";\n\nimport { PayButtonPaymentProps } from \"../components/DaimoPayButton\";\nimport { ROUTES } from \"../constants/routes\";\nimport { PayParams } from \"../payment/paymentFsm\";\nimport { detectPlatform } from \"../utils/platform\";\nimport { TrpcClient } from \"../utils/trpc\";\nimport { WalletConfigProps } from \"../wallets/walletConfigs\";\nimport { useDaimoPay } from \"./useDaimoPay\";\nimport { useDepositAddressOptions } from \"./useDepositAddressOptions\";\nimport { useExternalPaymentOptions } from \"./useExternalPaymentOptions\";\nimport useIsMobile from \"./useIsMobile\";\nimport { useOrderUsdLimits } from \"./useOrderUsdLimits\";\nimport { useSolanaPaymentOptions } from \"./useSolanaPaymentOptions\";\nimport { useUntronAvailability } from \"./useUntronAvailability\";\nimport { useWalletPaymentOptions } from \"./useWalletPaymentOptions\";\n\n/** Wallet payment details, sent to processSourcePayment after submitting tx. */\nexport type SourcePayment = Parameters<\n TrpcClient[\"processSourcePayment\"][\"mutate\"]\n>[0];\n\n/** Creates (or loads) a payment and manages the corresponding modal. */\nexport interface PaymentState {\n generatePreviewOrder: () => void;\n resetOrder: (payParams?: Partial<PayParams>) => Promise<void>;\n\n /// DaimoPayButton props\n buttonProps: PayButtonPaymentProps | undefined;\n setButtonProps: (props: PayButtonPaymentProps | undefined) => void;\n\n /// Pay ID for loading an existing order\n setPayId: (id: string | undefined) => Promise<void>;\n /// Pay params for creating an order on the fly,\n setPayParams: (payParams: PayParams | undefined) => Promise<void>;\n\n /// True if the user is entering an amount (deposit) vs preset (checkout).\n isDepositFlow: boolean;\n paymentWaitingMessage: string | undefined;\n /// External payment options, loaded from server and filtered by EITHER\n /// 1. the DaimoPayButton paymentOptions, or 2. those of daimoPayOrder\n externalPaymentOptions: ReturnType<typeof useExternalPaymentOptions>;\n selectedWallet: WalletConfigProps | undefined;\n selectedWalletDeepLink: string | undefined;\n walletPaymentOptions: ReturnType<typeof useWalletPaymentOptions>;\n solanaPaymentOptions: ReturnType<typeof useSolanaPaymentOptions>;\n depositAddressOptions: ReturnType<typeof useDepositAddressOptions>;\n /** Whether Untron receivers are currently available. `null` when unknown. */\n untronAvailable: boolean | null;\n selectedExternalOption: ExternalPaymentOptionMetadata | undefined;\n selectedTokenOption: WalletPaymentOption | undefined;\n selectedSolanaTokenOption: WalletPaymentOption | undefined;\n selectedDepositAddressOption: DepositAddressPaymentOptionMetadata | undefined;\n getOrderUsdLimit: () => number;\n setPaymentWaitingMessage: (message: string | undefined) => void;\n tokenMode: \"evm\" | \"solana\" | \"all\";\n setTokenMode: (mode: \"evm\" | \"solana\" | \"all\") => void;\n setSelectedWallet: (wallet: WalletConfigProps | undefined) => void;\n setSelectedWalletDeepLink: (deepLink: string | undefined) => void;\n setSelectedExternalOption: (\n option: ExternalPaymentOptionMetadata | undefined,\n ) => void;\n setSelectedTokenOption: (option: WalletPaymentOption | undefined) => void;\n setSelectedSolanaTokenOption: (\n option: WalletPaymentOption | undefined,\n ) => void;\n setSelectedDepositAddressOption: (\n option: DepositAddressPaymentOptionMetadata | undefined,\n ) => void;\n setChosenUsd: (usd: number) => void;\n payWithToken: (\n walletOption: WalletPaymentOption,\n ) => Promise<{ txHash?: Hex; success: boolean }>;\n payWithExternal: (option: ExternalPaymentOptions) => Promise<string>;\n payWithDepositAddress: (\n option: DepositAddressPaymentOptions,\n ) => Promise<DepositAddressPaymentOptionData | null>;\n payWithSolanaToken: (\n inputToken: SolanaPublicKey,\n ) => Promise<{ txHash: string; success: boolean }>;\n openInWalletBrowser: (wallet: WalletConfigProps, amountUsd?: number) => void;\n senderEnsName: string | undefined;\n}\n\nexport function usePaymentState({\n trpc,\n lockPayParams,\n setRoute,\n log,\n redirectReturnUrl,\n}: {\n trpc: TrpcClient;\n lockPayParams: boolean;\n setRoute: (route: ROUTES, data?: Record<string, any>) => void;\n log: (...args: any[]) => void;\n redirectReturnUrl?: string;\n}): PaymentState {\n const pay = useDaimoPay();\n\n // Browser state.\n const [platform, setPlatform] = useState<PlatformType>();\n useEffect(() => {\n setPlatform(detectPlatform(window.navigator.userAgent));\n }, []);\n\n // Wallet state.\n const { address: ethWalletAddress } = useAccount();\n const { data: senderEnsName } = useEnsName({\n chainId: ethereum.chainId,\n address: ethWalletAddress,\n });\n const { sendTransactionAsync } = useSendTransaction();\n const { writeContractAsync } = useWriteContract();\n\n // Solana wallet state.\n const solanaWallet = useWallet();\n const { connection } = useConnection();\n const solanaPubKey = solanaWallet.publicKey?.toBase58();\n\n // From DaimoPayButton props\n const [buttonProps, setButtonProps] = useState<PayButtonPaymentProps>();\n const [currPayParams, setCurrPayParams] = useState<PayParams>();\n\n const [paymentWaitingMessage, setPaymentWaitingMessage] = useState<string>();\n const [isDepositFlow, setIsDepositFlow] = useState<boolean>(false);\n\n // UI state. Selection for external payment (Binance, etc) vs wallet payment.\n const externalPaymentOptions = useExternalPaymentOptions({\n trpc,\n // allow <DaimoPayButton payId={...} paymentOptions={override} />\n filterIds:\n buttonProps?.paymentOptions ?? pay.order?.metadata.payer?.paymentOptions,\n platform,\n usdRequired: pay.order?.destFinalCallTokenAmount.usd,\n mode: pay.order?.mode,\n });\n const walletPaymentOptions = useWalletPaymentOptions({\n trpc,\n address: ethWalletAddress,\n usdRequired: pay.order?.destFinalCallTokenAmount.usd,\n destChainId: pay.order?.destFinalCallTokenAmount.token.chainId,\n destAddress: pay.order?.destFinalCall.to,\n preferredChains: pay.order?.metadata.payer?.preferredChains,\n preferredTokens: pay.order?.metadata.payer?.preferredTokens,\n evmChains: pay.order?.metadata.payer?.evmChains,\n passthroughTokens: pay.order?.metadata.payer?.passthroughTokens,\n isDepositFlow,\n log,\n });\n const solanaPaymentOptions = useSolanaPaymentOptions({\n trpc,\n address: solanaPubKey,\n usdRequired: pay.order?.destFinalCallTokenAmount.usd,\n isDepositFlow,\n });\n const depositAddressOptions = useDepositAddressOptions({\n trpc,\n usdRequired: pay.order?.destFinalCallTokenAmount.usd,\n mode: pay.order?.mode,\n });\n\n // Poll for Untron receiver availability so components can disable unsupported chains promptly.\n const { available: untronAvailable } = useUntronAvailability({ trpc });\n\n const chainOrderUsdLimits = useOrderUsdLimits({ trpc });\n\n const [selectedExternalOption, setSelectedExternalOption] =\n useState<ExternalPaymentOptionMetadata>();\n\n const [selectedTokenOption, setSelectedTokenOption] =\n useState<WalletPaymentOption>();\n\n const [selectedSolanaTokenOption, setSelectedSolanaTokenOption] =\n useState<WalletPaymentOption>();\n\n const [selectedDepositAddressOption, setSelectedDepositAddressOption] =\n useState<DepositAddressPaymentOptionMetadata>();\n\n const [selectedWallet, setSelectedWallet] = useState<WalletConfigProps>();\n const [selectedWalletDeepLink, setSelectedWalletDeepLink] =\n useState<string>();\n\n const getOrderUsdLimit = () => {\n const DEFAULT_USD_LIMIT = 20000;\n if (pay.order == null || chainOrderUsdLimits.loading) {\n return DEFAULT_USD_LIMIT;\n }\n const destChainId = pay.order.destFinalCallTokenAmount.token.chainId;\n return destChainId in chainOrderUsdLimits.limits\n ? chainOrderUsdLimits.limits[destChainId]\n : DEFAULT_USD_LIMIT;\n };\n\n /** Commit to a token + amount = initiate payment. */\n const payWithToken = async (\n walletOption: WalletPaymentOption,\n ): Promise<{ txHash?: Hex; success: boolean }> => {\n assert(\n ethWalletAddress != null,\n `[PAY TOKEN] null ethWalletAddress when paying on ethereum`,\n );\n assert(\n pay.paymentState === \"preview\" ||\n pay.paymentState === \"unhydrated\" ||\n pay.paymentState === \"payment_unpaid\",\n `[PAY TOKEN] paymentState is ${pay.paymentState}, must be preview or unhydrated or payment_unpaid`,\n );\n\n let hydratedOrder: DaimoPayHydratedOrderWithOrg;\n const { required, fees } = walletOption;\n const paymentAmount = BigInt(required.amount) + BigInt(fees.amount);\n if (pay.paymentState !== \"payment_unpaid\") {\n assert(\n required.token.token === fees.token.token,\n `[PAY TOKEN] required token ${debugJson(required)} does not match fees token ${debugJson(fees)}`,\n );\n\n // Will refund to ethWalletAddress if refundAddress was not set in payParams\n const res = await pay.hydrateOrder(ethWalletAddress);\n hydratedOrder = res.order;\n\n log(\n `[PAY TOKEN] hydrated order: ${debugJson(\n hydratedOrder,\n )}, paying ${paymentAmount} of token ${required.token.token}`,\n );\n } else {\n hydratedOrder = pay.order;\n }\n\n const paymentTxHash = await (async () => {\n const dest = walletOption.passthroughAddress ?? hydratedOrder.intentAddr;\n try {\n if (isNativeToken(getAddress(required.token.token))) {\n return await sendTransactionAsync({\n to: dest,\n value: paymentAmount,\n });\n } else {\n return await writeContractAsync({\n abi: erc20Abi,\n address: getAddress(required.token.token),\n functionName: \"transfer\",\n args: [dest, paymentAmount],\n });\n }\n } catch (e) {\n console.error(`[PAY TOKEN] error sending token: ${e}`);\n throw e;\n }\n })();\n\n // Special case. Handle Rabby bug, where it returns the *Safe signature*\n // instead of a txHash for a queued, unsubmitted Safe transaction.\n if (!isHex(paymentTxHash) || paymentTxHash.length !== 66) {\n log(\n `[PAY TOKEN] wallet bug detected. ignoring invalid payment txHash: ${paymentTxHash}`,\n );\n return { success: true };\n }\n\n try {\n await pay.payEthSource({\n paymentTxHash,\n sourceChainId: required.token.chainId,\n payerAddress: ethWalletAddress,\n sourceToken: getAddress(required.token.token),\n sourceAmount: paymentAmount,\n });\n return { txHash: paymentTxHash, success: true };\n } catch {\n console.error(\n `[PAY TOKEN] could not verify payment tx on chain: ${paymentTxHash}`,\n );\n return { txHash: paymentTxHash, success: false };\n }\n };\n\n const payWithSolanaToken = async (\n inputToken: SolanaPublicKey,\n ): Promise<{ txHash: string; success: boolean }> => {\n const payerPublicKey = solanaWallet.publicKey;\n assert(\n payerPublicKey != null,\n \"[PAY SOLANA] null payerPublicKey when paying on solana\",\n );\n assert(\n pay.order?.id != null,\n \"[PAY SOLANA] null orderId when paying on solana\",\n );\n assert(\n pay.paymentState === \"preview\" ||\n pay.paymentState === \"unhydrated\" ||\n pay.paymentState === \"payment_unpaid\",\n `[PAY SOLANA] paymentState is ${pay.paymentState}, must be preview or unhydrated or payment_unpaid`,\n );\n\n let hydratedOrder: DaimoPayHydratedOrderWithOrg;\n if (pay.paymentState !== \"payment_unpaid\") {\n const res = await pay.hydrateOrder();\n hydratedOrder = res.order;\n\n log(\n `[PAY SOLANA] Hydrated order: ${JSON.stringify(\n hydratedOrder,\n )}, checking out with Solana ${inputToken}`,\n );\n } else {\n hydratedOrder = pay.order;\n }\n\n const paymentTxHash = await (async () => {\n try {\n const serializedTx = await trpc.getSolanaSwapAndBurnTx.query({\n orderId: pay.order.id.toString(),\n userPublicKey: assertNotNull(\n payerPublicKey,\n \"[PAY SOLANA] wallet.publicKey cannot be null\",\n ).toString(),\n inputTokenMint: inputToken,\n });\n const tx = VersionedTransaction.deserialize(hexToBytes(serializedTx));\n const txHash = await solanaWallet.sendTransaction(tx, connection);\n return txHash;\n } catch (e) {\n console.error(e);\n throw e;\n }\n })();\n\n try {\n await pay.paySolanaSource({\n paymentTxHash: paymentTxHash,\n sourceToken: inputToken,\n });\n return { txHash: paymentTxHash, success: true };\n } catch {\n console.error(\n `[PAY SOLANA] could not verify payment tx on chain: ${paymentTxHash}`,\n );\n return { txHash: paymentTxHash, success: false };\n }\n };\n\n const payWithExternal = async (option: ExternalPaymentOptions) => {\n assert(pay.order != null, \"[PAY EXTERNAL] order cannot be null\");\n assert(platform != null, \"[PAY EXTERNAL] platform cannot be null\");\n\n const { order } = await pay.hydrateOrder();\n const externalPaymentOptionData =\n await trpc.getExternalPaymentOptionData.query({\n id: order.id.toString(),\n externalPaymentOption: option,\n platform,\n redirectReturnUrl,\n });\n assert(\n externalPaymentOptionData != null,\n \"[PAY EXTERNAL] missing externalPaymentOptionData\",\n );\n\n log(\n `[PAY EXTERNAL] hydrated order: ${debugJson(\n order,\n )}, checking out with external payment: ${option}`,\n );\n\n setPaymentWaitingMessage(externalPaymentOptionData.waitingMessage);\n\n return externalPaymentOptionData.url;\n };\n\n const payWithDepositAddress = async (\n option: DepositAddressPaymentOptions,\n ) => {\n const { order } = await pay.hydrateOrder();\n\n log(\n `[PAY DEPOSIT ADDRESS] hydrated order ${order.id} for ${order.usdValue} USD, checking out with deposit address: ${option}`,\n );\n\n const result = await trpc.getDepositAddressForOrder.query({\n orderId: order.id.toString(),\n option,\n });\n\n return \"error\" in result ? null : result;\n };\n\n const { isIOS } = useIsMobile();\n\n const openInWalletBrowser = (\n wallet: WalletConfigProps,\n amountUsd?: number,\n ) => {\n const paymentState = pay.paymentState;\n assert(\n paymentState === \"payment_unpaid\",\n `[OPEN IN WALLET BROWSER] paymentState is ${paymentState}, must be payment_unpaid`,\n );\n assert(\n wallet.getDaimoPayDeeplink != null,\n `openInWalletBrowser: missing deeplink for ${wallet.name}`,\n );\n\n const payId = writeDaimoPayOrderID(pay.order.id);\n const deeplink = wallet.getDaimoPayDeeplink(payId);\n // If we are in IOS, we don't open the deeplink in a new window, because it\n // will not work, the link will be opened in the page WAITING_WALLET\n if (!isIOS) {\n window.open(deeplink, \"_blank\");\n }\n setSelectedWallet(wallet);\n setSelectedWalletDeepLink(deeplink);\n setRoute(ROUTES.WAITING_WALLET, {\n amountUsd,\n payId,\n wallet_name: wallet.name,\n });\n };\n\n /** User picked a different deposit amount. */\n const setChosenUsd = (usd: number) => {\n assert(\n pay.paymentState === \"preview\",\n \"[SET CHOSEN USD] paymentState is not preview\",\n );\n\n // Too expensive to make an API call to regenerate preview order each time\n // the user changes the amount. Instead, we modify the order in memory.\n pay.setChosenUsd(usd);\n };\n\n const setPayId = useCallback(\n async (payId: string | undefined) => {\n if (payId == null) return;\n const id = readDaimoPayOrderID(payId).toString();\n\n if (pay.order?.id && BigInt(id) == pay.order.id) {\n // Already loaded, ignore.\n return;\n }\n\n pay.reset();\n await pay.setPayId(payId);\n setIsDepositFlow(false);\n },\n [pay],\n );\n\n /** Called whenever params change. */\n const setPayParams = async (payParams: PayParams | undefined) => {\n if (lockPayParams) return;\n assert(payParams != null, \"[SET PAY PARAMS] payParams cannot be null\");\n\n log(\"[SET PAY PARAMS] setting payParams\", payParams);\n pay.reset();\n setCurrPayParams(payParams);\n setIsDepositFlow(payParams.toUnits == null);\n await pay.createPreviewOrder(payParams);\n };\n\n const generatePreviewOrder = async () => {\n pay.reset();\n if (currPayParams == null) return;\n await pay.createPreviewOrder(currPayParams);\n };\n\n const resetOrder = useCallback(\n async (payParams?: Partial<PayParams>) => {\n const mergedPayParams: PayParams | undefined =\n payParams != null && currPayParams != null\n ? { ...currPayParams, ...payParams }\n : currPayParams;\n\n // Clear the old order & state\n pay.reset();\n setSelectedExternalOption(undefined);\n setSelectedTokenOption(undefined);\n setSelectedSolanaTokenOption(undefined);\n setSelectedDepositAddressOption(undefined);\n setSelectedWallet(undefined);\n setSelectedWalletDeepLink(undefined);\n setPaymentWaitingMessage(undefined);\n\n // Set the new payParams\n if (mergedPayParams) {\n setCurrPayParams(mergedPayParams);\n setIsDepositFlow(mergedPayParams.toUnits == null);\n await pay.createPreviewOrder(mergedPayParams);\n }\n\n setRoute(ROUTES.SELECT_METHOD);\n },\n [setRoute, pay, currPayParams],\n );\n\n const [tokenMode, setTokenMode] = useState<\"evm\" | \"solana\" | \"all\">(\"evm\");\n\n return {\n buttonProps,\n setButtonProps,\n setPayId,\n setPayParams,\n tokenMode,\n setTokenMode,\n generatePreviewOrder,\n isDepositFlow,\n paymentWaitingMessage,\n selectedExternalOption,\n selectedTokenOption,\n selectedSolanaTokenOption,\n externalPaymentOptions,\n selectedWallet,\n selectedWalletDeepLink,\n walletPaymentOptions,\n solanaPaymentOptions,\n depositAddressOptions,\n selectedDepositAddressOption,\n getOrderUsdLimit,\n resetOrder,\n setSelectedWallet,\n setSelectedWalletDeepLink,\n setPaymentWaitingMessage,\n setSelectedExternalOption,\n setSelectedTokenOption,\n setSelectedSolanaTokenOption,\n setSelectedDepositAddressOption,\n setChosenUsd,\n payWithToken,\n payWithExternal,\n payWithDepositAddress,\n payWithSolanaToken,\n openInWalletBrowser,\n senderEnsName: senderEnsName ?? undefined,\n untronAvailable,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -110,7 +110,7 @@ function WorldPayButtonCustom(props) {
|
|
|
110
110
|
};
|
|
111
111
|
context.showPayment(modalOptions);
|
|
112
112
|
context.setRoute(ROUTES.CONFIRMATION);
|
|
113
|
-
}, [
|
|
113
|
+
}, [pay.order?.id, log, props.closeOnSuccess, props.resetOnSuccess]);
|
|
114
114
|
const show = useCallback(async () => {
|
|
115
115
|
log(`[WORLD] showing payment ${pay.order?.id}`);
|
|
116
116
|
if (!isMiniKitReady) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorldPayButton.js","sources":["../../../src/world-mini-app/WorldPayButton.tsx"],"sourcesContent":["import {\n assertNotNull,\n DaimoPayEventType,\n DaimoPayUserMetadata,\n getDaimoPayOrderView,\n getOrderDestChainId,\n getOrderSourceChainId,\n PaymentBouncedEvent,\n PaymentCompletedEvent,\n PaymentStartedEvent,\n writeDaimoPayOrderID,\n} from \"@daimo/pay-common\";\nimport { ReactElement, useCallback, useEffect, useRef, useState } from \"react\";\nimport { Address, Hex } from \"viem\";\nimport ThemedButton, {\n ThemeContainer,\n} from \"../components/Common/ThemedButton\";\nimport { DaimoPayButtonInner } from \"../components/DaimoPayButton\";\nimport { ROUTES } from \"../constants/routes\";\nimport { useDaimoPay } from \"../hooks/useDaimoPay\";\nimport { usePayContext } from \"../hooks/usePayContext\";\nimport { ResetContainer } from \"../styles\";\nimport { CustomTheme, Mode, Theme } from \"../types\";\nimport { promptWorldcoinPayment } from \"./promptWorldPayment\";\n\nimport { MiniKit } from \"@worldcoin/minikit-js\";\nimport useIsMobile from \"../hooks/useIsMobile\";\n\nexport type WorldPayButtonPaymentProps =\n | {\n /**\n * Your public app ID. Specify either (payId) or (appId + parameters).\n */\n appId: string;\n /**\n * Destination chain ID.\n */\n toChain: number;\n /**\n * The destination token to send, completing payment. Must be an ERC-20\n * token or the zero address, indicating the native token / ETH.\n */\n toToken: Address;\n /**\n * The amount of destination token to send (transfer or approve).\n */\n toUnits: string;\n /**\n * The destination address to transfer to, or contract to call.\n */\n toAddress: Address;\n /**\n * Optional calldata to call an arbitrary function on `toAddress`.\n */\n toCallData?: Hex;\n /**\n * The intent verb, such as \"Pay\", \"Deposit\", or \"Purchase\".\n */\n intent?: string;\n /**\n * External ID. E.g. a correlation ID.\n */\n externalId?: string;\n /**\n * Developer metadata. E.g. correlation ID.\n * */\n metadata?: DaimoPayUserMetadata;\n /**\n * The address to refund to if the payment bounces.\n */\n refundAddress?: Address;\n }\n | {\n /** The payment ID, generated via the Daimo Pay API. Replaces params above. */\n payId: string;\n };\n\ntype WorldPayButtonCommonProps = WorldPayButtonPaymentProps & {\n /** Called when user sends payment and transaction is seen on chain */\n onPaymentStarted?: (event: PaymentStartedEvent) => void;\n /** Called when destination transfer or call completes successfully */\n onPaymentCompleted?: (event: PaymentCompletedEvent) => void;\n /** Called when destination call reverts and funds are refunded */\n onPaymentBounced?: (event: PaymentBouncedEvent) => void;\n /** Open the modal by default. */\n defaultOpen?: boolean;\n /** Automatically close the modal after a successful payment. */\n closeOnSuccess?: boolean;\n /** Reset the payment after a successful payment. */\n resetOnSuccess?: boolean;\n};\n\nexport type WorldPayButtonProps = WorldPayButtonCommonProps & {\n /** Light mode, dark mode, or auto. */\n mode?: Mode;\n /** Named theme. See docs for options. */\n theme?: Theme;\n /** Custom theme. See docs for options. */\n customTheme?: CustomTheme;\n /** Disable interaction. */\n disabled?: boolean;\n};\n\nexport type WorldPayButtonCustomProps = WorldPayButtonCommonProps & {\n children: (renderProps: {\n show: () => void;\n isMiniKitReady: boolean;\n }) => ReactElement;\n};\n\nexport function WorldPayButton(props: WorldPayButtonProps) {\n const { theme, mode, customTheme } = props;\n const context = usePayContext();\n\n return (\n <WorldPayButtonCustom {...props}>\n {({ show, isMiniKitReady }) => (\n <ResetContainer\n $useTheme={theme ?? context.theme}\n $useMode={mode ?? context.mode}\n $customTheme={customTheme ?? context.customTheme}\n >\n <ThemeContainer\n onClick={props.disabled || !isMiniKitReady ? undefined : show}\n >\n <ThemedButton>\n <DaimoPayButtonInner />\n </ThemedButton>\n </ThemeContainer>\n </ResetContainer>\n )}\n </WorldPayButtonCustom>\n );\n}\n\nfunction WorldPayButtonCustom(props: WorldPayButtonCustomProps) {\n const pay = useDaimoPay();\n const context = usePayContext();\n const { paymentState, log } = context;\n const [isMiniKitReady, setIsMiniKitReady] = useState(false);\n const { isIOS } = useIsMobile();\n\n // Payment events: call these three event handlers.\n const { onPaymentStarted, onPaymentCompleted, onPaymentBounced } = props;\n\n // Install Minikit if not already installed\n useEffect(() => {\n log(\"[WORLD] Installing MiniKit\");\n const result = MiniKit.install();\n log(\"[WORLD] MiniKit install result\", result);\n log(\"[WORLD] MiniKit is installed\", MiniKit.isInstalled());\n setIsMiniKitReady(MiniKit.isInstalled());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Set the payParams\n useEffect(() => {\n if (\"payId\" in props) {\n log(\"[WORLD] Using payId from props: \", props.payId);\n paymentState.setPayId(props.payId);\n } else {\n log(\"[WORLD] Creating preview order\");\n paymentState.setPayParams(props);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(props || {})]);\n\n // Set the showContactSupport flag\n useEffect(() => {\n // Links are broken on iOS in World App, so hide the contact support button\n context.setShowContactSupport(!isIOS);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isIOS]);\n\n // Open the modal by default if the defaultOpen prop is true\n const hasAutoOpened = useRef(false);\n useEffect(() => {\n if (!props.defaultOpen || hasAutoOpened.current) return;\n if (pay.order == null) return;\n show();\n hasAutoOpened.current = true;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pay.order, props.defaultOpen, hasAutoOpened.current]);\n\n // Emit onPaymentStart handler when payment state changes to payment_started\n const sentStart = useRef(false);\n useEffect(() => {\n if (sentStart.current) return;\n if (pay.paymentState !== \"payment_started\") return;\n\n // TODO: Populate source payment details immediately when the user pays.\n // Use this hack because source chain id is not immediately populated when\n // payment_started\n const sourceChainId = getOrderSourceChainId(pay.order);\n if (sourceChainId == null) return;\n\n sentStart.current = true;\n onPaymentStarted?.({\n type: DaimoPayEventType.PaymentStarted,\n paymentId: writeDaimoPayOrderID(pay.order.id),\n chainId: sourceChainId,\n txHash: pay.order.sourceInitiateTxHash,\n payment: getDaimoPayOrderView(pay.order),\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pay.order, pay.paymentState]);\n\n // Emit onPaymentComplete or onPaymentBounced handler when payment state\n // changes to payment_completed or payment_bounced\n const sentComplete = useRef(false);\n useEffect(() => {\n if (sentComplete.current) return;\n if (\n pay.paymentState !== \"payment_completed\" &&\n pay.paymentState !== \"payment_bounced\"\n )\n return;\n\n sentComplete.current = true;\n const eventType =\n pay.paymentState === \"payment_completed\"\n ? DaimoPayEventType.PaymentCompleted\n : DaimoPayEventType.PaymentBounced;\n const event = {\n type: eventType,\n paymentId: writeDaimoPayOrderID(pay.order.id),\n chainId: getOrderDestChainId(pay.order),\n txHash: assertNotNull(\n pay.order.destFastFinishTxHash ?? pay.order.destClaimTxHash,\n `[WORLD PAY BUTTON] dest tx hash null on order ${pay.order.id} when intent status is ${pay.order.intentStatus}`,\n ),\n payment: getDaimoPayOrderView(pay.order),\n };\n\n if (pay.paymentState === \"payment_completed\") {\n onPaymentCompleted?.(event as PaymentCompletedEvent);\n } else if (pay.paymentState === \"payment_bounced\") {\n onPaymentBounced?.(event as PaymentBouncedEvent);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pay.order, pay.paymentState]);\n\n // Navigate to the confirmation page in the modal to show the spinner\n const showSpinner = useCallback(() => {\n log(`[WORLD] showing spinner ${pay.order?.id}`);\n const modalOptions = {\n closeOnSuccess: props.closeOnSuccess,\n resetOnSuccess: props.resetOnSuccess,\n };\n context.showPayment(modalOptions);\n context.setRoute(ROUTES.CONFIRMATION);\n }, [context, pay.order?.id, log, props.closeOnSuccess, props.resetOnSuccess]);\n\n // Show the Worldcoin payment drawer and pop open the Daimo Pay modal\n const show = useCallback(async () => {\n log(`[WORLD] showing payment ${pay.order?.id}`);\n if (!isMiniKitReady) {\n console.error(\n \"[WORLD] MiniKit is not installed. Please install @worldcoin/minikit-js to use this feature.\",\n );\n return;\n }\n if (pay.paymentState === \"error\") {\n log(\"[WORLD] showing payment error page\");\n const modalOptions = {\n closeOnSuccess: props.closeOnSuccess,\n resetOnSuccess: props.resetOnSuccess,\n };\n context.showPayment(modalOptions);\n return;\n }\n\n if (\n [\"payment_started\", \"payment_completed\", \"payment_bounced\"].includes(\n pay.paymentState,\n )\n ) {\n showSpinner();\n return;\n }\n\n log(`[WORLD] hydrating order ${pay.order?.id}`);\n const { order } = await pay.hydrateOrder();\n log(\n `[WORLD] hydrated order ${pay.order?.id}. Prompting payment with MiniKit`,\n );\n const payRes = await promptWorldcoinPayment(order, context.trpc);\n if (payRes == null || payRes.finalPayload.status == \"error\") {\n log(\"[WORLD] Failed to prompt Worldcoin payment: \", payRes);\n return;\n }\n\n log(`[WORLD] triggering payment search on ${pay.order?.id}`);\n pay.paySource();\n\n // Optimistically assume the source payment is correct and show the\n // confirmation spinner\n showSpinner();\n // eslint-disable-next-line\n }, [\n pay,\n showSpinner,\n context.trpc,\n isMiniKitReady,\n log,\n props.closeOnSuccess,\n props.resetOnSuccess,\n ]);\n\n return props.children({ show, isMiniKitReady });\n}\n\nWorldPayButtonCustom.displayName = \"WorldPayButton.Custom\";\n\nWorldPayButton.Custom = WorldPayButtonCustom;\n"],"names":[],"mappings":";;;;;;;;;;;;;;AA8GO,SAAS,eAAe,KAA4B,EAAA;AACzD,EAAA,MAAM,EAAE,KAAA,EAAO,IAAM,EAAA,WAAA,EAAgB,GAAA,KAAA,CAAA;AACrC,EAAA,MAAM,UAAU,aAAc,EAAA,CAAA;AAE9B,EACE,uBAAA,GAAA,CAAC,wBAAsB,GAAG,KAAA,EACvB,WAAC,EAAE,IAAA,EAAM,gBACR,qBAAA,GAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,SAAS,OAAQ,CAAA,KAAA;AAAA,MAC5B,QAAA,EAAU,QAAQ,OAAQ,CAAA,IAAA;AAAA,MAC1B,YAAA,EAAc,eAAe,OAAQ,CAAA,WAAA;AAAA,MAErC,QAAA,kBAAA,GAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,OAAS,EAAA,KAAA,CAAM,QAAY,IAAA,CAAC,iBAAiB,KAAY,CAAA,GAAA,IAAA;AAAA,UAEzD,QAAC,kBAAA,GAAA,CAAA,YAAA,EAAA,EACC,QAAC,kBAAA,GAAA,CAAA,mBAAA,EAAA,EAAoB,CACvB,EAAA,CAAA;AAAA,SAAA;AAAA,OACF;AAAA,KAAA;AAAA,GAGN,EAAA,CAAA,CAAA;AAEJ,CAAA;AAEA,SAAS,qBAAqB,KAAkC,EAAA;AAC9D,EAAA,MAAM,MAAM,WAAY,EAAA,CAAA;AACxB,EAAA,MAAM,UAAU,aAAc,EAAA,CAAA;AAC9B,EAAM,MAAA,EAAE,YAAc,EAAA,GAAA,EAAQ,GAAA,OAAA,CAAA;AAC9B,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AAC1D,EAAM,MAAA,EAAE,KAAM,EAAA,GAAI,WAAY,EAAA,CAAA;AAG9B,EAAA,MAAM,EAAE,gBAAA,EAAkB,kBAAoB,EAAA,gBAAA,EAAqB,GAAA,KAAA,CAAA;AAGnE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,GAAA,CAAI,4BAA4B,CAAA,CAAA;AAChC,IAAM,MAAA,MAAA,GAAS,QAAQ,OAAQ,EAAA,CAAA;AAC/B,IAAA,GAAA,CAAI,kCAAkC,MAAM,CAAA,CAAA;AAC5C,IAAI,GAAA,CAAA,8BAAA,EAAgC,OAAQ,CAAA,WAAA,EAAa,CAAA,CAAA;AACzD,IAAkB,iBAAA,CAAA,OAAA,CAAQ,aAAa,CAAA,CAAA;AAAA,GAEzC,EAAG,EAAE,CAAA,CAAA;AAGL,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,WAAW,KAAO,EAAA;AACpB,MAAI,GAAA,CAAA,kCAAA,EAAoC,MAAM,KAAK,CAAA,CAAA;AACnD,MAAa,YAAA,CAAA,QAAA,CAAS,MAAM,KAAK,CAAA,CAAA;AAAA,KAC5B,MAAA;AACL,MAAA,GAAA,CAAI,gCAAgC,CAAA,CAAA;AACpC,MAAA,YAAA,CAAa,aAAa,KAAK,CAAA,CAAA;AAAA,KACjC;AAAA,GAEF,EAAG,CAAC,IAAK,CAAA,SAAA,CAAU,SAAS,EAAE,CAAC,CAAC,CAAA,CAAA;AAGhC,EAAA,SAAA,CAAU,MAAM;AAEd,IAAQ,OAAA,CAAA,qBAAA,CAAsB,CAAC,KAAK,CAAA,CAAA;AAAA,GAEtC,EAAG,CAAC,KAAK,CAAC,CAAA,CAAA;AAGV,EAAM,MAAA,aAAA,GAAgB,OAAO,KAAK,CAAA,CAAA;AAClC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,KAAA,CAAM,WAAe,IAAA,aAAA,CAAc,OAAS,EAAA,OAAA;AACjD,IAAI,IAAA,GAAA,CAAI,SAAS,IAAM,EAAA,OAAA;AACvB,IAAK,IAAA,EAAA,CAAA;AACL,IAAA,aAAA,CAAc,OAAU,GAAA,IAAA,CAAA;AAAA,GAE1B,EAAG,CAAC,GAAI,CAAA,KAAA,EAAO,MAAM,WAAa,EAAA,aAAA,CAAc,OAAO,CAAC,CAAA,CAAA;AAGxD,EAAM,MAAA,SAAA,GAAY,OAAO,KAAK,CAAA,CAAA;AAC9B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,UAAU,OAAS,EAAA,OAAA;AACvB,IAAI,IAAA,GAAA,CAAI,iBAAiB,iBAAmB,EAAA,OAAA;AAK5C,IAAM,MAAA,aAAA,GAAgB,qBAAsB,CAAA,GAAA,CAAI,KAAK,CAAA,CAAA;AACrD,IAAA,IAAI,iBAAiB,IAAM,EAAA,OAAA;AAE3B,IAAA,SAAA,CAAU,OAAU,GAAA,IAAA,CAAA;AACpB,IAAmB,gBAAA,GAAA;AAAA,MACjB,MAAM,iBAAkB,CAAA,cAAA;AAAA,MACxB,SAAW,EAAA,oBAAA,CAAqB,GAAI,CAAA,KAAA,CAAM,EAAE,CAAA;AAAA,MAC5C,OAAS,EAAA,aAAA;AAAA,MACT,MAAA,EAAQ,IAAI,KAAM,CAAA,oBAAA;AAAA,MAClB,OAAA,EAAS,oBAAqB,CAAA,GAAA,CAAI,KAAK,CAAA;AAAA,KACxC,CAAA,CAAA;AAAA,KAEA,CAAC,GAAA,CAAI,KAAO,EAAA,GAAA,CAAI,YAAY,CAAC,CAAA,CAAA;AAIhC,EAAM,MAAA,YAAA,GAAe,OAAO,KAAK,CAAA,CAAA;AACjC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,aAAa,OAAS,EAAA,OAAA;AAC1B,IAAA,IACE,GAAI,CAAA,YAAA,KAAiB,mBACrB,IAAA,GAAA,CAAI,YAAiB,KAAA,iBAAA;AAErB,MAAA,OAAA;AAEF,IAAA,YAAA,CAAa,OAAU,GAAA,IAAA,CAAA;AACvB,IAAA,MAAM,YACJ,GAAI,CAAA,YAAA,KAAiB,mBACjB,GAAA,iBAAA,CAAkB,mBAClB,iBAAkB,CAAA,cAAA,CAAA;AACxB,IAAA,MAAM,KAAQ,GAAA;AAAA,MACZ,IAAM,EAAA,SAAA;AAAA,MACN,SAAW,EAAA,oBAAA,CAAqB,GAAI,CAAA,KAAA,CAAM,EAAE,CAAA;AAAA,MAC5C,OAAA,EAAS,mBAAoB,CAAA,GAAA,CAAI,KAAK,CAAA;AAAA,MACtC,MAAQ,EAAA,aAAA;AAAA,QACN,GAAI,CAAA,KAAA,CAAM,oBAAwB,IAAA,GAAA,CAAI,KAAM,CAAA,eAAA;AAAA,QAC5C,iDAAiD,GAAI,CAAA,KAAA,CAAM,EAAE,CAA0B,uBAAA,EAAA,GAAA,CAAI,MAAM,YAAY,CAAA,CAAA;AAAA,OAC/G;AAAA,MACA,OAAA,EAAS,oBAAqB,CAAA,GAAA,CAAI,KAAK,CAAA;AAAA,KACzC,CAAA;AAEA,IAAI,IAAA,GAAA,CAAI,iBAAiB,mBAAqB,EAAA;AAC5C,MAAA,kBAAA,GAAqB,KAA8B,CAAA,CAAA;AAAA,KACrD,MAAA,IAAW,GAAI,CAAA,YAAA,KAAiB,iBAAmB,EAAA;AACjD,MAAA,gBAAA,GAAmB,KAA4B,CAAA,CAAA;AAAA,KACjD;AAAA,KAEC,CAAC,GAAA,CAAI,KAAO,EAAA,GAAA,CAAI,YAAY,CAAC,CAAA,CAAA;AAGhC,EAAM,MAAA,WAAA,GAAc,YAAY,MAAM;AACpC,IAAA,GAAA,CAAI,CAA2B,wBAAA,EAAA,GAAA,CAAI,KAAO,EAAA,EAAE,CAAE,CAAA,CAAA,CAAA;AAC9C,IAAA,MAAM,YAAe,GAAA;AAAA,MACnB,gBAAgB,KAAM,CAAA,cAAA;AAAA,MACtB,gBAAgB,KAAM,CAAA,cAAA;AAAA,KACxB,CAAA;AACA,IAAA,OAAA,CAAQ,YAAY,YAAY,CAAA,CAAA;AAChC,IAAQ,OAAA,CAAA,QAAA,CAAS,OAAO,YAAY,CAAA,CAAA;AAAA,GACtC,EAAG,CAAC,OAAA,EAAS,GAAI,CAAA,KAAA,EAAO,EAAI,EAAA,GAAA,EAAK,KAAM,CAAA,cAAA,EAAgB,KAAM,CAAA,cAAc,CAAC,CAAA,CAAA;AAG5E,EAAM,MAAA,IAAA,GAAO,YAAY,YAAY;AACnC,IAAA,GAAA,CAAI,CAA2B,wBAAA,EAAA,GAAA,CAAI,KAAO,EAAA,EAAE,CAAE,CAAA,CAAA,CAAA;AAC9C,IAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,MAAQ,OAAA,CAAA,KAAA;AAAA,QACN,6FAAA;AAAA,OACF,CAAA;AACA,MAAA,OAAA;AAAA,KACF;AACA,IAAI,IAAA,GAAA,CAAI,iBAAiB,OAAS,EAAA;AAChC,MAAA,GAAA,CAAI,oCAAoC,CAAA,CAAA;AACxC,MAAA,MAAM,YAAe,GAAA;AAAA,QACnB,gBAAgB,KAAM,CAAA,cAAA;AAAA,QACtB,gBAAgB,KAAM,CAAA,cAAA;AAAA,OACxB,CAAA;AACA,MAAA,OAAA,CAAQ,YAAY,YAAY,CAAA,CAAA;AAChC,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,IACE,CAAC,iBAAA,EAAmB,mBAAqB,EAAA,iBAAiB,CAAE,CAAA,QAAA;AAAA,MAC1D,GAAI,CAAA,YAAA;AAAA,KAEN,EAAA;AACA,MAAY,WAAA,EAAA,CAAA;AACZ,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,GAAA,CAAI,CAA2B,wBAAA,EAAA,GAAA,CAAI,KAAO,EAAA,EAAE,CAAE,CAAA,CAAA,CAAA;AAC9C,IAAA,MAAM,EAAE,KAAA,EAAU,GAAA,MAAM,IAAI,YAAa,EAAA,CAAA;AACzC,IAAA,GAAA;AAAA,MACE,CAAA,uBAAA,EAA0B,GAAI,CAAA,KAAA,EAAO,EAAE,CAAA,gCAAA,CAAA;AAAA,KACzC,CAAA;AACA,IAAA,MAAM,MAAS,GAAA,MAAM,sBAAuB,CAAA,KAAA,EAAO,QAAQ,IAAI,CAAA,CAAA;AAC/D,IAAA,IAAI,MAAU,IAAA,IAAA,IAAQ,MAAO,CAAA,YAAA,CAAa,UAAU,OAAS,EAAA;AAC3D,MAAA,GAAA,CAAI,gDAAgD,MAAM,CAAA,CAAA;AAC1D,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,GAAA,CAAI,CAAwC,qCAAA,EAAA,GAAA,CAAI,KAAO,EAAA,EAAE,CAAE,CAAA,CAAA,CAAA;AAC3D,IAAA,GAAA,CAAI,SAAU,EAAA,CAAA;AAId,IAAY,WAAA,EAAA,CAAA;AAAA,GAEX,EAAA;AAAA,IACD,GAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAQ,CAAA,IAAA;AAAA,IACR,cAAA;AAAA,IACA,GAAA;AAAA,IACA,KAAM,CAAA,cAAA;AAAA,IACN,KAAM,CAAA,cAAA;AAAA,GACP,CAAA,CAAA;AAED,EAAA,OAAO,KAAM,CAAA,QAAA,CAAS,EAAE,IAAA,EAAM,gBAAgB,CAAA,CAAA;AAChD,CAAA;AAEA,oBAAA,CAAqB,WAAc,GAAA,uBAAA,CAAA;AAEnC,cAAA,CAAe,MAAS,GAAA,oBAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"WorldPayButton.js","sources":["../../../src/world-mini-app/WorldPayButton.tsx"],"sourcesContent":["import {\n assertNotNull,\n DaimoPayEventType,\n DaimoPayUserMetadata,\n getDaimoPayOrderView,\n getOrderDestChainId,\n getOrderSourceChainId,\n PaymentBouncedEvent,\n PaymentCompletedEvent,\n PaymentStartedEvent,\n writeDaimoPayOrderID,\n} from \"@daimo/pay-common\";\nimport { ReactElement, useCallback, useEffect, useRef, useState } from \"react\";\nimport { Address, Hex } from \"viem\";\nimport ThemedButton, {\n ThemeContainer,\n} from \"../components/Common/ThemedButton\";\nimport { DaimoPayButtonInner } from \"../components/DaimoPayButton\";\nimport { ROUTES } from \"../constants/routes\";\nimport { useDaimoPay } from \"../hooks/useDaimoPay\";\nimport { usePayContext } from \"../hooks/usePayContext\";\nimport { ResetContainer } from \"../styles\";\nimport { CustomTheme, Mode, Theme } from \"../types\";\nimport { promptWorldcoinPayment } from \"./promptWorldPayment\";\n\nimport { MiniKit } from \"@worldcoin/minikit-js\";\nimport useIsMobile from \"../hooks/useIsMobile\";\n\nexport type WorldPayButtonPaymentProps =\n | {\n /**\n * Your public app ID. Specify either (payId) or (appId + parameters).\n */\n appId: string;\n /**\n * Destination chain ID.\n */\n toChain: number;\n /**\n * The destination token to send, completing payment. Must be an ERC-20\n * token or the zero address, indicating the native token / ETH.\n */\n toToken: Address;\n /**\n * The amount of destination token to send (transfer or approve).\n */\n toUnits: string;\n /**\n * The destination address to transfer to, or contract to call.\n */\n toAddress: Address;\n /**\n * Optional calldata to call an arbitrary function on `toAddress`.\n */\n toCallData?: Hex;\n /**\n * The intent verb, such as \"Pay\", \"Deposit\", or \"Purchase\".\n */\n intent?: string;\n /**\n * External ID. E.g. a correlation ID.\n */\n externalId?: string;\n /**\n * Developer metadata. E.g. correlation ID.\n * */\n metadata?: DaimoPayUserMetadata;\n /**\n * The address to refund to if the payment bounces.\n */\n refundAddress?: Address;\n }\n | {\n /** The payment ID, generated via the Daimo Pay API. Replaces params above. */\n payId: string;\n };\n\ntype WorldPayButtonCommonProps = WorldPayButtonPaymentProps & {\n /** Called when user sends payment and transaction is seen on chain */\n onPaymentStarted?: (event: PaymentStartedEvent) => void;\n /** Called when destination transfer or call completes successfully */\n onPaymentCompleted?: (event: PaymentCompletedEvent) => void;\n /** Called when destination call reverts and funds are refunded */\n onPaymentBounced?: (event: PaymentBouncedEvent) => void;\n /** Open the modal by default. */\n defaultOpen?: boolean;\n /** Automatically close the modal after a successful payment. */\n closeOnSuccess?: boolean;\n /** Reset the payment after a successful payment. */\n resetOnSuccess?: boolean;\n};\n\nexport type WorldPayButtonProps = WorldPayButtonCommonProps & {\n /** Light mode, dark mode, or auto. */\n mode?: Mode;\n /** Named theme. See docs for options. */\n theme?: Theme;\n /** Custom theme. See docs for options. */\n customTheme?: CustomTheme;\n /** Disable interaction. */\n disabled?: boolean;\n};\n\nexport type WorldPayButtonCustomProps = WorldPayButtonCommonProps & {\n children: (renderProps: {\n show: () => void;\n isMiniKitReady: boolean;\n }) => ReactElement;\n};\n\nexport function WorldPayButton(props: WorldPayButtonProps) {\n const { theme, mode, customTheme } = props;\n const context = usePayContext();\n\n return (\n <WorldPayButtonCustom {...props}>\n {({ show, isMiniKitReady }) => (\n <ResetContainer\n $useTheme={theme ?? context.theme}\n $useMode={mode ?? context.mode}\n $customTheme={customTheme ?? context.customTheme}\n >\n <ThemeContainer\n onClick={props.disabled || !isMiniKitReady ? undefined : show}\n >\n <ThemedButton>\n <DaimoPayButtonInner />\n </ThemedButton>\n </ThemeContainer>\n </ResetContainer>\n )}\n </WorldPayButtonCustom>\n );\n}\n\nfunction WorldPayButtonCustom(props: WorldPayButtonCustomProps) {\n const pay = useDaimoPay();\n const context = usePayContext();\n const { paymentState, log } = context;\n const [isMiniKitReady, setIsMiniKitReady] = useState(false);\n const { isIOS } = useIsMobile();\n\n // Payment events: call these three event handlers.\n const { onPaymentStarted, onPaymentCompleted, onPaymentBounced } = props;\n\n // Install Minikit if not already installed\n useEffect(() => {\n log(\"[WORLD] Installing MiniKit\");\n const result = MiniKit.install();\n log(\"[WORLD] MiniKit install result\", result);\n log(\"[WORLD] MiniKit is installed\", MiniKit.isInstalled());\n setIsMiniKitReady(MiniKit.isInstalled());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Set the payParams\n useEffect(() => {\n if (\"payId\" in props) {\n log(\"[WORLD] Using payId from props: \", props.payId);\n paymentState.setPayId(props.payId);\n } else {\n log(\"[WORLD] Creating preview order\");\n paymentState.setPayParams(props);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(props || {})]);\n\n // Set the showContactSupport flag\n useEffect(() => {\n // Links are broken on iOS in World App, so hide the contact support button\n context.setShowContactSupport(!isIOS);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isIOS]);\n\n // Open the modal by default if the defaultOpen prop is true\n const hasAutoOpened = useRef(false);\n useEffect(() => {\n if (!props.defaultOpen || hasAutoOpened.current) return;\n if (pay.order == null) return;\n show();\n hasAutoOpened.current = true;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pay.order, props.defaultOpen, hasAutoOpened.current]);\n\n // Emit onPaymentStart handler when payment state changes to payment_started\n const sentStart = useRef(false);\n useEffect(() => {\n if (sentStart.current) return;\n if (pay.paymentState !== \"payment_started\") return;\n\n // TODO: Populate source payment details immediately when the user pays.\n // Use this hack because source chain id is not immediately populated when\n // payment_started\n const sourceChainId = getOrderSourceChainId(pay.order);\n if (sourceChainId == null) return;\n\n sentStart.current = true;\n onPaymentStarted?.({\n type: DaimoPayEventType.PaymentStarted,\n paymentId: writeDaimoPayOrderID(pay.order.id),\n chainId: sourceChainId,\n txHash: pay.order.sourceInitiateTxHash,\n payment: getDaimoPayOrderView(pay.order),\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pay.order, pay.paymentState]);\n\n // Emit onPaymentComplete or onPaymentBounced handler when payment state\n // changes to payment_completed or payment_bounced\n const sentComplete = useRef(false);\n useEffect(() => {\n if (sentComplete.current) return;\n if (\n pay.paymentState !== \"payment_completed\" &&\n pay.paymentState !== \"payment_bounced\"\n )\n return;\n\n sentComplete.current = true;\n const eventType =\n pay.paymentState === \"payment_completed\"\n ? DaimoPayEventType.PaymentCompleted\n : DaimoPayEventType.PaymentBounced;\n const event = {\n type: eventType,\n paymentId: writeDaimoPayOrderID(pay.order.id),\n chainId: getOrderDestChainId(pay.order),\n txHash: assertNotNull(\n pay.order.destFastFinishTxHash ?? pay.order.destClaimTxHash,\n `[WORLD PAY BUTTON] dest tx hash null on order ${pay.order.id} when intent status is ${pay.order.intentStatus}`,\n ),\n payment: getDaimoPayOrderView(pay.order),\n };\n\n if (pay.paymentState === \"payment_completed\") {\n onPaymentCompleted?.(event as PaymentCompletedEvent);\n } else if (pay.paymentState === \"payment_bounced\") {\n onPaymentBounced?.(event as PaymentBouncedEvent);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pay.order, pay.paymentState]);\n\n // Navigate to the confirmation page in the modal to show the spinner\n const showSpinner = useCallback(() => {\n log(`[WORLD] showing spinner ${pay.order?.id}`);\n const modalOptions = {\n closeOnSuccess: props.closeOnSuccess,\n resetOnSuccess: props.resetOnSuccess,\n };\n context.showPayment(modalOptions);\n context.setRoute(ROUTES.CONFIRMATION);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pay.order?.id, log, props.closeOnSuccess, props.resetOnSuccess]);\n\n // Show the Worldcoin payment drawer and pop open the Daimo Pay modal\n const show = useCallback(async () => {\n log(`[WORLD] showing payment ${pay.order?.id}`);\n if (!isMiniKitReady) {\n console.error(\n \"[WORLD] MiniKit is not installed. Please install @worldcoin/minikit-js to use this feature.\",\n );\n return;\n }\n if (pay.paymentState === \"error\") {\n log(\"[WORLD] showing payment error page\");\n const modalOptions = {\n closeOnSuccess: props.closeOnSuccess,\n resetOnSuccess: props.resetOnSuccess,\n };\n context.showPayment(modalOptions);\n return;\n }\n\n if (\n [\"payment_started\", \"payment_completed\", \"payment_bounced\"].includes(\n pay.paymentState,\n )\n ) {\n showSpinner();\n return;\n }\n\n log(`[WORLD] hydrating order ${pay.order?.id}`);\n const { order } = await pay.hydrateOrder();\n log(\n `[WORLD] hydrated order ${pay.order?.id}. Prompting payment with MiniKit`,\n );\n const payRes = await promptWorldcoinPayment(order, context.trpc);\n if (payRes == null || payRes.finalPayload.status == \"error\") {\n log(\"[WORLD] Failed to prompt Worldcoin payment: \", payRes);\n return;\n }\n\n log(`[WORLD] triggering payment search on ${pay.order?.id}`);\n pay.paySource();\n\n // Optimistically assume the source payment is correct and show the\n // confirmation spinner\n showSpinner();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n pay,\n showSpinner,\n context.trpc,\n isMiniKitReady,\n log,\n props.closeOnSuccess,\n props.resetOnSuccess,\n ]);\n\n return props.children({ show, isMiniKitReady });\n}\n\nWorldPayButtonCustom.displayName = \"WorldPayButton.Custom\";\n\nWorldPayButton.Custom = WorldPayButtonCustom;\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { worldchainUSDC } from '@daimo/pay-common';
|
|
2
|
+
import { MiniKit } from '@worldcoin/minikit-js';
|
|
3
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
4
|
+
import { getAddress } from 'viem';
|
|
5
|
+
import { ROUTES } from '../constants/routes.js';
|
|
6
|
+
import { useDaimoPay } from '../hooks/useDaimoPay.js';
|
|
7
|
+
import { usePayContext } from '../hooks/usePayContext.js';
|
|
8
|
+
import { useWorldSignIn } from './useWorldSignIn.js';
|
|
9
|
+
|
|
10
|
+
function useWithdrawToWorld() {
|
|
11
|
+
const { signInWithWorld } = useWorldSignIn();
|
|
12
|
+
const [isMiniKitReady, setIsMiniKitReady] = useState(false);
|
|
13
|
+
const pay = useDaimoPay();
|
|
14
|
+
const context = usePayContext();
|
|
15
|
+
const { paymentState, log } = context;
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
log("[WORLD] Installing MiniKit");
|
|
18
|
+
const result = MiniKit.install();
|
|
19
|
+
log("[WORLD] MiniKit install result", result);
|
|
20
|
+
log("[WORLD] MiniKit is installed", MiniKit.isInstalled());
|
|
21
|
+
setIsMiniKitReady(MiniKit.isInstalled());
|
|
22
|
+
}, []);
|
|
23
|
+
const showSpinner = useCallback(() => {
|
|
24
|
+
log(`[WORLD] showing spinner ${pay.order?.id}`);
|
|
25
|
+
const modalOptions = { closeOnSuccess: false, resetOnSuccess: false };
|
|
26
|
+
context.showPayment(modalOptions);
|
|
27
|
+
context.setRoute(ROUTES.CONFIRMATION);
|
|
28
|
+
}, [pay.order?.id]);
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
if (pay.paymentState === "payment_started") {
|
|
31
|
+
showSpinner();
|
|
32
|
+
}
|
|
33
|
+
}, [pay.paymentState, showSpinner]);
|
|
34
|
+
const withdrawToWorld = useCallback(
|
|
35
|
+
async ({
|
|
36
|
+
appId,
|
|
37
|
+
toUnits
|
|
38
|
+
}) => {
|
|
39
|
+
if (!isMiniKitReady) {
|
|
40
|
+
console.error("[WORLD_WITHDRAW] MiniKit is not installed");
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
const worldUser = await signInWithWorld();
|
|
44
|
+
if (!worldUser?.walletAddress) {
|
|
45
|
+
log("[WORLD_WITHDRAW] user is not signed in");
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
await paymentState.setPayParams({
|
|
49
|
+
appId,
|
|
50
|
+
toChain: worldchainUSDC.chainId,
|
|
51
|
+
toToken: getAddress(worldchainUSDC.token),
|
|
52
|
+
toUnits,
|
|
53
|
+
toAddress: getAddress(worldUser.walletAddress),
|
|
54
|
+
intent: "Withdraw to World App"
|
|
55
|
+
});
|
|
56
|
+
const hydratedState = await pay.hydrateOrder();
|
|
57
|
+
const intentAddress = hydratedState.order.intentAddr;
|
|
58
|
+
log(
|
|
59
|
+
`[WORLD_WITHDRAW] hydrated order ${pay.order?.id} with intent address ${intentAddress}. Polling for payment`
|
|
60
|
+
);
|
|
61
|
+
return intentAddress;
|
|
62
|
+
},
|
|
63
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
64
|
+
[isMiniKitReady, signInWithWorld, pay, log]
|
|
65
|
+
);
|
|
66
|
+
return { withdrawToWorld };
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export { useWithdrawToWorld };
|
|
70
|
+
//# sourceMappingURL=useWithdrawToWorld.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWithdrawToWorld.js","sources":["../../../src/world-mini-app/useWithdrawToWorld.tsx"],"sourcesContent":["import { worldchainUSDC } from \"@daimo/pay-common\";\nimport { MiniKit } from \"@worldcoin/minikit-js\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { Address, getAddress } from \"viem\";\nimport { ROUTES } from \"../constants/routes\";\nimport { useDaimoPay } from \"../hooks/useDaimoPay\";\nimport { usePayContext } from \"../hooks/usePayContext\";\nimport { useWorldSignIn } from \"./useWorldSignIn\";\n\nexport function useWithdrawToWorld() {\n const { signInWithWorld } = useWorldSignIn();\n const [isMiniKitReady, setIsMiniKitReady] = useState(false);\n\n const pay = useDaimoPay();\n const context = usePayContext();\n const { paymentState, log } = context;\n\n // Install Minikit if not already installed\n useEffect(() => {\n log(\"[WORLD] Installing MiniKit\");\n const result = MiniKit.install();\n log(\"[WORLD] MiniKit install result\", result);\n log(\"[WORLD] MiniKit is installed\", MiniKit.isInstalled());\n setIsMiniKitReady(MiniKit.isInstalled());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const showSpinner = useCallback(() => {\n log(`[WORLD] showing spinner ${pay.order?.id}`);\n const modalOptions = { closeOnSuccess: false, resetOnSuccess: false };\n context.showPayment(modalOptions);\n context.setRoute(ROUTES.CONFIRMATION);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pay.order?.id]);\n\n // Auto-open spinner when payment starts\n useEffect(() => {\n if (pay.paymentState === \"payment_started\") {\n showSpinner();\n }\n }, [pay.paymentState, showSpinner]);\n\n const withdrawToWorld = useCallback(\n async ({\n appId,\n toUnits,\n }: {\n appId: string;\n toUnits: string;\n }): Promise<Address | null> => {\n if (!isMiniKitReady) {\n console.error(\"[WORLD_WITHDRAW] MiniKit is not installed\");\n return null;\n }\n\n const worldUser = await signInWithWorld();\n\n if (!worldUser?.walletAddress) {\n log(\"[WORLD_WITHDRAW] user is not signed in\");\n return null;\n }\n\n // Create a payment to withdraw to the user's world wallet\n await paymentState.setPayParams({\n appId,\n toChain: worldchainUSDC.chainId,\n toToken: getAddress(worldchainUSDC.token),\n toUnits,\n toAddress: getAddress(worldUser.walletAddress),\n intent: \"Withdraw to World App\",\n });\n\n // Hydrate the order and return the intent address\n const hydratedState = await pay.hydrateOrder();\n const intentAddress = hydratedState.order.intentAddr;\n log(\n `[WORLD_WITHDRAW] hydrated order ${pay.order?.id} with intent address ${intentAddress}. Polling for payment`,\n );\n return intentAddress;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [isMiniKitReady, signInWithWorld, pay, log],\n );\n\n return { withdrawToWorld };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { MiniKit } from '@worldcoin/minikit-js';
|
|
2
|
+
import { useState, useCallback } from 'react';
|
|
3
|
+
|
|
4
|
+
function useWorldSignIn() {
|
|
5
|
+
const [worldUser, setWorldUser] = useState(null);
|
|
6
|
+
const [isLoadingSignIn, setIsLoadingSignIn] = useState(false);
|
|
7
|
+
const signInWithWorld = useCallback(async () => {
|
|
8
|
+
if (worldUser != null) {
|
|
9
|
+
console.log("[WORLD_SIGNIN] user already signed in");
|
|
10
|
+
return worldUser;
|
|
11
|
+
}
|
|
12
|
+
setIsLoadingSignIn(true);
|
|
13
|
+
try {
|
|
14
|
+
if (!MiniKit.isInstalled()) {
|
|
15
|
+
console.log("[WORLD_SIGNIN] MiniKit is not installed");
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
const res = await fetch("https://pay.daimo.com/api/worldcoin/siwe-nonce");
|
|
19
|
+
const { nonce } = await res.json();
|
|
20
|
+
console.log("[WORLD_SIGNIN] nonce", nonce);
|
|
21
|
+
const nextWeek = new Date(Date.now() + 7 * 24 * 60 * 60 * 1e3);
|
|
22
|
+
const yesterday = new Date(Date.now() - 24 * 60 * 60 * 1e3);
|
|
23
|
+
const { commandPayload: generateMessageResult, finalPayload } = await MiniKit.commandsAsync.walletAuth({
|
|
24
|
+
nonce,
|
|
25
|
+
requestId: "0",
|
|
26
|
+
expirationTime: nextWeek,
|
|
27
|
+
notBefore: yesterday,
|
|
28
|
+
statement: "Sign in"
|
|
29
|
+
});
|
|
30
|
+
console.log(
|
|
31
|
+
"[WORLD_SIGNIN] generateMessageResult",
|
|
32
|
+
generateMessageResult
|
|
33
|
+
);
|
|
34
|
+
console.log("[WORLD_SIGNIN] finalPayload", finalPayload);
|
|
35
|
+
if (finalPayload.status === "error") {
|
|
36
|
+
return null;
|
|
37
|
+
} else {
|
|
38
|
+
const response = await fetch(
|
|
39
|
+
"https://pay.daimo.com/api/worldcoin/complete-siwe",
|
|
40
|
+
{
|
|
41
|
+
method: "POST",
|
|
42
|
+
headers: {
|
|
43
|
+
"Content-Type": "application/json"
|
|
44
|
+
},
|
|
45
|
+
body: JSON.stringify({
|
|
46
|
+
payload: finalPayload,
|
|
47
|
+
nonce
|
|
48
|
+
})
|
|
49
|
+
}
|
|
50
|
+
);
|
|
51
|
+
const verificationResponse = await response.json();
|
|
52
|
+
console.log(
|
|
53
|
+
"[WORLD_SIGNIN] verification response",
|
|
54
|
+
verificationResponse
|
|
55
|
+
);
|
|
56
|
+
if (verificationResponse.isValid) {
|
|
57
|
+
console.log("[WORLD_SIGNIN] user is valid");
|
|
58
|
+
const user = await MiniKit.getUserByAddress(finalPayload.address);
|
|
59
|
+
setWorldUser(user);
|
|
60
|
+
return user;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
} catch (error) {
|
|
64
|
+
console.error("[WORLD_SIGNIN] error", error);
|
|
65
|
+
} finally {
|
|
66
|
+
setIsLoadingSignIn(false);
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
}, [setWorldUser, setIsLoadingSignIn, worldUser]);
|
|
70
|
+
return { signInWithWorld, worldUser, isLoadingSignIn };
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export { useWorldSignIn };
|
|
74
|
+
//# sourceMappingURL=useWorldSignIn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWorldSignIn.js","sources":["../../../src/world-mini-app/useWorldSignIn.tsx"],"sourcesContent":["import { MiniKit } from \"@worldcoin/minikit-js\";\nimport { useCallback, useState } from \"react\";\n\nexport function useWorldSignIn(): {\n signInWithWorld: () => Promise<typeof MiniKit.user | null>;\n worldUser: typeof MiniKit.user | null;\n isLoadingSignIn: boolean;\n} {\n const [worldUser, setWorldUser] = useState<typeof MiniKit.user | null>(null);\n const [isLoadingSignIn, setIsLoadingSignIn] = useState(false);\n\n const signInWithWorld = useCallback(async (): Promise<\n typeof MiniKit.user | null\n > => {\n if (worldUser != null) {\n console.log(\"[WORLD_SIGNIN] user already signed in\");\n return worldUser;\n }\n\n setIsLoadingSignIn(true);\n try {\n if (!MiniKit.isInstalled()) {\n console.log(\"[WORLD_SIGNIN] MiniKit is not installed\");\n return null;\n }\n\n const res = await fetch(\"https://pay.daimo.com/api/worldcoin/siwe-nonce\");\n const { nonce } = await res.json();\n\n console.log(\"[WORLD_SIGNIN] nonce\", nonce);\n\n const nextWeek = new Date(Date.now() + 7 * 24 * 60 * 60 * 1000);\n const yesterday = new Date(Date.now() - 24 * 60 * 60 * 1000);\n\n const { commandPayload: generateMessageResult, finalPayload } =\n await MiniKit.commandsAsync.walletAuth({\n nonce,\n requestId: \"0\",\n expirationTime: nextWeek,\n notBefore: yesterday,\n statement: \"Sign in\",\n });\n\n console.log(\n \"[WORLD_SIGNIN] generateMessageResult\",\n generateMessageResult,\n );\n console.log(\"[WORLD_SIGNIN] finalPayload\", finalPayload);\n\n if (finalPayload.status === \"error\") {\n return null;\n } else {\n const response = await fetch(\n \"https://pay.daimo.com/api/worldcoin/complete-siwe\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n payload: finalPayload,\n nonce,\n }),\n },\n );\n const verificationResponse = await response.json();\n\n console.log(\n \"[WORLD_SIGNIN] verification response\",\n verificationResponse,\n );\n if (verificationResponse.isValid) {\n console.log(\"[WORLD_SIGNIN] user is valid\");\n const user = await MiniKit.getUserByAddress(finalPayload.address);\n setWorldUser(user);\n return user;\n }\n }\n } catch (error) {\n console.error(\"[WORLD_SIGNIN] error\", error);\n } finally {\n setIsLoadingSignIn(false);\n }\n return null;\n }, [setWorldUser, setIsLoadingSignIn, worldUser]);\n\n return { signInWithWorld, worldUser, isLoadingSignIn };\n}\n"],"names":[],"mappings":"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"}
|
package/build/src/world.js
CHANGED
package/build/src/world.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"world.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"world.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
package/build/world.d.ts
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
|
+
import { Address, Hex } from 'viem';
|
|
1
2
|
import * as React from 'react';
|
|
2
3
|
import { ReactElement } from 'react';
|
|
3
4
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
5
|
import { PaymentStartedEvent, PaymentCompletedEvent, PaymentBouncedEvent, DaimoPayUserMetadata } from '@daimo/pay-common';
|
|
5
|
-
import { Address, Hex } from 'viem';
|
|
6
6
|
import { M as Mode, T as Theme, C as CustomTheme } from './types-1473bcf4.js';
|
|
7
7
|
|
|
8
|
+
declare function useWithdrawToWorld(): {
|
|
9
|
+
withdrawToWorld: ({ appId, toUnits, }: {
|
|
10
|
+
appId: string;
|
|
11
|
+
toUnits: string;
|
|
12
|
+
}) => Promise<Address | null>;
|
|
13
|
+
};
|
|
14
|
+
|
|
8
15
|
type WorldPayButtonPaymentProps = {
|
|
9
16
|
/**
|
|
10
17
|
* Your public app ID. Specify either (payId) or (appId + parameters).
|
|
@@ -90,5 +97,5 @@ declare namespace WorldPayButtonCustom {
|
|
|
90
97
|
var displayName: string;
|
|
91
98
|
}
|
|
92
99
|
|
|
93
|
-
export { WorldPayButton };
|
|
100
|
+
export { WorldPayButton, useWithdrawToWorld };
|
|
94
101
|
export type { WorldPayButtonCustomProps, WorldPayButtonProps };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@daimo/pay",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "1.18.
|
|
4
|
+
"version": "1.18.1",
|
|
5
5
|
"author": "Daimo",
|
|
6
6
|
"homepage": "https://pay.daimo.com",
|
|
7
7
|
"license": "BSD-2-Clause license",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"lint": "eslint 'src/**/*.{js,jsx,ts,tsx}' --max-warnings=0"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@daimo/pay-common": "1.18.
|
|
36
|
+
"@daimo/pay-common": "1.18.1",
|
|
37
37
|
"@solana/wallet-adapter-base": "^0.9.23",
|
|
38
38
|
"@solana/wallet-adapter-react": "^0.15.35",
|
|
39
39
|
"@solana/web3.js": "^1.95.4",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
},
|
|
53
53
|
"peerDependencies": {
|
|
54
54
|
"@tanstack/react-query": ">=5.0.0",
|
|
55
|
-
"@worldcoin/minikit-js": ">=1.9.
|
|
55
|
+
"@worldcoin/minikit-js": ">=1.9.8",
|
|
56
56
|
"react": "18.x || 19.x",
|
|
57
57
|
"react-dom": "18.x || 19.x",
|
|
58
58
|
"viem": ">=2.22.0",
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
|
|
3
|
-
const USDC = (props) => /* @__PURE__ */ jsxs(
|
|
4
|
-
"svg",
|
|
5
|
-
{
|
|
6
|
-
...props,
|
|
7
|
-
"aria-hidden": "true",
|
|
8
|
-
width: "44",
|
|
9
|
-
height: "44",
|
|
10
|
-
viewBox: "0 0 44 44",
|
|
11
|
-
fill: "none",
|
|
12
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
13
|
-
children: [
|
|
14
|
-
/* @__PURE__ */ jsxs("g", { clipPath: "url(#clip0_121_12)", children: [
|
|
15
|
-
/* @__PURE__ */ jsx(
|
|
16
|
-
"path",
|
|
17
|
-
{
|
|
18
|
-
d: "M22 44C34.1917 44 44 34.1917 44 22C44 9.80826 34.1917 0 22 0C9.80826 0 0 9.80826 0 22C0 34.1917 9.80826 44 22 44Z",
|
|
19
|
-
fill: "#2775CA"
|
|
20
|
-
}
|
|
21
|
-
),
|
|
22
|
-
/* @__PURE__ */ jsx(
|
|
23
|
-
"path",
|
|
24
|
-
{
|
|
25
|
-
d: "M28.0501 25.4833C28.0501 22.2751 26.1251 21.1751 22.2751 20.7168C19.5251 20.3501 18.9751 19.6168 18.9751 18.3334C18.9751 17.0499 19.8918 16.2251 21.7251 16.2251C23.3751 16.2251 24.2918 16.7751 24.7501 18.1501C24.8418 18.4251 25.1168 18.6084 25.3918 18.6084H26.8584C27.2251 18.6084 27.5001 18.3333 27.5001 17.9668V17.8751C27.1334 15.8583 25.4834 14.3001 23.3751 14.1168V11.9168C23.3751 11.5501 23.1001 11.2751 22.6418 11.1833H21.2668C20.9001 11.1833 20.6251 11.4583 20.5334 11.9168V14.0251C17.7834 14.3918 16.0418 16.2251 16.0418 18.5168C16.0418 21.5418 17.8751 22.7334 21.7251 23.1918C24.2918 23.6501 25.1168 24.2001 25.1168 25.6668C25.1168 27.1336 23.8334 28.1418 22.0918 28.1418C19.7084 28.1418 18.8834 27.1333 18.6084 25.7583C18.5168 25.3918 18.2418 25.2083 17.9668 25.2083H16.4084C16.0418 25.2083 15.7668 25.4834 15.7668 25.8501V25.9418C16.1334 28.2334 17.6001 29.8834 20.6251 30.3418V32.5418C20.6251 32.9084 20.9001 33.1834 21.3584 33.2751H22.7334C23.1001 33.2751 23.3751 33.0001 23.4668 32.5418V30.3418C26.2168 29.8834 28.0501 27.9583 28.0501 25.4833Z",
|
|
26
|
-
fill: "white"
|
|
27
|
-
}
|
|
28
|
-
),
|
|
29
|
-
/* @__PURE__ */ jsx(
|
|
30
|
-
"path",
|
|
31
|
-
{
|
|
32
|
-
d: "M17.3251 35.1083C10.1751 32.5417 6.50834 24.5667 9.16682 17.5083C10.5418 13.6583 13.5668 10.725 17.3251 9.35001C17.6918 9.16675 17.8751 8.89175 17.8751 8.43327V7.15001C17.8751 6.78327 17.6918 6.50827 17.3251 6.41675C17.2333 6.41675 17.0501 6.41675 16.9583 6.50827C8.25008 9.25827 3.48334 18.5167 6.23334 27.225C7.88334 32.3583 11.8251 36.3 16.9583 37.95C17.3251 38.1333 17.6918 37.95 17.7833 37.5833C17.8751 37.4917 17.8751 37.4 17.8751 37.2167V35.9333C17.8751 35.6583 17.6001 35.2917 17.3251 35.1083ZM27.0418 6.50827C26.6751 6.32501 26.3083 6.50827 26.2168 6.87501C26.1251 6.96675 26.1251 7.05827 26.1251 7.24175V8.52501C26.1251 8.89175 26.4001 9.25827 26.6751 9.44175C33.8251 12.0083 37.4918 19.9833 34.8333 27.0417C33.4583 30.8917 30.4333 33.825 26.6751 35.2C26.3083 35.3833 26.1251 35.6583 26.1251 36.1167V37.4C26.1251 37.7667 26.3083 38.0417 26.6751 38.1333C26.7668 38.1333 26.9501 38.1333 27.0418 38.0417C35.7501 35.2917 40.5168 26.0333 37.7668 17.325C36.1168 12.1 32.0833 8.15827 27.0418 6.50827Z",
|
|
33
|
-
fill: "white"
|
|
34
|
-
}
|
|
35
|
-
)
|
|
36
|
-
] }),
|
|
37
|
-
/* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx("clipPath", { id: "clip0_121_12", children: /* @__PURE__ */ jsx("rect", { width: "44", height: "44", fill: "white" }) }) })
|
|
38
|
-
]
|
|
39
|
-
}
|
|
40
|
-
);
|
|
41
|
-
|
|
42
|
-
export { USDC };
|
|
43
|
-
//# sourceMappingURL=coins.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"coins.js","sources":["../../../src/assets/coins.tsx"],"sourcesContent":["export const USDC = (props) => (\n <svg\n {...props}\n aria-hidden=\"true\"\n width=\"44\"\n height=\"44\"\n viewBox=\"0 0 44 44\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clipPath=\"url(#clip0_121_12)\">\n <path\n d=\"M22 44C34.1917 44 44 34.1917 44 22C44 9.80826 34.1917 0 22 0C9.80826 0 0 9.80826 0 22C0 34.1917 9.80826 44 22 44Z\"\n fill=\"#2775CA\"\n />\n <path\n d=\"M28.0501 25.4833C28.0501 22.2751 26.1251 21.1751 22.2751 20.7168C19.5251 20.3501 18.9751 19.6168 18.9751 18.3334C18.9751 17.0499 19.8918 16.2251 21.7251 16.2251C23.3751 16.2251 24.2918 16.7751 24.7501 18.1501C24.8418 18.4251 25.1168 18.6084 25.3918 18.6084H26.8584C27.2251 18.6084 27.5001 18.3333 27.5001 17.9668V17.8751C27.1334 15.8583 25.4834 14.3001 23.3751 14.1168V11.9168C23.3751 11.5501 23.1001 11.2751 22.6418 11.1833H21.2668C20.9001 11.1833 20.6251 11.4583 20.5334 11.9168V14.0251C17.7834 14.3918 16.0418 16.2251 16.0418 18.5168C16.0418 21.5418 17.8751 22.7334 21.7251 23.1918C24.2918 23.6501 25.1168 24.2001 25.1168 25.6668C25.1168 27.1336 23.8334 28.1418 22.0918 28.1418C19.7084 28.1418 18.8834 27.1333 18.6084 25.7583C18.5168 25.3918 18.2418 25.2083 17.9668 25.2083H16.4084C16.0418 25.2083 15.7668 25.4834 15.7668 25.8501V25.9418C16.1334 28.2334 17.6001 29.8834 20.6251 30.3418V32.5418C20.6251 32.9084 20.9001 33.1834 21.3584 33.2751H22.7334C23.1001 33.2751 23.3751 33.0001 23.4668 32.5418V30.3418C26.2168 29.8834 28.0501 27.9583 28.0501 25.4833Z\"\n fill=\"white\"\n />\n <path\n d=\"M17.3251 35.1083C10.1751 32.5417 6.50834 24.5667 9.16682 17.5083C10.5418 13.6583 13.5668 10.725 17.3251 9.35001C17.6918 9.16675 17.8751 8.89175 17.8751 8.43327V7.15001C17.8751 6.78327 17.6918 6.50827 17.3251 6.41675C17.2333 6.41675 17.0501 6.41675 16.9583 6.50827C8.25008 9.25827 3.48334 18.5167 6.23334 27.225C7.88334 32.3583 11.8251 36.3 16.9583 37.95C17.3251 38.1333 17.6918 37.95 17.7833 37.5833C17.8751 37.4917 17.8751 37.4 17.8751 37.2167V35.9333C17.8751 35.6583 17.6001 35.2917 17.3251 35.1083ZM27.0418 6.50827C26.6751 6.32501 26.3083 6.50827 26.2168 6.87501C26.1251 6.96675 26.1251 7.05827 26.1251 7.24175V8.52501C26.1251 8.89175 26.4001 9.25827 26.6751 9.44175C33.8251 12.0083 37.4918 19.9833 34.8333 27.0417C33.4583 30.8917 30.4333 33.825 26.6751 35.2C26.3083 35.3833 26.1251 35.6583 26.1251 36.1167V37.4C26.1251 37.7667 26.3083 38.0417 26.6751 38.1333C26.7668 38.1333 26.9501 38.1333 27.0418 38.0417C35.7501 35.2917 40.5168 26.0333 37.7668 17.325C36.1168 12.1 32.0833 8.15827 27.0418 6.50827Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_121_12\">\n <rect width=\"44\" height=\"44\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n);\n\nexport const DAI = (props) => (\n <svg\n {...props}\n aria-hidden=\"true\"\n width=\"44\"\n height=\"44\"\n viewBox=\"0 0 44 44\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clipPath=\"url(#clip0_121_17)\">\n <path\n d=\"M22 0C34.1514 0 44 9.8506 44 22C44 34.1514 34.1514 44 22 44C9.8506 44 0 34.1504 0 22C0 9.8506 9.8506 0 22 0Z\"\n fill=\"#F5AC37\"\n />\n <path\n d=\"M22.8109 23.5533H31.1705C31.3487 23.5533 31.4329 23.5533 31.4457 23.3196C31.514 22.4692 31.514 21.6138 31.4457 20.7624C31.4457 20.5971 31.3636 20.5288 31.1844 20.5288H14.5472C14.3413 20.5288 14.2859 20.5971 14.2859 20.7901V23.2374C14.2859 23.5533 14.2859 23.5533 14.6156 23.5533H22.8109ZM30.5121 17.6686C30.5359 17.6063 30.5359 17.538 30.5121 17.4766C30.3726 17.1726 30.2072 16.8826 30.0152 16.6103C29.7261 16.145 29.3855 15.7163 28.9974 15.3312C28.8143 15.0986 28.6024 14.8897 28.3648 14.7125C27.1748 13.6997 25.7601 12.9829 24.2394 12.6226C23.4722 12.4503 22.6881 12.3681 21.902 12.3751H14.5185C14.3126 12.3751 14.2849 12.4572 14.2849 12.6364V17.5172C14.2849 17.7231 14.2849 17.7785 14.5463 17.7785H30.4131C30.4131 17.7785 30.5508 17.7508 30.5785 17.6686H30.5112H30.5121ZM30.5121 26.4134C30.2785 26.3877 30.0429 26.3877 29.8092 26.4134H14.5611C14.3552 26.4134 14.2859 26.4134 14.2859 26.6886V31.4605C14.2859 31.6803 14.2859 31.7357 14.5611 31.7357H21.6011C21.9377 31.7614 22.2743 31.7377 22.6039 31.6674C23.6256 31.5941 24.6305 31.3724 25.5888 31.007C25.9373 30.8863 26.2739 30.7289 26.5917 30.5398H26.6877C28.3381 29.6814 29.6786 28.333 30.524 26.6777C30.524 26.6777 30.6201 26.4698 30.5121 26.4154V26.4134ZM11.5228 34.2097V34.1276V30.9239V29.8378V26.6065C11.5228 26.4273 11.5228 26.4005 11.303 26.4005H8.31909C8.15376 26.4005 8.08545 26.4005 8.08545 26.1807V23.5681H11.2753C11.4535 23.5681 11.5228 23.5681 11.5228 23.3345V20.7496C11.5228 20.5842 11.5228 20.5436 11.303 20.5436H8.31909C8.15376 20.5436 8.08545 20.5436 8.08545 20.3238V17.9043C8.08545 17.7528 8.08545 17.7122 8.30523 17.7122H11.2614C11.4673 17.7122 11.5228 17.7122 11.5228 17.4508V10.0396C11.5228 9.81985 11.5228 9.7644 11.798 9.7644H22.1099C22.8584 9.7941 23.6019 9.87628 24.3375 10.0119C25.8532 10.2921 27.3095 10.8336 28.641 11.6068C29.5241 12.1266 30.3369 12.7542 31.0606 13.4769C31.6051 14.0422 32.0962 14.6541 32.5318 15.3055C32.9644 15.9658 33.3238 16.6717 33.6059 17.4093C33.6406 17.6013 33.8247 17.731 34.0168 17.6983H36.4779C36.7938 17.6983 36.7938 17.6983 36.8076 18.0013V20.2565C36.8076 20.4763 36.7254 20.5318 36.5047 20.5318H34.6068C34.4148 20.5318 34.3593 20.5318 34.3732 20.7793C34.4484 21.6168 34.4484 22.4573 34.3732 23.2949C34.3732 23.5285 34.3732 23.5562 34.6355 23.5562H36.8066C36.9027 23.68 36.8066 23.8037 36.8066 23.9285C36.8205 24.0879 36.8205 24.2492 36.8066 24.4086V26.0728C36.8066 26.3065 36.7383 26.3758 36.5314 26.3758H33.9326C33.7515 26.3411 33.5752 26.457 33.5337 26.6371C32.9149 28.2459 31.9249 29.6884 30.6458 30.8447C30.1785 31.2654 29.6875 31.6614 29.1746 32.0268C28.6242 32.3436 28.0886 32.6732 27.5243 32.9346C26.4858 33.4019 25.3968 33.7464 24.279 33.9652C23.2178 34.1553 22.1416 34.2414 21.0615 34.2266H11.5188V34.2127L11.5228 34.2097Z\"\n fill=\"#FEFEFD\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_121_17\">\n <rect width=\"44\" height=\"44\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n);\n"],"names":[],"mappings":";;AAAa,MAAA,IAAA,GAAO,CAAC,KACnB,qBAAA,IAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACE,GAAG,KAAA;AAAA,IACJ,aAAY,EAAA,MAAA;AAAA,IACZ,KAAM,EAAA,IAAA;AAAA,IACN,MAAO,EAAA,IAAA;AAAA,IACP,OAAQ,EAAA,WAAA;AAAA,IACR,IAAK,EAAA,MAAA;AAAA,IACL,KAAM,EAAA,4BAAA;AAAA,IAEN,QAAA,EAAA;AAAA,sBAAC,IAAA,CAAA,GAAA,EAAA,EAAE,UAAS,oBACV,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAE,EAAA,mHAAA;AAAA,YACF,IAAK,EAAA,SAAA;AAAA,WAAA;AAAA,SACP;AAAA,wBACA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAE,EAAA,miCAAA;AAAA,YACF,IAAK,EAAA,OAAA;AAAA,WAAA;AAAA,SACP;AAAA,wBACA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAE,EAAA,6+BAAA;AAAA,YACF,IAAK,EAAA,OAAA;AAAA,WAAA;AAAA,SACP;AAAA,OACF,EAAA,CAAA;AAAA,sBACC,GAAA,CAAA,MAAA,EAAA,EACC,QAAC,kBAAA,GAAA,CAAA,UAAA,EAAA,EAAS,IAAG,cACX,EAAA,QAAA,kBAAA,GAAA,CAAC,MAAK,EAAA,EAAA,KAAA,EAAM,MAAK,MAAO,EAAA,IAAA,EAAK,IAAK,EAAA,OAAA,EAAQ,GAC5C,CACF,EAAA,CAAA;AAAA,KAAA;AAAA,GAAA;AACF;;;;"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
|
|
3
|
-
function CrepeIcon({ ...props }) {
|
|
4
|
-
return /* @__PURE__ */ jsxs(
|
|
5
|
-
"svg",
|
|
6
|
-
{
|
|
7
|
-
width: "20",
|
|
8
|
-
height: "20",
|
|
9
|
-
viewBox: "0 0 512 512",
|
|
10
|
-
fill: "none",
|
|
11
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
12
|
-
...props,
|
|
13
|
-
children: [
|
|
14
|
-
/* @__PURE__ */ jsx(
|
|
15
|
-
"path",
|
|
16
|
-
{
|
|
17
|
-
d: "M256.48 492.035L491.96 84.0876C422.688 44.0149 342.263 21.0746 256.48 21.0746C170.697 21.0746 90.2722 44.0149 21 84.0876L256.48 492.035Z",
|
|
18
|
-
stroke: "currentColor",
|
|
19
|
-
strokeWidth: "35",
|
|
20
|
-
strokeMiterlimit: "10",
|
|
21
|
-
strokeLinecap: "round",
|
|
22
|
-
strokeLinejoin: "round"
|
|
23
|
-
}
|
|
24
|
-
),
|
|
25
|
-
/* @__PURE__ */ jsx(
|
|
26
|
-
"path",
|
|
27
|
-
{
|
|
28
|
-
d: "M473.885 84.5848C417.669 176.594 247.311 44.0744 143.584 148.461L257.946 487.638",
|
|
29
|
-
stroke: "currentColor",
|
|
30
|
-
strokeWidth: "35",
|
|
31
|
-
strokeMiterlimit: "10",
|
|
32
|
-
strokeLinecap: "round",
|
|
33
|
-
strokeLinejoin: "round"
|
|
34
|
-
}
|
|
35
|
-
)
|
|
36
|
-
]
|
|
37
|
-
}
|
|
38
|
-
);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export { CrepeIcon as default };
|
|
42
|
-
//# sourceMappingURL=crepe.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crepe.js","sources":["../../../src/assets/crepe.tsx"],"sourcesContent":["export default function CrepeIcon({ ...props }) {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 512 512\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M256.48 492.035L491.96 84.0876C422.688 44.0149 342.263 21.0746 256.48 21.0746C170.697 21.0746 90.2722 44.0149 21 84.0876L256.48 492.035Z\"\n stroke=\"currentColor\"\n strokeWidth=\"35\"\n strokeMiterlimit=\"10\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M473.885 84.5848C417.669 176.594 247.311 44.0744 143.584 148.461L257.946 487.638\"\n stroke=\"currentColor\"\n strokeWidth=\"35\"\n strokeMiterlimit=\"10\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n"],"names":[],"mappings":";;AAAA,SAAwB,SAAU,CAAA,EAAE,GAAG,KAAA,EAAS,EAAA;AAC9C,EACE,uBAAA,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAM,EAAA,IAAA;AAAA,MACN,MAAO,EAAA,IAAA;AAAA,MACP,OAAQ,EAAA,aAAA;AAAA,MACR,IAAK,EAAA,MAAA;AAAA,MACL,KAAM,EAAA,4BAAA;AAAA,MACL,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAE,EAAA,0IAAA;AAAA,YACF,MAAO,EAAA,cAAA;AAAA,YACP,WAAY,EAAA,IAAA;AAAA,YACZ,gBAAiB,EAAA,IAAA;AAAA,YACjB,aAAc,EAAA,OAAA;AAAA,YACd,cAAe,EAAA,OAAA;AAAA,WAAA;AAAA,SACjB;AAAA,wBACA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAE,EAAA,kFAAA;AAAA,YACF,MAAO,EAAA,cAAA;AAAA,YACP,WAAY,EAAA,IAAA;AAAA,YACZ,gBAAiB,EAAA,IAAA;AAAA,YACjB,aAAc,EAAA,OAAA;AAAA,YACd,cAAe,EAAA,OAAA;AAAA,WAAA;AAAA,SACjB;AAAA,OAAA;AAAA,KAAA;AAAA,GACF,CAAA;AAEJ;;;;"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
|
|
3
|
-
function WalletIcon({ ...props }) {
|
|
4
|
-
return /* @__PURE__ */ jsxs(
|
|
5
|
-
"svg",
|
|
6
|
-
{
|
|
7
|
-
"aria-hidden": "true",
|
|
8
|
-
width: "20",
|
|
9
|
-
height: "19",
|
|
10
|
-
viewBox: "0 0 20 19",
|
|
11
|
-
fill: "none",
|
|
12
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
13
|
-
...props,
|
|
14
|
-
children: [
|
|
15
|
-
/* @__PURE__ */ jsx(
|
|
16
|
-
"path",
|
|
17
|
-
{
|
|
18
|
-
d: "M1.57568 4.60616C1.57568 2.69827 3.12234 1.15161 5.03023 1.15161H15.3939C17.3018 1.15161 18.8484 2.69826 18.8484 4.60616V10.3637C18.8484 12.2716 17.3018 13.8183 15.3939 13.8183H5.03023C3.12234 13.8183 1.57568 12.2716 1.57568 10.3637V4.60616Z",
|
|
19
|
-
stroke: "currentColor",
|
|
20
|
-
strokeWidth: "2"
|
|
21
|
-
}
|
|
22
|
-
),
|
|
23
|
-
/* @__PURE__ */ jsx(
|
|
24
|
-
"path",
|
|
25
|
-
{
|
|
26
|
-
d: "M1 4.79293C1 2.435 3.31004 0.770014 5.54697 1.51566L12.4561 3.81869C13.8667 4.2889 14.8182 5.60901 14.8182 7.09596V13.6313C14.8182 15.9892 12.5081 17.6542 10.2712 16.9086L3.36212 14.6056C1.95149 14.1353 1 12.8152 1 11.3283V4.79293Z",
|
|
27
|
-
fill: "var(--ck-body-background)",
|
|
28
|
-
stroke: "currentColor",
|
|
29
|
-
strokeWidth: "2"
|
|
30
|
-
}
|
|
31
|
-
),
|
|
32
|
-
/* @__PURE__ */ jsx("circle", { cx: "10.3863", cy: "10.1894", r: "1.32574", fill: "currentColor" })
|
|
33
|
-
]
|
|
34
|
-
}
|
|
35
|
-
);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export { WalletIcon as default };
|
|
39
|
-
//# sourceMappingURL=wallet.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.js","sources":["../../../src/assets/wallet.tsx"],"sourcesContent":["export default function WalletIcon({ ...props }) {\n return (\n <svg\n aria-hidden=\"true\"\n width=\"20\"\n height=\"19\"\n viewBox=\"0 0 20 19\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M1.57568 4.60616C1.57568 2.69827 3.12234 1.15161 5.03023 1.15161H15.3939C17.3018 1.15161 18.8484 2.69826 18.8484 4.60616V10.3637C18.8484 12.2716 17.3018 13.8183 15.3939 13.8183H5.03023C3.12234 13.8183 1.57568 12.2716 1.57568 10.3637V4.60616Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n />\n <path\n d=\"M1 4.79293C1 2.435 3.31004 0.770014 5.54697 1.51566L12.4561 3.81869C13.8667 4.2889 14.8182 5.60901 14.8182 7.09596V13.6313C14.8182 15.9892 12.5081 17.6542 10.2712 16.9086L3.36212 14.6056C1.95149 14.1353 1 12.8152 1 11.3283V4.79293Z\"\n fill=\"var(--ck-body-background)\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n />\n <circle cx=\"10.3863\" cy=\"10.1894\" r=\"1.32574\" fill=\"currentColor\" />\n </svg>\n );\n};\n"],"names":[],"mappings":";;AAAA,SAAwB,UAAW,CAAA,EAAE,GAAG,KAAA,EAAS,EAAA;AAC/C,EACE,uBAAA,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,aAAY,EAAA,MAAA;AAAA,MACZ,KAAM,EAAA,IAAA;AAAA,MACN,MAAO,EAAA,IAAA;AAAA,MACP,OAAQ,EAAA,WAAA;AAAA,MACR,IAAK,EAAA,MAAA;AAAA,MACL,KAAM,EAAA,4BAAA;AAAA,MACL,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAE,EAAA,mPAAA;AAAA,YACF,MAAO,EAAA,cAAA;AAAA,YACP,WAAY,EAAA,GAAA;AAAA,WAAA;AAAA,SACd;AAAA,wBACA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAE,EAAA,yOAAA;AAAA,YACF,IAAK,EAAA,2BAAA;AAAA,YACL,MAAO,EAAA,cAAA;AAAA,YACP,WAAY,EAAA,GAAA;AAAA,WAAA;AAAA,SACd;AAAA,wBACA,GAAA,CAAC,YAAO,EAAG,EAAA,SAAA,EAAU,IAAG,SAAU,EAAA,CAAA,EAAE,SAAU,EAAA,IAAA,EAAK,cAAe,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAAA,GACpE,CAAA;AAEJ;;;;"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import 'react/jsx-runtime';
|
|
2
|
-
import 'react';
|
|
3
|
-
import { css } from 'styled-components';
|
|
4
|
-
import styled from '../../../styles/styled/index.js';
|
|
5
|
-
import 'framer-motion';
|
|
6
|
-
import 'detect-browser';
|
|
7
|
-
import '../FitText/index.js';
|
|
8
|
-
import '../Spinner/styles.js';
|
|
9
|
-
import '../Button/styles.js';
|
|
10
|
-
import './CopyToClipboardIcon.js';
|
|
11
|
-
|
|
12
|
-
styled.div`
|
|
13
|
-
--color: var(--ck-copytoclipboard-stroke);
|
|
14
|
-
--bg: var(--ck-body-background);
|
|
15
|
-
transition: all 220ms cubic-bezier(0.175, 0.885, 0.32, 1.1);
|
|
16
|
-
|
|
17
|
-
cursor: pointer;
|
|
18
|
-
display: flex;
|
|
19
|
-
align-items: center;
|
|
20
|
-
justify-content: center;
|
|
21
|
-
margin-top: 4px;
|
|
22
|
-
gap: 8px;
|
|
23
|
-
|
|
24
|
-
${(props) => props.$disabled ? css`
|
|
25
|
-
cursor: not-allowed;
|
|
26
|
-
opacity: 0.4;
|
|
27
|
-
` : css`
|
|
28
|
-
&:hover {
|
|
29
|
-
--color: var(--ck-body-color-muted);
|
|
30
|
-
}
|
|
31
|
-
`}
|
|
32
|
-
`;
|
|
33
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/components/Common/CopyToClipboard/index.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { css } from \"styled-components\";\nimport styled from \"./../../../styles/styled\";\n\nimport Button from \"../Button\";\nimport CopyToClipboardIcon from \"./CopyToClipboardIcon\";\n\nconst Container = styled.div<{ $disabled?: boolean }>`\n --color: var(--ck-copytoclipboard-stroke);\n --bg: var(--ck-body-background);\n transition: all 220ms cubic-bezier(0.175, 0.885, 0.32, 1.1);\n\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: 4px;\n gap: 8px;\n\n ${(props) =>\n props.$disabled\n ? css`\n cursor: not-allowed;\n opacity: 0.4;\n `\n : css`\n &:hover {\n --color: var(--ck-body-color-muted);\n }\n `}\n`;\n\nconst CopyToClipboard: React.FC<{\n string?: string;\n children?: React.ReactNode;\n variant?: \"button\" | \"left\";\n}> = ({ string, children, variant }) => {\n const [clipboard, setClipboard] = useState(false);\n\n let timeout: any;\n const onCopy = () => {\n if (!string) return;\n const str = string.trim();\n if (navigator.clipboard) {\n navigator.clipboard.writeText(str);\n } else {\n // Fallback copy to clipboard if necessary\n /*\n const el = document.createElement('textarea');\n el.value = str;\n document.body.appendChild(el);\n el.select();\n document.execCommand('copy');\n document.body.removeChild(el);\n */\n }\n setClipboard(true);\n clearTimeout(timeout);\n timeout = setTimeout(() => setClipboard(false), 1000);\n };\n\n if (variant === \"button\")\n return (\n <Button\n disabled={!string}\n onClick={onCopy}\n icon={<CopyToClipboardIcon copied={clipboard} />}\n >\n {children}\n </Button>\n );\n\n return (\n <Container onClick={onCopy} $disabled={!string}>\n <CopyToClipboardIcon copied={clipboard} dark />\n {children}\n </Container>\n );\n};\n\nexport default CopyToClipboard;\n"],"names":[],"mappings":";;;;;;;;;;;AAOkB,MAAO,CAAA,GAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYrB,EAAA,CAAC,KACD,KAAA,KAAA,CAAM,SACF,GAAA,GAAA,CAAA;AAAA;AAAA;AAAA,QAIA,CAAA,GAAA,GAAA,CAAA;AAAA;AAAA;AAAA;AAAA,QAIC,CAAA,CAAA;AAAA"}
|
|
@@ -1,267 +0,0 @@
|
|
|
1
|
-
import { keyframes } from 'styled-components';
|
|
2
|
-
import styled from '../../../styles/styled/index.js';
|
|
3
|
-
import { motion } from 'framer-motion';
|
|
4
|
-
import { ModalBody } from '../../Common/Modal/styles.js';
|
|
5
|
-
|
|
6
|
-
const Shimmer = keyframes`
|
|
7
|
-
0%{ transform: translate(-100%) rotate(-45deg); }
|
|
8
|
-
100%{ transform: translate(100%) rotate(-80deg); }
|
|
9
|
-
`;
|
|
10
|
-
const InfoBox = styled.div`
|
|
11
|
-
padding: 24px 24px 28px;
|
|
12
|
-
border-radius: var(--ck-tertiary-border-radius, 24px);
|
|
13
|
-
box-shadow: var(--ck-tertiary-box-shadow, none);
|
|
14
|
-
background: var(--ck-body-background-tertiary);
|
|
15
|
-
${ModalBody} {
|
|
16
|
-
max-width: none;
|
|
17
|
-
}
|
|
18
|
-
`;
|
|
19
|
-
const InfoBoxButtons = styled.div`
|
|
20
|
-
display: grid;
|
|
21
|
-
grid-template-columns: 1fr 1fr;
|
|
22
|
-
gap: 16px;
|
|
23
|
-
margin: 5px -8px -12px;
|
|
24
|
-
button {
|
|
25
|
-
}
|
|
26
|
-
`;
|
|
27
|
-
const LearnMoreContainer = styled(motion.div)`
|
|
28
|
-
text-align: center;
|
|
29
|
-
margin-top: 16px;
|
|
30
|
-
margin-bottom: -6px;
|
|
31
|
-
`;
|
|
32
|
-
const LearnMoreButton = styled(motion.button)`
|
|
33
|
-
appearance: none;
|
|
34
|
-
user-select: none;
|
|
35
|
-
cursor: pointer;
|
|
36
|
-
display: inline-flex;
|
|
37
|
-
align-items: center;
|
|
38
|
-
justify-content: center;
|
|
39
|
-
gap: 10px;
|
|
40
|
-
height: 42px;
|
|
41
|
-
padding: 0 16px;
|
|
42
|
-
border-radius: 6px;
|
|
43
|
-
background: none;
|
|
44
|
-
color: var(--ck-body-color-muted);
|
|
45
|
-
font-size: 15px;
|
|
46
|
-
line-height: 18px;
|
|
47
|
-
font-weight: 500;
|
|
48
|
-
/* will-change: transform; */
|
|
49
|
-
transition:
|
|
50
|
-
color 200ms ease,
|
|
51
|
-
transform 100ms ease;
|
|
52
|
-
svg {
|
|
53
|
-
transition: all 100ms ease-out;
|
|
54
|
-
display: block;
|
|
55
|
-
position: relative;
|
|
56
|
-
top: 2px;
|
|
57
|
-
left: 2px;
|
|
58
|
-
transform: translateZ(0px);
|
|
59
|
-
path,
|
|
60
|
-
circle {
|
|
61
|
-
transition: all 100ms ease-out;
|
|
62
|
-
}
|
|
63
|
-
path:last-of-type {
|
|
64
|
-
transform-origin: 0 0;
|
|
65
|
-
transform: scaleX(1.3) skewY(-12deg);
|
|
66
|
-
opacity: 0;
|
|
67
|
-
}
|
|
68
|
-
circle {
|
|
69
|
-
transform: translate(20%, -15%);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
&:hover {
|
|
73
|
-
color: var(--ck-body-color-muted-hover);
|
|
74
|
-
svg {
|
|
75
|
-
path,
|
|
76
|
-
circle {
|
|
77
|
-
opacity: 1;
|
|
78
|
-
transform: none;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
&:active {
|
|
83
|
-
transform: scale(0.96);
|
|
84
|
-
}
|
|
85
|
-
`;
|
|
86
|
-
styled(motion.div)`
|
|
87
|
-
display: flex;
|
|
88
|
-
flex-direction: column;
|
|
89
|
-
gap: 12px;
|
|
90
|
-
padding: 0 0 16px;
|
|
91
|
-
overflow-y: scroll;
|
|
92
|
-
max-height: 20rem;
|
|
93
|
-
|
|
94
|
-
&::-webkit-scrollbar {
|
|
95
|
-
display: none;
|
|
96
|
-
}
|
|
97
|
-
`;
|
|
98
|
-
styled(motion.button)`
|
|
99
|
-
cursor: pointer;
|
|
100
|
-
user-select: none;
|
|
101
|
-
position: relative;
|
|
102
|
-
display: flex;
|
|
103
|
-
align-items: center;
|
|
104
|
-
padding: 0 20px;
|
|
105
|
-
width: 100%;
|
|
106
|
-
height: 64px;
|
|
107
|
-
font-size: 17px;
|
|
108
|
-
font-weight: var(--ck-primary-button-font-weight, 500);
|
|
109
|
-
line-height: 20px;
|
|
110
|
-
text-align: var(--ck-body-button-text-align, left);
|
|
111
|
-
transition: 180ms ease;
|
|
112
|
-
transition-property: background, color, box-shadow, transform, opacity;
|
|
113
|
-
will-change: transform, box-shadow, background-color, color, opacity;
|
|
114
|
-
|
|
115
|
-
--fallback-color: var(--ck-primary-button-color);
|
|
116
|
-
--fallback-background: var(--ck-primary-button-background);
|
|
117
|
-
--fallback-box-shadow: var(--ck-primary-button-box-shadow);
|
|
118
|
-
--fallback-border-radius: var(--ck-primary-button-border-radius);
|
|
119
|
-
|
|
120
|
-
--color: var(--ck-primary-button-color, var(--fallback-color));
|
|
121
|
-
--background: var(--ck-primary-button-background, var(--fallback-background));
|
|
122
|
-
--box-shadow: var(--ck-primary-button-box-shadow, var(--fallback-box-shadow));
|
|
123
|
-
--border-radius: var(
|
|
124
|
-
--ck-primary-button-border-radius,
|
|
125
|
-
var(--fallback-border-radius)
|
|
126
|
-
);
|
|
127
|
-
|
|
128
|
-
--hover-color: var(--ck-primary-button-hover-color, var(--color));
|
|
129
|
-
--hover-background: var(
|
|
130
|
-
--ck-primary-button-hover-background,
|
|
131
|
-
var(--background)
|
|
132
|
-
);
|
|
133
|
-
--hover-box-shadow: var(
|
|
134
|
-
--ck-primary-button-hover-box-shadow,
|
|
135
|
-
var(--box-shadow)
|
|
136
|
-
);
|
|
137
|
-
--hover-border-radius: var(
|
|
138
|
-
--ck-primary-button-hover-border-radius,
|
|
139
|
-
var(--border-radius)
|
|
140
|
-
);
|
|
141
|
-
|
|
142
|
-
--active-color: var(--ck-primary-button-active-color, var(--hover-color));
|
|
143
|
-
--active-background: var(
|
|
144
|
-
--ck-primary-button-active-background,
|
|
145
|
-
var(--hover-background)
|
|
146
|
-
);
|
|
147
|
-
--active-box-shadow: var(
|
|
148
|
-
--ck-primary-button-active-box-shadow,
|
|
149
|
-
var(--hover-box-shadow)
|
|
150
|
-
);
|
|
151
|
-
--active-border-radius: var(
|
|
152
|
-
--ck-primary-button-active-border-radius,
|
|
153
|
-
var(--hover-border-radius)
|
|
154
|
-
);
|
|
155
|
-
|
|
156
|
-
color: var(--color);
|
|
157
|
-
background: var(--background);
|
|
158
|
-
box-shadow: var(--box-shadow);
|
|
159
|
-
border-radius: var(--border-radius);
|
|
160
|
-
|
|
161
|
-
&:disabled {
|
|
162
|
-
transition: 180ms ease;
|
|
163
|
-
opacity: 0.4;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
--bg: var(--background);
|
|
167
|
-
&:not(:disabled) {
|
|
168
|
-
&:hover {
|
|
169
|
-
color: var(--hover-color);
|
|
170
|
-
background: var(--hover-background);
|
|
171
|
-
box-shadow: var(--hover-box-shadow);
|
|
172
|
-
border-radius: var(--hover-border-radius);
|
|
173
|
-
--bg: var(--hover-background, var(--background));
|
|
174
|
-
}
|
|
175
|
-
&:focus-visible {
|
|
176
|
-
transition-duration: 100ms;
|
|
177
|
-
color: var(--hover-color);
|
|
178
|
-
background: var(--hover-background);
|
|
179
|
-
box-shadow: var(--hover-box-shadow);
|
|
180
|
-
border-radius: var(--hover-border-radius);
|
|
181
|
-
--bg: var(--hover-background, var(--background));
|
|
182
|
-
}
|
|
183
|
-
&:active {
|
|
184
|
-
color: var(--active-color);
|
|
185
|
-
background: var(--active-background);
|
|
186
|
-
box-shadow: var(--active-box-shadow);
|
|
187
|
-
border-radius: var(--active-border-radius);
|
|
188
|
-
--bg: var(--active-background, var(--background));
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
`;
|
|
192
|
-
styled(motion.span)`
|
|
193
|
-
position: relative;
|
|
194
|
-
top: var(--ck-recent-badge-top-offset, 0.5px);
|
|
195
|
-
display: inline-block;
|
|
196
|
-
padding: 10px 7px;
|
|
197
|
-
line-height: 0;
|
|
198
|
-
font-size: 13px;
|
|
199
|
-
font-weight: 400;
|
|
200
|
-
border-radius: var(--ck-recent-badge-border-radius, var(--border-radius));
|
|
201
|
-
color: var(
|
|
202
|
-
--ck-recent-badge-color,
|
|
203
|
-
var(--ck-accent-color, var(--ck-body-color-muted, currentColor))
|
|
204
|
-
);
|
|
205
|
-
background: var(--ck-recent-badge-background, transparent);
|
|
206
|
-
overflow: hidden;
|
|
207
|
-
span {
|
|
208
|
-
display: inline-block;
|
|
209
|
-
position: relative;
|
|
210
|
-
}
|
|
211
|
-
&:before {
|
|
212
|
-
z-index: 1;
|
|
213
|
-
content: "";
|
|
214
|
-
position: absolute;
|
|
215
|
-
inset: 0;
|
|
216
|
-
opacity: 0.4;
|
|
217
|
-
box-shadow: var(--ck-recent-badge-box-shadow, inset 0 0 0 1px currentColor);
|
|
218
|
-
border-radius: inherit;
|
|
219
|
-
}
|
|
220
|
-
&:after {
|
|
221
|
-
z-index: 2;
|
|
222
|
-
content: "";
|
|
223
|
-
position: absolute;
|
|
224
|
-
inset: -10%;
|
|
225
|
-
top: -110%;
|
|
226
|
-
aspect-ratio: 1/1;
|
|
227
|
-
opacity: 0.7;
|
|
228
|
-
background: linear-gradient(
|
|
229
|
-
170deg,
|
|
230
|
-
transparent 10%,
|
|
231
|
-
var(--ck-recent-badge-background, var(--bg)) 50%,
|
|
232
|
-
transparent 90%
|
|
233
|
-
);
|
|
234
|
-
animation: ${Shimmer} 2s linear infinite;
|
|
235
|
-
}
|
|
236
|
-
`;
|
|
237
|
-
styled(motion.span)`
|
|
238
|
-
display: flex;
|
|
239
|
-
align-items: center;
|
|
240
|
-
gap: 9px;
|
|
241
|
-
width: 100%;
|
|
242
|
-
overflow: hidden;
|
|
243
|
-
white-space: nowrap;
|
|
244
|
-
text-overflow: ellipsis;
|
|
245
|
-
padding: 2px 0;
|
|
246
|
-
padding-right: 38px;
|
|
247
|
-
`;
|
|
248
|
-
styled(motion.div)`
|
|
249
|
-
position: absolute;
|
|
250
|
-
right: 20px;
|
|
251
|
-
width: 32px;
|
|
252
|
-
height: 32px;
|
|
253
|
-
overflow: hidden;
|
|
254
|
-
svg,
|
|
255
|
-
img {
|
|
256
|
-
display: block;
|
|
257
|
-
position: relative;
|
|
258
|
-
pointer-events: none;
|
|
259
|
-
overflow: hidden;
|
|
260
|
-
border-radius: 27.5%;
|
|
261
|
-
width: 100%;
|
|
262
|
-
height: 100%;
|
|
263
|
-
}
|
|
264
|
-
`;
|
|
265
|
-
|
|
266
|
-
export { InfoBox, InfoBoxButtons, LearnMoreButton, LearnMoreContainer };
|
|
267
|
-
//# sourceMappingURL=styles.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sources":["../../../../../src/components/Pages/Connectors/styles.ts"],"sourcesContent":["import { keyframes } from \"styled-components\";\nimport styled from \"./../../../styles/styled\";\n\nimport { motion } from \"framer-motion\";\nimport { ModalBody } from \"../../Common/Modal/styles\";\n\nconst Shimmer = keyframes`\n 0%{ transform: translate(-100%) rotate(-45deg); }\n 100%{ transform: translate(100%) rotate(-80deg); }\n`;\n\nexport const InfoBox = styled.div`\n padding: 24px 24px 28px;\n border-radius: var(--ck-tertiary-border-radius, 24px);\n box-shadow: var(--ck-tertiary-box-shadow, none);\n background: var(--ck-body-background-tertiary);\n ${ModalBody} {\n max-width: none;\n }\n`;\nexport const InfoBoxButtons = styled.div`\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 16px;\n margin: 5px -8px -12px;\n button {\n }\n`;\nexport const LearnMoreContainer = styled(motion.div)`\n text-align: center;\n margin-top: 16px;\n margin-bottom: -6px;\n`;\nexport const LearnMoreButton = styled(motion.button)`\n appearance: none;\n user-select: none;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n height: 42px;\n padding: 0 16px;\n border-radius: 6px;\n background: none;\n color: var(--ck-body-color-muted);\n font-size: 15px;\n line-height: 18px;\n font-weight: 500;\n /* will-change: transform; */\n transition:\n color 200ms ease,\n transform 100ms ease;\n svg {\n transition: all 100ms ease-out;\n display: block;\n position: relative;\n top: 2px;\n left: 2px;\n transform: translateZ(0px);\n path,\n circle {\n transition: all 100ms ease-out;\n }\n path:last-of-type {\n transform-origin: 0 0;\n transform: scaleX(1.3) skewY(-12deg);\n opacity: 0;\n }\n circle {\n transform: translate(20%, -15%);\n }\n }\n &:hover {\n color: var(--ck-body-color-muted-hover);\n svg {\n path,\n circle {\n opacity: 1;\n transform: none;\n }\n }\n }\n &:active {\n transform: scale(0.96);\n }\n`;\n\nexport const ConnectorsContainer = styled(motion.div)`\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 0 0 16px;\n overflow-y: scroll;\n max-height: 20rem;\n\n &::-webkit-scrollbar {\n display: none;\n }\n`;\n\nexport const ConnectorButton = styled(motion.button)`\n cursor: pointer;\n user-select: none;\n position: relative;\n display: flex;\n align-items: center;\n padding: 0 20px;\n width: 100%;\n height: 64px;\n font-size: 17px;\n font-weight: var(--ck-primary-button-font-weight, 500);\n line-height: 20px;\n text-align: var(--ck-body-button-text-align, left);\n transition: 180ms ease;\n transition-property: background, color, box-shadow, transform, opacity;\n will-change: transform, box-shadow, background-color, color, opacity;\n\n --fallback-color: var(--ck-primary-button-color);\n --fallback-background: var(--ck-primary-button-background);\n --fallback-box-shadow: var(--ck-primary-button-box-shadow);\n --fallback-border-radius: var(--ck-primary-button-border-radius);\n\n --color: var(--ck-primary-button-color, var(--fallback-color));\n --background: var(--ck-primary-button-background, var(--fallback-background));\n --box-shadow: var(--ck-primary-button-box-shadow, var(--fallback-box-shadow));\n --border-radius: var(\n --ck-primary-button-border-radius,\n var(--fallback-border-radius)\n );\n\n --hover-color: var(--ck-primary-button-hover-color, var(--color));\n --hover-background: var(\n --ck-primary-button-hover-background,\n var(--background)\n );\n --hover-box-shadow: var(\n --ck-primary-button-hover-box-shadow,\n var(--box-shadow)\n );\n --hover-border-radius: var(\n --ck-primary-button-hover-border-radius,\n var(--border-radius)\n );\n\n --active-color: var(--ck-primary-button-active-color, var(--hover-color));\n --active-background: var(\n --ck-primary-button-active-background,\n var(--hover-background)\n );\n --active-box-shadow: var(\n --ck-primary-button-active-box-shadow,\n var(--hover-box-shadow)\n );\n --active-border-radius: var(\n --ck-primary-button-active-border-radius,\n var(--hover-border-radius)\n );\n\n color: var(--color);\n background: var(--background);\n box-shadow: var(--box-shadow);\n border-radius: var(--border-radius);\n\n &:disabled {\n transition: 180ms ease;\n opacity: 0.4;\n }\n\n --bg: var(--background);\n &:not(:disabled) {\n &:hover {\n color: var(--hover-color);\n background: var(--hover-background);\n box-shadow: var(--hover-box-shadow);\n border-radius: var(--hover-border-radius);\n --bg: var(--hover-background, var(--background));\n }\n &:focus-visible {\n transition-duration: 100ms;\n color: var(--hover-color);\n background: var(--hover-background);\n box-shadow: var(--hover-box-shadow);\n border-radius: var(--hover-border-radius);\n --bg: var(--hover-background, var(--background));\n }\n &:active {\n color: var(--active-color);\n background: var(--active-background);\n box-shadow: var(--active-box-shadow);\n border-radius: var(--active-border-radius);\n --bg: var(--active-background, var(--background));\n }\n }\n`;\nexport const ConnectorRecentlyUsed = styled(motion.span)`\n position: relative;\n top: var(--ck-recent-badge-top-offset, 0.5px);\n display: inline-block;\n padding: 10px 7px;\n line-height: 0;\n font-size: 13px;\n font-weight: 400;\n border-radius: var(--ck-recent-badge-border-radius, var(--border-radius));\n color: var(\n --ck-recent-badge-color,\n var(--ck-accent-color, var(--ck-body-color-muted, currentColor))\n );\n background: var(--ck-recent-badge-background, transparent);\n overflow: hidden;\n span {\n display: inline-block;\n position: relative;\n }\n &:before {\n z-index: 1;\n content: \"\";\n position: absolute;\n inset: 0;\n opacity: 0.4;\n box-shadow: var(--ck-recent-badge-box-shadow, inset 0 0 0 1px currentColor);\n border-radius: inherit;\n }\n &:after {\n z-index: 2;\n content: \"\";\n position: absolute;\n inset: -10%;\n top: -110%;\n aspect-ratio: 1/1;\n opacity: 0.7;\n background: linear-gradient(\n 170deg,\n transparent 10%,\n var(--ck-recent-badge-background, var(--bg)) 50%,\n transparent 90%\n );\n animation: ${Shimmer} 2s linear infinite;\n }\n`;\n\nexport const ConnectorLabel = styled(motion.span)`\n display: flex;\n align-items: center;\n gap: 9px;\n width: 100%;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding: 2px 0;\n padding-right: 38px;\n`;\n\nexport const ConnectorIcon = styled(motion.div)`\n position: absolute;\n right: 20px;\n width: 32px;\n height: 32px;\n overflow: hidden;\n svg,\n img {\n display: block;\n position: relative;\n pointer-events: none;\n overflow: hidden;\n border-radius: 27.5%;\n width: 100%;\n height: 100%;\n }\n`;\n"],"names":[],"mappings":";;;;;AAMA,MAAM,OAAU,GAAA,SAAA,CAAA;AAAA;AAAA;AAAA,CAAA,CAAA;AAKT,MAAM,UAAU,MAAO,CAAA,GAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,EAK1B,SAAS,CAAA;AAAA;AAAA;AAAA,EAAA;AAIN,MAAM,iBAAiB,MAAO,CAAA,GAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAQxB,MAAA,kBAAA,GAAqB,MAAO,CAAA,MAAA,CAAO,GAAG,CAAA,CAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAKtC,MAAA,eAAA,GAAkB,MAAO,CAAA,MAAA,CAAO,MAAM,CAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAuDhB,MAAO,CAAA,MAAA,CAAO,GAAG,CAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAarB,MAAO,CAAA,MAAA,CAAO,MAAM,CAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AA8Fd,MAAO,CAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAAA,EA0CtC,OAAO,CAAA;AAAA;AAAA,EAAA;AAIM,MAAO,CAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAYnB,MAAO,CAAA,MAAA,CAAO,GAAG,CAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;"}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import React__default, { ReactNode } from 'react';
|
|
2
|
-
|
|
3
|
-
type Hash = `0x${string}`;
|
|
4
|
-
type CustomAvatarProps = {
|
|
5
|
-
address?: Hash | undefined;
|
|
6
|
-
ensName?: string | undefined;
|
|
7
|
-
ensImage?: string;
|
|
8
|
-
size: number;
|
|
9
|
-
radius: number;
|
|
10
|
-
};
|
|
11
|
-
/** Icon for an Ethereum address. Supports ENS names and avatars. */
|
|
12
|
-
declare const Avatar: React__default.FC<{
|
|
13
|
-
address?: Hash | undefined;
|
|
14
|
-
name?: string | undefined;
|
|
15
|
-
size?: number;
|
|
16
|
-
radius?: number;
|
|
17
|
-
}>;
|
|
18
|
-
|
|
19
|
-
type Languages$1 = "ar-AE" | "en-US" | "ee-EE" | "es-ES" | "fa-IR" | "fr-FR" | "ja-JP" | "pt-BR" | "zh-CN" | "ca-AD" | "ru-RU" | "zh-CN" | "tr-TR" | "vi-VN";
|
|
20
|
-
|
|
21
|
-
type Languages = Languages$1;
|
|
22
|
-
type Theme = "auto" | "web95" | "retro" | "soft" | "midnight" | "minimal" | "rounded" | "nouns";
|
|
23
|
-
type Mode = "light" | "dark" | "auto";
|
|
24
|
-
type CustomTheme = any;
|
|
25
|
-
type All = {
|
|
26
|
-
theme?: Theme;
|
|
27
|
-
mode?: Mode;
|
|
28
|
-
customTheme?: CustomTheme;
|
|
29
|
-
lang?: Languages;
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
/** Global options, across all pay buttons and payments. */
|
|
33
|
-
type DaimoPayContextOptions = {
|
|
34
|
-
language?: Languages;
|
|
35
|
-
hideBalance?: boolean;
|
|
36
|
-
hideTooltips?: boolean;
|
|
37
|
-
hideQuestionMarkCTA?: boolean;
|
|
38
|
-
hideNoWalletCTA?: boolean;
|
|
39
|
-
hideRecentBadge?: boolean;
|
|
40
|
-
/** Avoids layout shift when the DaimoPay modal is open by adding padding to the body */
|
|
41
|
-
avoidLayoutShift?: boolean;
|
|
42
|
-
/** Automatically embeds Google Font of the current theme. Does not work with custom themes */
|
|
43
|
-
embedGoogleFonts?: boolean;
|
|
44
|
-
truncateLongENSAddress?: boolean;
|
|
45
|
-
reducedMotion?: boolean;
|
|
46
|
-
disclaimer?: ReactNode | string;
|
|
47
|
-
bufferPolyfill?: boolean;
|
|
48
|
-
customAvatar?: React.FC<CustomAvatarProps>;
|
|
49
|
-
initialChainId?: number;
|
|
50
|
-
enforceSupportedChains?: boolean;
|
|
51
|
-
ethereumOnboardingUrl?: string;
|
|
52
|
-
walletOnboardingUrl?: string;
|
|
53
|
-
/** Blur the background when the modal is open */
|
|
54
|
-
overlayBlur?: number;
|
|
55
|
-
/** Disable mobile wallet injector detection */
|
|
56
|
-
disableMobileInjector?: boolean;
|
|
57
|
-
};
|
|
58
|
-
/** Modal UI options, set on the pay button triggering that modal. */
|
|
59
|
-
type DaimoPayModalOptions = {
|
|
60
|
-
closeOnSuccess?: boolean;
|
|
61
|
-
resetOnSuccess?: boolean;
|
|
62
|
-
connectedWalletOnly?: boolean;
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
export { Avatar as A };
|
|
66
|
-
export type { CustomTheme as C, DaimoPayContextOptions as D, Languages as L, Mode as M, Theme as T, DaimoPayModalOptions as a, CustomAvatarProps as b, All as c };
|