@oxyhq/services 20.0.2 → 21.0.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 (89) hide show
  1. package/lib/commonjs/index.js +13 -0
  2. package/lib/commonjs/index.js.map +1 -1
  3. package/lib/commonjs/ui/components/OxyAccountDialog.js +50 -18
  4. package/lib/commonjs/ui/components/OxyAccountDialog.js.map +1 -1
  5. package/lib/commonjs/ui/context/OxyContext.js +69 -1
  6. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  7. package/lib/commonjs/ui/context/passkeyFlow.js +117 -0
  8. package/lib/commonjs/ui/context/passkeyFlow.js.map +1 -0
  9. package/lib/commonjs/ui/hooks/queries/queryKeys.js +18 -2
  10. package/lib/commonjs/ui/hooks/queries/queryKeys.js.map +1 -1
  11. package/lib/commonjs/ui/hooks/queries/useAuthMethods.js +49 -0
  12. package/lib/commonjs/ui/hooks/queries/useAuthMethods.js.map +1 -0
  13. package/lib/commonjs/ui/stores/authStore.js +5 -3
  14. package/lib/commonjs/ui/stores/authStore.js.map +1 -1
  15. package/lib/commonjs/webauthn/passkeyClient.js +39 -0
  16. package/lib/commonjs/webauthn/passkeyClient.js.map +1 -0
  17. package/lib/commonjs/webauthn/passkeyClient.native.js +34 -0
  18. package/lib/commonjs/webauthn/passkeyClient.native.js.map +1 -0
  19. package/lib/commonjs/webauthn/passkeyClient.web.js +57 -0
  20. package/lib/commonjs/webauthn/passkeyClient.web.js.map +1 -0
  21. package/lib/module/index.js +2 -1
  22. package/lib/module/index.js.map +1 -1
  23. package/lib/module/ui/components/OxyAccountDialog.js +51 -19
  24. package/lib/module/ui/components/OxyAccountDialog.js.map +1 -1
  25. package/lib/module/ui/context/OxyContext.js +69 -1
  26. package/lib/module/ui/context/OxyContext.js.map +1 -1
  27. package/lib/module/ui/context/passkeyFlow.js +110 -0
  28. package/lib/module/ui/context/passkeyFlow.js.map +1 -0
  29. package/lib/module/ui/hooks/queries/queryKeys.js +15 -0
  30. package/lib/module/ui/hooks/queries/queryKeys.js.map +1 -1
  31. package/lib/module/ui/hooks/queries/useAuthMethods.js +45 -0
  32. package/lib/module/ui/hooks/queries/useAuthMethods.js.map +1 -0
  33. package/lib/module/ui/stores/authStore.js +6 -4
  34. package/lib/module/ui/stores/authStore.js.map +1 -1
  35. package/lib/module/webauthn/passkeyClient.js +33 -0
  36. package/lib/module/webauthn/passkeyClient.js.map +1 -0
  37. package/lib/module/webauthn/passkeyClient.native.js +28 -0
  38. package/lib/module/webauthn/passkeyClient.native.js.map +1 -0
  39. package/lib/module/webauthn/passkeyClient.web.js +52 -0
  40. package/lib/module/webauthn/passkeyClient.web.js.map +1 -0
  41. package/lib/typescript/commonjs/index.d.ts +2 -1
  42. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  43. package/lib/typescript/commonjs/ui/components/OxyAccountDialog.d.ts.map +1 -1
  44. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
  45. package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts +26 -0
  46. package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts.map +1 -1
  47. package/lib/typescript/commonjs/ui/context/passkeyFlow.d.ts +85 -0
  48. package/lib/typescript/commonjs/ui/context/passkeyFlow.d.ts.map +1 -0
  49. package/lib/typescript/commonjs/ui/hooks/queries/queryKeys.d.ts +9 -0
  50. package/lib/typescript/commonjs/ui/hooks/queries/queryKeys.d.ts.map +1 -1
  51. package/lib/typescript/commonjs/ui/hooks/queries/useAuthMethods.d.ts +212 -0
  52. package/lib/typescript/commonjs/ui/hooks/queries/useAuthMethods.d.ts.map +1 -0
  53. package/lib/typescript/commonjs/webauthn/passkeyClient.d.ts +20 -0
  54. package/lib/typescript/commonjs/webauthn/passkeyClient.d.ts.map +1 -0
  55. package/lib/typescript/commonjs/webauthn/passkeyClient.native.d.ts +15 -0
  56. package/lib/typescript/commonjs/webauthn/passkeyClient.native.d.ts.map +1 -0
  57. package/lib/typescript/commonjs/webauthn/passkeyClient.web.d.ts +36 -0
  58. package/lib/typescript/commonjs/webauthn/passkeyClient.web.d.ts.map +1 -0
  59. package/lib/typescript/module/index.d.ts +2 -1
  60. package/lib/typescript/module/index.d.ts.map +1 -1
  61. package/lib/typescript/module/ui/components/OxyAccountDialog.d.ts.map +1 -1
  62. package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
  63. package/lib/typescript/module/ui/context/oxyContextTypes.d.ts +26 -0
  64. package/lib/typescript/module/ui/context/oxyContextTypes.d.ts.map +1 -1
  65. package/lib/typescript/module/ui/context/passkeyFlow.d.ts +85 -0
  66. package/lib/typescript/module/ui/context/passkeyFlow.d.ts.map +1 -0
  67. package/lib/typescript/module/ui/hooks/queries/queryKeys.d.ts +9 -0
  68. package/lib/typescript/module/ui/hooks/queries/queryKeys.d.ts.map +1 -1
  69. package/lib/typescript/module/ui/hooks/queries/useAuthMethods.d.ts +212 -0
  70. package/lib/typescript/module/ui/hooks/queries/useAuthMethods.d.ts.map +1 -0
  71. package/lib/typescript/module/webauthn/passkeyClient.d.ts +20 -0
  72. package/lib/typescript/module/webauthn/passkeyClient.d.ts.map +1 -0
  73. package/lib/typescript/module/webauthn/passkeyClient.native.d.ts +15 -0
  74. package/lib/typescript/module/webauthn/passkeyClient.native.d.ts.map +1 -0
  75. package/lib/typescript/module/webauthn/passkeyClient.web.d.ts +36 -0
  76. package/lib/typescript/module/webauthn/passkeyClient.web.d.ts.map +1 -0
  77. package/package.json +6 -5
  78. package/src/index.ts +2 -0
  79. package/src/ui/components/OxyAccountDialog.tsx +58 -14
  80. package/src/ui/context/OxyContext.tsx +76 -0
  81. package/src/ui/context/__tests__/passkeyFlow.test.ts +237 -0
  82. package/src/ui/context/oxyContextTypes.ts +21 -0
  83. package/src/ui/context/passkeyFlow.ts +146 -0
  84. package/src/ui/hooks/queries/queryKeys.ts +14 -0
  85. package/src/ui/hooks/queries/useAuthMethods.ts +45 -0
  86. package/src/ui/stores/authStore.ts +4 -4
  87. package/src/webauthn/passkeyClient.native.ts +26 -0
  88. package/src/webauthn/passkeyClient.ts +31 -0
  89. package/src/webauthn/passkeyClient.web.ts +56 -0
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.PASSKEY_UNSUPPORTED_MESSAGE = void 0;
7
+ exports.runPasskeyAdd = runPasskeyAdd;
8
+ exports.runPasskeyLogin = runPasskeyLogin;
9
+ exports.runPasskeyRegister = runPasskeyRegister;
10
+ /**
11
+ * Pure passkey (WebAuthn) sign-in / registration orchestration.
12
+ *
13
+ * Extracted from `OxyContext` so the fixed `options → ceremony → verify → commit`
14
+ * ordering is unit-testable with injected deps — the exact pattern
15
+ * `commitSessionFlow.ts` (`commitDeviceSetAndResolve`) uses. The context methods
16
+ * (`signInWithPasskey` / `registerWithPasskey` / `addPasskey`) are thin wrappers
17
+ * that supply the real deps: the core `webauthn*` methods, the platform ceremony
18
+ * client (`webauthn/passkeyClient`), and the internal `commitSession` funnel.
19
+ *
20
+ * All three GATE on `isSupported()` first (the platform client returns `false`
21
+ * off the web) so an unsupported surface fails loudly before touching a ceremony.
22
+ */
23
+
24
+ /**
25
+ * The result of `OxyServices.webauthnRegisterVerify` — either the LINK branch
26
+ * (`{ success, message }`, bearer present, no session) or the SIGNUP branch (a
27
+ * full {@link LoginResult}, which carries a `sessionId` on its session arm).
28
+ */
29
+
30
+ /** Thrown when a passkey flow is attempted on a surface that cannot run WebAuthn. */
31
+ const PASSKEY_UNSUPPORTED_MESSAGE = exports.PASSKEY_UNSUPPORTED_MESSAGE = 'Passkeys are not available in this environment. Use another sign-in method.';
32
+
33
+ /** Project a session-arm login result onto the internal `commitSession` input. */
34
+ function toCommitInput(result) {
35
+ return {
36
+ sessionId: result.sessionId,
37
+ accessToken: result.accessToken,
38
+ deviceSecret: result.deviceSecret,
39
+ deviceId: result.deviceId,
40
+ expiresAt: result.expiresAt,
41
+ userId: result.user.id,
42
+ user: result.user
43
+ };
44
+ }
45
+
46
+ /** Injected dependencies for {@link runPasskeyLogin}. */
47
+
48
+ /**
49
+ * Usernameless (discoverable-credential) passkey SIGN-IN: request login options,
50
+ * run the authentication ceremony, verify, then commit the session. A passkey
51
+ * assertion is itself the strong factor, so a 2FA arm here is a protocol error.
52
+ */
53
+ async function runPasskeyLogin(deps) {
54
+ if (!deps.isSupported()) {
55
+ throw new Error(PASSKEY_UNSUPPORTED_MESSAGE);
56
+ }
57
+ const options = await deps.getLoginOptions();
58
+ const response = await deps.runCeremony(options);
59
+ const result = await deps.loginVerify(response, {
60
+ deviceName: deps.deviceName,
61
+ deviceFingerprint: deps.deviceFingerprint,
62
+ deviceId: deps.deviceId
63
+ });
64
+ if ('twoFactorRequired' in result) {
65
+ throw new Error('Passkey sign-in unexpectedly required a second factor.');
66
+ }
67
+ await deps.commit(toCommitInput(result));
68
+ }
69
+
70
+ /** Injected dependencies for {@link runPasskeyRegister}. */
71
+
72
+ /**
73
+ * Passkey SIGNUP: create a brand-new account whose first auth method is a
74
+ * passkey. The verify signup branch mints a session (a {@link LoginSessionResult}
75
+ * carrying `sessionId`), which is committed exactly like a password signup.
76
+ */
77
+ async function runPasskeyRegister(deps) {
78
+ if (!deps.isSupported()) {
79
+ throw new Error(PASSKEY_UNSUPPORTED_MESSAGE);
80
+ }
81
+ const options = await deps.getRegisterOptions(deps.username);
82
+ const response = await deps.runCeremony(options);
83
+ const result = await deps.registerVerify(response, {
84
+ username: deps.username,
85
+ deviceName: deps.deviceName
86
+ });
87
+ // Only the signup session arm carries `sessionId`; the link branch
88
+ // (`{ success, message }`) and any 2FA arm do not.
89
+ if (!('sessionId' in result)) {
90
+ throw new Error('Passkey registration did not establish a session.');
91
+ }
92
+ await deps.commit(toCommitInput(result));
93
+ }
94
+
95
+ /** Injected dependencies for {@link runPasskeyAdd}. */
96
+
97
+ /**
98
+ * ADD a passkey to the already-signed-in account (bearer present). The verify
99
+ * link branch returns `{ success, message }` with NO session — so this never
100
+ * commits a session; it just fires `onLinked` (which invalidates the
101
+ * auth-methods query). A session arm here would be a server contract violation.
102
+ */
103
+ async function runPasskeyAdd(deps) {
104
+ if (!deps.isSupported()) {
105
+ throw new Error(PASSKEY_UNSUPPORTED_MESSAGE);
106
+ }
107
+ const options = await deps.getRegisterOptions();
108
+ const response = await deps.runCeremony(options);
109
+ const result = await deps.registerVerify(response, {
110
+ deviceName: deps.deviceName
111
+ });
112
+ if ('sessionId' in result) {
113
+ throw new Error('addPasskey unexpectedly minted a new session instead of linking.');
114
+ }
115
+ deps.onLinked();
116
+ }
117
+ //# sourceMappingURL=passkeyFlow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["PASSKEY_UNSUPPORTED_MESSAGE","exports","toCommitInput","result","sessionId","accessToken","deviceSecret","deviceId","expiresAt","userId","user","id","runPasskeyLogin","deps","isSupported","Error","options","getLoginOptions","response","runCeremony","loginVerify","deviceName","deviceFingerprint","commit","runPasskeyRegister","getRegisterOptions","username","registerVerify","runPasskeyAdd","onLinked"],"sourceRoot":"../../../../src","sources":["ui/context/passkeyFlow.ts"],"mappings":"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","ignoreList":[]}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.queryKeys = exports.invalidateUserQueries = exports.invalidateStorageQueries = exports.invalidateSessionQueries = exports.invalidateSecurityQueries = exports.invalidatePrivacyQueries = exports.invalidatePaymentsQueries = exports.invalidateDeviceQueries = exports.invalidateConnectedAppsQueries = exports.invalidateAccountQueries = void 0;
6
+ exports.queryKeys = exports.invalidateUserQueries = exports.invalidateStorageQueries = exports.invalidateSessionQueries = exports.invalidateSecurityQueries = exports.invalidatePrivacyQueries = exports.invalidatePaymentsQueries = exports.invalidateDeviceQueries = exports.invalidateConnectedAppsQueries = exports.invalidateAuthMethodsQueries = exports.invalidateAccountQueries = void 0;
7
7
  /**
8
8
  * Centralized query keys for TanStack Query
9
9
  *
@@ -63,6 +63,11 @@ const queryKeys = exports.queryKeys = {
63
63
  recent: limit => [...queryKeys.security.all, 'recent', limit],
64
64
  infinite: (limit, eventType) => [...queryKeys.security.all, 'infinite', limit, eventType]
65
65
  },
66
+ // Linked authentication methods (passwords, identity keys, passkeys, social)
67
+ authMethods: {
68
+ all: ['authMethods'],
69
+ list: userId => [...queryKeys.authMethods.all, 'list', userId || 'current']
70
+ },
66
71
  // Storage usage queries
67
72
  storage: {
68
73
  all: ['storage'],
@@ -158,9 +163,20 @@ const invalidateStorageQueries = queryClient => {
158
163
  };
159
164
 
160
165
  /**
161
- * Helper to invalidate all payments / wallet / subscription queries
166
+ * Helper to invalidate the user's linked auth-methods list (call after linking
167
+ * or removing a passkey / password / identity key).
162
168
  */
163
169
  exports.invalidateStorageQueries = invalidateStorageQueries;
170
+ const invalidateAuthMethodsQueries = queryClient => {
171
+ queryClient.invalidateQueries({
172
+ queryKey: queryKeys.authMethods.all
173
+ });
174
+ };
175
+
176
+ /**
177
+ * Helper to invalidate all payments / wallet / subscription queries
178
+ */
179
+ exports.invalidateAuthMethodsQueries = invalidateAuthMethodsQueries;
164
180
  const invalidatePaymentsQueries = queryClient => {
165
181
  queryClient.invalidateQueries({
166
182
  queryKey: queryKeys.payments.all
@@ -1 +1 @@
1
- {"version":3,"names":["queryKeys","exports","accounts","all","lists","list","sessionIds","details","detail","sessionId","current","settings","users","userIds","userId","profile","sessions","active","device","deviceId","devices","accountScope","privacy","security","activity","limit","offset","eventType","recent","infinite","storage","usage","connectedApps","follow","counts","payments","subscription","history","wallet","walletTransactions","invalidateAccountQueries","queryClient","invalidateQueries","queryKey","invalidateUserQueries","invalidateSessionQueries","invalidateDeviceQueries","invalidatePrivacyQueries","invalidateSecurityQueries","invalidateStorageQueries","invalidatePaymentsQueries","invalidateConnectedAppsQueries"],"sourceRoot":"../../../../../src","sources":["ui/hooks/queries/queryKeys.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["queryKeys","exports","accounts","all","lists","list","sessionIds","details","detail","sessionId","current","settings","users","userIds","userId","profile","sessions","active","device","deviceId","devices","accountScope","privacy","security","activity","limit","offset","eventType","recent","infinite","authMethods","storage","usage","connectedApps","follow","counts","payments","subscription","history","wallet","walletTransactions","invalidateAccountQueries","queryClient","invalidateQueries","queryKey","invalidateUserQueries","invalidateSessionQueries","invalidateDeviceQueries","invalidatePrivacyQueries","invalidateSecurityQueries","invalidateStorageQueries","invalidateAuthMethodsQueries","invalidatePaymentsQueries","invalidateConnectedAppsQueries"],"sourceRoot":"../../../../../src","sources":["ui/hooks/queries/queryKeys.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useAuthMethods = void 0;
7
+ var _react = require("react");
8
+ var _reactQuery = require("@tanstack/react-query");
9
+ var _queryKeys = require("./queryKeys.js");
10
+ var _OxyContext = require("../../context/OxyContext.js");
11
+ /** Stable empty list so the derived selectors keep a stable reference while loading. */
12
+ const EMPTY_METHODS = Object.freeze([]);
13
+
14
+ /**
15
+ * The current account's linked authentication methods (`GET /auth/methods`),
16
+ * plus convenience projections. Backs the security / account surfaces that let a
17
+ * user see and manage their passwords, identity key, social logins, and passkeys.
18
+ *
19
+ * `passkeys` is the `type === 'webauthn'` subset — one entry per registered
20
+ * credential. Invalidate via `queryKeys.authMethods.all` after linking a passkey
21
+ * (`useOxy().addPasskey()` does this) or removing one.
22
+ */
23
+ const useAuthMethods = options => {
24
+ const {
25
+ oxyServices,
26
+ activeSessionId
27
+ } = (0, _OxyContext.useOxy)();
28
+ const query = (0, _reactQuery.useQuery)({
29
+ queryKey: _queryKeys.queryKeys.authMethods.list(),
30
+ queryFn: () => oxyServices.listAuthMethods(),
31
+ enabled: options?.enabled !== false && !!activeSessionId,
32
+ staleTime: 5 * 60 * 1000,
33
+ // 5 minutes
34
+ gcTime: 10 * 60 * 1000 // 10 minutes
35
+ });
36
+ const methods = query.data?.methods ?? EMPTY_METHODS;
37
+ const passkeys = (0, _react.useMemo)(() => methods.filter(method => method.type === 'webauthn'), [methods]);
38
+ return {
39
+ ...query,
40
+ /** Every linked auth method. Empty while loading. */
41
+ methods,
42
+ /** The registered passkeys (a `type === 'webauthn'` subset of `methods`). */
43
+ passkeys,
44
+ /** The account's DID, or `null` while loading. */
45
+ did: query.data?.did ?? null
46
+ };
47
+ };
48
+ exports.useAuthMethods = useAuthMethods;
49
+ //# sourceMappingURL=useAuthMethods.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactQuery","_queryKeys","_OxyContext","EMPTY_METHODS","Object","freeze","useAuthMethods","options","oxyServices","activeSessionId","useOxy","query","useQuery","queryKey","queryKeys","authMethods","list","queryFn","listAuthMethods","enabled","staleTime","gcTime","methods","data","passkeys","useMemo","filter","method","type","did","exports"],"sourceRoot":"../../../../../src","sources":["ui/hooks/queries/useAuthMethods.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAEA,IAAAE,UAAA,GAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AAEA;AACA,MAAMI,aAAyC,GAAGC,MAAM,CAACC,MAAM,CAAC,EAAE,CAAC;;AAEnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,cAAc,GAAIC,OAA+B,IAAK;EACjE,MAAM;IAAEC,WAAW;IAAEC;EAAgB,CAAC,GAAG,IAAAC,kBAAM,EAAC,CAAC;EAEjD,MAAMC,KAAK,GAAG,IAAAC,oBAAQ,EAAsB;IAC1CC,QAAQ,EAAEC,oBAAS,CAACC,WAAW,CAACC,IAAI,CAAC,CAAC;IACtCC,OAAO,EAAEA,CAAA,KAAMT,WAAW,CAACU,eAAe,CAAC,CAAC;IAC5CC,OAAO,EAAEZ,OAAO,EAAEY,OAAO,KAAK,KAAK,IAAI,CAAC,CAACV,eAAe;IACxDW,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;IAAE;IAC1BC,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAE;EAC1B,CAAC,CAAC;EAEF,MAAMC,OAAO,GAAGX,KAAK,CAACY,IAAI,EAAED,OAAO,IAAInB,aAAa;EACpD,MAAMqB,QAAQ,GAAG,IAAAC,cAAO,EACtB,MAAMH,OAAO,CAACI,MAAM,CAAEC,MAAM,IAAKA,MAAM,CAACC,IAAI,KAAK,UAAU,CAAC,EAC5D,CAACN,OAAO,CACV,CAAC;EAED,OAAO;IACL,GAAGX,KAAK;IACR;IACAW,OAAO;IACP;IACAE,QAAQ;IACR;IACAK,GAAG,EAAElB,KAAK,CAACY,IAAI,EAAEM,GAAG,IAAI;EAC1B,CAAC;AACH,CAAC;AAACC,OAAA,CAAAxB,cAAA,GAAAA,cAAA","ignoreList":[]}
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.useAuthStore = void 0;
7
7
  var _zustand = require("zustand");
8
8
  var _core = require("@oxyhq/core");
9
- const debug = (0, _core.createDebugLogger)('AuthStore');
9
+ const log = (0, _core.createLogger)('AuthStore');
10
10
  const useAuthStore = exports.useAuthStore = (0, _zustand.create)((set, get) => ({
11
11
  user: null,
12
12
  isAuthenticated: false,
@@ -40,7 +40,9 @@ const useAuthStore = exports.useAuthStore = (0, _zustand.create)((set, get) => (
40
40
 
41
41
  // Use cached data if available and not forcing refresh
42
42
  if (!forceRefresh && state.user && cacheValid) {
43
- debug.log('Using cached user data (age:', cacheAge, 'ms)');
43
+ log.info('Using cached user data', {
44
+ cacheAge
45
+ });
44
46
  return;
45
47
  }
46
48
  set({
@@ -57,7 +59,7 @@ const useAuthStore = exports.useAuthStore = (0, _zustand.create)((set, get) => (
57
59
  });
58
60
  } catch (error) {
59
61
  const errorMessage = error instanceof Error ? error.message : 'Failed to fetch user';
60
- debug.error('Error fetching user:', error);
62
+ log.error('Error fetching user', error);
61
63
  set({
62
64
  error: errorMessage,
63
65
  isLoading: false
@@ -1 +1 @@
1
- {"version":3,"names":["_zustand","require","_core","debug","createDebugLogger","useAuthStore","exports","create","set","get","user","isAuthenticated","isLoading","error","lastUserFetch","loginSuccess","normalizeUserIdentity","Date","now","loginFailure","logout","setUser","fetchUser","oxyServices","forceRefresh","state","cacheAge","Number","POSITIVE_INFINITY","cacheValid","log","getCurrentUser","errorMessage","Error","message"],"sourceRoot":"../../../../src","sources":["ui/stores/authStore.ts"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAGA,MAAME,KAAK,GAAG,IAAAC,uBAAiB,EAAC,WAAW,CAAC;AAgBrC,MAAMC,YAAY,GAAAC,OAAA,CAAAD,YAAA,GAAG,IAAAE,eAAM,EAAY,CAACC,GAAwC,EAAEC,GAAoB,MAAM;EACjHC,IAAI,EAAE,IAAI;EACVC,eAAe,EAAE,KAAK;EACtBC,SAAS,EAAE,KAAK;EAChBC,KAAK,EAAE,IAAI;EACXC,aAAa,EAAE,IAAI;EAEnBC,YAAY,EAAGL,IAAU,IAAKF,GAAG,CAAC;IAChCI,SAAS,EAAE,KAAK;IAChBD,eAAe,EAAE,IAAI;IACrBD,IAAI,EAAE,IAAAM,2BAAqB,EAACN,IAAI,CAAC;IACjCI,aAAa,EAAEG,IAAI,CAACC,GAAG,CAAC;EAC1B,CAAC,CAAC;EACFC,YAAY,EAAGN,KAAa,IAAKL,GAAG,CAAC;IAAEI,SAAS,EAAE,KAAK;IAAEC;EAAM,CAAC,CAAC;EACjEO,MAAM,EAAEA,CAAA,KAAMZ,GAAG,CAAC;IAChBE,IAAI,EAAE,IAAI;IACVC,eAAe,EAAE,KAAK;IACtBG,aAAa,EAAE;EACjB,CAAC,CAAC;EACFO,OAAO,EAAGX,IAAU,IAAKF,GAAG,CAAC;IAAEE,IAAI,EAAE,IAAAM,2BAAqB,EAACN,IAAI,CAAC;IAAEI,aAAa,EAAEG,IAAI,CAACC,GAAG,CAAC;EAAE,CAAC,CAAC;EAC9FI,SAAS,EAAE,MAAAA,CAAOC,WAAW,EAAEC,YAAY,GAAG,KAAK,KAAK;IACtD,MAAMC,KAAK,GAAGhB,GAAG,CAAC,CAAC;IACnB,MAAMS,GAAG,GAAGD,IAAI,CAACC,GAAG,CAAC,CAAC;IACtB,MAAMQ,QAAQ,GAAGD,KAAK,CAACX,aAAa,GAAGI,GAAG,GAAGO,KAAK,CAACX,aAAa,GAAGa,MAAM,CAACC,iBAAiB;IAC3F,MAAMC,UAAU,GAAGH,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;;IAE7C;IACA,IAAI,CAACF,YAAY,IAAIC,KAAK,CAACf,IAAI,IAAImB,UAAU,EAAE;MAC7C1B,KAAK,CAAC2B,GAAG,CAAC,8BAA8B,EAAEJ,QAAQ,EAAE,KAAK,CAAC;MAC1D;IACF;IAEAlB,GAAG,CAAC;MAAEI,SAAS,EAAE,IAAI;MAAEC,KAAK,EAAE;IAAK,CAAC,CAAC;IACrC,IAAI;MACF,MAAMH,IAAI,GAAG,IAAAM,2BAAqB,EAAC,MAAMO,WAAW,CAACQ,cAAc,CAAC,CAAC,CAAC;MACtEvB,GAAG,CAAC;QAAEE,IAAI;QAAEE,SAAS,EAAE,KAAK;QAAED,eAAe,EAAE,IAAI;QAAEG,aAAa,EAAEI;MAAI,CAAC,CAAC;IAC5E,CAAC,CAAC,OAAOL,KAAK,EAAE;MACd,MAAMmB,YAAY,GAAGnB,KAAK,YAAYoB,KAAK,GAAGpB,KAAK,CAACqB,OAAO,GAAG,sBAAsB;MACpF/B,KAAK,CAACU,KAAK,CAAC,sBAAsB,EAAEA,KAAK,CAAC;MAC1CL,GAAG,CAAC;QAAEK,KAAK,EAAEmB,YAAY;QAAEpB,SAAS,EAAE;MAAM,CAAC,CAAC;IAChD;EACF;AACF,CAAC,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_zustand","require","_core","log","createLogger","useAuthStore","exports","create","set","get","user","isAuthenticated","isLoading","error","lastUserFetch","loginSuccess","normalizeUserIdentity","Date","now","loginFailure","logout","setUser","fetchUser","oxyServices","forceRefresh","state","cacheAge","Number","POSITIVE_INFINITY","cacheValid","info","getCurrentUser","errorMessage","Error","message"],"sourceRoot":"../../../../src","sources":["ui/stores/authStore.ts"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAGA,MAAME,GAAG,GAAG,IAAAC,kBAAY,EAAC,WAAW,CAAC;AAgB9B,MAAMC,YAAY,GAAAC,OAAA,CAAAD,YAAA,GAAG,IAAAE,eAAM,EAAY,CAACC,GAAwC,EAAEC,GAAoB,MAAM;EACjHC,IAAI,EAAE,IAAI;EACVC,eAAe,EAAE,KAAK;EACtBC,SAAS,EAAE,KAAK;EAChBC,KAAK,EAAE,IAAI;EACXC,aAAa,EAAE,IAAI;EAEnBC,YAAY,EAAGL,IAAU,IAAKF,GAAG,CAAC;IAChCI,SAAS,EAAE,KAAK;IAChBD,eAAe,EAAE,IAAI;IACrBD,IAAI,EAAE,IAAAM,2BAAqB,EAACN,IAAI,CAAC;IACjCI,aAAa,EAAEG,IAAI,CAACC,GAAG,CAAC;EAC1B,CAAC,CAAC;EACFC,YAAY,EAAGN,KAAa,IAAKL,GAAG,CAAC;IAAEI,SAAS,EAAE,KAAK;IAAEC;EAAM,CAAC,CAAC;EACjEO,MAAM,EAAEA,CAAA,KAAMZ,GAAG,CAAC;IAChBE,IAAI,EAAE,IAAI;IACVC,eAAe,EAAE,KAAK;IACtBG,aAAa,EAAE;EACjB,CAAC,CAAC;EACFO,OAAO,EAAGX,IAAU,IAAKF,GAAG,CAAC;IAAEE,IAAI,EAAE,IAAAM,2BAAqB,EAACN,IAAI,CAAC;IAAEI,aAAa,EAAEG,IAAI,CAACC,GAAG,CAAC;EAAE,CAAC,CAAC;EAC9FI,SAAS,EAAE,MAAAA,CAAOC,WAAW,EAAEC,YAAY,GAAG,KAAK,KAAK;IACtD,MAAMC,KAAK,GAAGhB,GAAG,CAAC,CAAC;IACnB,MAAMS,GAAG,GAAGD,IAAI,CAACC,GAAG,CAAC,CAAC;IACtB,MAAMQ,QAAQ,GAAGD,KAAK,CAACX,aAAa,GAAGI,GAAG,GAAGO,KAAK,CAACX,aAAa,GAAGa,MAAM,CAACC,iBAAiB;IAC3F,MAAMC,UAAU,GAAGH,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;;IAE7C;IACA,IAAI,CAACF,YAAY,IAAIC,KAAK,CAACf,IAAI,IAAImB,UAAU,EAAE;MAC7C1B,GAAG,CAAC2B,IAAI,CAAC,wBAAwB,EAAE;QAAEJ;MAAS,CAAC,CAAC;MAChD;IACF;IAEAlB,GAAG,CAAC;MAAEI,SAAS,EAAE,IAAI;MAAEC,KAAK,EAAE;IAAK,CAAC,CAAC;IACrC,IAAI;MACF,MAAMH,IAAI,GAAG,IAAAM,2BAAqB,EAAC,MAAMO,WAAW,CAACQ,cAAc,CAAC,CAAC,CAAC;MACtEvB,GAAG,CAAC;QAAEE,IAAI;QAAEE,SAAS,EAAE,KAAK;QAAED,eAAe,EAAE,IAAI;QAAEG,aAAa,EAAEI;MAAI,CAAC,CAAC;IAC5E,CAAC,CAAC,OAAOL,KAAK,EAAE;MACd,MAAMmB,YAAY,GAAGnB,KAAK,YAAYoB,KAAK,GAAGpB,KAAK,CAACqB,OAAO,GAAG,sBAAsB;MACpF/B,GAAG,CAACU,KAAK,CAAC,qBAAqB,EAAEA,KAAK,CAAC;MACvCL,GAAG,CAAC;QAAEK,KAAK,EAAEmB,YAAY;QAAEpB,SAAS,EAAE;MAAM,CAAC,CAAC;IAChD;EACF;AACF,CAAC,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isPasskeySupported = isPasskeySupported;
7
+ exports.runAuthenticationCeremony = runAuthenticationCeremony;
8
+ exports.runRegistrationCeremony = runRegistrationCeremony;
9
+ /**
10
+ * Passkey / WebAuthn ceremony client — clean default (non-web) implementation.
11
+ *
12
+ * This is the base module TypeScript resolves for TYPES and any bundler that
13
+ * does not pick a platform variant. It intentionally imports NOTHING browser-
14
+ * specific (no `@simplewebauthn/browser`) so it stays safe for Metro, native
15
+ * builds, and SSR. The real ceremony lives in `passkeyClient.web.ts`; native
16
+ * passkeys are Commons' job, so there is no WebAuthn ceremony here.
17
+ *
18
+ * `isPasskeySupported()` returns `false` (no relying-party origin / no browser
19
+ * WebAuthn API), and the ceremony helpers throw a clear error so a caller that
20
+ * skipped the support gate fails loudly instead of silently.
21
+ */
22
+
23
+ const WEBAUTHN_WEB_ONLY_MESSAGE = 'WebAuthn is web-only; native uses Commons. Passkeys are not available on this platform.';
24
+
25
+ /** Always `false` off the web — there is no relying-party origin or WebAuthn API. */
26
+ function isPasskeySupported() {
27
+ return false;
28
+ }
29
+
30
+ /** Not available off the web — throws. Guard with {@link isPasskeySupported} first. */
31
+ async function runRegistrationCeremony(_optionsJSON) {
32
+ throw new Error(WEBAUTHN_WEB_ONLY_MESSAGE);
33
+ }
34
+
35
+ /** Not available off the web — throws. Guard with {@link isPasskeySupported} first. */
36
+ async function runAuthenticationCeremony(_optionsJSON) {
37
+ throw new Error(WEBAUTHN_WEB_ONLY_MESSAGE);
38
+ }
39
+ //# sourceMappingURL=passkeyClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["WEBAUTHN_WEB_ONLY_MESSAGE","isPasskeySupported","runRegistrationCeremony","_optionsJSON","Error","runAuthenticationCeremony"],"sourceRoot":"../../../src","sources":["webauthn/passkeyClient.ts"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,yBAAyB,GAC7B,yFAAyF;;AAE3F;AACO,SAASC,kBAAkBA,CAAA,EAAY;EAC5C,OAAO,KAAK;AACd;;AAEA;AACO,eAAeC,uBAAuBA,CAACC,YAAqB,EAAoB;EACrF,MAAM,IAAIC,KAAK,CAACJ,yBAAyB,CAAC;AAC5C;;AAEA;AACO,eAAeK,yBAAyBA,CAACF,YAAqB,EAAoB;EACvF,MAAM,IAAIC,KAAK,CAACJ,yBAAyB,CAAC;AAC5C","ignoreList":[]}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isPasskeySupported = isPasskeySupported;
7
+ exports.runAuthenticationCeremony = runAuthenticationCeremony;
8
+ exports.runRegistrationCeremony = runRegistrationCeremony;
9
+ /**
10
+ * Passkey / WebAuthn ceremony client — NATIVE implementation.
11
+ *
12
+ * React Native has no browser WebAuthn API, and Oxy's native passkey story is
13
+ * Commons (shared-keychain / QR handoff), NOT `navigator.credentials`. So this
14
+ * variant imports NOTHING browser-specific and mirrors the clean default:
15
+ * unsupported, and the ceremony helpers throw if a caller skipped the gate.
16
+ */
17
+
18
+ const WEBAUTHN_WEB_ONLY_MESSAGE = 'WebAuthn is web-only; native uses Commons. Passkeys are not available on this platform.';
19
+
20
+ /** Always `false` on native — there is no browser WebAuthn API. */
21
+ function isPasskeySupported() {
22
+ return false;
23
+ }
24
+
25
+ /** Not available on native — throws. Guard with {@link isPasskeySupported} first. */
26
+ async function runRegistrationCeremony(_optionsJSON) {
27
+ throw new Error(WEBAUTHN_WEB_ONLY_MESSAGE);
28
+ }
29
+
30
+ /** Not available on native — throws. Guard with {@link isPasskeySupported} first. */
31
+ async function runAuthenticationCeremony(_optionsJSON) {
32
+ throw new Error(WEBAUTHN_WEB_ONLY_MESSAGE);
33
+ }
34
+ //# sourceMappingURL=passkeyClient.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["WEBAUTHN_WEB_ONLY_MESSAGE","isPasskeySupported","runRegistrationCeremony","_optionsJSON","Error","runAuthenticationCeremony"],"sourceRoot":"../../../src","sources":["webauthn/passkeyClient.native.ts"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,yBAAyB,GAC7B,yFAAyF;;AAE3F;AACO,SAASC,kBAAkBA,CAAA,EAAY;EAC5C,OAAO,KAAK;AACd;;AAEA;AACO,eAAeC,uBAAuBA,CAACC,YAAqB,EAAoB;EACrF,MAAM,IAAIC,KAAK,CAACJ,yBAAyB,CAAC;AAC5C;;AAEA;AACO,eAAeK,yBAAyBA,CAACF,YAAqB,EAAoB;EACvF,MAAM,IAAIC,KAAK,CAACJ,yBAAyB,CAAC;AAC5C","ignoreList":[]}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isPasskeySupported = isPasskeySupported;
7
+ exports.runAuthenticationCeremony = runAuthenticationCeremony;
8
+ exports.runRegistrationCeremony = runRegistrationCeremony;
9
+ var _browser = require("@simplewebauthn/browser");
10
+ /**
11
+ * Passkey / WebAuthn ceremony client — WEB implementation.
12
+ *
13
+ * The browser half of the passkey flow: it drives `navigator.credentials`
14
+ * through `@simplewebauthn/browser`, turning the OPAQUE options the server
15
+ * emitted (`OxyServices.webauthn{Register,Login}Options`) into the opaque
16
+ * response the matching `verify` endpoint consumes. Oxy never owns those wire
17
+ * shapes — `@simplewebauthn/browser` does — so options flow in as `unknown` and
18
+ * the single cast at this boundary hands them to the library's own types.
19
+ *
20
+ * This file is selected ONLY on web (react-native-web / Vite RNW): the sibling
21
+ * `passkeyClient.native.ts` + the clean default `passkeyClient.ts` deliberately
22
+ * do NOT import `@simplewebauthn/browser` (a browser-only dependency), per the
23
+ * platform-split rule. Native passkeys are Commons' job — there is no WebAuthn
24
+ * ceremony off the web.
25
+ */
26
+
27
+ /**
28
+ * True iff this browser can run a WebAuthn ceremony (exposes the
29
+ * `PublicKeyCredential` global). Gate all passkey UI/entrypoints on this so an
30
+ * unsupported browser fails loudly rather than throwing mid-ceremony.
31
+ */
32
+ function isPasskeySupported() {
33
+ return typeof window !== 'undefined' && typeof window.PublicKeyCredential !== 'undefined';
34
+ }
35
+
36
+ /**
37
+ * Run the WebAuthn REGISTRATION ceremony (`navigator.credentials.create`) from
38
+ * the server's opaque creation options, returning the opaque attestation
39
+ * response for `OxyServices.webauthnRegisterVerify`.
40
+ */
41
+ async function runRegistrationCeremony(optionsJSON) {
42
+ return (0, _browser.startRegistration)({
43
+ optionsJSON: optionsJSON
44
+ });
45
+ }
46
+
47
+ /**
48
+ * Run the WebAuthn AUTHENTICATION ceremony (`navigator.credentials.get`) from
49
+ * the server's opaque request options, returning the opaque assertion response
50
+ * for `OxyServices.webauthnLoginVerify`.
51
+ */
52
+ async function runAuthenticationCeremony(optionsJSON) {
53
+ return (0, _browser.startAuthentication)({
54
+ optionsJSON: optionsJSON
55
+ });
56
+ }
57
+ //# sourceMappingURL=passkeyClient.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_browser","require","isPasskeySupported","window","PublicKeyCredential","runRegistrationCeremony","optionsJSON","startRegistration","runAuthenticationCeremony","startAuthentication"],"sourceRoot":"../../../src","sources":["webauthn/passkeyClient.web.ts"],"mappings":";;;;;;;;AAiBA,IAAAA,QAAA,GAAAC,OAAA;AAjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAWA;AACA;AACA;AACA;AACA;AACO,SAASC,kBAAkBA,CAAA,EAAY;EAC5C,OAAO,OAAOC,MAAM,KAAK,WAAW,IAAI,OAAOA,MAAM,CAACC,mBAAmB,KAAK,WAAW;AAC3F;;AAEA;AACA;AACA;AACA;AACA;AACO,eAAeC,uBAAuBA,CAC3CC,WAAoB,EACe;EACnC,OAAO,IAAAC,0BAAiB,EAAC;IAAED,WAAW,EAAEA;EAAsD,CAAC,CAAC;AAClG;;AAEA;AACA;AACA;AACA;AACA;AACO,eAAeE,yBAAyBA,CAC7CF,WAAoB,EACiB;EACrC,OAAO,IAAAG,4BAAmB,EAAC;IAAEH,WAAW,EAAEA;EAAqD,CAAC,CAAC;AACnG","ignoreList":[]}
@@ -61,6 +61,7 @@ export { useStorage } from "./ui/hooks/useStorage.js";
61
61
  export { useUserProfile, useUserProfiles, useCurrentUser, useUserById, useUserByUsername, useUsersBySessions, usePrivacySettings, useConnectedApps } from "./ui/hooks/queries/useAccountQueries.js";
62
62
  export { useSessions, useSession, useDeviceSessions, useUserDevices, useSecurityInfo, useAccountStorageUsage } from "./ui/hooks/queries/useServicesQueries.js";
63
63
  export { useSecurityActivity, useRecentSecurityActivity, useInfiniteSecurityActivity } from "./ui/hooks/queries/useSecurityQueries.js";
64
+ export { useAuthMethods } from "./ui/hooks/queries/useAuthMethods.js";
64
65
  export { useUserSubscription, useUserPayments, useUserWallet, useUserWalletTransactions } from "./ui/hooks/queries/usePaymentQueries.js";
65
66
 
66
67
  // Payment / wallet / subscription domain types
@@ -80,7 +81,7 @@ export { mutationKeys } from "./ui/hooks/mutations/mutationKeys.js";
80
81
  // Consumers (Mention, Homiio, Alia, accounts) use these to invalidate cached
81
82
  // data after writes that touch shared backend state. Keep nominal — no
82
83
  // `export *` — and never drop a public symbol without a major version bump.
83
- export { queryKeys, invalidateAccountQueries, invalidateUserQueries, invalidateSessionQueries, invalidateDeviceQueries, invalidatePrivacyQueries, invalidateSecurityQueries, invalidateStorageQueries, invalidatePaymentsQueries, invalidateConnectedAppsQueries } from "./ui/hooks/queries/queryKeys.js";
84
+ export { queryKeys, invalidateAccountQueries, invalidateUserQueries, invalidateSessionQueries, invalidateDeviceQueries, invalidatePrivacyQueries, invalidateSecurityQueries, invalidateStorageQueries, invalidatePaymentsQueries, invalidateConnectedAppsQueries, invalidateAuthMethodsQueries } from "./ui/hooks/queries/queryKeys.js";
84
85
 
85
86
  // Mutation status aggregator (for "Syncing..." indicators)
86
87
  export { useMutationStatus } from "./ui/hooks/useMutationStatus.js";
@@ -1 +1 @@
1
- {"version":3,"names":["setPlatformOS","Platform","OS","default","OxyProvider","useOxy","useAuth","FontLoader","setupFonts","useAuthStore","useAccountStore","useAssetStore","useAssets","useAssetsStore","useAsset","useUploadProgress","useAssetLoading","useAssetErrors","useAssetsByApp","useAssetsByEntity","useAssetUsageCount","useIsAssetLinked","setOxyAssetInstance","useFileDownloadUrl","useFollow","useFollowerCounts","useStorage","useUserProfile","useUserProfiles","useCurrentUser","useUserById","useUserByUsername","useUsersBySessions","usePrivacySettings","useConnectedApps","useSessions","useSession","useDeviceSessions","useUserDevices","useSecurityInfo","useAccountStorageUsage","useSecurityActivity","useRecentSecurityActivity","useInfiniteSecurityActivity","useUserSubscription","useUserPayments","useUserWallet","useUserWalletTransactions","useUpdateProfile","useUploadAvatar","useUpdateAccountSettings","useUpdatePrivacySettings","useUpdateNotificationPreferences","useUpdateUserPreferences","useRevokeConnectedApp","useUploadFile","useSwitchSession","useLogoutSession","useLogoutAll","useUpdateDeviceName","useRemoveDevice","createProfileMutation","createGenericMutation","mutationKeys","queryKeys","invalidateAccountQueries","invalidateUserQueries","invalidateSessionQueries","invalidateDeviceQueries","invalidatePrivacyQueries","invalidateSecurityQueries","invalidateStorageQueries","invalidatePaymentsQueries","invalidateConnectedAppsQueries","useMutationStatus","useOnlineStatus","useOxyEvent","handleAuthError","isInvalidSessionError","isTimeoutOrNetworkError","extractErrorMessage","useFileFiltering","OXY_OAUTH_STATE_STORAGE_KEY","OXY_OAUTH_CODE_VERIFIER_STORAGE_KEY","OxySignInButton","OxyAuthPrompt","OxyOAuthCallback","OxyConsentScreen","RequireOxyAuth","FollowButton","OxyPayButton","LogoIcon","LogoText","ProfileButton","useSwitchableAccounts","ProfileScreen","ManageAccountScreen","NotificationsScreen","PreferencesScreen","ConnectedAppsScreen","CreateAccountScreen","AccountMembersScreen","AccountSettingsScreen","showBottomSheet","closeBottomSheet","openAccountDialog","closeAccountDialog","subscribeToAccountDialog"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["setPlatformOS","Platform","OS","default","OxyProvider","useOxy","useAuth","FontLoader","setupFonts","useAuthStore","useAccountStore","useAssetStore","useAssets","useAssetsStore","useAsset","useUploadProgress","useAssetLoading","useAssetErrors","useAssetsByApp","useAssetsByEntity","useAssetUsageCount","useIsAssetLinked","setOxyAssetInstance","useFileDownloadUrl","useFollow","useFollowerCounts","useStorage","useUserProfile","useUserProfiles","useCurrentUser","useUserById","useUserByUsername","useUsersBySessions","usePrivacySettings","useConnectedApps","useSessions","useSession","useDeviceSessions","useUserDevices","useSecurityInfo","useAccountStorageUsage","useSecurityActivity","useRecentSecurityActivity","useInfiniteSecurityActivity","useAuthMethods","useUserSubscription","useUserPayments","useUserWallet","useUserWalletTransactions","useUpdateProfile","useUploadAvatar","useUpdateAccountSettings","useUpdatePrivacySettings","useUpdateNotificationPreferences","useUpdateUserPreferences","useRevokeConnectedApp","useUploadFile","useSwitchSession","useLogoutSession","useLogoutAll","useUpdateDeviceName","useRemoveDevice","createProfileMutation","createGenericMutation","mutationKeys","queryKeys","invalidateAccountQueries","invalidateUserQueries","invalidateSessionQueries","invalidateDeviceQueries","invalidatePrivacyQueries","invalidateSecurityQueries","invalidateStorageQueries","invalidatePaymentsQueries","invalidateConnectedAppsQueries","invalidateAuthMethodsQueries","useMutationStatus","useOnlineStatus","useOxyEvent","handleAuthError","isInvalidSessionError","isTimeoutOrNetworkError","extractErrorMessage","useFileFiltering","OXY_OAUTH_STATE_STORAGE_KEY","OXY_OAUTH_CODE_VERIFIER_STORAGE_KEY","OxySignInButton","OxyAuthPrompt","OxyOAuthCallback","OxyConsentScreen","RequireOxyAuth","FollowButton","OxyPayButton","LogoIcon","LogoText","ProfileButton","useSwitchableAccounts","ProfileScreen","ManageAccountScreen","NotificationsScreen","PreferencesScreen","ConnectedAppsScreen","CreateAccountScreen","AccountMembersScreen","AccountSettingsScreen","showBottomSheet","closeBottomSheet","openAccountDialog","closeAccountDialog","subscribeToAccountDialog"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
@@ -41,7 +41,7 @@
41
41
  */
42
42
 
43
43
  import { useCallback, useMemo, useState, useSyncExternalStore } from 'react';
44
- import { Platform, Pressable, ScrollView, StyleSheet, View } from 'react-native';
44
+ import { Pressable, ScrollView, StyleSheet, View } from 'react-native';
45
45
  import { MaterialCommunityIcons } from '@expo/vector-icons';
46
46
  import QRCode from 'react-native-qrcode-svg';
47
47
  import { Avatar } from '@oxyhq/bloom/avatar';
@@ -49,9 +49,11 @@ import { Button } from '@oxyhq/bloom/button';
49
49
  import { Dialog } from '@oxyhq/bloom/dialog';
50
50
  import { Text } from '@oxyhq/bloom/typography';
51
51
  import { useTheme, BloomColorScope, APP_COLOR_NAMES, APP_COLOR_PRESETS } from '@oxyhq/bloom/theme';
52
+ import { isOxyRpOrigin } from '@oxyhq/core';
52
53
  import { useQueryClient } from '@tanstack/react-query';
53
54
  import { useOxy } from "../context/OxyContext.js";
54
55
  import { useI18n } from "../hooks/useI18n.js";
56
+ import { isWebBrowser } from "../utils/isWebBrowser.js";
55
57
  import { LogoIcon } from "./logo/LogoIcon.js";
56
58
 
57
59
  /** Diameter of a row avatar. */
@@ -61,7 +63,6 @@ const ROW_AVATAR_SIZE = 40;
61
63
  const QR_PLATE_BG = '#FFFFFF';
62
64
  const QR_FOREGROUND = '#000000';
63
65
  const QR_SIZE = 196;
64
- const isWeb = Platform.OS === 'web';
65
66
 
66
67
  /**
67
68
  * Resolve an account's stored color (a named Bloom preset, e.g. `'purple'`) to
@@ -90,7 +91,8 @@ const OxyAccountDialog = () => {
90
91
  closeAccountDialog,
91
92
  showBottomSheet,
92
93
  logoutAll,
93
- refreshAccounts
94
+ refreshAccounts,
95
+ signInWithPasskey
94
96
  } = useOxy();
95
97
  const theme = useTheme();
96
98
  const {
@@ -98,6 +100,29 @@ const OxyAccountDialog = () => {
98
100
  } = useI18n();
99
101
  const queryClient = useQueryClient();
100
102
 
103
+ // Passkey sign-in is offered ONLY on a first-party Oxy web origin (a credential
104
+ // minted for `oxy.so` can only be asserted there or on a loopback dev host).
105
+ // Off the web / on a non-Oxy origin the button is hidden entirely (a hub popup
106
+ // for arbitrary web origins is a later phase). This is environment-static.
107
+ const passkeyAvailable = useMemo(() => isWebBrowser() && isOxyRpOrigin(), []);
108
+ const [passkeyPending, setPasskeyPending] = useState(false);
109
+ const [passkeyError, setPasskeyError] = useState(null);
110
+ const handleSignInWithPasskey = useCallback(async () => {
111
+ if (passkeyPending) return;
112
+ setPasskeyPending(true);
113
+ setPasskeyError(null);
114
+ try {
115
+ await signInWithPasskey();
116
+ closeAccountDialog();
117
+ } catch (error) {
118
+ // A cancelled/failed ceremony keeps the dialog open so the user can retry
119
+ // or fall back to another method — surface a concise message, never swallow.
120
+ setPasskeyError(error instanceof Error && error.message ? error.message : 'Passkey sign-in failed.');
121
+ } finally {
122
+ setPasskeyPending(false);
123
+ }
124
+ }, [passkeyPending, signInWithPasskey, closeAccountDialog]);
125
+
101
126
  // Bind the headless controller. `getSnapshot` returns a stable reference
102
127
  // between changes, so it is `useSyncExternalStore`-safe. Guard the no-provider
103
128
  // loading state (`controller` is `null`) with an inert store.
@@ -152,19 +177,8 @@ const OxyAccountDialog = () => {
152
177
  const showBack = view === 'qr' || view === 'add' && snapshot.accounts.length > 0;
153
178
  return /*#__PURE__*/_jsxs(Dialog, {
154
179
  open: isAccountDialogOpen,
155
- onClose: closeAccountDialog
156
- // On web ALWAYS use the centered placement. Bloom's `bottom` placement
157
- // routes through its `BottomSheet`, which on web is built on
158
- // react-native-web's `Modal`. That `Modal` creates its `ModalPortal` host
159
- // node as a side effect during render and removes it in an effect cleanup;
160
- // under React 19 concurrent rendering (and StrictMode's dev double-invoke)
161
- // the host is orphaned and never re-attached, so the sheet never paints on
162
- // narrow web viewports (reproduced on console.oxy.so / auth.oxy.so, Pixel-7
163
- // width). The `center` placement uses Bloom's react-dom Portal (no RN
164
- // Modal) and paints reliably at every width. Native keeps the real bottom
165
- // sheet on narrow screens.
166
- ,
167
- placement: isWeb ? 'center' : {
180
+ onClose: closeAccountDialog,
181
+ placement: {
168
182
  base: 'bottom',
169
183
  md: 'center'
170
184
  },
@@ -199,7 +213,10 @@ const OxyAccountDialog = () => {
199
213
  handlers: handlers,
200
214
  onSignInWithOxy: () => void controller.signInWithOxy(),
201
215
  onScanQr: () => void controller.showQr(),
202
- onUsePassword: () => void controller.openPasswordAtOxyAuth()
216
+ onUsePassword: () => void controller.openPasswordAtOxyAuth(),
217
+ onSignInWithPasskey: passkeyAvailable ? () => void handleSignInWithPasskey() : undefined,
218
+ passkeyPending: passkeyPending,
219
+ passkeyError: passkeyError
203
220
  })
204
221
  })]
205
222
  });
@@ -419,7 +436,10 @@ const SignInView = ({
419
436
  handlers,
420
437
  onSignInWithOxy,
421
438
  onScanQr,
422
- onUsePassword
439
+ onUsePassword,
440
+ onSignInWithPasskey,
441
+ passkeyPending,
442
+ passkeyError
423
443
  }) => /*#__PURE__*/_jsxs(View, {
424
444
  style: styles.signInBlock,
425
445
  children: [snapshot.accounts.length > 0 ? /*#__PURE__*/_jsxs(View, {
@@ -439,7 +459,19 @@ const SignInView = ({
439
459
  onPress: onSignInWithOxy,
440
460
  style: styles.primaryButton,
441
461
  children: "Sign in with Oxy"
442
- }), /*#__PURE__*/_jsx(Button, {
462
+ }), onSignInWithPasskey ? /*#__PURE__*/_jsx(Button, {
463
+ variant: "secondary",
464
+ onPress: onSignInWithPasskey,
465
+ disabled: passkeyPending,
466
+ style: styles.secondaryButton,
467
+ testID: "passkey-signin-button",
468
+ children: passkeyPending ? t('accountSwitcher.passkeySigningIn') || 'Signing in…' : t('accountSwitcher.signInWithPasskey') || 'Sign in with a passkey'
469
+ }) : null, passkeyError ? /*#__PURE__*/_jsx(Text, {
470
+ style: [styles.errorText, {
471
+ color: theme.colors.error
472
+ }],
473
+ children: passkeyError
474
+ }) : null, /*#__PURE__*/_jsx(Button, {
443
475
  variant: "secondary",
444
476
  onPress: onScanQr,
445
477
  style: styles.secondaryButton,