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
package/dist/chunk-G4NFB2QA.mjs
DELETED
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
// src/common/auth/client/types.ts
|
|
2
|
-
var STORAGE_KEYS = {
|
|
3
|
-
AUTH_TOKEN: "auth_token",
|
|
4
|
-
USER_DATA: "user_data"
|
|
5
|
-
};
|
|
6
|
-
var API_ROUTES = {
|
|
7
|
-
AUTH: {
|
|
8
|
-
LOGIN: "/auth/login",
|
|
9
|
-
REGISTER: "/auth/register",
|
|
10
|
-
LOGOUT: "/auth/logout",
|
|
11
|
-
ME: "/auth/me"
|
|
12
|
-
}
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
// src/common/auth/client/base-api-client.ts
|
|
16
|
-
var BaseApiClient = class {
|
|
17
|
-
constructor(storage, request, baseUrl) {
|
|
18
|
-
this.storage = storage;
|
|
19
|
-
this.request = request;
|
|
20
|
-
this.baseUrl = baseUrl;
|
|
21
|
-
this.token = null;
|
|
22
|
-
this.user = null;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* 初始化 - 从存储中加载 token 和用户信息
|
|
26
|
-
*/
|
|
27
|
-
async init() {
|
|
28
|
-
try {
|
|
29
|
-
this.token = await this.storage.getItem(STORAGE_KEYS.AUTH_TOKEN);
|
|
30
|
-
const userData = await this.storage.getItem(STORAGE_KEYS.USER_DATA);
|
|
31
|
-
if (userData) {
|
|
32
|
-
this.user = JSON.parse(userData);
|
|
33
|
-
}
|
|
34
|
-
} catch (error) {
|
|
35
|
-
console.error("Failed to load auth data:", error);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* 设置认证 token
|
|
40
|
-
*/
|
|
41
|
-
async setToken(token) {
|
|
42
|
-
this.token = token;
|
|
43
|
-
if (token) {
|
|
44
|
-
await this.storage.setItem(STORAGE_KEYS.AUTH_TOKEN, token);
|
|
45
|
-
} else {
|
|
46
|
-
await this.storage.removeItem(STORAGE_KEYS.AUTH_TOKEN);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* 设置用户信息
|
|
51
|
-
*/
|
|
52
|
-
async setUser(user) {
|
|
53
|
-
this.user = user;
|
|
54
|
-
if (user) {
|
|
55
|
-
await this.storage.setItem(STORAGE_KEYS.USER_DATA, JSON.stringify(user));
|
|
56
|
-
} else {
|
|
57
|
-
await this.storage.removeItem(STORAGE_KEYS.USER_DATA);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* 获取当前 token
|
|
62
|
-
*/
|
|
63
|
-
getToken() {
|
|
64
|
-
return this.token;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* 获取当前用户
|
|
68
|
-
*/
|
|
69
|
-
getUser() {
|
|
70
|
-
return this.user;
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* 检查是否已登录
|
|
74
|
-
*/
|
|
75
|
-
async isAuthenticated() {
|
|
76
|
-
return !!this.token;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* 清除用户数据
|
|
80
|
-
*/
|
|
81
|
-
async clearUserData() {
|
|
82
|
-
await this.storage.removeItem(STORAGE_KEYS.AUTH_TOKEN);
|
|
83
|
-
await this.storage.removeItem(STORAGE_KEYS.USER_DATA);
|
|
84
|
-
this.token = null;
|
|
85
|
-
this.user = null;
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* 发送请求的通用方法
|
|
89
|
-
*/
|
|
90
|
-
async sendRequest(config) {
|
|
91
|
-
try {
|
|
92
|
-
const headers = {
|
|
93
|
-
"Content-Type": "application/json",
|
|
94
|
-
...config.headers || {}
|
|
95
|
-
};
|
|
96
|
-
if (this.token) {
|
|
97
|
-
headers["Authorization"] = "Bearer " + this.token;
|
|
98
|
-
}
|
|
99
|
-
const response = await this.request.request({
|
|
100
|
-
...config,
|
|
101
|
-
url: this.baseUrl + config.url,
|
|
102
|
-
headers
|
|
103
|
-
});
|
|
104
|
-
return response;
|
|
105
|
-
} catch (error) {
|
|
106
|
-
console.error("API request error:", error);
|
|
107
|
-
return {
|
|
108
|
-
success: false,
|
|
109
|
-
error: error instanceof Error ? error.message : "\u7F51\u7EDC\u9519\u8BEF\uFF0C\u8BF7\u91CD\u8BD5"
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
// ==================== 认证相关 API ====================
|
|
114
|
-
/**
|
|
115
|
-
* 用户注册
|
|
116
|
-
*/
|
|
117
|
-
async register(email, password, username) {
|
|
118
|
-
const response = await this.sendRequest({
|
|
119
|
-
url: API_ROUTES.AUTH.REGISTER,
|
|
120
|
-
method: "POST",
|
|
121
|
-
body: { email, password, username }
|
|
122
|
-
});
|
|
123
|
-
if (response.success && response.data) {
|
|
124
|
-
await this.setToken(response.data.token);
|
|
125
|
-
await this.setUser(response.data.user);
|
|
126
|
-
}
|
|
127
|
-
return response;
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* 用户登录
|
|
131
|
-
*/
|
|
132
|
-
async login(email, password) {
|
|
133
|
-
const response = await this.sendRequest({
|
|
134
|
-
url: API_ROUTES.AUTH.LOGIN,
|
|
135
|
-
method: "POST",
|
|
136
|
-
body: { email, password }
|
|
137
|
-
});
|
|
138
|
-
if (response.success && response.data) {
|
|
139
|
-
await this.setToken(response.data.token);
|
|
140
|
-
await this.setUser(response.data.user);
|
|
141
|
-
if (typeof window !== "undefined") {
|
|
142
|
-
window.dispatchEvent(
|
|
143
|
-
new CustomEvent("user_login_success", {
|
|
144
|
-
detail: {
|
|
145
|
-
userId: response.data.user.id,
|
|
146
|
-
email: response.data.user.email,
|
|
147
|
-
role: response.data.user.role
|
|
148
|
-
}
|
|
149
|
-
})
|
|
150
|
-
);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
return response;
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* 用户退出登录
|
|
157
|
-
*/
|
|
158
|
-
async logout() {
|
|
159
|
-
await this.sendRequest({
|
|
160
|
-
url: API_ROUTES.AUTH.LOGOUT,
|
|
161
|
-
method: "POST"
|
|
162
|
-
});
|
|
163
|
-
await this.clearUserData();
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* 获取当前用户信息
|
|
167
|
-
*/
|
|
168
|
-
async getCurrentUser() {
|
|
169
|
-
const response = await this.sendRequest({
|
|
170
|
-
url: API_ROUTES.AUTH.ME,
|
|
171
|
-
method: "GET"
|
|
172
|
-
});
|
|
173
|
-
if (response.success && response.data) {
|
|
174
|
-
const userData = response.data.user || response.data;
|
|
175
|
-
await this.setUser(userData);
|
|
176
|
-
return {
|
|
177
|
-
...response,
|
|
178
|
-
data: userData
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
return response;
|
|
182
|
-
}
|
|
183
|
-
// ==================== 通用方法 ====================
|
|
184
|
-
/**
|
|
185
|
-
* 发送 GET 请求
|
|
186
|
-
*/
|
|
187
|
-
async get(url, params) {
|
|
188
|
-
return this.sendRequest({ url, method: "GET", params });
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* 发送 POST 请求
|
|
192
|
-
*/
|
|
193
|
-
async post(url, body) {
|
|
194
|
-
return this.sendRequest({ url, method: "POST", body });
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* 发送 PUT 请求
|
|
198
|
-
*/
|
|
199
|
-
async put(url, body) {
|
|
200
|
-
return this.sendRequest({ url, method: "PUT", body });
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* 发送 DELETE 请求
|
|
204
|
-
*/
|
|
205
|
-
async delete(url) {
|
|
206
|
-
return this.sendRequest({ url, method: "DELETE" });
|
|
207
|
-
}
|
|
208
|
-
};
|
|
209
|
-
|
|
210
|
-
export { API_ROUTES, BaseApiClient, STORAGE_KEYS };
|
|
211
|
-
//# sourceMappingURL=chunk-G4NFB2QA.mjs.map
|
|
212
|
-
//# sourceMappingURL=chunk-G4NFB2QA.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/common/auth/client/types.ts","../src/common/auth/client/base-api-client.ts"],"names":[],"mappings":"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","file":"chunk-G4NFB2QA.mjs","sourcesContent":["/**\n * Auth Client - Types\n * API 客户端类型定义\n */\n\nimport type { UserRole, User, ApiResponse, AuthResponse } from '../types';\n\nexport type { UserRole, User, ApiResponse, AuthResponse };\n\n/**\n * 存储键名\n */\nexport const STORAGE_KEYS = {\n AUTH_TOKEN: 'auth_token',\n USER_DATA: 'user_data',\n} as const;\n\n/**\n * API 路由\n */\nexport const API_ROUTES = {\n AUTH: {\n LOGIN: '/auth/login',\n REGISTER: '/auth/register',\n LOGOUT: '/auth/logout',\n ME: '/auth/me',\n },\n} as const;\n\n","/**\n * Auth Client - Base API Client\n * 基础 API 客户端\n */\n\nimport type { StorageAdapter } from '../../storage';\nimport type { RequestAdapter, RequestConfig } from '../../request';\nimport { API_ROUTES, STORAGE_KEYS, type ApiResponse, type User, type AuthResponse } from './types';\nimport type { IAuthClient } from '../types';\n\n/**\n * 基础 API 客户端\n * 提供统一的 API 调用逻辑,通过适配器模式支持多平台\n *\n * @example\n * ```typescript\n * import { BaseApiClient } from '@qhr123/sa2kit/common/auth/client';\n * import { WebStorageAdapter } from '@qhr123/sa2kit/storage';\n * import { WebRequestAdapter } from '@qhr123/sa2kit/request';\n *\n * const apiClient = new BaseApiClient(\n * new WebStorageAdapter(),\n * new WebRequestAdapter(),\n * '/api'\n * );\n *\n * await apiClient.init();\n * const result = await apiClient.login('user@example.com', 'password');\n * ```\n */\nexport class BaseApiClient implements IAuthClient {\n private token: string | null = null;\n private user: User | null = null;\n\n constructor(\n private storage: StorageAdapter,\n private request: RequestAdapter,\n private baseUrl: string\n ) {}\n\n /**\n * 初始化 - 从存储中加载 token 和用户信息\n */\n async init(): Promise<void> {\n try {\n this.token = await this.storage.getItem(STORAGE_KEYS.AUTH_TOKEN);\n const userData = await this.storage.getItem(STORAGE_KEYS.USER_DATA);\n if (userData) {\n this.user = JSON.parse(userData);\n }\n } catch (error) {\n console.error('Failed to load auth data:', error);\n }\n }\n\n /**\n * 设置认证 token\n */\n async setToken(token: string | null): Promise<void> {\n this.token = token;\n if (token) {\n await this.storage.setItem(STORAGE_KEYS.AUTH_TOKEN, token);\n } else {\n await this.storage.removeItem(STORAGE_KEYS.AUTH_TOKEN);\n }\n }\n\n /**\n * 设置用户信息\n */\n async setUser(user: User | null): Promise<void> {\n this.user = user;\n if (user) {\n await this.storage.setItem(STORAGE_KEYS.USER_DATA, JSON.stringify(user));\n } else {\n await this.storage.removeItem(STORAGE_KEYS.USER_DATA);\n }\n }\n\n /**\n * 获取当前 token\n */\n getToken(): string | null {\n return this.token;\n }\n\n /**\n * 获取当前用户\n */\n getUser(): User | null {\n return this.user;\n }\n\n /**\n * 检查是否已登录\n */\n async isAuthenticated(): Promise<boolean> {\n return !!this.token;\n }\n\n /**\n * 清除用户数据\n */\n async clearUserData(): Promise<void> {\n await this.storage.removeItem(STORAGE_KEYS.AUTH_TOKEN);\n await this.storage.removeItem(STORAGE_KEYS.USER_DATA);\n this.token = null;\n this.user = null;\n }\n\n /**\n * 发送请求的通用方法\n */\n private async sendRequest<T = any>(config: RequestConfig): Promise<ApiResponse<T>> {\n try {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...(config.headers || {}),\n };\n\n // 添加认证 token\n if (this.token) {\n headers['Authorization'] = 'Bearer ' + (this.token);\n }\n\n const response = await this.request.request<ApiResponse<T>>({\n ...config,\n url: (this.baseUrl) + (config.url),\n headers,\n });\n\n return response;\n } catch (error) {\n console.error('API request error:', error);\n return {\n success: false,\n error: error instanceof Error ? error.message : '网络错误,请重试',\n };\n }\n }\n\n // ==================== 认证相关 API ====================\n\n /**\n * 用户注册\n */\n async register(\n email: string,\n password: string,\n username: string\n ): Promise<ApiResponse<AuthResponse>> {\n const response = await this.sendRequest<AuthResponse>({\n url: API_ROUTES.AUTH.REGISTER,\n method: 'POST',\n body: { email, password, username },\n });\n\n if (response.success && response.data) {\n await this.setToken(response.data.token);\n await this.setUser(response.data.user);\n }\n\n return response;\n }\n\n /**\n * 用户登录\n */\n async login(email: string, password: string): Promise<ApiResponse<AuthResponse>> {\n const response = await this.sendRequest<AuthResponse>({\n url: API_ROUTES.AUTH.LOGIN,\n method: 'POST',\n body: { email, password },\n });\n\n if (response.success && response.data) {\n await this.setToken(response.data.token);\n await this.setUser(response.data.user);\n\n // 触发自定义事件通知登录成功\n if (typeof window !== 'undefined') {\n window.dispatchEvent(\n new CustomEvent('user_login_success', {\n detail: {\n userId: response.data.user.id,\n email: response.data.user.email,\n role: response.data.user.role,\n },\n })\n );\n }\n }\n\n return response;\n }\n\n /**\n * 用户退出登录\n */\n async logout(): Promise<void> {\n await this.sendRequest<void>({\n url: API_ROUTES.AUTH.LOGOUT,\n method: 'POST',\n });\n\n // 无论成功与否,都清除本地数据\n await this.clearUserData();\n }\n\n /**\n * 获取当前用户信息\n */\n async getCurrentUser(): Promise<ApiResponse<User>> {\n const response = await this.sendRequest<any>({\n url: API_ROUTES.AUTH.ME,\n method: 'GET',\n });\n\n // 统一处理响应格式\n if (response.success && response.data) {\n const userData = response.data.user || response.data;\n await this.setUser(userData);\n return {\n ...response,\n data: userData,\n };\n }\n\n return response;\n }\n\n // ==================== 通用方法 ====================\n\n /**\n * 发送 GET 请求\n */\n async get<T = any>(url: string, params?: Record<string, any>): Promise<ApiResponse<T>> {\n return this.sendRequest({ url, method: 'GET', params });\n }\n\n /**\n * 发送 POST 请求\n */\n async post<T = any>(url: string, body?: any): Promise<ApiResponse<T>> {\n return this.sendRequest({ url, method: 'POST', body });\n }\n\n /**\n * 发送 PUT 请求\n */\n async put<T = any>(url: string, body?: any): Promise<ApiResponse<T>> {\n return this.sendRequest({ url, method: 'PUT', body });\n }\n\n /**\n * 发送 DELETE 请求\n */\n async delete<T = any>(url: string): Promise<ApiResponse<T>> {\n return this.sendRequest({ url, method: 'DELETE' });\n }\n}\n\n"]}
|
package/dist/chunk-G5HJGXGC.mjs
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
// src/request/adapters/react-native-adapter.ts
|
|
2
|
-
var ReactNativeRequestAdapter = class {
|
|
3
|
-
async request(config) {
|
|
4
|
-
const { url, method = "GET", headers = {}, body, params } = config;
|
|
5
|
-
let fullUrl = url;
|
|
6
|
-
if (params) {
|
|
7
|
-
const searchParams = new URLSearchParams();
|
|
8
|
-
Object.entries(params).forEach(([key, value]) => {
|
|
9
|
-
if (value !== void 0 && value !== null) {
|
|
10
|
-
searchParams.append(key, String(value));
|
|
11
|
-
}
|
|
12
|
-
});
|
|
13
|
-
const qs = searchParams.toString();
|
|
14
|
-
if (qs) {
|
|
15
|
-
fullUrl += url.includes("?") ? `&${qs}` : `?${qs}`;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
const response = await fetch(fullUrl, {
|
|
19
|
-
method,
|
|
20
|
-
headers: {
|
|
21
|
-
"Content-Type": "application/json",
|
|
22
|
-
...headers
|
|
23
|
-
},
|
|
24
|
-
body: body ? JSON.stringify(body) : void 0
|
|
25
|
-
});
|
|
26
|
-
const data = await response.json();
|
|
27
|
-
if (!response.ok) {
|
|
28
|
-
return {
|
|
29
|
-
success: false,
|
|
30
|
-
error: data.error ?? `\u8BF7\u6C42\u5931\u8D25 (${response.status})`
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
return data;
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
export { ReactNativeRequestAdapter };
|
|
38
|
-
//# sourceMappingURL=chunk-G5HJGXGC.mjs.map
|
|
39
|
-
//# sourceMappingURL=chunk-G5HJGXGC.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/request/adapters/react-native-adapter.ts"],"names":[],"mappings":";AAMO,IAAM,4BAAN,MAA0D;AAAA,EAC/D,MAAM,QAAqB,MAAA,EAAmC;AAC5D,IAAA,MAAM,EAAE,KAAK,MAAA,GAAS,KAAA,EAAO,UAAU,EAAC,EAAG,IAAA,EAAM,MAAA,EAAO,GAAI,MAAA;AAE5D,IAAA,IAAI,OAAA,GAAU,GAAA;AACd,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,MAAA,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAC/C,QAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AACzC,UAAA,YAAA,CAAa,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,QACxC;AAAA,MACF,CAAC,CAAA;AACD,MAAA,MAAM,EAAA,GAAK,aAAa,QAAA,EAAS;AACjC,MAAA,IAAI,EAAA,EAAI;AACN,QAAA,OAAA,IAAW,GAAA,CAAI,SAAS,GAAG,CAAA,GAAI,IAAI,EAAE,CAAA,CAAA,GAAK,IAAI,EAAE,CAAA,CAAA;AAAA,MAClD;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,EAAS;AAAA,MACpC,MAAA;AAAA,MACA,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,GAAG;AAAA,OACL;AAAA,MACA,IAAA,EAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,GAAI;AAAA,KACrC,CAAA;AAED,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EACG,IAAA,CAA4B,KAAA,IAC7B,CAAA,0BAAA,EAAS,SAAS,MAAM,CAAA,CAAA;AAAA,OAC5B;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACF","file":"chunk-G5HJGXGC.mjs","sourcesContent":["import type { RequestAdapter, RequestConfig } from '../types/types';\n\n/**\n * React Native 请求适配器(fetch,不携带 Cookie)\n * 与 WebRequestAdapter 的区别:RN 跨域场景下 credentials:include 无效且易误导\n */\nexport class ReactNativeRequestAdapter implements RequestAdapter {\n async request<T = unknown>(config: RequestConfig): Promise<T> {\n const { url, method = 'GET', headers = {}, body, params } = config;\n\n let fullUrl = url;\n if (params) {\n const searchParams = new URLSearchParams();\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n searchParams.append(key, String(value));\n }\n });\n const qs = searchParams.toString();\n if (qs) {\n fullUrl += url.includes('?') ? `&${qs}` : `?${qs}`;\n }\n }\n\n const response = await fetch(fullUrl, {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n body: body ? JSON.stringify(body) : undefined,\n });\n\n const data = (await response.json()) as T & { error?: string };\n if (!response.ok) {\n return {\n success: false,\n error:\n (data as { error?: string }).error ??\n `请求失败 (${response.status})`,\n } as T;\n }\n return data;\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/request/adapters/miniapp-adapter.ts"],"names":[],"mappings":";;;AAgCO,IAAM,wBAAN,MAAsD;AAAA,EAG3D,YAAY,IAAA,EAAyB;AACnC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,IAChE;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACd;AAAA,EAEA,MAAM,QAAiB,MAAA,EAAmC;AACxD,IAAA,MAAM,EAAE,KAAK,MAAA,GAAS,KAAA,EAAO,UAAU,EAAC,EAAG,IAAA,EAAM,MAAA,EAAO,GAAI,MAAA;AAE5D,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ;AAAA,QACvC,GAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA,EAAQ;AAAA,UACN,cAAA,EAAgB,kBAAA;AAAA,UAChB,GAAG;AAAA,SACL;AAAA,QACA,IAAA,EAAM,MAAA,KAAW,KAAA,GAAQ,MAAA,GAAS;AAAA,OACnC,CAAA;AAED,MAAA,MAAM,OAAO,QAAA,CAAS,IAAA;AAGtB,MAAA,IAAI,QAAA,CAAS,UAAA,IAAc,GAAA,IAAO,QAAA,CAAS,aAAa,GAAA,EAAK;AAC3D,QAAA,OAAO,IAAA;AAAA,MACT,CAAA,MAAO;AACL,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,KAAA;AAAA,UACT,KAAA,EAAO,IAAA,CAAK,KAAA,IAAS,4BAAA,GAAY,QAAA,CAAS;AAAA,SAC5C;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,0CAA0C,KAAK,CAAA;AAC7D,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,OAClD;AAAA,IACF;AAAA,EACF;AACF","file":"chunk-GQZHGSRR.js","sourcesContent":["import type { RequestAdapter, RequestConfig } from '../types/types';\n\n/**\n * Taro Request 接口定义\n * 兼容 @tarojs/taro request API\n */\ninterface TaroRequestStatic {\n request<T = any>(options: {\n url: string;\n method?: string;\n header?: Record<string, string>;\n data?: any;\n }): Promise<{\n statusCode: number;\n data: T;\n }>;\n}\n\n/**\n * Miniapp 平台请求适配器\n * 基于 Taro.request API\n *\n * 使用方式:\n * ```typescript\n * import Taro from '@tarojs/taro'\n * const adapter = new MiniappRequestAdapter(Taro)\n * ```\n *\n * 适用平台:\n * - WeChat Miniapp\n * - Other Taro-based miniapps\n */\nexport class MiniappRequestAdapter implements RequestAdapter {\n private taro: TaroRequestStatic;\n\n constructor(taro: TaroRequestStatic) {\n if (!taro) {\n throw new Error('MiniappRequestAdapter requires Taro instance');\n }\n this.taro = taro;\n }\n\n async request<T = any>(config: RequestConfig): Promise<T> {\n const { url, method = 'GET', headers = {}, body, params } = config;\n\n try {\n const response = await this.taro.request({\n url,\n method: method as any,\n header: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n data: method === 'GET' ? params : body,\n });\n\n const data = response.data as any;\n\n // 统一返回格式\n if (response.statusCode >= 200 && response.statusCode < 300) {\n return data;\n } else {\n return {\n success: false,\n error: data.error || '请求失败: ' + (response.statusCode),\n } as T;\n }\n } catch (error) {\n console.error('[MiniappRequestAdapter] request error:', error);\n return {\n success: false,\n error: error instanceof Error ? error.message : '网络请求失败',\n } as T;\n }\n }\n}\n\n"]}
|
package/dist/chunk-GS7XLKET.js
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
// src/request/adapters/react-native-adapter.ts
|
|
4
|
-
var ReactNativeRequestAdapter = class {
|
|
5
|
-
async request(config) {
|
|
6
|
-
const { url, method = "GET", headers = {}, body, params } = config;
|
|
7
|
-
let fullUrl = url;
|
|
8
|
-
if (params) {
|
|
9
|
-
const searchParams = new URLSearchParams();
|
|
10
|
-
Object.entries(params).forEach(([key, value]) => {
|
|
11
|
-
if (value !== void 0 && value !== null) {
|
|
12
|
-
searchParams.append(key, String(value));
|
|
13
|
-
}
|
|
14
|
-
});
|
|
15
|
-
const qs = searchParams.toString();
|
|
16
|
-
if (qs) {
|
|
17
|
-
fullUrl += url.includes("?") ? `&${qs}` : `?${qs}`;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
const response = await fetch(fullUrl, {
|
|
21
|
-
method,
|
|
22
|
-
headers: {
|
|
23
|
-
"Content-Type": "application/json",
|
|
24
|
-
...headers
|
|
25
|
-
},
|
|
26
|
-
body: body ? JSON.stringify(body) : void 0
|
|
27
|
-
});
|
|
28
|
-
const data = await response.json();
|
|
29
|
-
if (!response.ok) {
|
|
30
|
-
return {
|
|
31
|
-
success: false,
|
|
32
|
-
error: data.error ?? `\u8BF7\u6C42\u5931\u8D25 (${response.status})`
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
return data;
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
exports.ReactNativeRequestAdapter = ReactNativeRequestAdapter;
|
|
40
|
-
//# sourceMappingURL=chunk-GS7XLKET.js.map
|
|
41
|
-
//# sourceMappingURL=chunk-GS7XLKET.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/request/adapters/react-native-adapter.ts"],"names":[],"mappings":";;;AAMO,IAAM,4BAAN,MAA0D;AAAA,EAC/D,MAAM,QAAqB,MAAA,EAAmC;AAC5D,IAAA,MAAM,EAAE,KAAK,MAAA,GAAS,KAAA,EAAO,UAAU,EAAC,EAAG,IAAA,EAAM,MAAA,EAAO,GAAI,MAAA;AAE5D,IAAA,IAAI,OAAA,GAAU,GAAA;AACd,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,MAAA,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAC/C,QAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AACzC,UAAA,YAAA,CAAa,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,QACxC;AAAA,MACF,CAAC,CAAA;AACD,MAAA,MAAM,EAAA,GAAK,aAAa,QAAA,EAAS;AACjC,MAAA,IAAI,EAAA,EAAI;AACN,QAAA,OAAA,IAAW,GAAA,CAAI,SAAS,GAAG,CAAA,GAAI,IAAI,EAAE,CAAA,CAAA,GAAK,IAAI,EAAE,CAAA,CAAA;AAAA,MAClD;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,EAAS;AAAA,MACpC,MAAA;AAAA,MACA,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,GAAG;AAAA,OACL;AAAA,MACA,IAAA,EAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,GAAI;AAAA,KACrC,CAAA;AAED,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EACG,IAAA,CAA4B,KAAA,IAC7B,CAAA,0BAAA,EAAS,SAAS,MAAM,CAAA,CAAA;AAAA,OAC5B;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACF","file":"chunk-GS7XLKET.js","sourcesContent":["import type { RequestAdapter, RequestConfig } from '../types/types';\n\n/**\n * React Native 请求适配器(fetch,不携带 Cookie)\n * 与 WebRequestAdapter 的区别:RN 跨域场景下 credentials:include 无效且易误导\n */\nexport class ReactNativeRequestAdapter implements RequestAdapter {\n async request<T = unknown>(config: RequestConfig): Promise<T> {\n const { url, method = 'GET', headers = {}, body, params } = config;\n\n let fullUrl = url;\n if (params) {\n const searchParams = new URLSearchParams();\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n searchParams.append(key, String(value));\n }\n });\n const qs = searchParams.toString();\n if (qs) {\n fullUrl += url.includes('?') ? `&${qs}` : `?${qs}`;\n }\n }\n\n const response = await fetch(fullUrl, {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n body: body ? JSON.stringify(body) : undefined,\n });\n\n const data = (await response.json()) as T & { error?: string };\n if (!response.ok) {\n return {\n success: false,\n error:\n (data as { error?: string }).error ??\n `请求失败 (${response.status})`,\n } as T;\n }\n return data;\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/common/request/index.ts"],"names":[],"mappings":";;;;;;AAAA,IAAA,eAAA,GAAA;AAAA,QAAA,CAAA,eAAA,EAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,yBAAA,EAAA,MAAA,yBAAA;AAAA,EAAA,iBAAA,EAAA,MAAA;AAAA,CAAA,CAAA","file":"chunk-IBWDBBX5.mjs","sourcesContent":["/**\n * @package sa2kit/common/request\n */\nexport * from '../../request';\n"]}
|
package/dist/chunk-MWSAH7ZG.mjs
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
// src/request/adapters/miniapp-adapter.ts
|
|
2
|
-
var MiniappRequestAdapter = class {
|
|
3
|
-
constructor(taro) {
|
|
4
|
-
if (!taro) {
|
|
5
|
-
throw new Error("MiniappRequestAdapter requires Taro instance");
|
|
6
|
-
}
|
|
7
|
-
this.taro = taro;
|
|
8
|
-
}
|
|
9
|
-
async request(config) {
|
|
10
|
-
const { url, method = "GET", headers = {}, body, params } = config;
|
|
11
|
-
try {
|
|
12
|
-
const response = await this.taro.request({
|
|
13
|
-
url,
|
|
14
|
-
method,
|
|
15
|
-
header: {
|
|
16
|
-
"Content-Type": "application/json",
|
|
17
|
-
...headers
|
|
18
|
-
},
|
|
19
|
-
data: method === "GET" ? params : body
|
|
20
|
-
});
|
|
21
|
-
const data = response.data;
|
|
22
|
-
if (response.statusCode >= 200 && response.statusCode < 300) {
|
|
23
|
-
return data;
|
|
24
|
-
} else {
|
|
25
|
-
return {
|
|
26
|
-
success: false,
|
|
27
|
-
error: data.error || "\u8BF7\u6C42\u5931\u8D25: " + response.statusCode
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
} catch (error) {
|
|
31
|
-
console.error("[MiniappRequestAdapter] request error:", error);
|
|
32
|
-
return {
|
|
33
|
-
success: false,
|
|
34
|
-
error: error instanceof Error ? error.message : "\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25"
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
export { MiniappRequestAdapter };
|
|
41
|
-
//# sourceMappingURL=chunk-MWSAH7ZG.mjs.map
|
|
42
|
-
//# sourceMappingURL=chunk-MWSAH7ZG.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/request/adapters/miniapp-adapter.ts"],"names":[],"mappings":";AAgCO,IAAM,wBAAN,MAAsD;AAAA,EAG3D,YAAY,IAAA,EAAyB;AACnC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,IAChE;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACd;AAAA,EAEA,MAAM,QAAiB,MAAA,EAAmC;AACxD,IAAA,MAAM,EAAE,KAAK,MAAA,GAAS,KAAA,EAAO,UAAU,EAAC,EAAG,IAAA,EAAM,MAAA,EAAO,GAAI,MAAA;AAE5D,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ;AAAA,QACvC,GAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA,EAAQ;AAAA,UACN,cAAA,EAAgB,kBAAA;AAAA,UAChB,GAAG;AAAA,SACL;AAAA,QACA,IAAA,EAAM,MAAA,KAAW,KAAA,GAAQ,MAAA,GAAS;AAAA,OACnC,CAAA;AAED,MAAA,MAAM,OAAO,QAAA,CAAS,IAAA;AAGtB,MAAA,IAAI,QAAA,CAAS,UAAA,IAAc,GAAA,IAAO,QAAA,CAAS,aAAa,GAAA,EAAK;AAC3D,QAAA,OAAO,IAAA;AAAA,MACT,CAAA,MAAO;AACL,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,KAAA;AAAA,UACT,KAAA,EAAO,IAAA,CAAK,KAAA,IAAS,4BAAA,GAAY,QAAA,CAAS;AAAA,SAC5C;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,0CAA0C,KAAK,CAAA;AAC7D,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,OAClD;AAAA,IACF;AAAA,EACF;AACF","file":"chunk-MWSAH7ZG.mjs","sourcesContent":["import type { RequestAdapter, RequestConfig } from '../types/types';\n\n/**\n * Taro Request 接口定义\n * 兼容 @tarojs/taro request API\n */\ninterface TaroRequestStatic {\n request<T = any>(options: {\n url: string;\n method?: string;\n header?: Record<string, string>;\n data?: any;\n }): Promise<{\n statusCode: number;\n data: T;\n }>;\n}\n\n/**\n * Miniapp 平台请求适配器\n * 基于 Taro.request API\n *\n * 使用方式:\n * ```typescript\n * import Taro from '@tarojs/taro'\n * const adapter = new MiniappRequestAdapter(Taro)\n * ```\n *\n * 适用平台:\n * - WeChat Miniapp\n * - Other Taro-based miniapps\n */\nexport class MiniappRequestAdapter implements RequestAdapter {\n private taro: TaroRequestStatic;\n\n constructor(taro: TaroRequestStatic) {\n if (!taro) {\n throw new Error('MiniappRequestAdapter requires Taro instance');\n }\n this.taro = taro;\n }\n\n async request<T = any>(config: RequestConfig): Promise<T> {\n const { url, method = 'GET', headers = {}, body, params } = config;\n\n try {\n const response = await this.taro.request({\n url,\n method: method as any,\n header: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n data: method === 'GET' ? params : body,\n });\n\n const data = response.data as any;\n\n // 统一返回格式\n if (response.statusCode >= 200 && response.statusCode < 300) {\n return data;\n } else {\n return {\n success: false,\n error: data.error || '请求失败: ' + (response.statusCode),\n } as T;\n }\n } catch (error) {\n console.error('[MiniappRequestAdapter] request error:', error);\n return {\n success: false,\n error: error instanceof Error ? error.message : '网络请求失败',\n } as T;\n }\n }\n}\n\n"]}
|
package/dist/chunk-MZOGYD4N.mjs
DELETED
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
import { useState, useCallback, useEffect } from 'react';
|
|
2
|
-
|
|
3
|
-
// src/common/auth/hooks/useSession.ts
|
|
4
|
-
function useSession(authClient) {
|
|
5
|
-
return authClient.useSession();
|
|
6
|
-
}
|
|
7
|
-
function useAuth(apiClient) {
|
|
8
|
-
const [user, setUser] = useState(null);
|
|
9
|
-
const [isLoggedIn, setIsLoggedIn] = useState(false);
|
|
10
|
-
const [loading, setLoading] = useState(false);
|
|
11
|
-
const [checkingAuth, setCheckingAuth] = useState(true);
|
|
12
|
-
const [error, setError] = useState(null);
|
|
13
|
-
const checkAuthStatus = useCallback(async () => {
|
|
14
|
-
try {
|
|
15
|
-
setCheckingAuth(true);
|
|
16
|
-
setError(null);
|
|
17
|
-
const isAuth = await apiClient.isAuthenticated();
|
|
18
|
-
if (isAuth) {
|
|
19
|
-
const response = await apiClient.getCurrentUser();
|
|
20
|
-
if (response.success && response.data) {
|
|
21
|
-
setUser(response.data);
|
|
22
|
-
setIsLoggedIn(true);
|
|
23
|
-
} else {
|
|
24
|
-
await apiClient.clearUserData();
|
|
25
|
-
setUser(null);
|
|
26
|
-
setIsLoggedIn(false);
|
|
27
|
-
}
|
|
28
|
-
} else {
|
|
29
|
-
setUser(null);
|
|
30
|
-
setIsLoggedIn(false);
|
|
31
|
-
}
|
|
32
|
-
} catch (err) {
|
|
33
|
-
console.error("\u68C0\u67E5\u767B\u5F55\u72B6\u6001\u5931\u8D25:", err);
|
|
34
|
-
setError(err instanceof Error ? err.message : "\u68C0\u67E5\u767B\u5F55\u72B6\u6001\u5931\u8D25");
|
|
35
|
-
setUser(null);
|
|
36
|
-
setIsLoggedIn(false);
|
|
37
|
-
} finally {
|
|
38
|
-
setCheckingAuth(false);
|
|
39
|
-
}
|
|
40
|
-
}, [apiClient]);
|
|
41
|
-
const login = useCallback(
|
|
42
|
-
async (email, password) => {
|
|
43
|
-
setLoading(true);
|
|
44
|
-
setError(null);
|
|
45
|
-
try {
|
|
46
|
-
const response = await apiClient.login(email, password);
|
|
47
|
-
if (response.success && response.data) {
|
|
48
|
-
setUser(response.data.user);
|
|
49
|
-
setIsLoggedIn(true);
|
|
50
|
-
return { success: true };
|
|
51
|
-
} else {
|
|
52
|
-
const errorMsg = response.error || "\u767B\u5F55\u5931\u8D25";
|
|
53
|
-
setError(errorMsg);
|
|
54
|
-
return { success: false, error: errorMsg };
|
|
55
|
-
}
|
|
56
|
-
} catch (err) {
|
|
57
|
-
const errorMsg = err instanceof Error ? err.message : "\u767B\u5F55\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5";
|
|
58
|
-
setError(errorMsg);
|
|
59
|
-
return { success: false, error: errorMsg };
|
|
60
|
-
} finally {
|
|
61
|
-
setLoading(false);
|
|
62
|
-
}
|
|
63
|
-
},
|
|
64
|
-
[apiClient]
|
|
65
|
-
);
|
|
66
|
-
const register = useCallback(
|
|
67
|
-
async (email, password, username) => {
|
|
68
|
-
setLoading(true);
|
|
69
|
-
setError(null);
|
|
70
|
-
try {
|
|
71
|
-
const response = await apiClient.register(email, password, username);
|
|
72
|
-
if (response.success && response.data) {
|
|
73
|
-
setUser(response.data.user);
|
|
74
|
-
setIsLoggedIn(true);
|
|
75
|
-
return { success: true };
|
|
76
|
-
} else {
|
|
77
|
-
const errorMsg = response.error || "\u6CE8\u518C\u5931\u8D25";
|
|
78
|
-
setError(errorMsg);
|
|
79
|
-
return { success: false, error: errorMsg };
|
|
80
|
-
}
|
|
81
|
-
} catch (err) {
|
|
82
|
-
const errorMsg = err instanceof Error ? err.message : "\u6CE8\u518C\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5";
|
|
83
|
-
setError(errorMsg);
|
|
84
|
-
return { success: false, error: errorMsg };
|
|
85
|
-
} finally {
|
|
86
|
-
setLoading(false);
|
|
87
|
-
}
|
|
88
|
-
},
|
|
89
|
-
[apiClient]
|
|
90
|
-
);
|
|
91
|
-
const logout = useCallback(async () => {
|
|
92
|
-
setLoading(true);
|
|
93
|
-
setError(null);
|
|
94
|
-
try {
|
|
95
|
-
await apiClient.logout();
|
|
96
|
-
setUser(null);
|
|
97
|
-
setIsLoggedIn(false);
|
|
98
|
-
} catch (err) {
|
|
99
|
-
console.error("\u767B\u51FA\u5931\u8D25:", err);
|
|
100
|
-
setError(err instanceof Error ? err.message : "\u767B\u51FA\u5931\u8D25");
|
|
101
|
-
setUser(null);
|
|
102
|
-
setIsLoggedIn(false);
|
|
103
|
-
} finally {
|
|
104
|
-
setLoading(false);
|
|
105
|
-
}
|
|
106
|
-
}, [apiClient]);
|
|
107
|
-
const clearError = useCallback(() => {
|
|
108
|
-
setError(null);
|
|
109
|
-
}, []);
|
|
110
|
-
useEffect(() => {
|
|
111
|
-
checkAuthStatus();
|
|
112
|
-
}, [checkAuthStatus]);
|
|
113
|
-
return {
|
|
114
|
-
// 状态
|
|
115
|
-
user,
|
|
116
|
-
isLoggedIn,
|
|
117
|
-
loading,
|
|
118
|
-
checkingAuth,
|
|
119
|
-
error,
|
|
120
|
-
// 操作方法
|
|
121
|
-
login,
|
|
122
|
-
register,
|
|
123
|
-
logout,
|
|
124
|
-
refresh: checkAuthStatus,
|
|
125
|
-
clearError
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
function useAuthForm(initialValues) {
|
|
129
|
-
const [values, setValues] = useState(initialValues);
|
|
130
|
-
const [errors, setErrors] = useState({});
|
|
131
|
-
const [touched, setTouched] = useState({});
|
|
132
|
-
const handleChange = useCallback(
|
|
133
|
-
(field, value) => {
|
|
134
|
-
setValues((prev) => ({ ...prev, [field]: value }));
|
|
135
|
-
if (errors[field]) {
|
|
136
|
-
setErrors((prev) => {
|
|
137
|
-
const newErrors = { ...prev };
|
|
138
|
-
delete newErrors[field];
|
|
139
|
-
return newErrors;
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
},
|
|
143
|
-
[errors]
|
|
144
|
-
);
|
|
145
|
-
const handleBlur = useCallback((field) => {
|
|
146
|
-
setTouched((prev) => ({ ...prev, [field]: true }));
|
|
147
|
-
}, []);
|
|
148
|
-
const validate = useCallback(
|
|
149
|
-
(validationRules) => {
|
|
150
|
-
const newErrors = {};
|
|
151
|
-
Object.keys(validationRules).forEach((key) => {
|
|
152
|
-
const field = key;
|
|
153
|
-
const rule = validationRules[field];
|
|
154
|
-
if (rule) {
|
|
155
|
-
const error = rule(values[field]);
|
|
156
|
-
if (error) {
|
|
157
|
-
newErrors[field] = error;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
});
|
|
161
|
-
setErrors(newErrors);
|
|
162
|
-
return Object.keys(newErrors).length === 0;
|
|
163
|
-
},
|
|
164
|
-
[values]
|
|
165
|
-
);
|
|
166
|
-
const reset = useCallback(() => {
|
|
167
|
-
setValues(initialValues);
|
|
168
|
-
setErrors({});
|
|
169
|
-
setTouched({});
|
|
170
|
-
}, [initialValues]);
|
|
171
|
-
return {
|
|
172
|
-
values,
|
|
173
|
-
errors,
|
|
174
|
-
touched,
|
|
175
|
-
handleChange,
|
|
176
|
-
handleBlur,
|
|
177
|
-
validate,
|
|
178
|
-
reset,
|
|
179
|
-
setValues,
|
|
180
|
-
setErrors
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
export { useAuth, useAuthForm, useSession };
|
|
185
|
-
//# sourceMappingURL=chunk-MZOGYD4N.mjs.map
|
|
186
|
-
//# sourceMappingURL=chunk-MZOGYD4N.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/common/auth/hooks/useSession.ts","../src/common/auth/hooks/useAuth.ts"],"names":[],"mappings":"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","file":"chunk-MZOGYD4N.mjs","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"]}
|