@relayprotocol/relay-kit-ui 11.0.3 → 11.0.4

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.
Files changed (30) hide show
  1. package/_cjs/src/components/common/TransactionModal/TransactionModalRenderer.js +6 -0
  2. package/_cjs/src/components/common/TransactionModal/TransactionModalRenderer.js.map +1 -1
  3. package/_cjs/src/constants/walletCompatibility.js +2 -1
  4. package/_cjs/src/constants/walletCompatibility.js.map +1 -1
  5. package/_cjs/src/utils/relayTransaction.js +4 -3
  6. package/_cjs/src/utils/relayTransaction.js.map +1 -1
  7. package/_cjs/src/utils/solana.js +1 -1
  8. package/_cjs/src/utils/solana.js.map +1 -1
  9. package/_cjs/src/version.js +1 -1
  10. package/_cjs/src/version.js.map +1 -1
  11. package/_cjs/tsconfig.build.tsbuildinfo +1 -1
  12. package/_esm/src/components/common/TransactionModal/TransactionModalRenderer.js +8 -0
  13. package/_esm/src/components/common/TransactionModal/TransactionModalRenderer.js.map +1 -1
  14. package/_esm/src/constants/walletCompatibility.js +2 -1
  15. package/_esm/src/constants/walletCompatibility.js.map +1 -1
  16. package/_esm/src/utils/relayTransaction.js +11 -3
  17. package/_esm/src/utils/relayTransaction.js.map +1 -1
  18. package/_esm/src/utils/solana.js +1 -1
  19. package/_esm/src/utils/solana.js.map +1 -1
  20. package/_esm/src/version.js +1 -1
  21. package/_esm/src/version.js.map +1 -1
  22. package/_esm/tsconfig.build.tsbuildinfo +1 -1
  23. package/_types/src/components/common/TransactionModal/TransactionModalRenderer.d.ts.map +1 -1
  24. package/_types/src/constants/walletCompatibility.d.ts.map +1 -1
  25. package/_types/src/utils/relayTransaction.d.ts +6 -0
  26. package/_types/src/utils/relayTransaction.d.ts.map +1 -1
  27. package/_types/src/utils/solana.d.ts.map +1 -1
  28. package/_types/src/version.d.ts +1 -1
  29. package/_types/tsconfig.build.tsbuildinfo +1 -1
  30. package/package.json +1 -1
@@ -116,6 +116,14 @@ export const TransactionModalRenderer = ({ open, slippageTolerance, wallet, step
116
116
  if (!transaction) {
117
117
  return 2500;
118
118
  }
119
+ // Keep polling until the request reaches a terminal status so the
120
+ // success view can replace quoted values with the final actual ones
121
+ const isTerminalStatus = transaction.status === 'success' ||
122
+ transaction.status === 'failure' ||
123
+ transaction.status === 'refund';
124
+ if (!isTerminalStatus) {
125
+ return 2500;
126
+ }
119
127
  // If this is a refund but outTxs is not populated yet, keep polling
120
128
  const isRefund = transaction.status === 'refund' ||
121
129
  transaction.data?.refundCurrencyData;
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionModalRenderer.js","sourceRoot":"","sources":["../../../../../src/components/common/TransactionModal/TransactionModalRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n type FC,\n useMemo,\n useState,\n useEffect,\n type ReactNode,\n type SetStateAction,\n type Dispatch\n} from 'react'\nimport { type Address } from 'viem'\nimport {\n type AdaptedWallet,\n type Execute,\n type ExecuteStep,\n type ExecuteStepItem\n} from '@relayprotocol/relay-sdk'\nimport {\n calculateFillTime,\n extractDepositRequestId\n} from '../../../utils/relayTransaction.js'\nimport type { Token } from '../../../types/index.js'\nimport { useRequests } from '@relayprotocol/relay-kit-hooks'\nimport { useRelayClient } from '../../../hooks/index.js'\nimport {\n calculatePriceTimeEstimate,\n isGasSponsored\n} from '../../../utils/quote.js'\nexport enum TransactionProgressStep {\n Confirmation,\n Submitted,\n Success,\n Error\n}\n\nexport type TxHashes = {\n txHash: string\n chainId: number\n isBatchTx?: boolean\n}[]\n\nexport type ChildrenProps = {\n wallet?: AdaptedWallet\n progressStep: TransactionProgressStep\n setProgressStep: Dispatch<SetStateAction<TransactionProgressStep>>\n currentStep?: ExecuteStep | null\n setCurrentStep: Dispatch<SetStateAction<ExecuteStep | undefined | null>>\n currentStepItem: ExecuteStepItem | null | undefined\n setCurrentStepItem: Dispatch<\n SetStateAction<ExecuteStepItem | null | undefined>\n >\n quote: Execute | null\n swapError: Error | null\n setSwapError: Dispatch<SetStateAction<Error | null>>\n steps: Execute['steps'] | null\n waitingForSteps: boolean\n allTxHashes: TxHashes\n setAllTxHashes: Dispatch<SetStateAction<TxHashes>>\n transaction: ReturnType<typeof useRequests>['data']['0']\n seconds: number\n fillTime: string\n requestId: string | null\n isLoadingTransaction: boolean\n isAutoSlippage: boolean\n timeEstimate?: { time: number; formattedTime: string }\n isGasSponsored: boolean\n currentCheckStatus?: ExecuteStepItem['checkStatus']\n}\n\ntype Props = {\n open: boolean\n address?: Address | string\n fromToken?: Token\n toToken?: Token\n slippageTolerance?: string\n wallet?: AdaptedWallet\n steps: Execute['steps'] | null\n quote: Execute | null\n swapError: Error | null\n setSwapError: Dispatch<SetStateAction<Error | null>>\n children: (props: ChildrenProps) => ReactNode\n onSuccess?: (quote: Execute, steps: Execute['steps']) => void\n onValidating?: (quote: Execute) => void\n}\n\nexport const TransactionModalRenderer: FC<Props> = ({\n open,\n slippageTolerance,\n wallet,\n steps,\n quote,\n swapError,\n setSwapError,\n children,\n onSuccess,\n onValidating\n}) => {\n const relayClient = useRelayClient()\n const chainId = quote?.details?.currencyIn?.currency?.chainId || 1\n\n const [progressStep, setProgressStep] = useState(\n TransactionProgressStep.Confirmation\n )\n const [currentStep, setCurrentStep] = useState<\n null | NonNullable<Execute['steps']>['0']\n >()\n const [currentStepItem, setCurrentStepItem] = useState<\n null | NonNullable<NonNullable<Execute['steps']>['0']['items']>['0']\n >()\n const [allTxHashes, setAllTxHashes] = useState<TxHashes>([])\n const [waitingForSteps, setWaitingForSteps] = useState(false)\n const [hasStartedValidation, setHasStartedValidation] = useState(false)\n\n useEffect(() => {\n if (!open) {\n setHasStartedValidation(false)\n }\n }, [open])\n\n useEffect(() => {\n if (swapError) {\n setProgressStep(TransactionProgressStep.Error)\n return\n }\n if (!steps) {\n return\n }\n\n const executableSteps = steps.filter(\n (step) => step.items && step.items.length > 0\n )\n\n let stepCount = executableSteps.length\n let txHashes: TxHashes = []\n let currentStep: NonNullable<Execute['steps']>['0'] | null = null\n let currentStepItem:\n | NonNullable<Execute['steps'][0]['items']>[0]\n | undefined\n\n for (const step of executableSteps) {\n for (const item of step.items || []) {\n if (item.txHashes && item.txHashes.length > 0) {\n txHashes = item.txHashes.concat([...txHashes])\n }\n if (item.internalTxHashes && item.internalTxHashes.length > 0) {\n txHashes = item.internalTxHashes.concat([...txHashes])\n }\n if (item.status === 'incomplete') {\n currentStep = step\n currentStepItem = item\n\n break // Exit the inner loop once the first incomplete item is found\n }\n }\n if (currentStep && currentStepItem) break // Exit the outer loop if the current step and item have been found\n }\n\n setAllTxHashes(txHashes)\n\n if (\n !hasStartedValidation &&\n (txHashes.length > 0 || currentStepItem?.isValidatingSignature == true) &&\n progressStep === TransactionProgressStep.Confirmation\n ) {\n onValidating?.(quote as Execute)\n setHasStartedValidation(true)\n }\n\n if (!currentStep) {\n currentStep = executableSteps[stepCount - 1]\n }\n\n setCurrentStep(currentStep)\n setCurrentStepItem(currentStepItem)\n\n const isBitcoinDestination =\n quote?.details?.currencyOut?.currency?.chainId === 8253038\n\n const allStepsComplete = steps.every(\n (step) =>\n !step.items ||\n step.items.length == 0 ||\n step.items?.every((item) => {\n if (isBitcoinDestination && item.checkStatus === 'submitted') {\n return true\n }\n return item.status === 'complete'\n })\n )\n\n const hasPendingItems = steps.some((step) =>\n step.items?.some((item) => item.checkStatus === 'pending')\n )\n\n const hasSubmittedItems = steps.some((step) =>\n step.items?.some((item) => item.checkStatus === 'submitted')\n )\n\n // Check if any step items are still validating\n const hasValidatingItems = steps.some((step) =>\n step.items?.some(\n (item) =>\n item.isValidatingSignature === true ||\n item.progressState === 'validating'\n )\n )\n\n // Transition to Submitted state when items are pending or submitted\n if (\n (hasPendingItems || hasSubmittedItems) &&\n progressStep === TransactionProgressStep.Confirmation &&\n !hasValidatingItems\n ) {\n setProgressStep(TransactionProgressStep.Submitted)\n onValidating?.(quote as Execute)\n }\n\n // Only show success if all steps are complete\n if (allStepsComplete && progressStep !== TransactionProgressStep.Success) {\n setProgressStep(TransactionProgressStep.Success)\n onSuccess?.(quote as Execute, steps)\n }\n }, [steps, swapError])\n\n const requestId = useMemo(() => extractDepositRequestId(steps), [steps])\n\n // Fetch Success Tx\n const { data: transactions, isInitialLoading: isLoadingTransaction } =\n useRequests(\n (progressStep === TransactionProgressStep.Success ||\n progressStep === TransactionProgressStep.Error) &&\n requestId\n ? { id: requestId }\n : undefined,\n relayClient?.baseApiUrl,\n {\n enabled:\n (progressStep === TransactionProgressStep.Success ||\n progressStep === TransactionProgressStep.Error) &&\n (requestId || allTxHashes[0])\n ? true\n : false,\n refetchInterval(query) {\n if (query.state.dataUpdateCount > 10) {\n return 0\n }\n const transaction = query.state.data?.pages[0].requests?.[0]\n if (!transaction) {\n return 2500\n }\n // If this is a refund but outTxs is not populated yet, keep polling\n const isRefund =\n transaction.status === 'refund' ||\n transaction.data?.refundCurrencyData\n if (\n isRefund &&\n (!transaction.data?.outTxs || transaction.data.outTxs.length === 0)\n ) {\n return 2500\n }\n return 0\n }\n }\n )\n const transaction = transactions[0]\n const { fillTime, seconds } = calculateFillTime(transaction)\n\n const isAutoSlippage = slippageTolerance === undefined\n const timeEstimate = calculatePriceTimeEstimate(quote?.details)\n const _isGasSponsored = isGasSponsored(quote as Execute)\n\n return (\n <>\n {children({\n wallet,\n progressStep,\n setProgressStep,\n currentStep,\n setCurrentStep,\n currentStepItem,\n setCurrentStepItem,\n quote,\n steps,\n waitingForSteps,\n swapError,\n setSwapError,\n allTxHashes,\n setAllTxHashes,\n transaction,\n fillTime,\n seconds,\n requestId,\n isLoadingTransaction,\n isAutoSlippage,\n timeEstimate,\n isGasSponsored: _isGasSponsored,\n currentCheckStatus: currentStepItem?.checkStatus\n })}\n </>\n )\n}\n"]}
1
+ {"version":3,"file":"TransactionModalRenderer.js","sourceRoot":"","sources":["../../../../../src/components/common/TransactionModal/TransactionModalRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n type FC,\n useMemo,\n useState,\n useEffect,\n type ReactNode,\n type SetStateAction,\n type Dispatch\n} from 'react'\nimport { type Address } from 'viem'\nimport {\n type AdaptedWallet,\n type Execute,\n type ExecuteStep,\n type ExecuteStepItem\n} from '@relayprotocol/relay-sdk'\nimport {\n calculateFillTime,\n extractDepositRequestId\n} from '../../../utils/relayTransaction.js'\nimport type { Token } from '../../../types/index.js'\nimport { useRequests } from '@relayprotocol/relay-kit-hooks'\nimport { useRelayClient } from '../../../hooks/index.js'\nimport {\n calculatePriceTimeEstimate,\n isGasSponsored\n} from '../../../utils/quote.js'\nexport enum TransactionProgressStep {\n Confirmation,\n Submitted,\n Success,\n Error\n}\n\nexport type TxHashes = {\n txHash: string\n chainId: number\n isBatchTx?: boolean\n}[]\n\nexport type ChildrenProps = {\n wallet?: AdaptedWallet\n progressStep: TransactionProgressStep\n setProgressStep: Dispatch<SetStateAction<TransactionProgressStep>>\n currentStep?: ExecuteStep | null\n setCurrentStep: Dispatch<SetStateAction<ExecuteStep | undefined | null>>\n currentStepItem: ExecuteStepItem | null | undefined\n setCurrentStepItem: Dispatch<\n SetStateAction<ExecuteStepItem | null | undefined>\n >\n quote: Execute | null\n swapError: Error | null\n setSwapError: Dispatch<SetStateAction<Error | null>>\n steps: Execute['steps'] | null\n waitingForSteps: boolean\n allTxHashes: TxHashes\n setAllTxHashes: Dispatch<SetStateAction<TxHashes>>\n transaction: ReturnType<typeof useRequests>['data']['0']\n seconds: number\n fillTime: string\n requestId: string | null\n isLoadingTransaction: boolean\n isAutoSlippage: boolean\n timeEstimate?: { time: number; formattedTime: string }\n isGasSponsored: boolean\n currentCheckStatus?: ExecuteStepItem['checkStatus']\n}\n\ntype Props = {\n open: boolean\n address?: Address | string\n fromToken?: Token\n toToken?: Token\n slippageTolerance?: string\n wallet?: AdaptedWallet\n steps: Execute['steps'] | null\n quote: Execute | null\n swapError: Error | null\n setSwapError: Dispatch<SetStateAction<Error | null>>\n children: (props: ChildrenProps) => ReactNode\n onSuccess?: (quote: Execute, steps: Execute['steps']) => void\n onValidating?: (quote: Execute) => void\n}\n\nexport const TransactionModalRenderer: FC<Props> = ({\n open,\n slippageTolerance,\n wallet,\n steps,\n quote,\n swapError,\n setSwapError,\n children,\n onSuccess,\n onValidating\n}) => {\n const relayClient = useRelayClient()\n const chainId = quote?.details?.currencyIn?.currency?.chainId || 1\n\n const [progressStep, setProgressStep] = useState(\n TransactionProgressStep.Confirmation\n )\n const [currentStep, setCurrentStep] = useState<\n null | NonNullable<Execute['steps']>['0']\n >()\n const [currentStepItem, setCurrentStepItem] = useState<\n null | NonNullable<NonNullable<Execute['steps']>['0']['items']>['0']\n >()\n const [allTxHashes, setAllTxHashes] = useState<TxHashes>([])\n const [waitingForSteps, setWaitingForSteps] = useState(false)\n const [hasStartedValidation, setHasStartedValidation] = useState(false)\n\n useEffect(() => {\n if (!open) {\n setHasStartedValidation(false)\n }\n }, [open])\n\n useEffect(() => {\n if (swapError) {\n setProgressStep(TransactionProgressStep.Error)\n return\n }\n if (!steps) {\n return\n }\n\n const executableSteps = steps.filter(\n (step) => step.items && step.items.length > 0\n )\n\n let stepCount = executableSteps.length\n let txHashes: TxHashes = []\n let currentStep: NonNullable<Execute['steps']>['0'] | null = null\n let currentStepItem:\n | NonNullable<Execute['steps'][0]['items']>[0]\n | undefined\n\n for (const step of executableSteps) {\n for (const item of step.items || []) {\n if (item.txHashes && item.txHashes.length > 0) {\n txHashes = item.txHashes.concat([...txHashes])\n }\n if (item.internalTxHashes && item.internalTxHashes.length > 0) {\n txHashes = item.internalTxHashes.concat([...txHashes])\n }\n if (item.status === 'incomplete') {\n currentStep = step\n currentStepItem = item\n\n break // Exit the inner loop once the first incomplete item is found\n }\n }\n if (currentStep && currentStepItem) break // Exit the outer loop if the current step and item have been found\n }\n\n setAllTxHashes(txHashes)\n\n if (\n !hasStartedValidation &&\n (txHashes.length > 0 || currentStepItem?.isValidatingSignature == true) &&\n progressStep === TransactionProgressStep.Confirmation\n ) {\n onValidating?.(quote as Execute)\n setHasStartedValidation(true)\n }\n\n if (!currentStep) {\n currentStep = executableSteps[stepCount - 1]\n }\n\n setCurrentStep(currentStep)\n setCurrentStepItem(currentStepItem)\n\n const isBitcoinDestination =\n quote?.details?.currencyOut?.currency?.chainId === 8253038\n\n const allStepsComplete = steps.every(\n (step) =>\n !step.items ||\n step.items.length == 0 ||\n step.items?.every((item) => {\n if (isBitcoinDestination && item.checkStatus === 'submitted') {\n return true\n }\n return item.status === 'complete'\n })\n )\n\n const hasPendingItems = steps.some((step) =>\n step.items?.some((item) => item.checkStatus === 'pending')\n )\n\n const hasSubmittedItems = steps.some((step) =>\n step.items?.some((item) => item.checkStatus === 'submitted')\n )\n\n // Check if any step items are still validating\n const hasValidatingItems = steps.some((step) =>\n step.items?.some(\n (item) =>\n item.isValidatingSignature === true ||\n item.progressState === 'validating'\n )\n )\n\n // Transition to Submitted state when items are pending or submitted\n if (\n (hasPendingItems || hasSubmittedItems) &&\n progressStep === TransactionProgressStep.Confirmation &&\n !hasValidatingItems\n ) {\n setProgressStep(TransactionProgressStep.Submitted)\n onValidating?.(quote as Execute)\n }\n\n // Only show success if all steps are complete\n if (allStepsComplete && progressStep !== TransactionProgressStep.Success) {\n setProgressStep(TransactionProgressStep.Success)\n onSuccess?.(quote as Execute, steps)\n }\n }, [steps, swapError])\n\n const requestId = useMemo(() => extractDepositRequestId(steps), [steps])\n\n // Fetch Success Tx\n const { data: transactions, isInitialLoading: isLoadingTransaction } =\n useRequests(\n (progressStep === TransactionProgressStep.Success ||\n progressStep === TransactionProgressStep.Error) &&\n requestId\n ? { id: requestId }\n : undefined,\n relayClient?.baseApiUrl,\n {\n enabled:\n (progressStep === TransactionProgressStep.Success ||\n progressStep === TransactionProgressStep.Error) &&\n (requestId || allTxHashes[0])\n ? true\n : false,\n refetchInterval(query) {\n if (query.state.dataUpdateCount > 10) {\n return 0\n }\n const transaction = query.state.data?.pages[0].requests?.[0]\n if (!transaction) {\n return 2500\n }\n // Keep polling until the request reaches a terminal status so the\n // success view can replace quoted values with the final actual ones\n const isTerminalStatus =\n transaction.status === 'success' ||\n transaction.status === 'failure' ||\n transaction.status === 'refund'\n if (!isTerminalStatus) {\n return 2500\n }\n // If this is a refund but outTxs is not populated yet, keep polling\n const isRefund =\n transaction.status === 'refund' ||\n transaction.data?.refundCurrencyData\n if (\n isRefund &&\n (!transaction.data?.outTxs || transaction.data.outTxs.length === 0)\n ) {\n return 2500\n }\n return 0\n }\n }\n )\n const transaction = transactions[0]\n const { fillTime, seconds } = calculateFillTime(transaction)\n\n const isAutoSlippage = slippageTolerance === undefined\n const timeEstimate = calculatePriceTimeEstimate(quote?.details)\n const _isGasSponsored = isGasSponsored(quote as Execute)\n\n return (\n <>\n {children({\n wallet,\n progressStep,\n setProgressStep,\n currentStep,\n setCurrentStep,\n currentStepItem,\n setCurrentStepItem,\n quote,\n steps,\n waitingForSteps,\n swapError,\n setSwapError,\n allTxHashes,\n setAllTxHashes,\n transaction,\n fillTime,\n seconds,\n requestId,\n isLoadingTransaction,\n isAutoSlippage,\n timeEstimate,\n isGasSponsored: _isGasSponsored,\n currentCheckStatus: currentStepItem?.checkStatus\n })}\n </>\n )\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  export const WalletChainRestricted = {
2
2
  phantom: [1, 8453, 792703809, 137, 8253038, 101, 10143, 143, 999],
3
- backpack: [1, 8453, 137, 42161, 10, 10143, 80094, 9286185, 792703809],
3
+ backpack: [1, 8453, 137, 42161, 10, 10143, 80094, 792703809],
4
4
  magiceden: [
5
5
  1, 137, 8453, 33139, 8253038, 792703809, 1329, 2741, 42161, 80094, 56, 43114
6
6
  ],
@@ -19,6 +19,7 @@ export const WalletChainIncompatible = {
19
19
  coinbase: [4663]
20
20
  };
21
21
  export const NormalizedWalletName = {
22
+ backpackeclipse: 'backpack',
22
23
  phantomevm: 'phantom',
23
24
  phantombtc: 'phantom',
24
25
  magicedensol: 'magiceden',
@@ -1 +1 @@
1
- {"version":3,"file":"walletCompatibility.js","sourceRoot":"","sources":["../../../src/constants/walletCompatibility.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAA6B;IAC7D,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;IACjE,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC;IACrE,SAAS,EAAE;QACT,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK;KAC7E;IACD,OAAO,EAAE;QACP,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;QACxE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;KACnC;IACD,QAAQ,EAAE,CAAC,IAAI,CAAC;IAChB,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;IACtC,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC;IAClD,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC;CAC/D,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAA6B;IAC/D,OAAO,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;IACxB,SAAS,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;IAC1B,QAAQ,EAAE,CAAC,IAAI,CAAC;CACjB,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAA2B;IAC1D,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,SAAS;IACrB,YAAY,EAAE,WAAW;IACzB,WAAW,EAAE,OAAO;IACpB,eAAe,EAAE,WAAW;IAC5B,aAAa,EAAE,SAAS;IACxB,QAAQ,EAAE,OAAO;IACjB,SAAS,EAAE,OAAO;IAClB,iBAAiB,EAAE,UAAU;IAC7B,OAAO,EAAE,UAAU;CACpB,CAAA","sourcesContent":["export const WalletChainRestricted: Record<string, number[]> = {\n phantom: [1, 8453, 792703809, 137, 8253038, 101, 10143, 143, 999],\n backpack: [1, 8453, 137, 42161, 10, 10143, 80094, 9286185, 792703809],\n magiceden: [\n 1, 137, 8453, 33139, 8253038, 792703809, 1329, 2741, 42161, 80094, 56, 43114\n ],\n uniswap: [\n 1, 130, 42161, 43114, 8453, 81457, 56, 42220, 10, 137, 480, 324, 7777777,\n 4663, 59144, 143, 1868, 4326, 4217\n ],\n abstract: [2741],\n ronin: [1, 56, 137, 42161, 8453, 2020],\n porto: [8453, 42161, 56, 42220, 1, 10, 137, 80094],\n robinhood: [1, 10, 137, 4663, 8453, 42161, 8253038, 792703809]\n}\n\nexport const WalletChainIncompatible: Record<string, number[]> = {\n binance: [7777777, 8453],\n binanceus: [7777777, 8453],\n coinbase: [4663]\n}\n\nexport const NormalizedWalletName: Record<string, string> = {\n phantomevm: 'phantom',\n phantombtc: 'phantom',\n magicedensol: 'magiceden',\n roninwallet: 'ronin',\n robinhoodwallet: 'robinhood',\n uniswapwallet: 'uniswap',\n portoevm: 'porto',\n trusttron: 'trust',\n coinbasewalletevm: 'coinbase',\n baseevm: 'coinbase'\n}\n"]}
1
+ {"version":3,"file":"walletCompatibility.js","sourceRoot":"","sources":["../../../src/constants/walletCompatibility.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAA6B;IAC7D,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;IACjE,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC;IAC5D,SAAS,EAAE;QACT,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK;KAC7E;IACD,OAAO,EAAE;QACP,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO;QACxE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;KACnC;IACD,QAAQ,EAAE,CAAC,IAAI,CAAC;IAChB,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;IACtC,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC;IAClD,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC;CAC/D,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAA6B;IAC/D,OAAO,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;IACxB,SAAS,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;IAC1B,QAAQ,EAAE,CAAC,IAAI,CAAC;CACjB,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAA2B;IAC1D,eAAe,EAAE,UAAU;IAC3B,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,SAAS;IACrB,YAAY,EAAE,WAAW;IACzB,WAAW,EAAE,OAAO;IACpB,eAAe,EAAE,WAAW;IAC5B,aAAa,EAAE,SAAS;IACxB,QAAQ,EAAE,OAAO;IACjB,SAAS,EAAE,OAAO;IAClB,iBAAiB,EAAE,UAAU;IAC7B,OAAO,EAAE,UAAU;CACpB,CAAA","sourcesContent":["export const WalletChainRestricted: Record<string, number[]> = {\n phantom: [1, 8453, 792703809, 137, 8253038, 101, 10143, 143, 999],\n backpack: [1, 8453, 137, 42161, 10, 10143, 80094, 792703809],\n magiceden: [\n 1, 137, 8453, 33139, 8253038, 792703809, 1329, 2741, 42161, 80094, 56, 43114\n ],\n uniswap: [\n 1, 130, 42161, 43114, 8453, 81457, 56, 42220, 10, 137, 480, 324, 7777777,\n 4663, 59144, 143, 1868, 4326, 4217\n ],\n abstract: [2741],\n ronin: [1, 56, 137, 42161, 8453, 2020],\n porto: [8453, 42161, 56, 42220, 1, 10, 137, 80094],\n robinhood: [1, 10, 137, 4663, 8453, 42161, 8253038, 792703809]\n}\n\nexport const WalletChainIncompatible: Record<string, number[]> = {\n binance: [7777777, 8453],\n binanceus: [7777777, 8453],\n coinbase: [4663]\n}\n\nexport const NormalizedWalletName: Record<string, string> = {\n backpackeclipse: 'backpack',\n phantomevm: 'phantom',\n phantombtc: 'phantom',\n magicedensol: 'magiceden',\n roninwallet: 'ronin',\n robinhoodwallet: 'robinhood',\n uniswapwallet: 'uniswap',\n portoevm: 'porto',\n trusttron: 'trust',\n coinbasewalletevm: 'coinbase',\n baseevm: 'coinbase'\n}\n"]}
@@ -8,17 +8,25 @@ import { formatSeconds } from './time.js';
8
8
  * - currencyIn: the token deposited on the origin side.
9
9
  * - currencyOut: the token received, preferring the destination output and
10
10
  * falling back to the origin output (e.g. same-chain swaps).
11
+ *
12
+ * `route.actual` is populated progressively while a request is in flight, so
13
+ * before the request status is `success` it can hold provisional values (e.g.
14
+ * the intermediate origin swap output). Output-side actual values are only
15
+ * used once the request status is `success`; until then the quoted values are
16
+ * returned so the UI never presents a provisional token/amount as received.
11
17
  */
12
18
  export const getRequestCurrencies = (transaction) => {
13
19
  const route = transaction?.data?.route;
14
20
  const actual = route?.actual;
15
21
  const quoted = route?.quoted;
16
22
  const currencyIn = actual?.origin?.inputCurrency ?? quoted?.origin?.inputCurrency;
17
- const currencyOut = actual?.destination?.outputCurrency ??
23
+ // Only trust output-side actual values once the request has succeeded
24
+ const settledActual = transaction?.status === 'success' ? actual : undefined;
25
+ const currencyOut = settledActual?.destination?.outputCurrency ??
18
26
  quoted?.destination?.outputCurrency ??
19
- actual?.origin?.outputCurrency ??
27
+ settledActual?.origin?.outputCurrency ??
20
28
  quoted?.origin?.outputCurrency;
21
- const currencyGasTopup = actual?.destination?.currencyGasTopup;
29
+ const currencyGasTopup = settledActual?.destination?.currencyGasTopup;
22
30
  return { currencyIn, currencyOut, currencyGasTopup };
23
31
  };
24
32
  export const extractFromChain = (transaction, client) => {
@@ -1 +1 @@
1
- {"version":3,"file":"relayTransaction.js","sourceRoot":"","sources":["../../../src/utils/relayTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACpE,OAAO,EAAyB,MAAM,mBAAmB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAOzC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,WAAqC,EAKrC,EAAE;IACF,MAAM,KAAK,GAAG,WAAW,EAAE,IAAI,EAAE,KAAK,CAAA;IACtC,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,CAAA;IAC5B,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,CAAA;IAE5B,MAAM,UAAU,GACd,MAAM,EAAE,MAAM,EAAE,aAAa,IAAI,MAAM,EAAE,MAAM,EAAE,aAAa,CAAA;IAEhE,MAAM,WAAW,GACf,MAAM,EAAE,WAAW,EAAE,cAAc;QACnC,MAAM,EAAE,WAAW,EAAE,cAAc;QACnC,MAAM,EAAE,MAAM,EAAE,cAAc;QAC9B,MAAM,EAAE,MAAM,EAAE,cAAc,CAAA;IAEhC,MAAM,gBAAgB,GAAG,MAAM,EAAE,WAAW,EAAE,gBAAgB,CAAA;IAE9D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAA;AACtD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,WAAqC,EACrC,MAA2B,EAC3B,EAAE;IACF,MAAM,OAAO,GAAG,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAA;IACtD,OAAO,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,CAAA;AAC7D,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,WAAqC,EACrC,MAA2B,EAC3B,EAAE;IACF,MAAM,OAAO,GAAG,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAA;IACvD,OAAO,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,CAAA;AAC7D,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,WAAqC,EAAE,EAAE;IACzE,IAAI,QAAQ,GAAG,GAAG,CAAA;IAClB,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,IAAI,WAAW,EAAE,MAAM,KAAK,SAAS,IAAI,WAAW,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;QAC3E,MAAM,cAAc,GAClB,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,SAAmB,CAAC,IAAI,IAAI,CAAA;QACvE,MAAM,gBAAgB,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAC5E,MAAM,eAAe,GACnB,WAAW,EAAE,IAAI,EAAE,MAAM;YACvB,EAAE,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAC9B,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,SAAmB,CAAC,IAAI,IAAI,CAAA;QAEjD,MAAM,cAAc,GAClB,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC;YAC3C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC;YAC9B,CAAC,CAAC,IAAI,CAAA;QAEV,IAAI,gBAAgB,IAAI,cAAc,EAAE,CAAC;YACvC,OAAO,GAAG,cAAc,GAAG,gBAAgB,CAAA;YAC3C,oEAAoE;YACpE,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAChB,QAAQ,GAAG,GAAG,CAAA;gBACd,OAAO,GAAG,CAAC,CAAA;YACb,CAAC;iBAAM,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;gBACxB,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;YACnC,CAAC;iBAAM,CAAC;gBACN,QAAQ,GAAG,GAAG,OAAO,GAAG,CAAA;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;AAC9B,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAA+B,EAAE,EAAE;IACzE,IAAI,CAAC,KAAK,EAAE,MAAM;QAAE,OAAO,IAAI,CAAA;IAE/B,2CAA2C;IAC3C,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,IAAI,IAAI,CAAA;AAChE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;CACrB,CAAA","sourcesContent":["import { type Execute, RelayClient } from '@relayprotocol/relay-sdk'\nimport { type RelayTransaction } from '../types/index.js'\nimport { formatSeconds } from './time.js'\n\ntype RequestRoute = NonNullable<NonNullable<RelayTransaction['data']>['route']>\ntype RouteAmount = NonNullable<\n NonNullable<NonNullable<RequestRoute['quoted']>['origin']>['inputCurrency']\n>\n\n/**\n * Resolves the input/output currency amounts to display for a request from\n * `data.route`, preferring actual over quoted values.\n *\n * - currencyIn: the token deposited on the origin side.\n * - currencyOut: the token received, preferring the destination output and\n * falling back to the origin output (e.g. same-chain swaps).\n */\nexport const getRequestCurrencies = (\n transaction?: RelayTransaction | null\n): {\n currencyIn?: RouteAmount | null\n currencyOut?: RouteAmount | null\n currencyGasTopup?: RouteAmount | null\n} => {\n const route = transaction?.data?.route\n const actual = route?.actual\n const quoted = route?.quoted\n\n const currencyIn =\n actual?.origin?.inputCurrency ?? quoted?.origin?.inputCurrency\n\n const currencyOut =\n actual?.destination?.outputCurrency ??\n quoted?.destination?.outputCurrency ??\n actual?.origin?.outputCurrency ??\n quoted?.origin?.outputCurrency\n\n const currencyGasTopup = actual?.destination?.currencyGasTopup\n\n return { currencyIn, currencyOut, currencyGasTopup }\n}\n\nexport const extractFromChain = (\n transaction?: RelayTransaction | null,\n client?: RelayClient | null\n) => {\n const chainId = transaction?.data?.inTxs?.[0]?.chainId\n return client?.chains.find((chain) => chain.id === chainId)\n}\n\nexport const extractToChain = (\n transaction?: RelayTransaction | null,\n client?: RelayClient | null\n) => {\n const chainId = transaction?.data?.outTxs?.[0]?.chainId\n return client?.chains.find((chain) => chain.id === chainId)\n}\n\nexport const calculateFillTime = (transaction?: RelayTransaction | null) => {\n let fillTime = '-'\n let seconds = 0\n if (transaction?.status !== 'pending' && transaction?.status !== 'waiting') {\n const inTxTimestamps =\n transaction?.data?.inTxs?.map((tx) => tx.timestamp as number) ?? null\n const txStartTimestamp = inTxTimestamps ? Math.min(...inTxTimestamps) : null\n const outTxTimestamps =\n transaction?.data?.outTxs\n ?.filter((tx) => tx.timestamp)\n ?.map((tx) => tx.timestamp as number) ?? null\n\n const txEndTimestamp =\n outTxTimestamps && outTxTimestamps.length > 0\n ? Math.max(...outTxTimestamps)\n : null\n\n if (txStartTimestamp && txEndTimestamp) {\n seconds = txEndTimestamp - txStartTimestamp\n // Guard against negative time (invalid timestamps or timing issues)\n if (seconds < 0) {\n fillTime = '-'\n seconds = 0\n } else if (seconds > 60) {\n fillTime = formatSeconds(seconds)\n } else {\n fillTime = `${seconds}s`\n }\n }\n }\n return { fillTime, seconds }\n}\n\nexport const extractDepositRequestId = (steps?: Execute['steps'] | null) => {\n if (!steps?.length) return null\n\n // Find the first step that has a requestId\n return steps.find((step) => step.requestId)?.requestId || null\n}\n\nexport const statusToText = {\n pending: 'Pending',\n failure: 'Failure',\n received: 'Received',\n success: 'Success',\n fallback: 'Refunded'\n}\n"]}
1
+ {"version":3,"file":"relayTransaction.js","sourceRoot":"","sources":["../../../src/utils/relayTransaction.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Execute, RelayClient } from '@relayprotocol/relay-sdk'\nimport { type RelayTransaction } from '../types/index.js'\nimport { formatSeconds } from './time.js'\n\ntype RequestRoute = NonNullable<NonNullable<RelayTransaction['data']>['route']>\ntype RouteAmount = NonNullable<\n NonNullable<NonNullable<RequestRoute['quoted']>['origin']>['inputCurrency']\n>\n\n/**\n * Resolves the input/output currency amounts to display for a request from\n * `data.route`, preferring actual over quoted values.\n *\n * - currencyIn: the token deposited on the origin side.\n * - currencyOut: the token received, preferring the destination output and\n * falling back to the origin output (e.g. same-chain swaps).\n *\n * `route.actual` is populated progressively while a request is in flight, so\n * before the request status is `success` it can hold provisional values (e.g.\n * the intermediate origin swap output). Output-side actual values are only\n * used once the request status is `success`; until then the quoted values are\n * returned so the UI never presents a provisional token/amount as received.\n */\nexport const getRequestCurrencies = (\n transaction?: RelayTransaction | null\n): {\n currencyIn?: RouteAmount | null\n currencyOut?: RouteAmount | null\n currencyGasTopup?: RouteAmount | null\n} => {\n const route = transaction?.data?.route\n const actual = route?.actual\n const quoted = route?.quoted\n\n const currencyIn =\n actual?.origin?.inputCurrency ?? quoted?.origin?.inputCurrency\n\n // Only trust output-side actual values once the request has succeeded\n const settledActual = transaction?.status === 'success' ? actual : undefined\n\n const currencyOut =\n settledActual?.destination?.outputCurrency ??\n quoted?.destination?.outputCurrency ??\n settledActual?.origin?.outputCurrency ??\n quoted?.origin?.outputCurrency\n\n const currencyGasTopup = settledActual?.destination?.currencyGasTopup\n\n return { currencyIn, currencyOut, currencyGasTopup }\n}\n\nexport const extractFromChain = (\n transaction?: RelayTransaction | null,\n client?: RelayClient | null\n) => {\n const chainId = transaction?.data?.inTxs?.[0]?.chainId\n return client?.chains.find((chain) => chain.id === chainId)\n}\n\nexport const extractToChain = (\n transaction?: RelayTransaction | null,\n client?: RelayClient | null\n) => {\n const chainId = transaction?.data?.outTxs?.[0]?.chainId\n return client?.chains.find((chain) => chain.id === chainId)\n}\n\nexport const calculateFillTime = (transaction?: RelayTransaction | null) => {\n let fillTime = '-'\n let seconds = 0\n if (transaction?.status !== 'pending' && transaction?.status !== 'waiting') {\n const inTxTimestamps =\n transaction?.data?.inTxs?.map((tx) => tx.timestamp as number) ?? null\n const txStartTimestamp = inTxTimestamps ? Math.min(...inTxTimestamps) : null\n const outTxTimestamps =\n transaction?.data?.outTxs\n ?.filter((tx) => tx.timestamp)\n ?.map((tx) => tx.timestamp as number) ?? null\n\n const txEndTimestamp =\n outTxTimestamps && outTxTimestamps.length > 0\n ? Math.max(...outTxTimestamps)\n : null\n\n if (txStartTimestamp && txEndTimestamp) {\n seconds = txEndTimestamp - txStartTimestamp\n // Guard against negative time (invalid timestamps or timing issues)\n if (seconds < 0) {\n fillTime = '-'\n seconds = 0\n } else if (seconds > 60) {\n fillTime = formatSeconds(seconds)\n } else {\n fillTime = `${seconds}s`\n }\n }\n }\n return { fillTime, seconds }\n}\n\nexport const extractDepositRequestId = (steps?: Execute['steps'] | null) => {\n if (!steps?.length) return null\n\n // Find the first step that has a requestId\n return steps.find((step) => step.requestId)?.requestId || null\n}\n\nexport const statusToText = {\n pending: 'Pending',\n failure: 'Failure',\n received: 'Received',\n success: 'Success',\n fallback: 'Refunded'\n}\n"]}
@@ -5,7 +5,7 @@ export const solana = {
5
5
  export const eclipse = {
6
6
  id: 9286185
7
7
  };
8
- export const eclipseWallets = ['backpackeclipse'];
8
+ export const eclipseWallets = ['nightlyeclipse', 'okxeclipse'];
9
9
  export function isSolanaAddress(address) {
10
10
  return solanaAddressRegex.test(address);
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"solana.js","sourceRoot":"","sources":["../../../src/utils/solana.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAC7B,gHAAgH,CAAA;AAClH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,EAAE,EAAE,SAAS;CACd,CAAA;AACD,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,EAAE,EAAE,OAAO;CACZ,CAAA;AACD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,iBAAiB,CAAC,CAAA;AAEjD,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACzC,CAAC","sourcesContent":["export const solanaAddressRegex =\n /^(?!T[1-9A-HJ-NP-Za-km-z]{33}$)(?!0x[0-9a-fA-F]{40}$)(?!0x[0-9a-fA-F]{64}$)(?!bc1)[1-9A-HJ-NP-Za-km-z]{32,44}$/\nexport const solana = {\n id: 792703809\n}\nexport const eclipse = {\n id: 9286185\n}\nexport const eclipseWallets = ['backpackeclipse']\n\nexport function isSolanaAddress(address: string): boolean {\n return solanaAddressRegex.test(address)\n}\n"]}
1
+ {"version":3,"file":"solana.js","sourceRoot":"","sources":["../../../src/utils/solana.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAC7B,gHAAgH,CAAA;AAClH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,EAAE,EAAE,SAAS;CACd,CAAA;AACD,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,EAAE,EAAE,OAAO;CACZ,CAAA;AACD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAA;AAE9D,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACzC,CAAC","sourcesContent":["export const solanaAddressRegex =\n /^(?!T[1-9A-HJ-NP-Za-km-z]{33}$)(?!0x[0-9a-fA-F]{40}$)(?!0x[0-9a-fA-F]{64}$)(?!bc1)[1-9A-HJ-NP-Za-km-z]{32,44}$/\nexport const solana = {\n id: 792703809\n}\nexport const eclipse = {\n id: 9286185\n}\nexport const eclipseWallets = ['nightlyeclipse', 'okxeclipse']\n\nexport function isSolanaAddress(address: string): boolean {\n return solanaAddressRegex.test(address)\n}\n"]}
@@ -1,2 +1,2 @@
1
- export const UI_VERSION = '11.0.3';
1
+ export const UI_VERSION = '11.0.4';
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC","sourcesContent":["export const UI_VERSION = '11.0.3';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC","sourcesContent":["export const UI_VERSION = '11.0.4';\n"]}