@n1xyz/wallet-widget 0.0.35-alpha.13 → 0.0.35-alpha.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/features/onboarding-flow/hooks/useBridgeDeposit.js +28 -44
- package/dist/src/features/onboarding-flow/hooks/useBridgeDeposit.js.map +1 -1
- package/dist/src/features/onboarding-flow/providers/WalletConnectionProvider.js +39 -88
- package/dist/src/features/onboarding-flow/providers/WalletConnectionProvider.js.map +1 -1
- package/dist/src/features/onboarding-flow/utils/deposit/claimConfirmation.js +3 -19
- package/dist/src/features/onboarding-flow/utils/deposit/claimConfirmation.js.map +1 -1
- package/dist/src/features/onboarding-flow/utils/deposit/claimSubmission.d.ts +1 -1
- package/dist/src/features/onboarding-flow/utils/deposit/claimSubmission.js +41 -58
- package/dist/src/features/onboarding-flow/utils/deposit/claimSubmission.js.map +1 -1
- package/package.json +21 -35
- package/dist/src/providers/N1WalletProviderTemp.d.ts +0 -0
- package/dist/src/providers/N1WalletProviderTemp.js +0 -184
- package/dist/src/providers/N1WalletProviderTemp.js.map +0 -1
- package/dist/src/store/subscriptions/fontInjection.d.ts +0 -18
- package/dist/src/store/subscriptions/fontInjection.js +0 -90
- package/dist/src/store/subscriptions/fontInjection.js.map +0 -1
- package/dist/src/types/dynamic-wallets.d.ts +0 -104
- package/dist/src/types/dynamic-wallets.js +0 -8
- package/dist/src/types/dynamic-wallets.js.map +0 -1
|
@@ -347,7 +347,7 @@ export var useBridgeDeposit = function (_a) {
|
|
|
347
347
|
turnkeyAddress,
|
|
348
348
|
]);
|
|
349
349
|
var resumeClaimProcess = useCallback(function (pendingState) { return __awaiter(void 0, void 0, void 0, function () {
|
|
350
|
-
var depositId, bridgeTx, isEvmFlow, turnkeyStillInitializing, solanaRecipient, cctpClient, cctpConfig, fromChain, attestationData, nonceAlreadyProcessed, updated_1,
|
|
350
|
+
var depositId, bridgeTx, isEvmFlow, turnkeyStillInitializing, solanaRecipient, cctpClient, cctpConfig, fromChain, attestationData, nonceAlreadyProcessed, updated_1, claimDepositError_1, errorMessage, withBridgeStage, nordDepositError_1, nordErrorMsg, signature, updated, error_2;
|
|
351
351
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
352
352
|
return __generator(this, function (_m) {
|
|
353
353
|
switch (_m.label) {
|
|
@@ -434,7 +434,7 @@ export var useBridgeDeposit = function (_a) {
|
|
|
434
434
|
setBridgeRetryable(false);
|
|
435
435
|
_m.label = 1;
|
|
436
436
|
case 1:
|
|
437
|
-
_m.trys.push([1,
|
|
437
|
+
_m.trys.push([1, 15, , 16]);
|
|
438
438
|
cctpClient = new BridgeKitClient();
|
|
439
439
|
cctpConfig = getCctpRuntimeConfig();
|
|
440
440
|
fromChain = normalizeCctpChain(pendingState.chain || context.selectedChainId || context.entryNetwork || cctpConfig.fromChain);
|
|
@@ -450,7 +450,7 @@ export var useBridgeDeposit = function (_a) {
|
|
|
450
450
|
return [4 /*yield*/, checkUsedNonceAccount((_a = attestationData.decodedMessage) === null || _a === void 0 ? void 0 : _a.nonce)];
|
|
451
451
|
case 3:
|
|
452
452
|
nonceAlreadyProcessed = _m.sent();
|
|
453
|
-
if (!nonceAlreadyProcessed) return [3 /*break*/,
|
|
453
|
+
if (!nonceAlreadyProcessed) return [3 /*break*/, 12];
|
|
454
454
|
logger.info('[BridgeDeposit] Nonce already processed - CCTP claim was completed previously', {
|
|
455
455
|
depositId: depositId,
|
|
456
456
|
bridgeTx: bridgeTx,
|
|
@@ -465,34 +465,9 @@ export var useBridgeDeposit = function (_a) {
|
|
|
465
465
|
setPendingMintTx((_f = updated_1.mintTx) !== null && _f !== void 0 ? _f : null);
|
|
466
466
|
setPendingDepositId(updated_1.depositId);
|
|
467
467
|
setDepositProgressPhase('claim');
|
|
468
|
-
attemptNordDepositWithFallback = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
469
|
-
var withBridgeStage;
|
|
470
|
-
return __generator(this, function (_a) {
|
|
471
|
-
switch (_a.label) {
|
|
472
|
-
case 0:
|
|
473
|
-
// Validate we have an amount to deposit
|
|
474
|
-
if (!pendingState.amount || Number(pendingState.amount) <= 0) {
|
|
475
|
-
throw new Error('No valid deposit amount available');
|
|
476
|
-
}
|
|
477
|
-
logger.info('[BridgeDeposit] Attempting Nord deposit with saved amount', {
|
|
478
|
-
amount: pendingState.amount,
|
|
479
|
-
});
|
|
480
|
-
withBridgeStage = advancePendingDeposit(updated_1, {
|
|
481
|
-
stage: 'bridge_confirmed',
|
|
482
|
-
amount: pendingState.amount,
|
|
483
|
-
});
|
|
484
|
-
setDepositProgressPhase('solana');
|
|
485
|
-
return [4 /*yield*/, runSolanaDeposit(pendingState.amount, withBridgeStage)];
|
|
486
|
-
case 1:
|
|
487
|
-
_a.sent();
|
|
488
|
-
return [2 /*return*/];
|
|
489
|
-
}
|
|
490
|
-
});
|
|
491
|
-
}); };
|
|
492
468
|
_m.label = 4;
|
|
493
469
|
case 4:
|
|
494
470
|
_m.trys.push([4, 6, , 11]);
|
|
495
|
-
// Attempt to confirm claim and get USDC balance
|
|
496
471
|
return [4 /*yield*/, confirmClaimAndDeposit({
|
|
497
472
|
signature: (_h = (_g = updated_1.mintTx) !== null && _g !== void 0 ? _g : updated_1.tx) !== null && _h !== void 0 ? _h : null,
|
|
498
473
|
destinationAddress: solanaRecipient,
|
|
@@ -501,42 +476,51 @@ export var useBridgeDeposit = function (_a) {
|
|
|
501
476
|
skipConfirmation: true,
|
|
502
477
|
})];
|
|
503
478
|
case 5:
|
|
504
|
-
// Attempt to confirm claim and get USDC balance
|
|
505
479
|
_m.sent();
|
|
506
|
-
|
|
507
|
-
return [2 /*return*/];
|
|
480
|
+
return [3 /*break*/, 11];
|
|
508
481
|
case 6:
|
|
509
482
|
claimDepositError_1 = _m.sent();
|
|
510
483
|
errorMessage = claimDepositError_1 instanceof Error ? claimDepositError_1.message : String(claimDepositError_1);
|
|
511
484
|
logger.warn('[BridgeDeposit] confirmClaimAndDeposit failed after nonce processed', {
|
|
512
485
|
error: errorMessage,
|
|
513
486
|
});
|
|
514
|
-
|
|
515
|
-
if (!
|
|
487
|
+
if (!errorMessage.toLowerCase().includes('already be completed')) return [3 /*break*/, 10];
|
|
488
|
+
if (!pendingState.amount) return [3 /*break*/, 10];
|
|
516
489
|
_m.label = 7;
|
|
517
490
|
case 7:
|
|
518
491
|
_m.trys.push([7, 9, , 10]);
|
|
519
|
-
|
|
492
|
+
logger.info('[BridgeDeposit] Attempting Nord deposit with amountHint as fallback', {
|
|
493
|
+
amount: pendingState.amount,
|
|
494
|
+
});
|
|
495
|
+
withBridgeStage = advancePendingDeposit(updated_1, {
|
|
496
|
+
stage: 'bridge_confirmed',
|
|
497
|
+
amount: pendingState.amount,
|
|
498
|
+
});
|
|
499
|
+
setDepositProgressPhase('solana');
|
|
500
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
501
|
+
return [4 /*yield*/, runSolanaDeposit(pendingState.amount, withBridgeStage)];
|
|
520
502
|
case 8:
|
|
503
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
521
504
|
_m.sent();
|
|
522
|
-
// If we got here, Nord deposit succeeded!
|
|
505
|
+
// If we got here, Nord deposit succeeded!
|
|
523
506
|
return [2 /*return*/];
|
|
524
507
|
case 9:
|
|
525
508
|
nordDepositError_1 = _m.sent();
|
|
526
509
|
nordErrorMsg = nordDepositError_1 instanceof Error ? nordDepositError_1.message : String(nordDepositError_1);
|
|
527
|
-
logger.
|
|
510
|
+
logger.error('[BridgeDeposit] Nord deposit also failed - deposit may be truly complete', {
|
|
528
511
|
error: nordErrorMsg,
|
|
529
512
|
});
|
|
530
|
-
//
|
|
513
|
+
// Now we can be more confident the deposit was already completed
|
|
531
514
|
clearPendingDeposit();
|
|
532
515
|
setBridgeError('This deposit appears to be already completed. Your funds should be in your Nord account. Click "Start Over" to continue.');
|
|
533
516
|
setBridgeRetryable(false);
|
|
534
517
|
setIsDepositing(false);
|
|
535
518
|
return [2 /*return*/];
|
|
536
519
|
case 10:
|
|
537
|
-
// For
|
|
520
|
+
// For other errors, don't clear state - throw and let user retry
|
|
538
521
|
throw claimDepositError_1;
|
|
539
|
-
case 11:
|
|
522
|
+
case 11: return [2 /*return*/];
|
|
523
|
+
case 12:
|
|
540
524
|
// If the nonce was NOT processed, we need a Solana signer to submit the claim.
|
|
541
525
|
if (!solanaWallet) {
|
|
542
526
|
setBridgeError('Solana wallet not connected. Please connect your Solana wallet to continue.');
|
|
@@ -566,7 +550,7 @@ export var useBridgeDeposit = function (_a) {
|
|
|
566
550
|
bridgeTx: bridgeTx,
|
|
567
551
|
attestationId: (_l = pendingState.attestationId) !== null && _l !== void 0 ? _l : null,
|
|
568
552
|
})];
|
|
569
|
-
case
|
|
553
|
+
case 13:
|
|
570
554
|
signature = _m.sent();
|
|
571
555
|
updated = advancePendingDeposit(pendingState, {
|
|
572
556
|
stage: 'bridge_confirmed',
|
|
@@ -583,10 +567,10 @@ export var useBridgeDeposit = function (_a) {
|
|
|
583
567
|
amountHint: pendingState.amount,
|
|
584
568
|
pendingState: updated,
|
|
585
569
|
})];
|
|
586
|
-
case 13:
|
|
587
|
-
_m.sent();
|
|
588
|
-
return [3 /*break*/, 15];
|
|
589
570
|
case 14:
|
|
571
|
+
_m.sent();
|
|
572
|
+
return [3 /*break*/, 16];
|
|
573
|
+
case 15:
|
|
590
574
|
error_2 = _m.sent();
|
|
591
575
|
logger.logError(createDepositError('CLAIM_FAILED', 'Failed to resume claim process', {
|
|
592
576
|
cause: error_2 instanceof Error ? error_2 : undefined,
|
|
@@ -595,7 +579,7 @@ export var useBridgeDeposit = function (_a) {
|
|
|
595
579
|
setBridgeError(formatBridgeError(error_2));
|
|
596
580
|
setIsDepositing(false);
|
|
597
581
|
throw error_2;
|
|
598
|
-
case
|
|
582
|
+
case 16: return [2 /*return*/];
|
|
599
583
|
}
|
|
600
584
|
});
|
|
601
585
|
}); }, [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBridgeDeposit.js","sourceRoot":"","sources":["../../../../../src/features/onboarding-flow/hooks/useBridgeDeposit.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useRef, useState } from 'react';\nimport { useOnboardingState } from '../providers/OnboardingStateProvider';\nimport { getCctpRuntimeConfig } from '../cctp/config';\nimport {\n advancePendingDeposit,\n clearPendingDeposit,\n createPendingDepositDraft,\n PendingDepositState,\n writePendingDeposit,\n} from '../utils/deposit/storage';\nimport { formatBridgeError, normalizeCctpChain } from '../utils/deposit/bridgeUtils';\nimport { explorerBaseForChain, pickExplorerUrl } from '../utils/explorerUrl';\nimport { logger } from '../../../utils/logger';\nimport { createDepositError } from '../../../utils/errors';\nimport { useWalletConnection } from '../providers/WalletConnectionProvider';\nimport { BridgeKitClient, mapChainToBridgeKit } from '../cctp/bridgeKitClient';\nimport { checkUsedNonceAccount } from '../utils/deposit/nonceUtils';\nimport { waitForAttestation } from '../utils/deposit/attestationUtils';\nimport { ensureCorrectNetwork, getWalletProvider, validateBridgeConfig } from '../utils/deposit/walletUtils';\nimport { submitClaimWithRetry } from '../utils/deposit/claimSubmission';\nimport { confirmClaimAndGetUsdcBalance } from '../utils/deposit/claimConfirmation';\nimport { EvmTxInterceptor } from '../utils/deposit/evmTxInterceptor';\nimport { useNetwork } from '../../../providers/N1WalletProvider/NetworkProvider';\n\ninterface UseBridgeDepositProps {\n setDepositProgressPhase: (phase: 'bridge' | 'claim' | 'solana' | 'nord') => void;\n setPendingBridgeTx: (tx: string | null) => void;\n setPendingMintTx: (tx: string | null) => void;\n setPendingDepositId: (id: string | null) => void;\n setPendingBridgeExplorerUrl: (url: string | null) => void;\n ensurePendingDraft: (amount: string) => ReturnType<typeof createPendingDepositDraft>;\n finalizeBridgeSuccess: (status: { tx?: string | null; mintTx?: string | null; bridgeTx?: string | null; solanaTx?: string | null; depositId?: string | null }) => void;\n setIsDepositing: (isDepositing: boolean) => void;\n runSolanaDeposit: (\n amount: string,\n pendingState?: ReturnType<typeof createPendingDepositDraft> | null\n ) => Promise<{\n txId: string | null;\n workingState: ReturnType<typeof createPendingDepositDraft>;\n solanaTx: string | null;\n }>;\n}\n\nexport const useBridgeDeposit = ({\n setDepositProgressPhase,\n setPendingBridgeTx,\n setPendingMintTx,\n setPendingDepositId,\n setPendingBridgeExplorerUrl,\n ensurePendingDraft,\n finalizeBridgeSuccess,\n setIsDepositing,\n runSolanaDeposit,\n}: UseBridgeDepositProps) => {\n const { context, updateContext } = useOnboardingState();\n\n // Use NetworkProvider for wallet state\n const { solanaAddress, evmWallet, solanaWallet, evmAdapter } = useNetwork();\n const { turnkeyAddress, turnkeyStatus, turnkeyEnabled } = useWalletConnection();\n\n const [bridgeRetryable, setBridgeRetryable] = useState(false);\n const [bridgeError, setBridgeError] = useState<string | null>(null);\n const [bridgeApprovalPending, setBridgeApprovalPending] = useState(false);\n const [bridgeApprovalError, setBridgeApprovalError] = useState<string | null>(null);\n\n\n\n const lookupTableAddress = process.env.NEXT_PUBLIC_CCTP_LOOKUP_TABLE_ADDRESS;\n const claimFinalizationInFlightRef = useRef<Promise<void> | null>(null);\n\n const confirmClaimAndDeposit = useCallback(\n async ({\n signature,\n destinationAddress,\n amountHint,\n pendingState,\n skipConfirmation,\n }: {\n signature: string | null;\n destinationAddress: string;\n amountHint?: string | number | null;\n pendingState?: PendingDepositState | null;\n skipConfirmation?: boolean;\n }) => {\n logger.info('[BridgeDeposit] confirmClaimAndDeposit called', {\n signature,\n destinationAddress,\n amountHint,\n skipConfirmation,\n pendingStage: pendingState?.stage,\n pendingTx: pendingState?.tx,\n });\n\n if (claimFinalizationInFlightRef.current) {\n logger.info('[BridgeDeposit] confirmClaimAndDeposit - already in flight, returning existing promise');\n return claimFinalizationInFlightRef.current;\n }\n\n const promise = (async () => {\n let amount: string;\n let txSignature: string | null;\n try {\n logger.info('[BridgeDeposit] Calling confirmClaimAndGetUsdcBalance...');\n const res = await confirmClaimAndGetUsdcBalance({\n signature,\n destinationAddress,\n amountHint,\n skipConfirmation,\n });\n logger.info('[BridgeDeposit] confirmClaimAndGetUsdcBalance returned', {\n amount: res.amount,\n txSignature: res.txSignature,\n });\n amount = res.amount;\n txSignature = res.txSignature;\n } catch (e) {\n logger.warn('[BridgeDeposit] confirmClaimAndGetUsdcBalance threw error', {\n error: e instanceof Error ? e.message : String(e),\n });\n const message = e instanceof Error ? e.message : String(e);\n // If the claim nonce was already processed and there's no USDC to deposit,\n // the user likely already completed the deposit earlier. Clear pending state\n // to avoid trapping them in an endless \"resume\" loop.\n if (message.toLowerCase().includes('already be completed')) {\n logger.info('[BridgeDeposit] Deposit appears to be already completed - clearing pending state', {\n message,\n });\n clearPendingDeposit();\n setPendingDepositId(null);\n updateContext({\n depositError: 'This deposit appears to be already completed. Your funds should be in your Nord account.',\n });\n // Do not duplicate the message as a bridgeError; depositError is rendered on the progress screen.\n setBridgeError(null);\n setBridgeRetryable(false);\n setDepositProgressPhase('claim');\n setIsDepositing(false);\n return;\n }\n throw e;\n }\n\n const draft = pendingState ?? ensurePendingDraft(amount);\n const withBridgeStage = advancePendingDeposit(draft, {\n stage: 'bridge_confirmed',\n // Preserve the original EVM bridge tx hash - only update mintTx\n mintTx: txSignature,\n amount,\n });\n\n setDepositProgressPhase('solana');\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const depositResult = await runSolanaDeposit(amount, withBridgeStage);\n\n finalizeBridgeSuccess({\n tx: depositResult.txId,\n mintTx: txSignature,\n bridgeTx: withBridgeStage.tx ?? txSignature,\n solanaTx: depositResult.solanaTx,\n depositId: withBridgeStage.depositId,\n });\n })().finally(() => {\n claimFinalizationInFlightRef.current = null;\n });\n\n claimFinalizationInFlightRef.current = promise;\n return promise;\n },\n [\n ensurePendingDraft,\n finalizeBridgeSuccess,\n runSolanaDeposit,\n setDepositProgressPhase,\n setPendingDepositId,\n setBridgeError,\n setBridgeRetryable,\n setIsDepositing,\n updateContext,\n ]\n );\n\n const startCctpBridge = useCallback(\n async (draftAmount: string) => {\n setDepositProgressPhase('bridge');\n setBridgeApprovalPending(true);\n setBridgeApprovalError(null);\n\n const cctpClient = new BridgeKitClient();\n const cctpConfig = getCctpRuntimeConfig();\n const fromChain = normalizeCctpChain(context.selectedChainId ?? context.entryNetwork ?? cctpConfig.fromChain);\n\n await ensureCorrectNetwork({ evmWallet, evmAdapter, targetChain: fromChain });\n validateBridgeConfig(cctpConfig, fromChain, draftAmount);\n\n let workingState = ensurePendingDraft(draftAmount);\n\n const solanaRecipient = solanaAddress || turnkeyAddress || '';\n if (!solanaRecipient) {\n setBridgeApprovalPending(false);\n throw new Error('Turnkey Solana address is not ready yet. Please wait a moment and retry.');\n }\n\n const { provider, walletClient } = await getWalletProvider(evmWallet, evmAdapter);\n if (!provider && !walletClient && !cctpConfig.useMock) {\n setBridgeApprovalPending(false);\n throw new Error('Wallet provider not available for CCTP bridging');\n }\n\n // Persist tx hash ASAP (especially burn) so refresh can resume.\n // We use the interceptor to capture the tx hash before the high-level await returns.\n const interceptor = new EvmTxInterceptor((txHash) => {\n workingState = writePendingDeposit({\n ...workingState,\n depositId: txHash,\n stage: 'bridge_submitted',\n tx: txHash,\n chain: workingState.chain || fromChain,\n amount: workingState.amount || draftAmount,\n updatedAt: Date.now(),\n });\n setPendingDepositId(workingState.depositId);\n setPendingBridgeTx(txHash);\n setDepositProgressPhase('claim');\n });\n\n const walletForBridge = interceptor.wrap(provider || walletClient);\n\n let bridgeTxId: string;\n let depositId: string;\n let attestationId: string | null | undefined;\n\n try {\n const submission = await cctpClient.submitBridge({\n amount: draftAmount,\n fromChain,\n toChain: 'solana',\n destinationAddress: solanaRecipient,\n wallet: walletForBridge,\n });\n bridgeTxId = submission.bridgeTxId;\n depositId = submission.depositId;\n attestationId = submission.attestationId;\n } catch (error) {\n const message = formatBridgeError(error);\n setBridgeApprovalError(message);\n setBridgeError(message);\n setBridgeRetryable(true);\n setBridgeApprovalPending(false);\n clearPendingDeposit();\n throw error;\n } finally {\n setBridgeApprovalPending(false);\n }\n\n const bridgeExplorerUrl = pickExplorerUrl(\n workingState.explorerUrl,\n cctpConfig.explorerBaseUrl ?? explorerBaseForChain(context.entryNetwork),\n bridgeTxId,\n );\n workingState = advancePendingDeposit(workingState, {\n stage: 'bridge_submitted',\n tx: bridgeTxId,\n attestationId,\n explorerUrl: bridgeExplorerUrl ?? null,\n });\n setPendingBridgeExplorerUrl(workingState.explorerUrl ?? null);\n setPendingBridgeTx(bridgeTxId);\n if (depositId && depositId !== workingState.depositId) {\n workingState = writePendingDeposit({\n ...workingState,\n depositId,\n attestationId: attestationId ?? workingState.attestationId ?? null,\n updatedAt: Date.now(),\n });\n }\n setPendingDepositId(depositId || workingState.depositId);\n\n const attestationData = await waitForAttestation({\n cctpClient,\n bridgeTxId,\n sourceChain: fromChain,\n timeoutMs: cctpConfig.attestationTimeoutMs ?? 120_000,\n retryBackoffMs: cctpConfig.retryBackoffMs ?? 5_000,\n });\n\n const nonceAlreadyProcessed = await checkUsedNonceAccount(attestationData?.decodedMessage?.nonce);\n if (nonceAlreadyProcessed) {\n const updatedState = advancePendingDeposit(workingState, {\n stage: 'bridge_confirmed',\n tx: workingState.tx ?? bridgeTxId ?? null,\n mintTx: workingState.mintTx ?? null,\n attestationId,\n explorerUrl: workingState.explorerUrl ?? null,\n });\n\n setPendingMintTx(updatedState.mintTx ?? null);\n setPendingDepositId(updatedState.depositId);\n setDepositProgressPhase('claim');\n\n await confirmClaimAndDeposit({\n signature: updatedState.mintTx ?? updatedState.tx ?? null,\n destinationAddress: solanaRecipient,\n amountHint: draftAmount,\n pendingState: updatedState,\n skipConfirmation: true,\n });\n\n return updatedState;\n }\n\n setDepositProgressPhase('solana');\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const finalSignature = await submitClaimWithRetry({\n depositId,\n message: attestationData.message,\n attestation: attestationData.attestation,\n sourceChain: fromChain,\n destinationAddress: solanaRecipient,\n lookupTableAddress: lookupTableAddress ?? '',\n solanaWallet: solanaWallet as any,\n fallbackWallet: solanaAddress || turnkeyAddress || '',\n fallbackAmount: attestationData.decodedMessage?.decodedMessageBody?.amount || draftAmount || '0',\n bridgeTx: bridgeTxId,\n attestationId: attestationId ?? null,\n });\n\n workingState = advancePendingDeposit(workingState, {\n stage: 'bridge_confirmed',\n // Preserve the original EVM bridge tx hash - don't overwrite with Solana signature\n mintTx: finalSignature,\n attestationId,\n explorerUrl: finalSignature\n ? pickExplorerUrl(null, cctpConfig.mintExplorerBaseUrl ?? explorerBaseForChain('solana'), finalSignature)\n : workingState.explorerUrl,\n });\n\n setPendingMintTx(finalSignature);\n setPendingDepositId(workingState.depositId);\n setDepositProgressPhase('claim');\n\n await confirmClaimAndDeposit({\n signature: finalSignature,\n destinationAddress: solanaRecipient,\n amountHint: draftAmount,\n pendingState: workingState,\n });\n\n return workingState;\n },\n [\n solanaAddress,\n confirmClaimAndDeposit,\n context.entryNetwork,\n context.selectedChainId,\n ensurePendingDraft,\n evmAdapter,\n evmWallet,\n lookupTableAddress,\n setDepositProgressPhase,\n setPendingBridgeExplorerUrl,\n setPendingBridgeTx,\n setPendingDepositId,\n setPendingMintTx,\n solanaWallet,\n turnkeyAddress,\n ]\n );\n\n const resumeClaimProcess = useCallback(\n async (pendingState: PendingDepositState) => {\n // Log full pending state for debugging\n logger.info('[BridgeDeposit] resumeClaimProcess called', {\n depositId: pendingState.depositId,\n stage: pendingState.stage,\n tx: pendingState.tx,\n mintTx: pendingState.mintTx,\n chain: pendingState.chain,\n amount: pendingState.amount,\n wallet: pendingState.wallet,\n reason: pendingState.reason,\n updatedAt: pendingState.updatedAt,\n });\n\n const depositId = pendingState.depositId;\n if (!depositId) {\n logger.warn('[BridgeDeposit] resumeClaimProcess - no depositId, showing error');\n setBridgeError('Missing deposit ID. Please start a new deposit.');\n setBridgeRetryable(false);\n return;\n }\n\n // If the deposit is already in a terminal state, don't try to resume\n if (pendingState.stage === 'solana_confirmed') {\n logger.info('[BridgeDeposit] Deposit already in solana_confirmed state - clearing and completing', {\n depositId,\n stage: pendingState.stage,\n });\n clearPendingDeposit();\n finalizeBridgeSuccess({\n tx: pendingState.tx,\n mintTx: pendingState.mintTx,\n bridgeTx: pendingState.tx,\n depositId: pendingState.depositId,\n });\n return;\n }\n\n // If the deposit was submitted to Solana but we refreshed before confirmation,\n // the deposit might have actually completed. Show message with Start Over option.\n if (pendingState.stage === 'solana_submitted' && pendingState.tx) {\n logger.info('[BridgeDeposit] Deposit in solana_submitted state - may already be complete', {\n depositId,\n stage: pendingState.stage,\n tx: pendingState.tx,\n });\n // Clear state and show message - user can check their Nord account\n clearPendingDeposit();\n setBridgeError('Your deposit may have already completed. Please check your Nord account balance. Click \"Start Over\" if you need to make another deposit.');\n setBridgeRetryable(false);\n setIsDepositing(false);\n return;\n }\n\n // BridgeKit uses the burn tx hash for attestation lookup.\n // After refresh, `depositId` might be a local draft id if the user refreshed mid-sign.\n const bridgeTx = pendingState.tx;\n if (!bridgeTx || !bridgeTx.startsWith('0x')) {\n logger.warn('[BridgeDeposit] Cannot resume claim: missing bridge tx hash (likely refreshed before signing burn tx)', {\n depositId,\n tx: pendingState.tx,\n stage: pendingState.stage,\n });\n setBridgeError('Bridge transaction was not completed. Please start the deposit again.');\n setBridgeRetryable(true);\n setIsDepositing(false);\n return;\n }\n\n // Check if Turnkey is still initializing for EVM flows\n const isEvmFlow = context.entryNetwork === 'evm';\n const turnkeyStillInitializing = turnkeyEnabled && turnkeyStatus !== 'ready';\n\n if (isEvmFlow && turnkeyStillInitializing) {\n setBridgeError('Preparing Solana wallet... Please wait.');\n setBridgeRetryable(false); // Don't allow retry until Turnkey is ready\n setDepositProgressPhase('claim');\n return;\n }\n\n const solanaRecipient = solanaAddress || turnkeyAddress || pendingState.wallet;\n if (!solanaRecipient) {\n setBridgeError('Missing Solana deposit address. Please reconnect your wallet.');\n setBridgeRetryable(true);\n return;\n }\n\n setPendingBridgeTx(bridgeTx);\n setDepositProgressPhase('claim');\n setIsDepositing(true);\n setBridgeError(null);\n setBridgeRetryable(false);\n\n try {\n const cctpClient = new BridgeKitClient();\n const cctpConfig = getCctpRuntimeConfig();\n\n const fromChain = normalizeCctpChain(\n pendingState.chain || context.selectedChainId || context.entryNetwork || cctpConfig.fromChain,\n );\n\n const attestationData = await cctpClient.getAttestation(bridgeTx, fromChain);\n if (!attestationData) {\n setBridgeError('Attestation not ready yet. Please wait a moment and try again.');\n setBridgeRetryable(true);\n setIsDepositing(false);\n return;\n }\n\n const nonceAlreadyProcessed = await checkUsedNonceAccount(attestationData.decodedMessage?.nonce);\n if (nonceAlreadyProcessed) {\n logger.info('[BridgeDeposit] Nonce already processed - CCTP claim was completed previously', {\n depositId,\n bridgeTx,\n nonce: attestationData.decodedMessage?.nonce,\n });\n\n const updated = advancePendingDeposit(pendingState, {\n stage: 'bridge_confirmed',\n tx: pendingState.tx ?? null,\n mintTx: pendingState.mintTx ?? pendingState.tx ?? null,\n attestationId: pendingState.attestationId,\n });\n\n setPendingMintTx(updated.mintTx ?? null);\n setPendingDepositId(updated.depositId);\n setDepositProgressPhase('claim');\n\n // Helper to attempt Nord deposit with fallback amount\n const attemptNordDepositWithFallback = async (): Promise<void> => {\n // Validate we have an amount to deposit\n if (!pendingState.amount || Number(pendingState.amount) <= 0) {\n throw new Error('No valid deposit amount available');\n }\n\n logger.info('[BridgeDeposit] Attempting Nord deposit with saved amount', {\n amount: pendingState.amount,\n });\n\n const withBridgeStage = advancePendingDeposit(updated, {\n stage: 'bridge_confirmed',\n amount: pendingState.amount,\n });\n\n setDepositProgressPhase('solana');\n await runSolanaDeposit(pendingState.amount, withBridgeStage);\n };\n\n try {\n // Attempt to confirm claim and get USDC balance\n await confirmClaimAndDeposit({\n signature: updated.mintTx ?? updated.tx ?? null,\n destinationAddress: solanaRecipient,\n amountHint: pendingState.amount,\n pendingState: updated,\n skipConfirmation: true,\n });\n\n // Success - deposit flow continues normally\n return;\n } catch (claimDepositError) {\n const errorMessage = claimDepositError instanceof Error ? claimDepositError.message : String(claimDepositError);\n\n logger.warn('[BridgeDeposit] confirmClaimAndDeposit failed after nonce processed', {\n error: errorMessage,\n });\n\n // Check if error indicates deposit was already completed\n const isAlreadyCompletedError = errorMessage.toLowerCase().includes('already be completed');\n\n if (isAlreadyCompletedError) {\n // USDC balance check says deposit is complete, but we should verify\n // by attempting the Nord deposit with our saved amount\n try {\n await attemptNordDepositWithFallback();\n // If we got here, Nord deposit succeeded! Continue flow normally\n return;\n } catch (nordDepositError) {\n const nordErrorMsg = nordDepositError instanceof Error ? nordDepositError.message : String(nordDepositError);\n\n logger.info('[BridgeDeposit] Nord deposit failed after completion check', {\n error: nordErrorMsg,\n });\n\n // Both USDC check and Nord deposit failed - deposit is truly complete\n clearPendingDeposit();\n setBridgeError('This deposit appears to be already completed. Your funds should be in your Nord account. Click \"Start Over\" to continue.');\n setBridgeRetryable(false);\n setIsDepositing(false);\n return;\n }\n }\n\n // For any other error type, re-throw to allow user to retry\n throw claimDepositError;\n }\n }\n\n // If the nonce was NOT processed, we need a Solana signer to submit the claim.\n if (!solanaWallet) {\n setBridgeError('Solana wallet not connected. Please connect your Solana wallet to continue.');\n setBridgeRetryable(true);\n setDepositProgressPhase('claim');\n setIsDepositing(false);\n return;\n }\n\n if (solanaWallet.chain !== 'SOL') {\n setBridgeError('Wallet is not a Solana wallet. Please connect a Solana wallet.');\n setBridgeRetryable(true);\n setDepositProgressPhase('claim');\n setIsDepositing(false);\n return;\n }\n\n setDepositProgressPhase('solana');\n\n const signature = await submitClaimWithRetry({\n depositId,\n message: attestationData.message,\n attestation: attestationData.attestation,\n sourceChain: pendingState.chain || fromChain,\n destinationAddress: solanaRecipient,\n lookupTableAddress: lookupTableAddress ?? '',\n solanaWallet: solanaWallet as any,\n fallbackWallet: solanaAddress || turnkeyAddress || '',\n fallbackAmount: attestationData.decodedMessage?.decodedMessageBody?.amount || pendingState.amount || '0',\n bridgeTx,\n attestationId: pendingState.attestationId ?? null,\n });\n\n const updated = advancePendingDeposit(pendingState, {\n stage: 'bridge_confirmed',\n // Preserve the original EVM bridge tx hash - don't overwrite with Solana signature\n mintTx: signature,\n attestationId: pendingState.attestationId,\n });\n\n setPendingMintTx(signature);\n setPendingDepositId(updated.depositId);\n setDepositProgressPhase('claim');\n\n await confirmClaimAndDeposit({\n signature,\n destinationAddress: solanaRecipient,\n amountHint: pendingState.amount,\n pendingState: updated,\n });\n } catch (error) {\n logger.logError(createDepositError('CLAIM_FAILED', 'Failed to resume claim process', {\n cause: error instanceof Error ? error : undefined,\n context: { depositId },\n }));\n setBridgeError(formatBridgeError(error));\n setIsDepositing(false);\n throw error;\n }\n },\n [\n solanaAddress,\n confirmClaimAndDeposit,\n context.entryNetwork,\n context.selectedChainId,\n lookupTableAddress,\n setDepositProgressPhase,\n setIsDepositing,\n setPendingBridgeTx,\n setPendingDepositId,\n setPendingMintTx,\n solanaWallet,\n turnkeyAddress,\n turnkeyEnabled,\n turnkeyStatus,\n ]\n );\n\n return {\n startCctpBridge,\n resumeClaimProcess,\n bridgeRetryable,\n setBridgeRetryable,\n bridgeError,\n setBridgeError,\n bridgeApprovalPending,\n setBridgeApprovalPending,\n bridgeApprovalError,\n setBridgeApprovalError,\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"useBridgeDeposit.js","sourceRoot":"","sources":["../../../../../src/features/onboarding-flow/hooks/useBridgeDeposit.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useRef, useState } from 'react';\nimport { useOnboardingState } from '../providers/OnboardingStateProvider';\nimport { getCctpRuntimeConfig } from '../cctp/config';\nimport {\n advancePendingDeposit,\n clearPendingDeposit,\n createPendingDepositDraft,\n PendingDepositState,\n writePendingDeposit,\n} from '../utils/deposit/storage';\nimport { formatBridgeError, normalizeCctpChain } from '../utils/deposit/bridgeUtils';\nimport { explorerBaseForChain, pickExplorerUrl } from '../utils/explorerUrl';\nimport { logger } from '../../../utils/logger';\nimport { createDepositError } from '../../../utils/errors';\nimport { useWalletConnection } from '../providers/WalletConnectionProvider';\nimport { BridgeKitClient, mapChainToBridgeKit } from '../cctp/bridgeKitClient';\nimport { checkUsedNonceAccount } from '../utils/deposit/nonceUtils';\nimport { waitForAttestation } from '../utils/deposit/attestationUtils';\nimport { ensureCorrectNetwork, getWalletProvider, validateBridgeConfig } from '../utils/deposit/walletUtils';\nimport { submitClaimWithRetry } from '../utils/deposit/claimSubmission';\nimport { confirmClaimAndGetUsdcBalance } from '../utils/deposit/claimConfirmation';\nimport { EvmTxInterceptor } from '../utils/deposit/evmTxInterceptor';\nimport { useNetwork } from '../../../providers/N1WalletProvider/NetworkProvider';\n\ninterface UseBridgeDepositProps {\n setDepositProgressPhase: (phase: 'bridge' | 'claim' | 'solana' | 'nord') => void;\n setPendingBridgeTx: (tx: string | null) => void;\n setPendingMintTx: (tx: string | null) => void;\n setPendingDepositId: (id: string | null) => void;\n setPendingBridgeExplorerUrl: (url: string | null) => void;\n ensurePendingDraft: (amount: string) => ReturnType<typeof createPendingDepositDraft>;\n finalizeBridgeSuccess: (status: { tx?: string | null; mintTx?: string | null; bridgeTx?: string | null; solanaTx?: string | null; depositId?: string | null }) => void;\n setIsDepositing: (isDepositing: boolean) => void;\n runSolanaDeposit: (\n amount: string,\n pendingState?: ReturnType<typeof createPendingDepositDraft> | null\n ) => Promise<{\n txId: string | null;\n workingState: ReturnType<typeof createPendingDepositDraft>;\n solanaTx: string | null;\n }>;\n}\n\nexport const useBridgeDeposit = ({\n setDepositProgressPhase,\n setPendingBridgeTx,\n setPendingMintTx,\n setPendingDepositId,\n setPendingBridgeExplorerUrl,\n ensurePendingDraft,\n finalizeBridgeSuccess,\n setIsDepositing,\n runSolanaDeposit,\n}: UseBridgeDepositProps) => {\n const { context, updateContext } = useOnboardingState();\n\n // Use NetworkProvider for wallet state\n const { solanaAddress, evmWallet, solanaWallet, evmAdapter } = useNetwork();\n const { turnkeyAddress, turnkeyStatus, turnkeyEnabled } = useWalletConnection();\n\n const [bridgeRetryable, setBridgeRetryable] = useState(false);\n const [bridgeError, setBridgeError] = useState<string | null>(null);\n const [bridgeApprovalPending, setBridgeApprovalPending] = useState(false);\n const [bridgeApprovalError, setBridgeApprovalError] = useState<string | null>(null);\n\n\n\n const lookupTableAddress = process.env.NEXT_PUBLIC_CCTP_LOOKUP_TABLE_ADDRESS;\n const claimFinalizationInFlightRef = useRef<Promise<void> | null>(null);\n\n const confirmClaimAndDeposit = useCallback(\n async ({\n signature,\n destinationAddress,\n amountHint,\n pendingState,\n skipConfirmation,\n }: {\n signature: string | null;\n destinationAddress: string;\n amountHint?: string | number | null;\n pendingState?: PendingDepositState | null;\n skipConfirmation?: boolean;\n }) => {\n logger.info('[BridgeDeposit] confirmClaimAndDeposit called', {\n signature,\n destinationAddress,\n amountHint,\n skipConfirmation,\n pendingStage: pendingState?.stage,\n pendingTx: pendingState?.tx,\n });\n\n if (claimFinalizationInFlightRef.current) {\n logger.info('[BridgeDeposit] confirmClaimAndDeposit - already in flight, returning existing promise');\n return claimFinalizationInFlightRef.current;\n }\n\n const promise = (async () => {\n let amount: string;\n let txSignature: string | null;\n try {\n logger.info('[BridgeDeposit] Calling confirmClaimAndGetUsdcBalance...');\n const res = await confirmClaimAndGetUsdcBalance({\n signature,\n destinationAddress,\n amountHint,\n skipConfirmation,\n });\n logger.info('[BridgeDeposit] confirmClaimAndGetUsdcBalance returned', {\n amount: res.amount,\n txSignature: res.txSignature,\n });\n amount = res.amount;\n txSignature = res.txSignature;\n } catch (e) {\n logger.warn('[BridgeDeposit] confirmClaimAndGetUsdcBalance threw error', {\n error: e instanceof Error ? e.message : String(e),\n });\n const message = e instanceof Error ? e.message : String(e);\n // If the claim nonce was already processed and there's no USDC to deposit,\n // the user likely already completed the deposit earlier. Clear pending state\n // to avoid trapping them in an endless \"resume\" loop.\n if (message.toLowerCase().includes('already be completed')) {\n logger.info('[BridgeDeposit] Deposit appears to be already completed - clearing pending state', {\n message,\n });\n clearPendingDeposit();\n setPendingDepositId(null);\n updateContext({\n depositError: 'This deposit appears to be already completed. Your funds should be in your Nord account.',\n });\n // Do not duplicate the message as a bridgeError; depositError is rendered on the progress screen.\n setBridgeError(null);\n setBridgeRetryable(false);\n setDepositProgressPhase('claim');\n setIsDepositing(false);\n return;\n }\n throw e;\n }\n\n const draft = pendingState ?? ensurePendingDraft(amount);\n const withBridgeStage = advancePendingDeposit(draft, {\n stage: 'bridge_confirmed',\n // Preserve the original EVM bridge tx hash - only update mintTx\n mintTx: txSignature,\n amount,\n });\n\n setDepositProgressPhase('solana');\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const depositResult = await runSolanaDeposit(amount, withBridgeStage);\n\n finalizeBridgeSuccess({\n tx: depositResult.txId,\n mintTx: txSignature,\n bridgeTx: withBridgeStage.tx ?? txSignature,\n solanaTx: depositResult.solanaTx,\n depositId: withBridgeStage.depositId,\n });\n })().finally(() => {\n claimFinalizationInFlightRef.current = null;\n });\n\n claimFinalizationInFlightRef.current = promise;\n return promise;\n },\n [\n ensurePendingDraft,\n finalizeBridgeSuccess,\n runSolanaDeposit,\n setDepositProgressPhase,\n setPendingDepositId,\n setBridgeError,\n setBridgeRetryable,\n setIsDepositing,\n updateContext,\n ]\n );\n\n const startCctpBridge = useCallback(\n async (draftAmount: string) => {\n setDepositProgressPhase('bridge');\n setBridgeApprovalPending(true);\n setBridgeApprovalError(null);\n\n const cctpClient = new BridgeKitClient();\n const cctpConfig = getCctpRuntimeConfig();\n const fromChain = normalizeCctpChain(context.selectedChainId ?? context.entryNetwork ?? cctpConfig.fromChain);\n\n await ensureCorrectNetwork({ evmWallet, evmAdapter, targetChain: fromChain });\n validateBridgeConfig(cctpConfig, fromChain, draftAmount);\n\n let workingState = ensurePendingDraft(draftAmount);\n\n const solanaRecipient = solanaAddress || turnkeyAddress || '';\n if (!solanaRecipient) {\n setBridgeApprovalPending(false);\n throw new Error('Turnkey Solana address is not ready yet. Please wait a moment and retry.');\n }\n\n const { provider, walletClient } = await getWalletProvider(evmWallet, evmAdapter);\n if (!provider && !walletClient && !cctpConfig.useMock) {\n setBridgeApprovalPending(false);\n throw new Error('Wallet provider not available for CCTP bridging');\n }\n\n // Persist tx hash ASAP (especially burn) so refresh can resume.\n // We use the interceptor to capture the tx hash before the high-level await returns.\n const interceptor = new EvmTxInterceptor((txHash) => {\n workingState = writePendingDeposit({\n ...workingState,\n depositId: txHash,\n stage: 'bridge_submitted',\n tx: txHash,\n chain: workingState.chain || fromChain,\n amount: workingState.amount || draftAmount,\n updatedAt: Date.now(),\n });\n setPendingDepositId(workingState.depositId);\n setPendingBridgeTx(txHash);\n setDepositProgressPhase('claim');\n });\n\n const walletForBridge = interceptor.wrap(provider || walletClient);\n\n let bridgeTxId: string;\n let depositId: string;\n let attestationId: string | null | undefined;\n\n try {\n const submission = await cctpClient.submitBridge({\n amount: draftAmount,\n fromChain,\n toChain: 'solana',\n destinationAddress: solanaRecipient,\n wallet: walletForBridge,\n });\n bridgeTxId = submission.bridgeTxId;\n depositId = submission.depositId;\n attestationId = submission.attestationId;\n } catch (error) {\n const message = formatBridgeError(error);\n setBridgeApprovalError(message);\n setBridgeError(message);\n setBridgeRetryable(true);\n setBridgeApprovalPending(false);\n clearPendingDeposit();\n throw error;\n } finally {\n setBridgeApprovalPending(false);\n }\n\n const bridgeExplorerUrl = pickExplorerUrl(\n workingState.explorerUrl,\n cctpConfig.explorerBaseUrl ?? explorerBaseForChain(context.entryNetwork),\n bridgeTxId,\n );\n workingState = advancePendingDeposit(workingState, {\n stage: 'bridge_submitted',\n tx: bridgeTxId,\n attestationId,\n explorerUrl: bridgeExplorerUrl ?? null,\n });\n setPendingBridgeExplorerUrl(workingState.explorerUrl ?? null);\n setPendingBridgeTx(bridgeTxId);\n if (depositId && depositId !== workingState.depositId) {\n workingState = writePendingDeposit({\n ...workingState,\n depositId,\n attestationId: attestationId ?? workingState.attestationId ?? null,\n updatedAt: Date.now(),\n });\n }\n setPendingDepositId(depositId || workingState.depositId);\n\n const attestationData = await waitForAttestation({\n cctpClient,\n bridgeTxId,\n sourceChain: fromChain,\n timeoutMs: cctpConfig.attestationTimeoutMs ?? 120_000,\n retryBackoffMs: cctpConfig.retryBackoffMs ?? 5_000,\n });\n\n const nonceAlreadyProcessed = await checkUsedNonceAccount(attestationData?.decodedMessage?.nonce);\n if (nonceAlreadyProcessed) {\n const updatedState = advancePendingDeposit(workingState, {\n stage: 'bridge_confirmed',\n tx: workingState.tx ?? bridgeTxId ?? null,\n mintTx: workingState.mintTx ?? null,\n attestationId,\n explorerUrl: workingState.explorerUrl ?? null,\n });\n\n setPendingMintTx(updatedState.mintTx ?? null);\n setPendingDepositId(updatedState.depositId);\n setDepositProgressPhase('claim');\n\n await confirmClaimAndDeposit({\n signature: updatedState.mintTx ?? updatedState.tx ?? null,\n destinationAddress: solanaRecipient,\n amountHint: draftAmount,\n pendingState: updatedState,\n skipConfirmation: true,\n });\n\n return updatedState;\n }\n\n setDepositProgressPhase('solana');\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const finalSignature = await submitClaimWithRetry({\n depositId,\n message: attestationData.message,\n attestation: attestationData.attestation,\n sourceChain: fromChain,\n destinationAddress: solanaRecipient,\n lookupTableAddress: lookupTableAddress ?? '',\n solanaWallet: solanaWallet as any,\n fallbackWallet: solanaAddress || turnkeyAddress || '',\n fallbackAmount: attestationData.decodedMessage?.decodedMessageBody?.amount || draftAmount || '0',\n bridgeTx: bridgeTxId,\n attestationId: attestationId ?? null,\n });\n\n workingState = advancePendingDeposit(workingState, {\n stage: 'bridge_confirmed',\n // Preserve the original EVM bridge tx hash - don't overwrite with Solana signature\n mintTx: finalSignature,\n attestationId,\n explorerUrl: finalSignature\n ? pickExplorerUrl(null, cctpConfig.mintExplorerBaseUrl ?? explorerBaseForChain('solana'), finalSignature)\n : workingState.explorerUrl,\n });\n\n setPendingMintTx(finalSignature);\n setPendingDepositId(workingState.depositId);\n setDepositProgressPhase('claim');\n\n await confirmClaimAndDeposit({\n signature: finalSignature,\n destinationAddress: solanaRecipient,\n amountHint: draftAmount,\n pendingState: workingState,\n });\n\n return workingState;\n },\n [\n solanaAddress,\n confirmClaimAndDeposit,\n context.entryNetwork,\n context.selectedChainId,\n ensurePendingDraft,\n evmAdapter,\n evmWallet,\n lookupTableAddress,\n setDepositProgressPhase,\n setPendingBridgeExplorerUrl,\n setPendingBridgeTx,\n setPendingDepositId,\n setPendingMintTx,\n solanaWallet,\n turnkeyAddress,\n ]\n );\n\n const resumeClaimProcess = useCallback(\n async (pendingState: PendingDepositState) => {\n // Log full pending state for debugging\n logger.info('[BridgeDeposit] resumeClaimProcess called', {\n depositId: pendingState.depositId,\n stage: pendingState.stage,\n tx: pendingState.tx,\n mintTx: pendingState.mintTx,\n chain: pendingState.chain,\n amount: pendingState.amount,\n wallet: pendingState.wallet,\n reason: pendingState.reason,\n updatedAt: pendingState.updatedAt,\n });\n\n const depositId = pendingState.depositId;\n if (!depositId) {\n logger.warn('[BridgeDeposit] resumeClaimProcess - no depositId, showing error');\n setBridgeError('Missing deposit ID. Please start a new deposit.');\n setBridgeRetryable(false);\n return;\n }\n\n // If the deposit is already in a terminal state, don't try to resume\n if (pendingState.stage === 'solana_confirmed') {\n logger.info('[BridgeDeposit] Deposit already in solana_confirmed state - clearing and completing', {\n depositId,\n stage: pendingState.stage,\n });\n clearPendingDeposit();\n finalizeBridgeSuccess({\n tx: pendingState.tx,\n mintTx: pendingState.mintTx,\n bridgeTx: pendingState.tx,\n depositId: pendingState.depositId,\n });\n return;\n }\n\n // If the deposit was submitted to Solana but we refreshed before confirmation,\n // the deposit might have actually completed. Show message with Start Over option.\n if (pendingState.stage === 'solana_submitted' && pendingState.tx) {\n logger.info('[BridgeDeposit] Deposit in solana_submitted state - may already be complete', {\n depositId,\n stage: pendingState.stage,\n tx: pendingState.tx,\n });\n // Clear state and show message - user can check their Nord account\n clearPendingDeposit();\n setBridgeError('Your deposit may have already completed. Please check your Nord account balance. Click \"Start Over\" if you need to make another deposit.');\n setBridgeRetryable(false);\n setIsDepositing(false);\n return;\n }\n\n // BridgeKit uses the burn tx hash for attestation lookup.\n // After refresh, `depositId` might be a local draft id if the user refreshed mid-sign.\n const bridgeTx = pendingState.tx;\n if (!bridgeTx || !bridgeTx.startsWith('0x')) {\n logger.warn('[BridgeDeposit] Cannot resume claim: missing bridge tx hash (likely refreshed before signing burn tx)', {\n depositId,\n tx: pendingState.tx,\n stage: pendingState.stage,\n });\n setBridgeError('Bridge transaction was not completed. Please start the deposit again.');\n setBridgeRetryable(true);\n setIsDepositing(false);\n return;\n }\n\n // Check if Turnkey is still initializing for EVM flows\n const isEvmFlow = context.entryNetwork === 'evm';\n const turnkeyStillInitializing = turnkeyEnabled && turnkeyStatus !== 'ready';\n\n if (isEvmFlow && turnkeyStillInitializing) {\n setBridgeError('Preparing Solana wallet... Please wait.');\n setBridgeRetryable(false); // Don't allow retry until Turnkey is ready\n setDepositProgressPhase('claim');\n return;\n }\n\n const solanaRecipient = solanaAddress || turnkeyAddress || pendingState.wallet;\n if (!solanaRecipient) {\n setBridgeError('Missing Solana deposit address. Please reconnect your wallet.');\n setBridgeRetryable(true);\n return;\n }\n\n setPendingBridgeTx(bridgeTx);\n setDepositProgressPhase('claim');\n setIsDepositing(true);\n setBridgeError(null);\n setBridgeRetryable(false);\n\n try {\n const cctpClient = new BridgeKitClient();\n const cctpConfig = getCctpRuntimeConfig();\n\n const fromChain = normalizeCctpChain(\n pendingState.chain || context.selectedChainId || context.entryNetwork || cctpConfig.fromChain,\n );\n\n const attestationData = await cctpClient.getAttestation(bridgeTx, fromChain);\n if (!attestationData) {\n setBridgeError('Attestation not ready yet. Please wait a moment and try again.');\n setBridgeRetryable(true);\n setIsDepositing(false);\n return;\n }\n\n const nonceAlreadyProcessed = await checkUsedNonceAccount(attestationData.decodedMessage?.nonce);\n if (nonceAlreadyProcessed) {\n logger.info('[BridgeDeposit] Nonce already processed - CCTP claim was completed previously', {\n depositId,\n bridgeTx,\n nonce: attestationData.decodedMessage?.nonce,\n });\n\n const updated = advancePendingDeposit(pendingState, {\n stage: 'bridge_confirmed',\n tx: pendingState.tx ?? null,\n mintTx: pendingState.mintTx ?? pendingState.tx ?? null,\n attestationId: pendingState.attestationId,\n });\n\n setPendingMintTx(updated.mintTx ?? null);\n setPendingDepositId(updated.depositId);\n setDepositProgressPhase('claim');\n\n try {\n await confirmClaimAndDeposit({\n signature: updated.mintTx ?? updated.tx ?? null,\n destinationAddress: solanaRecipient,\n amountHint: pendingState.amount,\n pendingState: updated,\n skipConfirmation: true,\n });\n } catch (claimDepositError) {\n // If confirmClaimAndDeposit throws, it could be because:\n // 1. USDC was already deposited to Nord (deposit complete - OK to clear state)\n // 2. USDC is missing due to other reasons (funds moved, RPC error - should NOT clear state)\n //\n // Instead of assuming deposit is complete, try the Nord deposit with amountHint.\n // If Nord deposit succeeds, great. If it fails with \"already deposited\", clear state.\n const errorMessage = claimDepositError instanceof Error ? claimDepositError.message : String(claimDepositError);\n logger.warn('[BridgeDeposit] confirmClaimAndDeposit failed after nonce processed', {\n error: errorMessage,\n });\n\n // If the error explicitly says the deposit is already completed, trust it and clear state\n if (errorMessage.toLowerCase().includes('already be completed')) {\n // However, only clear state if we're certain the Nord deposit succeeded\n // Try depositing with amountHint as fallback\n if (pendingState.amount) {\n try {\n logger.info('[BridgeDeposit] Attempting Nord deposit with amountHint as fallback', {\n amount: pendingState.amount,\n });\n\n const withBridgeStage = advancePendingDeposit(updated, {\n stage: 'bridge_confirmed',\n amount: pendingState.amount,\n });\n\n setDepositProgressPhase('solana');\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n await runSolanaDeposit(pendingState.amount, withBridgeStage);\n\n // If we got here, Nord deposit succeeded!\n return;\n } catch (nordDepositError) {\n const nordErrorMsg = nordDepositError instanceof Error ? nordDepositError.message : String(nordDepositError);\n logger.error('[BridgeDeposit] Nord deposit also failed - deposit may be truly complete', {\n error: nordErrorMsg,\n });\n\n // Now we can be more confident the deposit was already completed\n clearPendingDeposit();\n setBridgeError('This deposit appears to be already completed. Your funds should be in your Nord account. Click \"Start Over\" to continue.');\n setBridgeRetryable(false);\n setIsDepositing(false);\n return;\n }\n }\n }\n\n // For other errors, don't clear state - throw and let user retry\n throw claimDepositError;\n }\n\n return;\n }\n\n // If the nonce was NOT processed, we need a Solana signer to submit the claim.\n if (!solanaWallet) {\n setBridgeError('Solana wallet not connected. Please connect your Solana wallet to continue.');\n setBridgeRetryable(true);\n setDepositProgressPhase('claim');\n setIsDepositing(false);\n return;\n }\n\n if (solanaWallet.chain !== 'SOL') {\n setBridgeError('Wallet is not a Solana wallet. Please connect a Solana wallet.');\n setBridgeRetryable(true);\n setDepositProgressPhase('claim');\n setIsDepositing(false);\n return;\n }\n\n setDepositProgressPhase('solana');\n\n const signature = await submitClaimWithRetry({\n depositId,\n message: attestationData.message,\n attestation: attestationData.attestation,\n sourceChain: pendingState.chain || fromChain,\n destinationAddress: solanaRecipient,\n lookupTableAddress: lookupTableAddress ?? '',\n solanaWallet: solanaWallet as any,\n fallbackWallet: solanaAddress || turnkeyAddress || '',\n fallbackAmount: attestationData.decodedMessage?.decodedMessageBody?.amount || pendingState.amount || '0',\n bridgeTx,\n attestationId: pendingState.attestationId ?? null,\n });\n\n const updated = advancePendingDeposit(pendingState, {\n stage: 'bridge_confirmed',\n // Preserve the original EVM bridge tx hash - don't overwrite with Solana signature\n mintTx: signature,\n attestationId: pendingState.attestationId,\n });\n\n setPendingMintTx(signature);\n setPendingDepositId(updated.depositId);\n setDepositProgressPhase('claim');\n\n await confirmClaimAndDeposit({\n signature,\n destinationAddress: solanaRecipient,\n amountHint: pendingState.amount,\n pendingState: updated,\n });\n } catch (error) {\n logger.logError(createDepositError('CLAIM_FAILED', 'Failed to resume claim process', {\n cause: error instanceof Error ? error : undefined,\n context: { depositId },\n }));\n setBridgeError(formatBridgeError(error));\n setIsDepositing(false);\n throw error;\n }\n },\n [\n solanaAddress,\n confirmClaimAndDeposit,\n context.entryNetwork,\n context.selectedChainId,\n lookupTableAddress,\n setDepositProgressPhase,\n setIsDepositing,\n setPendingBridgeTx,\n setPendingDepositId,\n setPendingMintTx,\n solanaWallet,\n turnkeyAddress,\n turnkeyEnabled,\n turnkeyStatus,\n ]\n );\n\n return {\n startCctpBridge,\n resumeClaimProcess,\n bridgeRetryable,\n setBridgeRetryable,\n bridgeError,\n setBridgeError,\n bridgeApprovalPending,\n setBridgeApprovalPending,\n bridgeApprovalError,\n setBridgeApprovalError,\n };\n};\n"]}
|
|
@@ -214,20 +214,6 @@ export var WalletConnectionProvider = function (_a) {
|
|
|
214
214
|
address: currentAddress,
|
|
215
215
|
network: solanaAddr ? 'solana' : evmAddr ? 'evm' : null,
|
|
216
216
|
}));
|
|
217
|
-
// Clear internal refs FIRST
|
|
218
|
-
processedWalletAddressRef.current = null;
|
|
219
|
-
turnkeyAuthenticatedEvmAddressRef.current = null;
|
|
220
|
-
previousEvmWalletAddressRef.current = null;
|
|
221
|
-
// Reset all store state atomically using store actions
|
|
222
|
-
// Do this BEFORE Dynamic handleLogOut to prevent race conditions
|
|
223
|
-
var storeActions = getWalletActions();
|
|
224
|
-
storeActions.session.resetSession(); // Clears: nordUser, sessionPubKey, walletPubKey, isConnected
|
|
225
|
-
storeActions.wallet.resetWallet(); // Clears: solanaWallet, evmWallet, addresses, balances
|
|
226
|
-
storeActions.signing.resetSigning(); // Clears: all signing functions
|
|
227
|
-
// Reset flow state BEFORE clearing storage
|
|
228
|
-
flowActions.resetFlow();
|
|
229
|
-
// Reset onboarding context
|
|
230
|
-
updateContext(initialOnboardingContext);
|
|
231
217
|
try {
|
|
232
218
|
// Clear localStorage using captured addresses (not state)
|
|
233
219
|
if (typeof window !== 'undefined') {
|
|
@@ -250,15 +236,11 @@ export var WalletConnectionProvider = function (_a) {
|
|
|
250
236
|
// Clear flow state
|
|
251
237
|
window.localStorage.removeItem(FLOW_STATE_STORAGE_KEY);
|
|
252
238
|
}
|
|
253
|
-
// Call Dynamic SDK handleLogOut AFTER our state is cleared
|
|
254
239
|
dynamicHandleLogOut === null || dynamicHandleLogOut === void 0 ? void 0 : dynamicHandleLogOut();
|
|
255
240
|
closeDynamicWidget();
|
|
256
|
-
logger.debug('
|
|
241
|
+
logger.debug('Cleared wallet cache', {
|
|
257
242
|
solanaAddress: solanaAddr || null,
|
|
258
|
-
evmAddress: evmAddr || null
|
|
259
|
-
storeReset: true,
|
|
260
|
-
flowReset: true,
|
|
261
|
-
localStorageCleared: true,
|
|
243
|
+
evmAddress: evmAddr || null
|
|
262
244
|
});
|
|
263
245
|
}
|
|
264
246
|
catch (error) {
|
|
@@ -267,11 +249,24 @@ export var WalletConnectionProvider = function (_a) {
|
|
|
267
249
|
context: { address: currentAddress },
|
|
268
250
|
}));
|
|
269
251
|
}
|
|
252
|
+
// Clear internal refs
|
|
253
|
+
processedWalletAddressRef.current = null;
|
|
254
|
+
turnkeyAuthenticatedEvmAddressRef.current = null;
|
|
255
|
+
previousEvmWalletAddressRef.current = null;
|
|
256
|
+
// Reset all store state atomically using store actions
|
|
257
|
+
// This ensures all account-related state is purged completely
|
|
258
|
+
var storeActions = getWalletActions();
|
|
259
|
+
storeActions.session.resetSession();
|
|
260
|
+
storeActions.wallet.resetWallet();
|
|
261
|
+
storeActions.signing.resetSigning();
|
|
262
|
+
// Reset onboarding context
|
|
263
|
+
updateContext(initialOnboardingContext);
|
|
270
264
|
// Reset UI state
|
|
271
265
|
setViewMode(N1ModalViewMode.Automatic);
|
|
272
266
|
// Close modal via state machine (triggers closing → closed transition)
|
|
273
267
|
closeModal();
|
|
274
268
|
onCloseComplete();
|
|
269
|
+
flowActions.resetFlow();
|
|
275
270
|
// Note: We intentionally do NOT clear pending deposit here.
|
|
276
271
|
// The deposit is preserved in localStorage and will only be shown
|
|
277
272
|
// if the user reconnects with the same wallet (validated by walletMatchesPendingDeposit).
|
|
@@ -294,8 +289,7 @@ export var WalletConnectionProvider = function (_a) {
|
|
|
294
289
|
onCloseComplete,
|
|
295
290
|
]);
|
|
296
291
|
useEffect(function () {
|
|
297
|
-
|
|
298
|
-
setDisconnectWalletHandler(disconnectWallet);
|
|
292
|
+
setDisconnectWalletHandler(function () { return disconnectWallet; });
|
|
299
293
|
}, [disconnectWallet, setDisconnectWalletHandler]);
|
|
300
294
|
useEffect(function () {
|
|
301
295
|
if (state === OnboardingStep.CONNECTING_WALLET) {
|
|
@@ -640,7 +634,7 @@ export var WalletConnectionProvider = function (_a) {
|
|
|
640
634
|
cacheValid: isCacheValid,
|
|
641
635
|
});
|
|
642
636
|
var runGetUser = (function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
643
|
-
var nordAccount, cachedInside, nowInside, isCacheValidInside, getUserPromise, hasNordAccount,
|
|
637
|
+
var nordAccount, cachedInside, nowInside, isCacheValidInside, getUserPromise, hasNordAccount, sessionId, sessionIdString, serverSessions, sessionMatchesServer, sessionIdKey, hasActiveSession, accountBalances, hasExistingBalance, pending, hasPendingBridgeDeposit, activePending, hasActivePendingDeposit, lastDepositRecord, isSolanaEntry, pendingCheck, hasPendingBridgeDepositCheck, error_3;
|
|
644
638
|
var _a, _b, _c, _d;
|
|
645
639
|
return __generator(this, function (_e) {
|
|
646
640
|
switch (_e.label) {
|
|
@@ -681,53 +675,23 @@ export var WalletConnectionProvider = function (_a) {
|
|
|
681
675
|
_e.label = 3;
|
|
682
676
|
case 3:
|
|
683
677
|
hasNordAccount = nordAccount != null;
|
|
684
|
-
hasActiveSession = false;
|
|
685
|
-
hasRecentDeposit = false;
|
|
686
|
-
// If API says no account but we have a recent successful deposit record,
|
|
687
|
-
// trust the deposit record (API might not have indexed yet)
|
|
688
|
-
if (!hasNordAccount) {
|
|
689
|
-
try {
|
|
690
|
-
lastDeposit = readLastDepositRecord(solanaWallet.address);
|
|
691
|
-
if (lastDeposit) {
|
|
692
|
-
depositAge = Date.now() - lastDeposit.timestamp;
|
|
693
|
-
RECENT_DEPOSIT_THRESHOLD = 5 * 60 * 1000;
|
|
694
|
-
if (depositAge < RECENT_DEPOSIT_THRESHOLD) {
|
|
695
|
-
logger.debug('Recent successful deposit found - treating as Nord account holder', {
|
|
696
|
-
depositAge: Math.floor(depositAge / 1000) + 's',
|
|
697
|
-
transactionId: lastDeposit.transactionId,
|
|
698
|
-
});
|
|
699
|
-
hasNordAccount = true;
|
|
700
|
-
hasRecentDeposit = true;
|
|
701
|
-
// Assume session is active since we just deposited
|
|
702
|
-
hasActiveSession = true;
|
|
703
|
-
}
|
|
704
|
-
}
|
|
705
|
-
}
|
|
706
|
-
catch (storageError) {
|
|
707
|
-
logger.warn('Failed to read last deposit record', storageError);
|
|
708
|
-
}
|
|
709
|
-
}
|
|
710
678
|
sessionId = currentNordUser.sessionId;
|
|
711
679
|
sessionIdString = sessionId ? sessionId.toString() : null;
|
|
712
680
|
serverSessions = (_c = nordAccount === null || nordAccount === void 0 ? void 0 : nordAccount.sessions) !== null && _c !== void 0 ? _c : {};
|
|
713
681
|
sessionMatchesServer = sessionIdString != null && Boolean(serverSessions === null || serverSessions === void 0 ? void 0 : serverSessions[sessionIdString]);
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
window.localStorage.removeItem(sessionIdKey);
|
|
724
|
-
}
|
|
725
|
-
catch (storageError) {
|
|
726
|
-
logger.warn('Failed to clear stale sessionId from localStorage', storageError);
|
|
727
|
-
}
|
|
682
|
+
if (sessionIdString && !sessionMatchesServer) {
|
|
683
|
+
logger.debug('Stored session is missing on Nord; clearing cached session ID');
|
|
684
|
+
if (typeof window !== 'undefined') {
|
|
685
|
+
try {
|
|
686
|
+
sessionIdKey = "n1_sessionId_".concat(solanaWallet.address);
|
|
687
|
+
window.localStorage.removeItem(sessionIdKey);
|
|
688
|
+
}
|
|
689
|
+
catch (storageError) {
|
|
690
|
+
logger.warn('Failed to clear stale sessionId from localStorage', storageError);
|
|
728
691
|
}
|
|
729
692
|
}
|
|
730
693
|
}
|
|
694
|
+
hasActiveSession = sessionMatchesServer;
|
|
731
695
|
accountBalances = (_d = nordAccount === null || nordAccount === void 0 ? void 0 : nordAccount.balances) !== null && _d !== void 0 ? _d : [];
|
|
732
696
|
hasExistingBalance = Array.isArray(accountBalances) &&
|
|
733
697
|
accountBalances.some(function (b) { return typeof (b === null || b === void 0 ? void 0 : b.amount) === 'number' && b.amount > 0; });
|
|
@@ -807,27 +771,14 @@ export var WalletConnectionProvider = function (_a) {
|
|
|
807
771
|
else {
|
|
808
772
|
lastDepositRecord = readLastDepositRecord(solanaWallet.address);
|
|
809
773
|
if (lastDepositRecord) {
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
transactionId: lastDepositRecord.transactionId,
|
|
819
|
-
record: lastDepositRecord,
|
|
820
|
-
});
|
|
821
|
-
closeDynamicWidget();
|
|
822
|
-
setIsConnecting(false);
|
|
823
|
-
return [2 /*return*/];
|
|
824
|
-
}
|
|
825
|
-
else {
|
|
826
|
-
logger.debug('Last deposit too old to show success screen - treating as existing balance', {
|
|
827
|
-
depositAge: Math.floor(depositAge / 1000) + 's',
|
|
828
|
-
});
|
|
829
|
-
// Fall through to normal flow - user already saw success screen
|
|
830
|
-
}
|
|
774
|
+
logger.debug('Resuming last deposit from local storage');
|
|
775
|
+
flowActions.markDepositSuccess({
|
|
776
|
+
transactionId: lastDepositRecord.transactionId,
|
|
777
|
+
record: lastDepositRecord,
|
|
778
|
+
});
|
|
779
|
+
closeDynamicWidget();
|
|
780
|
+
setIsConnecting(false);
|
|
781
|
+
return [2 /*return*/];
|
|
831
782
|
}
|
|
832
783
|
}
|
|
833
784
|
}
|
|
@@ -839,11 +790,11 @@ export var WalletConnectionProvider = function (_a) {
|
|
|
839
790
|
}
|
|
840
791
|
if (hasNordAccount && hasActiveSession) {
|
|
841
792
|
setIsConnected(true);
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
793
|
+
// If user already has balance and this is NOT an explicit deposit flow,
|
|
794
|
+
// skip the deposit screens and just close the modal
|
|
795
|
+
if (hasExistingBalance && !context.isDepositOnlyFlow) {
|
|
796
|
+
logger.info('[WalletConnection] User has existing Nord balance - skipping deposit flow', {
|
|
845
797
|
hasExistingBalance: hasExistingBalance,
|
|
846
|
-
hasRecentDeposit: hasRecentDeposit,
|
|
847
798
|
isDepositOnlyFlow: context.isDepositOnlyFlow,
|
|
848
799
|
});
|
|
849
800
|
closeDynamicWidget();
|