@n1xyz/wallet-widget 0.0.35-alpha.41 → 0.0.35-alpha.43
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/features/onboarding-flow/bridge-assist/client.d.ts +3 -0
- package/dist/features/onboarding-flow/bridge-assist/client.js +26 -0
- package/dist/features/onboarding-flow/bridge-assist/client.js.map +1 -1
- package/dist/features/onboarding-flow/cctp/solanaClaim.d.ts +1 -6
- package/dist/features/onboarding-flow/cctp/solanaClaim.js +1 -10
- package/dist/features/onboarding-flow/cctp/solanaClaim.js.map +1 -1
- package/dist/features/onboarding-flow/hooks/usePendingDepositState.js +5 -3
- package/dist/features/onboarding-flow/hooks/usePendingDepositState.js.map +1 -1
- package/dist/features/onboarding-flow/hooks/useSolanaDeposit.js +20 -20
- package/dist/features/onboarding-flow/hooks/useSolanaDeposit.js.map +1 -1
- package/dist/features/onboarding-flow/providers/WalletConnectionProvider.js +53 -28
- package/dist/features/onboarding-flow/providers/WalletConnectionProvider.js.map +1 -1
- package/dist/features/onboarding-flow/screens/05-AmountInputScreen.js +5 -1
- package/dist/features/onboarding-flow/screens/05-AmountInputScreen.js.map +1 -1
- package/dist/features/onboarding-flow/screens/07-DepositSuccessScreen.js +2 -1
- package/dist/features/onboarding-flow/screens/07-DepositSuccessScreen.js.map +1 -1
- package/dist/features/onboarding-flow/utils/deposit/claimSubmission.js +59 -27
- package/dist/features/onboarding-flow/utils/deposit/claimSubmission.js.map +1 -1
- package/dist/features/onboarding-flow/utils/withdrawal/bridgeFlowPhases.js +13 -5
- package/dist/features/onboarding-flow/utils/withdrawal/bridgeFlowPhases.js.map +1 -1
- package/dist/features/onboarding-flow/utils/withdrawal/solanaBurnUtils.js +50 -24
- package/dist/features/onboarding-flow/utils/withdrawal/solanaBurnUtils.js.map +1 -1
- package/dist/utils/nordApi.d.ts +6 -3
- package/dist/utils/nordApi.js +41 -12
- package/dist/utils/nordApi.js.map +1 -1
- package/package.json +1 -1
|
@@ -46,6 +46,7 @@ export declare const prepareBurnTx: (withdrawalId: string, params: {
|
|
|
46
46
|
destinationAddress: string;
|
|
47
47
|
}) => Promise<{
|
|
48
48
|
tx: string;
|
|
49
|
+
canonicalParams?: any;
|
|
49
50
|
blockhash: string;
|
|
50
51
|
lastValidBlockHeight: number;
|
|
51
52
|
}>;
|
|
@@ -64,6 +65,7 @@ export declare const prepareClaimTx: (depositId: string, params: {
|
|
|
64
65
|
lookupTableAddress?: string;
|
|
65
66
|
}) => Promise<{
|
|
66
67
|
tx: string;
|
|
68
|
+
canonicalParams?: any;
|
|
67
69
|
blockhash: string;
|
|
68
70
|
lastValidBlockHeight: number;
|
|
69
71
|
}>;
|
|
@@ -74,4 +76,5 @@ export declare const submitClaimTx: (depositId: string, params: {
|
|
|
74
76
|
tx: string;
|
|
75
77
|
stage?: string;
|
|
76
78
|
}>;
|
|
79
|
+
export declare const reattestDeposit: (depositId: string) => Promise<boolean>;
|
|
77
80
|
export declare const fetchServerFeePayer: () => Promise<string | null>;
|
|
@@ -360,6 +360,32 @@ export var submitClaimTx = function (depositId, params) { return __awaiter(void
|
|
|
360
360
|
}
|
|
361
361
|
});
|
|
362
362
|
}); };
|
|
363
|
+
export var reattestDeposit = function (depositId) { return __awaiter(void 0, void 0, void 0, function () {
|
|
364
|
+
var config, response, _a;
|
|
365
|
+
return __generator(this, function (_b) {
|
|
366
|
+
switch (_b.label) {
|
|
367
|
+
case 0:
|
|
368
|
+
config = getBridgeAssistConfig();
|
|
369
|
+
if (!config)
|
|
370
|
+
return [2 /*return*/, false];
|
|
371
|
+
_b.label = 1;
|
|
372
|
+
case 1:
|
|
373
|
+
_b.trys.push([1, 3, , 4]);
|
|
374
|
+
return [4 /*yield*/, fetch("".concat(config.baseUrl, "/deposits/").concat(depositId, "/reattest"), {
|
|
375
|
+
method: 'POST',
|
|
376
|
+
headers: { 'Content-Type': 'application/json' },
|
|
377
|
+
body: JSON.stringify({ depositId: depositId }),
|
|
378
|
+
})];
|
|
379
|
+
case 2:
|
|
380
|
+
response = _b.sent();
|
|
381
|
+
return [2 /*return*/, response.ok];
|
|
382
|
+
case 3:
|
|
383
|
+
_a = _b.sent();
|
|
384
|
+
return [2 /*return*/, false];
|
|
385
|
+
case 4: return [2 /*return*/];
|
|
386
|
+
}
|
|
387
|
+
});
|
|
388
|
+
}); };
|
|
363
389
|
export var fetchServerFeePayer = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
364
390
|
var config, response, data, error_8;
|
|
365
391
|
return __generator(this, function (_a) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/bridge-assist/client.ts"],"names":[],"mappings":"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","sourcesContent":["import { BridgeAssistError } from './types';\nimport { getBridgeAssistConfig } from './config';\nimport { logger } from '../../../utils/logger';\nimport { createDepositError } from '../../../utils/errors';\nimport type { PendingDepositStage } from '../utils/deposit/storage';\n\nexport interface BridgeAssistStatus {\n stage: PendingDepositStage;\n tx?: string | null;\n reason?: string | null;\n bridgeTx?: string | null;\n solanaTx?: string | null;\n mintTx?: string | null;\n attestationId?: string | null;\n depositId?: string | null;\n}\n\nconst mapStage = (stage: string | null | undefined): PendingDepositStage => {\n const s = (stage ?? '').toLowerCase();\n if (s === 'failed' || s === 'error') return 'failed';\n if (s === 'confirmed' || s === 'complete' || s === 'completed') return 'solana_confirmed';\n if (s === 'submitted' || s === 'processing' || s === 'pending') return 'solana_submitted';\n // Fallback to initiated if unknown\n return 'initiated';\n};\n\nconst handleResponse = async (response: Response): Promise<any> => {\n if (!response.ok) {\n let errorMessage = response.statusText;\n let retryAfter: number | undefined;\n\n const retryHeader = response.headers.get('Retry-After');\n if (retryHeader) {\n retryAfter = parseInt(retryHeader, 10);\n }\n\n try {\n const errorBody = await response.json();\n if (errorBody.message) {\n errorMessage = errorBody.message;\n } else if (errorBody.error) {\n errorMessage = errorBody.error;\n } else if (Array.isArray(errorBody.errors) && errorBody.errors.length) {\n errorMessage = errorBody.errors.join(', ');\n }\n } catch {\n // ignore json parse error\n }\n throw new BridgeAssistError(errorMessage, response.status, retryAfter);\n }\n return response.json();\n};\n\nexport const createBridgeDeposit = async (\n params: {\n wallet: string;\n chain: string;\n solanaAddress: string;\n amount: string;\n bridgeTx: string;\n depositId?: string;\n attestationId?: string | null;\n }\n): Promise<BridgeAssistStatus | null> => {\n const config = getBridgeAssistConfig();\n if (!config) return null;\n try {\n const response = await fetch(`${config.baseUrl}/deposits`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(params)\n });\n const body = await handleResponse(response);\n const stage = mapStage(body?.stage);\n return {\n stage,\n tx: body?.tx ?? body?.solanaTx ?? null,\n bridgeTx: body?.bridgeTx ?? params.bridgeTx ?? null,\n solanaTx: body?.solanaTx ?? body?.tx ?? null,\n attestationId: body?.attestationId ?? params.attestationId ?? null,\n depositId: body?.depositId ?? params.depositId ?? null,\n reason: body?.reason ?? null,\n };\n } catch (error) {\n logger.logError(createDepositError('BRIDGE_FAILED', 'Failed to create bridge deposit', {\n cause: error instanceof Error ? error : undefined,\n }));\n throw error;\n }\n}\n\nexport const fetchBridgeStatus = async (depositId: string): Promise<BridgeAssistStatus | null> => {\n const config = getBridgeAssistConfig();\n if (!config) return null;\n if (!depositId) return null;\n try {\n const response = await fetch(`${config.baseUrl}/deposits/${depositId}`, {\n method: 'GET',\n });\n if (response.status === 404) {\n return null;\n }\n const body = await handleResponse(response);\n const stage = mapStage(body?.stage);\n return {\n stage,\n tx: body?.solanaTx ?? body?.tx ?? null,\n bridgeTx: body?.bridgeTx ?? null,\n solanaTx: body?.solanaTx ?? null,\n mintTx: body?.mintTx ?? null,\n attestationId: body?.attestationId ?? null,\n depositId: body?.depositId ?? depositId,\n reason: body?.reason ?? null,\n };\n } catch (error) {\n logger.logError(createDepositError('BRIDGE_FAILED', 'Failed to fetch bridge status', {\n cause: error instanceof Error ? error : undefined,\n context: { depositId },\n }));\n throw error;\n }\n};\n\nexport const submitBridgeClaim = async (\n depositId: string,\n params: {\n solanaTx?: string;\n message?: string;\n attestation?: string;\n sourceChain?: string;\n destinationAddress?: string;\n blockhash?: string;\n lastValidBlockHeight?: number;\n lookupTableAddress?: string;\n userSignature?: string;\n txHash?: string;\n }\n): Promise<{\n tx?: string;\n requiresUserSignature?: boolean;\n stage?: string;\n blockhash?: string;\n lastValidBlockHeight?: number;\n lookupTableAddress?: string;\n signedTx?: string;\n} | null> => {\n const config = getBridgeAssistConfig();\n if (!config) return null;\n\n if (!depositId) throw new Error('Missing depositId for submitBridgeClaim');\n if (!params.message) throw new Error('Missing message for submitBridgeClaim');\n if (!params.attestation) throw new Error('Missing attestation for submitBridgeClaim');\n if (!params.sourceChain) throw new Error('Missing sourceChain for submitBridgeClaim');\n if (!params.destinationAddress) throw new Error('Missing destinationAddress for submitBridgeClaim');\n if (!params.userSignature) throw new Error('Missing userSignature for submitBridgeClaim');\n if (!params.txHash) throw new Error('Missing txHash (hash of signed tx) for submitBridgeClaim');\n\n try {\n // Single-request flow: always send full payload\n const payload = params;\n const url = `${config.baseUrl}/deposits/${depositId}/claim`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload)\n });\n return handleResponse(response);\n } catch (error) {\n logger.logError(createDepositError('CLAIM_FAILED', 'Failed to submit bridge claim', {\n cause: error instanceof Error ? error : undefined,\n context: { depositId },\n }));\n throw error;\n }\n}\n\nexport const prepareBurnTx = async (\n withdrawalId: string,\n params: {\n userAddress: string;\n amount: string;\n destinationChain: string;\n destinationAddress: string;\n }\n): Promise<{ tx: string; blockhash: string; lastValidBlockHeight: number }> => {\n const config = getBridgeAssistConfig();\n if (!config) throw new BridgeAssistError('Bridge Assist not configured');\n if (!withdrawalId) throw new Error('Missing withdrawalId for prepareBurnTx');\n\n try {\n const response = await fetch(`${config.baseUrl}/withdrawals/${withdrawalId}/prepare-burn`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(params),\n });\n return handleResponse(response);\n } catch (error) {\n logger.logError(createDepositError('BRIDGE_FAILED', 'Failed to prepare burn transaction', {\n cause: error instanceof Error ? error : undefined,\n context: { withdrawalId },\n }));\n throw error;\n }\n};\n\nexport const submitBurnTx = async (\n withdrawalId: string,\n params: {\n userSignature: string; // base64\n txHash: string; // hex\n }\n): Promise<{ burnTx: string; explorerUrl?: string }> => {\n const config = getBridgeAssistConfig();\n if (!config) throw new BridgeAssistError('Bridge Assist not configured');\n if (!withdrawalId) throw new Error('Missing withdrawalId for submitBurnTx');\n\n try {\n const response = await fetch(`${config.baseUrl}/withdrawals/${withdrawalId}/submit-burn`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(params),\n });\n return handleResponse(response);\n } catch (error) {\n logger.logError(createDepositError('BRIDGE_FAILED', 'Failed to submit burn transaction', {\n cause: error instanceof Error ? error : undefined,\n context: { withdrawalId },\n }));\n throw error;\n }\n};\n\nexport const prepareClaimTx = async (\n depositId: string,\n params: {\n message: string;\n attestation: string;\n sourceChain: string;\n destinationAddress: string;\n lookupTableAddress?: string;\n }\n): Promise<{ tx: string; blockhash: string; lastValidBlockHeight: number }> => {\n const config = getBridgeAssistConfig();\n if (!config) throw new BridgeAssistError('Bridge Assist not configured');\n if (!depositId) throw new Error('Missing depositId for prepareClaimTx');\n\n try {\n const response = await fetch(`${config.baseUrl}/deposits/${depositId}/prepare-claim`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(params),\n });\n return handleResponse(response);\n } catch (error) {\n logger.logError(createDepositError('CLAIM_FAILED', 'Failed to prepare claim transaction', {\n cause: error instanceof Error ? error : undefined,\n context: { depositId },\n }));\n throw error;\n }\n};\n\nexport const submitClaimTx = async (\n depositId: string,\n params: {\n userSignature: string;\n txHash: string;\n }\n): Promise<{ tx: string; stage?: string }> => {\n const config = getBridgeAssistConfig();\n if (!config) throw new BridgeAssistError('Bridge Assist not configured');\n if (!depositId) throw new Error('Missing depositId for submitClaimTx');\n\n try {\n const response = await fetch(`${config.baseUrl}/deposits/${depositId}/submit-claim`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(params),\n });\n return handleResponse(response);\n } catch (error) {\n logger.logError(createDepositError('CLAIM_FAILED', 'Failed to submit claim transaction', {\n cause: error instanceof Error ? error : undefined,\n context: { depositId },\n }));\n throw error;\n }\n};\n\nexport const fetchServerFeePayer = async (): Promise<string | null> => {\n const config = getBridgeAssistConfig();\n if (!config) return null;\n try {\n const response = await fetch(`${config.baseUrl}/health`, {\n method: 'GET',\n });\n const data = await handleResponse(response);\n return data.feePayer || null;\n } catch (error) {\n logger.logError(createDepositError('BRIDGE_FAILED', 'Failed to fetch server fee payer', {\n cause: error instanceof Error ? error : undefined,\n }));\n // Surface a clear, typed error for callers so UI can show \"server not available\" and retry.\n // Network/CORS failures typically land here with no HTTP status.\n throw new BridgeAssistError('Bridge Assist server is not available', undefined);\n }\n}\n\n"]}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/bridge-assist/client.ts"],"names":[],"mappings":"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","sourcesContent":["import { BridgeAssistError } from './types';\nimport { getBridgeAssistConfig } from './config';\nimport { logger } from '../../../utils/logger';\nimport { createDepositError } from '../../../utils/errors';\nimport type { PendingDepositStage } from '../utils/deposit/storage';\n\nexport interface BridgeAssistStatus {\n stage: PendingDepositStage;\n tx?: string | null;\n reason?: string | null;\n bridgeTx?: string | null;\n solanaTx?: string | null;\n mintTx?: string | null;\n attestationId?: string | null;\n depositId?: string | null;\n}\n\nconst mapStage = (stage: string | null | undefined): PendingDepositStage => {\n const s = (stage ?? '').toLowerCase();\n if (s === 'failed' || s === 'error') return 'failed';\n if (s === 'confirmed' || s === 'complete' || s === 'completed') return 'solana_confirmed';\n if (s === 'submitted' || s === 'processing' || s === 'pending') return 'solana_submitted';\n // Fallback to initiated if unknown\n return 'initiated';\n};\n\nconst handleResponse = async (response: Response): Promise<any> => {\n if (!response.ok) {\n let errorMessage = response.statusText;\n let retryAfter: number | undefined;\n\n const retryHeader = response.headers.get('Retry-After');\n if (retryHeader) {\n retryAfter = parseInt(retryHeader, 10);\n }\n\n try {\n const errorBody = await response.json();\n if (errorBody.message) {\n errorMessage = errorBody.message;\n } else if (errorBody.error) {\n errorMessage = errorBody.error;\n } else if (Array.isArray(errorBody.errors) && errorBody.errors.length) {\n errorMessage = errorBody.errors.join(', ');\n }\n } catch {\n // ignore json parse error\n }\n throw new BridgeAssistError(errorMessage, response.status, retryAfter);\n }\n return response.json();\n};\n\nexport const createBridgeDeposit = async (\n params: {\n wallet: string;\n chain: string;\n solanaAddress: string;\n amount: string;\n bridgeTx: string;\n depositId?: string;\n attestationId?: string | null;\n }\n): Promise<BridgeAssistStatus | null> => {\n const config = getBridgeAssistConfig();\n if (!config) return null;\n try {\n const response = await fetch(`${config.baseUrl}/deposits`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(params)\n });\n const body = await handleResponse(response);\n const stage = mapStage(body?.stage);\n return {\n stage,\n tx: body?.tx ?? body?.solanaTx ?? null,\n bridgeTx: body?.bridgeTx ?? params.bridgeTx ?? null,\n solanaTx: body?.solanaTx ?? body?.tx ?? null,\n attestationId: body?.attestationId ?? params.attestationId ?? null,\n depositId: body?.depositId ?? params.depositId ?? null,\n reason: body?.reason ?? null,\n };\n } catch (error) {\n logger.logError(createDepositError('BRIDGE_FAILED', 'Failed to create bridge deposit', {\n cause: error instanceof Error ? error : undefined,\n }));\n throw error;\n }\n}\n\nexport const fetchBridgeStatus = async (depositId: string): Promise<BridgeAssistStatus | null> => {\n const config = getBridgeAssistConfig();\n if (!config) return null;\n if (!depositId) return null;\n try {\n const response = await fetch(`${config.baseUrl}/deposits/${depositId}`, {\n method: 'GET',\n });\n if (response.status === 404) {\n return null;\n }\n const body = await handleResponse(response);\n const stage = mapStage(body?.stage);\n return {\n stage,\n tx: body?.solanaTx ?? body?.tx ?? null,\n bridgeTx: body?.bridgeTx ?? null,\n solanaTx: body?.solanaTx ?? null,\n mintTx: body?.mintTx ?? null,\n attestationId: body?.attestationId ?? null,\n depositId: body?.depositId ?? depositId,\n reason: body?.reason ?? null,\n };\n } catch (error) {\n logger.logError(createDepositError('BRIDGE_FAILED', 'Failed to fetch bridge status', {\n cause: error instanceof Error ? error : undefined,\n context: { depositId },\n }));\n throw error;\n }\n};\n\nexport const submitBridgeClaim = async (\n depositId: string,\n params: {\n solanaTx?: string;\n message?: string;\n attestation?: string;\n sourceChain?: string;\n destinationAddress?: string;\n blockhash?: string;\n lastValidBlockHeight?: number;\n lookupTableAddress?: string;\n userSignature?: string;\n txHash?: string;\n }\n): Promise<{\n tx?: string;\n requiresUserSignature?: boolean;\n stage?: string;\n blockhash?: string;\n lastValidBlockHeight?: number;\n lookupTableAddress?: string;\n signedTx?: string;\n} | null> => {\n const config = getBridgeAssistConfig();\n if (!config) return null;\n\n if (!depositId) throw new Error('Missing depositId for submitBridgeClaim');\n if (!params.message) throw new Error('Missing message for submitBridgeClaim');\n if (!params.attestation) throw new Error('Missing attestation for submitBridgeClaim');\n if (!params.sourceChain) throw new Error('Missing sourceChain for submitBridgeClaim');\n if (!params.destinationAddress) throw new Error('Missing destinationAddress for submitBridgeClaim');\n if (!params.userSignature) throw new Error('Missing userSignature for submitBridgeClaim');\n if (!params.txHash) throw new Error('Missing txHash (hash of signed tx) for submitBridgeClaim');\n\n try {\n // Single-request flow: always send full payload\n const payload = params;\n const url = `${config.baseUrl}/deposits/${depositId}/claim`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload)\n });\n return handleResponse(response);\n } catch (error) {\n logger.logError(createDepositError('CLAIM_FAILED', 'Failed to submit bridge claim', {\n cause: error instanceof Error ? error : undefined,\n context: { depositId },\n }));\n throw error;\n }\n}\n\nexport const prepareBurnTx = async (\n withdrawalId: string,\n params: {\n userAddress: string;\n amount: string;\n destinationChain: string;\n destinationAddress: string;\n }\n): Promise<{ tx: string; canonicalParams?: any; blockhash: string; lastValidBlockHeight: number }> => {\n const config = getBridgeAssistConfig();\n if (!config) throw new BridgeAssistError('Bridge Assist not configured');\n if (!withdrawalId) throw new Error('Missing withdrawalId for prepareBurnTx');\n\n try {\n const response = await fetch(`${config.baseUrl}/withdrawals/${withdrawalId}/prepare-burn`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(params),\n });\n return handleResponse(response);\n } catch (error) {\n logger.logError(createDepositError('BRIDGE_FAILED', 'Failed to prepare burn transaction', {\n cause: error instanceof Error ? error : undefined,\n context: { withdrawalId },\n }));\n throw error;\n }\n};\n\nexport const submitBurnTx = async (\n withdrawalId: string,\n params: {\n userSignature: string; // base64\n txHash: string; // hex\n }\n): Promise<{ burnTx: string; explorerUrl?: string }> => {\n const config = getBridgeAssistConfig();\n if (!config) throw new BridgeAssistError('Bridge Assist not configured');\n if (!withdrawalId) throw new Error('Missing withdrawalId for submitBurnTx');\n\n try {\n const response = await fetch(`${config.baseUrl}/withdrawals/${withdrawalId}/submit-burn`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(params),\n });\n return handleResponse(response);\n } catch (error) {\n logger.logError(createDepositError('BRIDGE_FAILED', 'Failed to submit burn transaction', {\n cause: error instanceof Error ? error : undefined,\n context: { withdrawalId },\n }));\n throw error;\n }\n};\n\nexport const prepareClaimTx = async (\n depositId: string,\n params: {\n message: string;\n attestation: string;\n sourceChain: string;\n destinationAddress: string;\n lookupTableAddress?: string;\n }\n): Promise<{ tx: string; canonicalParams?: any; blockhash: string; lastValidBlockHeight: number }> => {\n const config = getBridgeAssistConfig();\n if (!config) throw new BridgeAssistError('Bridge Assist not configured');\n if (!depositId) throw new Error('Missing depositId for prepareClaimTx');\n\n try {\n const response = await fetch(`${config.baseUrl}/deposits/${depositId}/prepare-claim`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(params),\n });\n return handleResponse(response);\n } catch (error) {\n logger.logError(createDepositError('CLAIM_FAILED', 'Failed to prepare claim transaction', {\n cause: error instanceof Error ? error : undefined,\n context: { depositId },\n }));\n throw error;\n }\n};\n\nexport const submitClaimTx = async (\n depositId: string,\n params: {\n userSignature: string;\n txHash: string;\n }\n): Promise<{ tx: string; stage?: string }> => {\n const config = getBridgeAssistConfig();\n if (!config) throw new BridgeAssistError('Bridge Assist not configured');\n if (!depositId) throw new Error('Missing depositId for submitClaimTx');\n\n try {\n const response = await fetch(`${config.baseUrl}/deposits/${depositId}/submit-claim`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(params),\n });\n return handleResponse(response);\n } catch (error) {\n logger.logError(createDepositError('CLAIM_FAILED', 'Failed to submit claim transaction', {\n cause: error instanceof Error ? error : undefined,\n context: { depositId },\n }));\n throw error;\n }\n};\n\nexport const reattestDeposit = async (depositId: string): Promise<boolean> => {\n const config = getBridgeAssistConfig();\n if (!config) return false;\n try {\n const response = await fetch(`${config.baseUrl}/deposits/${depositId}/reattest`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ depositId }),\n });\n return response.ok;\n } catch {\n return false;\n }\n};\n\nexport const fetchServerFeePayer = async (): Promise<string | null> => {\n const config = getBridgeAssistConfig();\n if (!config) return null;\n try {\n const response = await fetch(`${config.baseUrl}/health`, {\n method: 'GET',\n });\n const data = await handleResponse(response);\n return data.feePayer || null;\n } catch (error) {\n logger.logError(createDepositError('BRIDGE_FAILED', 'Failed to fetch server fee payer', {\n cause: error instanceof Error ? error : undefined,\n }));\n // Surface a clear, typed error for callers so UI can show \"server not available\" and retry.\n // Network/CORS failures typically land here with no HTTP status.\n throw new BridgeAssistError('Bridge Assist server is not available', undefined);\n }\n}\n\n"]}
|
|
@@ -1,6 +1 @@
|
|
|
1
|
-
|
|
2
|
-
/**
|
|
3
|
-
* Hashes a VersionedTransaction for signature verification.
|
|
4
|
-
* Local copy to avoid cross-package import that breaks tsc rootDir.
|
|
5
|
-
*/
|
|
6
|
-
export declare const hashVersionedTransaction: (tx: VersionedTransaction) => string;
|
|
1
|
+
export { hashVersionedTransaction } from '@n1xyz/cctp-tx-builder';
|
|
@@ -1,11 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import { bytesToHex } from '@noble/hashes/utils';
|
|
3
|
-
/**
|
|
4
|
-
* Hashes a VersionedTransaction for signature verification.
|
|
5
|
-
* Local copy to avoid cross-package import that breaks tsc rootDir.
|
|
6
|
-
*/
|
|
7
|
-
export var hashVersionedTransaction = function (tx) {
|
|
8
|
-
var serialized = tx.serialize();
|
|
9
|
-
return bytesToHex(sha256(serialized));
|
|
10
|
-
};
|
|
1
|
+
export { hashVersionedTransaction } from '@n1xyz/cctp-tx-builder';
|
|
11
2
|
//# sourceMappingURL=solanaClaim.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solanaClaim.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/cctp/solanaClaim.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"solanaClaim.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/cctp/solanaClaim.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC","sourcesContent":["export { hashVersionedTransaction } from '@n1xyz/cctp-tx-builder';\n"]}
|
|
@@ -21,8 +21,10 @@ export var usePendingDepositState = function () {
|
|
|
21
21
|
var _b = useState(null), pendingDepositId = _b[0], setPendingDepositId = _b[1];
|
|
22
22
|
var ensurePendingDraft = useCallback(function (draftAmount) {
|
|
23
23
|
var _a, _b;
|
|
24
|
-
// Use
|
|
25
|
-
|
|
24
|
+
// Use entryNetwork (user's explicit selection) when available; fall back to isEvmMode.
|
|
25
|
+
// entryNetwork doesn't flip when Turnkey creates a Solana wallet, unlike isEvmMode.
|
|
26
|
+
var isEvmFlow = context.entryNetwork === 'evm' || (context.entryNetwork == null && isEvmMode);
|
|
27
|
+
var walletForDraft = isEvmFlow
|
|
26
28
|
? evmAddress || solanaAddress
|
|
27
29
|
: solanaAddress;
|
|
28
30
|
var chainForDraft = (_a = context.selectedChainId) !== null && _a !== void 0 ? _a : ((_b = context.selectedChain) !== null && _b !== void 0 ? _b : 'solana');
|
|
@@ -60,7 +62,7 @@ export var usePendingDepositState = function () {
|
|
|
60
62
|
return updatedState;
|
|
61
63
|
}
|
|
62
64
|
return pendingState;
|
|
63
|
-
}, [solanaAddress, context.selectedChainId, context.selectedChain, evmAddress, isEvmMode, pendingDepositId]);
|
|
65
|
+
}, [solanaAddress, context.selectedChainId, context.selectedChain, context.entryNetwork, evmAddress, isEvmMode, pendingDepositId]);
|
|
64
66
|
return {
|
|
65
67
|
pendingDepositId: pendingDepositId,
|
|
66
68
|
setPendingDepositId: setPendingDepositId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePendingDepositState.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/hooks/usePendingDepositState.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,qDAAqD,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,CAAC,IAAM,sBAAsB,GAAG;IAElC,IAAA,OAAO,GACL,kBAAkB,EAAE,QADf,CACgB;IAEzB,wDAAwD;IAClD,IAAA,KAA2C,UAAU,EAAE,EAArD,aAAa,mBAAA,EAAE,UAAU,gBAAA,EAAE,SAAS,eAAiB,CAAC;IAExD,IAAA,KAA0C,QAAQ,CAAgB,IAAI,CAAC,EAAtE,gBAAgB,QAAA,EAAE,mBAAmB,QAAiC,CAAC;IAE9E,IAAM,kBAAkB,GAAG,WAAW,CACpC,UAAC,WAAmB;;QAClB,
|
|
1
|
+
{"version":3,"file":"usePendingDepositState.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/hooks/usePendingDepositState.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useState } from 'react';\nimport { useNetwork } from '../../../providers/N1WalletProvider/NetworkProvider';\nimport { useOnboardingState } from '../providers/OnboardingStateProvider';\nimport {\n clearPendingDeposit,\n createPendingDepositDraft,\n readPendingDeposit,\n writePendingDeposit,\n} from '../utils/deposit/storage';\nimport { logger } from '../../../utils/logger';\n\nexport const usePendingDepositState = () => {\n const {\n context,\n } = useOnboardingState();\n\n // Use NetworkProvider instead of legacy N1WalletContext\n const { solanaAddress, evmAddress, isEvmMode } = useNetwork();\n\n const [pendingDepositId, setPendingDepositId] = useState<string | null>(null);\n\n const ensurePendingDraft = useCallback(\n (draftAmount: string): ReturnType<typeof createPendingDepositDraft> => {\n // Use entryNetwork (user's explicit selection) when available; fall back to isEvmMode.\n // entryNetwork doesn't flip when Turnkey creates a Solana wallet, unlike isEvmMode.\n const isEvmFlow = context.entryNetwork === 'evm' || (context.entryNetwork == null && isEvmMode);\n const walletForDraft = isEvmFlow\n ? evmAddress || solanaAddress\n : solanaAddress;\n const chainForDraft = context.selectedChainId ?? (context.selectedChain ?? 'solana');\n let pendingState = readPendingDeposit();\n if (pendingState?.stage === 'failed') {\n clearPendingDeposit();\n pendingState = null;\n }\n if (pendingState && pendingDepositId && pendingState.depositId !== pendingDepositId) {\n clearPendingDeposit();\n pendingState = null;\n }\n if (!pendingState) {\n const draft = createPendingDepositDraft({\n depositId: pendingDepositId ?? `dep-${Date.now()}`,\n wallet: walletForDraft || '',\n chain: chainForDraft,\n amount: draftAmount,\n });\n setPendingDepositId(draft.depositId);\n return draft;\n }\n\n // If pending state exists but amount differs, update it.\n // This ensures the localStorage has the current user input amount,\n // preventing stale amounts from being used in success records.\n // Only update if we're still in early stages (before bridge/solana submission).\n const canUpdateAmount = pendingState.stage === 'initiated';\n if (canUpdateAmount && pendingState.amount !== draftAmount) {\n logger.debug('[PendingDepositState] Updating pending draft amount', {\n oldAmount: pendingState.amount,\n newAmount: draftAmount,\n stage: pendingState.stage,\n });\n const updatedState = writePendingDeposit({\n ...pendingState,\n amount: draftAmount,\n });\n return updatedState;\n }\n\n return pendingState;\n },\n [solanaAddress, context.selectedChainId, context.selectedChain, context.entryNetwork, evmAddress, isEvmMode, pendingDepositId]\n );\n\n return {\n pendingDepositId,\n setPendingDepositId,\n ensurePendingDraft,\n };\n};\n\n"]}
|
|
@@ -55,9 +55,9 @@ export var useSolanaDeposit = function (_a) {
|
|
|
55
55
|
var turnkeyAddress = useWalletConnection().turnkeyAddress;
|
|
56
56
|
var runSolanaDeposit = useCallback(function (draftAmount, pendingState) { return __awaiter(void 0, void 0, void 0, function () {
|
|
57
57
|
var workingState, normalizedAmount, txId, serializedTx, protonClient, solanaConnection, solanaRecipient, recipientKey, usdcToken, isBridgeFlow, depositResponse, depositError_1, splTx, splError_1, slot, eventIndex;
|
|
58
|
-
var _a, _b, _c, _d, _e;
|
|
59
|
-
return __generator(this, function (
|
|
60
|
-
switch (
|
|
58
|
+
var _a, _b, _c, _d, _e, _f;
|
|
59
|
+
return __generator(this, function (_g) {
|
|
60
|
+
switch (_g.label) {
|
|
61
61
|
case 0:
|
|
62
62
|
logger.info("[SolanaDeposit] runSolanaDeposit called", {
|
|
63
63
|
draftAmount: draftAmount,
|
|
@@ -85,17 +85,17 @@ export var useSolanaDeposit = function (_a) {
|
|
|
85
85
|
}
|
|
86
86
|
recipientKey = new PublicKey(solanaRecipient);
|
|
87
87
|
usdcToken = Array.isArray(nord === null || nord === void 0 ? void 0 : nord.tokens)
|
|
88
|
-
? (nord === null || nord === void 0 ? void 0 : nord.tokens.find(function (t) { return t.tokenId === NORD_USDC_TOKEN_ID; }))
|
|
88
|
+
? (_a = nord === null || nord === void 0 ? void 0 : nord.tokens.find(function (t) { return t.tokenId === NORD_USDC_TOKEN_ID; })) !== null && _a !== void 0 ? _a : null
|
|
89
89
|
: null;
|
|
90
90
|
if (!usdcToken) {
|
|
91
91
|
throw new Error('Nord token configuration is missing USDC. Verify your Nord deployment.');
|
|
92
92
|
}
|
|
93
93
|
setDepositProgressPhase('solana');
|
|
94
|
-
isBridgeFlow = (
|
|
94
|
+
isBridgeFlow = (_c = (_b = workingState.tx) === null || _b === void 0 ? void 0 : _b.startsWith('0x')) !== null && _c !== void 0 ? _c : false;
|
|
95
95
|
workingState = advancePendingDeposit(workingState, {
|
|
96
96
|
stage: 'solana_submitted',
|
|
97
97
|
// For bridge flows, preserve the EVM tx hash; for native Solana, use the Solana txId
|
|
98
|
-
tx: isBridgeFlow ? workingState.tx : ((
|
|
98
|
+
tx: isBridgeFlow ? workingState.tx : ((_d = txId !== null && txId !== void 0 ? txId : workingState.tx) !== null && _d !== void 0 ? _d : null),
|
|
99
99
|
});
|
|
100
100
|
logger.info("[SolanaDeposit] Calling nordUser.deposit...", {
|
|
101
101
|
normalizedAmount: normalizedAmount,
|
|
@@ -106,16 +106,16 @@ export var useSolanaDeposit = function (_a) {
|
|
|
106
106
|
hasDepositFunction: typeof (nordUser === null || nordUser === void 0 ? void 0 : nordUser.deposit) === 'function',
|
|
107
107
|
});
|
|
108
108
|
if (!(typeof (nordUser === null || nordUser === void 0 ? void 0 : nordUser.deposit) === 'function')) return [3 /*break*/, 5];
|
|
109
|
-
|
|
109
|
+
_g.label = 1;
|
|
110
110
|
case 1:
|
|
111
|
-
|
|
111
|
+
_g.trys.push([1, 3, , 4]);
|
|
112
112
|
logger.info("[SolanaDeposit] Executing nordUser.deposit()...");
|
|
113
113
|
return [4 /*yield*/, nordUser.deposit({
|
|
114
114
|
amount: normalizedAmount,
|
|
115
115
|
tokenId: usdcToken.tokenId,
|
|
116
116
|
})];
|
|
117
117
|
case 2:
|
|
118
|
-
depositResponse =
|
|
118
|
+
depositResponse = _g.sent();
|
|
119
119
|
logger.info("[SolanaDeposit] nordUser.deposit() completed", {
|
|
120
120
|
responseType: typeof depositResponse,
|
|
121
121
|
isString: typeof depositResponse === 'string',
|
|
@@ -135,7 +135,7 @@ export var useSolanaDeposit = function (_a) {
|
|
|
135
135
|
if ('rawTx' in depositResponse && typeof depositResponse.rawTx === 'string') {
|
|
136
136
|
serializedTx = depositResponse.rawTx;
|
|
137
137
|
logger.info("[SolanaDeposit] Got serialized transaction", {
|
|
138
|
-
rawTxLength: (
|
|
138
|
+
rawTxLength: (_e = serializedTx === null || serializedTx === void 0 ? void 0 : serializedTx.length) !== null && _e !== void 0 ? _e : 0
|
|
139
139
|
});
|
|
140
140
|
}
|
|
141
141
|
}
|
|
@@ -145,7 +145,7 @@ export var useSolanaDeposit = function (_a) {
|
|
|
145
145
|
}
|
|
146
146
|
return [3 /*break*/, 4];
|
|
147
147
|
case 3:
|
|
148
|
-
depositError_1 =
|
|
148
|
+
depositError_1 = _g.sent();
|
|
149
149
|
logger.error("[SolanaDeposit] nordUser.deposit() threw error", {
|
|
150
150
|
error: depositError_1 instanceof Error ? depositError_1.message : String(depositError_1),
|
|
151
151
|
errorName: depositError_1 instanceof Error ? depositError_1.name : typeof depositError_1,
|
|
@@ -162,18 +162,18 @@ export var useSolanaDeposit = function (_a) {
|
|
|
162
162
|
case 4: return [3 /*break*/, 6];
|
|
163
163
|
case 5:
|
|
164
164
|
logger.warn("[SolanaDeposit] nordUser.deposit is not a function, skipping");
|
|
165
|
-
|
|
165
|
+
_g.label = 6;
|
|
166
166
|
case 6:
|
|
167
167
|
if (!!txId) return [3 /*break*/, 10];
|
|
168
168
|
logger.info("[SolanaDeposit] No txId from deposit, trying depositSpl fallback...", {
|
|
169
169
|
hasDepositSpl: typeof (nordUser === null || nordUser === void 0 ? void 0 : nordUser.depositSpl) === 'function',
|
|
170
170
|
});
|
|
171
|
-
|
|
171
|
+
_g.label = 7;
|
|
172
172
|
case 7:
|
|
173
|
-
|
|
173
|
+
_g.trys.push([7, 9, , 10]);
|
|
174
174
|
return [4 /*yield*/, (nordUser === null || nordUser === void 0 ? void 0 : nordUser.depositSpl(normalizedAmount, usdcToken.tokenId))];
|
|
175
175
|
case 8:
|
|
176
|
-
splTx =
|
|
176
|
+
splTx = _g.sent();
|
|
177
177
|
logger.info("[SolanaDeposit] depositSpl() completed", {
|
|
178
178
|
responseType: typeof splTx,
|
|
179
179
|
isString: typeof splTx === 'string',
|
|
@@ -189,13 +189,13 @@ export var useSolanaDeposit = function (_a) {
|
|
|
189
189
|
if ('rawTx' in splTx && typeof splTx.rawTx === 'string') {
|
|
190
190
|
serializedTx = splTx.rawTx;
|
|
191
191
|
logger.info("[SolanaDeposit] Got serialized transaction from depositSpl", {
|
|
192
|
-
rawTxLength: (
|
|
192
|
+
rawTxLength: (_f = serializedTx === null || serializedTx === void 0 ? void 0 : serializedTx.length) !== null && _f !== void 0 ? _f : 0
|
|
193
193
|
});
|
|
194
194
|
}
|
|
195
195
|
}
|
|
196
196
|
return [3 /*break*/, 10];
|
|
197
197
|
case 9:
|
|
198
|
-
splError_1 =
|
|
198
|
+
splError_1 = _g.sent();
|
|
199
199
|
logger.error("[SolanaDeposit] depositSpl() threw error", {
|
|
200
200
|
error: splError_1 instanceof Error ? splError_1.message : String(splError_1),
|
|
201
201
|
errorName: splError_1 instanceof Error ? splError_1.name : typeof splError_1,
|
|
@@ -228,7 +228,7 @@ export var useSolanaDeposit = function (_a) {
|
|
|
228
228
|
logger.info("[SolanaDeposit] Waiting for transaction slot...", { txId: txId.slice(0, 16) + '...' });
|
|
229
229
|
return [4 /*yield*/, waitForTransactionSlot(solanaConnection, txId)];
|
|
230
230
|
case 11:
|
|
231
|
-
slot =
|
|
231
|
+
slot = _g.sent();
|
|
232
232
|
logger.info("[SolanaDeposit] Transaction slot confirmed", { slot: slot });
|
|
233
233
|
logger.info("[SolanaDeposit] Waiting for deposit event index...", {
|
|
234
234
|
recipient: recipientKey.toBase58().slice(0, 8) + '...',
|
|
@@ -236,7 +236,7 @@ export var useSolanaDeposit = function (_a) {
|
|
|
236
236
|
});
|
|
237
237
|
return [4 /*yield*/, waitForDepositEventIndex(protonClient, recipientKey, slot)];
|
|
238
238
|
case 12:
|
|
239
|
-
eventIndex =
|
|
239
|
+
eventIndex = _g.sent();
|
|
240
240
|
logger.info("[SolanaDeposit] Deposit event index found", { eventIndex: eventIndex });
|
|
241
241
|
setDepositProgressPhase('nord');
|
|
242
242
|
workingState = advancePendingDeposit(workingState, {
|
|
@@ -248,7 +248,7 @@ export var useSolanaDeposit = function (_a) {
|
|
|
248
248
|
logger.info("[SolanaDeposit] Waiting for Nord acknowledgement...", { eventIndex: eventIndex });
|
|
249
249
|
return [4 /*yield*/, waitForNordAcknowledgement(nord, eventIndex)];
|
|
250
250
|
case 13:
|
|
251
|
-
|
|
251
|
+
_g.sent();
|
|
252
252
|
logger.info("[SolanaDeposit] Nord acknowledgement received successfully");
|
|
253
253
|
return [2 /*return*/, { txId: txId, workingState: workingState, solanaTx: serializedTx }];
|
|
254
254
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSolanaDeposit.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/hooks/useSolanaDeposit.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback } from 'react';\nimport { PublicKey } from '@solana/web3.js';\nimport { useN1WalletContext } from '../../../hooks';\nimport { useNetwork } from '../../../providers/N1WalletProvider/NetworkProvider';\nimport { useSession } from '../../../providers/N1WalletProvider/SessionProvider';\nimport { advancePendingDeposit, createPendingDepositDraft } from '../utils/deposit/storage';\nimport {\n waitForDepositEventIndex,\n waitForNordAcknowledgement,\n waitForTransactionSlot,\n} from '../utils/deposit/solanaUtils';\nimport { ProtonClientLike, SolanaConnectionLike } from '../types';\nimport { useWalletConnection } from '../providers/WalletConnectionProvider';\nimport { logger } from '../../../utils/logger';\nimport { createDepositError } from '../../../utils/errors';\nimport { NORD_USDC_TOKEN_ID } from '../constants/withdrawal';\n\ninterface UseSolanaDepositProps {\n setDepositProgressPhase: (phase: 'bridge' | 'solana' | 'nord') => void;\n ensurePendingDraft: (amount: string) => ReturnType<typeof createPendingDepositDraft>;\n}\n\nexport const useSolanaDeposit = ({\n setDepositProgressPhase,\n ensurePendingDraft,\n}: UseSolanaDepositProps) => {\n // Use new providers for address and nordUser\n const { solanaAddress } = useNetwork();\n const { nordUser } = useSession();\n // nord client still comes from legacy context (passed as prop)\n const { nord } = useN1WalletContext();\n\n const { turnkeyAddress } = useWalletConnection();\n\n const runSolanaDeposit = useCallback(\n async (draftAmount: string, pendingState?: ReturnType<typeof createPendingDepositDraft> | null) => {\n logger.info(\"[SolanaDeposit] runSolanaDeposit called\", {\n draftAmount,\n hasPendingState: !!pendingState,\n });\n\n if (!nord || !nordUser) {\n logger.logError(createDepositError('SOLANA_TX_FAILED', 'Nord client/session not available'));\n throw new Error('Nord client/session not available for Solana deposit');\n }\n setDepositProgressPhase('solana');\n let workingState = pendingState ?? ensurePendingDraft(draftAmount);\n\n const normalizedAmount = parseFloat(draftAmount);\n let txId: string | null = null;\n let serializedTx: string | null = null;\n\n const protonClient = nord?.protonClient as ProtonClientLike | undefined;\n const solanaConnection = nord?.solanaConnection as SolanaConnectionLike | undefined;\n\n if (!protonClient || !solanaConnection) {\n logger.logError(createDepositError('SOLANA_TX_FAILED', 'Missing Solana or Proton configuration'));\n throw new Error('Nord client is missing Solana or Proton configuration. Verify your Nord deployment.');\n }\n\n const solanaRecipient = solanaAddress || turnkeyAddress;\n if (!solanaRecipient) {\n logger.logError(createDepositError('SOLANA_TX_FAILED', 'Solana recipient unavailable'));\n throw new Error('Solana recipient is unavailable. Wait for Turnkey to finish provisioning.');\n }\n const recipientKey = new PublicKey(solanaRecipient);\n\n const usdcToken = Array.isArray(nord?.tokens)\n ? nord?.tokens.find((t: any) => t.tokenId === NORD_USDC_TOKEN_ID) || nord?.tokens[0]\n : null;\n\n if (!usdcToken) {\n throw new Error('Nord token configuration is missing USDC. Verify your Nord deployment.');\n }\n\n setDepositProgressPhase('solana');\n // Check if this is a CCTP bridge flow (tx already has EVM hash starting with 0x)\n // If so, don't overwrite tx - only update mintTx later\n const isBridgeFlow = workingState.tx?.startsWith('0x') ?? false;\n workingState = advancePendingDeposit(workingState, {\n stage: 'solana_submitted',\n // For bridge flows, preserve the EVM tx hash; for native Solana, use the Solana txId\n tx: isBridgeFlow ? workingState.tx : (txId ?? workingState.tx ?? null),\n });\n\n logger.info(\"[SolanaDeposit] Calling nordUser.deposit...\", {\n normalizedAmount,\n tokenId: usdcToken.tokenId,\n tokenSymbol: usdcToken.symbol,\n recipient: solanaRecipient.slice(0, 8) + '...',\n hasNordUser: !!nordUser,\n hasDepositFunction: typeof nordUser?.deposit === 'function',\n });\n\n // Try primary deposit method\n if (typeof nordUser?.deposit === 'function') {\n try {\n logger.info(\"[SolanaDeposit] Executing nordUser.deposit()...\");\n const depositResponse = await nordUser.deposit({\n amount: normalizedAmount,\n tokenId: usdcToken.tokenId,\n });\n\n logger.info(\"[SolanaDeposit] nordUser.deposit() completed\", {\n responseType: typeof depositResponse,\n isString: typeof depositResponse === 'string',\n isObject: typeof depositResponse === 'object',\n hasSignature: depositResponse && typeof depositResponse === 'object' && 'signature' in depositResponse,\n });\n\n if (depositResponse) {\n if (typeof depositResponse === 'string') {\n txId = depositResponse;\n logger.info(\"[SolanaDeposit] Got txId from deposit (string)\", { txId: txId.slice(0, 16) + '...' });\n } else if (\n typeof depositResponse === 'object' &&\n 'signature' in depositResponse &&\n typeof depositResponse.signature === 'string'\n ) {\n txId = depositResponse.signature;\n logger.info(\"[SolanaDeposit] Got txId from deposit (object.signature)\", { txId: txId?.slice(0, 16) + '...' || 'unknown' });\n if ('rawTx' in depositResponse && typeof depositResponse.rawTx === 'string') {\n serializedTx = depositResponse.rawTx;\n logger.info(\"[SolanaDeposit] Got serialized transaction\", {\n rawTxLength: serializedTx?.length ?? 0\n });\n }\n }\n } else {\n logger.warn(\"[SolanaDeposit] nordUser.deposit() returned empty response\");\n }\n } catch (depositError) {\n logger.error(\"[SolanaDeposit] nordUser.deposit() threw error\", {\n error: depositError instanceof Error ? depositError.message : String(depositError),\n errorName: depositError instanceof Error ? depositError.name : typeof depositError,\n stack: depositError instanceof Error ? depositError.stack : undefined,\n // Try to extract more details from NordError\n cause: (depositError as any)?.cause,\n code: (depositError as any)?.code,\n details: (depositError as any)?.details,\n originalError: (depositError as any)?.error,\n // Full error object for inspection\n fullError: JSON.stringify(depositError, Object.getOwnPropertyNames(depositError)),\n });\n throw depositError;\n }\n } else {\n logger.warn(\"[SolanaDeposit] nordUser.deposit is not a function, skipping\");\n }\n\n // Fallback to depositSpl if primary failed or returned nothing\n if (!txId) {\n logger.info(\"[SolanaDeposit] No txId from deposit, trying depositSpl fallback...\", {\n hasDepositSpl: typeof nordUser?.depositSpl === 'function',\n });\n\n try {\n const splTx = await nordUser?.depositSpl(normalizedAmount, usdcToken.tokenId);\n\n logger.info(\"[SolanaDeposit] depositSpl() completed\", {\n responseType: typeof splTx,\n isString: typeof splTx === 'string',\n isObject: typeof splTx === 'object',\n });\n\n if (typeof splTx === 'string') {\n txId = splTx;\n logger.info(\"[SolanaDeposit] Got txId from depositSpl (string)\", { txId: txId?.slice(0, 16) + '...' || 'unknown' });\n } else if (splTx && typeof splTx === 'object' && 'signature' in splTx && typeof splTx.signature === 'string') {\n txId = splTx.signature;\n logger.info(\"[SolanaDeposit] Got txId from depositSpl (object.signature)\", { txId: txId?.slice(0, 16) + '...' || 'unknown' });\n if ('rawTx' in splTx && typeof splTx.rawTx === 'string') {\n serializedTx = splTx.rawTx;\n logger.info(\"[SolanaDeposit] Got serialized transaction from depositSpl\", {\n rawTxLength: serializedTx?.length ?? 0\n });\n }\n }\n } catch (splError) {\n logger.error(\"[SolanaDeposit] depositSpl() threw error\", {\n error: splError instanceof Error ? splError.message : String(splError),\n errorName: splError instanceof Error ? splError.name : typeof splError,\n stack: splError instanceof Error ? splError.stack : undefined,\n // Try to extract more details from NordError\n cause: (splError as any)?.cause,\n code: (splError as any)?.code,\n details: (splError as any)?.details,\n originalError: (splError as any)?.error,\n // Full error object for inspection\n fullError: JSON.stringify(splError, Object.getOwnPropertyNames(splError)),\n });\n throw splError;\n }\n }\n\n if (!txId) {\n logger.logError(createDepositError('SOLANA_TX_FAILED', 'Failed to get transaction ID'));\n throw new Error('Failed to submit deposit transaction.');\n }\n\n logger.info(\"[SolanaDeposit] Transaction submitted successfully\", {\n txId: txId.slice(0, 16) + '...',\n isBridgeFlow,\n hasSerializedTx: !!serializedTx,\n });\n\n workingState = advancePendingDeposit(workingState, {\n stage: 'solana_submitted',\n // For bridge flows, preserve the EVM tx hash and set mintTx; for native Solana, set tx\n tx: isBridgeFlow ? workingState.tx : txId,\n mintTx: isBridgeFlow ? txId : undefined,\n });\n\n logger.info(\"[SolanaDeposit] Waiting for transaction slot...\", { txId: txId.slice(0, 16) + '...' });\n const slot = await waitForTransactionSlot(solanaConnection, txId);\n logger.info(\"[SolanaDeposit] Transaction slot confirmed\", { slot });\n\n logger.info(\"[SolanaDeposit] Waiting for deposit event index...\", {\n recipient: recipientKey.toBase58().slice(0, 8) + '...',\n slot,\n });\n const eventIndex = await waitForDepositEventIndex(\n protonClient,\n recipientKey,\n slot\n );\n logger.info(\"[SolanaDeposit] Deposit event index found\", { eventIndex });\n\n setDepositProgressPhase('nord');\n workingState = advancePendingDeposit(workingState, {\n stage: 'solana_confirmed',\n // For bridge flows, preserve the EVM tx hash and set mintTx; for native Solana, set tx\n tx: isBridgeFlow ? workingState.tx : txId,\n mintTx: isBridgeFlow ? txId : undefined,\n });\n\n logger.info(\"[SolanaDeposit] Waiting for Nord acknowledgement...\", { eventIndex });\n await waitForNordAcknowledgement(nord!, eventIndex);\n logger.info(\"[SolanaDeposit] Nord acknowledgement received successfully\");\n\n return { txId, workingState, solanaTx: serializedTx };\n },\n [solanaAddress, turnkeyAddress, ensurePendingDraft, nord, nordUser, setDepositProgressPhase]\n );\n\n return {\n runSolanaDeposit,\n };\n};\n\n"]}
|
|
1
|
+
{"version":3,"file":"useSolanaDeposit.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/hooks/useSolanaDeposit.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback } from 'react';\nimport { PublicKey } from '@solana/web3.js';\nimport { useN1WalletContext } from '../../../hooks';\nimport { useNetwork } from '../../../providers/N1WalletProvider/NetworkProvider';\nimport { useSession } from '../../../providers/N1WalletProvider/SessionProvider';\nimport { advancePendingDeposit, createPendingDepositDraft } from '../utils/deposit/storage';\nimport {\n waitForDepositEventIndex,\n waitForNordAcknowledgement,\n waitForTransactionSlot,\n} from '../utils/deposit/solanaUtils';\nimport { ProtonClientLike, SolanaConnectionLike } from '../types';\nimport { useWalletConnection } from '../providers/WalletConnectionProvider';\nimport { logger } from '../../../utils/logger';\nimport { createDepositError } from '../../../utils/errors';\nimport { NORD_USDC_TOKEN_ID } from '../constants/withdrawal';\n\ninterface UseSolanaDepositProps {\n setDepositProgressPhase: (phase: 'bridge' | 'solana' | 'nord') => void;\n ensurePendingDraft: (amount: string) => ReturnType<typeof createPendingDepositDraft>;\n}\n\nexport const useSolanaDeposit = ({\n setDepositProgressPhase,\n ensurePendingDraft,\n}: UseSolanaDepositProps) => {\n // Use new providers for address and nordUser\n const { solanaAddress } = useNetwork();\n const { nordUser } = useSession();\n // nord client still comes from legacy context (passed as prop)\n const { nord } = useN1WalletContext();\n\n const { turnkeyAddress } = useWalletConnection();\n\n const runSolanaDeposit = useCallback(\n async (draftAmount: string, pendingState?: ReturnType<typeof createPendingDepositDraft> | null) => {\n logger.info(\"[SolanaDeposit] runSolanaDeposit called\", {\n draftAmount,\n hasPendingState: !!pendingState,\n });\n\n if (!nord || !nordUser) {\n logger.logError(createDepositError('SOLANA_TX_FAILED', 'Nord client/session not available'));\n throw new Error('Nord client/session not available for Solana deposit');\n }\n setDepositProgressPhase('solana');\n let workingState = pendingState ?? ensurePendingDraft(draftAmount);\n\n const normalizedAmount = parseFloat(draftAmount);\n let txId: string | null = null;\n let serializedTx: string | null = null;\n\n const protonClient = nord?.protonClient as ProtonClientLike | undefined;\n const solanaConnection = nord?.solanaConnection as SolanaConnectionLike | undefined;\n\n if (!protonClient || !solanaConnection) {\n logger.logError(createDepositError('SOLANA_TX_FAILED', 'Missing Solana or Proton configuration'));\n throw new Error('Nord client is missing Solana or Proton configuration. Verify your Nord deployment.');\n }\n\n const solanaRecipient = solanaAddress || turnkeyAddress;\n if (!solanaRecipient) {\n logger.logError(createDepositError('SOLANA_TX_FAILED', 'Solana recipient unavailable'));\n throw new Error('Solana recipient is unavailable. Wait for Turnkey to finish provisioning.');\n }\n const recipientKey = new PublicKey(solanaRecipient);\n\n const usdcToken = Array.isArray(nord?.tokens)\n ? nord?.tokens.find((t: any) => t.tokenId === NORD_USDC_TOKEN_ID) ?? null\n : null;\n\n if (!usdcToken) {\n throw new Error('Nord token configuration is missing USDC. Verify your Nord deployment.');\n }\n\n setDepositProgressPhase('solana');\n // Check if this is a CCTP bridge flow (tx already has EVM hash starting with 0x)\n // If so, don't overwrite tx - only update mintTx later\n const isBridgeFlow = workingState.tx?.startsWith('0x') ?? false;\n workingState = advancePendingDeposit(workingState, {\n stage: 'solana_submitted',\n // For bridge flows, preserve the EVM tx hash; for native Solana, use the Solana txId\n tx: isBridgeFlow ? workingState.tx : (txId ?? workingState.tx ?? null),\n });\n\n logger.info(\"[SolanaDeposit] Calling nordUser.deposit...\", {\n normalizedAmount,\n tokenId: usdcToken.tokenId,\n tokenSymbol: usdcToken.symbol,\n recipient: solanaRecipient.slice(0, 8) + '...',\n hasNordUser: !!nordUser,\n hasDepositFunction: typeof nordUser?.deposit === 'function',\n });\n\n // Try primary deposit method\n if (typeof nordUser?.deposit === 'function') {\n try {\n logger.info(\"[SolanaDeposit] Executing nordUser.deposit()...\");\n const depositResponse = await nordUser.deposit({\n amount: normalizedAmount,\n tokenId: usdcToken.tokenId,\n });\n\n logger.info(\"[SolanaDeposit] nordUser.deposit() completed\", {\n responseType: typeof depositResponse,\n isString: typeof depositResponse === 'string',\n isObject: typeof depositResponse === 'object',\n hasSignature: depositResponse && typeof depositResponse === 'object' && 'signature' in depositResponse,\n });\n\n if (depositResponse) {\n if (typeof depositResponse === 'string') {\n txId = depositResponse;\n logger.info(\"[SolanaDeposit] Got txId from deposit (string)\", { txId: txId.slice(0, 16) + '...' });\n } else if (\n typeof depositResponse === 'object' &&\n 'signature' in depositResponse &&\n typeof depositResponse.signature === 'string'\n ) {\n txId = depositResponse.signature;\n logger.info(\"[SolanaDeposit] Got txId from deposit (object.signature)\", { txId: txId?.slice(0, 16) + '...' || 'unknown' });\n if ('rawTx' in depositResponse && typeof depositResponse.rawTx === 'string') {\n serializedTx = depositResponse.rawTx;\n logger.info(\"[SolanaDeposit] Got serialized transaction\", {\n rawTxLength: serializedTx?.length ?? 0\n });\n }\n }\n } else {\n logger.warn(\"[SolanaDeposit] nordUser.deposit() returned empty response\");\n }\n } catch (depositError) {\n logger.error(\"[SolanaDeposit] nordUser.deposit() threw error\", {\n error: depositError instanceof Error ? depositError.message : String(depositError),\n errorName: depositError instanceof Error ? depositError.name : typeof depositError,\n stack: depositError instanceof Error ? depositError.stack : undefined,\n // Try to extract more details from NordError\n cause: (depositError as any)?.cause,\n code: (depositError as any)?.code,\n details: (depositError as any)?.details,\n originalError: (depositError as any)?.error,\n // Full error object for inspection\n fullError: JSON.stringify(depositError, Object.getOwnPropertyNames(depositError)),\n });\n throw depositError;\n }\n } else {\n logger.warn(\"[SolanaDeposit] nordUser.deposit is not a function, skipping\");\n }\n\n // Fallback to depositSpl if primary failed or returned nothing\n if (!txId) {\n logger.info(\"[SolanaDeposit] No txId from deposit, trying depositSpl fallback...\", {\n hasDepositSpl: typeof nordUser?.depositSpl === 'function',\n });\n\n try {\n const splTx = await nordUser?.depositSpl(normalizedAmount, usdcToken.tokenId);\n\n logger.info(\"[SolanaDeposit] depositSpl() completed\", {\n responseType: typeof splTx,\n isString: typeof splTx === 'string',\n isObject: typeof splTx === 'object',\n });\n\n if (typeof splTx === 'string') {\n txId = splTx;\n logger.info(\"[SolanaDeposit] Got txId from depositSpl (string)\", { txId: txId?.slice(0, 16) + '...' || 'unknown' });\n } else if (splTx && typeof splTx === 'object' && 'signature' in splTx && typeof splTx.signature === 'string') {\n txId = splTx.signature;\n logger.info(\"[SolanaDeposit] Got txId from depositSpl (object.signature)\", { txId: txId?.slice(0, 16) + '...' || 'unknown' });\n if ('rawTx' in splTx && typeof splTx.rawTx === 'string') {\n serializedTx = splTx.rawTx;\n logger.info(\"[SolanaDeposit] Got serialized transaction from depositSpl\", {\n rawTxLength: serializedTx?.length ?? 0\n });\n }\n }\n } catch (splError) {\n logger.error(\"[SolanaDeposit] depositSpl() threw error\", {\n error: splError instanceof Error ? splError.message : String(splError),\n errorName: splError instanceof Error ? splError.name : typeof splError,\n stack: splError instanceof Error ? splError.stack : undefined,\n // Try to extract more details from NordError\n cause: (splError as any)?.cause,\n code: (splError as any)?.code,\n details: (splError as any)?.details,\n originalError: (splError as any)?.error,\n // Full error object for inspection\n fullError: JSON.stringify(splError, Object.getOwnPropertyNames(splError)),\n });\n throw splError;\n }\n }\n\n if (!txId) {\n logger.logError(createDepositError('SOLANA_TX_FAILED', 'Failed to get transaction ID'));\n throw new Error('Failed to submit deposit transaction.');\n }\n\n logger.info(\"[SolanaDeposit] Transaction submitted successfully\", {\n txId: txId.slice(0, 16) + '...',\n isBridgeFlow,\n hasSerializedTx: !!serializedTx,\n });\n\n workingState = advancePendingDeposit(workingState, {\n stage: 'solana_submitted',\n // For bridge flows, preserve the EVM tx hash and set mintTx; for native Solana, set tx\n tx: isBridgeFlow ? workingState.tx : txId,\n mintTx: isBridgeFlow ? txId : undefined,\n });\n\n logger.info(\"[SolanaDeposit] Waiting for transaction slot...\", { txId: txId.slice(0, 16) + '...' });\n const slot = await waitForTransactionSlot(solanaConnection, txId);\n logger.info(\"[SolanaDeposit] Transaction slot confirmed\", { slot });\n\n logger.info(\"[SolanaDeposit] Waiting for deposit event index...\", {\n recipient: recipientKey.toBase58().slice(0, 8) + '...',\n slot,\n });\n const eventIndex = await waitForDepositEventIndex(\n protonClient,\n recipientKey,\n slot\n );\n logger.info(\"[SolanaDeposit] Deposit event index found\", { eventIndex });\n\n setDepositProgressPhase('nord');\n workingState = advancePendingDeposit(workingState, {\n stage: 'solana_confirmed',\n // For bridge flows, preserve the EVM tx hash and set mintTx; for native Solana, set tx\n tx: isBridgeFlow ? workingState.tx : txId,\n mintTx: isBridgeFlow ? txId : undefined,\n });\n\n logger.info(\"[SolanaDeposit] Waiting for Nord acknowledgement...\", { eventIndex });\n await waitForNordAcknowledgement(nord!, eventIndex);\n logger.info(\"[SolanaDeposit] Nord acknowledgement received successfully\");\n\n return { txId, workingState, solanaTx: serializedTx };\n },\n [solanaAddress, turnkeyAddress, ensurePendingDraft, nord, nordUser, setDepositProgressPhase]\n );\n\n return {\n runSolanaDeposit,\n };\n};\n\n"]}
|