@molecule/app-auth 1.8.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -137,15 +137,18 @@
137
137
  * const config: AuthClientConfig<MyUser> = {
138
138
  * mapAuthResponse: (data) => {
139
139
  * const { user: wire } = data as { user: { token: string } & Omit<MyUser, 'id'> }
140
+ * // The bearer stays OUT of the profile: the client caches `user` in Web
141
+ * // Storage, where a token copy is readable by any script on the origin.
142
+ * const { token, ...profile } = wire
140
143
  * return {
141
- * accessToken: wire.token,
144
+ * accessToken: token,
142
145
  * user: {
143
146
  * // Every wire field the pages read (`username`, `image`, …) survives…
144
- * ...wire,
147
+ * ...profile,
145
148
  * // …plus the base fields the client derives its identity from.
146
- * id: wire.username,
147
- * name: wire.name ?? wire.username,
148
- * avatar: wire.image,
149
+ * id: profile.username,
150
+ * name: profile.name ?? profile.username,
151
+ * avatar: profile.image,
149
152
  * },
150
153
  * }
151
154
  * },
@@ -155,6 +158,44 @@
155
158
  * // React: `useAuth<MyUser>()` reads the same profile.
156
159
  * ```
157
160
  *
161
+ * A profile does not have to extend `UserProfile` and does not need an `id`: the client
162
+ * stores and returns the object it is given and reads no field of it. Name the API's own
163
+ * shape, pass it to the factory and the config, and have the mapper return it complete —
164
+ * every configuration adapter is typed by the same `T` (`mapAuthResponse`, the
165
+ * `profileEndpoint`/`profileUpdateMethod`/`profileRequestBody` write transport,
166
+ * `shouldRestoreUser`, and `setSession`):
167
+ *
168
+ * ```typescript
169
+ * import type { AuthClientConfig } from '@molecule/app-auth'
170
+ * import { createJWTAuthClient } from '@molecule/app-auth'
171
+ *
172
+ * interface SessionUser {
173
+ * username: string
174
+ * email: string
175
+ * bio: string
176
+ * image: string
177
+ * }
178
+ *
179
+ * const config: AuthClientConfig<SessionUser> = {
180
+ * mapAuthResponse: (data) => {
181
+ * const { user: wire } = data as { user: { token: string } & SessionUser }
182
+ * // The bearer stays OUT of the profile: the client caches `user` in Web
183
+ * // Storage, where a token copy is readable by any script on the origin.
184
+ * const { token, ...profile } = wire
185
+ * return { accessToken: token, user: profile }
186
+ * },
187
+ * profileEndpoint: (user) => '/people/' + encodeURIComponent(user.username),
188
+ * }
189
+ *
190
+ * const client = createJWTAuthClient<SessionUser>(config)
191
+ * // `client.getUser()` has `bio`/`image`; there is no `id` to fabricate.
192
+ * ```
193
+ *
194
+ * The profile is named at the factory, never inferred from the mapper: an untyped
195
+ * `createJWTAuthClient({ mapAuthResponse })` stays `UserProfile`, whose required
196
+ * `id: string` is the default configuration's contract. An array, a function or a
197
+ * `Date` is not a profile the client can persist — see `AuthProfileShape`.
198
+ *
158
199
  * A username-derived `id` can change during a profile save. It is not an immutable
159
200
  * session identifier: `getSessionRevision()` tracks session ownership independently
160
201
  * of profile fields, remains unchanged for profile updates and same-session
@@ -227,7 +268,8 @@
227
268
  * @remarks
228
269
  * - **An API with its own auth envelope keeps this client.** `requestBody` wraps the
229
270
  * login/register payload (`(kind, p) => ({ user: p })`), `mapAuthResponse` reads the
230
- * token and user out of the answer (`(d) => ({ accessToken: d.user.token, user: d.user })`),
271
+ * token and user out of the answer — keeping the wire bearer OUT of the profile,
272
+ * because the client caches `user` in Web Storage (see the mapper example below) —
231
273
  * and `authScheme: 'Token'` sends `Authorization: Token <jwt>`. `mapAuthResponse` is the
232
274
  * ONE user-shape adapter: the client applies it to every answer that carries a user (login,
233
275
  * register, `validateSession()`, the cookie restore, a token refresh, `updateProfile()`), so
@@ -248,6 +290,16 @@
248
290
  * - Client-side auth state is UX only — the server enforces authorization on
249
291
  * every request; hiding a screen is not protection.
250
292
  *
293
+ * The mapper for such an envelope, with the wire token kept out of the cached
294
+ * profile (`d` is the parsed answer):
295
+ *
296
+ * ```typescript
297
+ * (d) => {
298
+ * const { token, ...user } = d.user
299
+ * return { accessToken: token, user }
300
+ * }
301
+ * ```
302
+ *
251
303
  * @example
252
304
  * ```typescript
253
305
  * import { createJWTAuthClient, setClient } from '@molecule/app-auth'
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4UG;AAEH,cAAc,sBAAsB,CAAA;AACpC,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgYG;AAEH,cAAc,sBAAsB,CAAA;AACpC,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA"}
package/dist/index.js CHANGED
@@ -137,15 +137,18 @@
137
137
  * const config: AuthClientConfig<MyUser> = {
138
138
  * mapAuthResponse: (data) => {
139
139
  * const { user: wire } = data as { user: { token: string } & Omit<MyUser, 'id'> }
140
+ * // The bearer stays OUT of the profile: the client caches `user` in Web
141
+ * // Storage, where a token copy is readable by any script on the origin.
142
+ * const { token, ...profile } = wire
140
143
  * return {
141
- * accessToken: wire.token,
144
+ * accessToken: token,
142
145
  * user: {
143
146
  * // Every wire field the pages read (`username`, `image`, …) survives…
144
- * ...wire,
147
+ * ...profile,
145
148
  * // …plus the base fields the client derives its identity from.
146
- * id: wire.username,
147
- * name: wire.name ?? wire.username,
148
- * avatar: wire.image,
149
+ * id: profile.username,
150
+ * name: profile.name ?? profile.username,
151
+ * avatar: profile.image,
149
152
  * },
150
153
  * }
151
154
  * },
@@ -155,6 +158,44 @@
155
158
  * // React: `useAuth<MyUser>()` reads the same profile.
156
159
  * ```
157
160
  *
161
+ * A profile does not have to extend `UserProfile` and does not need an `id`: the client
162
+ * stores and returns the object it is given and reads no field of it. Name the API's own
163
+ * shape, pass it to the factory and the config, and have the mapper return it complete —
164
+ * every configuration adapter is typed by the same `T` (`mapAuthResponse`, the
165
+ * `profileEndpoint`/`profileUpdateMethod`/`profileRequestBody` write transport,
166
+ * `shouldRestoreUser`, and `setSession`):
167
+ *
168
+ * ```typescript
169
+ * import type { AuthClientConfig } from '@molecule/app-auth'
170
+ * import { createJWTAuthClient } from '@molecule/app-auth'
171
+ *
172
+ * interface SessionUser {
173
+ * username: string
174
+ * email: string
175
+ * bio: string
176
+ * image: string
177
+ * }
178
+ *
179
+ * const config: AuthClientConfig<SessionUser> = {
180
+ * mapAuthResponse: (data) => {
181
+ * const { user: wire } = data as { user: { token: string } & SessionUser }
182
+ * // The bearer stays OUT of the profile: the client caches `user` in Web
183
+ * // Storage, where a token copy is readable by any script on the origin.
184
+ * const { token, ...profile } = wire
185
+ * return { accessToken: token, user: profile }
186
+ * },
187
+ * profileEndpoint: (user) => '/people/' + encodeURIComponent(user.username),
188
+ * }
189
+ *
190
+ * const client = createJWTAuthClient<SessionUser>(config)
191
+ * // `client.getUser()` has `bio`/`image`; there is no `id` to fabricate.
192
+ * ```
193
+ *
194
+ * The profile is named at the factory, never inferred from the mapper: an untyped
195
+ * `createJWTAuthClient({ mapAuthResponse })` stays `UserProfile`, whose required
196
+ * `id: string` is the default configuration's contract. An array, a function or a
197
+ * `Date` is not a profile the client can persist — see `AuthProfileShape`.
198
+ *
158
199
  * A username-derived `id` can change during a profile save. It is not an immutable
159
200
  * session identifier: `getSessionRevision()` tracks session ownership independently
160
201
  * of profile fields, remains unchanged for profile updates and same-session
@@ -227,7 +268,8 @@
227
268
  * @remarks
228
269
  * - **An API with its own auth envelope keeps this client.** `requestBody` wraps the
229
270
  * login/register payload (`(kind, p) => ({ user: p })`), `mapAuthResponse` reads the
230
- * token and user out of the answer (`(d) => ({ accessToken: d.user.token, user: d.user })`),
271
+ * token and user out of the answer — keeping the wire bearer OUT of the profile,
272
+ * because the client caches `user` in Web Storage (see the mapper example below) —
231
273
  * and `authScheme: 'Token'` sends `Authorization: Token <jwt>`. `mapAuthResponse` is the
232
274
  * ONE user-shape adapter: the client applies it to every answer that carries a user (login,
233
275
  * register, `validateSession()`, the cookie restore, a token refresh, `updateProfile()`), so
@@ -248,6 +290,16 @@
248
290
  * - Client-side auth state is UX only — the server enforces authorization on
249
291
  * every request; hiding a screen is not protection.
250
292
  *
293
+ * The mapper for such an envelope, with the wire token kept out of the cached
294
+ * profile (`d` is the parsed answer):
295
+ *
296
+ * ```typescript
297
+ * (d) => {
298
+ * const { token, ...user } = d.user
299
+ * return { accessToken: token, user }
300
+ * }
301
+ * ```
302
+ *
251
303
  * @example
252
304
  * ```typescript
253
305
  * import { createJWTAuthClient, setClient } from '@molecule/app-auth'
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4UG;AAEH,cAAc,sBAAsB,CAAA;AACpC,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgYG;AAEH,cAAc,sBAAsB,CAAA;AACpC,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA"}
@@ -7,7 +7,7 @@
7
7
  *
8
8
  * @module
9
9
  */
10
- import type { AuthClient, RegisterExtraShape, UserProfile } from './types.js';
10
+ import type { AuthClient, AuthProfileConstraint, RegisterExtraShape, UserProfile } from './types.js';
11
11
  /**
12
12
  * Registers an auth client as the active singleton. Called by bond
13
13
  * packages during application startup.
@@ -21,13 +21,16 @@ export declare const setClient: <T = UserProfile, TRegister extends RegisterExtr
21
21
  /**
22
22
  * Retrieves the bonded auth client, throwing if none is configured.
23
23
  *
24
- * @template T - The user profile the bonded client returns.
24
+ * @template T - The user profile the bonded client returns: a JSON object type
25
+ * of named fields (see {@link AuthProfileConstraint}), including an app
26
+ * profile with no `id`. Name it at the call (`getClient<SessionUser>()`); it
27
+ * is never inferred from a config.
25
28
  * @template TRegister - The app's own registration fields, at the top level
26
29
  * of `register()` (see `RegisterData`).
27
30
  * @returns The bonded auth client.
28
31
  * @throws {Error} If no auth client has been bonded.
29
32
  */
30
- export declare const getClient: <T extends UserProfile = UserProfile, TRegister extends RegisterExtraShape<TRegister> = Record<never, never>>() => AuthClient<T, TRegister>;
33
+ export declare const getClient: <T extends AuthProfileConstraint<T> = UserProfile, TRegister extends RegisterExtraShape<TRegister> = Record<never, never>>() => AuthClient<T, TRegister>;
31
34
  /**
32
35
  * Checks whether an auth client is currently bonded.
33
36
  *
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAI7E;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,GACpB,CAAC,GAAG,WAAW,EACf,SAAS,SAAS,kBAAkB,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAEtE,QAAQ,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,KAC/B,IAEF,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,GACpB,CAAC,SAAS,WAAW,GAAG,WAAW,EACnC,SAAS,SAAS,kBAAkB,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,OACnE,UAAU,CAAC,CAAC,EAAE,SAAS,CAE3B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,QAAO,OAE5B,CAAA"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAIpG;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,GACpB,CAAC,GAAG,WAAW,EACf,SAAS,SAAS,kBAAkB,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAEtE,QAAQ,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,KAC/B,IAEF,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,SAAS,GACpB,CAAC,SAAS,qBAAqB,CAAC,CAAC,CAAC,GAAG,WAAW,EAChD,SAAS,SAAS,kBAAkB,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,OACnE,UAAU,CAAC,CAAC,EAAE,SAAS,CAE3B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,QAAO,OAE5B,CAAA"}
package/dist/provider.js CHANGED
@@ -24,7 +24,10 @@ export const setClient = (client) => {
24
24
  /**
25
25
  * Retrieves the bonded auth client, throwing if none is configured.
26
26
  *
27
- * @template T - The user profile the bonded client returns.
27
+ * @template T - The user profile the bonded client returns: a JSON object type
28
+ * of named fields (see {@link AuthProfileConstraint}), including an app
29
+ * profile with no `id`. Name it at the call (`getClient<SessionUser>()`); it
30
+ * is never inferred from a config.
28
31
  * @template TRegister - The app's own registration fields, at the top level
29
32
  * of `register()` (see `RegisterData`).
30
33
  * @returns The bonded auth client.
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAI3E,MAAM,SAAS,GAAG,aAAa,CAAA;AAE/B;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAIvB,MAAgC,EAC1B,EAAE;IACR,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;AACzB,CAAC,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,GAGK,EAAE;IAC9B,OAAO,WAAW,CAA2B,SAAS,CAAC,CAAA;AACzD,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,GAAY,EAAE;IACrC,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAA;AAC5B,CAAC,CAAA"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAI3E,MAAM,SAAS,GAAG,aAAa,CAAA;AAE/B;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAIvB,MAAgC,EAC1B,EAAE;IACR,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;AACzB,CAAC,CAAA;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,GAGK,EAAE;IAC9B,OAAO,WAAW,CAA2B,SAAS,CAAC,CAAA;AACzD,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,GAAY,EAAE;IACrC,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAA;AAC5B,CAAC,CAAA"}
package/dist/types.d.ts CHANGED
@@ -33,6 +33,117 @@ export interface UserProfile {
33
33
  */
34
34
  metadata?: Record<string, unknown>;
35
35
  }
36
+ /**
37
+ * The sentence every invalid profile type is rejected with.
38
+ */
39
+ type AuthProfileRejection = 'An auth profile must be a JSON object type of named fields, not an array, a function or a Date';
40
+ /**
41
+ * The profile shapes the auth client accepts: a JSON object type of named
42
+ * fields, and nothing else.
43
+ *
44
+ * The client does not read a field of the profile, but it does persist it:
45
+ * `tokenStorage.setUser` writes it with `JSON.stringify` and `getUser` restores
46
+ * it with `JSON.parse`, and `updateProfile(data: Partial<T>)` patches it
47
+ * field-wise. An array has no named fields to read or patch, `JSON.stringify`
48
+ * drops a function entirely, and a `Date` comes back from `JSON.parse` as a
49
+ * string while still typed as a `Date` — so those three types are rejected on
50
+ * every entrypoint that takes a profile type (`createJWTAuthClient`,
51
+ * the default-auth factories, `AuthClientConfig`).
52
+ *
53
+ * The check is on the TOP-LEVEL shape only: a class instance, or a `Date` in a
54
+ * nested field, is the app's own persistence contract, not this validator's.
55
+ * A named `interface`, a type literal, an intersection and the empty object
56
+ * type all satisfy it — `{}` compiles because it is a JSON object that
57
+ * round-trips unchanged, not an invalid form.
58
+ *
59
+ * A union is checked member by member: `ExistingUser | ExistingUser[]` contains
60
+ * an array, so it is not an object-only profile either, and the shared
61
+ * rejection test (`AuthProfileIsRejected`, used by
62
+ * {@link AuthProfileConstraint} and {@link AuthProfileGuard}) rejects it as a
63
+ * whole.
64
+ *
65
+ * @template T - The candidate profile type.
66
+ */
67
+ export type AuthProfileShape<T> = T extends readonly unknown[] | ((...args: never[]) => unknown) | Date ? AuthProfileRejection : object;
68
+ /**
69
+ * Whether `T` is, or is a union containing, a shape the client cannot persist —
70
+ * an array, a function or a `Date` ({@link AuthProfileShape}).
71
+ *
72
+ * This is the ONE decision {@link AuthProfileConstraint} and
73
+ * {@link AuthProfileGuard} share, so the entrypoints and `AuthClientConfig`
74
+ * cannot drift apart.
75
+ *
76
+ * Three TypeScript behaviors shape it:
77
+ *
78
+ * - **No distribution.** `AuthProfileShape<T>` already distributes, so a union
79
+ * `Good | Bad` yields `object | AuthProfileRejection`. Wrapping BOTH sides of
80
+ * the test in tuples compares those unions as a whole, so one invalid member
81
+ * rejects the whole union. The plain `AuthProfileShape<T> extends
82
+ * AuthProfileRejection` form instead asks whether the ENTIRE union is the
83
+ * rejection, which a valid sibling makes false — that is the union hole this
84
+ * closes.
85
+ * - **`any` is checked first.** `any` is the caller's explicit opt-out of
86
+ * profile typing, not an invalid member, but `AuthProfileShape<any>` resolves
87
+ * to `AuthProfileRejection | object`, which the tuple test reads as "contains
88
+ * a rejection". `0 extends 1 & T` detects `any` (and only `any` — `never`,
89
+ * `unknown` and `object` are all false) and takes the accepted branch.
90
+ * - **Deferred at the outer edge.** `[T] extends [unknown]` keeps the whole
91
+ * check deferred while `T` is an unresolved type parameter (it is always true
92
+ * for a concrete type, and does not distribute over a union). Without it,
93
+ * TypeScript resolves the inner `0 extends 1 & T` while checking a forwarder's
94
+ * constraint `T extends AuthProfileConstraint<T>` and reports TS2313 ("Type
95
+ * parameter 'T' has a circular constraint"); with it, the constraint checks at
96
+ * the call site.
97
+ *
98
+ * `never`, `unknown` and the primitives are not this helper's job: each
99
+ * entrypoint's `extends object` requirement rejects them, unchanged.
100
+ *
101
+ * @template T - The candidate profile type.
102
+ */
103
+ type AuthProfileIsRejected<T> = [T] extends [unknown] ? 0 extends 1 & T ? false : [AuthProfileRejection] extends [AuthProfileShape<T>] ? true : false : never;
104
+ /**
105
+ * Requires a profile type to satisfy {@link AuthProfileShape}: an invalid
106
+ * profile makes {@link AuthClientConfig} impossible to populate, so the
107
+ * annotation itself is the error. It shares the entrypoints' rejection test,
108
+ * so a union with an invalid member is rejected here too.
109
+ *
110
+ * @template T - The candidate profile type.
111
+ */
112
+ export type AuthProfileGuard<T> = AuthProfileIsRejected<T> extends true ? {
113
+ readonly [K in AuthProfileRejection]: never;
114
+ } : Record<never, never>;
115
+ /**
116
+ * The constraint every entrypoint puts on a profile type: a JSON object type of
117
+ * named fields ({@link AuthProfileShape}), and `object` for `any`.
118
+ *
119
+ * `any` is the caller's explicit opt-out of profile typing, not an invalid JSON
120
+ * shape: `createJWTAuthClient<any>()`, `getClient<any>()` and
121
+ * `AuthClientConfig<any>` name it deliberately. It is detected explicitly
122
+ * (`0 extends 1 & T`) and accepted. Every other type is measured against
123
+ * {@link AuthProfileShape}, member by member when it is a union: a union that
124
+ * holds an array, a function or a `Date` is rejected as a whole, so
125
+ * `createJWTAuthClient<ExistingUser | ExistingUser[]>()` is the same type error
126
+ * as `createJWTAuthClient<ExistingUser[]>()`.
127
+ *
128
+ * Forwarding a profile through your own generic copies this constraint, so the
129
+ * profile keeps being checked:
130
+ *
131
+ * ```typescript
132
+ * import type { AuthClientConfig, AuthProfileConstraint } from '@molecule/app-auth'
133
+ * import { createJWTAuthClient } from '@molecule/app-auth'
134
+ *
135
+ * export function makeAuth<T extends AuthProfileConstraint<T>>(config: AuthClientConfig<T>) {
136
+ * return createJWTAuthClient<T>(config)
137
+ * }
138
+ * ```
139
+ *
140
+ * `T extends object` is not enough: the factory rejects arrays, functions and
141
+ * `Date` at its own constraint, so a forwarder written that way does not
142
+ * compile. Copy this type instead.
143
+ *
144
+ * @template T - The candidate profile type.
145
+ */
146
+ export type AuthProfileConstraint<T> = AuthProfileIsRejected<T> extends true ? never : object;
36
147
  /**
37
148
  * Email/password login credentials with optional "remember me" flag.
38
149
  */
@@ -223,15 +334,21 @@ export interface AuthState<T = UserProfile> {
223
334
  }
224
335
  /**
225
336
  * Auth event types.
337
+ *
338
+ * A sign-in event carries the client's own profile type, so a listener on a
339
+ * client typed with the app's profile reads that profile — including one that
340
+ * does not extend {@link UserProfile}. The default is {@link UserProfile}.
341
+ *
342
+ * @template T - The user profile the API returns.
226
343
  */
227
- export type AuthEvent = {
344
+ export type AuthEvent<T = UserProfile> = {
228
345
  type: 'login';
229
- user: UserProfile;
346
+ user: T;
230
347
  } | {
231
348
  type: 'logout';
232
349
  } | {
233
350
  type: 'register';
234
- user: UserProfile;
351
+ user: T;
235
352
  } | {
236
353
  type: 'refresh';
237
354
  } | {
@@ -240,8 +357,30 @@ export type AuthEvent = {
240
357
  };
241
358
  /**
242
359
  * Callback invoked when an authentication event occurs (login, logout, etc.).
360
+ *
361
+ * A listener is typed by the client's profile: `AuthEventListener<MyUser>`
362
+ * receives `AuthEvent<MyUser>`, so a sign-in event's `user` is the app's own
363
+ * shape — including a profile that does not extend {@link UserProfile}. The
364
+ * default is {@link UserProfile}.
365
+ *
366
+ * An inline arrow is contextually typed, so its `event` parameter needs no
367
+ * annotation. Because listener parameters are contravariant, a client whose
368
+ * profile extends {@link UserProfile} also accepts a listener written against
369
+ * the default `AuthEventListener` (those events carry every `UserProfile`
370
+ * field). A client whose profile does NOT extend `UserProfile` — an API user
371
+ * with no `id` — accepts only `AuthEventListener<T>`: a default listener would
372
+ * read an `id` the runtime user does not have.
373
+ *
374
+ * **Migration to 2.0.** External providers that implement {@link AuthClient}
375
+ * declare their listener parameter as `AuthEventListener<T>`
376
+ * (`addEventListener(listener: AuthEventListener<T>): () => void`). The
377
+ * previous `addEventListener(listener: AuthEventListener)` declaration, which
378
+ * claimed every client's events carry a `UserProfile`, is no longer assignable
379
+ * once the client's profile is a custom one.
380
+ *
381
+ * @template T - The user profile the API returns.
243
382
  */
244
- export type AuthEventListener = (event: AuthEvent) => void;
383
+ export type AuthEventListener<T = UserProfile> = (event: AuthEvent<T>) => void;
245
384
  /**
246
385
  * The error an auth client rejects with when the API answers a non-ok HTTP
247
386
  * response. It is the {@link I18nError} the client throws — same `i18nKey`,
@@ -498,8 +637,22 @@ export interface AuthClient<T = UserProfile, TRegister extends RegisterExtraShap
498
637
  getToken?(): string | null;
499
638
  /**
500
639
  * Adds an auth event listener.
501
- */
502
- addEventListener(listener: AuthEventListener): () => void;
640
+ *
641
+ * The listener is typed by this client's profile: one signature,
642
+ * `AuthEventListener<T>`, so an inline arrow is contextually typed and `event`
643
+ * is never implicitly `any`. A client whose profile extends
644
+ * {@link UserProfile} also accepts a default {@link AuthEventListener}: when
645
+ * `T` extends `UserProfile`, `AuthEvent<T>` is assignable to
646
+ * `AuthEvent<UserProfile>`, so a listener that takes the wider default event
647
+ * accepts every event this client emits and keeps compiling. (`UserProfile`
648
+ * is the wider type here — it has fewer required fields — and the assignable
649
+ * direction runs from the client's `AuthEvent<T>` to the listener's
650
+ * `AuthEvent<UserProfile>`.) A profile that does not extend `UserProfile`
651
+ * (no `id`) rejects the default listener: an `AuthEvent<UserProfile>` would
652
+ * promise an `id` the runtime user does not have, and the narrower-typed
653
+ * event is not assignable to it.
654
+ */
655
+ addEventListener(listener: AuthEventListener<T>): () => void;
503
656
  /**
504
657
  * Destroys the auth client.
505
658
  */
@@ -520,18 +673,63 @@ export interface StorageAdapter {
520
673
  *
521
674
  * Type it with the app's user — `AuthClientConfig<MyUser>` — the same type
522
675
  * `createJWTAuthClient<MyUser>` returns and `useAuth<MyUser>()` reads. That
523
- * makes {@link mapAuthResponse} return `AuthResult<MyUser>`, so a mapper that
524
- * omits a required custom field is a type error instead of a signed-in page
525
- * reading `undefined` (xr-molecule-flash-m255). Keep every wire field the pages
526
- * read (spread the wire user and add `id`/`name`/`avatar`); mapping a field to a
527
- * different name does not preserve the original, and a `as unknown as MyUser`
528
- * assertion hides the loss. See the module docs for the wire-preserving
529
- * adapter.
530
- *
531
- * @template T - The user profile the API returns. The default,
532
- * {@link UserProfile}, keeps the untyped configuration working.
676
+ * makes {@link AuthClientConfigOptions.mapAuthResponse} return
677
+ * `AuthResult<MyUser>`, so a mapper that omits a required custom field is a type
678
+ * error instead of a signed-in page reading `undefined`
679
+ * (xr-molecule-flash-m255). Keep every wire field the pages read (spread the
680
+ * wire user and add `id`/`name`/`avatar`); mapping a field to a different name
681
+ * does not preserve the original, and a `as unknown as MyUser` assertion hides
682
+ * the loss. See the module docs for the wire-preserving adapter.
683
+ *
684
+ * `T` is the app's OWN profile shape and need not extend {@link UserProfile}:
685
+ * the client stores and returns the object it is given and reads no field of
686
+ * it, so an API whose user has no `id` — `{ username, email, bio, image }` —
687
+ * is typed by its own `interface` directly, with no fabricated `id`. The
688
+ * default, {@link UserProfile}, still requires `id: string`. A primitive,
689
+ * `null`, an array, a function or a `Date` — or a union containing one — is
690
+ * rejected; see {@link AuthProfileShape} for the persistence contract behind
691
+ * that list.
692
+ *
693
+ * The type argument is NEVER inferred from the config: not from
694
+ * `mapAuthResponse`, `profileEndpoint`, `profileRequestBody` or
695
+ * `shouldRestoreUser`, and not from a config variable the caller annotated as
696
+ * `AuthClientConfig<MyUser>`. An untyped call stays typed `UserProfile`, so the
697
+ * default configuration keeps requiring `id: string`. Name the profile at the
698
+ * call (`createJWTAuthClient<MyUser>(config)`) — which also checks this config
699
+ * against `MyUser`.
700
+ *
701
+ * **Callers upgrading from 1.8 — three shapes now need the profile at the call.**
702
+ * Each was accepted by 1.8 and is a type error here; each has a one-line fix:
703
+ *
704
+ * 1. A mapper that supplied the profile
705
+ * (`createJWTAuthClient({ mapAuthResponse: (d): AuthResult<MyUser> => … })`)
706
+ * is now typed `UserProfile`. Name it on the factory:
707
+ * `createJWTAuthClient<MyUser>({ mapAuthResponse })`.
708
+ * 2. A config variable annotated `AuthClientConfig<MyUser>` with a profile that
709
+ * extends `UserProfile` used to supply the type argument. Pass it:
710
+ * `createJWTAuthClient<MyUser>(config)`. (A no-id profile was already
711
+ * rejected by 1.8's `T extends UserProfile`.)
712
+ * 3. Generic forwarding written `function make<T extends UserProfile>(config: AuthClientConfig<T>)`
713
+ * no longer satisfies the factory's constraint. Copy the named constraint:
714
+ * `function make<T extends AuthProfileConstraint<T>>(config: AuthClientConfig<T>)`.
715
+ *
716
+ * `any` is accepted at every entrypoint (`createJWTAuthClient<any>()`,
717
+ * `getClient<any>()`), so a caller that deliberately opted out keeps compiling.
718
+ *
719
+ * @template T - The user profile the API returns: a JSON object type of named
720
+ * fields. The default, {@link UserProfile}, keeps the untyped configuration
721
+ * working.
722
+ */
723
+ export type AuthClientConfig<T extends object = UserProfile> = AuthClientConfigOptions<T> & AuthProfileGuard<T>;
724
+ /**
725
+ * Every option {@link AuthClientConfig} accepts, typed by the profile.
726
+ *
727
+ * Use `AuthClientConfig<T>` rather than this type: it adds the profile-shape
728
+ * check. This interface exists so each member's documentation is addressable.
729
+ *
730
+ * @template T - The user profile the API returns.
533
731
  */
534
- export interface AuthClientConfig<T extends UserProfile = UserProfile> {
732
+ export interface AuthClientConfigOptions<T extends object = UserProfile> {
535
733
  /**
536
734
  * API base URL.
537
735
  */
@@ -556,6 +754,8 @@ export interface AuthClientConfig<T extends UserProfile = UserProfile> {
556
754
  * The write route used by `updateProfile`, independently of `currentUserEndpoint`.
557
755
  * Defaults to `/auth/profile`. A resource route with an account id can resolve
558
756
  * from the signed-in user, e.g. `(user) => '/accounts/' + encodeURIComponent(user.id)`.
757
+ * A profile with no `id` resolves from a field it does have, e.g.
758
+ * `(user) => '/people/' + encodeURIComponent(user.username)`.
559
759
  * The resolver sees the current user before the patch, never caller-submitted identity.
560
760
  */
561
761
  profileEndpoint?: string | ((user: Readonly<T>) => string);
@@ -634,7 +834,16 @@ export interface AuthClientConfig<T extends UserProfile = UserProfile> {
634
834
  /**
635
835
  * Turn an answer that carries a user into the client's
636
836
  * `{ accessToken, refreshToken?, user }` (default: the answer as given).
637
- * RealWorld, for example: `(data) => ({ accessToken: data.user.token, user: data.user })`.
837
+ * RealWorld, for example — keep the wire bearer OUT of the profile, because
838
+ * the client caches `user` in Web Storage where a token copy is readable by
839
+ * any script on the origin:
840
+ *
841
+ * ```typescript
842
+ * (data) => {
843
+ * const { token, ...user } = data.user
844
+ * return { accessToken: token, user }
845
+ * }
846
+ * ```
638
847
  *
639
848
  * It is the ONE user-shape adapter, and the client applies it on EVERY path
640
849
  * that adopts a user from an API answer — `login()`, `register()`,
@@ -649,10 +858,19 @@ export interface AuthClientConfig<T extends UserProfile = UserProfile> {
649
858
  * It is NOT applied to `setSession()` or `setUser()`: those receive a profile
650
859
  * the caller already built in this client's shape, not a wire answer.
651
860
  *
861
+ * The return type does NOT infer the profile: an untyped
862
+ * `createJWTAuthClient({ mapAuthResponse })` stays `UserProfile`, so a mapper
863
+ * that returns a no-id profile fails to compile there instead of silently
864
+ * replacing the default with whatever the mapper happened to return. The same
865
+ * rule holds for every config member below (`profileEndpoint`,
866
+ * `profileRequestBody`, `shouldRestoreUser`): none of them supplies the
867
+ * profile. Name the profile at the call
868
+ * (`createJWTAuthClient<MyUser>({ mapAuthResponse })`) to use a custom one.
869
+ *
652
870
  * @param data - The parsed response body.
653
871
  * @returns The auth result.
654
872
  */
655
- mapAuthResponse?: (data: unknown) => AuthResult<T>;
873
+ mapAuthResponse?: (data: unknown) => AuthResult<NoInfer<T>>;
656
874
  /**
657
875
  * Where the access/refresh token and the cached user are kept — the field that
658
876
  * decides whether a page reload keeps the user signed in.
@@ -760,4 +978,5 @@ export interface TokenStorage {
760
978
  setUser<T = UserProfile>(user: T | null): void;
761
979
  clear(): void;
762
980
  }
981
+ export {};
763
982
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}