@oxy.so/services 13.13.0 → 13.14.1
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/ui/context/OxyContext.js +8 -2
- package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
- package/lib/commonjs/ui/hooks/accountQueryPersistence.js +6 -2
- package/lib/commonjs/ui/hooks/accountQueryPersistence.js.map +1 -1
- package/lib/commonjs/ui/hooks/queryClient.js +1 -1
- package/lib/commonjs/ui/hooks/queryClient.js.map +1 -1
- package/lib/commonjs/ui/hooks/useAuth.js +5 -2
- package/lib/commonjs/ui/hooks/useAuth.js.map +1 -1
- package/lib/commonjs/ui/hooks/useKnownBearerSubject.js +20 -0
- package/lib/commonjs/ui/hooks/useKnownBearerSubject.js.map +1 -0
- package/lib/module/ui/context/OxyContext.js +8 -2
- package/lib/module/ui/context/OxyContext.js.map +1 -1
- package/lib/module/ui/hooks/accountQueryPersistence.js +6 -2
- package/lib/module/ui/hooks/accountQueryPersistence.js.map +1 -1
- package/lib/module/ui/hooks/queryClient.js +1 -1
- package/lib/module/ui/hooks/queryClient.js.map +1 -1
- package/lib/module/ui/hooks/useAuth.js +5 -2
- package/lib/module/ui/hooks/useAuth.js.map +1 -1
- package/lib/module/ui/hooks/useKnownBearerSubject.js +15 -0
- package/lib/module/ui/hooks/useKnownBearerSubject.js.map +1 -0
- package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts +6 -0
- package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/accountQueryPersistence.d.ts +11 -0
- package/lib/typescript/commonjs/ui/hooks/accountQueryPersistence.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useAuth.d.ts +5 -31
- package/lib/typescript/commonjs/ui/hooks/useAuth.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useKnownBearerSubject.d.ts +6 -0
- package/lib/typescript/commonjs/ui/hooks/useKnownBearerSubject.d.ts.map +1 -0
- package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/oxyContextTypes.d.ts +6 -0
- package/lib/typescript/module/ui/context/oxyContextTypes.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/accountQueryPersistence.d.ts +11 -0
- package/lib/typescript/module/ui/hooks/accountQueryPersistence.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useAuth.d.ts +5 -31
- package/lib/typescript/module/ui/hooks/useAuth.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useKnownBearerSubject.d.ts +6 -0
- package/lib/typescript/module/ui/hooks/useKnownBearerSubject.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/ui/context/OxyContext.tsx +8 -2
- package/src/ui/context/oxyContextTypes.ts +6 -0
- package/src/ui/hooks/accountQueryPersistence.ts +21 -2
- package/src/ui/hooks/queryClient.ts +1 -1
- package/src/ui/hooks/useAuth.ts +11 -6
- package/src/ui/hooks/useKnownBearerSubject.ts +20 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAuth.d.ts","sourceRoot":"","sources":["../../../../../src/ui/hooks/useAuth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useAuth.d.ts","sourceRoot":"","sources":["../../../../../src/ui/hooks/useAuth.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAIzC,MAAM,WAAW,SAAS;IACxB,4DAA4D;IAC5D,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAElB,oCAAoC;IACpC,eAAe,EAAE,OAAO,CAAC;IAEzB,4DAA4D;IAC5D,SAAS,EAAE,OAAO,CAAC;IAEnB,oDAAoD;IACpD,OAAO,EAAE,OAAO,CAAC;IAEjB,+EAA+E;IAC/E,cAAc,EAAE,OAAO,CAAC;IAExB;;;;OAIG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAE1B;;;;OAIG;IACH,mBAAmB,EAAE,OAAO,CAAC;IAE7B;;;;;;;;;OASG;IACH,cAAc,EAAE,OAAO,CAAC;IAExB,oCAAoC;IACpC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B;;;;;;OAMG;IACH,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAEvD;;OAEG;IACH,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7B;;OAEG;IACH,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhC;;OAEG;IACH,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS,EAAE,WAAW;IAC3D,6DAA6D;IAC7D,WAAW,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,aAAa,CAAC,CAAC;IACjE,kEAAkE;IAClE,eAAe,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACzE,0EAA0E;IAC1E,eAAe,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACzE,0CAA0C;IAC1C,gBAAgB,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,kBAAkB,CAAC,CAAC;CAC5E;AAED,MAAM,MAAM,aAAa,GAAG;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC;AA+BlG;;;;;;;;;GASG;AACH,wBAAgB,OAAO,IAAI,aAAa,CAkGvC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { OxyServices } from '@oxy.so/core';
|
|
2
|
+
/** Observe the bearer subject without retaining the bearer in React state. */
|
|
3
|
+
export declare function useKnownBearerSubject(oxyServices: OxyServices): string | null;
|
|
4
|
+
/** Preserve existing behavior without a userId/id claim; only a known mismatch closes the gate. */
|
|
5
|
+
export declare function hasKnownSubjectMismatch(accountId: string | null | undefined, bearerSubject: string | null): boolean;
|
|
6
|
+
//# sourceMappingURL=useKnownBearerSubject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useKnownBearerSubject.d.ts","sourceRoot":"","sources":["../../../../../src/ui/hooks/useKnownBearerSubject.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,8EAA8E;AAC9E,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAO7E;AAED,mGAAmG;AACnG,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACpC,aAAa,EAAE,MAAM,GAAG,IAAI,GAC3B,OAAO,CAET"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OxyContext.d.ts","sourceRoot":"","sources":["../../../../../src/ui/context/OxyContext.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OxyContext.d.ts","sourceRoot":"","sources":["../../../../../src/ui/context/OxyContext.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA6G/B,OAAO,KAAK,EAAmB,uBAAuB,EAAe,MAAM,sBAAmB,CAAC;AAQ/F,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,sBAAmB,CAAC;AAOhG,OAAO,EACL,iBAAiB,EACjB,MAAM,EACN,cAAc,EACd,uBAAuB,GACxB,MAAM,wBAAqB,CAAC;AAE7B;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CA4vDhE,CAAC"}
|
|
@@ -37,7 +37,13 @@ export interface OxyContextState {
|
|
|
37
37
|
isLoading: boolean;
|
|
38
38
|
isTokenReady: boolean;
|
|
39
39
|
hasAccessToken: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* False while a known bearer subject differs from the projected user. Bearers without `userId` or `id` claims, including opaque or sub-only
|
|
42
|
+
* tokens, retain their existing behavior. This is a render snapshot, not a
|
|
43
|
+
* synchronous guard for callbacks retained across a session transition.
|
|
44
|
+
*/
|
|
40
45
|
canUsePrivateApi: boolean;
|
|
46
|
+
/** True while auth, the bearer or a known account mismatch is resolving. */
|
|
41
47
|
isPrivateApiPending: boolean;
|
|
42
48
|
/**
|
|
43
49
|
* Whether the initial auth determination has concluded.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oxyContextTypes.d.ts","sourceRoot":"","sources":["../../../../../src/ui/context/oxyContextTypes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"oxyContextTypes.d.ts","sourceRoot":"","sources":["../../../../../src/ui/context/oxyContextTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -73,6 +73,15 @@ export interface AccountQueriesConfig {
|
|
|
73
73
|
* the same account. Register their `mutationFn` with `setMutationDefaults`.
|
|
74
74
|
*/
|
|
75
75
|
mutationKeys?: readonly QueryKey[];
|
|
76
|
+
/**
|
|
77
|
+
* Exact mutation keys whose records belong to the account but must remain
|
|
78
|
+
* in memory. They are dropped on account transitions and excluded from both
|
|
79
|
+
* caches. If also listed in `mutationKeys`, memory-only takes precedence.
|
|
80
|
+
* A previously persisted queue for a newly memory-only key is not restored;
|
|
81
|
+
* a later snapshot can overwrite it. This does not cancel requests or
|
|
82
|
+
* callbacks, or immediately erase old blobs.
|
|
83
|
+
*/
|
|
84
|
+
memoryOnlyMutationKeys?: readonly QueryKey[];
|
|
76
85
|
/**
|
|
77
86
|
* Remove unregistered mutation records as well on every account transition.
|
|
78
87
|
* Only registered paused mutations are saved and restored; unregistered
|
|
@@ -90,6 +99,8 @@ export interface AccountQueryOwnership {
|
|
|
90
99
|
/** Written to the account's blob. */
|
|
91
100
|
persistsQuery: (query: QueryIdentity) => boolean;
|
|
92
101
|
ownsMutation: (mutation: Mutation) => boolean;
|
|
102
|
+
/** Whether a stored mutation key is owned by the account. */
|
|
103
|
+
ownsMutationKey: (key: QueryKey | undefined) => boolean;
|
|
93
104
|
/** Eligible for the account's persisted paused mutations. */
|
|
94
105
|
persistsMutation: (mutation: Mutation) => boolean;
|
|
95
106
|
/** Whether a stored mutation key belongs to this account's offline queue. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accountQueryPersistence.d.ts","sourceRoot":"","sources":["../../../../../src/ui/hooks/accountQueryPersistence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,QAAQ,EACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAAyB,CAAC;AAWhE;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,KAAK,aAAa,GAAG;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC;AAMlE,8EAA8E;AAC9E,MAAM,WAAW,oBAAoB;IACnC;;;;;;;;;;OAUG;IACH,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,KAAK,CAAC;IACjC;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,KAAK,CAAC;IAC5C;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,YAAY,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IACnC;;;;;;;OAOG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC;AAED,iFAAiF;AACjF,MAAM,WAAW,qBAAqB;IACpC,+CAA+C;IAC/C,SAAS,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC;IAC7C,qCAAqC;IACrC,aAAa,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC;IACjD,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;IAC9C,6DAA6D;IAC7D,gBAAgB,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;IAClD,6EAA6E;IAC7E,mBAAmB,EAAE,CAAC,GAAG,EAAE,QAAQ,GAAG,SAAS,KAAK,OAAO,CAAC;CAC7D;AAQD,wBAAgB,qBAAqB,CACnC,MAAM,GAAE,oBAA+B,GACtC,qBAAqB,
|
|
1
|
+
{"version":3,"file":"accountQueryPersistence.d.ts","sourceRoot":"","sources":["../../../../../src/ui/hooks/accountQueryPersistence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,QAAQ,EACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAAyB,CAAC;AAWhE;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,KAAK,aAAa,GAAG;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC;AAMlE,8EAA8E;AAC9E,MAAM,WAAW,oBAAoB;IACnC;;;;;;;;;;OAUG;IACH,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,KAAK,CAAC;IACjC;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,KAAK,CAAC;IAC5C;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,YAAY,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IACnC;;;;;;;OAOG;IACH,sBAAsB,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC7C;;;;;;;OAOG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC;AAED,iFAAiF;AACjF,MAAM,WAAW,qBAAqB;IACpC,+CAA+C;IAC/C,SAAS,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC;IAC7C,qCAAqC;IACrC,aAAa,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC;IACjD,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;IAC9C,6DAA6D;IAC7D,eAAe,EAAE,CAAC,GAAG,EAAE,QAAQ,GAAG,SAAS,KAAK,OAAO,CAAC;IACxD,6DAA6D;IAC7D,gBAAgB,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;IAClD,6EAA6E;IAC7E,mBAAmB,EAAE,CAAC,GAAG,EAAE,QAAQ,GAAG,SAAS,KAAK,OAAO,CAAC;CAC7D;AAQD,wBAAgB,qBAAqB,CACnC,MAAM,GAAE,oBAA+B,GACtC,qBAAqB,CAqDvB;AAED,eAAO,MAAM,uBAAuB,wBAAwB,CAAC;AAI7D,MAAM,WAAW,uBAAuB;IACtC,gEAAgE;IAChE,UAAU,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC5C,wFAAwF;IACxF,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACzC,2EAA2E;IAC3E,MAAM,IAAI,IAAI,CAAC;IACf,2EAA2E;IAC3E,MAAM,IAAI,IAAI,CAAC;IACf,iFAAiF;IACjF,OAAO,IAAI,OAAO,CAAC;IACnB,4EAA4E;IAC5E,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CAC7C;AAMD,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,WAAW,EACxB,MAAM,CAAC,EAAE,oBAAoB,GAC5B,uBAAuB,CAqJzB"}
|
|
@@ -1,30 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unified Auth Hook
|
|
3
|
-
*
|
|
4
|
-
* Provides a clean, standard interface for authentication across all platforms.
|
|
5
|
-
* This is the recommended way to access auth state in Oxy apps.
|
|
6
|
-
*
|
|
7
|
-
* Usage:
|
|
8
|
-
* ```tsx
|
|
9
|
-
* import { useAuth } from '@oxy.so/services';
|
|
10
|
-
*
|
|
11
|
-
* function MyComponent() {
|
|
12
|
-
* const { user, isAuthenticated, isLoading, signIn, signOut } = useAuth();
|
|
13
|
-
*
|
|
14
|
-
* if (isLoading) return <Loading />;
|
|
15
|
-
* if (!isAuthenticated) return <SignInButton onClick={() => signIn()} />;
|
|
16
|
-
* return <Welcome user={user} />;
|
|
17
|
-
* }
|
|
18
|
-
* ```
|
|
19
|
-
*
|
|
20
|
-
* Session restore (zero cookies):
|
|
21
|
-
* - Web: this origin's own persisted `{deviceId, deviceSecret}` — a signed-out
|
|
22
|
-
* origin stays signed out until the user presses "Continue with Oxy". There is
|
|
23
|
-
* no cross-origin silent SSO: the SDK never navigates the tab on its own.
|
|
24
|
-
* - Native: shared Keychain / app-group identity (Commons)
|
|
25
|
-
* - Realtime sync: Socket.IO `session_state` on `device:<deviceId>` once authenticated
|
|
26
|
-
* - Manual sign-in: signIn() opens the in-app account dialog (web + native)
|
|
27
|
-
*/
|
|
28
1
|
import { useOxyAuthActions } from '../context/oxyRuntimeContext.js';
|
|
29
2
|
import type { User } from '@oxy.so/core';
|
|
30
3
|
export interface AuthState {
|
|
@@ -39,14 +12,15 @@ export interface AuthState {
|
|
|
39
12
|
/** Whether the current OxyServices instance currently holds an access token */
|
|
40
13
|
hasAccessToken: boolean;
|
|
41
14
|
/**
|
|
42
|
-
* True
|
|
43
|
-
* bearer
|
|
15
|
+
* True when auth is resolved, a user and bearer are available, and any known
|
|
16
|
+
* bearer subject matches the user. A bearer without a `userId` or `id` claim preserves legacy behavior.
|
|
17
|
+
* This render snapshot does not guard callbacks retained across a transition.
|
|
44
18
|
*/
|
|
45
19
|
canUsePrivateApi: boolean;
|
|
46
20
|
/**
|
|
47
21
|
* True while the SDK is still resolving auth or an authenticated session is
|
|
48
|
-
* waiting for its bearer token. Use this to hold private
|
|
49
|
-
* loading state instead of firing unauthenticated requests.
|
|
22
|
+
* waiting for its bearer token or account projection. Use this to hold private
|
|
23
|
+
* API screens in a loading state instead of firing unauthenticated requests.
|
|
50
24
|
*/
|
|
51
25
|
isPrivateApiPending: boolean;
|
|
52
26
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAuth.d.ts","sourceRoot":"","sources":["../../../../../src/ui/hooks/useAuth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useAuth.d.ts","sourceRoot":"","sources":["../../../../../src/ui/hooks/useAuth.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAIzC,MAAM,WAAW,SAAS;IACxB,4DAA4D;IAC5D,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAElB,oCAAoC;IACpC,eAAe,EAAE,OAAO,CAAC;IAEzB,4DAA4D;IAC5D,SAAS,EAAE,OAAO,CAAC;IAEnB,oDAAoD;IACpD,OAAO,EAAE,OAAO,CAAC;IAEjB,+EAA+E;IAC/E,cAAc,EAAE,OAAO,CAAC;IAExB;;;;OAIG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAE1B;;;;OAIG;IACH,mBAAmB,EAAE,OAAO,CAAC;IAE7B;;;;;;;;;OASG;IACH,cAAc,EAAE,OAAO,CAAC;IAExB,oCAAoC;IACpC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B;;;;;;OAMG;IACH,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAEvD;;OAEG;IACH,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7B;;OAEG;IACH,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhC;;OAEG;IACH,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS,EAAE,WAAW;IAC3D,6DAA6D;IAC7D,WAAW,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,aAAa,CAAC,CAAC;IACjE,kEAAkE;IAClE,eAAe,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACzE,0EAA0E;IAC1E,eAAe,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACzE,0CAA0C;IAC1C,gBAAgB,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,kBAAkB,CAAC,CAAC;CAC5E;AAED,MAAM,MAAM,aAAa,GAAG;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC;AA+BlG;;;;;;;;;GASG;AACH,wBAAgB,OAAO,IAAI,aAAa,CAkGvC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { OxyServices } from '@oxy.so/core';
|
|
2
|
+
/** Observe the bearer subject without retaining the bearer in React state. */
|
|
3
|
+
export declare function useKnownBearerSubject(oxyServices: OxyServices): string | null;
|
|
4
|
+
/** Preserve existing behavior without a userId/id claim; only a known mismatch closes the gate. */
|
|
5
|
+
export declare function hasKnownSubjectMismatch(accountId: string | null | undefined, bearerSubject: string | null): boolean;
|
|
6
|
+
//# sourceMappingURL=useKnownBearerSubject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useKnownBearerSubject.d.ts","sourceRoot":"","sources":["../../../../../src/ui/hooks/useKnownBearerSubject.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,8EAA8E;AAC9E,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAO7E;AAED,mGAAmG;AACnG,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACpC,aAAa,EAAE,MAAM,GAAG,IAAI,GAC3B,OAAO,CAET"}
|
package/package.json
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { hasKnownSubjectMismatch, useKnownBearerSubject } from '../hooks/useKnownBearerSubject';
|
|
1
2
|
import { installNativeAssetFiles } from '../utils/nativeAssetFiles';
|
|
2
3
|
import {
|
|
3
4
|
startNativeOAuthSignIn,
|
|
@@ -339,6 +340,8 @@ export const OxyRuntimeProvider: React.FC<OxyRuntimeProviderProps> = ({
|
|
|
339
340
|
authResolved,
|
|
340
341
|
} = snapshot;
|
|
341
342
|
const isAuthenticated = user !== null;
|
|
343
|
+
const bearerSubject = useKnownBearerSubject(oxyServices);
|
|
344
|
+
const subjectMismatch = hasKnownSubjectMismatch(user?.id, bearerSubject);
|
|
342
345
|
const error = snapshot.error?.message ?? null;
|
|
343
346
|
|
|
344
347
|
const [initialized, setInitialized] = useState(false);
|
|
@@ -1744,9 +1747,12 @@ export const OxyRuntimeProvider: React.FC<OxyRuntimeProviderProps> = ({
|
|
|
1744
1747
|
);
|
|
1745
1748
|
subjectChangeRef.current = handleSubjectChange;
|
|
1746
1749
|
|
|
1747
|
-
|
|
1750
|
+
// An undecodable bearer keeps the existing compatibility behavior. A known
|
|
1751
|
+
// different subject is never ready while the account projection catches up.
|
|
1752
|
+
const canUsePrivateApi =
|
|
1753
|
+
authResolved && isAuthenticated && tokenReady && hasAccessToken && !subjectMismatch;
|
|
1748
1754
|
const isPrivateApiPending =
|
|
1749
|
-
!authResolved || (isAuthenticated && (!tokenReady || !hasAccessToken));
|
|
1755
|
+
!authResolved || (isAuthenticated && (!tokenReady || !hasAccessToken || subjectMismatch));
|
|
1750
1756
|
|
|
1751
1757
|
// Keep the native background credential in step with this session, so native
|
|
1752
1758
|
// background code (a widget worker) can authenticate with no JS runtime. Inert
|
|
@@ -50,7 +50,13 @@ export interface OxyContextState {
|
|
|
50
50
|
isLoading: boolean;
|
|
51
51
|
isTokenReady: boolean;
|
|
52
52
|
hasAccessToken: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* False while a known bearer subject differs from the projected user. Bearers without `userId` or `id` claims, including opaque or sub-only
|
|
55
|
+
* tokens, retain their existing behavior. This is a render snapshot, not a
|
|
56
|
+
* synchronous guard for callbacks retained across a session transition.
|
|
57
|
+
*/
|
|
53
58
|
canUsePrivateApi: boolean;
|
|
59
|
+
/** True while auth, the bearer or a known account mismatch is resolving. */
|
|
54
60
|
isPrivateApiPending: boolean;
|
|
55
61
|
/**
|
|
56
62
|
* Whether the initial auth determination has concluded.
|
|
@@ -93,6 +93,15 @@ export interface AccountQueriesConfig {
|
|
|
93
93
|
* the same account. Register their `mutationFn` with `setMutationDefaults`.
|
|
94
94
|
*/
|
|
95
95
|
mutationKeys?: readonly QueryKey[];
|
|
96
|
+
/**
|
|
97
|
+
* Exact mutation keys whose records belong to the account but must remain
|
|
98
|
+
* in memory. They are dropped on account transitions and excluded from both
|
|
99
|
+
* caches. If also listed in `mutationKeys`, memory-only takes precedence.
|
|
100
|
+
* A previously persisted queue for a newly memory-only key is not restored;
|
|
101
|
+
* a later snapshot can overwrite it. This does not cancel requests or
|
|
102
|
+
* callbacks, or immediately erase old blobs.
|
|
103
|
+
*/
|
|
104
|
+
memoryOnlyMutationKeys?: readonly QueryKey[];
|
|
96
105
|
/**
|
|
97
106
|
* Remove unregistered mutation records as well on every account transition.
|
|
98
107
|
* Only registered paused mutations are saved and restored; unregistered
|
|
@@ -111,6 +120,8 @@ export interface AccountQueryOwnership {
|
|
|
111
120
|
/** Written to the account's blob. */
|
|
112
121
|
persistsQuery: (query: QueryIdentity) => boolean;
|
|
113
122
|
ownsMutation: (mutation: Mutation) => boolean;
|
|
123
|
+
/** Whether a stored mutation key is owned by the account. */
|
|
124
|
+
ownsMutationKey: (key: QueryKey | undefined) => boolean;
|
|
114
125
|
/** Eligible for the account's persisted paused mutations. */
|
|
115
126
|
persistsMutation: (mutation: Mutation) => boolean;
|
|
116
127
|
/** Whether a stored mutation key belongs to this account's offline queue. */
|
|
@@ -133,9 +144,16 @@ export function accountQueryOwnership(
|
|
|
133
144
|
]);
|
|
134
145
|
const sdkRoots = new Set(PERSISTED_QUERY_PREFIXES);
|
|
135
146
|
const declared = config.roots === 'all' ? null : new Set(config.roots);
|
|
147
|
+
const memoryMutationHashes = new Set(
|
|
148
|
+
(config.memoryOnlyMutationKeys ?? []).map((key) => hashKey(key)),
|
|
149
|
+
);
|
|
136
150
|
const mutationHashes = new Set((config.mutationKeys ?? []).map((key) => hashKey(key)));
|
|
151
|
+
const isMemoryOnlyMutationKey = (key: QueryKey | undefined): boolean =>
|
|
152
|
+
key !== undefined && memoryMutationHashes.has(hashKey(key));
|
|
137
153
|
const persistsMutationKey = (key: QueryKey | undefined): boolean =>
|
|
138
|
-
key !== undefined && mutationHashes.has(hashKey(key));
|
|
154
|
+
key !== undefined && !isMemoryOnlyMutationKey(key) && mutationHashes.has(hashKey(key));
|
|
155
|
+
const ownsMutationKey = (key: QueryKey | undefined): boolean =>
|
|
156
|
+
isMemoryOnlyMutationKey(key) || persistsMutationKey(key);
|
|
139
157
|
const isRegisteredMutation = (mutation: Mutation): boolean =>
|
|
140
158
|
persistsMutationKey(mutation.options.mutationKey);
|
|
141
159
|
|
|
@@ -166,7 +184,8 @@ export function accountQueryOwnership(
|
|
|
166
184
|
);
|
|
167
185
|
},
|
|
168
186
|
ownsMutation: (mutation) =>
|
|
169
|
-
config.clearUnregisteredMutations === true ||
|
|
187
|
+
config.clearUnregisteredMutations === true || ownsMutationKey(mutation.options.mutationKey),
|
|
188
|
+
ownsMutationKey,
|
|
170
189
|
persistsMutation: isRegisteredMutation,
|
|
171
190
|
persistsMutationKey,
|
|
172
191
|
};
|
|
@@ -167,7 +167,7 @@ export const attachQueryPersistence = (
|
|
|
167
167
|
!hydrateSnapshot(queryClient, raw, QUERY_CACHE_MAX_AGE, {
|
|
168
168
|
shouldRestoreQuery: (query) => !account.ownsQuery(query),
|
|
169
169
|
restoreMutations: accountQueries?.clearUnregisteredMutations !== true,
|
|
170
|
-
shouldRestoreMutation: (mutation) => !account.
|
|
170
|
+
shouldRestoreMutation: (mutation) => !account.ownsMutationKey(mutation.mutationKey),
|
|
171
171
|
}) &&
|
|
172
172
|
raw
|
|
173
173
|
) {
|
package/src/ui/hooks/useAuth.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { hasKnownSubjectMismatch, useKnownBearerSubject } from './useKnownBearerSubject';
|
|
1
2
|
/**
|
|
2
3
|
* Unified Auth Hook
|
|
3
4
|
*
|
|
@@ -49,15 +50,16 @@ export interface AuthState {
|
|
|
49
50
|
hasAccessToken: boolean;
|
|
50
51
|
|
|
51
52
|
/**
|
|
52
|
-
* True
|
|
53
|
-
* bearer
|
|
53
|
+
* True when auth is resolved, a user and bearer are available, and any known
|
|
54
|
+
* bearer subject matches the user. A bearer without a `userId` or `id` claim preserves legacy behavior.
|
|
55
|
+
* This render snapshot does not guard callbacks retained across a transition.
|
|
54
56
|
*/
|
|
55
57
|
canUsePrivateApi: boolean;
|
|
56
58
|
|
|
57
59
|
/**
|
|
58
60
|
* True while the SDK is still resolving auth or an authenticated session is
|
|
59
|
-
* waiting for its bearer token. Use this to hold private
|
|
60
|
-
* loading state instead of firing unauthenticated requests.
|
|
61
|
+
* waiting for its bearer token or account projection. Use this to hold private
|
|
62
|
+
* API screens in a loading state instead of firing unauthenticated requests.
|
|
61
63
|
*/
|
|
62
64
|
isPrivateApiPending: boolean;
|
|
63
65
|
|
|
@@ -183,6 +185,9 @@ export function useAuth(): UseAuthReturn {
|
|
|
183
185
|
ensureDeviceSessionLane,
|
|
184
186
|
} = useOxyAuthActions();
|
|
185
187
|
|
|
188
|
+
const bearerSubject = useKnownBearerSubject(oxyServices);
|
|
189
|
+
const subjectMismatch = hasKnownSubjectMismatch(user?.id, bearerSubject);
|
|
190
|
+
|
|
186
191
|
const signIn = useCallback(
|
|
187
192
|
async (publicKey?: string): Promise<SignInOutcome> => {
|
|
188
193
|
const classification = ensureDeviceSessionLane();
|
|
@@ -233,8 +238,8 @@ export function useAuth(): UseAuthReturn {
|
|
|
233
238
|
isLoading: isLoading || !isAuthResolved,
|
|
234
239
|
isReady,
|
|
235
240
|
hasAccessToken,
|
|
236
|
-
canUsePrivateApi,
|
|
237
|
-
isPrivateApiPending,
|
|
241
|
+
canUsePrivateApi: canUsePrivateApi && !subjectMismatch,
|
|
242
|
+
isPrivateApiPending: isPrivateApiPending || subjectMismatch,
|
|
238
243
|
isAuthResolved,
|
|
239
244
|
error,
|
|
240
245
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { useCallback, useSyncExternalStore } from 'react';
|
|
2
|
+
import type { OxyServices } from '@oxy.so/core';
|
|
3
|
+
|
|
4
|
+
/** Observe the bearer subject without retaining the bearer in React state. */
|
|
5
|
+
export function useKnownBearerSubject(oxyServices: OxyServices): string | null {
|
|
6
|
+
const subscribe = useCallback(
|
|
7
|
+
(notify: () => void) => oxyServices.session.onChange(notify),
|
|
8
|
+
[oxyServices],
|
|
9
|
+
);
|
|
10
|
+
const snapshot = useCallback(() => oxyServices.session.userId ?? null, [oxyServices]);
|
|
11
|
+
return useSyncExternalStore(subscribe, snapshot, snapshot);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/** Preserve existing behavior without a userId/id claim; only a known mismatch closes the gate. */
|
|
15
|
+
export function hasKnownSubjectMismatch(
|
|
16
|
+
accountId: string | null | undefined,
|
|
17
|
+
bearerSubject: string | null,
|
|
18
|
+
): boolean {
|
|
19
|
+
return !!accountId && bearerSubject !== null && accountId !== bearerSubject;
|
|
20
|
+
}
|