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.
- package/dist/ai/llm/ui/miniapp/index.d.mts +2 -2
- package/dist/ai/llm/ui/miniapp/index.d.ts +2 -2
- package/dist/ai/llm/ui/rn/index.d.mts +2 -2
- package/dist/ai/llm/ui/rn/index.d.ts +2 -2
- package/dist/ai/llm/ui/web/index.d.mts +3 -3
- package/dist/ai/llm/ui/web/index.d.ts +3 -3
- package/dist/analytics/index.d.mts +1 -1
- package/dist/analytics/index.d.ts +1 -1
- package/dist/{chunk-QP5N3ER6.js → chunk-3CSCIRQY.js} +5 -6
- package/dist/chunk-3CSCIRQY.js.map +1 -0
- package/dist/{chunk-RJP2BRJD.mjs → chunk-4OOANEJV.mjs} +2 -2
- package/dist/{chunk-RJP2BRJD.mjs.map → chunk-4OOANEJV.mjs.map} +1 -1
- package/dist/chunk-5FUAQLGC.mjs +14 -0
- package/dist/chunk-5FUAQLGC.mjs.map +1 -0
- package/dist/{chunk-S732H246.js → chunk-6PMXAK7F.js} +2 -2
- package/dist/{chunk-S732H246.js.map → chunk-6PMXAK7F.js.map} +1 -1
- package/dist/chunk-6YLCRWKM.mjs +8 -0
- package/dist/chunk-6YLCRWKM.mjs.map +1 -0
- package/dist/{chunk-IBWDBBX5.mjs → chunk-7B5SI4OF.mjs} +3 -4
- package/dist/chunk-7B5SI4OF.mjs.map +1 -0
- package/dist/chunk-EQXPL7TN.mjs +78 -0
- package/dist/chunk-EQXPL7TN.mjs.map +1 -0
- package/dist/{chunk-GQZHGSRR.js → chunk-GSNGCENJ.js} +39 -2
- package/dist/chunk-GSNGCENJ.js.map +1 -0
- package/dist/chunk-HQLKOXG7.js +16 -0
- package/dist/chunk-HQLKOXG7.js.map +1 -0
- package/dist/{chunk-S3PUP7N4.js → chunk-PA4ELVGI.js} +2 -2
- package/dist/{chunk-S3PUP7N4.js.map → chunk-PA4ELVGI.js.map} +1 -1
- package/dist/{chunk-WZDTNDYR.js → chunk-QSKLQX6H.js} +11 -11
- package/dist/{chunk-WZDTNDYR.js.map → chunk-QSKLQX6H.js.map} +1 -1
- package/dist/{chunk-LHJKLUM7.mjs → chunk-TNJ6LYX7.mjs} +2 -2
- package/dist/{chunk-LHJKLUM7.mjs.map → chunk-TNJ6LYX7.mjs.map} +1 -1
- package/dist/{chunk-J77KR2EV.mjs → chunk-WJ7IMUEJ.mjs} +3 -3
- package/dist/{chunk-J77KR2EV.mjs.map → chunk-WJ7IMUEJ.mjs.map} +1 -1
- package/dist/chunk-YTGUIRRH.js +10 -0
- package/dist/chunk-YTGUIRRH.js.map +1 -0
- package/dist/common/auth/client/index.d.mts +1 -31
- package/dist/common/auth/client/index.d.ts +1 -31
- package/dist/common/auth/client/index.js +2 -15
- package/dist/common/auth/client/index.mjs +1 -2
- package/dist/common/auth/components/index.d.mts +14 -248
- package/dist/common/auth/components/index.d.ts +14 -248
- package/dist/common/auth/components/index.js +878 -49
- package/dist/common/auth/components/index.js.map +1 -1
- package/dist/common/auth/components/index.mjs +871 -5
- package/dist/common/auth/components/index.mjs.map +1 -1
- package/dist/common/auth/hooks/index.d.mts +2 -29
- package/dist/common/auth/hooks/index.d.ts +2 -29
- package/dist/common/auth/hooks/index.js +2 -11
- package/dist/common/auth/hooks/index.mjs +1 -2
- package/dist/common/auth/index.d.mts +5 -9
- package/dist/common/auth/index.d.ts +5 -9
- package/dist/common/auth/index.js +7 -28
- package/dist/common/auth/index.mjs +3 -4
- package/dist/common/auth/react/index.d.mts +3 -3
- package/dist/common/auth/react/index.d.ts +3 -3
- package/dist/common/auth/rn/index.d.mts +3 -19
- package/dist/common/auth/rn/index.d.ts +3 -19
- package/dist/common/auth/rn/index.js +0 -32
- package/dist/common/auth/rn/index.js.map +1 -1
- package/dist/common/auth/rn/index.mjs +1 -30
- package/dist/common/auth/rn/index.mjs.map +1 -1
- package/dist/common/auth/server/index.d.mts +81 -2
- package/dist/common/auth/server/index.d.ts +81 -2
- package/dist/common/auth/server/index.js +128 -37
- package/dist/common/auth/server/index.js.map +1 -1
- package/dist/common/auth/server/index.mjs +124 -1
- package/dist/common/auth/server/index.mjs.map +1 -1
- package/dist/common/auth/services/index.js +12 -9
- package/dist/common/auth/services/index.js.map +1 -1
- package/dist/common/auth/services/index.mjs +10 -1
- package/dist/common/auth/services/index.mjs.map +1 -1
- package/dist/common/file/server/index.js +32 -32
- package/dist/common/file/server/index.mjs +3 -3
- package/dist/common/index.d.mts +5 -8
- package/dist/common/index.d.ts +5 -8
- package/dist/common/index.js +12 -14
- package/dist/common/index.mjs +6 -8
- package/dist/common/request/index.js +4 -5
- package/dist/common/request/index.mjs +2 -3
- package/dist/i18n/index.d.mts +1 -1
- package/dist/i18n/index.d.ts +1 -1
- package/dist/imageCrop/index.d.mts +3 -3
- package/dist/imageCrop/index.d.ts +3 -3
- package/dist/index-Bd7cKF1j.d.mts +50 -0
- package/dist/{index-CLB80GCP.d.ts → index-D0cqaQEH.d.mts} +5 -5
- package/dist/{index-CLB80GCP.d.mts → index-D0cqaQEH.d.ts} +5 -5
- package/dist/index-DRQxtCDw.d.ts +50 -0
- package/dist/{index-BxZauNN_.d.mts → index-DoUo8IrU.d.mts} +8 -8
- package/dist/{index-BxZauNN_.d.ts → index-DoUo8IrU.d.ts} +8 -8
- package/dist/index.d.mts +152 -131
- package/dist/index.d.ts +152 -131
- package/dist/index.js +105 -554
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +106 -555
- package/dist/index.mjs.map +1 -1
- package/dist/ossFile/server/index.js +32 -32
- package/dist/ossFile/server/index.mjs +3 -3
- package/dist/request/index.js +3 -4
- package/dist/request/index.mjs +1 -2
- package/dist/universalExport/index.d.mts +3 -3
- package/dist/universalExport/index.d.ts +3 -3
- package/dist/universalFile/index.d.mts +5 -5
- package/dist/universalFile/index.d.ts +5 -5
- package/dist/universalFile/server/index.js +62 -62
- package/dist/universalFile/server/index.mjs +2 -2
- package/package.json +1 -36
- package/dist/auth/client/index.d.mts +0 -13
- package/dist/auth/client/index.d.ts +0 -13
- package/dist/auth/client/index.js +0 -26
- package/dist/auth/client/index.js.map +0 -1
- package/dist/auth/client/index.mjs +0 -5
- package/dist/auth/client/index.mjs.map +0 -1
- package/dist/auth/components/index.d.mts +0 -10
- package/dist/auth/components/index.d.ts +0 -10
- package/dist/auth/components/index.js +0 -70
- package/dist/auth/components/index.js.map +0 -1
- package/dist/auth/components/index.mjs +0 -9
- package/dist/auth/components/index.mjs.map +0 -1
- package/dist/auth/hooks/index.d.mts +0 -13
- package/dist/auth/hooks/index.d.ts +0 -13
- package/dist/auth/hooks/index.js +0 -28
- package/dist/auth/hooks/index.js.map +0 -1
- package/dist/auth/hooks/index.mjs +0 -7
- package/dist/auth/hooks/index.mjs.map +0 -1
- package/dist/auth/index.d.mts +0 -21
- package/dist/auth/index.d.ts +0 -21
- package/dist/auth/index.js +0 -112
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/index.mjs +0 -11
- package/dist/auth/index.mjs.map +0 -1
- package/dist/auth/rn/index.d.mts +0 -3133
- package/dist/auth/rn/index.d.ts +0 -3133
- package/dist/auth/rn/index.js +0 -684
- package/dist/auth/rn/index.js.map +0 -1
- package/dist/auth/rn/index.mjs +0 -663
- package/dist/auth/rn/index.mjs.map +0 -1
- package/dist/auth/schema/index.d.mts +0 -4
- package/dist/auth/schema/index.d.ts +0 -4
- package/dist/auth/schema/index.js +0 -49
- package/dist/auth/schema/index.js.map +0 -1
- package/dist/auth/schema/index.mjs +0 -4
- package/dist/auth/schema/index.mjs.map +0 -1
- package/dist/auth/services/index.d.mts +0 -1
- package/dist/auth/services/index.d.ts +0 -1
- package/dist/auth/services/index.js +0 -17
- package/dist/auth/services/index.js.map +0 -1
- package/dist/auth/services/index.mjs +0 -4
- package/dist/auth/services/index.mjs.map +0 -1
- package/dist/base-api-client-BpmcQt4Q.d.ts +0 -103
- package/dist/base-api-client-CFIhZK4C.d.mts +0 -277
- package/dist/base-api-client-CFIhZK4C.d.ts +0 -277
- package/dist/base-api-client-DXLsq2yz.d.mts +0 -103
- package/dist/chunk-7E3J7VAD.mjs +0 -3
- package/dist/chunk-7E3J7VAD.mjs.map +0 -1
- package/dist/chunk-B3CZ3HXJ.mjs +0 -126
- package/dist/chunk-B3CZ3HXJ.mjs.map +0 -1
- package/dist/chunk-FOQEQWX5.js +0 -4
- package/dist/chunk-FOQEQWX5.js.map +0 -1
- package/dist/chunk-G4NFB2QA.mjs +0 -212
- package/dist/chunk-G4NFB2QA.mjs.map +0 -1
- package/dist/chunk-G5HJGXGC.mjs +0 -39
- package/dist/chunk-G5HJGXGC.mjs.map +0 -1
- package/dist/chunk-GQZHGSRR.js.map +0 -1
- package/dist/chunk-GS7XLKET.js +0 -41
- package/dist/chunk-GS7XLKET.js.map +0 -1
- package/dist/chunk-IBWDBBX5.mjs.map +0 -1
- package/dist/chunk-MWSAH7ZG.mjs +0 -42
- package/dist/chunk-MWSAH7ZG.mjs.map +0 -1
- package/dist/chunk-MZOGYD4N.mjs +0 -186
- package/dist/chunk-MZOGYD4N.mjs.map +0 -1
- package/dist/chunk-QDUBO567.js +0 -1148
- package/dist/chunk-QDUBO567.js.map +0 -1
- package/dist/chunk-QP5N3ER6.js.map +0 -1
- package/dist/chunk-RWCD2CAD.mjs +0 -1132
- package/dist/chunk-RWCD2CAD.mjs.map +0 -1
- package/dist/chunk-S37OK2QG.js +0 -216
- package/dist/chunk-S37OK2QG.js.map +0 -1
- package/dist/chunk-SFDJNKWC.js +0 -22
- package/dist/chunk-SFDJNKWC.js.map +0 -1
- package/dist/chunk-TXMX6PZR.js +0 -190
- package/dist/chunk-TXMX6PZR.js.map +0 -1
- package/dist/chunk-VHN7PF5I.js +0 -20
- package/dist/chunk-VHN7PF5I.js.map +0 -1
- package/dist/chunk-XBZIS3MV.mjs +0 -13
- package/dist/chunk-XBZIS3MV.mjs.map +0 -1
- package/dist/chunk-XFOZ56FB.mjs +0 -20
- package/dist/chunk-XFOZ56FB.mjs.map +0 -1
- package/dist/chunk-Z23HAXHL.js +0 -136
- package/dist/chunk-Z23HAXHL.js.map +0 -1
- package/dist/index-BcjDRcKp.d.mts +0 -40
- package/dist/index-BlpXrrTy.d.ts +0 -40
- package/dist/session-BCXvGCnm.d.mts +0 -81
- package/dist/session-BCXvGCnm.d.ts +0 -81
- package/dist/types-C_W_CoUD.d.ts +0 -99
- package/dist/types-DCRvasyH.d.mts +0 -99
- package/dist/types.legacy-J-j-_ig_.d.mts +0 -25
- package/dist/types.legacy-J-j-_ig_.d.ts +0 -25
|
@@ -1,277 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 请求配置接口
|
|
3
|
-
*/
|
|
4
|
-
interface RequestConfig {
|
|
5
|
-
/** 请求 URL */
|
|
6
|
-
url: string;
|
|
7
|
-
/** HTTP 方法 */
|
|
8
|
-
method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
|
|
9
|
-
/** 请求头 */
|
|
10
|
-
headers?: Record<string, string>;
|
|
11
|
-
/** 请求体 */
|
|
12
|
-
body?: any;
|
|
13
|
-
/** 查询参数 */
|
|
14
|
-
params?: Record<string, any>;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* 请求适配器接口
|
|
18
|
-
* 用于抽象不同平台的网络请求实现
|
|
19
|
-
* - Mobile/Desktop: fetch API
|
|
20
|
-
* - Miniapp: Taro.request
|
|
21
|
-
*/
|
|
22
|
-
interface RequestAdapter {
|
|
23
|
-
/**
|
|
24
|
-
* 发送 HTTP 请求
|
|
25
|
-
* @param config 请求配置
|
|
26
|
-
* @returns 响应数据
|
|
27
|
-
*/
|
|
28
|
-
request<T = any>(config: RequestConfig): Promise<T>;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* 存储适配器类型定义
|
|
33
|
-
*/
|
|
34
|
-
/**
|
|
35
|
-
* 存储适配器接口
|
|
36
|
-
* 用于抽象不同平台的本地存储实现
|
|
37
|
-
*/
|
|
38
|
-
interface StorageAdapter {
|
|
39
|
-
/**
|
|
40
|
-
* 获取存储的值
|
|
41
|
-
* @param key 存储键
|
|
42
|
-
* @returns 存储的值,不存在则返回 null
|
|
43
|
-
*/
|
|
44
|
-
getItem(key: string): Promise<string | null>;
|
|
45
|
-
/**
|
|
46
|
-
* 设置存储的值
|
|
47
|
-
* @param key 存储键
|
|
48
|
-
* @param value 要存储的值
|
|
49
|
-
*/
|
|
50
|
-
setItem(key: string, value: string): Promise<void>;
|
|
51
|
-
/**
|
|
52
|
-
* 删除存储的值
|
|
53
|
-
* @param key 存储键
|
|
54
|
-
*/
|
|
55
|
-
removeItem(key: string): Promise<void>;
|
|
56
|
-
/**
|
|
57
|
-
* 清空所有存储(可选)
|
|
58
|
-
*/
|
|
59
|
-
clear?(): Promise<void>;
|
|
60
|
-
/**
|
|
61
|
-
* 监听存储变化(可选,部分平台支持)
|
|
62
|
-
*/
|
|
63
|
-
addChangeListener?(callback: (key: string, value: string | null) => void): () => void;
|
|
64
|
-
/**
|
|
65
|
-
* 移除存储变化监听器(可选)
|
|
66
|
-
*/
|
|
67
|
-
removeChangeListener?(callback: (key: string, value: string | null) => void): void;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* 存储事件
|
|
71
|
-
*/
|
|
72
|
-
interface StorageChangeEvent {
|
|
73
|
-
key: string;
|
|
74
|
-
value: any;
|
|
75
|
-
oldValue?: any;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* 类型定义
|
|
80
|
-
*/
|
|
81
|
-
type UserRole = 'USER' | 'ADMIN' | 'SUPER_ADMIN';
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Auth 模块类型定义
|
|
85
|
-
* Auth Module Types
|
|
86
|
-
*/
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* 用户基础信息(核心字段)
|
|
90
|
-
* Base User Information
|
|
91
|
-
*/
|
|
92
|
-
interface BaseUser {
|
|
93
|
-
id: string;
|
|
94
|
-
email: string;
|
|
95
|
-
username: string;
|
|
96
|
-
role: UserRole;
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* 扩展用户信息(可选字段)
|
|
100
|
-
* Extended User Information
|
|
101
|
-
*/
|
|
102
|
-
interface User extends BaseUser {
|
|
103
|
-
nickname?: string;
|
|
104
|
-
avatar?: string;
|
|
105
|
-
createdAt?: string;
|
|
106
|
-
updatedAt?: string;
|
|
107
|
-
[key: string]: any;
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* 登录表单数据
|
|
111
|
-
* Login Form Data
|
|
112
|
-
*/
|
|
113
|
-
interface LoginForm {
|
|
114
|
-
email: string;
|
|
115
|
-
password: string;
|
|
116
|
-
rememberMe?: boolean;
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* 注册表单数据
|
|
120
|
-
* Register Form Data
|
|
121
|
-
*/
|
|
122
|
-
interface RegisterForm {
|
|
123
|
-
email: string;
|
|
124
|
-
username: string;
|
|
125
|
-
password: string;
|
|
126
|
-
confirmPassword?: string;
|
|
127
|
-
nickname?: string;
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* API 响应类型
|
|
131
|
-
*/
|
|
132
|
-
interface ApiResponse<T = any> {
|
|
133
|
-
success: boolean;
|
|
134
|
-
data?: T;
|
|
135
|
-
error?: string;
|
|
136
|
-
message?: string;
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* 认证响应类型
|
|
140
|
-
*/
|
|
141
|
-
interface AuthResponse {
|
|
142
|
-
user: User;
|
|
143
|
-
token: string;
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* API 客户端基础接口
|
|
147
|
-
*/
|
|
148
|
-
interface IAuthClient {
|
|
149
|
-
isAuthenticated(): Promise<boolean>;
|
|
150
|
-
getCurrentUser(): Promise<ApiResponse<User>>;
|
|
151
|
-
login(email: string, password: string): Promise<ApiResponse<AuthResponse>>;
|
|
152
|
-
register(email: string, password: string, username: string): Promise<ApiResponse<AuthResponse>>;
|
|
153
|
-
logout(): Promise<void>;
|
|
154
|
-
clearUserData(): Promise<void>;
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* 认证操作结果接口
|
|
158
|
-
*/
|
|
159
|
-
interface AuthResult {
|
|
160
|
-
success: boolean;
|
|
161
|
-
error?: string;
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* useAuth Hook 返回值接口
|
|
165
|
-
*/
|
|
166
|
-
interface UseAuthReturn {
|
|
167
|
-
user: User | null;
|
|
168
|
-
isLoggedIn: boolean;
|
|
169
|
-
loading: boolean;
|
|
170
|
-
checkingAuth: boolean;
|
|
171
|
-
error: string | null;
|
|
172
|
-
login: (email: string, password: string) => Promise<AuthResult>;
|
|
173
|
-
register: (email: string, password: string, username: string) => Promise<AuthResult>;
|
|
174
|
-
logout: () => Promise<void>;
|
|
175
|
-
refresh: () => Promise<void>;
|
|
176
|
-
clearError: () => void;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
/**
|
|
180
|
-
* Auth Client - Base API Client
|
|
181
|
-
* 基础 API 客户端
|
|
182
|
-
*/
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* 基础 API 客户端
|
|
186
|
-
* 提供统一的 API 调用逻辑,通过适配器模式支持多平台
|
|
187
|
-
*
|
|
188
|
-
* @example
|
|
189
|
-
* ```typescript
|
|
190
|
-
* import { BaseApiClient } from '@qhr123/sa2kit/common/auth/client';
|
|
191
|
-
* import { WebStorageAdapter } from '@qhr123/sa2kit/storage';
|
|
192
|
-
* import { WebRequestAdapter } from '@qhr123/sa2kit/request';
|
|
193
|
-
*
|
|
194
|
-
* const apiClient = new BaseApiClient(
|
|
195
|
-
* new WebStorageAdapter(),
|
|
196
|
-
* new WebRequestAdapter(),
|
|
197
|
-
* '/api'
|
|
198
|
-
* );
|
|
199
|
-
*
|
|
200
|
-
* await apiClient.init();
|
|
201
|
-
* const result = await apiClient.login('user@example.com', 'password');
|
|
202
|
-
* ```
|
|
203
|
-
*/
|
|
204
|
-
declare class BaseApiClient implements IAuthClient {
|
|
205
|
-
private storage;
|
|
206
|
-
private request;
|
|
207
|
-
private baseUrl;
|
|
208
|
-
private token;
|
|
209
|
-
private user;
|
|
210
|
-
constructor(storage: StorageAdapter, request: RequestAdapter, baseUrl: string);
|
|
211
|
-
/**
|
|
212
|
-
* 初始化 - 从存储中加载 token 和用户信息
|
|
213
|
-
*/
|
|
214
|
-
init(): Promise<void>;
|
|
215
|
-
/**
|
|
216
|
-
* 设置认证 token
|
|
217
|
-
*/
|
|
218
|
-
setToken(token: string | null): Promise<void>;
|
|
219
|
-
/**
|
|
220
|
-
* 设置用户信息
|
|
221
|
-
*/
|
|
222
|
-
setUser(user: User | null): Promise<void>;
|
|
223
|
-
/**
|
|
224
|
-
* 获取当前 token
|
|
225
|
-
*/
|
|
226
|
-
getToken(): string | null;
|
|
227
|
-
/**
|
|
228
|
-
* 获取当前用户
|
|
229
|
-
*/
|
|
230
|
-
getUser(): User | null;
|
|
231
|
-
/**
|
|
232
|
-
* 检查是否已登录
|
|
233
|
-
*/
|
|
234
|
-
isAuthenticated(): Promise<boolean>;
|
|
235
|
-
/**
|
|
236
|
-
* 清除用户数据
|
|
237
|
-
*/
|
|
238
|
-
clearUserData(): Promise<void>;
|
|
239
|
-
/**
|
|
240
|
-
* 发送请求的通用方法
|
|
241
|
-
*/
|
|
242
|
-
private sendRequest;
|
|
243
|
-
/**
|
|
244
|
-
* 用户注册
|
|
245
|
-
*/
|
|
246
|
-
register(email: string, password: string, username: string): Promise<ApiResponse<AuthResponse>>;
|
|
247
|
-
/**
|
|
248
|
-
* 用户登录
|
|
249
|
-
*/
|
|
250
|
-
login(email: string, password: string): Promise<ApiResponse<AuthResponse>>;
|
|
251
|
-
/**
|
|
252
|
-
* 用户退出登录
|
|
253
|
-
*/
|
|
254
|
-
logout(): Promise<void>;
|
|
255
|
-
/**
|
|
256
|
-
* 获取当前用户信息
|
|
257
|
-
*/
|
|
258
|
-
getCurrentUser(): Promise<ApiResponse<User>>;
|
|
259
|
-
/**
|
|
260
|
-
* 发送 GET 请求
|
|
261
|
-
*/
|
|
262
|
-
get<T = any>(url: string, params?: Record<string, any>): Promise<ApiResponse<T>>;
|
|
263
|
-
/**
|
|
264
|
-
* 发送 POST 请求
|
|
265
|
-
*/
|
|
266
|
-
post<T = any>(url: string, body?: any): Promise<ApiResponse<T>>;
|
|
267
|
-
/**
|
|
268
|
-
* 发送 PUT 请求
|
|
269
|
-
*/
|
|
270
|
-
put<T = any>(url: string, body?: any): Promise<ApiResponse<T>>;
|
|
271
|
-
/**
|
|
272
|
-
* 发送 DELETE 请求
|
|
273
|
-
*/
|
|
274
|
-
delete<T = any>(url: string): Promise<ApiResponse<T>>;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
export { type ApiResponse as A, BaseApiClient as B, type IAuthClient as I, type LoginForm as L, type RequestAdapter as R, type StorageAdapter as S, type UseAuthReturn as U, type RequestConfig as a, type StorageChangeEvent as b, type AuthResponse as c, type AuthResult as d, type BaseUser as e, type RegisterForm as f, type User as g, type UserRole as h };
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { S as StorageAdapter } from './types-BaZccpvk.mjs';
|
|
2
|
-
import { R as RequestAdapter } from './types-CbTsi9CZ.mjs';
|
|
3
|
-
import { I as IAuthClient, U as User, b as ApiResponse, c as AuthResponse } from './types-DCRvasyH.mjs';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Auth Client - Base API Client
|
|
7
|
-
* 基础 API 客户端
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* 基础 API 客户端
|
|
12
|
-
* 提供统一的 API 调用逻辑,通过适配器模式支持多平台
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* ```typescript
|
|
16
|
-
* import { BaseApiClient } from '@qhr123/sa2kit/common/auth/client';
|
|
17
|
-
* import { WebStorageAdapter } from '@qhr123/sa2kit/storage';
|
|
18
|
-
* import { WebRequestAdapter } from '@qhr123/sa2kit/request';
|
|
19
|
-
*
|
|
20
|
-
* const apiClient = new BaseApiClient(
|
|
21
|
-
* new WebStorageAdapter(),
|
|
22
|
-
* new WebRequestAdapter(),
|
|
23
|
-
* '/api'
|
|
24
|
-
* );
|
|
25
|
-
*
|
|
26
|
-
* await apiClient.init();
|
|
27
|
-
* const result = await apiClient.login('user@example.com', 'password');
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
|
-
declare class BaseApiClient implements IAuthClient {
|
|
31
|
-
private storage;
|
|
32
|
-
private request;
|
|
33
|
-
private baseUrl;
|
|
34
|
-
private token;
|
|
35
|
-
private user;
|
|
36
|
-
constructor(storage: StorageAdapter, request: RequestAdapter, baseUrl: string);
|
|
37
|
-
/**
|
|
38
|
-
* 初始化 - 从存储中加载 token 和用户信息
|
|
39
|
-
*/
|
|
40
|
-
init(): Promise<void>;
|
|
41
|
-
/**
|
|
42
|
-
* 设置认证 token
|
|
43
|
-
*/
|
|
44
|
-
setToken(token: string | null): Promise<void>;
|
|
45
|
-
/**
|
|
46
|
-
* 设置用户信息
|
|
47
|
-
*/
|
|
48
|
-
setUser(user: User | null): Promise<void>;
|
|
49
|
-
/**
|
|
50
|
-
* 获取当前 token
|
|
51
|
-
*/
|
|
52
|
-
getToken(): string | null;
|
|
53
|
-
/**
|
|
54
|
-
* 获取当前用户
|
|
55
|
-
*/
|
|
56
|
-
getUser(): User | null;
|
|
57
|
-
/**
|
|
58
|
-
* 检查是否已登录
|
|
59
|
-
*/
|
|
60
|
-
isAuthenticated(): Promise<boolean>;
|
|
61
|
-
/**
|
|
62
|
-
* 清除用户数据
|
|
63
|
-
*/
|
|
64
|
-
clearUserData(): Promise<void>;
|
|
65
|
-
/**
|
|
66
|
-
* 发送请求的通用方法
|
|
67
|
-
*/
|
|
68
|
-
private sendRequest;
|
|
69
|
-
/**
|
|
70
|
-
* 用户注册
|
|
71
|
-
*/
|
|
72
|
-
register(email: string, password: string, username: string): Promise<ApiResponse<AuthResponse>>;
|
|
73
|
-
/**
|
|
74
|
-
* 用户登录
|
|
75
|
-
*/
|
|
76
|
-
login(email: string, password: string): Promise<ApiResponse<AuthResponse>>;
|
|
77
|
-
/**
|
|
78
|
-
* 用户退出登录
|
|
79
|
-
*/
|
|
80
|
-
logout(): Promise<void>;
|
|
81
|
-
/**
|
|
82
|
-
* 获取当前用户信息
|
|
83
|
-
*/
|
|
84
|
-
getCurrentUser(): Promise<ApiResponse<User>>;
|
|
85
|
-
/**
|
|
86
|
-
* 发送 GET 请求
|
|
87
|
-
*/
|
|
88
|
-
get<T = any>(url: string, params?: Record<string, any>): Promise<ApiResponse<T>>;
|
|
89
|
-
/**
|
|
90
|
-
* 发送 POST 请求
|
|
91
|
-
*/
|
|
92
|
-
post<T = any>(url: string, body?: any): Promise<ApiResponse<T>>;
|
|
93
|
-
/**
|
|
94
|
-
* 发送 PUT 请求
|
|
95
|
-
*/
|
|
96
|
-
put<T = any>(url: string, body?: any): Promise<ApiResponse<T>>;
|
|
97
|
-
/**
|
|
98
|
-
* 发送 DELETE 请求
|
|
99
|
-
*/
|
|
100
|
-
delete<T = any>(url: string): Promise<ApiResponse<T>>;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
export { BaseApiClient as B };
|
package/dist/chunk-7E3J7VAD.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-7E3J7VAD.mjs"}
|
package/dist/chunk-B3CZ3HXJ.mjs
DELETED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
import { authDrizzleSchema } from './chunk-EBHPTFG6.mjs';
|
|
2
|
-
import { betterAuth } from 'better-auth';
|
|
3
|
-
import { drizzleAdapter } from '@better-auth/drizzle-adapter';
|
|
4
|
-
import { bearer, emailOTP, phoneNumber } from 'better-auth/plugins';
|
|
5
|
-
import { toNextJsHandler } from 'better-auth/next-js';
|
|
6
|
-
|
|
7
|
-
// src/common/auth/server/plugins/dev-otp.ts
|
|
8
|
-
function createDevOtpLogger(enabled) {
|
|
9
|
-
if (!enabled || process.env.NODE_ENV === "production") {
|
|
10
|
-
return void 0;
|
|
11
|
-
}
|
|
12
|
-
return (channel, target, code) => {
|
|
13
|
-
console.info(`[sa2kit/auth][dev-otp][${channel}] ${target} => ${code}`);
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
var defaultPhoneValidator = (phoneNumber2) => /^1\d{10}$/.test(phoneNumber2);
|
|
17
|
-
var defaultTempEmailFromPhone = (phoneNumber2) => `${phoneNumber2.replace(/\D/g, "")}@phone.sa2kit.local`;
|
|
18
|
-
|
|
19
|
-
// src/common/auth/server/create-auth.ts
|
|
20
|
-
function createSa2kitAuth(config) {
|
|
21
|
-
if (!config.secret || config.secret.length < 32) {
|
|
22
|
-
throw new Error("createSa2kitAuth: secret \u81F3\u5C11 32 \u5B57\u7B26");
|
|
23
|
-
}
|
|
24
|
-
const devLog = createDevOtpLogger(config.logOtpInDev ?? process.env.NODE_ENV !== "production");
|
|
25
|
-
const phoneValidator = config.phoneNumberValidator ?? defaultPhoneValidator;
|
|
26
|
-
const auth = betterAuth({
|
|
27
|
-
appName: "sa2kit",
|
|
28
|
-
baseURL: config.baseURL,
|
|
29
|
-
basePath: config.basePath ?? "/api/auth",
|
|
30
|
-
secret: config.secret,
|
|
31
|
-
trustedOrigins: config.trustedOrigins,
|
|
32
|
-
database: drizzleAdapter(config.db, {
|
|
33
|
-
provider: "pg",
|
|
34
|
-
schema: authDrizzleSchema
|
|
35
|
-
}),
|
|
36
|
-
emailAndPassword: {
|
|
37
|
-
enabled: true
|
|
38
|
-
},
|
|
39
|
-
user: {
|
|
40
|
-
additionalFields: {
|
|
41
|
-
role: {
|
|
42
|
-
type: "string",
|
|
43
|
-
required: false,
|
|
44
|
-
defaultValue: "USER",
|
|
45
|
-
input: false
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
plugins: [
|
|
50
|
-
bearer(),
|
|
51
|
-
emailOTP({
|
|
52
|
-
async sendVerificationOTP({ email, otp, type }) {
|
|
53
|
-
devLog?.("email", `${email} (${type})`, otp);
|
|
54
|
-
if (config.email?.sendVerificationOTP) {
|
|
55
|
-
await config.email.sendVerificationOTP(email, otp, type);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}),
|
|
59
|
-
phoneNumber({
|
|
60
|
-
allowedAttempts: 5,
|
|
61
|
-
phoneNumberValidator: phoneValidator,
|
|
62
|
-
async sendOTP({ phoneNumber: phone, code }) {
|
|
63
|
-
devLog?.("sms", phone, code);
|
|
64
|
-
if (config.sms?.sendOTP) {
|
|
65
|
-
void config.sms.sendOTP(phone, code);
|
|
66
|
-
}
|
|
67
|
-
},
|
|
68
|
-
signUpOnVerification: {
|
|
69
|
-
getTempEmail: defaultTempEmailFromPhone,
|
|
70
|
-
getTempName: (phone) => phone
|
|
71
|
-
}
|
|
72
|
-
})
|
|
73
|
-
]
|
|
74
|
-
});
|
|
75
|
-
return auth;
|
|
76
|
-
}
|
|
77
|
-
function mountNextAuthHandler(auth) {
|
|
78
|
-
return toNextJsHandler(auth);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// src/common/auth/server/handler/hono.ts
|
|
82
|
-
function mountAuthHandler(auth) {
|
|
83
|
-
return (request) => auth.handler(request);
|
|
84
|
-
}
|
|
85
|
-
function createAuthRouteHandlers(auth) {
|
|
86
|
-
const handler = mountAuthHandler(auth);
|
|
87
|
-
return {
|
|
88
|
-
GET: handler,
|
|
89
|
-
POST: handler,
|
|
90
|
-
PUT: handler,
|
|
91
|
-
PATCH: handler,
|
|
92
|
-
DELETE: handler
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// src/common/auth/server/session.ts
|
|
97
|
-
async function getSessionUser(auth, request) {
|
|
98
|
-
const session2 = await auth.api.getSession({ headers: request.headers });
|
|
99
|
-
if (!session2?.user) return null;
|
|
100
|
-
const user2 = session2.user;
|
|
101
|
-
return {
|
|
102
|
-
id: user2.id,
|
|
103
|
-
email: user2.email,
|
|
104
|
-
name: user2.name,
|
|
105
|
-
role: user2.role,
|
|
106
|
-
phoneNumber: user2.phoneNumber ?? null
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
async function getSessionUserNumeric(auth, request) {
|
|
110
|
-
const user2 = await getSessionUser(auth, request);
|
|
111
|
-
if (!user2) return null;
|
|
112
|
-
const numericId = Number.parseInt(user2.id, 10);
|
|
113
|
-
if (Number.isNaN(numericId)) return null;
|
|
114
|
-
const { id: _id, ...rest } = user2;
|
|
115
|
-
return { ...rest, id: numericId };
|
|
116
|
-
}
|
|
117
|
-
function createSessionValidator(auth) {
|
|
118
|
-
return {
|
|
119
|
-
getSessionUser: (request) => getSessionUser(auth, request),
|
|
120
|
-
getSessionUserNumeric: (request) => getSessionUserNumeric(auth, request)
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
export { createAuthRouteHandlers, createSa2kitAuth, createSessionValidator, defaultPhoneValidator, defaultTempEmailFromPhone, getSessionUser, getSessionUserNumeric, mountAuthHandler, mountNextAuthHandler };
|
|
125
|
-
//# sourceMappingURL=chunk-B3CZ3HXJ.mjs.map
|
|
126
|
-
//# sourceMappingURL=chunk-B3CZ3HXJ.mjs.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","session","user"],"mappings":"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","file":"chunk-B3CZ3HXJ.mjs","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"]}
|
package/dist/chunk-FOQEQWX5.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-FOQEQWX5.js"}
|