@oxyhq/services 5.15.8 → 5.15.9

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.
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _react = require("react");
8
8
  var _reactNative = require("react-native");
9
+ var _socket = _interopRequireDefault(require("socket.io-client"));
9
10
  var _styles = require("../styles");
10
11
  var _OxyContext = require("../context/OxyContext");
11
12
  var _reactNativeQrcodeSvg = _interopRequireDefault(require("react-native-qrcode-svg"));
@@ -20,6 +21,7 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
20
21
  * 1. Scan QR code with Oxy Accounts app
21
22
  * 2. Open Oxy Accounts app directly (via deep link)
22
23
  *
24
+ * Uses WebSocket for real-time authorization updates (with polling fallback).
23
25
  * The Oxy Accounts app is where users manage their cryptographic identity.
24
26
  * This screen should NOT be used within the Accounts app itself.
25
27
  */
@@ -30,6 +32,9 @@ const OXY_ACCOUNTS_WEB_URL = 'https://accounts.oxy.so';
30
32
 
31
33
  // Auth session expiration (5 minutes)
32
34
  const AUTH_SESSION_EXPIRY_MS = 5 * 60 * 1000;
35
+
36
+ // Polling interval (fallback if socket fails)
37
+ const POLLING_INTERVAL_MS = 3000;
33
38
  const OxyAuthScreen = ({
34
39
  navigate,
35
40
  goBack,
@@ -45,20 +50,139 @@ const OxyAuthScreen = ({
45
50
  const [authSession, setAuthSession] = (0, _react.useState)(null);
46
51
  const [isLoading, setIsLoading] = (0, _react.useState)(true);
47
52
  const [error, setError] = (0, _react.useState)(null);
48
- const [isPolling, setIsPolling] = (0, _react.useState)(false);
53
+ const [isWaiting, setIsWaiting] = (0, _react.useState)(false);
54
+ const [connectionType, setConnectionType] = (0, _react.useState)('socket');
55
+ const socketRef = (0, _react.useRef)(null);
49
56
  const pollingIntervalRef = (0, _react.useRef)(null);
57
+ const isProcessingRef = (0, _react.useRef)(false);
58
+
59
+ // Handle successful authorization
60
+ const handleAuthSuccess = (0, _react.useCallback)(async sessionId => {
61
+ if (isProcessingRef.current) return;
62
+ isProcessingRef.current = true;
63
+ try {
64
+ // Get token and user data
65
+ await oxyServices.getTokenBySession(sessionId);
66
+ const user = await oxyServices.getUserBySession(sessionId);
67
+ if (onAuthenticated) {
68
+ onAuthenticated(user);
69
+ }
70
+ } catch (err) {
71
+ if (__DEV__) {
72
+ console.error('Error completing auth:', err);
73
+ }
74
+ setError('Authorization successful but failed to complete sign in. Please try again.');
75
+ isProcessingRef.current = false;
76
+ }
77
+ }, [oxyServices, onAuthenticated]);
78
+
79
+ // Connect to socket for real-time updates
80
+ const connectSocket = (0, _react.useCallback)(sessionToken => {
81
+ const baseURL = oxyServices.getBaseURL();
82
+
83
+ // Connect to the auth-session namespace (no authentication required)
84
+ const socket = (0, _socket.default)(`${baseURL}/auth-session`, {
85
+ transports: ['websocket', 'polling'],
86
+ reconnection: true,
87
+ reconnectionAttempts: 3,
88
+ reconnectionDelay: 1000
89
+ });
90
+ socketRef.current = socket;
91
+ socket.on('connect', () => {
92
+ if (__DEV__) {
93
+ console.log('Auth socket connected');
94
+ }
95
+ // Join the room for this session token
96
+ socket.emit('join', sessionToken);
97
+ setConnectionType('socket');
98
+ });
99
+ socket.on('joined', () => {
100
+ if (__DEV__) {
101
+ console.log('Joined auth session room');
102
+ }
103
+ });
104
+ socket.on('auth_update', payload => {
105
+ if (__DEV__) {
106
+ console.log('Auth update received:', payload);
107
+ }
108
+ if (payload.status === 'authorized' && payload.sessionId) {
109
+ cleanup();
110
+ handleAuthSuccess(payload.sessionId);
111
+ } else if (payload.status === 'cancelled') {
112
+ cleanup();
113
+ setError('Authorization was denied.');
114
+ } else if (payload.status === 'expired') {
115
+ cleanup();
116
+ setError('Session expired. Please try again.');
117
+ }
118
+ });
119
+ socket.on('connect_error', err => {
120
+ if (__DEV__) {
121
+ console.log('Socket connection error, falling back to polling:', err.message);
122
+ }
123
+ // Fall back to polling if socket fails
124
+ socket.disconnect();
125
+ startPolling(sessionToken);
126
+ });
127
+ socket.on('disconnect', () => {
128
+ if (__DEV__) {
129
+ console.log('Auth socket disconnected');
130
+ }
131
+ });
132
+ }, [oxyServices, handleAuthSuccess]);
133
+
134
+ // Start polling for authorization (fallback)
135
+ const startPolling = (0, _react.useCallback)(sessionToken => {
136
+ setConnectionType('polling');
137
+ pollingIntervalRef.current = setInterval(async () => {
138
+ if (isProcessingRef.current) return;
139
+ try {
140
+ const response = await oxyServices.makeRequest('GET', `/api/auth/session/status/${sessionToken}`, undefined, {
141
+ cache: false
142
+ });
143
+ if (response.authorized && response.sessionId) {
144
+ cleanup();
145
+ handleAuthSuccess(response.sessionId);
146
+ } else if (response.status === 'cancelled') {
147
+ cleanup();
148
+ setError('Authorization was denied.');
149
+ } else if (response.status === 'expired') {
150
+ cleanup();
151
+ setError('Session expired. Please try again.');
152
+ }
153
+ } catch (err) {
154
+ // Silent fail for polling - will retry
155
+ if (__DEV__) {
156
+ console.log('Auth polling error:', err);
157
+ }
158
+ }
159
+ }, POLLING_INTERVAL_MS);
160
+ }, [oxyServices, handleAuthSuccess]);
161
+
162
+ // Cleanup socket and polling
163
+ const cleanup = (0, _react.useCallback)(() => {
164
+ setIsWaiting(false);
165
+ if (socketRef.current) {
166
+ socketRef.current.disconnect();
167
+ socketRef.current = null;
168
+ }
169
+ if (pollingIntervalRef.current) {
170
+ clearInterval(pollingIntervalRef.current);
171
+ pollingIntervalRef.current = null;
172
+ }
173
+ }, []);
50
174
 
51
175
  // Generate a new auth session
52
176
  const generateAuthSession = (0, _react.useCallback)(async () => {
53
177
  setIsLoading(true);
54
178
  setError(null);
179
+ isProcessingRef.current = false;
55
180
  try {
56
181
  // Generate a unique session token for this auth request
57
182
  const sessionToken = generateSessionToken();
58
183
  const expiresAt = Date.now() + AUTH_SESSION_EXPIRY_MS;
59
184
 
60
185
  // Register the auth session with the server
61
- // The server will associate this token with the user when they authorize in Accounts
62
186
  await oxyServices.makeRequest('POST', '/api/auth/session/create', {
63
187
  sessionToken,
64
188
  expiresAt,
@@ -70,13 +194,16 @@ const OxyAuthScreen = ({
70
194
  sessionToken,
71
195
  expiresAt
72
196
  });
73
- startPolling(sessionToken);
197
+ setIsWaiting(true);
198
+
199
+ // Try socket first, will fall back to polling if needed
200
+ connectSocket(sessionToken);
74
201
  } catch (err) {
75
202
  setError(err.message || 'Failed to create auth session');
76
203
  } finally {
77
204
  setIsLoading(false);
78
205
  }
79
- }, [oxyServices]);
206
+ }, [oxyServices, connectSocket]);
80
207
 
81
208
  // Generate a random session token
82
209
  const generateSessionToken = () => {
@@ -88,49 +215,12 @@ const OxyAuthScreen = ({
88
215
  return result;
89
216
  };
90
217
 
91
- // Start polling for authorization
92
- const startPolling = (0, _react.useCallback)(sessionToken => {
93
- setIsPolling(true);
94
- pollingIntervalRef.current = setInterval(async () => {
95
- try {
96
- const response = await oxyServices.makeRequest('GET', `/api/auth/session/status/${sessionToken}`, undefined, {
97
- cache: false
98
- });
99
- if (response.authorized && response.sessionId) {
100
- // Authorization successful!
101
- stopPolling();
102
-
103
- // Get token and user data
104
- await oxyServices.getTokenBySession(response.sessionId);
105
- const user = await oxyServices.getUserBySession(response.sessionId);
106
- if (onAuthenticated) {
107
- onAuthenticated(user);
108
- }
109
- }
110
- } catch (err) {
111
- // Silent fail for polling - will retry
112
- if (__DEV__) {
113
- console.log('Auth polling error:', err);
114
- }
115
- }
116
- }, 2000); // Poll every 2 seconds
117
- }, [oxyServices, onAuthenticated]);
118
-
119
- // Stop polling
120
- const stopPolling = (0, _react.useCallback)(() => {
121
- setIsPolling(false);
122
- if (pollingIntervalRef.current) {
123
- clearInterval(pollingIntervalRef.current);
124
- pollingIntervalRef.current = null;
125
- }
126
- }, []);
127
-
128
218
  // Clean up on unmount
129
219
  (0, _react.useEffect)(() => {
130
220
  return () => {
131
- stopPolling();
221
+ cleanup();
132
222
  };
133
- }, [stopPolling]);
223
+ }, [cleanup]);
134
224
 
135
225
  // Initialize auth session
136
226
  (0, _react.useEffect)(() => {
@@ -140,11 +230,11 @@ const OxyAuthScreen = ({
140
230
  // Check if session expired
141
231
  (0, _react.useEffect)(() => {
142
232
  if (authSession && Date.now() > authSession.expiresAt) {
143
- stopPolling();
233
+ cleanup();
144
234
  setAuthSession(null);
145
235
  setError('Session expired. Please try again.');
146
236
  }
147
- }, [authSession, stopPolling]);
237
+ }, [authSession, cleanup]);
148
238
 
149
239
  // Build the QR code data
150
240
  const getQRData = () => {
@@ -179,9 +269,9 @@ const OxyAuthScreen = ({
179
269
 
180
270
  // Refresh session
181
271
  const handleRefresh = (0, _react.useCallback)(() => {
182
- stopPolling();
272
+ cleanup();
183
273
  generateAuthSession();
184
- }, [generateAuthSession, stopPolling]);
274
+ }, [generateAuthSession, cleanup]);
185
275
  if (isLoading) {
186
276
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
187
277
  style: [styles.container, {
@@ -259,37 +349,39 @@ const OxyAuthScreen = ({
259
349
  }],
260
350
  children: "Scan with Oxy Accounts app"
261
351
  })]
262
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
263
- style: styles.dividerContainer,
264
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
265
- style: [styles.divider, {
266
- backgroundColor: colors.border
267
- }]
268
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
269
- style: [styles.dividerText, {
270
- color: colors.secondaryText
352
+ }), _reactNative.Platform.OS !== 'web' && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
353
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
354
+ style: styles.dividerContainer,
355
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
356
+ style: [styles.divider, {
357
+ backgroundColor: colors.border
358
+ }]
359
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
360
+ style: [styles.dividerText, {
361
+ color: colors.secondaryText
362
+ }],
363
+ children: "or"
364
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
365
+ style: [styles.divider, {
366
+ backgroundColor: colors.border
367
+ }]
368
+ })]
369
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
370
+ style: [styles.button, {
371
+ backgroundColor: colors.primary
271
372
  }],
272
- children: "or"
273
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
274
- style: [styles.divider, {
275
- backgroundColor: colors.border
276
- }]
277
- })]
278
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
279
- style: [styles.button, {
280
- backgroundColor: colors.primary
281
- }],
282
- onPress: handleOpenAccounts,
283
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_OxyLogo.default, {
284
- width: 20,
285
- height: 20,
286
- fillColor: "white",
287
- style: styles.buttonIcon
288
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
289
- style: styles.buttonText,
290
- children: "Open Oxy Accounts"
373
+ onPress: handleOpenAccounts,
374
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_OxyLogo.default, {
375
+ width: 20,
376
+ height: 20,
377
+ fillColor: "white",
378
+ style: styles.buttonIcon
379
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
380
+ style: styles.buttonText,
381
+ children: "Open Oxy Accounts"
382
+ })]
291
383
  })]
292
- }), isPolling && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
384
+ }), isWaiting && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
293
385
  style: styles.statusContainer,
294
386
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
295
387
  size: "small",
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_reactNative","_styles","_OxyContext","_reactNativeQrcodeSvg","_interopRequireDefault","_OxyLogo","_jsxRuntime","e","__esModule","default","OXY_ACCOUNTS_SCHEME","OXY_ACCOUNTS_WEB_URL","AUTH_SESSION_EXPIRY_MS","OxyAuthScreen","navigate","goBack","onAuthenticated","theme","themeValue","colors","useThemeColors","oxyServices","signIn","useOxy","authSession","setAuthSession","useState","isLoading","setIsLoading","error","setError","isPolling","setIsPolling","pollingIntervalRef","useRef","generateAuthSession","useCallback","sessionToken","generateSessionToken","expiresAt","Date","now","makeRequest","appId","Platform","OS","cache","startPolling","err","message","chars","result","i","charAt","Math","floor","random","length","current","setInterval","response","undefined","authorized","sessionId","stopPolling","getTokenBySession","user","getUserBySession","__DEV__","console","log","clearInterval","useEffect","getQRData","handleOpenAccounts","deepLinkUrl","webUrl","canOpen","Linking","canOpenURL","openURL","handleRefresh","jsxs","View","style","styles","container","backgroundColor","background","children","jsx","ActivityIndicator","size","color","primary","Text","loadingText","secondaryText","errorText","TouchableOpacity","button","onPress","buttonText","header","width","height","title","text","subtitle","qrContainer","inputBackground","borderColor","border","qrWrapper","value","qrHint","dividerContainer","divider","dividerText","fillColor","buttonIcon","statusContainer","statusText","footer","footerText","footerLink","cancelButton","cancelText","StyleSheet","create","flex","padding","alignItems","justifyContent","marginBottom","fontSize","fontWeight","marginTop","textAlign","borderRadius","borderWidth","flexDirection","marginVertical","marginHorizontal","paddingVertical","paddingHorizontal","marginRight","marginLeft","_default","exports"],"sourceRoot":"../../../../src","sources":["ui/screens/OxyAuthScreen.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_reactNative","_socket","_interopRequireDefault","_styles","_OxyContext","_reactNativeQrcodeSvg","_OxyLogo","_jsxRuntime","e","__esModule","default","OXY_ACCOUNTS_SCHEME","OXY_ACCOUNTS_WEB_URL","AUTH_SESSION_EXPIRY_MS","POLLING_INTERVAL_MS","OxyAuthScreen","navigate","goBack","onAuthenticated","theme","themeValue","colors","useThemeColors","oxyServices","signIn","useOxy","authSession","setAuthSession","useState","isLoading","setIsLoading","error","setError","isWaiting","setIsWaiting","connectionType","setConnectionType","socketRef","useRef","pollingIntervalRef","isProcessingRef","handleAuthSuccess","useCallback","sessionId","current","getTokenBySession","user","getUserBySession","err","__DEV__","console","connectSocket","sessionToken","baseURL","getBaseURL","socket","io","transports","reconnection","reconnectionAttempts","reconnectionDelay","on","log","emit","payload","status","cleanup","message","disconnect","startPolling","setInterval","response","makeRequest","undefined","cache","authorized","clearInterval","generateAuthSession","generateSessionToken","expiresAt","Date","now","appId","Platform","OS","chars","result","i","charAt","Math","floor","random","length","useEffect","getQRData","handleOpenAccounts","deepLinkUrl","webUrl","canOpen","Linking","canOpenURL","openURL","handleRefresh","jsxs","View","style","styles","container","backgroundColor","background","children","jsx","ActivityIndicator","size","color","primary","Text","loadingText","secondaryText","errorText","TouchableOpacity","button","onPress","buttonText","header","width","height","title","text","subtitle","qrContainer","inputBackground","borderColor","border","qrWrapper","value","qrHint","Fragment","dividerContainer","divider","dividerText","fillColor","buttonIcon","statusContainer","statusText","footer","footerText","footerLink","cancelButton","cancelText","StyleSheet","create","flex","padding","alignItems","justifyContent","marginBottom","fontSize","fontWeight","marginTop","textAlign","borderRadius","borderWidth","flexDirection","marginVertical","marginHorizontal","paddingVertical","paddingHorizontal","marginRight","marginLeft","_default","exports"],"sourceRoot":"../../../../src","sources":["ui/screens/OxyAuthScreen.tsx"],"mappings":"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","ignoreList":[]}
@@ -8,24 +8,29 @@
8
8
  * 1. Scan QR code with Oxy Accounts app
9
9
  * 2. Open Oxy Accounts app directly (via deep link)
10
10
  *
11
+ * Uses WebSocket for real-time authorization updates (with polling fallback).
11
12
  * The Oxy Accounts app is where users manage their cryptographic identity.
12
13
  * This screen should NOT be used within the Accounts app itself.
13
14
  */
14
15
 
15
16
  import { useState, useEffect, useCallback, useRef } from 'react';
16
17
  import { View, Text, TouchableOpacity, StyleSheet, Linking, Platform, ActivityIndicator } from 'react-native';
18
+ import io from 'socket.io-client';
17
19
  import { useThemeColors } from '../styles';
18
20
  import { useOxy } from '../context/OxyContext';
19
21
  import QRCode from 'react-native-qrcode-svg';
20
22
  import OxyLogo from '../components/OxyLogo';
21
23
 
22
24
  // Deep link scheme for Oxy Accounts app
23
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
25
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
24
26
  const OXY_ACCOUNTS_SCHEME = 'oxyaccounts://';
25
27
  const OXY_ACCOUNTS_WEB_URL = 'https://accounts.oxy.so';
26
28
 
27
29
  // Auth session expiration (5 minutes)
28
30
  const AUTH_SESSION_EXPIRY_MS = 5 * 60 * 1000;
31
+
32
+ // Polling interval (fallback if socket fails)
33
+ const POLLING_INTERVAL_MS = 3000;
29
34
  const OxyAuthScreen = ({
30
35
  navigate,
31
36
  goBack,
@@ -41,20 +46,139 @@ const OxyAuthScreen = ({
41
46
  const [authSession, setAuthSession] = useState(null);
42
47
  const [isLoading, setIsLoading] = useState(true);
43
48
  const [error, setError] = useState(null);
44
- const [isPolling, setIsPolling] = useState(false);
49
+ const [isWaiting, setIsWaiting] = useState(false);
50
+ const [connectionType, setConnectionType] = useState('socket');
51
+ const socketRef = useRef(null);
45
52
  const pollingIntervalRef = useRef(null);
53
+ const isProcessingRef = useRef(false);
54
+
55
+ // Handle successful authorization
56
+ const handleAuthSuccess = useCallback(async sessionId => {
57
+ if (isProcessingRef.current) return;
58
+ isProcessingRef.current = true;
59
+ try {
60
+ // Get token and user data
61
+ await oxyServices.getTokenBySession(sessionId);
62
+ const user = await oxyServices.getUserBySession(sessionId);
63
+ if (onAuthenticated) {
64
+ onAuthenticated(user);
65
+ }
66
+ } catch (err) {
67
+ if (__DEV__) {
68
+ console.error('Error completing auth:', err);
69
+ }
70
+ setError('Authorization successful but failed to complete sign in. Please try again.');
71
+ isProcessingRef.current = false;
72
+ }
73
+ }, [oxyServices, onAuthenticated]);
74
+
75
+ // Connect to socket for real-time updates
76
+ const connectSocket = useCallback(sessionToken => {
77
+ const baseURL = oxyServices.getBaseURL();
78
+
79
+ // Connect to the auth-session namespace (no authentication required)
80
+ const socket = io(`${baseURL}/auth-session`, {
81
+ transports: ['websocket', 'polling'],
82
+ reconnection: true,
83
+ reconnectionAttempts: 3,
84
+ reconnectionDelay: 1000
85
+ });
86
+ socketRef.current = socket;
87
+ socket.on('connect', () => {
88
+ if (__DEV__) {
89
+ console.log('Auth socket connected');
90
+ }
91
+ // Join the room for this session token
92
+ socket.emit('join', sessionToken);
93
+ setConnectionType('socket');
94
+ });
95
+ socket.on('joined', () => {
96
+ if (__DEV__) {
97
+ console.log('Joined auth session room');
98
+ }
99
+ });
100
+ socket.on('auth_update', payload => {
101
+ if (__DEV__) {
102
+ console.log('Auth update received:', payload);
103
+ }
104
+ if (payload.status === 'authorized' && payload.sessionId) {
105
+ cleanup();
106
+ handleAuthSuccess(payload.sessionId);
107
+ } else if (payload.status === 'cancelled') {
108
+ cleanup();
109
+ setError('Authorization was denied.');
110
+ } else if (payload.status === 'expired') {
111
+ cleanup();
112
+ setError('Session expired. Please try again.');
113
+ }
114
+ });
115
+ socket.on('connect_error', err => {
116
+ if (__DEV__) {
117
+ console.log('Socket connection error, falling back to polling:', err.message);
118
+ }
119
+ // Fall back to polling if socket fails
120
+ socket.disconnect();
121
+ startPolling(sessionToken);
122
+ });
123
+ socket.on('disconnect', () => {
124
+ if (__DEV__) {
125
+ console.log('Auth socket disconnected');
126
+ }
127
+ });
128
+ }, [oxyServices, handleAuthSuccess]);
129
+
130
+ // Start polling for authorization (fallback)
131
+ const startPolling = useCallback(sessionToken => {
132
+ setConnectionType('polling');
133
+ pollingIntervalRef.current = setInterval(async () => {
134
+ if (isProcessingRef.current) return;
135
+ try {
136
+ const response = await oxyServices.makeRequest('GET', `/api/auth/session/status/${sessionToken}`, undefined, {
137
+ cache: false
138
+ });
139
+ if (response.authorized && response.sessionId) {
140
+ cleanup();
141
+ handleAuthSuccess(response.sessionId);
142
+ } else if (response.status === 'cancelled') {
143
+ cleanup();
144
+ setError('Authorization was denied.');
145
+ } else if (response.status === 'expired') {
146
+ cleanup();
147
+ setError('Session expired. Please try again.');
148
+ }
149
+ } catch (err) {
150
+ // Silent fail for polling - will retry
151
+ if (__DEV__) {
152
+ console.log('Auth polling error:', err);
153
+ }
154
+ }
155
+ }, POLLING_INTERVAL_MS);
156
+ }, [oxyServices, handleAuthSuccess]);
157
+
158
+ // Cleanup socket and polling
159
+ const cleanup = useCallback(() => {
160
+ setIsWaiting(false);
161
+ if (socketRef.current) {
162
+ socketRef.current.disconnect();
163
+ socketRef.current = null;
164
+ }
165
+ if (pollingIntervalRef.current) {
166
+ clearInterval(pollingIntervalRef.current);
167
+ pollingIntervalRef.current = null;
168
+ }
169
+ }, []);
46
170
 
47
171
  // Generate a new auth session
48
172
  const generateAuthSession = useCallback(async () => {
49
173
  setIsLoading(true);
50
174
  setError(null);
175
+ isProcessingRef.current = false;
51
176
  try {
52
177
  // Generate a unique session token for this auth request
53
178
  const sessionToken = generateSessionToken();
54
179
  const expiresAt = Date.now() + AUTH_SESSION_EXPIRY_MS;
55
180
 
56
181
  // Register the auth session with the server
57
- // The server will associate this token with the user when they authorize in Accounts
58
182
  await oxyServices.makeRequest('POST', '/api/auth/session/create', {
59
183
  sessionToken,
60
184
  expiresAt,
@@ -66,13 +190,16 @@ const OxyAuthScreen = ({
66
190
  sessionToken,
67
191
  expiresAt
68
192
  });
69
- startPolling(sessionToken);
193
+ setIsWaiting(true);
194
+
195
+ // Try socket first, will fall back to polling if needed
196
+ connectSocket(sessionToken);
70
197
  } catch (err) {
71
198
  setError(err.message || 'Failed to create auth session');
72
199
  } finally {
73
200
  setIsLoading(false);
74
201
  }
75
- }, [oxyServices]);
202
+ }, [oxyServices, connectSocket]);
76
203
 
77
204
  // Generate a random session token
78
205
  const generateSessionToken = () => {
@@ -84,49 +211,12 @@ const OxyAuthScreen = ({
84
211
  return result;
85
212
  };
86
213
 
87
- // Start polling for authorization
88
- const startPolling = useCallback(sessionToken => {
89
- setIsPolling(true);
90
- pollingIntervalRef.current = setInterval(async () => {
91
- try {
92
- const response = await oxyServices.makeRequest('GET', `/api/auth/session/status/${sessionToken}`, undefined, {
93
- cache: false
94
- });
95
- if (response.authorized && response.sessionId) {
96
- // Authorization successful!
97
- stopPolling();
98
-
99
- // Get token and user data
100
- await oxyServices.getTokenBySession(response.sessionId);
101
- const user = await oxyServices.getUserBySession(response.sessionId);
102
- if (onAuthenticated) {
103
- onAuthenticated(user);
104
- }
105
- }
106
- } catch (err) {
107
- // Silent fail for polling - will retry
108
- if (__DEV__) {
109
- console.log('Auth polling error:', err);
110
- }
111
- }
112
- }, 2000); // Poll every 2 seconds
113
- }, [oxyServices, onAuthenticated]);
114
-
115
- // Stop polling
116
- const stopPolling = useCallback(() => {
117
- setIsPolling(false);
118
- if (pollingIntervalRef.current) {
119
- clearInterval(pollingIntervalRef.current);
120
- pollingIntervalRef.current = null;
121
- }
122
- }, []);
123
-
124
214
  // Clean up on unmount
125
215
  useEffect(() => {
126
216
  return () => {
127
- stopPolling();
217
+ cleanup();
128
218
  };
129
- }, [stopPolling]);
219
+ }, [cleanup]);
130
220
 
131
221
  // Initialize auth session
132
222
  useEffect(() => {
@@ -136,11 +226,11 @@ const OxyAuthScreen = ({
136
226
  // Check if session expired
137
227
  useEffect(() => {
138
228
  if (authSession && Date.now() > authSession.expiresAt) {
139
- stopPolling();
229
+ cleanup();
140
230
  setAuthSession(null);
141
231
  setError('Session expired. Please try again.');
142
232
  }
143
- }, [authSession, stopPolling]);
233
+ }, [authSession, cleanup]);
144
234
 
145
235
  // Build the QR code data
146
236
  const getQRData = () => {
@@ -175,9 +265,9 @@ const OxyAuthScreen = ({
175
265
 
176
266
  // Refresh session
177
267
  const handleRefresh = useCallback(() => {
178
- stopPolling();
268
+ cleanup();
179
269
  generateAuthSession();
180
- }, [generateAuthSession, stopPolling]);
270
+ }, [generateAuthSession, cleanup]);
181
271
  if (isLoading) {
182
272
  return /*#__PURE__*/_jsxs(View, {
183
273
  style: [styles.container, {
@@ -255,37 +345,39 @@ const OxyAuthScreen = ({
255
345
  }],
256
346
  children: "Scan with Oxy Accounts app"
257
347
  })]
258
- }), /*#__PURE__*/_jsxs(View, {
259
- style: styles.dividerContainer,
260
- children: [/*#__PURE__*/_jsx(View, {
261
- style: [styles.divider, {
262
- backgroundColor: colors.border
263
- }]
264
- }), /*#__PURE__*/_jsx(Text, {
265
- style: [styles.dividerText, {
266
- color: colors.secondaryText
348
+ }), Platform.OS !== 'web' && /*#__PURE__*/_jsxs(_Fragment, {
349
+ children: [/*#__PURE__*/_jsxs(View, {
350
+ style: styles.dividerContainer,
351
+ children: [/*#__PURE__*/_jsx(View, {
352
+ style: [styles.divider, {
353
+ backgroundColor: colors.border
354
+ }]
355
+ }), /*#__PURE__*/_jsx(Text, {
356
+ style: [styles.dividerText, {
357
+ color: colors.secondaryText
358
+ }],
359
+ children: "or"
360
+ }), /*#__PURE__*/_jsx(View, {
361
+ style: [styles.divider, {
362
+ backgroundColor: colors.border
363
+ }]
364
+ })]
365
+ }), /*#__PURE__*/_jsxs(TouchableOpacity, {
366
+ style: [styles.button, {
367
+ backgroundColor: colors.primary
267
368
  }],
268
- children: "or"
269
- }), /*#__PURE__*/_jsx(View, {
270
- style: [styles.divider, {
271
- backgroundColor: colors.border
272
- }]
273
- })]
274
- }), /*#__PURE__*/_jsxs(TouchableOpacity, {
275
- style: [styles.button, {
276
- backgroundColor: colors.primary
277
- }],
278
- onPress: handleOpenAccounts,
279
- children: [/*#__PURE__*/_jsx(OxyLogo, {
280
- width: 20,
281
- height: 20,
282
- fillColor: "white",
283
- style: styles.buttonIcon
284
- }), /*#__PURE__*/_jsx(Text, {
285
- style: styles.buttonText,
286
- children: "Open Oxy Accounts"
369
+ onPress: handleOpenAccounts,
370
+ children: [/*#__PURE__*/_jsx(OxyLogo, {
371
+ width: 20,
372
+ height: 20,
373
+ fillColor: "white",
374
+ style: styles.buttonIcon
375
+ }), /*#__PURE__*/_jsx(Text, {
376
+ style: styles.buttonText,
377
+ children: "Open Oxy Accounts"
378
+ })]
287
379
  })]
288
- }), isPolling && /*#__PURE__*/_jsxs(View, {
380
+ }), isWaiting && /*#__PURE__*/_jsxs(View, {
289
381
  style: styles.statusContainer,
290
382
  children: [/*#__PURE__*/_jsx(ActivityIndicator, {
291
383
  size: "small",
@@ -1 +1 @@
1
- {"version":3,"names":["useState","useEffect","useCallback","useRef","View","Text","TouchableOpacity","StyleSheet","Linking","Platform","ActivityIndicator","useThemeColors","useOxy","QRCode","OxyLogo","jsx","_jsx","jsxs","_jsxs","OXY_ACCOUNTS_SCHEME","OXY_ACCOUNTS_WEB_URL","AUTH_SESSION_EXPIRY_MS","OxyAuthScreen","navigate","goBack","onAuthenticated","theme","themeValue","colors","oxyServices","signIn","authSession","setAuthSession","isLoading","setIsLoading","error","setError","isPolling","setIsPolling","pollingIntervalRef","generateAuthSession","sessionToken","generateSessionToken","expiresAt","Date","now","makeRequest","appId","OS","cache","startPolling","err","message","chars","result","i","charAt","Math","floor","random","length","current","setInterval","response","undefined","authorized","sessionId","stopPolling","getTokenBySession","user","getUserBySession","__DEV__","console","log","clearInterval","getQRData","handleOpenAccounts","deepLinkUrl","webUrl","canOpen","canOpenURL","openURL","handleRefresh","style","styles","container","backgroundColor","background","children","size","color","primary","loadingText","secondaryText","errorText","button","onPress","buttonText","header","width","height","title","text","subtitle","qrContainer","inputBackground","borderColor","border","qrWrapper","value","qrHint","dividerContainer","divider","dividerText","fillColor","buttonIcon","statusContainer","statusText","footer","footerText","footerLink","cancelButton","cancelText","create","flex","padding","alignItems","justifyContent","marginBottom","fontSize","fontWeight","marginTop","textAlign","borderRadius","borderWidth","flexDirection","marginVertical","marginHorizontal","paddingVertical","paddingHorizontal","marginRight","marginLeft"],"sourceRoot":"../../../../src","sources":["ui/screens/OxyAuthScreen.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useState","useEffect","useCallback","useRef","View","Text","TouchableOpacity","StyleSheet","Linking","Platform","ActivityIndicator","io","useThemeColors","useOxy","QRCode","OxyLogo","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","OXY_ACCOUNTS_SCHEME","OXY_ACCOUNTS_WEB_URL","AUTH_SESSION_EXPIRY_MS","POLLING_INTERVAL_MS","OxyAuthScreen","navigate","goBack","onAuthenticated","theme","themeValue","colors","oxyServices","signIn","authSession","setAuthSession","isLoading","setIsLoading","error","setError","isWaiting","setIsWaiting","connectionType","setConnectionType","socketRef","pollingIntervalRef","isProcessingRef","handleAuthSuccess","sessionId","current","getTokenBySession","user","getUserBySession","err","__DEV__","console","connectSocket","sessionToken","baseURL","getBaseURL","socket","transports","reconnection","reconnectionAttempts","reconnectionDelay","on","log","emit","payload","status","cleanup","message","disconnect","startPolling","setInterval","response","makeRequest","undefined","cache","authorized","clearInterval","generateAuthSession","generateSessionToken","expiresAt","Date","now","appId","OS","chars","result","i","charAt","Math","floor","random","length","getQRData","handleOpenAccounts","deepLinkUrl","webUrl","canOpen","canOpenURL","openURL","handleRefresh","style","styles","container","backgroundColor","background","children","size","color","primary","loadingText","secondaryText","errorText","button","onPress","buttonText","header","width","height","title","text","subtitle","qrContainer","inputBackground","borderColor","border","qrWrapper","value","qrHint","dividerContainer","divider","dividerText","fillColor","buttonIcon","statusContainer","statusText","footer","footerText","footerLink","cancelButton","cancelText","create","flex","padding","alignItems","justifyContent","marginBottom","fontSize","fontWeight","marginTop","textAlign","borderRadius","borderWidth","flexDirection","marginVertical","marginHorizontal","paddingVertical","paddingHorizontal","marginRight","marginLeft"],"sourceRoot":"../../../../src","sources":["ui/screens/OxyAuthScreen.tsx"],"mappings":"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","ignoreList":[]}
@@ -6,6 +6,7 @@
6
6
  * 1. Scan QR code with Oxy Accounts app
7
7
  * 2. Open Oxy Accounts app directly (via deep link)
8
8
  *
9
+ * Uses WebSocket for real-time authorization updates (with polling fallback).
9
10
  * The Oxy Accounts app is where users manage their cryptographic identity.
10
11
  * This screen should NOT be used within the Accounts app itself.
11
12
  */
@@ -1 +1 @@
1
- {"version":3,"file":"OxyAuthScreen.d.ts","sourceRoot":"","sources":["../../../../src/ui/screens/OxyAuthScreen.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAW/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAkB3D,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA6P5C,CAAC;AA2GF,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"OxyAuthScreen.d.ts","sourceRoot":"","sources":["../../../../src/ui/screens/OxyAuthScreen.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAY/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AA6B3D,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAoW5C,CAAC;AA2GF,eAAe,aAAa,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oxyhq/services",
3
- "version": "5.15.8",
3
+ "version": "5.15.9",
4
4
  "description": "Reusable OxyHQ module to handle authentication, user management, karma system, device-based session management and more 🚀",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -6,6 +6,7 @@
6
6
  * 1. Scan QR code with Oxy Accounts app
7
7
  * 2. Open Oxy Accounts app directly (via deep link)
8
8
  *
9
+ * Uses WebSocket for real-time authorization updates (with polling fallback).
9
10
  * The Oxy Accounts app is where users manage their cryptographic identity.
10
11
  * This screen should NOT be used within the Accounts app itself.
11
12
  */
@@ -21,6 +22,7 @@ import {
21
22
  Platform,
22
23
  ActivityIndicator,
23
24
  } from 'react-native';
25
+ import io, { type Socket } from 'socket.io-client';
24
26
  import type { BaseScreenProps } from '../types/navigation';
25
27
  import { useThemeColors } from '../styles';
26
28
  import { useOxy } from '../context/OxyContext';
@@ -34,11 +36,22 @@ const OXY_ACCOUNTS_WEB_URL = 'https://accounts.oxy.so';
34
36
  // Auth session expiration (5 minutes)
35
37
  const AUTH_SESSION_EXPIRY_MS = 5 * 60 * 1000;
36
38
 
39
+ // Polling interval (fallback if socket fails)
40
+ const POLLING_INTERVAL_MS = 3000;
41
+
37
42
  interface AuthSession {
38
43
  sessionToken: string;
39
44
  expiresAt: number;
40
45
  }
41
46
 
47
+ interface AuthUpdatePayload {
48
+ status: 'authorized' | 'cancelled' | 'expired';
49
+ sessionId?: string;
50
+ publicKey?: string;
51
+ userId?: string;
52
+ username?: string;
53
+ }
54
+
42
55
  const OxyAuthScreen: React.FC<BaseScreenProps> = ({
43
56
  navigate,
44
57
  goBack,
@@ -52,13 +65,151 @@ const OxyAuthScreen: React.FC<BaseScreenProps> = ({
52
65
  const [authSession, setAuthSession] = useState<AuthSession | null>(null);
53
66
  const [isLoading, setIsLoading] = useState(true);
54
67
  const [error, setError] = useState<string | null>(null);
55
- const [isPolling, setIsPolling] = useState(false);
68
+ const [isWaiting, setIsWaiting] = useState(false);
69
+ const [connectionType, setConnectionType] = useState<'socket' | 'polling'>('socket');
70
+
71
+ const socketRef = useRef<Socket | null>(null);
56
72
  const pollingIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);
73
+ const isProcessingRef = useRef(false);
74
+
75
+ // Handle successful authorization
76
+ const handleAuthSuccess = useCallback(async (sessionId: string) => {
77
+ if (isProcessingRef.current) return;
78
+ isProcessingRef.current = true;
79
+
80
+ try {
81
+ // Get token and user data
82
+ await oxyServices.getTokenBySession(sessionId);
83
+ const user = await oxyServices.getUserBySession(sessionId);
84
+
85
+ if (onAuthenticated) {
86
+ onAuthenticated(user);
87
+ }
88
+ } catch (err) {
89
+ if (__DEV__) {
90
+ console.error('Error completing auth:', err);
91
+ }
92
+ setError('Authorization successful but failed to complete sign in. Please try again.');
93
+ isProcessingRef.current = false;
94
+ }
95
+ }, [oxyServices, onAuthenticated]);
96
+
97
+ // Connect to socket for real-time updates
98
+ const connectSocket = useCallback((sessionToken: string) => {
99
+ const baseURL = oxyServices.getBaseURL();
100
+
101
+ // Connect to the auth-session namespace (no authentication required)
102
+ const socket = io(`${baseURL}/auth-session`, {
103
+ transports: ['websocket', 'polling'],
104
+ reconnection: true,
105
+ reconnectionAttempts: 3,
106
+ reconnectionDelay: 1000,
107
+ });
108
+
109
+ socketRef.current = socket;
110
+
111
+ socket.on('connect', () => {
112
+ if (__DEV__) {
113
+ console.log('Auth socket connected');
114
+ }
115
+ // Join the room for this session token
116
+ socket.emit('join', sessionToken);
117
+ setConnectionType('socket');
118
+ });
119
+
120
+ socket.on('joined', () => {
121
+ if (__DEV__) {
122
+ console.log('Joined auth session room');
123
+ }
124
+ });
125
+
126
+ socket.on('auth_update', (payload: AuthUpdatePayload) => {
127
+ if (__DEV__) {
128
+ console.log('Auth update received:', payload);
129
+ }
130
+
131
+ if (payload.status === 'authorized' && payload.sessionId) {
132
+ cleanup();
133
+ handleAuthSuccess(payload.sessionId);
134
+ } else if (payload.status === 'cancelled') {
135
+ cleanup();
136
+ setError('Authorization was denied.');
137
+ } else if (payload.status === 'expired') {
138
+ cleanup();
139
+ setError('Session expired. Please try again.');
140
+ }
141
+ });
142
+
143
+ socket.on('connect_error', (err) => {
144
+ if (__DEV__) {
145
+ console.log('Socket connection error, falling back to polling:', err.message);
146
+ }
147
+ // Fall back to polling if socket fails
148
+ socket.disconnect();
149
+ startPolling(sessionToken);
150
+ });
151
+
152
+ socket.on('disconnect', () => {
153
+ if (__DEV__) {
154
+ console.log('Auth socket disconnected');
155
+ }
156
+ });
157
+ }, [oxyServices, handleAuthSuccess]);
158
+
159
+ // Start polling for authorization (fallback)
160
+ const startPolling = useCallback((sessionToken: string) => {
161
+ setConnectionType('polling');
162
+
163
+ pollingIntervalRef.current = setInterval(async () => {
164
+ if (isProcessingRef.current) return;
165
+
166
+ try {
167
+ const response = await oxyServices.makeRequest<{
168
+ authorized: boolean;
169
+ sessionId?: string;
170
+ publicKey?: string;
171
+ status?: string;
172
+ }>('GET', `/api/auth/session/status/${sessionToken}`, undefined, { cache: false });
173
+
174
+ if (response.authorized && response.sessionId) {
175
+ cleanup();
176
+ handleAuthSuccess(response.sessionId);
177
+ } else if (response.status === 'cancelled') {
178
+ cleanup();
179
+ setError('Authorization was denied.');
180
+ } else if (response.status === 'expired') {
181
+ cleanup();
182
+ setError('Session expired. Please try again.');
183
+ }
184
+ } catch (err) {
185
+ // Silent fail for polling - will retry
186
+ if (__DEV__) {
187
+ console.log('Auth polling error:', err);
188
+ }
189
+ }
190
+ }, POLLING_INTERVAL_MS);
191
+ }, [oxyServices, handleAuthSuccess]);
192
+
193
+ // Cleanup socket and polling
194
+ const cleanup = useCallback(() => {
195
+ setIsWaiting(false);
196
+
197
+ if (socketRef.current) {
198
+ socketRef.current.disconnect();
199
+ socketRef.current = null;
200
+ }
201
+
202
+ if (pollingIntervalRef.current) {
203
+ clearInterval(pollingIntervalRef.current);
204
+ pollingIntervalRef.current = null;
205
+ }
206
+ }, []);
57
207
 
58
208
  // Generate a new auth session
59
209
  const generateAuthSession = useCallback(async () => {
60
210
  setIsLoading(true);
61
211
  setError(null);
212
+ isProcessingRef.current = false;
62
213
 
63
214
  try {
64
215
  // Generate a unique session token for this auth request
@@ -66,7 +217,6 @@ const OxyAuthScreen: React.FC<BaseScreenProps> = ({
66
217
  const expiresAt = Date.now() + AUTH_SESSION_EXPIRY_MS;
67
218
 
68
219
  // Register the auth session with the server
69
- // The server will associate this token with the user when they authorize in Accounts
70
220
  await oxyServices.makeRequest('POST', '/api/auth/session/create', {
71
221
  sessionToken,
72
222
  expiresAt,
@@ -74,13 +224,16 @@ const OxyAuthScreen: React.FC<BaseScreenProps> = ({
74
224
  }, { cache: false });
75
225
 
76
226
  setAuthSession({ sessionToken, expiresAt });
77
- startPolling(sessionToken);
227
+ setIsWaiting(true);
228
+
229
+ // Try socket first, will fall back to polling if needed
230
+ connectSocket(sessionToken);
78
231
  } catch (err: any) {
79
232
  setError(err.message || 'Failed to create auth session');
80
233
  } finally {
81
234
  setIsLoading(false);
82
235
  }
83
- }, [oxyServices]);
236
+ }, [oxyServices, connectSocket]);
84
237
 
85
238
  // Generate a random session token
86
239
  const generateSessionToken = (): string => {
@@ -92,54 +245,12 @@ const OxyAuthScreen: React.FC<BaseScreenProps> = ({
92
245
  return result;
93
246
  };
94
247
 
95
- // Start polling for authorization
96
- const startPolling = useCallback((sessionToken: string) => {
97
- setIsPolling(true);
98
-
99
- pollingIntervalRef.current = setInterval(async () => {
100
- try {
101
- const response = await oxyServices.makeRequest<{
102
- authorized: boolean;
103
- sessionId?: string;
104
- publicKey?: string;
105
- }>('GET', `/api/auth/session/status/${sessionToken}`, undefined, { cache: false });
106
-
107
- if (response.authorized && response.sessionId) {
108
- // Authorization successful!
109
- stopPolling();
110
-
111
- // Get token and user data
112
- await oxyServices.getTokenBySession(response.sessionId);
113
- const user = await oxyServices.getUserBySession(response.sessionId);
114
-
115
- if (onAuthenticated) {
116
- onAuthenticated(user);
117
- }
118
- }
119
- } catch (err) {
120
- // Silent fail for polling - will retry
121
- if (__DEV__) {
122
- console.log('Auth polling error:', err);
123
- }
124
- }
125
- }, 2000); // Poll every 2 seconds
126
- }, [oxyServices, onAuthenticated]);
127
-
128
- // Stop polling
129
- const stopPolling = useCallback(() => {
130
- setIsPolling(false);
131
- if (pollingIntervalRef.current) {
132
- clearInterval(pollingIntervalRef.current);
133
- pollingIntervalRef.current = null;
134
- }
135
- }, []);
136
-
137
248
  // Clean up on unmount
138
249
  useEffect(() => {
139
250
  return () => {
140
- stopPolling();
251
+ cleanup();
141
252
  };
142
- }, [stopPolling]);
253
+ }, [cleanup]);
143
254
 
144
255
  // Initialize auth session
145
256
  useEffect(() => {
@@ -149,11 +260,11 @@ const OxyAuthScreen: React.FC<BaseScreenProps> = ({
149
260
  // Check if session expired
150
261
  useEffect(() => {
151
262
  if (authSession && Date.now() > authSession.expiresAt) {
152
- stopPolling();
263
+ cleanup();
153
264
  setAuthSession(null);
154
265
  setError('Session expired. Please try again.');
155
266
  }
156
- }, [authSession, stopPolling]);
267
+ }, [authSession, cleanup]);
157
268
 
158
269
  // Build the QR code data
159
270
  const getQRData = (): string => {
@@ -191,9 +302,9 @@ const OxyAuthScreen: React.FC<BaseScreenProps> = ({
191
302
 
192
303
  // Refresh session
193
304
  const handleRefresh = useCallback(() => {
194
- stopPolling();
305
+ cleanup();
195
306
  generateAuthSession();
196
- }, [generateAuthSession, stopPolling]);
307
+ }, [generateAuthSession, cleanup]);
197
308
 
198
309
  if (isLoading) {
199
310
  return (
@@ -246,24 +357,29 @@ const OxyAuthScreen: React.FC<BaseScreenProps> = ({
246
357
  </Text>
247
358
  </View>
248
359
 
249
- {/* Divider */}
250
- <View style={styles.dividerContainer}>
251
- <View style={[styles.divider, { backgroundColor: colors.border }]} />
252
- <Text style={[styles.dividerText, { color: colors.secondaryText }]}>or</Text>
253
- <View style={[styles.divider, { backgroundColor: colors.border }]} />
254
- </View>
255
-
256
- {/* Open Accounts Button */}
257
- <TouchableOpacity
258
- style={[styles.button, { backgroundColor: colors.primary }]}
259
- onPress={handleOpenAccounts}
260
- >
261
- <OxyLogo width={20} height={20} fillColor="white" style={styles.buttonIcon} />
262
- <Text style={styles.buttonText}>Open Oxy Accounts</Text>
263
- </TouchableOpacity>
360
+ {/* Divider and Open Accounts Button - Only show on native platforms */}
361
+ {Platform.OS !== 'web' && (
362
+ <>
363
+ {/* Divider */}
364
+ <View style={styles.dividerContainer}>
365
+ <View style={[styles.divider, { backgroundColor: colors.border }]} />
366
+ <Text style={[styles.dividerText, { color: colors.secondaryText }]}>or</Text>
367
+ <View style={[styles.divider, { backgroundColor: colors.border }]} />
368
+ </View>
369
+
370
+ {/* Open Accounts Button */}
371
+ <TouchableOpacity
372
+ style={[styles.button, { backgroundColor: colors.primary }]}
373
+ onPress={handleOpenAccounts}
374
+ >
375
+ <OxyLogo width={20} height={20} fillColor="white" style={styles.buttonIcon} />
376
+ <Text style={styles.buttonText}>Open Oxy Accounts</Text>
377
+ </TouchableOpacity>
378
+ </>
379
+ )}
264
380
 
265
381
  {/* Status */}
266
- {isPolling && (
382
+ {isWaiting && (
267
383
  <View style={styles.statusContainer}>
268
384
  <ActivityIndicator size="small" color={colors.primary} />
269
385
  <Text style={[styles.statusText, { color: colors.secondaryText }]}>