@oxyhq/services 14.1.0 → 15.0.0
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/lib/commonjs/index.js +0 -17
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/ui/components/SignInAccountChooser.js +189 -0
- package/lib/commonjs/ui/components/SignInAccountChooser.js.map +1 -0
- package/lib/commonjs/ui/components/SignInModal.js +350 -131
- package/lib/commonjs/ui/components/SignInModal.js.map +1 -1
- package/lib/commonjs/ui/context/OxyContext.js +340 -1547
- package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
- package/lib/commonjs/ui/context/hooks/useAuthOperations.js +61 -64
- package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
- package/lib/commonjs/ui/hooks/useAuth.js +14 -33
- package/lib/commonjs/ui/hooks/useAuth.js.map +1 -1
- package/lib/commonjs/ui/hooks/usePasswordSignIn.js +170 -0
- package/lib/commonjs/ui/hooks/usePasswordSignIn.js.map +1 -0
- package/lib/commonjs/ui/hooks/useProfileEditing.js +2 -5
- package/lib/commonjs/ui/hooks/useProfileEditing.js.map +1 -1
- package/lib/commonjs/ui/hooks/useSessionManagement.js +2 -2
- package/lib/commonjs/ui/hooks/useSessionManagement.js.map +1 -1
- package/lib/commonjs/ui/navigation/routes.js +1 -0
- package/lib/commonjs/ui/navigation/routes.js.map +1 -1
- package/lib/commonjs/ui/screens/EditProfileFieldScreen.js +93 -68
- package/lib/commonjs/ui/screens/EditProfileFieldScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/EditProfileScreen.js +187 -0
- package/lib/commonjs/ui/screens/EditProfileScreen.js.map +1 -0
- package/lib/commonjs/ui/screens/ManageAccountScreen.js +3 -7
- package/lib/commonjs/ui/screens/ManageAccountScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/OxyAuthScreen.js +231 -95
- package/lib/commonjs/ui/screens/OxyAuthScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/ProfileScreen.js +15 -2
- package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/linkFormat.js +38 -0
- package/lib/commonjs/ui/screens/linkFormat.js.map +1 -0
- package/lib/commonjs/ui/session/authStore.js +146 -0
- package/lib/commonjs/ui/session/authStore.js.map +1 -0
- package/lib/commonjs/ui/session/createSessionClient.js +23 -17
- package/lib/commonjs/ui/session/createSessionClient.js.map +1 -1
- package/lib/commonjs/ui/session/index.js +13 -7
- package/lib/commonjs/ui/session/index.js.map +1 -1
- package/lib/commonjs/ui/session/tokenTransport.js +19 -31
- package/lib/commonjs/ui/session/tokenTransport.js.map +1 -1
- package/lib/commonjs/ui/utils/isWebBrowser.js +13 -0
- package/lib/commonjs/ui/utils/isWebBrowser.js.map +1 -0
- package/lib/commonjs/utils/deviceFlowSignIn.js +13 -16
- package/lib/commonjs/utils/deviceFlowSignIn.js.map +1 -1
- package/lib/module/index.js +0 -5
- package/lib/module/index.js.map +1 -1
- package/lib/module/ui/components/SignInAccountChooser.js +183 -0
- package/lib/module/ui/components/SignInAccountChooser.js.map +1 -0
- package/lib/module/ui/components/SignInModal.js +352 -134
- package/lib/module/ui/components/SignInModal.js.map +1 -1
- package/lib/module/ui/context/OxyContext.js +342 -1551
- package/lib/module/ui/context/OxyContext.js.map +1 -1
- package/lib/module/ui/context/hooks/useAuthOperations.js +60 -63
- package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
- package/lib/module/ui/hooks/useAuth.js +14 -33
- package/lib/module/ui/hooks/useAuth.js.map +1 -1
- package/lib/module/ui/hooks/usePasswordSignIn.js +165 -0
- package/lib/module/ui/hooks/usePasswordSignIn.js.map +1 -0
- package/lib/module/ui/hooks/useProfileEditing.js +2 -5
- package/lib/module/ui/hooks/useProfileEditing.js.map +1 -1
- package/lib/module/ui/hooks/useSessionManagement.js +1 -1
- package/lib/module/ui/hooks/useSessionManagement.js.map +1 -1
- package/lib/module/ui/navigation/routes.js +1 -0
- package/lib/module/ui/navigation/routes.js.map +1 -1
- package/lib/module/ui/screens/EditProfileFieldScreen.js +91 -66
- package/lib/module/ui/screens/EditProfileFieldScreen.js.map +1 -1
- package/lib/module/ui/screens/EditProfileScreen.js +182 -0
- package/lib/module/ui/screens/EditProfileScreen.js.map +1 -0
- package/lib/module/ui/screens/ManageAccountScreen.js +3 -7
- package/lib/module/ui/screens/ManageAccountScreen.js.map +1 -1
- package/lib/module/ui/screens/OxyAuthScreen.js +233 -97
- package/lib/module/ui/screens/OxyAuthScreen.js.map +1 -1
- package/lib/module/ui/screens/ProfileScreen.js +15 -2
- package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/module/ui/screens/linkFormat.js +31 -0
- package/lib/module/ui/screens/linkFormat.js.map +1 -0
- package/lib/module/ui/session/authStore.js +143 -0
- package/lib/module/ui/session/authStore.js.map +1 -0
- package/lib/module/ui/session/createSessionClient.js +22 -16
- package/lib/module/ui/session/createSessionClient.js.map +1 -1
- package/lib/module/ui/session/index.js +9 -9
- package/lib/module/ui/session/index.js.map +1 -1
- package/lib/module/ui/session/tokenTransport.js +20 -33
- package/lib/module/ui/session/tokenTransport.js.map +1 -1
- package/lib/module/ui/utils/isWebBrowser.js +11 -0
- package/lib/module/ui/utils/isWebBrowser.js.map +1 -0
- package/lib/module/utils/deviceFlowSignIn.js +14 -17
- package/lib/module/utils/deviceFlowSignIn.js.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +0 -1
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/SignInAccountChooser.d.ts +29 -0
- package/lib/typescript/commonjs/ui/components/SignInAccountChooser.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/SignInModal.d.ts +15 -10
- package/lib/typescript/commonjs/ui/components/SignInModal.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/OxyContext.d.ts +36 -42
- package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/hooks/useAuthOperations.d.ts +18 -23
- package/lib/typescript/commonjs/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts +0 -2
- package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useAuth.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/usePasswordSignIn.d.ts +31 -0
- package/lib/typescript/commonjs/ui/hooks/usePasswordSignIn.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/hooks/useProfileEditing.d.ts +0 -1
- package/lib/typescript/commonjs/ui/hooks/useProfileEditing.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/navigation/routes.d.ts +1 -1
- package/lib/typescript/commonjs/ui/navigation/routes.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/EditProfileFieldScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/EditProfileScreen.d.ts +14 -0
- package/lib/typescript/commonjs/ui/screens/EditProfileScreen.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/screens/ManageAccountScreen.d.ts +1 -1
- package/lib/typescript/commonjs/ui/screens/ManageAccountScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/OxyAuthScreen.d.ts +13 -12
- package/lib/typescript/commonjs/ui/screens/OxyAuthScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/ProfileScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/linkFormat.d.ts +23 -0
- package/lib/typescript/commonjs/ui/screens/linkFormat.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/session/authStore.d.ts +33 -0
- package/lib/typescript/commonjs/ui/session/authStore.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/session/createSessionClient.d.ts +19 -15
- package/lib/typescript/commonjs/ui/session/createSessionClient.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/session/index.d.ts +9 -9
- package/lib/typescript/commonjs/ui/session/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/session/tokenTransport.d.ts +13 -19
- package/lib/typescript/commonjs/ui/session/tokenTransport.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/utils/isWebBrowser.d.ts +9 -0
- package/lib/typescript/commonjs/ui/utils/isWebBrowser.d.ts.map +1 -0
- package/lib/typescript/commonjs/utils/deviceFlowSignIn.d.ts +15 -13
- package/lib/typescript/commonjs/utils/deviceFlowSignIn.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +0 -1
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/SignInAccountChooser.d.ts +29 -0
- package/lib/typescript/module/ui/components/SignInAccountChooser.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/SignInModal.d.ts +15 -10
- package/lib/typescript/module/ui/components/SignInModal.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/OxyContext.d.ts +36 -42
- package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/hooks/useAuthOperations.d.ts +18 -23
- package/lib/typescript/module/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts +0 -2
- package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useAuth.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/usePasswordSignIn.d.ts +31 -0
- package/lib/typescript/module/ui/hooks/usePasswordSignIn.d.ts.map +1 -0
- package/lib/typescript/module/ui/hooks/useProfileEditing.d.ts +0 -1
- package/lib/typescript/module/ui/hooks/useProfileEditing.d.ts.map +1 -1
- package/lib/typescript/module/ui/navigation/routes.d.ts +1 -1
- package/lib/typescript/module/ui/navigation/routes.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/EditProfileFieldScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/EditProfileScreen.d.ts +14 -0
- package/lib/typescript/module/ui/screens/EditProfileScreen.d.ts.map +1 -0
- package/lib/typescript/module/ui/screens/ManageAccountScreen.d.ts +1 -1
- package/lib/typescript/module/ui/screens/ManageAccountScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/OxyAuthScreen.d.ts +13 -12
- package/lib/typescript/module/ui/screens/OxyAuthScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/ProfileScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/linkFormat.d.ts +23 -0
- package/lib/typescript/module/ui/screens/linkFormat.d.ts.map +1 -0
- package/lib/typescript/module/ui/session/authStore.d.ts +33 -0
- package/lib/typescript/module/ui/session/authStore.d.ts.map +1 -0
- package/lib/typescript/module/ui/session/createSessionClient.d.ts +19 -15
- package/lib/typescript/module/ui/session/createSessionClient.d.ts.map +1 -1
- package/lib/typescript/module/ui/session/index.d.ts +9 -9
- package/lib/typescript/module/ui/session/index.d.ts.map +1 -1
- package/lib/typescript/module/ui/session/tokenTransport.d.ts +13 -19
- package/lib/typescript/module/ui/session/tokenTransport.d.ts.map +1 -1
- package/lib/typescript/module/ui/utils/isWebBrowser.d.ts +9 -0
- package/lib/typescript/module/ui/utils/isWebBrowser.d.ts.map +1 -0
- package/lib/typescript/module/utils/deviceFlowSignIn.d.ts +15 -13
- package/lib/typescript/module/utils/deviceFlowSignIn.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/index.ts +0 -4
- package/src/ui/components/SignInAccountChooser.tsx +162 -0
- package/src/ui/components/SignInModal.tsx +309 -139
- package/src/ui/context/OxyContext.tsx +532 -1785
- package/src/ui/context/hooks/useAuthOperations.ts +65 -76
- package/src/ui/hooks/useAuth.ts +14 -35
- package/src/ui/hooks/usePasswordSignIn.ts +207 -0
- package/src/ui/hooks/useProfileEditing.ts +2 -8
- package/src/ui/hooks/useSessionManagement.ts +1 -1
- package/src/ui/navigation/routes.ts +2 -0
- package/src/ui/screens/EditProfileFieldScreen.tsx +102 -66
- package/src/ui/screens/EditProfileScreen.tsx +155 -0
- package/src/ui/screens/ManageAccountScreen.tsx +3 -7
- package/src/ui/screens/OxyAuthScreen.tsx +259 -112
- package/src/ui/screens/ProfileScreen.tsx +15 -2
- package/src/ui/screens/__tests__/linkFormat.test.ts +73 -0
- package/src/ui/screens/linkFormat.ts +37 -0
- package/src/ui/session/__tests__/createSessionClient.test.ts +22 -7
- package/src/ui/session/__tests__/tokenTransport.test.ts +37 -49
- package/src/ui/session/authStore.ts +164 -0
- package/src/ui/session/createSessionClient.ts +30 -17
- package/src/ui/session/index.ts +10 -9
- package/src/ui/session/tokenTransport.ts +26 -36
- package/src/ui/utils/isWebBrowser.ts +8 -0
- package/src/utils/__tests__/deviceFlowSignIn.test.ts +50 -131
- package/src/utils/deviceFlowSignIn.ts +19 -26
- package/lib/commonjs/ui/context/inSessionTokenRefresh.js +0 -243
- package/lib/commonjs/ui/context/inSessionTokenRefresh.js.map +0 -1
- package/lib/commonjs/ui/context/silentSessionRestore.js +0 -56
- package/lib/commonjs/ui/context/silentSessionRestore.js.map +0 -1
- package/lib/commonjs/ui/hooks/useWebSSO.js +0 -28
- package/lib/commonjs/ui/hooks/useWebSSO.js.map +0 -1
- package/lib/commonjs/ui/session/projectSessionState.js +0 -86
- package/lib/commonjs/ui/session/projectSessionState.js.map +0 -1
- package/lib/commonjs/ui/session/sessionClientHost.js +0 -30
- package/lib/commonjs/ui/session/sessionClientHost.js.map +0 -1
- package/lib/commonjs/ui/utils/activeAuthuser.js +0 -142
- package/lib/commonjs/ui/utils/activeAuthuser.js.map +0 -1
- package/lib/commonjs/utils/crossApex.js +0 -74
- package/lib/commonjs/utils/crossApex.js.map +0 -1
- package/lib/module/ui/context/inSessionTokenRefresh.js +0 -238
- package/lib/module/ui/context/inSessionTokenRefresh.js.map +0 -1
- package/lib/module/ui/context/silentSessionRestore.js +0 -53
- package/lib/module/ui/context/silentSessionRestore.js.map +0 -1
- package/lib/module/ui/hooks/useWebSSO.js +0 -24
- package/lib/module/ui/hooks/useWebSSO.js.map +0 -1
- package/lib/module/ui/session/projectSessionState.js +0 -79
- package/lib/module/ui/session/projectSessionState.js.map +0 -1
- package/lib/module/ui/session/sessionClientHost.js +0 -26
- package/lib/module/ui/session/sessionClientHost.js.map +0 -1
- package/lib/module/ui/utils/activeAuthuser.js +0 -134
- package/lib/module/ui/utils/activeAuthuser.js.map +0 -1
- package/lib/module/utils/crossApex.js +0 -69
- package/lib/module/utils/crossApex.js.map +0 -1
- package/lib/typescript/commonjs/ui/context/inSessionTokenRefresh.d.ts +0 -106
- package/lib/typescript/commonjs/ui/context/inSessionTokenRefresh.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/context/silentSessionRestore.d.ts +0 -36
- package/lib/typescript/commonjs/ui/context/silentSessionRestore.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/hooks/useWebSSO.d.ts +0 -19
- package/lib/typescript/commonjs/ui/hooks/useWebSSO.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/session/projectSessionState.d.ts +0 -45
- package/lib/typescript/commonjs/ui/session/projectSessionState.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/session/sessionClientHost.d.ts +0 -14
- package/lib/typescript/commonjs/ui/session/sessionClientHost.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/utils/activeAuthuser.d.ts +0 -67
- package/lib/typescript/commonjs/ui/utils/activeAuthuser.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/crossApex.d.ts +0 -55
- package/lib/typescript/commonjs/utils/crossApex.d.ts.map +0 -1
- package/lib/typescript/module/ui/context/inSessionTokenRefresh.d.ts +0 -106
- package/lib/typescript/module/ui/context/inSessionTokenRefresh.d.ts.map +0 -1
- package/lib/typescript/module/ui/context/silentSessionRestore.d.ts +0 -36
- package/lib/typescript/module/ui/context/silentSessionRestore.d.ts.map +0 -1
- package/lib/typescript/module/ui/hooks/useWebSSO.d.ts +0 -19
- package/lib/typescript/module/ui/hooks/useWebSSO.d.ts.map +0 -1
- package/lib/typescript/module/ui/session/projectSessionState.d.ts +0 -45
- package/lib/typescript/module/ui/session/projectSessionState.d.ts.map +0 -1
- package/lib/typescript/module/ui/session/sessionClientHost.d.ts +0 -14
- package/lib/typescript/module/ui/session/sessionClientHost.d.ts.map +0 -1
- package/lib/typescript/module/ui/utils/activeAuthuser.d.ts +0 -67
- package/lib/typescript/module/ui/utils/activeAuthuser.d.ts.map +0 -1
- package/lib/typescript/module/utils/crossApex.d.ts +0 -55
- package/lib/typescript/module/utils/crossApex.d.ts.map +0 -1
- package/src/ui/context/inSessionTokenRefresh.ts +0 -264
- package/src/ui/context/silentSessionRestore.ts +0 -53
- package/src/ui/hooks/useWebSSO.ts +0 -23
- package/src/ui/session/__tests__/projectSessionState.test.ts +0 -114
- package/src/ui/session/__tests__/sessionClientHost.test.ts +0 -43
- package/src/ui/session/projectSessionState.ts +0 -85
- package/src/ui/session/sessionClientHost.ts +0 -27
- package/src/ui/utils/activeAuthuser.ts +0 -142
- package/src/utils/crossApex.ts +0 -75
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createPlatformAuthStateStore = createPlatformAuthStateStore;
|
|
7
|
+
var _core = require("@oxyhq/core");
|
|
8
|
+
var _storageHelpers = require("../utils/storageHelpers.js");
|
|
9
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); } /**
|
|
10
|
+
* Platform `AuthStateStore` for `@oxyhq/services`.
|
|
11
|
+
*
|
|
12
|
+
* The device-first session model persists the rotating refresh-token family
|
|
13
|
+
* head per origin (web) / per device (native). `@oxyhq/core` owns the store
|
|
14
|
+
* shape + logic (`createWebAuthStateStore` / `createNativeAuthStateStore`); this
|
|
15
|
+
* module only supplies the platform storage seam and wires the native device
|
|
16
|
+
* token to the SHARED keychain so every native Oxy app joins one DeviceSession:
|
|
17
|
+
*
|
|
18
|
+
* - web → `createWebAuthStateStore()` (localStorage, in-memory fallback).
|
|
19
|
+
* - native → `createNativeAuthStateStore(secureKV)` for the SESSION blob
|
|
20
|
+
* (refresh token) over `expo-secure-store` (AsyncStorage fallback), with the
|
|
21
|
+
* long-lived DEVICE token delegated to `KeyManager`'s shared keychain
|
|
22
|
+
* (`group.so.oxy.shared`) instead of per-app storage — so an in-app login on
|
|
23
|
+
* any native Oxy app attributes to the SAME server-side DeviceSession.
|
|
24
|
+
*
|
|
25
|
+
* `expo-secure-store` is loaded via a runtime-computed dynamic import (the same
|
|
26
|
+
* optional-native-module pattern `OxyProvider` uses for netinfo / keyboard
|
|
27
|
+
* controller), so the web bundle never pulls it and a device without it falls
|
|
28
|
+
* back to AsyncStorage rather than crashing.
|
|
29
|
+
*/
|
|
30
|
+
// Variable indirection so Metro's static analyzer never traces expo-secure-store
|
|
31
|
+
// into the web bundle; the module is native-only and optional.
|
|
32
|
+
const SECURE_STORE_MODULE = 'expo-secure-store';
|
|
33
|
+
let secureStorePromise = null;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Resolve the `expo-secure-store` module once (memoised), or `null` when it is
|
|
37
|
+
* unavailable — callers then fall back to AsyncStorage. Never throws.
|
|
38
|
+
*/
|
|
39
|
+
function loadSecureStore() {
|
|
40
|
+
if (!secureStorePromise) {
|
|
41
|
+
const moduleName = SECURE_STORE_MODULE;
|
|
42
|
+
secureStorePromise = (specifier => new Promise(r => r(`${specifier}`)).then(s => _interopRequireWildcard(require(s))))(moduleName).then(mod => {
|
|
43
|
+
if (typeof mod.getItemAsync === 'function' && typeof mod.setItemAsync === 'function' && typeof mod.deleteItemAsync === 'function') {
|
|
44
|
+
return {
|
|
45
|
+
getItemAsync: mod.getItemAsync.bind(mod),
|
|
46
|
+
setItemAsync: mod.setItemAsync.bind(mod),
|
|
47
|
+
deleteItemAsync: mod.deleteItemAsync.bind(mod)
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}).catch(() => null);
|
|
52
|
+
}
|
|
53
|
+
return secureStorePromise;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* A native `NativeKeyValueStorage` that prefers `expo-secure-store` (encrypted
|
|
58
|
+
* at rest) and falls back to AsyncStorage when SecureStore is not installed.
|
|
59
|
+
* The SecureStore module is resolved lazily on first access so construction
|
|
60
|
+
* stays synchronous.
|
|
61
|
+
*/
|
|
62
|
+
function createNativeSecureKeyValueStorage() {
|
|
63
|
+
let asyncStorage = null;
|
|
64
|
+
const getAsyncStorage = async () => {
|
|
65
|
+
if (!asyncStorage) {
|
|
66
|
+
asyncStorage = await (0, _storageHelpers.createPlatformStorage)();
|
|
67
|
+
}
|
|
68
|
+
return asyncStorage;
|
|
69
|
+
};
|
|
70
|
+
return {
|
|
71
|
+
getItem: async key => {
|
|
72
|
+
const secure = await loadSecureStore();
|
|
73
|
+
if (secure) {
|
|
74
|
+
return secure.getItemAsync(key);
|
|
75
|
+
}
|
|
76
|
+
return (await getAsyncStorage()).getItem(key);
|
|
77
|
+
},
|
|
78
|
+
setItem: async (key, value) => {
|
|
79
|
+
const secure = await loadSecureStore();
|
|
80
|
+
if (secure) {
|
|
81
|
+
await secure.setItemAsync(key, value);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
await (await getAsyncStorage()).setItem(key, value);
|
|
85
|
+
},
|
|
86
|
+
removeItem: async key => {
|
|
87
|
+
const secure = await loadSecureStore();
|
|
88
|
+
if (secure) {
|
|
89
|
+
await secure.deleteItemAsync(key);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
await (await getAsyncStorage()).removeItem(key);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Build the platform {@link AuthStateStore} for this runtime.
|
|
99
|
+
*
|
|
100
|
+
* Native additionally routes the device token through the shared keychain so
|
|
101
|
+
* every native Oxy app shares one server-side DeviceSession; the session blob
|
|
102
|
+
* (refresh token) stays per-app in SecureStore. Best-effort keychain access —
|
|
103
|
+
* a locked/failed shared-keychain read degrades to "no device token" rather
|
|
104
|
+
* than throwing out of cold boot / refresh.
|
|
105
|
+
*/
|
|
106
|
+
function createPlatformAuthStateStore() {
|
|
107
|
+
if (!(0, _storageHelpers.isReactNative)()) {
|
|
108
|
+
return (0, _core.createWebAuthStateStore)();
|
|
109
|
+
}
|
|
110
|
+
const base = (0, _core.createNativeAuthStateStore)(createNativeSecureKeyValueStorage());
|
|
111
|
+
return {
|
|
112
|
+
...base,
|
|
113
|
+
loadDeviceToken: async () => {
|
|
114
|
+
try {
|
|
115
|
+
return await _core.KeyManager.getSharedDeviceToken();
|
|
116
|
+
} catch (error) {
|
|
117
|
+
_core.logger.debug('Shared device-token read failed (treating as none)', {
|
|
118
|
+
component: 'authStore',
|
|
119
|
+
method: 'loadDeviceToken'
|
|
120
|
+
}, error);
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
saveDeviceToken: async token => {
|
|
125
|
+
try {
|
|
126
|
+
await _core.KeyManager.setSharedDeviceToken(token);
|
|
127
|
+
} catch (error) {
|
|
128
|
+
_core.logger.debug('Shared device-token write failed (non-fatal)', {
|
|
129
|
+
component: 'authStore',
|
|
130
|
+
method: 'saveDeviceToken'
|
|
131
|
+
}, error);
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
clearDeviceToken: async () => {
|
|
135
|
+
try {
|
|
136
|
+
await _core.KeyManager.clearSharedDeviceToken();
|
|
137
|
+
} catch (error) {
|
|
138
|
+
_core.logger.debug('Shared device-token clear failed (non-fatal)', {
|
|
139
|
+
component: 'authStore',
|
|
140
|
+
method: 'clearDeviceToken'
|
|
141
|
+
}, error);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=authStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_core","require","_storageHelpers","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","SECURE_STORE_MODULE","secureStorePromise","loadSecureStore","moduleName","specifier","Promise","then","s","mod","getItemAsync","setItemAsync","deleteItemAsync","bind","catch","createNativeSecureKeyValueStorage","asyncStorage","getAsyncStorage","createPlatformStorage","getItem","key","secure","setItem","value","removeItem","createPlatformAuthStateStore","isReactNative","createWebAuthStateStore","base","createNativeAuthStateStore","loadDeviceToken","KeyManager","getSharedDeviceToken","error","logger","debug","component","method","saveDeviceToken","token","setSharedDeviceToken","clearDeviceToken","clearSharedDeviceToken"],"sourceRoot":"../../../../src","sources":["ui/session/authStore.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -4,30 +4,36 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.createSessionClient = createSessionClient;
|
|
7
|
-
var _core = require("@oxyhq/core");
|
|
8
7
|
var _socket = require("socket.io-client");
|
|
9
|
-
var
|
|
8
|
+
var _core = require("@oxyhq/core");
|
|
10
9
|
var _tokenTransport = require("./tokenTransport.js");
|
|
11
10
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
11
|
+
* Wire a `SessionClient` for `@oxyhq/services`.
|
|
12
|
+
*
|
|
13
|
+
* The platform-agnostic parts (host adapter, client, projection helpers) live
|
|
14
|
+
* ONCE in `@oxyhq/core`; this thin factory only injects the pieces specific to
|
|
15
|
+
* the RN/Expo SDK:
|
|
16
|
+
*
|
|
17
|
+
* - `socket.io-client`'s `io`, STATICALLY imported (socket.io-client is a real
|
|
18
|
+
* dependency of `@oxyhq/services`) so realtime session sync never relies on
|
|
19
|
+
* core's lazy dynamic import of a bare specifier — bundler-fragile in
|
|
20
|
+
* Metro/Expo-web against the published core dist.
|
|
21
|
+
* - the device-first {@link createTokenTransport}, which mints a fallback token
|
|
22
|
+
* by rotating the persisted refresh family (`store`).
|
|
17
23
|
*
|
|
18
|
-
* `
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* the app-bundled static import is the reliable source of the factory.
|
|
24
|
+
* `onUnauthenticated` fires when an applied device state has zero accounts (a
|
|
25
|
+
* device signout-all): the provider clears the persisted store + local state so
|
|
26
|
+
* a reload does not try to restore a dead session. The host is returned
|
|
27
|
+
* alongside the client so the caller can call `host.setCurrentAccountId(...)`
|
|
28
|
+
* as the active account changes.
|
|
24
29
|
*/
|
|
25
|
-
function createSessionClient(oxyServices) {
|
|
26
|
-
const host = (0,
|
|
27
|
-
const transport = (0, _tokenTransport.createTokenTransport)(oxyServices);
|
|
30
|
+
function createSessionClient(oxyServices, store, onUnauthenticated) {
|
|
31
|
+
const host = (0, _core.createSessionClientHost)(oxyServices);
|
|
32
|
+
const transport = (0, _tokenTransport.createTokenTransport)(oxyServices, store);
|
|
28
33
|
const client = new _core.SessionClient(host, {
|
|
29
34
|
transport,
|
|
30
|
-
socketFactory: _socket.io
|
|
35
|
+
socketFactory: _socket.io,
|
|
36
|
+
onUnauthenticated
|
|
31
37
|
});
|
|
32
38
|
return {
|
|
33
39
|
client,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["_socket","require","_core","_tokenTransport","createSessionClient","oxyServices","store","onUnauthenticated","host","createSessionClientHost","transport","createTokenTransport","client","SessionClient","socketFactory","io"],"sourceRoot":"../../../../src","sources":["ui/session/createSessionClient.ts"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAMA,IAAAE,eAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,mBAAmBA,CACjCC,WAAwB,EACxBC,KAAqB,EACrBC,iBAA8B,EAI9B;EACA,MAAMC,IAAI,GAAG,IAAAC,6BAAuB,EAACJ,WAAW,CAAC;EACjD,MAAMK,SAAS,GAAG,IAAAC,oCAAoB,EAACN,WAAW,EAAEC,KAAK,CAAC;EAC1D,MAAMM,MAAM,GAAG,IAAIC,mBAAa,CAACL,IAAI,EAAE;IAAEE,SAAS;IAAEI,aAAa,EAAEC,UAAE;IAAER;EAAkB,CAAC,CAAC;EAC3F,OAAO;IAAEK,MAAM;IAAEJ;EAAK,CAAC;AACzB","ignoreList":[]}
|
|
@@ -6,19 +6,25 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
Object.defineProperty(exports, "accountIdsOf", {
|
|
7
7
|
enumerable: true,
|
|
8
8
|
get: function () {
|
|
9
|
-
return
|
|
9
|
+
return _core.accountIdsOf;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
12
|
Object.defineProperty(exports, "activeSessionIdOf", {
|
|
13
13
|
enumerable: true,
|
|
14
14
|
get: function () {
|
|
15
|
-
return
|
|
15
|
+
return _core.activeSessionIdOf;
|
|
16
16
|
}
|
|
17
17
|
});
|
|
18
18
|
Object.defineProperty(exports, "activeUserOf", {
|
|
19
19
|
enumerable: true,
|
|
20
20
|
get: function () {
|
|
21
|
-
return
|
|
21
|
+
return _core.activeUserOf;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports, "createPlatformAuthStateStore", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function () {
|
|
27
|
+
return _authStore.createPlatformAuthStateStore;
|
|
22
28
|
}
|
|
23
29
|
});
|
|
24
30
|
Object.defineProperty(exports, "createSessionClient", {
|
|
@@ -30,7 +36,7 @@ Object.defineProperty(exports, "createSessionClient", {
|
|
|
30
36
|
Object.defineProperty(exports, "createSessionClientHost", {
|
|
31
37
|
enumerable: true,
|
|
32
38
|
get: function () {
|
|
33
|
-
return
|
|
39
|
+
return _core.createSessionClientHost;
|
|
34
40
|
}
|
|
35
41
|
});
|
|
36
42
|
Object.defineProperty(exports, "createTokenTransport", {
|
|
@@ -42,11 +48,11 @@ Object.defineProperty(exports, "createTokenTransport", {
|
|
|
42
48
|
Object.defineProperty(exports, "deviceStateToClientSessions", {
|
|
43
49
|
enumerable: true,
|
|
44
50
|
get: function () {
|
|
45
|
-
return
|
|
51
|
+
return _core.deviceStateToClientSessions;
|
|
46
52
|
}
|
|
47
53
|
});
|
|
48
54
|
var _createSessionClient = require("./createSessionClient.js");
|
|
49
|
-
var _sessionClientHost = require("./sessionClientHost.js");
|
|
50
55
|
var _tokenTransport = require("./tokenTransport.js");
|
|
51
|
-
var
|
|
56
|
+
var _authStore = require("./authStore.js");
|
|
57
|
+
var _core = require("@oxyhq/core");
|
|
52
58
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_createSessionClient","require","
|
|
1
|
+
{"version":3,"names":["_createSessionClient","require","_tokenTransport","_authStore","_core"],"sourceRoot":"../../../../src","sources":["ui/session/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,IAAAA,oBAAA,GAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA","ignoreList":[]}
|
|
@@ -5,40 +5,25 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.createTokenTransport = createTokenTransport;
|
|
7
7
|
var _core = require("@oxyhq/core");
|
|
8
|
-
var _useWebSSO = require("../hooks/useWebSSO.js");
|
|
9
8
|
/**
|
|
10
|
-
* Platform `TokenTransport` for `SessionClient
|
|
11
|
-
* none is currently held, reusing the SAME primitives `OxyContext`'s cold
|
|
12
|
-
* boot already relies on (never re-implemented here):
|
|
9
|
+
* Platform `TokenTransport` for `SessionClient` (device-first model).
|
|
13
10
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
11
|
+
* `ensureActiveToken` is the fallback the client uses when a `session_state`
|
|
12
|
+
* push arrived WITHOUT an embedded `activeToken` and the app currently holds no
|
|
13
|
+
* bearer. It mints one through the ONE unified refresh path
|
|
14
|
+
* (`refreshPersistedSession`): rotate the persisted refresh-token family
|
|
15
|
+
* (`POST /auth/refresh-token`) and, on native, fall back to the shared-keychain
|
|
16
|
+
* re-mint. There is no FedCM/silent-iframe arm anymore — the per-origin
|
|
17
|
+
* persisted refresh token is the durable web credential.
|
|
16
18
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* `ensureActiveToken` treats a PRESENT token as sufficient in this phase; it
|
|
21
|
-
* does not decode/match the token's subject against `state.activeAccountId`
|
|
22
|
-
* (that refinement is Fase 3-B). Account switching itself is server-driven
|
|
23
|
-
* via the `activeToken` carried in the sync envelope — this transport is
|
|
24
|
-
* only the fallback used when the envelope carried no token.
|
|
25
|
-
*
|
|
26
|
-
* A failed mint is logged and swallowed: it must never throw out of
|
|
27
|
-
* `ensureActiveToken`, since that would crash the caller (the SessionClient
|
|
28
|
-
* socket handler in Fase 3-B).
|
|
19
|
+
* Concurrent pushes coalesce onto one in-flight mint. A failure is logged and
|
|
20
|
+
* swallowed: this method must never throw out (it runs inside the socket state
|
|
21
|
+
* handler).
|
|
29
22
|
*/
|
|
30
|
-
function createTokenTransport(oxyServices) {
|
|
31
|
-
// Coalesces concurrent mints: `SessionClient.applyState` can fire
|
|
32
|
-
// `ensureActiveToken` on rapid successive state pushes; a second call while a
|
|
33
|
-
// mint is already in flight must reuse it, not spawn a second silent iframe /
|
|
34
|
-
// shared-key challenge round-trip.
|
|
23
|
+
function createTokenTransport(oxyServices, store) {
|
|
35
24
|
let inFlightMint = null;
|
|
36
25
|
return {
|
|
37
26
|
async ensureActiveToken(state) {
|
|
38
|
-
// Read the current token defensively: it is an in-memory getter that
|
|
39
|
-
// should never throw, but the documented contract is that this method
|
|
40
|
-
// never throws out — so a surprising throw is logged and treated as "no
|
|
41
|
-
// token" (fall through to mint) rather than rejecting the promise.
|
|
42
27
|
try {
|
|
43
28
|
if (oxyServices.getAccessToken()) {
|
|
44
29
|
return;
|
|
@@ -53,15 +38,18 @@ function createTokenTransport(oxyServices) {
|
|
|
53
38
|
}
|
|
54
39
|
inFlightMint = (async () => {
|
|
55
40
|
try {
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
41
|
+
const token = await (0, _core.refreshPersistedSession)({
|
|
42
|
+
oxy: oxyServices,
|
|
43
|
+
store
|
|
44
|
+
});
|
|
45
|
+
if (!token) {
|
|
46
|
+
_core.logger.debug('ensureActiveToken: refresh produced no session', {
|
|
59
47
|
component: 'TokenTransport',
|
|
60
48
|
deviceId: state.deviceId
|
|
61
49
|
});
|
|
62
50
|
}
|
|
63
51
|
} catch (error) {
|
|
64
|
-
_core.logger.warn('ensureActiveToken:
|
|
52
|
+
_core.logger.warn('ensureActiveToken: refresh failed', {
|
|
65
53
|
component: 'TokenTransport'
|
|
66
54
|
}, error);
|
|
67
55
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_core","require","
|
|
1
|
+
{"version":3,"names":["_core","require","createTokenTransport","oxyServices","store","inFlightMint","ensureActiveToken","state","getAccessToken","error","logger","warn","component","token","refreshPersistedSession","oxy","debug","deviceId"],"sourceRoot":"../../../../src","sources":["ui/session/tokenTransport.ts"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,oBAAoBA,CAClCC,WAAwB,EACxBC,KAAqB,EACL;EAChB,IAAIC,YAAkC,GAAG,IAAI;EAE7C,OAAO;IACL,MAAMC,iBAAiBA,CAACC,KAAyB,EAAiB;MAChE,IAAI;QACF,IAAIJ,WAAW,CAACK,cAAc,CAAC,CAAC,EAAE;UAChC;QACF;MACF,CAAC,CAAC,OAAOC,KAAK,EAAE;QACdC,YAAM,CAACC,IAAI,CAAC,yCAAyC,EAAE;UAAEC,SAAS,EAAE;QAAiB,CAAC,EAAEH,KAAK,CAAC;MAChG;MAEA,IAAIJ,YAAY,EAAE;QAChB,OAAOA,YAAY;MACrB;MAEAA,YAAY,GAAG,CAAC,YAAY;QAC1B,IAAI;UACF,MAAMQ,KAAK,GAAG,MAAM,IAAAC,6BAAuB,EAAC;YAAEC,GAAG,EAAEZ,WAAW;YAAEC;UAAM,CAAC,CAAC;UACxE,IAAI,CAACS,KAAK,EAAE;YACVH,YAAM,CAACM,KAAK,CAAC,gDAAgD,EAAE;cAC7DJ,SAAS,EAAE,gBAAgB;cAC3BK,QAAQ,EAAEV,KAAK,CAACU;YAClB,CAAC,CAAC;UACJ;QACF,CAAC,CAAC,OAAOR,KAAK,EAAE;UACdC,YAAM,CAACC,IAAI,CAAC,mCAAmC,EAAE;YAAEC,SAAS,EAAE;UAAiB,CAAC,EAAEH,KAAK,CAAC;QAC1F;MACF,CAAC,EAAE,CAAC;MAEJ,IAAI;QACF,MAAMJ,YAAY;MACpB,CAAC,SAAS;QACRA,YAAY,GAAG,IAAI;MACrB;IACF;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "isWebBrowser", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _core.isWebBrowser;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
var _core = require("@oxyhq/core");
|
|
13
|
+
//# sourceMappingURL=isWebBrowser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_core","require"],"sourceRoot":"../../../../src","sources":["ui/utils/isWebBrowser.ts"],"mappings":";;;;;;;;;;;AAOA,IAAAA,KAAA,GAAAC,OAAA","ignoreList":[]}
|
|
@@ -44,8 +44,6 @@ var _core = require("@oxyhq/core");
|
|
|
44
44
|
* trivially unit-testable with a stub and never pulls the RN/Expo runtime into
|
|
45
45
|
* a test bundle.
|
|
46
46
|
*
|
|
47
|
-
* Extends {@link SsoEstablishClient} (`requestSsoEstablishUrl`) so the WEB
|
|
48
|
-
* post-claim durable-session hop can be driven off the same client.
|
|
49
47
|
*/
|
|
50
48
|
|
|
51
49
|
/**
|
|
@@ -61,8 +59,7 @@ async function completeDeviceFlowSignIn({
|
|
|
61
59
|
oxyServices,
|
|
62
60
|
sessionId,
|
|
63
61
|
sessionToken,
|
|
64
|
-
commitSession
|
|
65
|
-
establishDeps
|
|
62
|
+
commitSession
|
|
66
63
|
}) {
|
|
67
64
|
// 1) Plant the bearer + refresh tokens. The claim response is also persisted
|
|
68
65
|
// to native shared secure storage so a later cold boot has a bearer before
|
|
@@ -88,25 +85,25 @@ async function completeDeviceFlowSignIn({
|
|
|
88
85
|
|
|
89
86
|
// 2) Bearer is now planted — commit the session through the same path a
|
|
90
87
|
// fresh sign-in uses so it is registered into the device's
|
|
91
|
-
// server-authoritative session set instead of an account switch.
|
|
88
|
+
// server-authoritative session set instead of an account switch. Thread
|
|
89
|
+
// the rotating refresh token so the commit funnel persists a durable
|
|
90
|
+
// session that survives a reload.
|
|
92
91
|
await commitSession({
|
|
93
92
|
sessionId: claimed.sessionId || sessionId,
|
|
94
93
|
deviceId: claimed.deviceId ?? '',
|
|
95
94
|
expiresAt: claimed.expiresAt ?? '',
|
|
96
95
|
user: minimalUser,
|
|
97
|
-
accessToken: claimed.accessToken
|
|
96
|
+
accessToken: claimed.accessToken,
|
|
97
|
+
...(claimed.refreshToken ? {
|
|
98
|
+
refreshToken: claimed.refreshToken
|
|
99
|
+
} : {})
|
|
98
100
|
});
|
|
99
101
|
|
|
100
|
-
//
|
|
101
|
-
//
|
|
102
|
-
//
|
|
103
|
-
//
|
|
104
|
-
|
|
105
|
-
// throws) — an establish failure leaves the committed session as-is. On web
|
|
106
|
-
// success it navigates away, so it is the LAST step: the browser tears the
|
|
107
|
-
// page down on the next tick, after `claimed.user` is returned to the
|
|
108
|
-
// caller's `onSignedIn`.
|
|
109
|
-
await (0, _core.establishIdpSessionAfterClaim)(oxyServices, establishDeps ?? {});
|
|
102
|
+
// The commit funnel persisted the rotating refresh family and registered the
|
|
103
|
+
// account into the device set, so a reload restores the session locally (web:
|
|
104
|
+
// stored-tokens / same-apex web-session; native: shared keychain) WITHOUT any
|
|
105
|
+
// IdP `fedcm_session` cookie or top-level establish hop.
|
|
106
|
+
|
|
110
107
|
return claimed.user;
|
|
111
108
|
}
|
|
112
109
|
//# sourceMappingURL=deviceFlowSignIn.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_core","require","completeDeviceFlowSignIn","oxyServices","sessionId","sessionToken","commitSession","
|
|
1
|
+
{"version":3,"names":["_core","require","completeDeviceFlowSignIn","oxyServices","sessionId","sessionToken","commitSession","claimed","claimSessionByToken","accessToken","KeyManager","storeSharedSession","user","Error","minimalUser","id","username","name","avatar","undefined","deviceId","expiresAt","refreshToken"],"sourceRoot":"../../../src","sources":["utils/deviceFlowSignIn.ts"],"mappings":";;;;;;AAiCA,IAAAA,KAAA,GAAAC,OAAA;AAjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAsBA;AACA;AACA;AACA;AACA;AACA;AACA;;AAkCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAeC,wBAAwBA,CAAC;EAC7CC,WAAW;EACXC,SAAS;EACTC,YAAY;EACZC;AAC+B,CAAC,EAAiB;EACjD;EACA;EACA;EACA,MAAMC,OAAO,GAAG,MAAMJ,WAAW,CAACK,mBAAmB,CAACH,YAAY,CAAC;EACnE,IAAIE,OAAO,EAAEE,WAAW,EAAE;IACxB,MAAMC,gBAAU,CAACC,kBAAkB,CAACJ,OAAO,CAACH,SAAS,IAAIA,SAAS,EAAEG,OAAO,CAACE,WAAW,CAAC;EAC1F;EAEA,IAAI,CAACF,OAAO,EAAEE,WAAW,IAAI,CAACF,OAAO,CAACK,IAAI,EAAE;IAC1C,MAAM,IAAIC,KAAK,CAAC,mDAAmD,CAAC;EACtE;;EAEA;EACA;EACA;EACA;EACA,MAAMC,WAA4B,GAAG;IACnCC,EAAE,EAAER,OAAO,CAACK,IAAI,CAACG,EAAE;IACnBC,QAAQ,EAAET,OAAO,CAACK,IAAI,CAACI,QAAQ;IAC/BC,IAAI,EAAEV,OAAO,CAACK,IAAI,CAACK,IAAI;IACvBC,MAAM,EAAEX,OAAO,CAACK,IAAI,CAACM,MAAM,IAAIC;EACjC,CAAC;;EAED;EACA;EACA;EACA;EACA;EACA,MAAMb,aAAa,CAAC;IAClBF,SAAS,EAAEG,OAAO,CAACH,SAAS,IAAIA,SAAS;IACzCgB,QAAQ,EAAEb,OAAO,CAACa,QAAQ,IAAI,EAAE;IAChCC,SAAS,EAAEd,OAAO,CAACc,SAAS,IAAI,EAAE;IAClCT,IAAI,EAAEE,WAAW;IACjBL,WAAW,EAAEF,OAAO,CAACE,WAAW;IAChC,IAAIF,OAAO,CAACe,YAAY,GAAG;MAAEA,YAAY,EAAEf,OAAO,CAACe;IAAa,CAAC,GAAG,CAAC,CAAC;EACxE,CAAC,CAAC;;EAEF;EACA;EACA;EACA;;EAEA,OAAOf,OAAO,CAACK,IAAI;AACrB","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -89,11 +89,6 @@ export { useOnlineStatus } from "./ui/hooks/useOnlineStatus.js";
|
|
|
89
89
|
// Error handlers
|
|
90
90
|
// ---------------------------------------------------------------------------
|
|
91
91
|
export { handleAuthError, isInvalidSessionError, isTimeoutOrNetworkError, extractErrorMessage } from "./ui/utils/errorHandlers.js";
|
|
92
|
-
// Thrown by `signInWithPassword` / `signIn` on a cross-apex web RP, where a
|
|
93
|
-
// direct (non-IdP) sign-in would not survive a page reload — apps catch it to
|
|
94
|
-
// route the user to the durable "Continue with Oxy" IdP flow.
|
|
95
|
-
export { CrossApexDirectSignInError, isCrossApexWeb } from "./utils/crossApex.js";
|
|
96
|
-
|
|
97
92
|
// ---------------------------------------------------------------------------
|
|
98
93
|
// File filtering
|
|
99
94
|
// ---------------------------------------------------------------------------
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["setPlatformOS","Platform","OS","default","OxyProvider","useOxy","useAuth","FontLoader","useAuthStore","useAssetStore","useAssets","useAssetsStore","useAsset","useUploadProgress","useAssetLoading","useAssetErrors","useAssetsByApp","useAssetsByEntity","useAssetUsageCount","useIsAssetLinked","setOxyAssetInstance","useFileDownloadUrl","useFollow","useFollowerCounts","useUserProfile","useUserProfiles","useCurrentUser","useUserById","useUserByUsername","useUsersBySessions","usePrivacySettings","useAuthorizedApps","useSessions","useSession","useDeviceSessions","useUserDevices","useSecurityInfo","useAccountStorageUsage","useSecurityActivity","useRecentSecurityActivity","useInfiniteSecurityActivity","useUserSubscription","useUserPayments","useUserWallet","useUserWalletTransactions","useUpdateProfile","useUploadAvatar","useUpdateAccountSettings","useUpdatePrivacySettings","useUpdateNotificationPreferences","useUpdateUserPreferences","useRevokeAuthorizedApp","useUploadFile","useSwitchSession","useLogoutSession","useLogoutAll","useUpdateDeviceName","useRemoveDevice","createProfileMutation","createGenericMutation","mutationKeys","queryKeys","invalidateAccountQueries","invalidateUserQueries","invalidateSessionQueries","invalidateDeviceQueries","invalidatePrivacyQueries","invalidateSecurityQueries","invalidateStorageQueries","invalidatePaymentsQueries","invalidateConnectedAppsQueries","useMutationStatus","useOnlineStatus","handleAuthError","isInvalidSessionError","isTimeoutOrNetworkError","extractErrorMessage","
|
|
1
|
+
{"version":3,"names":["setPlatformOS","Platform","OS","default","OxyProvider","useOxy","useAuth","FontLoader","useAuthStore","useAssetStore","useAssets","useAssetsStore","useAsset","useUploadProgress","useAssetLoading","useAssetErrors","useAssetsByApp","useAssetsByEntity","useAssetUsageCount","useIsAssetLinked","setOxyAssetInstance","useFileDownloadUrl","useFollow","useFollowerCounts","useUserProfile","useUserProfiles","useCurrentUser","useUserById","useUserByUsername","useUsersBySessions","usePrivacySettings","useAuthorizedApps","useSessions","useSession","useDeviceSessions","useUserDevices","useSecurityInfo","useAccountStorageUsage","useSecurityActivity","useRecentSecurityActivity","useInfiniteSecurityActivity","useUserSubscription","useUserPayments","useUserWallet","useUserWalletTransactions","useUpdateProfile","useUploadAvatar","useUpdateAccountSettings","useUpdatePrivacySettings","useUpdateNotificationPreferences","useUpdateUserPreferences","useRevokeAuthorizedApp","useUploadFile","useSwitchSession","useLogoutSession","useLogoutAll","useUpdateDeviceName","useRemoveDevice","createProfileMutation","createGenericMutation","mutationKeys","queryKeys","invalidateAccountQueries","invalidateUserQueries","invalidateSessionQueries","invalidateDeviceQueries","invalidatePrivacyQueries","invalidateSecurityQueries","invalidateStorageQueries","invalidatePaymentsQueries","invalidateConnectedAppsQueries","useMutationStatus","useOnlineStatus","handleAuthError","isInvalidSessionError","isTimeoutOrNetworkError","extractErrorMessage","useFileFiltering","Avatar","OxySignInButton","OxyAuthPrompt","OxyLogo","FollowButton","LogoIcon","LogoText","AccountMenu","AccountMenuButton","ProfileButton","ProfileMenu","AccountSwitcher","AccountSwitcherView","useSwitchableAccounts","ManageAccountScreen","NotificationsScreen","PreferencesScreen","ConnectedAppsScreen","AccountSwitcherScreen","CreateAccountScreen","AccountMembersScreen","AccountSettingsScreen","showBottomSheet","closeBottomSheet","showSignInModal","hideSignInModal"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
|