@molecule/app-react 1.6.7 → 1.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -10
- package/dist/hooks/useAuth.d.ts +15 -3
- package/dist/hooks/useAuth.d.ts.map +1 -1
- package/dist/hooks/useAuth.js +12 -0
- package/dist/hooks/useAuth.js.map +1 -1
- package/dist/hooks/useChat.d.ts.map +1 -1
- package/dist/hooks/useChat.js +390 -65
- package/dist/hooks/useChat.js.map +1 -1
- package/dist/hooks/useForm.d.ts +3 -1
- package/dist/hooks/useForm.d.ts.map +1 -1
- package/dist/hooks/useForm.js +35 -39
- package/dist/hooks/useForm.js.map +1 -1
- package/dist/hooks/useSignup.d.ts +9 -4
- package/dist/hooks/useSignup.d.ts.map +1 -1
- package/dist/hooks/useSignup.js.map +1 -1
- package/dist/types.d.ts +12 -3
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@ AUTO-GENERATED — DO NOT EDIT THIS FILE.
|
|
|
3
3
|
Generated by `mlcl sync-docs` from the package's src/index.ts JSDoc + mlcl/registry.json.
|
|
4
4
|
Edits here are overwritten on the next commit (molecule's pre-commit hook regenerates).
|
|
5
5
|
To change this document, edit the module-level JSDoc in src/index.ts.
|
|
6
|
-
Generated: 2026-10-
|
|
6
|
+
Generated: 2026-10-21T17:02:37.827Z
|
|
7
7
|
-->
|
|
8
8
|
|
|
9
9
|
# @molecule/app-react
|
|
@@ -121,7 +121,7 @@ Provides login/logout/register flows, token management, profile
|
|
|
121
121
|
updates, and auth state subscription.
|
|
122
122
|
|
|
123
123
|
```typescript
|
|
124
|
-
interface AuthClient<T = UserProfile, TRegister extends
|
|
124
|
+
interface AuthClient<T = UserProfile, TRegister extends RegisterExtraShape<TRegister> = Record<never, never>> {
|
|
125
125
|
/**
|
|
126
126
|
* Returns the current authentication state snapshot.
|
|
127
127
|
*
|
|
@@ -787,7 +787,10 @@ interface UseFormResult<T extends Record<string, unknown>> {
|
|
|
787
787
|
isSubmitting: boolean
|
|
788
788
|
|
|
789
789
|
// Field methods
|
|
790
|
-
register: (
|
|
790
|
+
register: (
|
|
791
|
+
name: keyof T,
|
|
792
|
+
options?: Omit<RegisterOptions, 'name'> & { name?: string },
|
|
793
|
+
) => FieldRegistration
|
|
791
794
|
getValue: <K extends keyof T>(name: K) => T[K]
|
|
792
795
|
setValue: <K extends keyof T>(name: K, value: T[K]) => void
|
|
793
796
|
getError: (name: keyof T) => string | undefined
|
|
@@ -964,11 +967,14 @@ interface UsePushOptions {
|
|
|
964
967
|
Return type for useSignup hook.
|
|
965
968
|
|
|
966
969
|
```typescript
|
|
967
|
-
interface UseSignupReturn<
|
|
970
|
+
interface UseSignupReturn<
|
|
971
|
+
T = unknown,
|
|
972
|
+
TRegister extends RegisterExtraShape<TRegister> = Record<never, never>,
|
|
973
|
+
> {
|
|
968
974
|
status: UsePromiseState<AuthResult<T>>['status']
|
|
969
975
|
value: UsePromiseState<AuthResult<T>>['value']
|
|
970
976
|
error: UsePromiseState<AuthResult<T>>['error']
|
|
971
|
-
signup: (data: RegisterData) => Promise<AuthResult<T>>
|
|
977
|
+
signup: (data: RegisterData<TRegister>) => Promise<AuthResult<T>>
|
|
972
978
|
reset: () => void
|
|
973
979
|
}
|
|
974
980
|
```
|
|
@@ -1264,7 +1270,10 @@ interface UseAuthOptions {
|
|
|
1264
1270
|
Hook result for useAuth.
|
|
1265
1271
|
|
|
1266
1272
|
```typescript
|
|
1267
|
-
interface UseAuthResult<
|
|
1273
|
+
interface UseAuthResult<
|
|
1274
|
+
T = unknown,
|
|
1275
|
+
TRegister extends RegisterExtraShape<TRegister> = Record<never, never>,
|
|
1276
|
+
> {
|
|
1268
1277
|
/**
|
|
1269
1278
|
* The session state as one value — render from this instead of combining
|
|
1270
1279
|
* `initialized`/`authenticated`/`loading`. A stored token AND user make it
|
|
@@ -1275,7 +1284,7 @@ interface UseAuthResult<T = unknown> {
|
|
|
1275
1284
|
state: AuthState<T>
|
|
1276
1285
|
login: AuthClient<T>['login']
|
|
1277
1286
|
logout: AuthClient<T>['logout']
|
|
1278
|
-
register: AuthClient<T>['register']
|
|
1287
|
+
register: AuthClient<T, TRegister>['register']
|
|
1279
1288
|
refresh: AuthClient<T>['refresh']
|
|
1280
1289
|
setUser: AuthClient<T>['setUser']
|
|
1281
1290
|
/**
|
|
@@ -1387,6 +1396,8 @@ Options for {@link UseChatResult.sendMessage}.
|
|
|
1387
1396
|
|
|
1388
1397
|
```typescript
|
|
1389
1398
|
interface SendMessageOptions {
|
|
1399
|
+
/** Reuse a queued message's UUID when delivering it after reconnecting. */
|
|
1400
|
+
messageId?: string
|
|
1390
1401
|
/**
|
|
1391
1402
|
* Skip the optimistic local user-message bubble. The text is still sent to
|
|
1392
1403
|
* the server. Used for ask_user responses: the answer is folded into the
|
|
@@ -1723,8 +1734,12 @@ function useAsyncState(initialState: T): [T, AsyncSetState<T>, AsyncExtendState<
|
|
|
1723
1734
|
|
|
1724
1735
|
Hook to access the auth client from context.
|
|
1725
1736
|
|
|
1737
|
+
Pass the same generics the client was created with —
|
|
1738
|
+
`useAuthClient<MyUser, { username: string }>()` — so `register()` accepts
|
|
1739
|
+
the app's own fields.
|
|
1740
|
+
|
|
1726
1741
|
```typescript
|
|
1727
|
-
function useAuthClient(): AuthClient<T,
|
|
1742
|
+
function useAuthClient(): AuthClient<T, TRegister>
|
|
1728
1743
|
```
|
|
1729
1744
|
|
|
1730
1745
|
**Returns:** The auth client from context
|
|
@@ -1747,8 +1762,14 @@ To create an account, use `const { register } = useAuth<MyUser>()` and
|
|
|
1747
1762
|
`await register({ email, password, name })`. Registration returns the auth
|
|
1748
1763
|
client's `AuthResult<MyUser>`; there is no separate `useRegister` hook.
|
|
1749
1764
|
|
|
1765
|
+
An app whose API takes its OWN registration fields passes the client's
|
|
1766
|
+
second generic here too — `useAuth<MyUser, { username: string }>()` — so
|
|
1767
|
+
`register({ email, password, username })` is typed exactly like the client
|
|
1768
|
+
call (and `requestBody` receives the same payload). Without it, `register`
|
|
1769
|
+
accepts only the base fields.
|
|
1770
|
+
|
|
1750
1771
|
```typescript
|
|
1751
|
-
function useAuth(options?: UseAuthOptions): UseAuthResult<T>
|
|
1772
|
+
function useAuth(options?: UseAuthOptions): UseAuthResult<T, TRegister>
|
|
1752
1773
|
```
|
|
1753
1774
|
|
|
1754
1775
|
- `options` — Hook options
|
|
@@ -2289,7 +2310,7 @@ function useIsActive(path: string, exact?: boolean): boolean
|
|
|
2289
2310
|
Hook for user registration with async state tracking.
|
|
2290
2311
|
|
|
2291
2312
|
```typescript
|
|
2292
|
-
function useSignup(): UseSignupReturn<T>
|
|
2313
|
+
function useSignup(): UseSignupReturn<T, TRegister>
|
|
2293
2314
|
```
|
|
2294
2315
|
|
|
2295
2316
|
**Returns:** Signup state and action
|
package/dist/hooks/useAuth.d.ts
CHANGED
|
@@ -3,15 +3,19 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
|
-
import type { AuthClient } from '@molecule/app-auth';
|
|
6
|
+
import type { AuthClient, RegisterExtraShape } from '@molecule/app-auth';
|
|
7
7
|
import type { UseAuthOptions, UseAuthResult } from '../types.js';
|
|
8
8
|
/**
|
|
9
9
|
* Hook to access the auth client from context.
|
|
10
10
|
*
|
|
11
|
+
* Pass the same generics the client was created with —
|
|
12
|
+
* `useAuthClient<MyUser, { username: string }>()` — so `register()` accepts
|
|
13
|
+
* the app's own fields.
|
|
14
|
+
*
|
|
11
15
|
* @returns The auth client from context
|
|
12
16
|
* @throws {Error} Error if used outside of AuthProvider
|
|
13
17
|
*/
|
|
14
|
-
export declare function useAuthClient<T = unknown>(): AuthClient<T>;
|
|
18
|
+
export declare function useAuthClient<T = unknown, TRegister extends RegisterExtraShape<TRegister> = Record<never, never>>(): AuthClient<T, TRegister>;
|
|
15
19
|
/**
|
|
16
20
|
* Hook for authentication state and actions.
|
|
17
21
|
*
|
|
@@ -29,19 +33,27 @@ export declare function useAuthClient<T = unknown>(): AuthClient<T>;
|
|
|
29
33
|
* `await register({ email, password, name })`. Registration returns the auth
|
|
30
34
|
* client's `AuthResult<MyUser>`; there is no separate `useRegister` hook.
|
|
31
35
|
*
|
|
36
|
+
* An app whose API takes its OWN registration fields passes the client's
|
|
37
|
+
* second generic here too — `useAuth<MyUser, { username: string }>()` — so
|
|
38
|
+
* `register({ email, password, username })` is typed exactly like the client
|
|
39
|
+
* call (and `requestBody` receives the same payload). Without it, `register`
|
|
40
|
+
* accepts only the base fields.
|
|
41
|
+
*
|
|
32
42
|
* @param options - Hook options
|
|
33
43
|
* @returns Auth state and action methods
|
|
34
44
|
*
|
|
35
45
|
* @example
|
|
36
46
|
* ```tsx
|
|
37
47
|
* const { user, isAuthenticated, login, logout } = useAuth<{ id: string; name?: string }>()
|
|
48
|
+
* const { register } = useAuth<MyUser, { username: string }>()
|
|
49
|
+
* await register({ email, password, username }) // `username` is typed
|
|
38
50
|
*
|
|
39
51
|
* if (isAuthenticated) {
|
|
40
52
|
* return <div>Welcome, {user?.name}!</div>
|
|
41
53
|
* }
|
|
42
54
|
* ```
|
|
43
55
|
*/
|
|
44
|
-
export declare function useAuth<T = unknown>(options?: UseAuthOptions): UseAuthResult<T>;
|
|
56
|
+
export declare function useAuth<T = unknown, TRegister extends RegisterExtraShape<TRegister> = Record<never, never>>(options?: UseAuthOptions): UseAuthResult<T, TRegister>;
|
|
45
57
|
/**
|
|
46
58
|
* Hook to get just the authenticated user.
|
|
47
59
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAuth.d.ts","sourceRoot":"","sources":["../../src/hooks/useAuth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EACV,UAAU,
|
|
1
|
+
{"version":3,"file":"useAuth.d.ts","sourceRoot":"","sources":["../../src/hooks/useAuth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EACV,UAAU,EAKV,kBAAkB,EACnB,MAAM,oBAAoB,CAAA;AAI3B,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhE;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,CAAC,GAAG,OAAO,EACX,SAAS,SAAS,kBAAkB,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,KACnE,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,CAU5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,OAAO,CACrB,CAAC,GAAG,OAAO,EACX,SAAS,SAAS,kBAAkB,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EACtE,OAAO,CAAC,EAAE,cAAc,GAAG,aAAa,CAAC,CAAC,EAAE,SAAS,CAAC,CA2EvD;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,GAAG,IAAI,CAG/C;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAG5C"}
|
package/dist/hooks/useAuth.js
CHANGED
|
@@ -9,6 +9,10 @@ import { AuthContext } from '../contexts.js';
|
|
|
9
9
|
/**
|
|
10
10
|
* Hook to access the auth client from context.
|
|
11
11
|
*
|
|
12
|
+
* Pass the same generics the client was created with —
|
|
13
|
+
* `useAuthClient<MyUser, { username: string }>()` — so `register()` accepts
|
|
14
|
+
* the app's own fields.
|
|
15
|
+
*
|
|
12
16
|
* @returns The auth client from context
|
|
13
17
|
* @throws {Error} Error if used outside of AuthProvider
|
|
14
18
|
*/
|
|
@@ -38,12 +42,20 @@ export function useAuthClient() {
|
|
|
38
42
|
* `await register({ email, password, name })`. Registration returns the auth
|
|
39
43
|
* client's `AuthResult<MyUser>`; there is no separate `useRegister` hook.
|
|
40
44
|
*
|
|
45
|
+
* An app whose API takes its OWN registration fields passes the client's
|
|
46
|
+
* second generic here too — `useAuth<MyUser, { username: string }>()` — so
|
|
47
|
+
* `register({ email, password, username })` is typed exactly like the client
|
|
48
|
+
* call (and `requestBody` receives the same payload). Without it, `register`
|
|
49
|
+
* accepts only the base fields.
|
|
50
|
+
*
|
|
41
51
|
* @param options - Hook options
|
|
42
52
|
* @returns Auth state and action methods
|
|
43
53
|
*
|
|
44
54
|
* @example
|
|
45
55
|
* ```tsx
|
|
46
56
|
* const { user, isAuthenticated, login, logout } = useAuth<{ id: string; name?: string }>()
|
|
57
|
+
* const { register } = useAuth<MyUser, { username: string }>()
|
|
58
|
+
* await register({ email, password, username }) // `username` is typed
|
|
47
59
|
*
|
|
48
60
|
* if (isAuthenticated) {
|
|
49
61
|
* return <div>Welcome, {user?.name}!</div>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAuth.js","sourceRoot":"","sources":["../../src/hooks/useAuth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"useAuth.js","sourceRoot":"","sources":["../../src/hooks/useAuth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChat.d.ts","sourceRoot":"","sources":["../../src/hooks/useChat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,KAAK,EAIV,WAAW,EACX,YAAY,EAGb,MAAM,uBAAuB,CAAA;AAK9B,OAAO,KAAK,EAAsB,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"useChat.d.ts","sourceRoot":"","sources":["../../src/hooks/useChat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,KAAK,EAIV,WAAW,EACX,YAAY,EAGb,MAAM,uBAAuB,CAAA;AAK9B,OAAO,KAAK,EAAsB,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AA8cpF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAc1F;AAiBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAQ5F;AAyDD;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAK9C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAU9C;AAkDD;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CAm4E9D"}
|