@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.
Files changed (45) hide show
  1. package/lib/commonjs/ui/context/OxyContext.js +8 -2
  2. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  3. package/lib/commonjs/ui/hooks/accountQueryPersistence.js +6 -2
  4. package/lib/commonjs/ui/hooks/accountQueryPersistence.js.map +1 -1
  5. package/lib/commonjs/ui/hooks/queryClient.js +1 -1
  6. package/lib/commonjs/ui/hooks/queryClient.js.map +1 -1
  7. package/lib/commonjs/ui/hooks/useAuth.js +5 -2
  8. package/lib/commonjs/ui/hooks/useAuth.js.map +1 -1
  9. package/lib/commonjs/ui/hooks/useKnownBearerSubject.js +20 -0
  10. package/lib/commonjs/ui/hooks/useKnownBearerSubject.js.map +1 -0
  11. package/lib/module/ui/context/OxyContext.js +8 -2
  12. package/lib/module/ui/context/OxyContext.js.map +1 -1
  13. package/lib/module/ui/hooks/accountQueryPersistence.js +6 -2
  14. package/lib/module/ui/hooks/accountQueryPersistence.js.map +1 -1
  15. package/lib/module/ui/hooks/queryClient.js +1 -1
  16. package/lib/module/ui/hooks/queryClient.js.map +1 -1
  17. package/lib/module/ui/hooks/useAuth.js +5 -2
  18. package/lib/module/ui/hooks/useAuth.js.map +1 -1
  19. package/lib/module/ui/hooks/useKnownBearerSubject.js +15 -0
  20. package/lib/module/ui/hooks/useKnownBearerSubject.js.map +1 -0
  21. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
  22. package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts +6 -0
  23. package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts.map +1 -1
  24. package/lib/typescript/commonjs/ui/hooks/accountQueryPersistence.d.ts +11 -0
  25. package/lib/typescript/commonjs/ui/hooks/accountQueryPersistence.d.ts.map +1 -1
  26. package/lib/typescript/commonjs/ui/hooks/useAuth.d.ts +5 -31
  27. package/lib/typescript/commonjs/ui/hooks/useAuth.d.ts.map +1 -1
  28. package/lib/typescript/commonjs/ui/hooks/useKnownBearerSubject.d.ts +6 -0
  29. package/lib/typescript/commonjs/ui/hooks/useKnownBearerSubject.d.ts.map +1 -0
  30. package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
  31. package/lib/typescript/module/ui/context/oxyContextTypes.d.ts +6 -0
  32. package/lib/typescript/module/ui/context/oxyContextTypes.d.ts.map +1 -1
  33. package/lib/typescript/module/ui/hooks/accountQueryPersistence.d.ts +11 -0
  34. package/lib/typescript/module/ui/hooks/accountQueryPersistence.d.ts.map +1 -1
  35. package/lib/typescript/module/ui/hooks/useAuth.d.ts +5 -31
  36. package/lib/typescript/module/ui/hooks/useAuth.d.ts.map +1 -1
  37. package/lib/typescript/module/ui/hooks/useKnownBearerSubject.d.ts +6 -0
  38. package/lib/typescript/module/ui/hooks/useKnownBearerSubject.d.ts.map +1 -0
  39. package/package.json +1 -1
  40. package/src/ui/context/OxyContext.tsx +8 -2
  41. package/src/ui/context/oxyContextTypes.ts +6 -0
  42. package/src/ui/hooks/accountQueryPersistence.ts +21 -2
  43. package/src/ui/hooks/queryClient.ts +1 -1
  44. package/src/ui/hooks/useAuth.ts +11 -6
  45. 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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,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;;;OAGG;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,CA+FvC"}
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":"AAWA,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,CAuvDhE,CAAC"}
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,CA6CvB;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
+ {"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 only when auth cold-boot is resolved, the user is authenticated, and a
43
- * bearer token is available for private backend requests.
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 API screens in a
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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,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;;;OAGG;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,CA+FvC"}
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@oxy.so/services",
3
- "version": "13.13.0",
3
+ "version": "13.14.1",
4
4
  "description": "OxyHQ Expo/React Native SDK — UI components, screens, and native features",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -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
- const canUsePrivateApi = authResolved && isAuthenticated && tokenReady && hasAccessToken;
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 || isRegisteredMutation(mutation),
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.persistsMutationKey(mutation.mutationKey),
170
+ shouldRestoreMutation: (mutation) => !account.ownsMutationKey(mutation.mutationKey),
171
171
  }) &&
172
172
  raw
173
173
  ) {
@@ -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 only when auth cold-boot is resolved, the user is authenticated, and a
53
- * bearer token is available for private backend requests.
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 API screens in a
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
+ }