@n1xyz/wallet-widget 0.0.15 → 0.0.17
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/Logic/utils.d.ts +3 -1
- package/dist/Logic/utils.js +16 -2
- package/dist/Logic/utils.js.map +1 -1
- package/dist/Modal/N1WalletModal.d.ts +1 -0
- package/dist/Modal/N1WalletModal.js +1 -0
- package/dist/Modal/N1WalletModal.js.map +1 -1
- package/dist/Modal/NTSFlow/views/CreateSessionView.js +1 -0
- package/dist/Modal/NTSFlow/views/CreateSessionView.js.map +1 -1
- package/dist/Modal/NordFlow/screens/04-AmountInputScreen.js +1 -1
- package/dist/Modal/NordFlow/screens/04-AmountInputScreen.js.map +1 -1
- package/dist/Modal/NordFlow/screens/08-FinalSuccessScreen.d.ts +1 -1
- package/dist/Modal/NordFlow/screens/08-FinalSuccessScreen.js +14 -12
- package/dist/Modal/NordFlow/screens/08-FinalSuccessScreen.js.map +1 -1
- package/dist/Provider/N1WalletProvider.d.ts +1 -1
- package/dist/Provider/N1WalletProvider.js +65 -37
- package/dist/Provider/N1WalletProvider.js.map +1 -1
- package/dist/Provider/hooks/useNordUserInitialization.js +33 -37
- package/dist/Provider/hooks/useNordUserInitialization.js.map +1 -1
- package/dist/Provider/types.d.ts +13 -0
- package/dist/Provider/types.js.map +1 -1
- package/dist/embedded-main-css.d.ts +2 -0
- package/dist/embedded-main-css.js +3 -0
- package/dist/embedded-main-css.js.map +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/main.css +1 -1
- package/package.json +7 -4
- package/dist/Modal/NordFlow/context/deposit/types.d.ts +0 -26
- package/dist/Modal/NordFlow/context/deposit/types.js +0 -2
- package/dist/Modal/NordFlow/context/deposit/types.js.map +0 -1
- package/dist/Modal/NordFlow/context/deposit/useDepositAuth.d.ts +0 -7
- package/dist/Modal/NordFlow/context/deposit/useDepositAuth.js +0 -113
- package/dist/Modal/NordFlow/context/deposit/useDepositAuth.js.map +0 -1
- package/dist/Modal/NordFlow/context/deposit/useDepositTransaction.d.ts +0 -20
- package/dist/Modal/NordFlow/context/deposit/useDepositTransaction.js +0 -235
- package/dist/Modal/NordFlow/context/deposit/useDepositTransaction.js.map +0 -1
- package/dist/Modal/NordFlow/hooks/index.d.ts +0 -3
- package/dist/Modal/NordFlow/hooks/index.js +0 -4
- package/dist/Modal/NordFlow/hooks/index.js.map +0 -1
- package/dist/Modal/NordFlow/hooks/useDepositFlow.d.ts +0 -52
- package/dist/Modal/NordFlow/hooks/useDepositFlow.js +0 -385
- package/dist/Modal/NordFlow/hooks/useDepositFlow.js.map +0 -1
- package/dist/Modal/NordFlow/hooks/useFlowState.d.ts +0 -32
- package/dist/Modal/NordFlow/hooks/useFlowState.js +0 -189
- package/dist/Modal/NordFlow/hooks/useFlowState.js.map +0 -1
- package/dist/Modal/NordFlow/hooks/useInterruptHandler.d.ts +0 -24
- package/dist/Modal/NordFlow/hooks/useInterruptHandler.js +0 -59
- package/dist/Modal/NordFlow/hooks/useInterruptHandler.js.map +0 -1
- package/dist/Modal/NordFlow/hooks/useNordInstance.d.ts +0 -0
- package/dist/Modal/NordFlow/hooks/useNordInstance.js +0 -3
- package/dist/Modal/NordFlow/hooks/useNordInstance.js.map +0 -1
- package/dist/Modal/NordFlow/hooks/useNordWalletConnect.d.ts +0 -13
- package/dist/Modal/NordFlow/hooks/useNordWalletConnect.js +0 -259
- package/dist/Modal/NordFlow/hooks/useNordWalletConnect.js.map +0 -1
- package/dist/Modal/NordFlow/utils/persistence.d.ts +0 -24
- package/dist/Modal/NordFlow/utils/persistence.js +0 -84
- package/dist/Modal/NordFlow/utils/persistence.js.map +0 -1
- package/dist/Provider/useN1WalletProvider.d.ts +0 -37
- package/dist/Provider/useN1WalletProvider.js +0 -398
- package/dist/Provider/useN1WalletProvider.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useFlowState.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/hooks/useFlowState.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport { FlowContext, FlowState, initialFlowContext } from '../types';\nimport { STATE_TRANSITIONS } from '../constants';\nimport {\n clearStoredState,\n loadStateFromLocalStorage,\n saveStateToLocalStorage,\n} from '../utils/persistence';\nimport { logger } from '../../../utils/logger';\n\n/**\n * Custom hook for managing the wallet connection flow state machine\n * @param options Configuration options\n * @returns Flow state management methods and properties\n */\nexport const useFlowState = (options: {\n /**\n * Whether to automatically recover saved state on initialization\n */\n autoRecover?: boolean;\n /**\n * Callback when state changes\n */\n onStateChange?: (newState: FlowState, prevState: FlowState | null) => void;\n /**\n * Callback when an error occurs\n */\n onError?: (error: Error) => void;\n}) => {\n const { onStateChange, onError } = options;\n\n // Flow state\n const [state, setState] = useState<FlowState>(FlowState.IDLE);\n const [prevState, setPrevState] = useState<FlowState | null>(null);\n const [context, setContext] = useState<FlowContext>(initialFlowContext);\n const [isTransitioning, setIsTransitioning] = useState(false);\n const [isRecoveryAvailable, setIsRecoveryAvailable] = useState(false);\n \n // Use refs to track previous values\n const prevStateRef = useRef<FlowState>(FlowState.IDLE);\n const prevContextRef = useRef<FlowContext>(initialFlowContext);\n\n /**\n * Check if a transition is allowed based on current state and context\n */\n const canTransition = useCallback(\n (targetState: FlowState, contextData: FlowContext): boolean => {\n return STATE_TRANSITIONS.some((transition) => {\n const fromMatches = Array.isArray(transition.from)\n ? transition.from.includes(state)\n : transition.from === state;\n\n if (!fromMatches || transition.to !== targetState) {\n return false;\n }\n\n if (transition.condition) {\n return transition.condition(contextData);\n }\n\n return true;\n });\n },\n [state]\n );\n\n /**\n * Transition to a new state if allowed\n */\n const transition = useCallback(\n (\n targetState: FlowState,\n contextUpdates: Partial<FlowContext> = {}\n ): boolean => {\n // Skip if we're already in the target state and no context updates\n if (targetState === state && Object.keys(contextUpdates).length === 0) {\n return true;\n }\n \n if (!canTransition(targetState, { ...context, ...contextUpdates })) {\n logger.warn(\n `Transition from ${state} to ${targetState} is not allowed`\n );\n return false;\n }\n\n setIsTransitioning(true);\n\n // Update context first\n setContext((prevContext) => {\n const newContext = { ...prevContext, ...contextUpdates };\n\n // Save new state and context to localStorage for recovery\n saveStateToLocalStorage(targetState, newContext);\n\n return newContext;\n });\n\n // Then update state\n setPrevState(state);\n prevStateRef.current = state;\n logger.debug(`Transitioning from ${state} to ${targetState}`);\n setState(targetState);\n\n if (onStateChange) {\n onStateChange(targetState, state);\n }\n\n setIsTransitioning(false);\n return true;\n },\n [canTransition, state, context, onStateChange]\n );\n\n /**\n * Reset flow to initial state\n */\n const reset = useCallback(() => {\n clearStoredState();\n setContext(initialFlowContext);\n prevContextRef.current = initialFlowContext;\n setPrevState(null);\n logger.debug('Resetting flow state to IDLE');\n setState(FlowState.IDLE);\n prevStateRef.current = FlowState.IDLE;\n\n if (onStateChange) {\n onStateChange(FlowState.IDLE, state);\n }\n }, [state, onStateChange]);\n\n /**\n * Handle an error by transitioning to error state\n */\n const handleError = useCallback(\n (error: Error) => {\n if (onError) {\n onError(error);\n }\n\n transition(FlowState.ERROR, { error });\n },\n [transition, onError]\n );\n\n /**\n * Recover state from localStorage\n */\n const recover = useCallback((): boolean => {\n const savedState = loadStateFromLocalStorage();\n\n if (!savedState) {\n setIsRecoveryAvailable(false);\n return false;\n }\n\n setContext(savedState.context);\n prevContextRef.current = savedState.context;\n setPrevState(state);\n prevStateRef.current = state;\n logger.debug(`Recovering state: ${savedState.state}`);\n setState(savedState.state);\n\n if (onStateChange) {\n onStateChange(savedState.state, state);\n }\n\n return true;\n }, [state, onStateChange]);\n\n /**\n * Update context without state transition\n */\n const updateContext = useCallback(\n (updates: Partial<FlowContext>) => {\n // Skip if no actual updates\n if (Object.keys(updates).length === 0) {\n return;\n }\n \n setContext((prevContext) => {\n // Check if any values are actually changing\n let hasChanges = false;\n \n // Type-safe way to check for changes\n (Object.keys(updates) as Array<keyof Partial<FlowContext>>).forEach(key => {\n if (updates[key] !== prevContext[key]) {\n hasChanges = true;\n }\n });\n \n // If nothing is changing, return the previous context\n if (!hasChanges) {\n return prevContext;\n }\n \n const newContext = { ...prevContext, ...updates };\n prevContextRef.current = newContext;\n saveStateToLocalStorage(state, newContext);\n return newContext;\n });\n },\n [state]\n );\n\n /**\n * Record an interruption in the flow (e.g., modal close, page reload)\n */\n const recordInterruption = useCallback(() => {\n updateContext({\n lastInterruption: {\n timestamp: Date.now(),\n state,\n context: { ...context },\n },\n });\n }, [state, context, updateContext]);\n\n // Register unload handler to record interruptions\n useEffect(() => {\n const handleBeforeUnload = () => {\n recordInterruption();\n };\n\n window.addEventListener('beforeunload', handleBeforeUnload);\n\n return () => {\n window.removeEventListener('beforeunload', handleBeforeUnload);\n };\n }, [recordInterruption]);\n\n return {\n state,\n prevState,\n context,\n isTransitioning,\n isRecoveryAvailable,\n transition,\n updateContext,\n reset,\n recover,\n recordInterruption,\n handleError,\n };\n};\n"]}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { FlowState } from '../types';
|
|
2
|
-
/**
|
|
3
|
-
* Hook for handling interruptions during the flow
|
|
4
|
-
*
|
|
5
|
-
* @param options Configuration options
|
|
6
|
-
* @returns Interruption handling methods and state
|
|
7
|
-
*/
|
|
8
|
-
export declare const useInterruptHandler: (options: {
|
|
9
|
-
/**
|
|
10
|
-
* Flow state
|
|
11
|
-
*/
|
|
12
|
-
state: FlowState;
|
|
13
|
-
/**
|
|
14
|
-
* Record an interruption
|
|
15
|
-
*/
|
|
16
|
-
recordInterruption: () => void;
|
|
17
|
-
/**
|
|
18
|
-
* Callback to handle modal close
|
|
19
|
-
*/
|
|
20
|
-
onClose?: () => void;
|
|
21
|
-
}) => {
|
|
22
|
-
isClosing: boolean;
|
|
23
|
-
handleCloseRequest: () => true;
|
|
24
|
-
};
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
|
-
/**
|
|
3
|
-
* Hook for handling interruptions during the flow
|
|
4
|
-
*
|
|
5
|
-
* @param options Configuration options
|
|
6
|
-
* @returns Interruption handling methods and state
|
|
7
|
-
*/
|
|
8
|
-
export var useInterruptHandler = function (options) {
|
|
9
|
-
var recordInterruption = options.recordInterruption, onClose = options.onClose;
|
|
10
|
-
// Use ref to track previous state
|
|
11
|
-
var prevStateRef = useRef(options.state);
|
|
12
|
-
var _a = useState(false), isClosing = _a[0], setIsClosing = _a[1];
|
|
13
|
-
/**
|
|
14
|
-
* Handle modal close request
|
|
15
|
-
*/
|
|
16
|
-
var handleCloseRequest = useCallback(function () {
|
|
17
|
-
// Skip if already closing
|
|
18
|
-
if (isClosing) {
|
|
19
|
-
return true;
|
|
20
|
-
}
|
|
21
|
-
// Always proceed with closing
|
|
22
|
-
setIsClosing(true);
|
|
23
|
-
recordInterruption();
|
|
24
|
-
// Delay actual close to allow animation
|
|
25
|
-
setTimeout(function () {
|
|
26
|
-
if (onClose) {
|
|
27
|
-
onClose();
|
|
28
|
-
}
|
|
29
|
-
}, 300);
|
|
30
|
-
return true;
|
|
31
|
-
}, [recordInterruption, onClose, isClosing]);
|
|
32
|
-
/**
|
|
33
|
-
* Handle beforeunload event to record interruptions
|
|
34
|
-
*/
|
|
35
|
-
useEffect(function () {
|
|
36
|
-
var handleBeforeUnload = function () {
|
|
37
|
-
// Record the interruption
|
|
38
|
-
recordInterruption();
|
|
39
|
-
};
|
|
40
|
-
window.addEventListener('beforeunload', handleBeforeUnload);
|
|
41
|
-
return function () {
|
|
42
|
-
window.removeEventListener('beforeunload', handleBeforeUnload);
|
|
43
|
-
};
|
|
44
|
-
}, [recordInterruption]);
|
|
45
|
-
// Track state changes
|
|
46
|
-
useEffect(function () {
|
|
47
|
-
var currentState = options.state;
|
|
48
|
-
var prevState = prevStateRef.current;
|
|
49
|
-
// Update ref if state has changed
|
|
50
|
-
if (currentState !== prevState) {
|
|
51
|
-
prevStateRef.current = currentState;
|
|
52
|
-
}
|
|
53
|
-
}, [options.state]);
|
|
54
|
-
return {
|
|
55
|
-
isClosing: isClosing,
|
|
56
|
-
handleCloseRequest: handleCloseRequest,
|
|
57
|
-
};
|
|
58
|
-
};
|
|
59
|
-
//# sourceMappingURL=useInterruptHandler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useInterruptHandler.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/hooks/useInterruptHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGjE;;;;;GAKG;AACH,MAAM,CAAC,IAAM,mBAAmB,GAAG,UAAC,OAanC;IACS,IAAA,kBAAkB,GAAc,OAAO,mBAArB,EAAE,OAAO,GAAK,OAAO,QAAZ,CAAa;IAEhD,kCAAkC;IAClC,IAAM,YAAY,GAAG,MAAM,CAAY,OAAO,CAAC,KAAK,CAAC,CAAC;IAEhD,IAAA,KAA4B,QAAQ,CAAC,KAAK,CAAC,EAA1C,SAAS,QAAA,EAAE,YAAY,QAAmB,CAAC;IAElD;;OAEG;IACH,IAAM,kBAAkB,GAAG,WAAW,CAAC;QACrC,0BAA0B;QAC1B,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;QAED,8BAA8B;QAC9B,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,kBAAkB,EAAE,CAAC;QAErB,wCAAwC;QACxC,UAAU,CAAC;YACT,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,EAAE,GAAG,CAAC,CAAC;QAER,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,CAAC,kBAAkB,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IAE7C;;OAEG;IACH,SAAS,CAAC;QACR,IAAM,kBAAkB,GAAG;YACzB,0BAA0B;YAC1B,kBAAkB,EAAE,CAAC;QACvB,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QAE5D,OAAO;YACL,MAAM,CAAC,mBAAmB,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QACjE,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAEzB,sBAAsB;IACtB,SAAS,CAAC;QACR,IAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;QACnC,IAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;QAEvC,kCAAkC;QAClC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,YAAY,CAAC,OAAO,GAAG,YAAY,CAAC;QACtC,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAEpB,OAAO;QACL,SAAS,WAAA;QACT,kBAAkB,oBAAA;KACnB,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport { FlowState } from '../types';\n\n/**\n * Hook for handling interruptions during the flow\n *\n * @param options Configuration options\n * @returns Interruption handling methods and state\n */\nexport const useInterruptHandler = (options: {\n /**\n * Flow state\n */\n state: FlowState;\n /**\n * Record an interruption\n */\n recordInterruption: () => void;\n /**\n * Callback to handle modal close\n */\n onClose?: () => void;\n}) => {\n const { recordInterruption, onClose } = options;\n \n // Use ref to track previous state\n const prevStateRef = useRef<FlowState>(options.state);\n\n const [isClosing, setIsClosing] = useState(false);\n\n /**\n * Handle modal close request\n */\n const handleCloseRequest = useCallback(() => {\n // Skip if already closing\n if (isClosing) {\n return true;\n }\n \n // Always proceed with closing\n setIsClosing(true);\n recordInterruption();\n\n // Delay actual close to allow animation\n setTimeout(() => {\n if (onClose) {\n onClose();\n }\n }, 300);\n\n return true;\n }, [recordInterruption, onClose, isClosing]);\n\n /**\n * Handle beforeunload event to record interruptions\n */\n useEffect(() => {\n const handleBeforeUnload = () => {\n // Record the interruption\n recordInterruption();\n };\n\n window.addEventListener('beforeunload', handleBeforeUnload);\n\n return () => {\n window.removeEventListener('beforeunload', handleBeforeUnload);\n };\n }, [recordInterruption]);\n\n // Track state changes\n useEffect(() => {\n const currentState = options.state;\n const prevState = prevStateRef.current;\n \n // Update ref if state has changed\n if (currentState !== prevState) {\n prevStateRef.current = currentState;\n }\n }, [options.state]);\n\n return {\n isClosing,\n handleCloseRequest,\n };\n};\n"]}
|
|
File without changes
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useNordInstance.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/hooks/useNordInstance.ts"],"names":[],"mappings":";AAAA,yCAAyC","sourcesContent":["// Entire file content should be removed.\n"]}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { N1SessionMode } from '../../../Provider/types';
|
|
2
|
-
import { FlowState } from '../types';
|
|
3
|
-
/**
|
|
4
|
-
* Hook for handling wallet connection
|
|
5
|
-
*
|
|
6
|
-
* @param options Configuration options
|
|
7
|
-
* @returns Wallet connection methods and state
|
|
8
|
-
*/
|
|
9
|
-
export declare const useNordWalletConnect: (state: FlowState, transition: (newState: FlowState, contextUpdates?: Partial<any>) => void, context: any, updateContext: (updates: Partial<any>) => void, sessionMode?: N1SessionMode) => {
|
|
10
|
-
isConnecting: boolean;
|
|
11
|
-
connectWallet: () => Promise<void>;
|
|
12
|
-
disconnectWallet: () => void;
|
|
13
|
-
};
|
|
@@ -1,259 +0,0 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
12
|
-
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
-
function step(op) {
|
|
15
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
-
switch (op[0]) {
|
|
20
|
-
case 0: case 1: t = op; break;
|
|
21
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
-
default:
|
|
25
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
-
if (t[2]) _.ops.pop();
|
|
30
|
-
_.trys.pop(); continue;
|
|
31
|
-
}
|
|
32
|
-
op = body.call(thisArg, _);
|
|
33
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
import { useCallback, useEffect, useState, useRef } from 'react';
|
|
38
|
-
import { useN1WalletContext, useN1WalletInternalContext, } from '../../../Provider/hooks';
|
|
39
|
-
import { N1SessionMode } from '../../../Provider/types';
|
|
40
|
-
import { logger } from '../../../utils/logger';
|
|
41
|
-
import { FlowState } from '../types';
|
|
42
|
-
/**
|
|
43
|
-
* Hook for handling wallet connection
|
|
44
|
-
*
|
|
45
|
-
* @param options Configuration options
|
|
46
|
-
* @returns Wallet connection methods and state
|
|
47
|
-
*/
|
|
48
|
-
export var useNordWalletConnect = function (state, transition, context, updateContext, sessionMode) {
|
|
49
|
-
var _a = useN1WalletContext(), nord = _a.nord, nordUser = _a.nordUser;
|
|
50
|
-
var _b = useN1WalletInternalContext(), showDynamicWidget = _b.showDynamicWidget, dynamicWallet = _b.dynamicWallet, setIsConnected = _b.setIsConnected;
|
|
51
|
-
var _c = useState(false), isConnecting = _c[0], setIsConnecting = _c[1];
|
|
52
|
-
var _d = useState(context.walletType), walletType = _d[0], setWalletType = _d[1];
|
|
53
|
-
var _e = useState(false), hasProcessedWallet = _e[0], setHasProcessedWallet = _e[1];
|
|
54
|
-
// Use refs to track previous values
|
|
55
|
-
var processedWalletAddressRef = useRef(null);
|
|
56
|
-
var prevNordUserRef = useRef(nordUser);
|
|
57
|
-
var prevDynamicWalletRef = useRef(dynamicWallet);
|
|
58
|
-
var prevStateRef = useRef(state);
|
|
59
|
-
/**
|
|
60
|
-
* Determine wallet type from Dynamic wallet
|
|
61
|
-
*/
|
|
62
|
-
var determineWalletType = useCallback(function () {
|
|
63
|
-
var _a, _b;
|
|
64
|
-
if (!dynamicWallet)
|
|
65
|
-
return null;
|
|
66
|
-
// Check wallet connector id to determine if it's ethereum or solana
|
|
67
|
-
var connectorId = ((_b = (_a = dynamicWallet.connector) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.toLowerCase()) || '';
|
|
68
|
-
if (connectorId.includes('solana') || connectorId.includes('phantom')) {
|
|
69
|
-
return 'solana';
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
// Default to ethereum for most other wallets
|
|
73
|
-
return 'ethereum';
|
|
74
|
-
}
|
|
75
|
-
}, [dynamicWallet]);
|
|
76
|
-
/**
|
|
77
|
-
* Connect wallet using Dynamic widget
|
|
78
|
-
*/
|
|
79
|
-
var connectWallet = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
80
|
-
var error_1;
|
|
81
|
-
return __generator(this, function (_a) {
|
|
82
|
-
switch (_a.label) {
|
|
83
|
-
case 0:
|
|
84
|
-
if (isConnecting || !showDynamicWidget)
|
|
85
|
-
return [2 /*return*/];
|
|
86
|
-
setIsConnecting(true);
|
|
87
|
-
setHasProcessedWallet(false);
|
|
88
|
-
logger.debug('Starting wallet connection process');
|
|
89
|
-
_a.label = 1;
|
|
90
|
-
case 1:
|
|
91
|
-
_a.trys.push([1, 4, , 5]);
|
|
92
|
-
// Show Dynamic widget to connect wallet
|
|
93
|
-
return [4 /*yield*/, disconnectWallet()];
|
|
94
|
-
case 2:
|
|
95
|
-
// Show Dynamic widget to connect wallet
|
|
96
|
-
_a.sent();
|
|
97
|
-
return [4 /*yield*/, showDynamicWidget(true)];
|
|
98
|
-
case 3:
|
|
99
|
-
_a.sent();
|
|
100
|
-
logger.debug('Dynamic widget shown');
|
|
101
|
-
return [3 /*break*/, 5];
|
|
102
|
-
case 4:
|
|
103
|
-
error_1 = _a.sent();
|
|
104
|
-
setIsConnecting(false);
|
|
105
|
-
updateContext({ walletType: null });
|
|
106
|
-
logger.error('Error showing Dynamic widget:', error_1);
|
|
107
|
-
return [3 /*break*/, 5];
|
|
108
|
-
case 5: return [2 /*return*/];
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
}); }, [isConnecting, showDynamicWidget, updateContext]);
|
|
112
|
-
/**
|
|
113
|
-
* Disconnect wallet
|
|
114
|
-
*/
|
|
115
|
-
var disconnectWallet = useCallback(function () {
|
|
116
|
-
logger.debug('Disconnecting wallet');
|
|
117
|
-
setWalletType(null);
|
|
118
|
-
setHasProcessedWallet(false);
|
|
119
|
-
processedWalletAddressRef.current = null;
|
|
120
|
-
updateContext({ walletType: null });
|
|
121
|
-
}, [updateContext]);
|
|
122
|
-
// Process nordUser changes
|
|
123
|
-
useEffect(function () {
|
|
124
|
-
var currentNordUser = nordUser;
|
|
125
|
-
var prevNordUser = prevNordUserRef.current;
|
|
126
|
-
// Only run if nordUser has changed and we have processed a wallet
|
|
127
|
-
if (hasProcessedWallet && currentNordUser && currentNordUser !== prevNordUser) {
|
|
128
|
-
logger.debug('NordUser changed, checking account status');
|
|
129
|
-
(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
130
|
-
var hasNordAccount_1, sessionId, hasActiveSession_1, transitionDestination_1, error_2;
|
|
131
|
-
return __generator(this, function (_a) {
|
|
132
|
-
switch (_a.label) {
|
|
133
|
-
case 0:
|
|
134
|
-
_a.trys.push([0, 2, , 3]);
|
|
135
|
-
if (!dynamicWallet || !nord)
|
|
136
|
-
return [2 /*return*/];
|
|
137
|
-
return [4 /*yield*/, nord.accountExists(dynamicWallet.address)];
|
|
138
|
-
case 1:
|
|
139
|
-
hasNordAccount_1 = _a.sent();
|
|
140
|
-
sessionId = currentNordUser.sessionId;
|
|
141
|
-
hasActiveSession_1 = sessionId != null;
|
|
142
|
-
updateContext({ hasNordAccount: hasNordAccount_1, hasActiveSession: hasActiveSession_1 });
|
|
143
|
-
transitionDestination_1 = hasNordAccount_1
|
|
144
|
-
? sessionId != null
|
|
145
|
-
? FlowState.FINAL_SUCCESS
|
|
146
|
-
: FlowState.AUTH_LOADING
|
|
147
|
-
: FlowState.CHAIN_SELECTION;
|
|
148
|
-
if (hasNordAccount_1 && sessionId != null) {
|
|
149
|
-
setIsConnected(true);
|
|
150
|
-
}
|
|
151
|
-
// Force a small delay to ensure UI updates properly
|
|
152
|
-
setTimeout(function () {
|
|
153
|
-
try {
|
|
154
|
-
logger.debug('Attempting transition to ' + transitionDestination_1);
|
|
155
|
-
transition(transitionDestination_1, {
|
|
156
|
-
walletType: 'solana',
|
|
157
|
-
hasNordAccount: hasNordAccount_1,
|
|
158
|
-
hasActiveSession: hasActiveSession_1,
|
|
159
|
-
});
|
|
160
|
-
logger.debug('Transition to ' + transitionDestination_1 + ' completed');
|
|
161
|
-
}
|
|
162
|
-
catch (error) {
|
|
163
|
-
logger.error('Error during transition:', error);
|
|
164
|
-
}
|
|
165
|
-
finally {
|
|
166
|
-
setIsConnecting(false);
|
|
167
|
-
}
|
|
168
|
-
}, 100);
|
|
169
|
-
return [3 /*break*/, 3];
|
|
170
|
-
case 2:
|
|
171
|
-
error_2 = _a.sent();
|
|
172
|
-
logger.error('Error checking account status:', error_2);
|
|
173
|
-
setIsConnecting(false);
|
|
174
|
-
return [3 /*break*/, 3];
|
|
175
|
-
case 3: return [2 /*return*/];
|
|
176
|
-
}
|
|
177
|
-
});
|
|
178
|
-
}); })();
|
|
179
|
-
}
|
|
180
|
-
// Update ref
|
|
181
|
-
prevNordUserRef.current = currentNordUser;
|
|
182
|
-
}, [nordUser, hasProcessedWallet, dynamicWallet, nord, updateContext, transition, setIsConnected]);
|
|
183
|
-
/**
|
|
184
|
-
* Effect to handle wallet connection state changes
|
|
185
|
-
*/
|
|
186
|
-
useEffect(function () {
|
|
187
|
-
var isNordMode = sessionMode === N1SessionMode.Nord;
|
|
188
|
-
var currentDynamicWallet = dynamicWallet;
|
|
189
|
-
var prevDynamicWallet = prevDynamicWalletRef.current;
|
|
190
|
-
// If we don't have a wallet, nothing to process
|
|
191
|
-
if (!currentDynamicWallet) {
|
|
192
|
-
return;
|
|
193
|
-
}
|
|
194
|
-
// If the wallet hasn't changed, don't reprocess
|
|
195
|
-
if (currentDynamicWallet === prevDynamicWallet) {
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
|
-
// If we've already processed this specific wallet address, don't process again
|
|
199
|
-
if (hasProcessedWallet &&
|
|
200
|
-
processedWalletAddressRef.current === currentDynamicWallet.address) {
|
|
201
|
-
logger.debug('Skipping wallet processing - already processed this address');
|
|
202
|
-
return;
|
|
203
|
-
}
|
|
204
|
-
// Use an IIFE to handle the async processing
|
|
205
|
-
(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
206
|
-
var type;
|
|
207
|
-
var _a, _b;
|
|
208
|
-
return __generator(this, function (_c) {
|
|
209
|
-
// Prevent processing if already in progress
|
|
210
|
-
if (hasProcessedWallet) {
|
|
211
|
-
logger.debug('Skipping wallet processing - hasProcessedWallet is true');
|
|
212
|
-
return [2 /*return*/];
|
|
213
|
-
}
|
|
214
|
-
logger.debug('Processing wallet connection:', {
|
|
215
|
-
wallet: (_a = currentDynamicWallet.connector) === null || _a === void 0 ? void 0 : _a.name,
|
|
216
|
-
address: (_b = currentDynamicWallet.address) === null || _b === void 0 ? void 0 : _b.slice(0, 8),
|
|
217
|
-
state: state,
|
|
218
|
-
isNordMode: isNordMode,
|
|
219
|
-
});
|
|
220
|
-
// Set processed flag first to prevent re-entry
|
|
221
|
-
setHasProcessedWallet(true);
|
|
222
|
-
processedWalletAddressRef.current = currentDynamicWallet.address;
|
|
223
|
-
type = determineWalletType();
|
|
224
|
-
setWalletType(type);
|
|
225
|
-
return [2 /*return*/];
|
|
226
|
-
});
|
|
227
|
-
}); })();
|
|
228
|
-
// Update ref
|
|
229
|
-
prevDynamicWalletRef.current = currentDynamicWallet;
|
|
230
|
-
}, [dynamicWallet, determineWalletType, hasProcessedWallet, sessionMode, state]);
|
|
231
|
-
// Handle wallet disconnection in a separate effect
|
|
232
|
-
useEffect(function () {
|
|
233
|
-
if (!dynamicWallet && hasProcessedWallet) {
|
|
234
|
-
logger.debug('Wallet disconnected, resetting processed flag');
|
|
235
|
-
processedWalletAddressRef.current = null;
|
|
236
|
-
setHasProcessedWallet(false);
|
|
237
|
-
}
|
|
238
|
-
}, [dynamicWallet, hasProcessedWallet]);
|
|
239
|
-
// Handle connecting state changes in a separate effect
|
|
240
|
-
useEffect(function () {
|
|
241
|
-
var currentState = state;
|
|
242
|
-
var prevState = prevStateRef.current;
|
|
243
|
-
// Only run if state has changed
|
|
244
|
-
if (currentState !== prevState) {
|
|
245
|
-
if (currentState !== FlowState.CONNECTING_WALLET && isConnecting) {
|
|
246
|
-
// If we're no longer in the connecting state, reset the connecting flag
|
|
247
|
-
setIsConnecting(false);
|
|
248
|
-
}
|
|
249
|
-
// Update ref
|
|
250
|
-
prevStateRef.current = currentState;
|
|
251
|
-
}
|
|
252
|
-
}, [state, isConnecting]);
|
|
253
|
-
return {
|
|
254
|
-
isConnecting: isConnecting,
|
|
255
|
-
connectWallet: connectWallet,
|
|
256
|
-
disconnectWallet: disconnectWallet,
|
|
257
|
-
};
|
|
258
|
-
};
|
|
259
|
-
//# sourceMappingURL=useNordWalletConnect.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useNordWalletConnect.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/hooks/useNordWalletConnect.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useState, useRef } from 'react';\nimport {\n useN1WalletContext,\n useN1WalletInternalContext,\n} from '../../../Provider/hooks';\nimport { N1SessionMode } from '../../../Provider/types';\nimport { logger } from '../../../utils/logger';\nimport { FlowState } from '../types';\n\n/**\n * Hook for handling wallet connection\n *\n * @param options Configuration options\n * @returns Wallet connection methods and state\n */\nexport const useNordWalletConnect = (\n state: FlowState,\n transition: (newState: FlowState, contextUpdates?: Partial<any>) => void,\n context: any,\n updateContext: (updates: Partial<any>) => void,\n sessionMode?: N1SessionMode\n) => {\n const { nord, nordUser } = useN1WalletContext();\n const { showDynamicWidget, dynamicWallet, setIsConnected } =\n useN1WalletInternalContext();\n\n const [isConnecting, setIsConnecting] = useState(false);\n const [walletType, setWalletType] = useState<'solana' | 'ethereum' | null>(\n context.walletType\n );\n const [hasProcessedWallet, setHasProcessedWallet] = useState(false);\n\n // Use refs to track previous values\n const processedWalletAddressRef = useRef<string | null>(null);\n const prevNordUserRef = useRef(nordUser);\n const prevDynamicWalletRef = useRef(dynamicWallet);\n const prevStateRef = useRef(state);\n\n /**\n * Determine wallet type from Dynamic wallet\n */\n const determineWalletType = useCallback((): 'solana' | 'ethereum' | null => {\n if (!dynamicWallet) return null;\n\n // Check wallet connector id to determine if it's ethereum or solana\n const connectorId = dynamicWallet.connector?.name?.toLowerCase() || '';\n if (connectorId.includes('solana') || connectorId.includes('phantom')) {\n return 'solana';\n } else {\n // Default to ethereum for most other wallets\n return 'ethereum';\n }\n }, [dynamicWallet]);\n\n /**\n * Connect wallet using Dynamic widget\n */\n const connectWallet = useCallback(async () => {\n if (isConnecting || !showDynamicWidget) return;\n\n setIsConnecting(true);\n setHasProcessedWallet(false);\n logger.debug('Starting wallet connection process');\n\n try {\n // Show Dynamic widget to connect wallet\n await disconnectWallet()\n await showDynamicWidget(true);\n logger.debug('Dynamic widget shown');\n } catch (error) {\n setIsConnecting(false);\n updateContext({ walletType: null });\n logger.error('Error showing Dynamic widget:', error);\n }\n }, [isConnecting, showDynamicWidget, updateContext]);\n\n /**\n * Disconnect wallet\n */\n const disconnectWallet = useCallback(() => {\n logger.debug('Disconnecting wallet');\n setWalletType(null);\n setHasProcessedWallet(false);\n processedWalletAddressRef.current = null;\n\n updateContext({ walletType: null });\n }, [updateContext]);\n\n // Process nordUser changes\n useEffect(() => {\n const currentNordUser = nordUser;\n const prevNordUser = prevNordUserRef.current;\n \n // Only run if nordUser has changed and we have processed a wallet\n if (hasProcessedWallet && currentNordUser && currentNordUser !== prevNordUser) {\n logger.debug('NordUser changed, checking account status');\n \n (async () => {\n try {\n if (!dynamicWallet || !nord) return;\n \n const hasNordAccount = await nord.accountExists(dynamicWallet.address);\n const sessionId = currentNordUser.sessionId;\n const hasActiveSession = sessionId != null;\n \n updateContext({ hasNordAccount, hasActiveSession });\n \n const transitionDestination = hasNordAccount\n ? sessionId != null\n ? FlowState.FINAL_SUCCESS\n : FlowState.AUTH_LOADING\n : FlowState.CHAIN_SELECTION;\n\n if (hasNordAccount && sessionId != null) {\n setIsConnected(true);\n }\n\n // Force a small delay to ensure UI updates properly\n setTimeout(() => {\n try {\n logger.debug('Attempting transition to ' + transitionDestination);\n transition(transitionDestination, {\n walletType: 'solana',\n hasNordAccount,\n hasActiveSession,\n });\n logger.debug(\n 'Transition to ' + transitionDestination + ' completed'\n );\n } catch (error) {\n logger.error('Error during transition:', error);\n } finally {\n setIsConnecting(false);\n }\n }, 100);\n } catch (error) {\n logger.error('Error checking account status:', error);\n setIsConnecting(false);\n }\n })();\n }\n \n // Update ref\n prevNordUserRef.current = currentNordUser;\n }, [nordUser, hasProcessedWallet, dynamicWallet, nord, updateContext, transition, setIsConnected]);\n\n /**\n * Effect to handle wallet connection state changes\n */\n useEffect(() => {\n const isNordMode = sessionMode === N1SessionMode.Nord;\n const currentDynamicWallet = dynamicWallet;\n const prevDynamicWallet = prevDynamicWalletRef.current;\n\n // If we don't have a wallet, nothing to process\n if (!currentDynamicWallet) {\n return;\n }\n\n // If the wallet hasn't changed, don't reprocess\n if (currentDynamicWallet === prevDynamicWallet) {\n return;\n }\n\n // If we've already processed this specific wallet address, don't process again\n if (\n hasProcessedWallet &&\n processedWalletAddressRef.current === currentDynamicWallet.address\n ) {\n logger.debug(\n 'Skipping wallet processing - already processed this address'\n );\n return;\n }\n\n // Use an IIFE to handle the async processing\n (async () => {\n // Prevent processing if already in progress\n if (hasProcessedWallet) {\n logger.debug('Skipping wallet processing - hasProcessedWallet is true');\n return;\n }\n\n logger.debug('Processing wallet connection:', {\n wallet: currentDynamicWallet.connector?.name,\n address: currentDynamicWallet.address?.slice(0, 8),\n state,\n isNordMode,\n });\n\n // Set processed flag first to prevent re-entry\n setHasProcessedWallet(true);\n processedWalletAddressRef.current = currentDynamicWallet.address;\n\n const type = determineWalletType();\n setWalletType(type);\n })();\n\n // Update ref\n prevDynamicWalletRef.current = currentDynamicWallet;\n }, [dynamicWallet, determineWalletType, hasProcessedWallet, sessionMode, state]);\n\n // Handle wallet disconnection in a separate effect\n useEffect(() => {\n if (!dynamicWallet && hasProcessedWallet) {\n logger.debug('Wallet disconnected, resetting processed flag');\n processedWalletAddressRef.current = null;\n setHasProcessedWallet(false);\n }\n }, [dynamicWallet, hasProcessedWallet]);\n\n // Handle connecting state changes in a separate effect\n useEffect(() => {\n const currentState = state;\n const prevState = prevStateRef.current;\n \n // Only run if state has changed\n if (currentState !== prevState) {\n if (currentState !== FlowState.CONNECTING_WALLET && isConnecting) {\n // If we're no longer in the connecting state, reset the connecting flag\n setIsConnecting(false);\n }\n \n // Update ref\n prevStateRef.current = currentState;\n }\n }, [state, isConnecting]);\n\n return {\n isConnecting,\n connectWallet,\n disconnectWallet,\n };\n};\n"]}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { FlowContext, FlowState } from '../types';
|
|
2
|
-
/**
|
|
3
|
-
* Saves the current flow state and context to localStorage
|
|
4
|
-
* @param state Current flow state
|
|
5
|
-
* @param context Current flow context
|
|
6
|
-
*/
|
|
7
|
-
export declare const saveStateToLocalStorage: (state: FlowState, context: FlowContext) => void;
|
|
8
|
-
/**
|
|
9
|
-
* Loads the flow state and context from localStorage if available and not expired
|
|
10
|
-
* @returns The loaded state and context, or null if not available or expired
|
|
11
|
-
*/
|
|
12
|
-
export declare const loadStateFromLocalStorage: () => {
|
|
13
|
-
state: FlowState;
|
|
14
|
-
context: FlowContext;
|
|
15
|
-
} | null;
|
|
16
|
-
/**
|
|
17
|
-
* Clears the stored flow state from localStorage
|
|
18
|
-
*/
|
|
19
|
-
export declare const clearStoredState: () => void;
|
|
20
|
-
/**
|
|
21
|
-
* Checks if there is a stored state that can be recovered
|
|
22
|
-
* @returns True if there is a recoverable state, false otherwise
|
|
23
|
-
*/
|
|
24
|
-
export declare const hasRecoverableState: () => boolean;
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
var __assign = (this && this.__assign) || function () {
|
|
2
|
-
__assign = Object.assign || function(t) {
|
|
3
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
-
s = arguments[i];
|
|
5
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
-
t[p] = s[p];
|
|
7
|
-
}
|
|
8
|
-
return t;
|
|
9
|
-
};
|
|
10
|
-
return __assign.apply(this, arguments);
|
|
11
|
-
};
|
|
12
|
-
import { initialFlowContext } from '../types';
|
|
13
|
-
import { FLOW_STATE_STORAGE_KEY, STATE_EXPIRY_TIME } from '../constants';
|
|
14
|
-
/**
|
|
15
|
-
* Saves the current flow state and context to localStorage
|
|
16
|
-
* @param state Current flow state
|
|
17
|
-
* @param context Current flow context
|
|
18
|
-
*/
|
|
19
|
-
export var saveStateToLocalStorage = function (state, context) {
|
|
20
|
-
try {
|
|
21
|
-
var persistedData = {
|
|
22
|
-
state: state,
|
|
23
|
-
context: __assign(__assign({}, context), {
|
|
24
|
-
// Filter out any sensitive data or error objects that shouldn't be persisted
|
|
25
|
-
error: context.error
|
|
26
|
-
? {
|
|
27
|
-
message: context.error.message,
|
|
28
|
-
name: context.error.name,
|
|
29
|
-
}
|
|
30
|
-
: null }),
|
|
31
|
-
timestamp: Date.now(),
|
|
32
|
-
};
|
|
33
|
-
localStorage.setItem(FLOW_STATE_STORAGE_KEY, JSON.stringify(persistedData));
|
|
34
|
-
}
|
|
35
|
-
catch (error) {
|
|
36
|
-
console.error('Failed to save flow state:', error);
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
/**
|
|
40
|
-
* Loads the flow state and context from localStorage if available and not expired
|
|
41
|
-
* @returns The loaded state and context, or null if not available or expired
|
|
42
|
-
*/
|
|
43
|
-
export var loadStateFromLocalStorage = function () {
|
|
44
|
-
try {
|
|
45
|
-
var storedData = localStorage.getItem(FLOW_STATE_STORAGE_KEY);
|
|
46
|
-
if (!storedData) {
|
|
47
|
-
return null;
|
|
48
|
-
}
|
|
49
|
-
var parsedData = JSON.parse(storedData);
|
|
50
|
-
var state = parsedData.state, context = parsedData.context, timestamp = parsedData.timestamp;
|
|
51
|
-
// Check if data is expired
|
|
52
|
-
if (Date.now() - timestamp > STATE_EXPIRY_TIME) {
|
|
53
|
-
localStorage.removeItem(FLOW_STATE_STORAGE_KEY);
|
|
54
|
-
return null;
|
|
55
|
-
}
|
|
56
|
-
return {
|
|
57
|
-
state: state,
|
|
58
|
-
context: __assign(__assign({}, initialFlowContext), context),
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
catch (error) {
|
|
62
|
-
console.error('Failed to load flow state:', error);
|
|
63
|
-
return null;
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
/**
|
|
67
|
-
* Clears the stored flow state from localStorage
|
|
68
|
-
*/
|
|
69
|
-
export var clearStoredState = function () {
|
|
70
|
-
try {
|
|
71
|
-
localStorage.removeItem(FLOW_STATE_STORAGE_KEY);
|
|
72
|
-
}
|
|
73
|
-
catch (error) {
|
|
74
|
-
console.error('Failed to clear flow state:', error);
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
|
-
/**
|
|
78
|
-
* Checks if there is a stored state that can be recovered
|
|
79
|
-
* @returns True if there is a recoverable state, false otherwise
|
|
80
|
-
*/
|
|
81
|
-
export var hasRecoverableState = function () {
|
|
82
|
-
return loadStateFromLocalStorage() !== null;
|
|
83
|
-
};
|
|
84
|
-
//# sourceMappingURL=persistence.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/utils/persistence.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAA0B,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEzE;;;;GAIG;AACH,MAAM,CAAC,IAAM,uBAAuB,GAAG,UACrC,KAAgB,EAChB,OAAoB;IAEpB,IAAI,CAAC;QACH,IAAM,aAAa,GAAG;YACpB,KAAK,OAAA;YACL,OAAO,wBACF,OAAO;gBACV,6EAA6E;gBAC7E,KAAK,EAAE,OAAO,CAAC,KAAK;oBAClB,CAAC,CAAC;wBACE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;wBAC9B,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;qBACzB;oBACH,CAAC,CAAC,IAAI,GACT;YACD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QAEF,YAAY,CAAC,OAAO,CAAC,sBAAsB,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;IAC9E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;AACH,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,IAAM,yBAAyB,GAAG;IAIvC,IAAI,CAAC;QACH,IAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAEhE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAClC,IAAA,KAAK,GAAyB,UAAU,MAAnC,EAAE,OAAO,GAAgB,UAAU,QAA1B,EAAE,SAAS,GAAK,UAAU,UAAf,CAAgB;QAEjD,2BAA2B;QAC3B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,iBAAiB,EAAE,CAAC;YAC/C,YAAY,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,KAAK,OAAA;YACL,OAAO,wBACF,kBAAkB,GAClB,OAAO,CACX;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,IAAM,gBAAgB,GAAG;IAC9B,IAAI,CAAC;QACH,YAAY,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;AACH,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,IAAM,mBAAmB,GAAG;IACjC,OAAO,yBAAyB,EAAE,KAAK,IAAI,CAAC;AAC9C,CAAC,CAAC","sourcesContent":["import { FlowContext, FlowState, initialFlowContext } from '../types';\nimport { FLOW_STATE_STORAGE_KEY, STATE_EXPIRY_TIME } from '../constants';\n\n/**\n * Saves the current flow state and context to localStorage\n * @param state Current flow state\n * @param context Current flow context\n */\nexport const saveStateToLocalStorage = (\n state: FlowState,\n context: FlowContext\n): void => {\n try {\n const persistedData = {\n state,\n context: {\n ...context,\n // Filter out any sensitive data or error objects that shouldn't be persisted\n error: context.error\n ? {\n message: context.error.message,\n name: context.error.name,\n }\n : null,\n },\n timestamp: Date.now(),\n };\n\n localStorage.setItem(FLOW_STATE_STORAGE_KEY, JSON.stringify(persistedData));\n } catch (error) {\n console.error('Failed to save flow state:', error);\n }\n};\n\n/**\n * Loads the flow state and context from localStorage if available and not expired\n * @returns The loaded state and context, or null if not available or expired\n */\nexport const loadStateFromLocalStorage = (): {\n state: FlowState;\n context: FlowContext;\n} | null => {\n try {\n const storedData = localStorage.getItem(FLOW_STATE_STORAGE_KEY);\n\n if (!storedData) {\n return null;\n }\n\n const parsedData = JSON.parse(storedData);\n const { state, context, timestamp } = parsedData;\n\n // Check if data is expired\n if (Date.now() - timestamp > STATE_EXPIRY_TIME) {\n localStorage.removeItem(FLOW_STATE_STORAGE_KEY);\n return null;\n }\n\n return {\n state,\n context: {\n ...initialFlowContext,\n ...context,\n },\n };\n } catch (error) {\n console.error('Failed to load flow state:', error);\n return null;\n }\n};\n\n/**\n * Clears the stored flow state from localStorage\n */\nexport const clearStoredState = (): void => {\n try {\n localStorage.removeItem(FLOW_STATE_STORAGE_KEY);\n } catch (error) {\n console.error('Failed to clear flow state:', error);\n }\n};\n\n/**\n * Checks if there is a stored state that can be recovered\n * @returns True if there is a recoverable state, false otherwise\n */\nexport const hasRecoverableState = (): boolean => {\n return loadStateFromLocalStorage() !== null;\n};\n"]}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { WalletError } from '../errors/types';
|
|
2
|
-
import { N1SessionMode, Balance, N1ModalViewMode, N1WalletProviderProps } from './types';
|
|
3
|
-
export declare function useN1WalletProvider({ providedSessionMode, onError, nord, address, dynamicWallet, }: N1WalletProviderProps): {
|
|
4
|
-
isConnected: boolean;
|
|
5
|
-
ntsInterface: any;
|
|
6
|
-
sessionPubKey: Uint8Array<ArrayBufferLike> | null;
|
|
7
|
-
walletPubKey: Uint8Array<ArrayBufferLike> | null;
|
|
8
|
-
userChain: string | null;
|
|
9
|
-
username: string;
|
|
10
|
-
signMessageWithSessionKey: ((message: any) => Promise<any>) | null;
|
|
11
|
-
signMessageWithWalletKey: ((message: any) => Promise<any>) | null;
|
|
12
|
-
signTransactionWithWalletKey: ((transaction: any) => Promise<any>) | null;
|
|
13
|
-
loading: boolean;
|
|
14
|
-
viewMode: N1ModalViewMode;
|
|
15
|
-
nordUser: any;
|
|
16
|
-
balances: Balance[];
|
|
17
|
-
chain: string;
|
|
18
|
-
dynamicSdkHasLoaded: any;
|
|
19
|
-
sessionMode: N1SessionMode | null;
|
|
20
|
-
handleError: (error: WalletError) => void;
|
|
21
|
-
setIsConnected: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
22
|
-
setNtsInterface: import("react").Dispatch<any>;
|
|
23
|
-
setSessionPubKey: import("react").Dispatch<import("react").SetStateAction<Uint8Array<ArrayBufferLike> | null>>;
|
|
24
|
-
setWalletPubKey: import("react").Dispatch<import("react").SetStateAction<Uint8Array<ArrayBufferLike> | null>>;
|
|
25
|
-
setUserChain: import("react").Dispatch<import("react").SetStateAction<string | null>>;
|
|
26
|
-
setUsername: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
27
|
-
setSignMessageWithSessionKey: import("react").Dispatch<import("react").SetStateAction<((message: any) => Promise<any>) | null>>;
|
|
28
|
-
setSignMessageWithWalletKey: import("react").Dispatch<import("react").SetStateAction<((message: any) => Promise<any>) | null>>;
|
|
29
|
-
setSignTransactionWithWalletKey: import("react").Dispatch<import("react").SetStateAction<((transaction: any) => Promise<any>) | null>>;
|
|
30
|
-
setLoading: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
31
|
-
setViewMode: import("react").Dispatch<import("react").SetStateAction<N1ModalViewMode>>;
|
|
32
|
-
setNordUser: import("react").Dispatch<any>;
|
|
33
|
-
setBalances: import("react").Dispatch<import("react").SetStateAction<Balance[]>>;
|
|
34
|
-
setChain: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
35
|
-
setDynamicSdkHasLoaded: import("react").Dispatch<any>;
|
|
36
|
-
setSessionMode: import("react").Dispatch<import("react").SetStateAction<N1SessionMode | null>>;
|
|
37
|
-
};
|