@molecule/app-react 1.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.
Files changed (131) hide show
  1. package/LICENSE +115 -0
  2. package/README.md +2645 -0
  3. package/dist/agent-identity.d.ts +40 -0
  4. package/dist/agent-identity.d.ts.map +1 -0
  5. package/dist/agent-identity.js +31 -0
  6. package/dist/agent-identity.js.map +1 -0
  7. package/dist/contexts.d.ts +69 -0
  8. package/dist/contexts.d.ts.map +1 -0
  9. package/dist/contexts.js +70 -0
  10. package/dist/contexts.js.map +1 -0
  11. package/dist/hooks/index.d.ts +32 -0
  12. package/dist/hooks/index.d.ts.map +1 -0
  13. package/dist/hooks/index.js +32 -0
  14. package/dist/hooks/index.js.map +1 -0
  15. package/dist/hooks/useAIModels.d.ts +48 -0
  16. package/dist/hooks/useAIModels.d.ts.map +1 -0
  17. package/dist/hooks/useAIModels.js +145 -0
  18. package/dist/hooks/useAIModels.js.map +1 -0
  19. package/dist/hooks/useAsyncState.d.ts +41 -0
  20. package/dist/hooks/useAsyncState.d.ts.map +1 -0
  21. package/dist/hooks/useAsyncState.js +77 -0
  22. package/dist/hooks/useAsyncState.js.map +1 -0
  23. package/dist/hooks/useAuth.d.ts +43 -0
  24. package/dist/hooks/useAuth.d.ts.map +1 -0
  25. package/dist/hooks/useAuth.js +106 -0
  26. package/dist/hooks/useAuth.js.map +1 -0
  27. package/dist/hooks/useCapacitorApp.d.ts +35 -0
  28. package/dist/hooks/useCapacitorApp.d.ts.map +1 -0
  29. package/dist/hooks/useCapacitorApp.js +61 -0
  30. package/dist/hooks/useCapacitorApp.js.map +1 -0
  31. package/dist/hooks/useChangePassword.d.ts +34 -0
  32. package/dist/hooks/useChangePassword.d.ts.map +1 -0
  33. package/dist/hooks/useChangePassword.js +37 -0
  34. package/dist/hooks/useChangePassword.js.map +1 -0
  35. package/dist/hooks/useChat.d.ts +30 -0
  36. package/dist/hooks/useChat.d.ts.map +1 -0
  37. package/dist/hooks/useChat.js +1510 -0
  38. package/dist/hooks/useChat.js.map +1 -0
  39. package/dist/hooks/useDevice.d.ts +39 -0
  40. package/dist/hooks/useDevice.d.ts.map +1 -0
  41. package/dist/hooks/useDevice.js +41 -0
  42. package/dist/hooks/useDevice.js.map +1 -0
  43. package/dist/hooks/useEditor.d.ts +20 -0
  44. package/dist/hooks/useEditor.d.ts.map +1 -0
  45. package/dist/hooks/useEditor.js +98 -0
  46. package/dist/hooks/useEditor.js.map +1 -0
  47. package/dist/hooks/useForm.d.ts +87 -0
  48. package/dist/hooks/useForm.d.ts.map +1 -0
  49. package/dist/hooks/useForm.js +148 -0
  50. package/dist/hooks/useForm.js.map +1 -0
  51. package/dist/hooks/useHttp.d.ts +103 -0
  52. package/dist/hooks/useHttp.d.ts.map +1 -0
  53. package/dist/hooks/useHttp.js +161 -0
  54. package/dist/hooks/useHttp.js.map +1 -0
  55. package/dist/hooks/useLogger.d.ts +68 -0
  56. package/dist/hooks/useLogger.d.ts.map +1 -0
  57. package/dist/hooks/useLogger.js +95 -0
  58. package/dist/hooks/useLogger.js.map +1 -0
  59. package/dist/hooks/useLogin.d.ts +35 -0
  60. package/dist/hooks/useLogin.d.ts.map +1 -0
  61. package/dist/hooks/useLogin.js +37 -0
  62. package/dist/hooks/useLogin.js.map +1 -0
  63. package/dist/hooks/useOAuth.d.ts +83 -0
  64. package/dist/hooks/useOAuth.d.ts.map +1 -0
  65. package/dist/hooks/useOAuth.js +348 -0
  66. package/dist/hooks/useOAuth.js.map +1 -0
  67. package/dist/hooks/usePasswordReset.d.ts +43 -0
  68. package/dist/hooks/usePasswordReset.d.ts.map +1 -0
  69. package/dist/hooks/usePasswordReset.js +50 -0
  70. package/dist/hooks/usePasswordReset.js.map +1 -0
  71. package/dist/hooks/usePlatform.d.ts +38 -0
  72. package/dist/hooks/usePlatform.d.ts.map +1 -0
  73. package/dist/hooks/usePlatform.js +40 -0
  74. package/dist/hooks/usePlatform.js.map +1 -0
  75. package/dist/hooks/usePreview.d.ts +20 -0
  76. package/dist/hooks/usePreview.d.ts.map +1 -0
  77. package/dist/hooks/usePreview.js +62 -0
  78. package/dist/hooks/usePreview.js.map +1 -0
  79. package/dist/hooks/usePromise.d.ts +39 -0
  80. package/dist/hooks/usePromise.d.ts.map +1 -0
  81. package/dist/hooks/usePromise.js +92 -0
  82. package/dist/hooks/usePromise.js.map +1 -0
  83. package/dist/hooks/usePush.d.ts +50 -0
  84. package/dist/hooks/usePush.d.ts.map +1 -0
  85. package/dist/hooks/usePush.js +89 -0
  86. package/dist/hooks/usePush.js.map +1 -0
  87. package/dist/hooks/useRouter.d.ts +65 -0
  88. package/dist/hooks/useRouter.d.ts.map +1 -0
  89. package/dist/hooks/useRouter.js +120 -0
  90. package/dist/hooks/useRouter.js.map +1 -0
  91. package/dist/hooks/useSignup.d.ts +35 -0
  92. package/dist/hooks/useSignup.d.ts.map +1 -0
  93. package/dist/hooks/useSignup.js +37 -0
  94. package/dist/hooks/useSignup.js.map +1 -0
  95. package/dist/hooks/useStorage.d.ts +72 -0
  96. package/dist/hooks/useStorage.d.ts.map +1 -0
  97. package/dist/hooks/useStorage.js +144 -0
  98. package/dist/hooks/useStorage.js.map +1 -0
  99. package/dist/hooks/useStore.d.ts +51 -0
  100. package/dist/hooks/useStore.d.ts.map +1 -0
  101. package/dist/hooks/useStore.js +86 -0
  102. package/dist/hooks/useStore.js.map +1 -0
  103. package/dist/hooks/useTheme.d.ts +50 -0
  104. package/dist/hooks/useTheme.d.ts.map +1 -0
  105. package/dist/hooks/useTheme.js +135 -0
  106. package/dist/hooks/useTheme.js.map +1 -0
  107. package/dist/hooks/useTranslation.d.ts +69 -0
  108. package/dist/hooks/useTranslation.d.ts.map +1 -0
  109. package/dist/hooks/useTranslation.js +131 -0
  110. package/dist/hooks/useTranslation.js.map +1 -0
  111. package/dist/hooks/useVersion.d.ts +41 -0
  112. package/dist/hooks/useVersion.d.ts.map +1 -0
  113. package/dist/hooks/useVersion.js +73 -0
  114. package/dist/hooks/useVersion.js.map +1 -0
  115. package/dist/hooks/useWorkspace.d.ts +18 -0
  116. package/dist/hooks/useWorkspace.d.ts.map +1 -0
  117. package/dist/hooks/useWorkspace.js +67 -0
  118. package/dist/hooks/useWorkspace.js.map +1 -0
  119. package/dist/index.d.ts +80 -0
  120. package/dist/index.d.ts.map +1 -0
  121. package/dist/index.js +80 -0
  122. package/dist/index.js.map +1 -0
  123. package/dist/providers.d.ts +189 -0
  124. package/dist/providers.d.ts.map +1 -0
  125. package/dist/providers.js +248 -0
  126. package/dist/providers.js.map +1 -0
  127. package/dist/types.d.ts +381 -0
  128. package/dist/types.d.ts.map +1 -0
  129. package/dist/types.js +7 -0
  130. package/dist/types.js.map +1 -0
  131. package/package.json +82 -0
@@ -0,0 +1,103 @@
1
+ /**
2
+ * React hook for HTTP requests.
3
+ *
4
+ * @module
5
+ */
6
+ import type { HttpClient, RequestConfig } from '@molecule/app-http';
7
+ /**
8
+ * Hook to access the HTTP client from context.
9
+ *
10
+ * @returns The HTTP client from context
11
+ * @throws {Error} Error if used outside of HttpProvider
12
+ */
13
+ export declare function useHttpClient(): HttpClient;
14
+ /**
15
+ * State for async HTTP operations.
16
+ */
17
+ export interface UseHttpState<T> {
18
+ data: T | null;
19
+ loading: boolean;
20
+ error: Error | null;
21
+ }
22
+ /**
23
+ * Result of useHttp hook.
24
+ */
25
+ export interface UseHttpResult<T> extends UseHttpState<T> {
26
+ execute: () => Promise<T | null>;
27
+ reset: () => void;
28
+ }
29
+ /**
30
+ * Options for useHttp hook.
31
+ */
32
+ export interface UseHttpOptions<T> extends RequestConfig {
33
+ /**
34
+ * Whether to execute the request immediately on mount.
35
+ */
36
+ immediate?: boolean;
37
+ /**
38
+ * Callback when request succeeds.
39
+ */
40
+ onSuccess?: (data: T) => void;
41
+ /**
42
+ * Callback when request fails.
43
+ */
44
+ onError?: (error: Error) => void;
45
+ }
46
+ /**
47
+ * Hook for making HTTP requests with state management.
48
+ *
49
+ * @param method - HTTP method
50
+ * @param url - Request URL
51
+ * @param options - Request options
52
+ * @returns Request state and execute function
53
+ *
54
+ * @example
55
+ * ```tsx
56
+ * const { data, loading, error, execute } = useHttp<User[]>('GET', '/api/users')
57
+ *
58
+ * useEffect(() => {
59
+ * execute()
60
+ * }, [])
61
+ *
62
+ * if (loading) return <Spinner />
63
+ * if (error) return <Error message={error.message} />
64
+ * return <UserList users={data} />
65
+ * ```
66
+ */
67
+ export declare function useHttp<T>(method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE', url: string, options?: UseHttpOptions<T>): UseHttpResult<T>;
68
+ /**
69
+ * Hook for GET requests.
70
+ * @param url - Request URL to fetch from.
71
+ * @param options - HTTP request options including callbacks and request config.
72
+ * @returns Request state (data, loading, error) and controls (execute, reset).
73
+ */
74
+ export declare function useGet<T>(url: string, options?: UseHttpOptions<T>): UseHttpResult<T>;
75
+ /**
76
+ * Hook for POST requests.
77
+ * @param url - Request URL to post to.
78
+ * @param options - HTTP request options including body data and callbacks.
79
+ * @returns Request state (data, loading, error) and controls (execute, reset).
80
+ */
81
+ export declare function usePost<T>(url: string, options?: UseHttpOptions<T>): UseHttpResult<T>;
82
+ /**
83
+ * Hook for PUT requests.
84
+ * @param url - Request URL to send the PUT request to.
85
+ * @param options - HTTP request options including body data and callbacks.
86
+ * @returns Request state (data, loading, error) and controls (execute, reset).
87
+ */
88
+ export declare function usePut<T>(url: string, options?: UseHttpOptions<T>): UseHttpResult<T>;
89
+ /**
90
+ * Hook for PATCH requests.
91
+ * @param url - Request URL to send the PATCH request to.
92
+ * @param options - HTTP request options including partial body data and callbacks.
93
+ * @returns Request state (data, loading, error) and controls (execute, reset).
94
+ */
95
+ export declare function usePatch<T>(url: string, options?: UseHttpOptions<T>): UseHttpResult<T>;
96
+ /**
97
+ * Hook for DELETE requests.
98
+ * @param url - Request URL of the resource to delete.
99
+ * @param options - HTTP request options including callbacks.
100
+ * @returns Request state (data, loading, error) and controls (execute, reset).
101
+ */
102
+ export declare function useDelete<T>(url: string, options?: UseHttpOptions<T>): UseHttpResult<T>;
103
+ //# sourceMappingURL=useHttp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHttp.d.ts","sourceRoot":"","sources":["../../src/hooks/useHttp.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAgB,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAKjF;;;;;GAKG;AACH,wBAAgB,aAAa,IAAI,UAAU,CAU1C;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,IAAI,EAAE,CAAC,GAAG,IAAI,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,CAAE,SAAQ,YAAY,CAAC,CAAC,CAAC;IACvD,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IAChC,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,CAAE,SAAQ,aAAa;IACtD;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAA;IAC7B;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;CACjC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,OAAO,CAAC,CAAC,EACvB,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,EACnD,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAC1B,aAAa,CAAC,CAAC,CAAC,CAqFlB;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAEpF;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAErF;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAEpF;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAEtF;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAEvF"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * React hook for HTTP requests.
3
+ *
4
+ * @module
5
+ */
6
+ import { useCallback, useContext, useEffect, useRef, useState } from 'react';
7
+ import { t } from '@molecule/app-i18n';
8
+ import { HttpContext } from '../contexts.js';
9
+ /**
10
+ * Hook to access the HTTP client from context.
11
+ *
12
+ * @returns The HTTP client from context
13
+ * @throws {Error} Error if used outside of HttpProvider
14
+ */
15
+ export function useHttpClient() {
16
+ const client = useContext(HttpContext);
17
+ if (!client) {
18
+ throw new Error(t('react.error.useHttpOutsideProvider', undefined, {
19
+ defaultValue: 'useHttpClient must be used within an HttpProvider',
20
+ }));
21
+ }
22
+ return client;
23
+ }
24
+ /**
25
+ * Hook for making HTTP requests with state management.
26
+ *
27
+ * @param method - HTTP method
28
+ * @param url - Request URL
29
+ * @param options - Request options
30
+ * @returns Request state and execute function
31
+ *
32
+ * @example
33
+ * ```tsx
34
+ * const { data, loading, error, execute } = useHttp<User[]>('GET', '/api/users')
35
+ *
36
+ * useEffect(() => {
37
+ * execute()
38
+ * }, [])
39
+ *
40
+ * if (loading) return <Spinner />
41
+ * if (error) return <Error message={error.message} />
42
+ * return <UserList users={data} />
43
+ * ```
44
+ */
45
+ export function useHttp(method, url, options) {
46
+ const client = useHttpClient();
47
+ const { immediate = false, onSuccess, onError, ...requestConfig } = options ?? {};
48
+ const [state, setState] = useState({
49
+ data: null,
50
+ loading: immediate,
51
+ error: null,
52
+ });
53
+ // Track mounted state to avoid state updates after unmount
54
+ const mountedRef = useRef(true);
55
+ useEffect(() => {
56
+ mountedRef.current = true;
57
+ return () => {
58
+ mountedRef.current = false;
59
+ };
60
+ }, []);
61
+ const execute = useCallback(async () => {
62
+ if (!mountedRef.current)
63
+ return null;
64
+ setState((prev) => ({ ...prev, loading: true, error: null }));
65
+ try {
66
+ let response;
67
+ switch (method) {
68
+ case 'GET':
69
+ response = await client.get(url, requestConfig);
70
+ break;
71
+ case 'POST':
72
+ response = await client.post(url, requestConfig.data, requestConfig);
73
+ break;
74
+ case 'PUT':
75
+ response = await client.put(url, requestConfig.data, requestConfig);
76
+ break;
77
+ case 'PATCH':
78
+ response = await client.patch(url, requestConfig.data, requestConfig);
79
+ break;
80
+ case 'DELETE':
81
+ response = await client.delete(url, requestConfig);
82
+ break;
83
+ default:
84
+ throw new Error(t('react.error.unsupportedMethod', { method }, { defaultValue: `Unsupported method: ${method}` }));
85
+ }
86
+ if (mountedRef.current) {
87
+ setState({ data: response.data, loading: false, error: null });
88
+ onSuccess?.(response.data);
89
+ }
90
+ return response.data;
91
+ }
92
+ catch (error) {
93
+ const err = error instanceof Error ? error : new Error(String(error));
94
+ if (mountedRef.current) {
95
+ setState({ data: null, loading: false, error: err });
96
+ onError?.(err);
97
+ }
98
+ return null;
99
+ }
100
+ }, [client, method, url, requestConfig, onSuccess, onError]);
101
+ const reset = useCallback(() => {
102
+ setState({ data: null, loading: false, error: null });
103
+ }, []);
104
+ // Execute immediately if requested
105
+ useEffect(() => {
106
+ if (immediate) {
107
+ execute();
108
+ }
109
+ }, []);
110
+ return {
111
+ ...state,
112
+ execute,
113
+ reset,
114
+ };
115
+ }
116
+ /**
117
+ * Hook for GET requests.
118
+ * @param url - Request URL to fetch from.
119
+ * @param options - HTTP request options including callbacks and request config.
120
+ * @returns Request state (data, loading, error) and controls (execute, reset).
121
+ */
122
+ export function useGet(url, options) {
123
+ return useHttp('GET', url, options);
124
+ }
125
+ /**
126
+ * Hook for POST requests.
127
+ * @param url - Request URL to post to.
128
+ * @param options - HTTP request options including body data and callbacks.
129
+ * @returns Request state (data, loading, error) and controls (execute, reset).
130
+ */
131
+ export function usePost(url, options) {
132
+ return useHttp('POST', url, options);
133
+ }
134
+ /**
135
+ * Hook for PUT requests.
136
+ * @param url - Request URL to send the PUT request to.
137
+ * @param options - HTTP request options including body data and callbacks.
138
+ * @returns Request state (data, loading, error) and controls (execute, reset).
139
+ */
140
+ export function usePut(url, options) {
141
+ return useHttp('PUT', url, options);
142
+ }
143
+ /**
144
+ * Hook for PATCH requests.
145
+ * @param url - Request URL to send the PATCH request to.
146
+ * @param options - HTTP request options including partial body data and callbacks.
147
+ * @returns Request state (data, loading, error) and controls (execute, reset).
148
+ */
149
+ export function usePatch(url, options) {
150
+ return useHttp('PATCH', url, options);
151
+ }
152
+ /**
153
+ * Hook for DELETE requests.
154
+ * @param url - Request URL of the resource to delete.
155
+ * @param options - HTTP request options including callbacks.
156
+ * @returns Request state (data, loading, error) and controls (execute, reset).
157
+ */
158
+ export function useDelete(url, options) {
159
+ return useHttp('DELETE', url, options);
160
+ }
161
+ //# sourceMappingURL=useHttp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHttp.js","sourceRoot":"","sources":["../../src/hooks/useHttp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * React hook for logging.
3
+ *
4
+ * @module
5
+ */
6
+ import type { Logger, LoggerConfig, LoggerProvider } from '@molecule/app-logger';
7
+ /**
8
+ * Hook to access the logger provider from context.
9
+ *
10
+ * @returns The logger provider from context
11
+ * @throws {Error} Error if used outside of LoggerProvider
12
+ */
13
+ export declare function useLoggerProvider(): LoggerProvider;
14
+ /**
15
+ * Hook to get a logger instance.
16
+ *
17
+ * @param name - Logger name (usually component or module name)
18
+ * @param config - Optional logger configuration
19
+ * @returns Logger instance
20
+ *
21
+ * @example
22
+ * ```tsx
23
+ * function UserProfile() {
24
+ * const logger = useLogger('UserProfile')
25
+ *
26
+ * useEffect(() => {
27
+ * logger.info('Component mounted')
28
+ * return () => logger.info('Component unmounting')
29
+ * }, [])
30
+ *
31
+ * const handleError = (error: Error) => {
32
+ * logger.error('Failed to load user', error)
33
+ * }
34
+ *
35
+ * return <div>...</div>
36
+ * }
37
+ * ```
38
+ */
39
+ export declare function useLogger(name: string, config?: Partial<LoggerConfig>): Logger;
40
+ /**
41
+ * Hook to get the root logger.
42
+ *
43
+ * @returns Root logger instance
44
+ */
45
+ export declare function useRootLogger(): Logger;
46
+ /**
47
+ * Hook to create a child logger with additional context.
48
+ *
49
+ * @param parentName - Parent logger name
50
+ * @param context - Additional context to include in logs
51
+ * @returns Child logger instance
52
+ *
53
+ * @example
54
+ * ```tsx
55
+ * function UserList() {
56
+ * const logger = useChildLogger('UserList', { component: 'UserList' })
57
+ *
58
+ * const handleUserClick = (userId: string) => {
59
+ * // Logs will include { component: 'UserList', userId }
60
+ * logger.withContext({ userId }).info('User clicked')
61
+ * }
62
+ *
63
+ * return <div>...</div>
64
+ * }
65
+ * ```
66
+ */
67
+ export declare function useChildLogger(parentName: string, context: Record<string, unknown>): Logger;
68
+ //# sourceMappingURL=useLogger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLogger.d.ts","sourceRoot":"","sources":["../../src/hooks/useLogger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAIhF;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAUlD;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM,CAS9E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAGtC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAO3F"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * React hook for logging.
3
+ *
4
+ * @module
5
+ */
6
+ import { useContext, useMemo } from 'react';
7
+ import { t } from '@molecule/app-i18n';
8
+ import { LoggerContext } from '../contexts.js';
9
+ /**
10
+ * Hook to access the logger provider from context.
11
+ *
12
+ * @returns The logger provider from context
13
+ * @throws {Error} Error if used outside of LoggerProvider
14
+ */
15
+ export function useLoggerProvider() {
16
+ const provider = useContext(LoggerContext);
17
+ if (!provider) {
18
+ throw new Error(t('react.error.useLoggerOutsideProvider', undefined, {
19
+ defaultValue: 'useLoggerProvider must be used within a LoggerProvider',
20
+ }));
21
+ }
22
+ return provider;
23
+ }
24
+ /**
25
+ * Hook to get a logger instance.
26
+ *
27
+ * @param name - Logger name (usually component or module name)
28
+ * @param config - Optional logger configuration
29
+ * @returns Logger instance
30
+ *
31
+ * @example
32
+ * ```tsx
33
+ * function UserProfile() {
34
+ * const logger = useLogger('UserProfile')
35
+ *
36
+ * useEffect(() => {
37
+ * logger.info('Component mounted')
38
+ * return () => logger.info('Component unmounting')
39
+ * }, [])
40
+ *
41
+ * const handleError = (error: Error) => {
42
+ * logger.error('Failed to load user', error)
43
+ * }
44
+ *
45
+ * return <div>...</div>
46
+ * }
47
+ * ```
48
+ */
49
+ export function useLogger(name, config) {
50
+ const provider = useLoggerProvider();
51
+ return useMemo(() => {
52
+ if (config) {
53
+ return provider.createLogger({ name, ...config });
54
+ }
55
+ return provider.getLogger(name);
56
+ }, [provider, name, config]);
57
+ }
58
+ /**
59
+ * Hook to get the root logger.
60
+ *
61
+ * @returns Root logger instance
62
+ */
63
+ export function useRootLogger() {
64
+ const provider = useLoggerProvider();
65
+ return useMemo(() => provider.getLogger(), [provider]);
66
+ }
67
+ /**
68
+ * Hook to create a child logger with additional context.
69
+ *
70
+ * @param parentName - Parent logger name
71
+ * @param context - Additional context to include in logs
72
+ * @returns Child logger instance
73
+ *
74
+ * @example
75
+ * ```tsx
76
+ * function UserList() {
77
+ * const logger = useChildLogger('UserList', { component: 'UserList' })
78
+ *
79
+ * const handleUserClick = (userId: string) => {
80
+ * // Logs will include { component: 'UserList', userId }
81
+ * logger.withContext({ userId }).info('User clicked')
82
+ * }
83
+ *
84
+ * return <div>...</div>
85
+ * }
86
+ * ```
87
+ */
88
+ export function useChildLogger(parentName, context) {
89
+ const provider = useLoggerProvider();
90
+ return useMemo(() => {
91
+ const parent = provider.getLogger(parentName);
92
+ return parent.withContext(context);
93
+ }, [provider, parentName, context]);
94
+ }
95
+ //# sourceMappingURL=useLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLogger.js","sourceRoot":"","sources":["../../src/hooks/useLogger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAE3C,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAA;AAGtC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE9C;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,CAAA;IAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,CAAC,CAAC,sCAAsC,EAAE,SAAS,EAAE;YACnD,YAAY,EAAE,wDAAwD;SACvE,CAAC,CACH,CAAA;IACH,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,MAA8B;IACpE,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAA;IAEpC,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CAAA;QACnD,CAAC;QACD,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IACjC,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;AAC9B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAA;IACpC,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;AACxD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,cAAc,CAAC,UAAkB,EAAE,OAAgC;IACjF,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAA;IAEpC,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QAC7C,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;IACpC,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;AACrC,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * React hook for login with async state tracking.
3
+ *
4
+ * @module
5
+ */
6
+ import type { AuthResult, LoginCredentials } from '@molecule/app-auth';
7
+ import { type UsePromiseState } from './usePromise.js';
8
+ /**
9
+ * Return type for useLogin hook.
10
+ */
11
+ export interface UseLoginReturn<T = unknown> {
12
+ status: UsePromiseState<AuthResult<T>>['status'];
13
+ value: UsePromiseState<AuthResult<T>>['value'];
14
+ error: UsePromiseState<AuthResult<T>>['error'];
15
+ login: (credentials: LoginCredentials) => Promise<AuthResult<T>>;
16
+ reset: () => void;
17
+ }
18
+ /**
19
+ * Hook for login with async state tracking.
20
+ *
21
+ * @returns Login state and action
22
+ *
23
+ * @example
24
+ * ```tsx
25
+ * const { status, error, login } = useLogin()
26
+ *
27
+ * return (
28
+ * <button onClick={() => login({ email, password })} disabled={status === 'pending'}>
29
+ * {status === 'pending' ? 'Logging in...' : 'Login'}
30
+ * </button>
31
+ * )
32
+ * ```
33
+ */
34
+ export declare function useLogin<T = unknown>(): UseLoginReturn<T>;
35
+ //# sourceMappingURL=useLogin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLogin.d.ts","sourceRoot":"","sources":["../../src/hooks/useLogin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAGtE,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAElE;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACzC,MAAM,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;IAChD,KAAK,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IAC9C,KAAK,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IAC9C,KAAK,EAAE,CAAC,WAAW,EAAE,gBAAgB,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IAChE,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,QAAQ,CAAC,CAAC,GAAG,OAAO,KAAK,cAAc,CAAC,CAAC,CAAC,CAiBzD"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * React hook for login with async state tracking.
3
+ *
4
+ * @module
5
+ */
6
+ import { useCallback } from 'react';
7
+ import { useAuthClient } from './useAuth.js';
8
+ import { usePromise } from './usePromise.js';
9
+ /**
10
+ * Hook for login with async state tracking.
11
+ *
12
+ * @returns Login state and action
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * const { status, error, login } = useLogin()
17
+ *
18
+ * return (
19
+ * <button onClick={() => login({ email, password })} disabled={status === 'pending'}>
20
+ * {status === 'pending' ? 'Logging in...' : 'Login'}
21
+ * </button>
22
+ * )
23
+ * ```
24
+ */
25
+ export function useLogin() {
26
+ const client = useAuthClient();
27
+ const loginFn = useCallback((credentials) => client.login(credentials), [client]);
28
+ const [state, call] = usePromise(loginFn);
29
+ return {
30
+ status: state.status,
31
+ value: state.value,
32
+ error: state.error,
33
+ login: call,
34
+ reset: state.reset,
35
+ };
36
+ }
37
+ //# sourceMappingURL=useLogin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLogin.js","sourceRoot":"","sources":["../../src/hooks/useLogin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAInC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAA;AAalE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,QAAQ;IACtB,MAAM,MAAM,GAAG,aAAa,EAAK,CAAA;IAEjC,MAAM,OAAO,GAAG,WAAW,CACzB,CAAC,WAA6B,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAC5D,CAAC,MAAM,CAAC,CACT,CAAA;IAED,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;IAEzC,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,CAAA;AACH,CAAC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * React hook for OAuth authentication.
3
+ *
4
+ * Supports two initiation modes that share ONE callback path:
5
+ * - {@link UseOAuthReturn.redirect} — full-page redirect (the default; unchanged).
6
+ * - {@link UseOAuthReturn.loginViaPopup} — opens the provider in a popup so the
7
+ * opener page never navigates (used by in-app auth modals). On completion the
8
+ * popup relays the result to the opener via a STRICTLY-validated `postMessage`
9
+ * and closes itself; the opener establishes the session in place.
10
+ *
11
+ * Security model for the popup relay (see inline notes at each gate):
12
+ * - The popup posts ONLY to its own origin (`targetOrigin = location.origin`),
13
+ * never `'*'`, so the bearer token can never be delivered to another origin.
14
+ * - The opener accepts a result ONLY when ALL hold: `event.origin === location.origin`,
15
+ * `event.source === thePopupWindowWeOpened`, and `event.data.type` matches our
16
+ * private message type. Anything else is ignored — a forged cross-origin (or
17
+ * wrong-window) message cannot inject a session.
18
+ * - The popup-relay path is gated on `window.name === OAUTH_POPUP_WINDOW_NAME`
19
+ * AND `window.opener`, so an ordinary full-page callback is completely
20
+ * unaffected (it still establishes the session inline as before).
21
+ * - The opener tears down its listener + timers on result, on user-close, and on
22
+ * a hard timeout, so no stale handler lingers.
23
+ *
24
+ * @module
25
+ */
26
+ /**
27
+ * Return type for useOAuth hook.
28
+ */
29
+ export interface UseOAuthReturn {
30
+ providers: string[];
31
+ getOAuthUrl: (provider: string) => string;
32
+ /** Full-page redirect to the provider (default). The opener page navigates away. */
33
+ redirect: (provider: string) => void;
34
+ /**
35
+ * Open the provider in a popup so the opener page does NOT navigate. On success
36
+ * the session is established in the opener in place and `config.onSuccess` fires;
37
+ * on failure `config.onError` fires. Falls back to a full-page {@link redirect}
38
+ * when the popup is blocked.
39
+ */
40
+ loginViaPopup: (provider: string) => void;
41
+ }
42
+ /**
43
+ * Hook for OAuth authentication.
44
+ *
45
+ * Reads OAuth configuration from the provided config and provides
46
+ * helpers to build OAuth URLs and start a login (full-page or popup).
47
+ * Automatically handles OAuth callbacks by detecting `code` and `state`
48
+ * URL parameters and exchanging them for a session — and, when the callback is
49
+ * running inside a popup we opened, relaying the result to the opener instead.
50
+ *
51
+ * @param config - Optional OAuth configuration override.
52
+ * @param config.baseURL - Base URL for the API server (e.g. "https://api.example.com").
53
+ * @param config.oauthProviders - List of supported OAuth provider names (e.g. ["google", "github"]).
54
+ * @param config.oauthEndpoint - Path prefix for OAuth routes (defaults to "/oauth").
55
+ * @param config.loginEndpoint - Path for the OAuth login POST endpoint (defaults to "/users/log-in/oauth").
56
+ * @param config.onSuccess - Callback after successful OAuth login.
57
+ * @param config.onError - Callback on OAuth login failure.
58
+ *
59
+ * @example
60
+ * ```tsx
61
+ * const { providers, redirect, loginViaPopup } = useOAuth()
62
+ *
63
+ * return (
64
+ * <div>
65
+ * {providers.map(provider => (
66
+ * <button key={provider} onClick={() => loginViaPopup(provider)}>
67
+ * Login with {provider}
68
+ * </button>
69
+ * ))}
70
+ * </div>
71
+ * )
72
+ * ```
73
+ * @returns OAuth helpers: providers, getOAuthUrl, redirect, and loginViaPopup.
74
+ */
75
+ export declare function useOAuth(config?: {
76
+ baseURL?: string;
77
+ oauthProviders?: string[];
78
+ oauthEndpoint?: string;
79
+ loginEndpoint?: string;
80
+ onSuccess?: () => void;
81
+ onError?: (error: string) => void;
82
+ }): UseOAuthReturn;
83
+ //# sourceMappingURL=useOAuth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOAuth.d.ts","sourceRoot":"","sources":["../../src/hooks/useOAuth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAiCH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAA;IACzC,oFAAoF;IACpF,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC;;;;;OAKG;IACH,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;CAC1C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,QAAQ,CAAC,MAAM,CAAC,EAAE;IAChC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAClC,GAAG,cAAc,CA2SjB"}