sa2kit 3.0.0 → 3.1.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 (198) hide show
  1. package/dist/ai/llm/ui/miniapp/index.d.mts +2 -2
  2. package/dist/ai/llm/ui/miniapp/index.d.ts +2 -2
  3. package/dist/ai/llm/ui/rn/index.d.mts +2 -2
  4. package/dist/ai/llm/ui/rn/index.d.ts +2 -2
  5. package/dist/ai/llm/ui/web/index.d.mts +3 -3
  6. package/dist/ai/llm/ui/web/index.d.ts +3 -3
  7. package/dist/analytics/index.d.mts +1 -1
  8. package/dist/analytics/index.d.ts +1 -1
  9. package/dist/{chunk-QP5N3ER6.js → chunk-3CSCIRQY.js} +5 -6
  10. package/dist/chunk-3CSCIRQY.js.map +1 -0
  11. package/dist/{chunk-RJP2BRJD.mjs → chunk-4OOANEJV.mjs} +2 -2
  12. package/dist/{chunk-RJP2BRJD.mjs.map → chunk-4OOANEJV.mjs.map} +1 -1
  13. package/dist/chunk-5FUAQLGC.mjs +14 -0
  14. package/dist/chunk-5FUAQLGC.mjs.map +1 -0
  15. package/dist/{chunk-S732H246.js → chunk-6PMXAK7F.js} +2 -2
  16. package/dist/{chunk-S732H246.js.map → chunk-6PMXAK7F.js.map} +1 -1
  17. package/dist/chunk-6YLCRWKM.mjs +8 -0
  18. package/dist/chunk-6YLCRWKM.mjs.map +1 -0
  19. package/dist/{chunk-IBWDBBX5.mjs → chunk-7B5SI4OF.mjs} +3 -4
  20. package/dist/chunk-7B5SI4OF.mjs.map +1 -0
  21. package/dist/chunk-EQXPL7TN.mjs +78 -0
  22. package/dist/chunk-EQXPL7TN.mjs.map +1 -0
  23. package/dist/{chunk-GQZHGSRR.js → chunk-GSNGCENJ.js} +39 -2
  24. package/dist/chunk-GSNGCENJ.js.map +1 -0
  25. package/dist/chunk-HQLKOXG7.js +16 -0
  26. package/dist/chunk-HQLKOXG7.js.map +1 -0
  27. package/dist/{chunk-S3PUP7N4.js → chunk-PA4ELVGI.js} +2 -2
  28. package/dist/{chunk-S3PUP7N4.js.map → chunk-PA4ELVGI.js.map} +1 -1
  29. package/dist/{chunk-WZDTNDYR.js → chunk-QSKLQX6H.js} +11 -11
  30. package/dist/{chunk-WZDTNDYR.js.map → chunk-QSKLQX6H.js.map} +1 -1
  31. package/dist/{chunk-LHJKLUM7.mjs → chunk-TNJ6LYX7.mjs} +2 -2
  32. package/dist/{chunk-LHJKLUM7.mjs.map → chunk-TNJ6LYX7.mjs.map} +1 -1
  33. package/dist/{chunk-J77KR2EV.mjs → chunk-WJ7IMUEJ.mjs} +3 -3
  34. package/dist/{chunk-J77KR2EV.mjs.map → chunk-WJ7IMUEJ.mjs.map} +1 -1
  35. package/dist/chunk-YTGUIRRH.js +10 -0
  36. package/dist/chunk-YTGUIRRH.js.map +1 -0
  37. package/dist/common/auth/client/index.d.mts +1 -31
  38. package/dist/common/auth/client/index.d.ts +1 -31
  39. package/dist/common/auth/client/index.js +2 -15
  40. package/dist/common/auth/client/index.mjs +1 -2
  41. package/dist/common/auth/components/index.d.mts +14 -248
  42. package/dist/common/auth/components/index.d.ts +14 -248
  43. package/dist/common/auth/components/index.js +878 -49
  44. package/dist/common/auth/components/index.js.map +1 -1
  45. package/dist/common/auth/components/index.mjs +871 -5
  46. package/dist/common/auth/components/index.mjs.map +1 -1
  47. package/dist/common/auth/hooks/index.d.mts +2 -29
  48. package/dist/common/auth/hooks/index.d.ts +2 -29
  49. package/dist/common/auth/hooks/index.js +2 -11
  50. package/dist/common/auth/hooks/index.mjs +1 -2
  51. package/dist/common/auth/index.d.mts +5 -9
  52. package/dist/common/auth/index.d.ts +5 -9
  53. package/dist/common/auth/index.js +7 -28
  54. package/dist/common/auth/index.mjs +3 -4
  55. package/dist/common/auth/react/index.d.mts +3 -3
  56. package/dist/common/auth/react/index.d.ts +3 -3
  57. package/dist/common/auth/rn/index.d.mts +3 -19
  58. package/dist/common/auth/rn/index.d.ts +3 -19
  59. package/dist/common/auth/rn/index.js +0 -32
  60. package/dist/common/auth/rn/index.js.map +1 -1
  61. package/dist/common/auth/rn/index.mjs +1 -30
  62. package/dist/common/auth/rn/index.mjs.map +1 -1
  63. package/dist/common/auth/server/index.d.mts +81 -2
  64. package/dist/common/auth/server/index.d.ts +81 -2
  65. package/dist/common/auth/server/index.js +128 -37
  66. package/dist/common/auth/server/index.js.map +1 -1
  67. package/dist/common/auth/server/index.mjs +124 -1
  68. package/dist/common/auth/server/index.mjs.map +1 -1
  69. package/dist/common/auth/services/index.js +12 -9
  70. package/dist/common/auth/services/index.js.map +1 -1
  71. package/dist/common/auth/services/index.mjs +10 -1
  72. package/dist/common/auth/services/index.mjs.map +1 -1
  73. package/dist/common/file/server/index.js +32 -32
  74. package/dist/common/file/server/index.mjs +3 -3
  75. package/dist/common/index.d.mts +5 -8
  76. package/dist/common/index.d.ts +5 -8
  77. package/dist/common/index.js +12 -14
  78. package/dist/common/index.mjs +6 -8
  79. package/dist/common/request/index.js +4 -5
  80. package/dist/common/request/index.mjs +2 -3
  81. package/dist/i18n/index.d.mts +1 -1
  82. package/dist/i18n/index.d.ts +1 -1
  83. package/dist/imageCrop/index.d.mts +3 -3
  84. package/dist/imageCrop/index.d.ts +3 -3
  85. package/dist/index-Bd7cKF1j.d.mts +50 -0
  86. package/dist/{index-CLB80GCP.d.ts → index-D0cqaQEH.d.mts} +5 -5
  87. package/dist/{index-CLB80GCP.d.mts → index-D0cqaQEH.d.ts} +5 -5
  88. package/dist/index-DRQxtCDw.d.ts +50 -0
  89. package/dist/{index-BxZauNN_.d.mts → index-DoUo8IrU.d.mts} +8 -8
  90. package/dist/{index-BxZauNN_.d.ts → index-DoUo8IrU.d.ts} +8 -8
  91. package/dist/index.d.mts +152 -131
  92. package/dist/index.d.ts +152 -131
  93. package/dist/index.js +105 -554
  94. package/dist/index.js.map +1 -1
  95. package/dist/index.mjs +106 -555
  96. package/dist/index.mjs.map +1 -1
  97. package/dist/ossFile/server/index.js +32 -32
  98. package/dist/ossFile/server/index.mjs +3 -3
  99. package/dist/request/index.js +3 -4
  100. package/dist/request/index.mjs +1 -2
  101. package/dist/universalExport/index.d.mts +3 -3
  102. package/dist/universalExport/index.d.ts +3 -3
  103. package/dist/universalFile/index.d.mts +5 -5
  104. package/dist/universalFile/index.d.ts +5 -5
  105. package/dist/universalFile/server/index.js +62 -62
  106. package/dist/universalFile/server/index.mjs +2 -2
  107. package/package.json +1 -36
  108. package/dist/auth/client/index.d.mts +0 -13
  109. package/dist/auth/client/index.d.ts +0 -13
  110. package/dist/auth/client/index.js +0 -26
  111. package/dist/auth/client/index.js.map +0 -1
  112. package/dist/auth/client/index.mjs +0 -5
  113. package/dist/auth/client/index.mjs.map +0 -1
  114. package/dist/auth/components/index.d.mts +0 -10
  115. package/dist/auth/components/index.d.ts +0 -10
  116. package/dist/auth/components/index.js +0 -70
  117. package/dist/auth/components/index.js.map +0 -1
  118. package/dist/auth/components/index.mjs +0 -9
  119. package/dist/auth/components/index.mjs.map +0 -1
  120. package/dist/auth/hooks/index.d.mts +0 -13
  121. package/dist/auth/hooks/index.d.ts +0 -13
  122. package/dist/auth/hooks/index.js +0 -28
  123. package/dist/auth/hooks/index.js.map +0 -1
  124. package/dist/auth/hooks/index.mjs +0 -7
  125. package/dist/auth/hooks/index.mjs.map +0 -1
  126. package/dist/auth/index.d.mts +0 -21
  127. package/dist/auth/index.d.ts +0 -21
  128. package/dist/auth/index.js +0 -112
  129. package/dist/auth/index.js.map +0 -1
  130. package/dist/auth/index.mjs +0 -11
  131. package/dist/auth/index.mjs.map +0 -1
  132. package/dist/auth/rn/index.d.mts +0 -3133
  133. package/dist/auth/rn/index.d.ts +0 -3133
  134. package/dist/auth/rn/index.js +0 -684
  135. package/dist/auth/rn/index.js.map +0 -1
  136. package/dist/auth/rn/index.mjs +0 -663
  137. package/dist/auth/rn/index.mjs.map +0 -1
  138. package/dist/auth/schema/index.d.mts +0 -4
  139. package/dist/auth/schema/index.d.ts +0 -4
  140. package/dist/auth/schema/index.js +0 -49
  141. package/dist/auth/schema/index.js.map +0 -1
  142. package/dist/auth/schema/index.mjs +0 -4
  143. package/dist/auth/schema/index.mjs.map +0 -1
  144. package/dist/auth/services/index.d.mts +0 -1
  145. package/dist/auth/services/index.d.ts +0 -1
  146. package/dist/auth/services/index.js +0 -17
  147. package/dist/auth/services/index.js.map +0 -1
  148. package/dist/auth/services/index.mjs +0 -4
  149. package/dist/auth/services/index.mjs.map +0 -1
  150. package/dist/base-api-client-BpmcQt4Q.d.ts +0 -103
  151. package/dist/base-api-client-CFIhZK4C.d.mts +0 -277
  152. package/dist/base-api-client-CFIhZK4C.d.ts +0 -277
  153. package/dist/base-api-client-DXLsq2yz.d.mts +0 -103
  154. package/dist/chunk-7E3J7VAD.mjs +0 -3
  155. package/dist/chunk-7E3J7VAD.mjs.map +0 -1
  156. package/dist/chunk-B3CZ3HXJ.mjs +0 -126
  157. package/dist/chunk-B3CZ3HXJ.mjs.map +0 -1
  158. package/dist/chunk-FOQEQWX5.js +0 -4
  159. package/dist/chunk-FOQEQWX5.js.map +0 -1
  160. package/dist/chunk-G4NFB2QA.mjs +0 -212
  161. package/dist/chunk-G4NFB2QA.mjs.map +0 -1
  162. package/dist/chunk-G5HJGXGC.mjs +0 -39
  163. package/dist/chunk-G5HJGXGC.mjs.map +0 -1
  164. package/dist/chunk-GQZHGSRR.js.map +0 -1
  165. package/dist/chunk-GS7XLKET.js +0 -41
  166. package/dist/chunk-GS7XLKET.js.map +0 -1
  167. package/dist/chunk-IBWDBBX5.mjs.map +0 -1
  168. package/dist/chunk-MWSAH7ZG.mjs +0 -42
  169. package/dist/chunk-MWSAH7ZG.mjs.map +0 -1
  170. package/dist/chunk-MZOGYD4N.mjs +0 -186
  171. package/dist/chunk-MZOGYD4N.mjs.map +0 -1
  172. package/dist/chunk-QDUBO567.js +0 -1148
  173. package/dist/chunk-QDUBO567.js.map +0 -1
  174. package/dist/chunk-QP5N3ER6.js.map +0 -1
  175. package/dist/chunk-RWCD2CAD.mjs +0 -1132
  176. package/dist/chunk-RWCD2CAD.mjs.map +0 -1
  177. package/dist/chunk-S37OK2QG.js +0 -216
  178. package/dist/chunk-S37OK2QG.js.map +0 -1
  179. package/dist/chunk-SFDJNKWC.js +0 -22
  180. package/dist/chunk-SFDJNKWC.js.map +0 -1
  181. package/dist/chunk-TXMX6PZR.js +0 -190
  182. package/dist/chunk-TXMX6PZR.js.map +0 -1
  183. package/dist/chunk-VHN7PF5I.js +0 -20
  184. package/dist/chunk-VHN7PF5I.js.map +0 -1
  185. package/dist/chunk-XBZIS3MV.mjs +0 -13
  186. package/dist/chunk-XBZIS3MV.mjs.map +0 -1
  187. package/dist/chunk-XFOZ56FB.mjs +0 -20
  188. package/dist/chunk-XFOZ56FB.mjs.map +0 -1
  189. package/dist/chunk-Z23HAXHL.js +0 -136
  190. package/dist/chunk-Z23HAXHL.js.map +0 -1
  191. package/dist/index-BcjDRcKp.d.mts +0 -40
  192. package/dist/index-BlpXrrTy.d.ts +0 -40
  193. package/dist/session-BCXvGCnm.d.mts +0 -81
  194. package/dist/session-BCXvGCnm.d.ts +0 -81
  195. package/dist/types-C_W_CoUD.d.ts +0 -99
  196. package/dist/types-DCRvasyH.d.mts +0 -99
  197. package/dist/types.legacy-J-j-_ig_.d.mts +0 -25
  198. package/dist/types.legacy-J-j-_ig_.d.ts +0 -25
@@ -1,190 +0,0 @@
1
- 'use strict';
2
-
3
- var react = require('react');
4
-
5
- // src/common/auth/hooks/useSession.ts
6
- function useSession(authClient) {
7
- return authClient.useSession();
8
- }
9
- function useAuth(apiClient) {
10
- const [user, setUser] = react.useState(null);
11
- const [isLoggedIn, setIsLoggedIn] = react.useState(false);
12
- const [loading, setLoading] = react.useState(false);
13
- const [checkingAuth, setCheckingAuth] = react.useState(true);
14
- const [error, setError] = react.useState(null);
15
- const checkAuthStatus = react.useCallback(async () => {
16
- try {
17
- setCheckingAuth(true);
18
- setError(null);
19
- const isAuth = await apiClient.isAuthenticated();
20
- if (isAuth) {
21
- const response = await apiClient.getCurrentUser();
22
- if (response.success && response.data) {
23
- setUser(response.data);
24
- setIsLoggedIn(true);
25
- } else {
26
- await apiClient.clearUserData();
27
- setUser(null);
28
- setIsLoggedIn(false);
29
- }
30
- } else {
31
- setUser(null);
32
- setIsLoggedIn(false);
33
- }
34
- } catch (err) {
35
- console.error("\u68C0\u67E5\u767B\u5F55\u72B6\u6001\u5931\u8D25:", err);
36
- setError(err instanceof Error ? err.message : "\u68C0\u67E5\u767B\u5F55\u72B6\u6001\u5931\u8D25");
37
- setUser(null);
38
- setIsLoggedIn(false);
39
- } finally {
40
- setCheckingAuth(false);
41
- }
42
- }, [apiClient]);
43
- const login = react.useCallback(
44
- async (email, password) => {
45
- setLoading(true);
46
- setError(null);
47
- try {
48
- const response = await apiClient.login(email, password);
49
- if (response.success && response.data) {
50
- setUser(response.data.user);
51
- setIsLoggedIn(true);
52
- return { success: true };
53
- } else {
54
- const errorMsg = response.error || "\u767B\u5F55\u5931\u8D25";
55
- setError(errorMsg);
56
- return { success: false, error: errorMsg };
57
- }
58
- } catch (err) {
59
- const errorMsg = err instanceof Error ? err.message : "\u767B\u5F55\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5";
60
- setError(errorMsg);
61
- return { success: false, error: errorMsg };
62
- } finally {
63
- setLoading(false);
64
- }
65
- },
66
- [apiClient]
67
- );
68
- const register = react.useCallback(
69
- async (email, password, username) => {
70
- setLoading(true);
71
- setError(null);
72
- try {
73
- const response = await apiClient.register(email, password, username);
74
- if (response.success && response.data) {
75
- setUser(response.data.user);
76
- setIsLoggedIn(true);
77
- return { success: true };
78
- } else {
79
- const errorMsg = response.error || "\u6CE8\u518C\u5931\u8D25";
80
- setError(errorMsg);
81
- return { success: false, error: errorMsg };
82
- }
83
- } catch (err) {
84
- const errorMsg = err instanceof Error ? err.message : "\u6CE8\u518C\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5";
85
- setError(errorMsg);
86
- return { success: false, error: errorMsg };
87
- } finally {
88
- setLoading(false);
89
- }
90
- },
91
- [apiClient]
92
- );
93
- const logout = react.useCallback(async () => {
94
- setLoading(true);
95
- setError(null);
96
- try {
97
- await apiClient.logout();
98
- setUser(null);
99
- setIsLoggedIn(false);
100
- } catch (err) {
101
- console.error("\u767B\u51FA\u5931\u8D25:", err);
102
- setError(err instanceof Error ? err.message : "\u767B\u51FA\u5931\u8D25");
103
- setUser(null);
104
- setIsLoggedIn(false);
105
- } finally {
106
- setLoading(false);
107
- }
108
- }, [apiClient]);
109
- const clearError = react.useCallback(() => {
110
- setError(null);
111
- }, []);
112
- react.useEffect(() => {
113
- checkAuthStatus();
114
- }, [checkAuthStatus]);
115
- return {
116
- // 状态
117
- user,
118
- isLoggedIn,
119
- loading,
120
- checkingAuth,
121
- error,
122
- // 操作方法
123
- login,
124
- register,
125
- logout,
126
- refresh: checkAuthStatus,
127
- clearError
128
- };
129
- }
130
- function useAuthForm(initialValues) {
131
- const [values, setValues] = react.useState(initialValues);
132
- const [errors, setErrors] = react.useState({});
133
- const [touched, setTouched] = react.useState({});
134
- const handleChange = react.useCallback(
135
- (field, value) => {
136
- setValues((prev) => ({ ...prev, [field]: value }));
137
- if (errors[field]) {
138
- setErrors((prev) => {
139
- const newErrors = { ...prev };
140
- delete newErrors[field];
141
- return newErrors;
142
- });
143
- }
144
- },
145
- [errors]
146
- );
147
- const handleBlur = react.useCallback((field) => {
148
- setTouched((prev) => ({ ...prev, [field]: true }));
149
- }, []);
150
- const validate = react.useCallback(
151
- (validationRules) => {
152
- const newErrors = {};
153
- Object.keys(validationRules).forEach((key) => {
154
- const field = key;
155
- const rule = validationRules[field];
156
- if (rule) {
157
- const error = rule(values[field]);
158
- if (error) {
159
- newErrors[field] = error;
160
- }
161
- }
162
- });
163
- setErrors(newErrors);
164
- return Object.keys(newErrors).length === 0;
165
- },
166
- [values]
167
- );
168
- const reset = react.useCallback(() => {
169
- setValues(initialValues);
170
- setErrors({});
171
- setTouched({});
172
- }, [initialValues]);
173
- return {
174
- values,
175
- errors,
176
- touched,
177
- handleChange,
178
- handleBlur,
179
- validate,
180
- reset,
181
- setValues,
182
- setErrors
183
- };
184
- }
185
-
186
- exports.useAuth = useAuth;
187
- exports.useAuthForm = useAuthForm;
188
- exports.useSession = useSession;
189
- //# sourceMappingURL=chunk-TXMX6PZR.js.map
190
- //# sourceMappingURL=chunk-TXMX6PZR.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/common/auth/hooks/useSession.ts","../src/common/auth/hooks/useAuth.ts"],"names":["useState","useCallback","useEffect"],"mappings":"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","file":"chunk-TXMX6PZR.js","sourcesContent":["'use client';\n\nimport type { Sa2kitAuthClient } from '../react';\n\n/**\n * 薄封装 Better Auth React `useSession`\n */\nexport function useSession(authClient: Sa2kitAuthClient) {\n return authClient.useSession();\n}\n\nexport type UseSessionReturn = ReturnType<typeof useSession>;\n","'use client';\n\nimport { useState, useEffect, useCallback } from 'react';\nimport type { User, IAuthClient as BaseApiClient, AuthResult, UseAuthReturn } from '../types';\n\nexport type { User, BaseApiClient, AuthResult, UseAuthReturn };\n\nexport function useAuth(apiClient: BaseApiClient): UseAuthReturn {\n const [user, setUser] = useState<User | null>(null);\n const [isLoggedIn, setIsLoggedIn] = useState(false);\n const [loading, setLoading] = useState(false);\n const [checkingAuth, setCheckingAuth] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n /**\n * 检查认证状态\n */\n const checkAuthStatus = useCallback(async () => {\n try {\n setCheckingAuth(true);\n setError(null);\n\n const isAuth = await apiClient.isAuthenticated();\n\n if (isAuth) {\n // 验证 token 并获取用户信息\n const response = await apiClient.getCurrentUser();\n\n if (response.success && response.data) {\n setUser(response.data);\n setIsLoggedIn(true);\n } else {\n // Token 无效,清除登录状态\n await apiClient.clearUserData();\n setUser(null);\n setIsLoggedIn(false);\n }\n } else {\n setUser(null);\n setIsLoggedIn(false);\n }\n } catch (err) {\n console.error('检查登录状态失败:', err);\n setError(err instanceof Error ? err.message : '检查登录状态失败');\n setUser(null);\n setIsLoggedIn(false);\n } finally {\n setCheckingAuth(false);\n }\n }, [apiClient]);\n\n /**\n * 用户登录\n */\n const login = useCallback(\n async (email: string, password: string): Promise<AuthResult> => {\n setLoading(true);\n setError(null);\n\n try {\n const response = await apiClient.login(email, password);\n\n if (response.success && response.data) {\n setUser(response.data.user);\n setIsLoggedIn(true);\n return { success: true };\n } else {\n const errorMsg = response.error || '登录失败';\n setError(errorMsg);\n return { success: false, error: errorMsg };\n }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : '登录失败,请重试';\n setError(errorMsg);\n return { success: false, error: errorMsg };\n } finally {\n setLoading(false);\n }\n },\n [apiClient]\n );\n\n /**\n * 用户注册\n */\n const register = useCallback(\n async (email: string, password: string, username: string): Promise<AuthResult> => {\n setLoading(true);\n setError(null);\n\n try {\n const response = await apiClient.register(email, password, username);\n\n if (response.success && response.data) {\n setUser(response.data.user);\n setIsLoggedIn(true);\n return { success: true };\n } else {\n const errorMsg = response.error || '注册失败';\n setError(errorMsg);\n return { success: false, error: errorMsg };\n }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : '注册失败,请重试';\n setError(errorMsg);\n return { success: false, error: errorMsg };\n } finally {\n setLoading(false);\n }\n },\n [apiClient]\n );\n\n /**\n * 用户登出\n */\n const logout = useCallback(async () => {\n setLoading(true);\n setError(null);\n\n try {\n await apiClient.logout();\n setUser(null);\n setIsLoggedIn(false);\n } catch (err) {\n console.error('登出失败:', err);\n setError(err instanceof Error ? err.message : '登出失败');\n // 即使登出失败,也清除本地状态\n setUser(null);\n setIsLoggedIn(false);\n } finally {\n setLoading(false);\n }\n }, [apiClient]);\n\n /**\n * 清除错误信息\n */\n const clearError = useCallback(() => {\n setError(null);\n }, []);\n\n // 组件挂载时检查认证状态\n useEffect(() => {\n checkAuthStatus();\n }, [checkAuthStatus]);\n\n return {\n // 状态\n user,\n isLoggedIn,\n loading,\n checkingAuth,\n error,\n\n // 操作方法\n login,\n register,\n logout,\n refresh: checkAuthStatus,\n clearError,\n };\n}\n\n/**\n * 表单验证 Hook\n *\n * @example\n * ```typescript\n * const { values, errors, handleChange, handleBlur, validate } = useAuthForm({\n * email: '',\n * password: ''\n * })\n * ```\n */\nexport function useAuthForm<T extends Record<string, any>>(initialValues: T) {\n const [values, setValues] = useState<T>(initialValues);\n const [errors, setErrors] = useState<Partial<Record<keyof T, string>>>({});\n const [touched, setTouched] = useState<Partial<Record<keyof T, boolean>>>({});\n\n const handleChange = useCallback(\n (field: keyof T, value: any) => {\n setValues((prev: T) => ({ ...prev, [field]: value }));\n // 清除该字段的错误\n if (errors[field]) {\n setErrors((prev: Partial<Record<keyof T, string>>) => {\n const newErrors = { ...prev };\n delete newErrors[field];\n return newErrors;\n });\n }\n },\n [errors]\n );\n\n const handleBlur = useCallback((field: keyof T) => {\n setTouched((prev: Partial<Record<keyof T, boolean>>) => ({ ...prev, [field]: true }));\n }, []);\n\n const validate = useCallback(\n (validationRules: Partial<Record<keyof T, (value: any) => string | undefined>>) => {\n const newErrors: Partial<Record<keyof T, string>> = {};\n\n Object.keys(validationRules).forEach((key) => {\n const field = key as keyof T;\n const rule = validationRules[field];\n if (rule) {\n const error = rule(values[field]);\n if (error) {\n newErrors[field] = error;\n }\n }\n });\n\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n },\n [values]\n );\n\n const reset = useCallback(() => {\n setValues(initialValues);\n setErrors({});\n setTouched({});\n }, [initialValues]);\n\n return {\n values,\n errors,\n touched,\n handleChange,\n handleBlur,\n validate,\n reset,\n setValues,\n setErrors,\n };\n}\n\n"]}
@@ -1,20 +0,0 @@
1
- 'use strict';
2
-
3
- var bcrypt = require('bcryptjs');
4
-
5
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
6
-
7
- var bcrypt__default = /*#__PURE__*/_interopDefault(bcrypt);
8
-
9
- // src/common/auth/services/password-utils.ts
10
- async function hashPassword(password, saltRounds = 12) {
11
- return bcrypt__default.default.hash(password, saltRounds);
12
- }
13
- async function verifyPassword(password, hashedPassword) {
14
- return bcrypt__default.default.compare(password, hashedPassword);
15
- }
16
-
17
- exports.hashPassword = hashPassword;
18
- exports.verifyPassword = verifyPassword;
19
- //# sourceMappingURL=chunk-VHN7PF5I.js.map
20
- //# sourceMappingURL=chunk-VHN7PF5I.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/common/auth/services/password-utils.ts"],"names":["bcrypt"],"mappings":";;;;;;;;;AAUA,eAAsB,YAAA,CAAa,QAAA,EAAkB,UAAA,GAAqB,EAAA,EAAqB;AAC7F,EAAA,OAAOA,uBAAA,CAAO,IAAA,CAAK,QAAA,EAAU,UAAU,CAAA;AACzC;AAKA,eAAsB,cAAA,CAAe,UAAkB,cAAA,EAA0C;AAC/F,EAAA,OAAOA,uBAAA,CAAO,OAAA,CAAQ,QAAA,EAAU,cAAc,CAAA;AAChD","file":"chunk-VHN7PF5I.js","sourcesContent":["/**\n * Auth Services - Password Utilities\n * 密码哈希相关工具函数\n */\n\nimport bcrypt from 'bcryptjs';\n\n/**\n * 哈希密码\n */\nexport async function hashPassword(password: string, saltRounds: number = 12): Promise<string> {\n return bcrypt.hash(password, saltRounds);\n}\n\n/**\n * 验证密码\n */\nexport async function verifyPassword(password: string, hashedPassword: string): Promise<boolean> {\n return bcrypt.compare(password, hashedPassword);\n}\n\n"]}
@@ -1,13 +0,0 @@
1
- import bcrypt from 'bcryptjs';
2
-
3
- // src/common/auth/services/password-utils.ts
4
- async function hashPassword(password, saltRounds = 12) {
5
- return bcrypt.hash(password, saltRounds);
6
- }
7
- async function verifyPassword(password, hashedPassword) {
8
- return bcrypt.compare(password, hashedPassword);
9
- }
10
-
11
- export { hashPassword, verifyPassword };
12
- //# sourceMappingURL=chunk-XBZIS3MV.mjs.map
13
- //# sourceMappingURL=chunk-XBZIS3MV.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/common/auth/services/password-utils.ts"],"names":[],"mappings":";;;AAUA,eAAsB,YAAA,CAAa,QAAA,EAAkB,UAAA,GAAqB,EAAA,EAAqB;AAC7F,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,QAAA,EAAU,UAAU,CAAA;AACzC;AAKA,eAAsB,cAAA,CAAe,UAAkB,cAAA,EAA0C;AAC/F,EAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,QAAA,EAAU,cAAc,CAAA;AAChD","file":"chunk-XBZIS3MV.mjs","sourcesContent":["/**\n * Auth Services - Password Utilities\n * 密码哈希相关工具函数\n */\n\nimport bcrypt from 'bcryptjs';\n\n/**\n * 哈希密码\n */\nexport async function hashPassword(password: string, saltRounds: number = 12): Promise<string> {\n return bcrypt.hash(password, saltRounds);\n}\n\n/**\n * 验证密码\n */\nexport async function verifyPassword(password: string, hashedPassword: string): Promise<boolean> {\n return bcrypt.compare(password, hashedPassword);\n}\n\n"]}
@@ -1,20 +0,0 @@
1
- import { createSa2kitAuthClient } from './chunk-LHJKLUM7.mjs';
2
- import { STORAGE_KEYS, BaseApiClient, API_ROUTES } from './chunk-G4NFB2QA.mjs';
3
- import { useSession, useAuthForm, useAuth } from './chunk-MZOGYD4N.mjs';
4
- import { __export } from './chunk-MAI35PU6.mjs';
5
-
6
- // src/common/auth/index.ts
7
- var auth_exports = {};
8
- __export(auth_exports, {
9
- API_ROUTES: () => API_ROUTES,
10
- BaseApiClient: () => BaseApiClient,
11
- STORAGE_KEYS: () => STORAGE_KEYS,
12
- createSa2kitAuthClient: () => createSa2kitAuthClient,
13
- useAuth: () => useAuth,
14
- useAuthForm: () => useAuthForm,
15
- useSession: () => useSession
16
- });
17
-
18
- export { auth_exports };
19
- //# sourceMappingURL=chunk-XFOZ56FB.mjs.map
20
- //# sourceMappingURL=chunk-XFOZ56FB.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/common/auth/index.ts"],"names":[],"mappings":";;;;;;AAAA,IAAA,YAAA,GAAA;AAAA,QAAA,CAAA,YAAA,EAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,sBAAA,EAAA,MAAA,sBAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,UAAA,EAAA,MAAA;AAAA,CAAA,CAAA","file":"chunk-XFOZ56FB.mjs","sourcesContent":["/**\n * @package sa2kit/common/auth\n *\n * Browser / client 安全入口(Better Auth 3.0)\n */\nexport { createSa2kitAuthClient, type Sa2kitAuthClient, type Sa2kitAuthClientOptions } from './client';\nexport { useSession, type UseSessionReturn } from './hooks/useSession';\n\n/** @deprecated 3.0 请使用 createSa2kitAuthClient + useSession */\nexport { useAuth, useAuthForm } from './hooks/useAuth';\n/** @deprecated 3.0 请使用 createSa2kitAuthClient */\nexport { BaseApiClient, API_ROUTES, STORAGE_KEYS } from './client';\n\nexport type { LoginFormState, RegisterFormState } from './components/types';\nexport * from './types';\n"]}
@@ -1,136 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkLGHUCQIU_js = require('./chunk-LGHUCQIU.js');
4
- var betterAuth = require('better-auth');
5
- var drizzleAdapter = require('@better-auth/drizzle-adapter');
6
- var plugins = require('better-auth/plugins');
7
- var nextJs = require('better-auth/next-js');
8
-
9
- // src/common/auth/server/plugins/dev-otp.ts
10
- function createDevOtpLogger(enabled) {
11
- if (!enabled || process.env.NODE_ENV === "production") {
12
- return void 0;
13
- }
14
- return (channel, target, code) => {
15
- console.info(`[sa2kit/auth][dev-otp][${channel}] ${target} => ${code}`);
16
- };
17
- }
18
- var defaultPhoneValidator = (phoneNumber2) => /^1\d{10}$/.test(phoneNumber2);
19
- var defaultTempEmailFromPhone = (phoneNumber2) => `${phoneNumber2.replace(/\D/g, "")}@phone.sa2kit.local`;
20
-
21
- // src/common/auth/server/create-auth.ts
22
- function createSa2kitAuth(config) {
23
- if (!config.secret || config.secret.length < 32) {
24
- throw new Error("createSa2kitAuth: secret \u81F3\u5C11 32 \u5B57\u7B26");
25
- }
26
- const devLog = createDevOtpLogger(config.logOtpInDev ?? process.env.NODE_ENV !== "production");
27
- const phoneValidator = config.phoneNumberValidator ?? defaultPhoneValidator;
28
- const auth = betterAuth.betterAuth({
29
- appName: "sa2kit",
30
- baseURL: config.baseURL,
31
- basePath: config.basePath ?? "/api/auth",
32
- secret: config.secret,
33
- trustedOrigins: config.trustedOrigins,
34
- database: drizzleAdapter.drizzleAdapter(config.db, {
35
- provider: "pg",
36
- schema: chunkLGHUCQIU_js.authDrizzleSchema
37
- }),
38
- emailAndPassword: {
39
- enabled: true
40
- },
41
- user: {
42
- additionalFields: {
43
- role: {
44
- type: "string",
45
- required: false,
46
- defaultValue: "USER",
47
- input: false
48
- }
49
- }
50
- },
51
- plugins: [
52
- plugins.bearer(),
53
- plugins.emailOTP({
54
- async sendVerificationOTP({ email, otp, type }) {
55
- devLog?.("email", `${email} (${type})`, otp);
56
- if (config.email?.sendVerificationOTP) {
57
- await config.email.sendVerificationOTP(email, otp, type);
58
- }
59
- }
60
- }),
61
- plugins.phoneNumber({
62
- allowedAttempts: 5,
63
- phoneNumberValidator: phoneValidator,
64
- async sendOTP({ phoneNumber: phone, code }) {
65
- devLog?.("sms", phone, code);
66
- if (config.sms?.sendOTP) {
67
- void config.sms.sendOTP(phone, code);
68
- }
69
- },
70
- signUpOnVerification: {
71
- getTempEmail: defaultTempEmailFromPhone,
72
- getTempName: (phone) => phone
73
- }
74
- })
75
- ]
76
- });
77
- return auth;
78
- }
79
- function mountNextAuthHandler(auth) {
80
- return nextJs.toNextJsHandler(auth);
81
- }
82
-
83
- // src/common/auth/server/handler/hono.ts
84
- function mountAuthHandler(auth) {
85
- return (request) => auth.handler(request);
86
- }
87
- function createAuthRouteHandlers(auth) {
88
- const handler = mountAuthHandler(auth);
89
- return {
90
- GET: handler,
91
- POST: handler,
92
- PUT: handler,
93
- PATCH: handler,
94
- DELETE: handler
95
- };
96
- }
97
-
98
- // src/common/auth/server/session.ts
99
- async function getSessionUser(auth, request) {
100
- const session2 = await auth.api.getSession({ headers: request.headers });
101
- if (!session2?.user) return null;
102
- const user2 = session2.user;
103
- return {
104
- id: user2.id,
105
- email: user2.email,
106
- name: user2.name,
107
- role: user2.role,
108
- phoneNumber: user2.phoneNumber ?? null
109
- };
110
- }
111
- async function getSessionUserNumeric(auth, request) {
112
- const user2 = await getSessionUser(auth, request);
113
- if (!user2) return null;
114
- const numericId = Number.parseInt(user2.id, 10);
115
- if (Number.isNaN(numericId)) return null;
116
- const { id: _id, ...rest } = user2;
117
- return { ...rest, id: numericId };
118
- }
119
- function createSessionValidator(auth) {
120
- return {
121
- getSessionUser: (request) => getSessionUser(auth, request),
122
- getSessionUserNumeric: (request) => getSessionUserNumeric(auth, request)
123
- };
124
- }
125
-
126
- exports.createAuthRouteHandlers = createAuthRouteHandlers;
127
- exports.createSa2kitAuth = createSa2kitAuth;
128
- exports.createSessionValidator = createSessionValidator;
129
- exports.defaultPhoneValidator = defaultPhoneValidator;
130
- exports.defaultTempEmailFromPhone = defaultTempEmailFromPhone;
131
- exports.getSessionUser = getSessionUser;
132
- exports.getSessionUserNumeric = getSessionUserNumeric;
133
- exports.mountAuthHandler = mountAuthHandler;
134
- exports.mountNextAuthHandler = mountNextAuthHandler;
135
- //# sourceMappingURL=chunk-Z23HAXHL.js.map
136
- //# sourceMappingURL=chunk-Z23HAXHL.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/common/auth/server/plugins/dev-otp.ts","../src/common/auth/server/create-auth.ts","../src/common/auth/server/handler/next.ts","../src/common/auth/server/handler/hono.ts","../src/common/auth/server/session.ts"],"names":["phoneNumber","betterAuth","drizzleAdapter","authDrizzleSchema","bearer","emailOTP","toNextJsHandler","session","user"],"mappings":"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","file":"chunk-Z23HAXHL.js","sourcesContent":["/**\n * 开发 / 测试环境 OTP 输出(禁止生产依赖)\n */\nexport function createDevOtpLogger(enabled: boolean) {\n if (!enabled || process.env.NODE_ENV === 'production') {\n return undefined;\n }\n return (channel: 'sms' | 'email', target: string, code: string) => {\n console.info(`[sa2kit/auth][dev-otp][${channel}] ${target} => ${code}`);\n };\n}\n\nexport const defaultPhoneValidator = (phoneNumber: string) => /^1\\d{10}$/.test(phoneNumber);\n\nexport const defaultTempEmailFromPhone = (phoneNumber: string) =>\n `${phoneNumber.replace(/\\D/g, '')}@phone.sa2kit.local`;\n","/**\n * Better Auth 服务端工厂(sa2kit 3.0 SSOT)\n */\nimport { betterAuth } from 'better-auth';\nimport { drizzleAdapter } from '@better-auth/drizzle-adapter';\nimport { emailOTP } from 'better-auth/plugins';\nimport { phoneNumber } from 'better-auth/plugins';\nimport { bearer } from 'better-auth/plugins';\nimport { authDrizzleSchema } from '../schema';\nimport type { Sa2kitAuthConfig, Sa2kitAuthInstance } from './types';\nimport {\n createDevOtpLogger,\n defaultPhoneValidator,\n defaultTempEmailFromPhone,\n} from './plugins/dev-otp';\n\nexport type { Sa2kitAuthInstance } from './types';\n\nexport function createSa2kitAuth(config: Sa2kitAuthConfig): Sa2kitAuthInstance {\n if (!config.secret || config.secret.length < 32) {\n throw new Error('createSa2kitAuth: secret 至少 32 字符');\n }\n\n const devLog = createDevOtpLogger(config.logOtpInDev ?? process.env.NODE_ENV !== 'production');\n const phoneValidator = config.phoneNumberValidator ?? defaultPhoneValidator;\n\n const auth = betterAuth({\n appName: 'sa2kit',\n baseURL: config.baseURL,\n basePath: config.basePath ?? '/api/auth',\n secret: config.secret,\n trustedOrigins: config.trustedOrigins,\n database: drizzleAdapter(config.db as never, {\n provider: 'pg',\n schema: authDrizzleSchema,\n }),\n emailAndPassword: {\n enabled: true,\n },\n user: {\n additionalFields: {\n role: {\n type: 'string',\n required: false,\n defaultValue: 'USER',\n input: false,\n },\n },\n },\n plugins: [\n bearer(),\n emailOTP({\n async sendVerificationOTP({ email, otp, type }) {\n devLog?.('email', `${email} (${type})`, otp);\n if (config.email?.sendVerificationOTP) {\n await config.email.sendVerificationOTP(email, otp, type);\n }\n },\n }),\n phoneNumber({\n allowedAttempts: 5,\n phoneNumberValidator: phoneValidator,\n async sendOTP({ phoneNumber: phone, code }) {\n devLog?.('sms', phone, code);\n if (config.sms?.sendOTP) {\n void config.sms.sendOTP(phone, code);\n }\n },\n signUpOnVerification: {\n getTempEmail: defaultTempEmailFromPhone,\n getTempName: (phone) => phone,\n },\n }),\n ],\n }) as unknown as Sa2kitAuthInstance;\n\n return auth;\n}\n","/**\n * Next.js App Router handler 挂载\n */\nimport { toNextJsHandler } from 'better-auth/next-js';\nimport type { Sa2kitAuthInstance } from '../create-auth';\n\nexport function mountNextAuthHandler(auth: Sa2kitAuthInstance) {\n return toNextJsHandler(auth);\n}\n","/**\n * Hono / 通用 fetch handler\n */\nimport type { Sa2kitAuthInstance } from '../create-auth';\n\nexport function mountAuthHandler(auth: Sa2kitAuthInstance) {\n return (request: Request) => auth.handler(request);\n}\n\nexport function createAuthRouteHandlers(auth: Sa2kitAuthInstance) {\n const handler = mountAuthHandler(auth);\n return {\n GET: handler,\n POST: handler,\n PUT: handler,\n PATCH: handler,\n DELETE: handler,\n };\n}\n","/**\n * 从 Request 解析 Better Auth session(替代自研 JWT validateApiAuth)\n */\nimport type { Sa2kitAuthInstance } from './types';\n\nexport type SessionUser = {\n id: string;\n email: string;\n name: string;\n role?: string;\n phoneNumber?: string | null;\n};\n\nexport async function getSessionUser(\n auth: Sa2kitAuthInstance,\n request: Request,\n): Promise<SessionUser | null> {\n const session = await auth.api.getSession({ headers: request.headers });\n if (!session?.user) return null;\n\n const user = session.user as SessionUser & { role?: string };\n return {\n id: user.id,\n email: user.email,\n name: user.name,\n role: user.role,\n phoneNumber: (user as { phoneNumber?: string | null }).phoneNumber ?? null,\n };\n}\n\nexport type SessionUserNumeric = Omit<SessionUser, 'id'> & { id: number };\n\n/** 兼容 numeric id 消费方(legacy calendar 等) */\nexport async function getSessionUserNumeric(\n auth: Sa2kitAuthInstance,\n request: Request,\n): Promise<SessionUserNumeric | null> {\n const user = await getSessionUser(auth, request);\n if (!user) return null;\n const numericId = Number.parseInt(user.id, 10);\n if (Number.isNaN(numericId)) return null;\n const { id: _id, ...rest } = user;\n return { ...rest, id: numericId };\n}\n\nexport function createSessionValidator(auth: Sa2kitAuthInstance) {\n return {\n getSessionUser: (request: Request) => getSessionUser(auth, request),\n getSessionUserNumeric: (request: Request) => getSessionUserNumeric(auth, request),\n };\n}\n"]}
@@ -1,40 +0,0 @@
1
- import { API_ROUTES, STORAGE_KEYS, Sa2kitAuthClient, Sa2kitAuthClientOptions, createSa2kitAuthClient } from './common/auth/client/index.mjs';
2
- import { B as BaseApiClient } from './base-api-client-DXLsq2yz.mjs';
3
- import { UseSessionReturn, useAuth, useAuthForm, useSession } from './common/auth/hooks/index.mjs';
4
- import { L as LoginFormState, R as RegisterFormState } from './types.legacy-J-j-_ig_.mjs';
5
- import { b as ApiResponse, c as AuthResponse, A as AuthResult, B as BaseUser, I as IAuthClient, L as LoginForm, R as RegisterForm, a as UseAuthReturn, U as User } from './types-DCRvasyH.mjs';
6
- import { U as UserRole } from './enums-Dume-V5Y.mjs';
7
-
8
- /**
9
- * @package sa2kit/common/auth
10
- *
11
- * Browser / client 安全入口(Better Auth 3.0)
12
- */
13
-
14
- declare const index_API_ROUTES: typeof API_ROUTES;
15
- declare const index_ApiResponse: typeof ApiResponse;
16
- declare const index_AuthResponse: typeof AuthResponse;
17
- declare const index_AuthResult: typeof AuthResult;
18
- declare const index_BaseApiClient: typeof BaseApiClient;
19
- declare const index_BaseUser: typeof BaseUser;
20
- declare const index_IAuthClient: typeof IAuthClient;
21
- declare const index_LoginForm: typeof LoginForm;
22
- declare const index_LoginFormState: typeof LoginFormState;
23
- declare const index_RegisterForm: typeof RegisterForm;
24
- declare const index_RegisterFormState: typeof RegisterFormState;
25
- declare const index_STORAGE_KEYS: typeof STORAGE_KEYS;
26
- declare const index_Sa2kitAuthClient: typeof Sa2kitAuthClient;
27
- declare const index_Sa2kitAuthClientOptions: typeof Sa2kitAuthClientOptions;
28
- declare const index_UseAuthReturn: typeof UseAuthReturn;
29
- declare const index_UseSessionReturn: typeof UseSessionReturn;
30
- declare const index_User: typeof User;
31
- declare const index_UserRole: typeof UserRole;
32
- declare const index_createSa2kitAuthClient: typeof createSa2kitAuthClient;
33
- declare const index_useAuth: typeof useAuth;
34
- declare const index_useAuthForm: typeof useAuthForm;
35
- declare const index_useSession: typeof useSession;
36
- declare namespace index {
37
- export { index_API_ROUTES as API_ROUTES, index_ApiResponse as ApiResponse, index_AuthResponse as AuthResponse, index_AuthResult as AuthResult, index_BaseApiClient as BaseApiClient, index_BaseUser as BaseUser, index_IAuthClient as IAuthClient, index_LoginForm as LoginForm, index_LoginFormState as LoginFormState, index_RegisterForm as RegisterForm, index_RegisterFormState as RegisterFormState, index_STORAGE_KEYS as STORAGE_KEYS, index_Sa2kitAuthClient as Sa2kitAuthClient, index_Sa2kitAuthClientOptions as Sa2kitAuthClientOptions, index_UseAuthReturn as UseAuthReturn, index_UseSessionReturn as UseSessionReturn, index_User as User, index_UserRole as UserRole, index_createSa2kitAuthClient as createSa2kitAuthClient, index_useAuth as useAuth, index_useAuthForm as useAuthForm, index_useSession as useSession };
38
- }
39
-
40
- export { index as i };
@@ -1,40 +0,0 @@
1
- import { API_ROUTES, STORAGE_KEYS, Sa2kitAuthClient, Sa2kitAuthClientOptions, createSa2kitAuthClient } from './common/auth/client/index.js';
2
- import { B as BaseApiClient } from './base-api-client-BpmcQt4Q.js';
3
- import { UseSessionReturn, useAuth, useAuthForm, useSession } from './common/auth/hooks/index.js';
4
- import { L as LoginFormState, R as RegisterFormState } from './types.legacy-J-j-_ig_.js';
5
- import { b as ApiResponse, c as AuthResponse, A as AuthResult, B as BaseUser, I as IAuthClient, L as LoginForm, R as RegisterForm, a as UseAuthReturn, U as User } from './types-C_W_CoUD.js';
6
- import { U as UserRole } from './enums-Dume-V5Y.js';
7
-
8
- /**
9
- * @package sa2kit/common/auth
10
- *
11
- * Browser / client 安全入口(Better Auth 3.0)
12
- */
13
-
14
- declare const index_API_ROUTES: typeof API_ROUTES;
15
- declare const index_ApiResponse: typeof ApiResponse;
16
- declare const index_AuthResponse: typeof AuthResponse;
17
- declare const index_AuthResult: typeof AuthResult;
18
- declare const index_BaseApiClient: typeof BaseApiClient;
19
- declare const index_BaseUser: typeof BaseUser;
20
- declare const index_IAuthClient: typeof IAuthClient;
21
- declare const index_LoginForm: typeof LoginForm;
22
- declare const index_LoginFormState: typeof LoginFormState;
23
- declare const index_RegisterForm: typeof RegisterForm;
24
- declare const index_RegisterFormState: typeof RegisterFormState;
25
- declare const index_STORAGE_KEYS: typeof STORAGE_KEYS;
26
- declare const index_Sa2kitAuthClient: typeof Sa2kitAuthClient;
27
- declare const index_Sa2kitAuthClientOptions: typeof Sa2kitAuthClientOptions;
28
- declare const index_UseAuthReturn: typeof UseAuthReturn;
29
- declare const index_UseSessionReturn: typeof UseSessionReturn;
30
- declare const index_User: typeof User;
31
- declare const index_UserRole: typeof UserRole;
32
- declare const index_createSa2kitAuthClient: typeof createSa2kitAuthClient;
33
- declare const index_useAuth: typeof useAuth;
34
- declare const index_useAuthForm: typeof useAuthForm;
35
- declare const index_useSession: typeof useSession;
36
- declare namespace index {
37
- export { index_API_ROUTES as API_ROUTES, index_ApiResponse as ApiResponse, index_AuthResponse as AuthResponse, index_AuthResult as AuthResult, index_BaseApiClient as BaseApiClient, index_BaseUser as BaseUser, index_IAuthClient as IAuthClient, index_LoginForm as LoginForm, index_LoginFormState as LoginFormState, index_RegisterForm as RegisterForm, index_RegisterFormState as RegisterFormState, index_STORAGE_KEYS as STORAGE_KEYS, index_Sa2kitAuthClient as Sa2kitAuthClient, index_Sa2kitAuthClientOptions as Sa2kitAuthClientOptions, index_UseAuthReturn as UseAuthReturn, index_UseSessionReturn as UseSessionReturn, index_User as User, index_UserRole as UserRole, index_createSa2kitAuthClient as createSa2kitAuthClient, index_useAuth as useAuth, index_useAuthForm as useAuthForm, index_useSession as useSession };
38
- }
39
-
40
- export { index as i };
@@ -1,81 +0,0 @@
1
- /**
2
- * sa2kit auth 服务端配置类型(Better Auth 3.0)
3
- */
4
- type Sa2kitSmsProvider = {
5
- sendOTP: (phoneNumber: string, code: string) => void | Promise<void>;
6
- };
7
- type Sa2kitEmailProvider = {
8
- sendVerificationOTP: (email: string, otp: string, type: string) => void | Promise<void>;
9
- };
10
- type Sa2kitAuthConfig = {
11
- db: unknown;
12
- baseURL: string;
13
- secret: string;
14
- trustedOrigins?: string[];
15
- basePath?: string;
16
- sms?: Sa2kitSmsProvider;
17
- email?: Sa2kitEmailProvider;
18
- phoneNumberValidator?: (phoneNumber: string) => boolean;
19
- logOtpInDev?: boolean;
20
- };
21
- /** Better Auth 实例(运行时完整 API,类型刻意保持宽松以便跨插件版本) */
22
- type Sa2kitAuthInstance = {
23
- handler: (request: Request) => Promise<Response>;
24
- api: {
25
- getSession: (ctx: {
26
- headers: Headers;
27
- }) => Promise<{
28
- user: Record<string, unknown>;
29
- } | null>;
30
- [key: string]: unknown;
31
- };
32
- [key: string]: unknown;
33
- };
34
- type Sa2kitAuth = Sa2kitAuthInstance;
35
-
36
- declare function createSa2kitAuth(config: Sa2kitAuthConfig): Sa2kitAuthInstance;
37
-
38
- declare function mountNextAuthHandler(auth: Sa2kitAuthInstance): {
39
- GET: (request: Request) => Promise<Response>;
40
- POST: (request: Request) => Promise<Response>;
41
- PATCH: (request: Request) => Promise<Response>;
42
- PUT: (request: Request) => Promise<Response>;
43
- DELETE: (request: Request) => Promise<Response>;
44
- };
45
-
46
- /**
47
- * Hono / 通用 fetch handler
48
- */
49
-
50
- declare function mountAuthHandler(auth: Sa2kitAuthInstance): (request: Request) => Promise<Response>;
51
- declare function createAuthRouteHandlers(auth: Sa2kitAuthInstance): {
52
- GET: (request: Request) => Promise<Response>;
53
- POST: (request: Request) => Promise<Response>;
54
- PUT: (request: Request) => Promise<Response>;
55
- PATCH: (request: Request) => Promise<Response>;
56
- DELETE: (request: Request) => Promise<Response>;
57
- };
58
-
59
- /**
60
- * 从 Request 解析 Better Auth session(替代自研 JWT validateApiAuth)
61
- */
62
-
63
- type SessionUser = {
64
- id: string;
65
- email: string;
66
- name: string;
67
- role?: string;
68
- phoneNumber?: string | null;
69
- };
70
- declare function getSessionUser(auth: Sa2kitAuthInstance, request: Request): Promise<SessionUser | null>;
71
- type SessionUserNumeric = Omit<SessionUser, 'id'> & {
72
- id: number;
73
- };
74
- /** 兼容 numeric id 消费方(legacy calendar 等) */
75
- declare function getSessionUserNumeric(auth: Sa2kitAuthInstance, request: Request): Promise<SessionUserNumeric | null>;
76
- declare function createSessionValidator(auth: Sa2kitAuthInstance): {
77
- getSessionUser: (request: Request) => Promise<SessionUser | null>;
78
- getSessionUserNumeric: (request: Request) => Promise<SessionUserNumeric | null>;
79
- };
80
-
81
- export { type Sa2kitAuthInstance as S, mountAuthHandler as a, createAuthRouteHandlers as b, createSa2kitAuth as c, createSessionValidator as d, getSessionUserNumeric as e, type Sa2kitAuthConfig as f, getSessionUser as g, type Sa2kitSmsProvider as h, type Sa2kitEmailProvider as i, type Sa2kitAuth as j, type SessionUser as k, mountNextAuthHandler as m };