@n1xyz/wallet-widget 0.0.33-alpha.3 → 0.0.33
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/animations/N1Loader.js +8 -14
- package/dist/animations/N1Loader.js.map +1 -1
- package/dist/animations/Processing.js +8 -14
- package/dist/animations/Processing.js.map +1 -1
- package/dist/components/LoadingFallback.js +2 -6
- package/dist/components/LoadingFallback.js.map +1 -1
- package/dist/components/Logo.js +22 -25
- package/dist/components/Logo.js.map +1 -1
- package/dist/components/N1ConnectButton.js +12 -18
- package/dist/components/N1ConnectButton.js.map +1 -1
- package/dist/components/logos/ArbitrumLogo.js +3 -7
- package/dist/components/logos/ArbitrumLogo.js.map +1 -1
- package/dist/components/logos/BaseLogo.js +3 -7
- package/dist/components/logos/BaseLogo.js.map +1 -1
- package/dist/components/logos/BeraLogo.js +3 -7
- package/dist/components/logos/BeraLogo.js.map +1 -1
- package/dist/components/logos/BitcoinLogo.js +3 -7
- package/dist/components/logos/BitcoinLogo.js.map +1 -1
- package/dist/components/logos/EthereumLogo.js +3 -7
- package/dist/components/logos/EthereumLogo.js.map +1 -1
- package/dist/components/logos/HyperliquidLogo.js +3 -7
- package/dist/components/logos/HyperliquidLogo.js.map +1 -1
- package/dist/components/logos/OptimismLogo.js +3 -7
- package/dist/components/logos/OptimismLogo.js.map +1 -1
- package/dist/components/logos/SolanaLogo.js +3 -7
- package/dist/components/logos/SolanaLogo.js.map +1 -1
- package/dist/components/logos/ZeroOneLogo.js +3 -7
- package/dist/components/logos/ZeroOneLogo.js.map +1 -1
- package/dist/components/logos/index.js +9 -25
- package/dist/components/logos/index.js.map +1 -1
- package/dist/config/solana.js +3 -7
- package/dist/config/solana.js.map +1 -1
- package/dist/config.js +2 -5
- package/dist/config.js.map +1 -1
- package/dist/context/n1-wallet-context.js +4 -8
- package/dist/context/n1-wallet-context.js.map +1 -1
- package/dist/errors/types.js +3 -6
- package/dist/errors/types.js.map +1 -1
- package/dist/features/onboarding-flow/N1WalletModal.js +23 -59
- package/dist/features/onboarding-flow/N1WalletModal.js.map +1 -1
- package/dist/features/onboarding-flow/OnboardingFlow.js +46 -50
- package/dist/features/onboarding-flow/OnboardingFlow.js.map +1 -1
- package/dist/features/onboarding-flow/components/ChainButton.js +4 -7
- package/dist/features/onboarding-flow/components/ChainButton.js.map +1 -1
- package/dist/features/onboarding-flow/components/Header.js +11 -15
- package/dist/features/onboarding-flow/components/Header.js.map +1 -1
- package/dist/features/onboarding-flow/components/ImageWithFallback.js +6 -10
- package/dist/features/onboarding-flow/components/ImageWithFallback.js.map +1 -1
- package/dist/features/onboarding-flow/components/TransactionTable.js +10 -13
- package/dist/features/onboarding-flow/components/TransactionTable.js.map +1 -1
- package/dist/features/onboarding-flow/components/WaitingMessage.js +8 -14
- package/dist/features/onboarding-flow/components/WaitingMessage.js.map +1 -1
- package/dist/features/onboarding-flow/components/index.js +5 -21
- package/dist/features/onboarding-flow/components/index.js.map +1 -1
- package/dist/features/onboarding-flow/index.js +1 -5
- package/dist/features/onboarding-flow/index.js.map +1 -1
- package/dist/features/onboarding-flow/providers/DepositFlowProvider.js +55 -60
- package/dist/features/onboarding-flow/providers/DepositFlowProvider.js.map +1 -1
- package/dist/features/onboarding-flow/providers/OnboardingStateProvider.js +43 -48
- package/dist/features/onboarding-flow/providers/OnboardingStateProvider.js.map +1 -1
- package/dist/features/onboarding-flow/providers/StateProvider.js +7 -11
- package/dist/features/onboarding-flow/providers/StateProvider.js.map +1 -1
- package/dist/features/onboarding-flow/providers/WalletConnectionProvider.js +69 -74
- package/dist/features/onboarding-flow/providers/WalletConnectionProvider.js.map +1 -1
- package/dist/features/onboarding-flow/providers/debug.js +18 -21
- package/dist/features/onboarding-flow/providers/debug.js.map +1 -1
- package/dist/features/onboarding-flow/providers/index.js +5 -16
- package/dist/features/onboarding-flow/providers/index.js.map +1 -1
- package/dist/features/onboarding-flow/providers/onboardingStateMachine.js +15 -20
- package/dist/features/onboarding-flow/providers/onboardingStateMachine.js.map +1 -1
- package/dist/features/onboarding-flow/screens/01-ConnectWalletScreen.js +8 -11
- package/dist/features/onboarding-flow/screens/01-ConnectWalletScreen.js.map +1 -1
- package/dist/features/onboarding-flow/screens/02-ChainSelectionScreen.js +34 -38
- package/dist/features/onboarding-flow/screens/02-ChainSelectionScreen.js.map +1 -1
- package/dist/features/onboarding-flow/screens/03-AmountInputScreen.js +47 -51
- package/dist/features/onboarding-flow/screens/03-AmountInputScreen.js.map +1 -1
- package/dist/features/onboarding-flow/screens/04-DepositProgressScreen.js +8 -12
- package/dist/features/onboarding-flow/screens/04-DepositProgressScreen.js.map +1 -1
- package/dist/features/onboarding-flow/screens/05-DepositSuccessScreen.js +25 -28
- package/dist/features/onboarding-flow/screens/05-DepositSuccessScreen.js.map +1 -1
- package/dist/features/onboarding-flow/screens/06-AuthLoadingScreen.js +10 -13
- package/dist/features/onboarding-flow/screens/06-AuthLoadingScreen.js.map +1 -1
- package/dist/features/onboarding-flow/screens/07-ErrorScreen.js +7 -10
- package/dist/features/onboarding-flow/screens/07-ErrorScreen.js.map +1 -1
- package/dist/features/onboarding-flow/screens/index.js +7 -23
- package/dist/features/onboarding-flow/screens/index.js.map +1 -1
- package/dist/features/onboarding-flow/types.js +3 -6
- package/dist/features/onboarding-flow/types.js.map +1 -1
- package/dist/features/onboarding-flow/utils/depositStorage.js +3 -8
- package/dist/features/onboarding-flow/utils/depositStorage.js.map +1 -1
- package/dist/features/onboarding-flow/utils/imageUtils.js +3 -9
- package/dist/features/onboarding-flow/utils/imageUtils.js.map +1 -1
- package/dist/features/onboarding-flow/utils/nordUser.js +2 -38
- package/dist/features/onboarding-flow/utils/nordUser.js.map +1 -1
- package/dist/features/onboarding-flow/utils/nordUtils.js +5 -12
- package/dist/features/onboarding-flow/utils/nordUtils.js.map +1 -1
- package/dist/features/onboarding-flow/utils/session.js +14 -17
- package/dist/features/onboarding-flow/utils/session.js.map +1 -1
- package/dist/features/onboarding-flow/utils/transaction.js +1 -4
- package/dist/features/onboarding-flow/utils/transaction.js.map +1 -1
- package/dist/features/onboarding-flow/utils/utils.js +8 -16
- package/dist/features/onboarding-flow/utils/utils.js.map +1 -1
- package/dist/features/onboarding-flow/utils/withImageFallback.js +9 -15
- package/dist/features/onboarding-flow/utils/withImageFallback.js.map +1 -1
- package/dist/hooks/index.js +2 -18
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useN1Wallet.js +6 -10
- package/dist/hooks/useN1Wallet.js.map +1 -1
- package/dist/hooks/useNordUserInitialization.js +31 -34
- package/dist/hooks/useNordUserInitialization.js.map +1 -1
- package/dist/index.js +7 -21
- package/dist/index.js.map +1 -1
- package/dist/main.css +2 -0
- package/dist/polyfills/windowEthereumGuard.js +1 -2
- package/dist/polyfills/windowEthereumGuard.js.map +1 -1
- package/dist/providers/LazyWalletProvider.js +38 -74
- package/dist/providers/LazyWalletProvider.js.map +1 -1
- package/dist/providers/N1WalletProvider.js +70 -109
- package/dist/providers/N1WalletProvider.js.map +1 -1
- package/dist/providers/ShadowRootWrapper.js +4 -10
- package/dist/providers/ShadowRootWrapper.js.map +1 -1
- package/dist/providers/WalletErrorBoundary.js +6 -11
- package/dist/providers/WalletErrorBoundary.js.map +1 -1
- package/dist/styles/embedded-main-css.js +1 -3
- package/dist/styles/embedded-main-css.js.map +1 -1
- package/dist/styles/main.css +1 -1
- package/dist/types/wallet.js +4 -7
- package/dist/types/wallet.js.map +1 -1
- package/dist/utils/ed25519.js +14 -20
- package/dist/utils/ed25519.js.map +1 -1
- package/dist/utils/getPseudoName.js +7 -10
- package/dist/utils/getPseudoName.js.map +1 -1
- package/dist/utils/logger.js +3 -5
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/shortenString.js +2 -6
- package/dist/utils/shortenString.js.map +1 -1
- package/dist/utils/words.js +1 -4
- package/dist/utils/words.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __assign = (this && this.__assign) || function () {
|
|
3
2
|
__assign = Object.assign || function(t) {
|
|
4
3
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
@@ -10,60 +9,58 @@ var __assign = (this && this.__assign) || function () {
|
|
|
10
9
|
};
|
|
11
10
|
return __assign.apply(this, arguments);
|
|
12
11
|
};
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
var
|
|
22
|
-
var onboardingStateMachine_1 = require("./onboardingStateMachine");
|
|
23
|
-
var OnboardingStateContext = (0, react_1.createContext)(undefined);
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
import { createContext, useCallback, useContext, useEffect, useMemo, useReducer, useRef, useState, } from 'react';
|
|
14
|
+
import { OnboardingStep, initialOnboardingContext, } from '../types';
|
|
15
|
+
import { logger } from '../../../utils/logger';
|
|
16
|
+
import { useN1WalletContext, useN1WalletInternalContext } from '../../../hooks';
|
|
17
|
+
import { N1ModalViewMode } from '../../../types/wallet';
|
|
18
|
+
import { DEBUG_VIEW_TO_FLOW } from './debug';
|
|
19
|
+
import { createInitialOnboardingState, onboardingStateReducer, } from './onboardingStateMachine';
|
|
20
|
+
var OnboardingStateContext = createContext(undefined);
|
|
24
21
|
/**
|
|
25
22
|
* Provider component for the onboarding state machine
|
|
26
23
|
*/
|
|
27
|
-
var OnboardingStateProvider = function (_a) {
|
|
24
|
+
export var OnboardingStateProvider = function (_a) {
|
|
28
25
|
var children = _a.children;
|
|
29
|
-
var _b =
|
|
26
|
+
var _b = useReducer(onboardingStateReducer, undefined, createInitialOnboardingState), machineState = _b[0], dispatch = _b[1];
|
|
30
27
|
var state = machineState.state, context = machineState.context;
|
|
31
|
-
var _c =
|
|
32
|
-
var _d =
|
|
33
|
-
var contextRef =
|
|
34
|
-
var debugOverrideRef =
|
|
35
|
-
var lastDepositRequestRef =
|
|
36
|
-
var prevStateRef =
|
|
37
|
-
var _e =
|
|
38
|
-
var _f =
|
|
39
|
-
|
|
28
|
+
var _c = useState(false), isClosing = _c[0], setIsClosing = _c[1];
|
|
29
|
+
var _d = useState(false), isDebugOverride = _d[0], setIsDebugOverride = _d[1];
|
|
30
|
+
var contextRef = useRef(context);
|
|
31
|
+
var debugOverrideRef = useRef(false);
|
|
32
|
+
var lastDepositRequestRef = useRef(0);
|
|
33
|
+
var prevStateRef = useRef(null);
|
|
34
|
+
var _e = useN1WalletContext(), nordUser = _e.nordUser, viewMode = _e.viewMode;
|
|
35
|
+
var _f = useN1WalletInternalContext(), dynamicSdkHasLoaded = _f.dynamicSdkHasLoaded, depositFlowRequestId = _f.depositFlowRequestId, dynamicWallet = _f.dynamicWallet;
|
|
36
|
+
useEffect(function () {
|
|
40
37
|
contextRef.current = context;
|
|
41
38
|
}, [context]);
|
|
42
|
-
var guardedDispatch =
|
|
39
|
+
var guardedDispatch = useCallback(function (action) {
|
|
43
40
|
if (isDebugOverride) {
|
|
44
|
-
|
|
41
|
+
logger.debug("Transition suppressed (debug override \u2192 ".concat(N1ModalViewMode[viewMode], ")"));
|
|
45
42
|
return;
|
|
46
43
|
}
|
|
47
44
|
if (!dynamicSdkHasLoaded) {
|
|
48
|
-
|
|
45
|
+
logger.debug("Ignoring action ".concat(action.type, " until Dynamic SDK is ready"));
|
|
49
46
|
return;
|
|
50
47
|
}
|
|
51
48
|
dispatch(action);
|
|
52
49
|
}, [dynamicSdkHasLoaded, isDebugOverride, viewMode]);
|
|
53
|
-
|
|
50
|
+
useEffect(function () {
|
|
54
51
|
var prevState = prevStateRef.current;
|
|
55
52
|
if (prevState && prevState !== state) {
|
|
56
|
-
|
|
53
|
+
logger.debug("State changed from ".concat(prevState, " to ").concat(state));
|
|
57
54
|
}
|
|
58
55
|
prevStateRef.current = state;
|
|
59
|
-
if (state ===
|
|
56
|
+
if (state === OnboardingStep.CONNECTING_WALLET) {
|
|
60
57
|
forcedAuthRequestedRef.current = false;
|
|
61
58
|
}
|
|
62
59
|
}, [state]);
|
|
63
|
-
var forcedAuthRequestedRef =
|
|
64
|
-
|
|
60
|
+
var forcedAuthRequestedRef = useRef(false);
|
|
61
|
+
useEffect(function () {
|
|
65
62
|
if (!dynamicWallet ||
|
|
66
|
-
state !==
|
|
63
|
+
state !== OnboardingStep.CONNECTING_WALLET ||
|
|
67
64
|
context.isDepositOnlyFlow ||
|
|
68
65
|
forcedAuthRequestedRef.current ||
|
|
69
66
|
!context.hasNordAccount) {
|
|
@@ -75,7 +72,7 @@ var OnboardingStateProvider = function (_a) {
|
|
|
75
72
|
hasNordAccount: context.hasNordAccount || undefined,
|
|
76
73
|
});
|
|
77
74
|
}, [dynamicWallet, state, context.isDepositOnlyFlow, context.hasNordAccount, guardedDispatch]);
|
|
78
|
-
var updateContext =
|
|
75
|
+
var updateContext = useCallback(function (updates) {
|
|
79
76
|
if (!updates || Object.keys(updates).length === 0) {
|
|
80
77
|
return;
|
|
81
78
|
}
|
|
@@ -86,7 +83,7 @@ var OnboardingStateProvider = function (_a) {
|
|
|
86
83
|
}
|
|
87
84
|
dispatch({ type: 'SET_CONTEXT', updates: updates });
|
|
88
85
|
}, [dispatch]);
|
|
89
|
-
var actions =
|
|
86
|
+
var actions = useMemo(function () { return ({
|
|
90
87
|
updateContext: updateContext,
|
|
91
88
|
goToChainSelection: function (options) {
|
|
92
89
|
var _a;
|
|
@@ -123,27 +120,27 @@ var OnboardingStateProvider = function (_a) {
|
|
|
123
120
|
return guardedDispatch({ type: 'RESET', context: overrideContext });
|
|
124
121
|
},
|
|
125
122
|
}); }, [guardedDispatch, updateContext]);
|
|
126
|
-
|
|
123
|
+
useEffect(function () {
|
|
127
124
|
if (!depositFlowRequestId ||
|
|
128
125
|
depositFlowRequestId === lastDepositRequestRef.current) {
|
|
129
126
|
return;
|
|
130
127
|
}
|
|
131
128
|
lastDepositRequestRef.current = depositFlowRequestId;
|
|
132
129
|
if (!nordUser || !nordUser.sessionId) {
|
|
133
|
-
|
|
130
|
+
logger.warn('Ignoring deposit flow request without an active Nord session');
|
|
134
131
|
return;
|
|
135
132
|
}
|
|
136
|
-
var nextContext = __assign(__assign({},
|
|
133
|
+
var nextContext = __assign(__assign({}, initialOnboardingContext), { hasNordAccount: true, hasActiveSession: true, isDepositOnlyFlow: true });
|
|
137
134
|
debugOverrideRef.current = false;
|
|
138
135
|
setIsDebugOverride(false);
|
|
139
136
|
dispatch({ type: 'RESET', context: nextContext });
|
|
140
137
|
dispatch({ type: 'GO_TO_CHAIN_SELECTION', resetSelection: false });
|
|
141
138
|
setIsClosing(false);
|
|
142
|
-
|
|
139
|
+
logger.debug('Deposit-only flow activated');
|
|
143
140
|
}, [depositFlowRequestId, nordUser, dispatch]);
|
|
144
141
|
// Debug-only: allow external callers (e.g. UI playground) to jump to a specific view
|
|
145
|
-
|
|
146
|
-
var debugTarget = viewMode ===
|
|
142
|
+
useEffect(function () {
|
|
143
|
+
var debugTarget = viewMode === N1ModalViewMode.Automatic ? undefined : DEBUG_VIEW_TO_FLOW[viewMode];
|
|
147
144
|
if (debugTarget) {
|
|
148
145
|
debugOverrideRef.current = true;
|
|
149
146
|
setIsDebugOverride(true);
|
|
@@ -152,7 +149,7 @@ var OnboardingStateProvider = function (_a) {
|
|
|
152
149
|
context: debugTarget.context,
|
|
153
150
|
};
|
|
154
151
|
dispatch({ type: 'APPLY_SNAPSHOT', snapshot: snapshot });
|
|
155
|
-
|
|
152
|
+
logger.debug("Debug view override: ".concat(N1ModalViewMode[viewMode], " \u2192 ").concat(debugTarget.state));
|
|
156
153
|
return;
|
|
157
154
|
}
|
|
158
155
|
if (debugOverrideRef.current) {
|
|
@@ -160,9 +157,9 @@ var OnboardingStateProvider = function (_a) {
|
|
|
160
157
|
setIsDebugOverride(false);
|
|
161
158
|
dispatch({
|
|
162
159
|
type: 'APPLY_SNAPSHOT',
|
|
163
|
-
snapshot:
|
|
160
|
+
snapshot: createInitialOnboardingState(),
|
|
164
161
|
});
|
|
165
|
-
|
|
162
|
+
logger.debug('Debug view override cleared; returning to state machine');
|
|
166
163
|
}
|
|
167
164
|
}, [viewMode, dispatch]);
|
|
168
165
|
var contextValue = {
|
|
@@ -173,18 +170,16 @@ var OnboardingStateProvider = function (_a) {
|
|
|
173
170
|
actions: actions,
|
|
174
171
|
updateContext: updateContext,
|
|
175
172
|
};
|
|
176
|
-
return ((
|
|
173
|
+
return (_jsx(OnboardingStateContext.Provider, { value: contextValue, children: children }));
|
|
177
174
|
};
|
|
178
|
-
exports.OnboardingStateProvider = OnboardingStateProvider;
|
|
179
175
|
/**
|
|
180
176
|
* Custom hook to use the onboarding state context
|
|
181
177
|
*/
|
|
182
|
-
var useOnboardingState = function () {
|
|
183
|
-
var contextValue =
|
|
178
|
+
export var useOnboardingState = function () {
|
|
179
|
+
var contextValue = useContext(OnboardingStateContext);
|
|
184
180
|
if (contextValue === undefined) {
|
|
185
181
|
throw new Error('useOnboardingState must be used within an OnboardingStateProvider');
|
|
186
182
|
}
|
|
187
183
|
return contextValue;
|
|
188
184
|
};
|
|
189
|
-
exports.useOnboardingState = useOnboardingState;
|
|
190
185
|
//# sourceMappingURL=OnboardingStateProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OnboardingStateProvider.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/providers/OnboardingStateProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useReducer,\n useRef,\n useState,\n} from 'react';\nimport {\n OnboardingContext,\n OnboardingStep,\n StoredDepositRecord,\n initialOnboardingContext,\n} from '../types';\nimport { logger } from '../../../utils/logger';\nimport { useN1WalletContext, useN1WalletInternalContext } from '../../../hooks';\nimport { N1ModalViewMode } from '../../../types/wallet';\nimport { DEBUG_VIEW_TO_FLOW } from './debug';\nimport {\n OnboardingStateAction,\n OnboardingStateSnapshot,\n createInitialOnboardingState,\n onboardingStateReducer,\n} from './onboardingStateMachine';\n\nexport interface OnboardingStateActions {\n updateContext: (updates: Partial<OnboardingContext>) => void;\n goToChainSelection: (options?: { resetSelection?: boolean }) => void;\n selectChain: (selection: {\n id: string;\n name: string;\n network?: string | null;\n }) => void;\n startDeposit: () => void;\n markDepositSuccess: (payload: {\n transactionId: string;\n record: StoredDepositRecord;\n }) => void;\n markDepositFailed: (message: string) => void;\n requireAuth: (options?: { hasNordAccount?: boolean }) => void;\n completeFlow: (options?: {\n hasActiveSession?: boolean;\n hasNordAccount?: boolean;\n }) => void;\n setErrorState: (error: Error) => void;\n resetFlow: (overrideContext?: OnboardingContext) => void;\n}\n\nexport interface OnboardingStateValue {\n state: OnboardingStep;\n context: OnboardingContext;\n isClosing: boolean;\n isDebugOverride: boolean;\n actions: OnboardingStateActions;\n updateContext: (updates: Partial<OnboardingContext>) => void;\n}\n\nconst OnboardingStateContext = createContext<OnboardingStateValue | undefined>(undefined);\n\ninterface OnboardingStateProviderProps {\n children: React.ReactNode;\n}\n\n/**\n * Provider component for the onboarding state machine\n */\nexport const OnboardingStateProvider: React.FC<OnboardingStateProviderProps> = ({\n children,\n}) => {\n const [machineState, dispatch] = useReducer(\n onboardingStateReducer,\n undefined,\n createInitialOnboardingState\n );\n const { state, context } = machineState;\n const [isClosing, setIsClosing] = useState(false);\n const [isDebugOverride, setIsDebugOverride] = useState(false);\n\n const contextRef = useRef<OnboardingContext>(context);\n const debugOverrideRef = useRef(false);\n const lastDepositRequestRef = useRef(0);\n const prevStateRef = useRef<OnboardingStep | null>(null);\n\n const { nordUser, viewMode } = useN1WalletContext();\n const { dynamicSdkHasLoaded, depositFlowRequestId, dynamicWallet } = useN1WalletInternalContext();\n\n useEffect(() => {\n contextRef.current = context;\n }, [context]);\n\n const guardedDispatch = useCallback(\n (action: OnboardingStateAction) => {\n if (isDebugOverride) {\n logger.debug(\n `Transition suppressed (debug override → ${N1ModalViewMode[viewMode]})`\n );\n return;\n }\n\n if (!dynamicSdkHasLoaded) {\n logger.debug(\n `Ignoring action ${action.type} until Dynamic SDK is ready`\n );\n return;\n }\n\n dispatch(action);\n },\n [dynamicSdkHasLoaded, isDebugOverride, viewMode]\n );\n\n useEffect(() => {\n const prevState = prevStateRef.current;\n if (prevState && prevState !== state) {\n logger.debug(`State changed from ${prevState} to ${state}`);\n }\n prevStateRef.current = state;\n if (state === OnboardingStep.CONNECTING_WALLET) {\n forcedAuthRequestedRef.current = false;\n }\n }, [state]);\n\n const forcedAuthRequestedRef = useRef(false);\n\n useEffect(() => {\n if (\n !dynamicWallet ||\n state !== OnboardingStep.CONNECTING_WALLET ||\n context.isDepositOnlyFlow ||\n forcedAuthRequestedRef.current ||\n !context.hasNordAccount\n ) {\n return;\n }\n\n forcedAuthRequestedRef.current = true;\n guardedDispatch({\n type: 'GO_TO_AUTH',\n hasNordAccount: context.hasNordAccount || undefined,\n });\n }, [dynamicWallet, state, context.isDepositOnlyFlow, context.hasNordAccount, guardedDispatch]);\n\n const updateContext = useCallback(\n (updates: Partial<OnboardingContext>) => {\n if (!updates || Object.keys(updates).length === 0) {\n return;\n }\n\n const prev = contextRef.current;\n const hasChanges = (Object.keys(updates) as Array<keyof OnboardingContext>).some(\n (key) => prev[key] !== updates[key]\n );\n\n if (!hasChanges) {\n return;\n }\n\n dispatch({ type: 'SET_CONTEXT', updates });\n },\n [dispatch]\n );\n\n const actions = useMemo<OnboardingStateActions>(\n () => ({\n updateContext,\n goToChainSelection: (options) =>\n guardedDispatch({\n type: 'GO_TO_CHAIN_SELECTION',\n resetSelection: options?.resetSelection ?? false,\n }),\n selectChain: (selection) =>\n guardedDispatch({ type: 'SELECT_CHAIN', selection }),\n startDeposit: () => guardedDispatch({ type: 'START_DEPOSIT' }),\n markDepositSuccess: (payload) =>\n guardedDispatch({ type: 'DEPOSIT_SUCCESS', payload }),\n markDepositFailed: (message) =>\n guardedDispatch({ type: 'DEPOSIT_FAILED', message }),\n requireAuth: (options) =>\n guardedDispatch({\n type: 'GO_TO_AUTH',\n hasNordAccount: options?.hasNordAccount,\n }),\n completeFlow: (options) =>\n guardedDispatch({\n type: 'COMPLETE_FLOW',\n hasActiveSession: options?.hasActiveSession,\n hasNordAccount: options?.hasNordAccount,\n }),\n setErrorState: (error) => guardedDispatch({ type: 'SET_ERROR', error }),\n resetFlow: (overrideContext) =>\n guardedDispatch({ type: 'RESET', context: overrideContext }),\n }),\n [guardedDispatch, updateContext]\n );\n\n useEffect(() => {\n if (\n !depositFlowRequestId ||\n depositFlowRequestId === lastDepositRequestRef.current\n ) {\n return;\n }\n\n lastDepositRequestRef.current = depositFlowRequestId;\n\n if (!nordUser || !nordUser.sessionId) {\n logger.warn('Ignoring deposit flow request without an active Nord session');\n return;\n }\n\n const nextContext: OnboardingContext = {\n ...initialOnboardingContext,\n hasNordAccount: true,\n hasActiveSession: true,\n isDepositOnlyFlow: true,\n };\n\n debugOverrideRef.current = false;\n setIsDebugOverride(false);\n dispatch({ type: 'RESET', context: nextContext });\n dispatch({ type: 'GO_TO_CHAIN_SELECTION', resetSelection: false });\n setIsClosing(false);\n logger.debug('Deposit-only flow activated');\n }, [depositFlowRequestId, nordUser, dispatch]);\n\n // Debug-only: allow external callers (e.g. UI playground) to jump to a specific view\n useEffect(() => {\n const debugTarget =\n viewMode === N1ModalViewMode.Automatic ? undefined : DEBUG_VIEW_TO_FLOW[viewMode];\n\n if (debugTarget) {\n debugOverrideRef.current = true;\n setIsDebugOverride(true);\n const snapshot: OnboardingStateSnapshot = {\n state: debugTarget.state,\n context: debugTarget.context,\n };\n dispatch({ type: 'APPLY_SNAPSHOT', snapshot });\n logger.debug(\n `Debug view override: ${N1ModalViewMode[viewMode]} → ${debugTarget.state}`\n );\n return;\n }\n\n if (debugOverrideRef.current) {\n debugOverrideRef.current = false;\n setIsDebugOverride(false);\n dispatch({\n type: 'APPLY_SNAPSHOT',\n snapshot: createInitialOnboardingState(),\n });\n logger.debug('Debug view override cleared; returning to state machine');\n }\n }, [viewMode, dispatch]);\n\n const contextValue: OnboardingStateValue = {\n state,\n context,\n isClosing,\n isDebugOverride,\n actions,\n updateContext,\n };\n\n return (\n <OnboardingStateContext.Provider value={contextValue}>\n {children}\n </OnboardingStateContext.Provider>\n );\n};\n\n/**\n * Custom hook to use the onboarding state context\n */\nexport const useOnboardingState = (): OnboardingStateValue => {\n const contextValue = useContext(OnboardingStateContext);\n\n if (contextValue === undefined) {\n throw new Error('useOnboardingState must be used within an OnboardingStateProvider');\n }\n\n return contextValue;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"OnboardingStateProvider.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/providers/OnboardingStateProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useReducer,\n useRef,\n useState,\n} from 'react';\nimport {\n OnboardingContext,\n OnboardingStep,\n StoredDepositRecord,\n initialOnboardingContext,\n} from '../types';\nimport { logger } from '../../../utils/logger';\nimport { useN1WalletContext, useN1WalletInternalContext } from '../../../hooks';\nimport { N1ModalViewMode } from '../../../types/wallet';\nimport { DEBUG_VIEW_TO_FLOW } from './debug';\nimport {\n OnboardingStateAction,\n OnboardingStateSnapshot,\n createInitialOnboardingState,\n onboardingStateReducer,\n} from './onboardingStateMachine';\n\nexport interface OnboardingStateActions {\n updateContext: (updates: Partial<OnboardingContext>) => void;\n goToChainSelection: (options?: { resetSelection?: boolean }) => void;\n selectChain: (selection: {\n id: string;\n name: string;\n network?: string | null;\n }) => void;\n startDeposit: () => void;\n markDepositSuccess: (payload: {\n transactionId: string;\n record: StoredDepositRecord;\n }) => void;\n markDepositFailed: (message: string) => void;\n requireAuth: (options?: { hasNordAccount?: boolean }) => void;\n completeFlow: (options?: {\n hasActiveSession?: boolean;\n hasNordAccount?: boolean;\n }) => void;\n setErrorState: (error: Error) => void;\n resetFlow: (overrideContext?: OnboardingContext) => void;\n}\n\nexport interface OnboardingStateValue {\n state: OnboardingStep;\n context: OnboardingContext;\n isClosing: boolean;\n isDebugOverride: boolean;\n actions: OnboardingStateActions;\n updateContext: (updates: Partial<OnboardingContext>) => void;\n}\n\nconst OnboardingStateContext = createContext<OnboardingStateValue | undefined>(undefined);\n\ninterface OnboardingStateProviderProps {\n children: React.ReactNode;\n}\n\n/**\n * Provider component for the onboarding state machine\n */\nexport const OnboardingStateProvider: React.FC<OnboardingStateProviderProps> = ({\n children,\n}) => {\n const [machineState, dispatch] = useReducer(\n onboardingStateReducer,\n undefined,\n createInitialOnboardingState\n );\n const { state, context } = machineState;\n const [isClosing, setIsClosing] = useState(false);\n const [isDebugOverride, setIsDebugOverride] = useState(false);\n\n const contextRef = useRef<OnboardingContext>(context);\n const debugOverrideRef = useRef(false);\n const lastDepositRequestRef = useRef(0);\n const prevStateRef = useRef<OnboardingStep | null>(null);\n\n const { nordUser, viewMode } = useN1WalletContext();\n const { dynamicSdkHasLoaded, depositFlowRequestId, dynamicWallet } = useN1WalletInternalContext();\n\n useEffect(() => {\n contextRef.current = context;\n }, [context]);\n\n const guardedDispatch = useCallback(\n (action: OnboardingStateAction) => {\n if (isDebugOverride) {\n logger.debug(\n `Transition suppressed (debug override → ${N1ModalViewMode[viewMode]})`\n );\n return;\n }\n\n if (!dynamicSdkHasLoaded) {\n logger.debug(\n `Ignoring action ${action.type} until Dynamic SDK is ready`\n );\n return;\n }\n\n dispatch(action);\n },\n [dynamicSdkHasLoaded, isDebugOverride, viewMode]\n );\n\n useEffect(() => {\n const prevState = prevStateRef.current;\n if (prevState && prevState !== state) {\n logger.debug(`State changed from ${prevState} to ${state}`);\n }\n prevStateRef.current = state;\n if (state === OnboardingStep.CONNECTING_WALLET) {\n forcedAuthRequestedRef.current = false;\n }\n }, [state]);\n\n const forcedAuthRequestedRef = useRef(false);\n\n useEffect(() => {\n if (\n !dynamicWallet ||\n state !== OnboardingStep.CONNECTING_WALLET ||\n context.isDepositOnlyFlow ||\n forcedAuthRequestedRef.current ||\n !context.hasNordAccount\n ) {\n return;\n }\n\n forcedAuthRequestedRef.current = true;\n guardedDispatch({\n type: 'GO_TO_AUTH',\n hasNordAccount: context.hasNordAccount || undefined,\n });\n }, [dynamicWallet, state, context.isDepositOnlyFlow, context.hasNordAccount, guardedDispatch]);\n\n const updateContext = useCallback(\n (updates: Partial<OnboardingContext>) => {\n if (!updates || Object.keys(updates).length === 0) {\n return;\n }\n\n const prev = contextRef.current;\n const hasChanges = (Object.keys(updates) as Array<keyof OnboardingContext>).some(\n (key) => prev[key] !== updates[key]\n );\n\n if (!hasChanges) {\n return;\n }\n\n dispatch({ type: 'SET_CONTEXT', updates });\n },\n [dispatch]\n );\n\n const actions = useMemo<OnboardingStateActions>(\n () => ({\n updateContext,\n goToChainSelection: (options) =>\n guardedDispatch({\n type: 'GO_TO_CHAIN_SELECTION',\n resetSelection: options?.resetSelection ?? false,\n }),\n selectChain: (selection) =>\n guardedDispatch({ type: 'SELECT_CHAIN', selection }),\n startDeposit: () => guardedDispatch({ type: 'START_DEPOSIT' }),\n markDepositSuccess: (payload) =>\n guardedDispatch({ type: 'DEPOSIT_SUCCESS', payload }),\n markDepositFailed: (message) =>\n guardedDispatch({ type: 'DEPOSIT_FAILED', message }),\n requireAuth: (options) =>\n guardedDispatch({\n type: 'GO_TO_AUTH',\n hasNordAccount: options?.hasNordAccount,\n }),\n completeFlow: (options) =>\n guardedDispatch({\n type: 'COMPLETE_FLOW',\n hasActiveSession: options?.hasActiveSession,\n hasNordAccount: options?.hasNordAccount,\n }),\n setErrorState: (error) => guardedDispatch({ type: 'SET_ERROR', error }),\n resetFlow: (overrideContext) =>\n guardedDispatch({ type: 'RESET', context: overrideContext }),\n }),\n [guardedDispatch, updateContext]\n );\n\n useEffect(() => {\n if (\n !depositFlowRequestId ||\n depositFlowRequestId === lastDepositRequestRef.current\n ) {\n return;\n }\n\n lastDepositRequestRef.current = depositFlowRequestId;\n\n if (!nordUser || !nordUser.sessionId) {\n logger.warn('Ignoring deposit flow request without an active Nord session');\n return;\n }\n\n const nextContext: OnboardingContext = {\n ...initialOnboardingContext,\n hasNordAccount: true,\n hasActiveSession: true,\n isDepositOnlyFlow: true,\n };\n\n debugOverrideRef.current = false;\n setIsDebugOverride(false);\n dispatch({ type: 'RESET', context: nextContext });\n dispatch({ type: 'GO_TO_CHAIN_SELECTION', resetSelection: false });\n setIsClosing(false);\n logger.debug('Deposit-only flow activated');\n }, [depositFlowRequestId, nordUser, dispatch]);\n\n // Debug-only: allow external callers (e.g. UI playground) to jump to a specific view\n useEffect(() => {\n const debugTarget =\n viewMode === N1ModalViewMode.Automatic ? undefined : DEBUG_VIEW_TO_FLOW[viewMode];\n\n if (debugTarget) {\n debugOverrideRef.current = true;\n setIsDebugOverride(true);\n const snapshot: OnboardingStateSnapshot = {\n state: debugTarget.state,\n context: debugTarget.context,\n };\n dispatch({ type: 'APPLY_SNAPSHOT', snapshot });\n logger.debug(\n `Debug view override: ${N1ModalViewMode[viewMode]} → ${debugTarget.state}`\n );\n return;\n }\n\n if (debugOverrideRef.current) {\n debugOverrideRef.current = false;\n setIsDebugOverride(false);\n dispatch({\n type: 'APPLY_SNAPSHOT',\n snapshot: createInitialOnboardingState(),\n });\n logger.debug('Debug view override cleared; returning to state machine');\n }\n }, [viewMode, dispatch]);\n\n const contextValue: OnboardingStateValue = {\n state,\n context,\n isClosing,\n isDebugOverride,\n actions,\n updateContext,\n };\n\n return (\n <OnboardingStateContext.Provider value={contextValue}>\n {children}\n </OnboardingStateContext.Provider>\n );\n};\n\n/**\n * Custom hook to use the onboarding state context\n */\nexport const useOnboardingState = (): OnboardingStateValue => {\n const contextValue = useContext(OnboardingStateContext);\n\n if (contextValue === undefined) {\n throw new Error('useOnboardingState must be used within an OnboardingStateProvider');\n }\n\n return contextValue;\n};\n"]}
|
|
@@ -1,18 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
var OnboardingStateProvider_1 = require("./OnboardingStateProvider");
|
|
6
|
-
var WalletConnectionProvider_1 = require("./WalletConnectionProvider");
|
|
7
|
-
var DepositFlowProvider_1 = require("./DepositFlowProvider");
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { OnboardingStateProvider } from './OnboardingStateProvider';
|
|
3
|
+
import { WalletConnectionProvider } from './WalletConnectionProvider';
|
|
4
|
+
import { DepositFlowProvider } from './DepositFlowProvider';
|
|
8
5
|
/**
|
|
9
6
|
* A provider component that combines OnboardingStateProvider, WalletConnectionProvider, and DepositFlowProvider
|
|
10
7
|
* into a single wrapper component for easier implementation.
|
|
11
8
|
*/
|
|
12
|
-
var StateProvider = function (_a) {
|
|
9
|
+
export var StateProvider = function (_a) {
|
|
13
10
|
var children = _a.children;
|
|
14
|
-
return ((
|
|
11
|
+
return (_jsx(OnboardingStateProvider, { children: _jsx(WalletConnectionProvider, { children: _jsx(DepositFlowProvider, { children: children }) }) }));
|
|
15
12
|
};
|
|
16
|
-
|
|
17
|
-
exports.default = exports.StateProvider;
|
|
13
|
+
export default StateProvider;
|
|
18
14
|
//# sourceMappingURL=StateProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StateProvider.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/providers/StateProvider.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StateProvider.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/providers/StateProvider.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAM5D;;;GAGG;AACH,MAAM,CAAC,IAAM,aAAa,GAAsC,UAAC,EAAY;QAAV,QAAQ,cAAA;IACzE,OAAO,CACL,KAAC,uBAAuB,cACtB,KAAC,wBAAwB,cACvB,KAAC,mBAAmB,cACjB,QAAQ,GACW,GACG,GACH,CAC3B,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC","sourcesContent":["import React from 'react';\nimport { OnboardingStateProvider } from './OnboardingStateProvider';\nimport { WalletConnectionProvider } from './WalletConnectionProvider';\nimport { DepositFlowProvider } from './DepositFlowProvider';\n\ninterface OnboardingProviderProps {\n children: React.ReactNode;\n}\n\n/**\n * A provider component that combines OnboardingStateProvider, WalletConnectionProvider, and DepositFlowProvider\n * into a single wrapper component for easier implementation.\n */\nexport const StateProvider: React.FC<OnboardingProviderProps> = ({ children }) => {\n return (\n <OnboardingStateProvider>\n <WalletConnectionProvider>\n <DepositFlowProvider>\n {children}\n </DepositFlowProvider>\n </WalletConnectionProvider>\n </OnboardingStateProvider>\n );\n};\n\nexport default StateProvider;\n"]}
|