@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.
Files changed (139) hide show
  1. package/dist/animations/N1Loader.js +8 -14
  2. package/dist/animations/N1Loader.js.map +1 -1
  3. package/dist/animations/Processing.js +8 -14
  4. package/dist/animations/Processing.js.map +1 -1
  5. package/dist/components/LoadingFallback.js +2 -6
  6. package/dist/components/LoadingFallback.js.map +1 -1
  7. package/dist/components/Logo.js +22 -25
  8. package/dist/components/Logo.js.map +1 -1
  9. package/dist/components/N1ConnectButton.js +12 -18
  10. package/dist/components/N1ConnectButton.js.map +1 -1
  11. package/dist/components/logos/ArbitrumLogo.js +3 -7
  12. package/dist/components/logos/ArbitrumLogo.js.map +1 -1
  13. package/dist/components/logos/BaseLogo.js +3 -7
  14. package/dist/components/logos/BaseLogo.js.map +1 -1
  15. package/dist/components/logos/BeraLogo.js +3 -7
  16. package/dist/components/logos/BeraLogo.js.map +1 -1
  17. package/dist/components/logos/BitcoinLogo.js +3 -7
  18. package/dist/components/logos/BitcoinLogo.js.map +1 -1
  19. package/dist/components/logos/EthereumLogo.js +3 -7
  20. package/dist/components/logos/EthereumLogo.js.map +1 -1
  21. package/dist/components/logos/HyperliquidLogo.js +3 -7
  22. package/dist/components/logos/HyperliquidLogo.js.map +1 -1
  23. package/dist/components/logos/OptimismLogo.js +3 -7
  24. package/dist/components/logos/OptimismLogo.js.map +1 -1
  25. package/dist/components/logos/SolanaLogo.js +3 -7
  26. package/dist/components/logos/SolanaLogo.js.map +1 -1
  27. package/dist/components/logos/ZeroOneLogo.js +3 -7
  28. package/dist/components/logos/ZeroOneLogo.js.map +1 -1
  29. package/dist/components/logos/index.js +9 -25
  30. package/dist/components/logos/index.js.map +1 -1
  31. package/dist/config/solana.js +3 -7
  32. package/dist/config/solana.js.map +1 -1
  33. package/dist/config.js +2 -5
  34. package/dist/config.js.map +1 -1
  35. package/dist/context/n1-wallet-context.js +4 -8
  36. package/dist/context/n1-wallet-context.js.map +1 -1
  37. package/dist/errors/types.js +3 -6
  38. package/dist/errors/types.js.map +1 -1
  39. package/dist/features/onboarding-flow/N1WalletModal.js +23 -59
  40. package/dist/features/onboarding-flow/N1WalletModal.js.map +1 -1
  41. package/dist/features/onboarding-flow/OnboardingFlow.js +46 -50
  42. package/dist/features/onboarding-flow/OnboardingFlow.js.map +1 -1
  43. package/dist/features/onboarding-flow/components/ChainButton.js +4 -7
  44. package/dist/features/onboarding-flow/components/ChainButton.js.map +1 -1
  45. package/dist/features/onboarding-flow/components/Header.js +11 -15
  46. package/dist/features/onboarding-flow/components/Header.js.map +1 -1
  47. package/dist/features/onboarding-flow/components/ImageWithFallback.js +6 -10
  48. package/dist/features/onboarding-flow/components/ImageWithFallback.js.map +1 -1
  49. package/dist/features/onboarding-flow/components/TransactionTable.js +10 -13
  50. package/dist/features/onboarding-flow/components/TransactionTable.js.map +1 -1
  51. package/dist/features/onboarding-flow/components/WaitingMessage.js +8 -14
  52. package/dist/features/onboarding-flow/components/WaitingMessage.js.map +1 -1
  53. package/dist/features/onboarding-flow/components/index.js +5 -21
  54. package/dist/features/onboarding-flow/components/index.js.map +1 -1
  55. package/dist/features/onboarding-flow/index.js +1 -5
  56. package/dist/features/onboarding-flow/index.js.map +1 -1
  57. package/dist/features/onboarding-flow/providers/DepositFlowProvider.js +55 -60
  58. package/dist/features/onboarding-flow/providers/DepositFlowProvider.js.map +1 -1
  59. package/dist/features/onboarding-flow/providers/OnboardingStateProvider.js +43 -48
  60. package/dist/features/onboarding-flow/providers/OnboardingStateProvider.js.map +1 -1
  61. package/dist/features/onboarding-flow/providers/StateProvider.js +7 -11
  62. package/dist/features/onboarding-flow/providers/StateProvider.js.map +1 -1
  63. package/dist/features/onboarding-flow/providers/WalletConnectionProvider.js +69 -74
  64. package/dist/features/onboarding-flow/providers/WalletConnectionProvider.js.map +1 -1
  65. package/dist/features/onboarding-flow/providers/debug.js +18 -21
  66. package/dist/features/onboarding-flow/providers/debug.js.map +1 -1
  67. package/dist/features/onboarding-flow/providers/index.js +5 -16
  68. package/dist/features/onboarding-flow/providers/index.js.map +1 -1
  69. package/dist/features/onboarding-flow/providers/onboardingStateMachine.js +15 -20
  70. package/dist/features/onboarding-flow/providers/onboardingStateMachine.js.map +1 -1
  71. package/dist/features/onboarding-flow/screens/01-ConnectWalletScreen.js +8 -11
  72. package/dist/features/onboarding-flow/screens/01-ConnectWalletScreen.js.map +1 -1
  73. package/dist/features/onboarding-flow/screens/02-ChainSelectionScreen.js +34 -38
  74. package/dist/features/onboarding-flow/screens/02-ChainSelectionScreen.js.map +1 -1
  75. package/dist/features/onboarding-flow/screens/03-AmountInputScreen.js +47 -51
  76. package/dist/features/onboarding-flow/screens/03-AmountInputScreen.js.map +1 -1
  77. package/dist/features/onboarding-flow/screens/04-DepositProgressScreen.js +8 -12
  78. package/dist/features/onboarding-flow/screens/04-DepositProgressScreen.js.map +1 -1
  79. package/dist/features/onboarding-flow/screens/05-DepositSuccessScreen.js +25 -28
  80. package/dist/features/onboarding-flow/screens/05-DepositSuccessScreen.js.map +1 -1
  81. package/dist/features/onboarding-flow/screens/06-AuthLoadingScreen.js +10 -13
  82. package/dist/features/onboarding-flow/screens/06-AuthLoadingScreen.js.map +1 -1
  83. package/dist/features/onboarding-flow/screens/07-ErrorScreen.js +7 -10
  84. package/dist/features/onboarding-flow/screens/07-ErrorScreen.js.map +1 -1
  85. package/dist/features/onboarding-flow/screens/index.js +7 -23
  86. package/dist/features/onboarding-flow/screens/index.js.map +1 -1
  87. package/dist/features/onboarding-flow/types.js +3 -6
  88. package/dist/features/onboarding-flow/types.js.map +1 -1
  89. package/dist/features/onboarding-flow/utils/depositStorage.js +3 -8
  90. package/dist/features/onboarding-flow/utils/depositStorage.js.map +1 -1
  91. package/dist/features/onboarding-flow/utils/imageUtils.js +3 -9
  92. package/dist/features/onboarding-flow/utils/imageUtils.js.map +1 -1
  93. package/dist/features/onboarding-flow/utils/nordUser.js +2 -38
  94. package/dist/features/onboarding-flow/utils/nordUser.js.map +1 -1
  95. package/dist/features/onboarding-flow/utils/nordUtils.js +5 -12
  96. package/dist/features/onboarding-flow/utils/nordUtils.js.map +1 -1
  97. package/dist/features/onboarding-flow/utils/session.js +14 -17
  98. package/dist/features/onboarding-flow/utils/session.js.map +1 -1
  99. package/dist/features/onboarding-flow/utils/transaction.js +1 -4
  100. package/dist/features/onboarding-flow/utils/transaction.js.map +1 -1
  101. package/dist/features/onboarding-flow/utils/utils.js +8 -16
  102. package/dist/features/onboarding-flow/utils/utils.js.map +1 -1
  103. package/dist/features/onboarding-flow/utils/withImageFallback.js +9 -15
  104. package/dist/features/onboarding-flow/utils/withImageFallback.js.map +1 -1
  105. package/dist/hooks/index.js +2 -18
  106. package/dist/hooks/index.js.map +1 -1
  107. package/dist/hooks/useN1Wallet.js +6 -10
  108. package/dist/hooks/useN1Wallet.js.map +1 -1
  109. package/dist/hooks/useNordUserInitialization.js +31 -34
  110. package/dist/hooks/useNordUserInitialization.js.map +1 -1
  111. package/dist/index.js +7 -21
  112. package/dist/index.js.map +1 -1
  113. package/dist/main.css +2 -0
  114. package/dist/polyfills/windowEthereumGuard.js +1 -2
  115. package/dist/polyfills/windowEthereumGuard.js.map +1 -1
  116. package/dist/providers/LazyWalletProvider.js +38 -74
  117. package/dist/providers/LazyWalletProvider.js.map +1 -1
  118. package/dist/providers/N1WalletProvider.js +70 -109
  119. package/dist/providers/N1WalletProvider.js.map +1 -1
  120. package/dist/providers/ShadowRootWrapper.js +4 -10
  121. package/dist/providers/ShadowRootWrapper.js.map +1 -1
  122. package/dist/providers/WalletErrorBoundary.js +6 -11
  123. package/dist/providers/WalletErrorBoundary.js.map +1 -1
  124. package/dist/styles/embedded-main-css.js +1 -3
  125. package/dist/styles/embedded-main-css.js.map +1 -1
  126. package/dist/styles/main.css +1 -1
  127. package/dist/types/wallet.js +4 -7
  128. package/dist/types/wallet.js.map +1 -1
  129. package/dist/utils/ed25519.js +14 -20
  130. package/dist/utils/ed25519.js.map +1 -1
  131. package/dist/utils/getPseudoName.js +7 -10
  132. package/dist/utils/getPseudoName.js.map +1 -1
  133. package/dist/utils/logger.js +3 -5
  134. package/dist/utils/logger.js.map +1 -1
  135. package/dist/utils/shortenString.js +2 -6
  136. package/dist/utils/shortenString.js.map +1 -1
  137. package/dist/utils/words.js +1 -4
  138. package/dist/utils/words.js.map +1 -1
  139. 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
- Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.useOnboardingState = exports.OnboardingStateProvider = void 0;
15
- var jsx_runtime_1 = require("react/jsx-runtime");
16
- var react_1 = require("react");
17
- var types_1 = require("../types");
18
- var logger_1 = require("../../../utils/logger");
19
- var hooks_1 = require("../../../hooks");
20
- var wallet_1 = require("../../../types/wallet");
21
- var debug_1 = require("./debug");
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 = (0, react_1.useReducer)(onboardingStateMachine_1.onboardingStateReducer, undefined, onboardingStateMachine_1.createInitialOnboardingState), machineState = _b[0], dispatch = _b[1];
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 = (0, react_1.useState)(false), isClosing = _c[0], setIsClosing = _c[1];
32
- var _d = (0, react_1.useState)(false), isDebugOverride = _d[0], setIsDebugOverride = _d[1];
33
- var contextRef = (0, react_1.useRef)(context);
34
- var debugOverrideRef = (0, react_1.useRef)(false);
35
- var lastDepositRequestRef = (0, react_1.useRef)(0);
36
- var prevStateRef = (0, react_1.useRef)(null);
37
- var _e = (0, hooks_1.useN1WalletContext)(), nordUser = _e.nordUser, viewMode = _e.viewMode;
38
- var _f = (0, hooks_1.useN1WalletInternalContext)(), dynamicSdkHasLoaded = _f.dynamicSdkHasLoaded, depositFlowRequestId = _f.depositFlowRequestId, dynamicWallet = _f.dynamicWallet;
39
- (0, react_1.useEffect)(function () {
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 = (0, react_1.useCallback)(function (action) {
39
+ var guardedDispatch = useCallback(function (action) {
43
40
  if (isDebugOverride) {
44
- logger_1.logger.debug("Transition suppressed (debug override \u2192 ".concat(wallet_1.N1ModalViewMode[viewMode], ")"));
41
+ logger.debug("Transition suppressed (debug override \u2192 ".concat(N1ModalViewMode[viewMode], ")"));
45
42
  return;
46
43
  }
47
44
  if (!dynamicSdkHasLoaded) {
48
- logger_1.logger.debug("Ignoring action ".concat(action.type, " until Dynamic SDK is ready"));
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
- (0, react_1.useEffect)(function () {
50
+ useEffect(function () {
54
51
  var prevState = prevStateRef.current;
55
52
  if (prevState && prevState !== state) {
56
- logger_1.logger.debug("State changed from ".concat(prevState, " to ").concat(state));
53
+ logger.debug("State changed from ".concat(prevState, " to ").concat(state));
57
54
  }
58
55
  prevStateRef.current = state;
59
- if (state === types_1.OnboardingStep.CONNECTING_WALLET) {
56
+ if (state === OnboardingStep.CONNECTING_WALLET) {
60
57
  forcedAuthRequestedRef.current = false;
61
58
  }
62
59
  }, [state]);
63
- var forcedAuthRequestedRef = (0, react_1.useRef)(false);
64
- (0, react_1.useEffect)(function () {
60
+ var forcedAuthRequestedRef = useRef(false);
61
+ useEffect(function () {
65
62
  if (!dynamicWallet ||
66
- state !== types_1.OnboardingStep.CONNECTING_WALLET ||
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 = (0, react_1.useCallback)(function (updates) {
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 = (0, react_1.useMemo)(function () { return ({
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
- (0, react_1.useEffect)(function () {
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
- logger_1.logger.warn('Ignoring deposit flow request without an active Nord session');
130
+ logger.warn('Ignoring deposit flow request without an active Nord session');
134
131
  return;
135
132
  }
136
- var nextContext = __assign(__assign({}, types_1.initialOnboardingContext), { hasNordAccount: true, hasActiveSession: true, isDepositOnlyFlow: true });
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
- logger_1.logger.debug('Deposit-only flow activated');
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
- (0, react_1.useEffect)(function () {
146
- var debugTarget = viewMode === wallet_1.N1ModalViewMode.Automatic ? undefined : debug_1.DEBUG_VIEW_TO_FLOW[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
- logger_1.logger.debug("Debug view override: ".concat(wallet_1.N1ModalViewMode[viewMode], " \u2192 ").concat(debugTarget.state));
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: (0, onboardingStateMachine_1.createInitialOnboardingState)(),
160
+ snapshot: createInitialOnboardingState(),
164
161
  });
165
- logger_1.logger.debug('Debug view override cleared; returning to state machine');
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 ((0, jsx_runtime_1.jsx)(OnboardingStateContext.Provider, { value: contextValue, children: children }));
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 = (0, react_1.useContext)(OnboardingStateContext);
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
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StateProvider = void 0;
4
- var jsx_runtime_1 = require("react/jsx-runtime");
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 ((0, jsx_runtime_1.jsx)(OnboardingStateProvider_1.OnboardingStateProvider, { children: (0, jsx_runtime_1.jsx)(WalletConnectionProvider_1.WalletConnectionProvider, { children: (0, jsx_runtime_1.jsx)(DepositFlowProvider_1.DepositFlowProvider, { children: children }) }) }));
11
+ return (_jsx(OnboardingStateProvider, { children: _jsx(WalletConnectionProvider, { children: _jsx(DepositFlowProvider, { children: children }) }) }));
15
12
  };
16
- exports.StateProvider = StateProvider;
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":";;;;AACA,qEAAoE;AACpE,uEAAsE;AACtE,6DAA4D;AAM5D;;;GAGG;AACI,IAAM,aAAa,GAAsC,UAAC,EAAY;QAAV,QAAQ,cAAA;IACzE,OAAO,CACL,uBAAC,iDAAuB,cACtB,uBAAC,mDAAwB,cACvB,uBAAC,yCAAmB,cACjB,QAAQ,GACW,GACG,GACH,CAC3B,CAAC;AACJ,CAAC,CAAC;AAVW,QAAA,aAAa,iBAUxB;AAEF,kBAAe,qBAAa,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"]}
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"]}