sa2kit 2.0.0 → 2.0.2

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 (264) hide show
  1. package/README.md +1 -1
  2. package/dist/CollisionBalls-BpHufX3H.d.mts +41 -0
  3. package/dist/CollisionBalls-BpHufX3H.d.ts +41 -0
  4. package/dist/ConfigService-BxK06xP6.d.mts +262 -0
  5. package/dist/ConfigService-BxK06xP6.d.ts +262 -0
  6. package/dist/UniversalFileService-BpvbZitV.d.mts +139 -0
  7. package/dist/UniversalFileService-GsP6D3Rc.d.ts +139 -0
  8. package/dist/audioDetection/index.d.mts +449 -0
  9. package/dist/audioDetection/index.d.ts +449 -0
  10. package/dist/audioDetection/index.js +1244 -0
  11. package/dist/audioDetection/index.js.map +1 -0
  12. package/dist/audioDetection/index.mjs +1227 -0
  13. package/dist/audioDetection/index.mjs.map +1 -0
  14. package/dist/auth/legacy/core/index.d.mts +42 -0
  15. package/dist/auth/legacy/core/index.d.ts +42 -0
  16. package/dist/auth/legacy/core/index.js +242 -0
  17. package/dist/auth/legacy/core/index.js.map +1 -0
  18. package/dist/auth/legacy/core/index.mjs +226 -0
  19. package/dist/auth/legacy/core/index.mjs.map +1 -0
  20. package/dist/auth/legacy/db/index.d.mts +5 -0
  21. package/dist/auth/legacy/db/index.d.ts +5 -0
  22. package/dist/auth/legacy/db/index.js +261 -0
  23. package/dist/auth/legacy/db/index.js.map +1 -0
  24. package/dist/auth/legacy/db/index.mjs +250 -0
  25. package/dist/auth/legacy/db/index.mjs.map +1 -0
  26. package/dist/auth/legacy/index.d.mts +5 -0
  27. package/dist/auth/legacy/index.d.ts +5 -0
  28. package/dist/auth/legacy/index.js +1107 -0
  29. package/dist/auth/legacy/index.js.map +1 -0
  30. package/dist/auth/legacy/index.mjs +1086 -0
  31. package/dist/auth/legacy/index.mjs.map +1 -0
  32. package/dist/auth/legacy/logic/index.d.mts +9 -0
  33. package/dist/auth/legacy/logic/index.d.ts +9 -0
  34. package/dist/auth/legacy/logic/index.js +194 -0
  35. package/dist/auth/legacy/logic/index.js.map +1 -0
  36. package/dist/auth/legacy/logic/index.mjs +187 -0
  37. package/dist/auth/legacy/logic/index.mjs.map +1 -0
  38. package/dist/auth/legacy/miniapp/index.d.mts +5 -0
  39. package/dist/auth/legacy/miniapp/index.d.ts +5 -0
  40. package/dist/auth/legacy/miniapp/index.js +506 -0
  41. package/dist/auth/legacy/miniapp/index.js.map +1 -0
  42. package/dist/auth/legacy/miniapp/index.mjs +487 -0
  43. package/dist/auth/legacy/miniapp/index.mjs.map +1 -0
  44. package/dist/auth/legacy/routes/index.d.mts +53 -0
  45. package/dist/auth/legacy/routes/index.d.ts +53 -0
  46. package/dist/auth/legacy/routes/index.js +278 -0
  47. package/dist/auth/legacy/routes/index.js.map +1 -0
  48. package/dist/auth/legacy/routes/index.mjs +271 -0
  49. package/dist/auth/legacy/routes/index.mjs.map +1 -0
  50. package/dist/auth/legacy/schema/index.d.mts +401 -0
  51. package/dist/auth/legacy/schema/index.d.ts +401 -0
  52. package/dist/auth/legacy/schema/index.js +50 -0
  53. package/dist/auth/legacy/schema/index.js.map +1 -0
  54. package/dist/auth/legacy/schema/index.mjs +44 -0
  55. package/dist/auth/legacy/schema/index.mjs.map +1 -0
  56. package/dist/auth/legacy/server/index.d.mts +13 -0
  57. package/dist/auth/legacy/server/index.d.ts +13 -0
  58. package/dist/auth/legacy/server/index.js +21 -0
  59. package/dist/auth/legacy/server/index.js.map +1 -0
  60. package/dist/auth/legacy/server/index.mjs +19 -0
  61. package/dist/auth/legacy/server/index.mjs.map +1 -0
  62. package/dist/auth/legacy/services/index.d.mts +40 -0
  63. package/dist/auth/legacy/services/index.d.ts +40 -0
  64. package/dist/auth/legacy/services/index.js +258 -0
  65. package/dist/auth/legacy/services/index.js.map +1 -0
  66. package/dist/auth/legacy/services/index.mjs +252 -0
  67. package/dist/auth/legacy/services/index.mjs.map +1 -0
  68. package/dist/auth/legacy/ui/miniapp/index.d.mts +10 -0
  69. package/dist/auth/legacy/ui/miniapp/index.d.ts +10 -0
  70. package/dist/auth/legacy/ui/miniapp/index.js +298 -0
  71. package/dist/auth/legacy/ui/miniapp/index.js.map +1 -0
  72. package/dist/auth/legacy/ui/miniapp/index.mjs +290 -0
  73. package/dist/auth/legacy/ui/miniapp/index.mjs.map +1 -0
  74. package/dist/auth/legacy/ui/web/index.d.mts +22 -0
  75. package/dist/auth/legacy/ui/web/index.d.ts +22 -0
  76. package/dist/auth/legacy/ui/web/index.js +899 -0
  77. package/dist/auth/legacy/ui/web/index.js.map +1 -0
  78. package/dist/auth/legacy/ui/web/index.mjs +889 -0
  79. package/dist/auth/legacy/ui/web/index.mjs.map +1 -0
  80. package/dist/auth/legacy/web/index.d.mts +5 -0
  81. package/dist/auth/legacy/web/index.d.ts +5 -0
  82. package/dist/auth/legacy/web/index.js +1107 -0
  83. package/dist/auth/legacy/web/index.js.map +1 -0
  84. package/dist/auth/legacy/web/index.mjs +1086 -0
  85. package/dist/auth/legacy/web/index.mjs.map +1 -0
  86. package/dist/auth/rn/index.d.mts +64 -0
  87. package/dist/auth/rn/index.d.ts +64 -0
  88. package/dist/auth/rn/index.js +765 -0
  89. package/dist/auth/rn/index.js.map +1 -0
  90. package/dist/auth/rn/index.mjs +754 -0
  91. package/dist/auth/rn/index.mjs.map +1 -0
  92. package/dist/base-api-client-ACKKt13v.d.mts +277 -0
  93. package/dist/base-api-client-ACKKt13v.d.ts +277 -0
  94. package/dist/boothVaultService-Cn4WPhjg.d.mts +83 -0
  95. package/dist/boothVaultService-Cn4WPhjg.d.ts +83 -0
  96. package/dist/business/index.d.mts +6 -0
  97. package/dist/business/index.d.ts +6 -0
  98. package/dist/business/index.js +1682 -0
  99. package/dist/business/index.js.map +1 -0
  100. package/dist/business/index.mjs +1675 -0
  101. package/dist/business/index.mjs.map +1 -0
  102. package/dist/calendar/index.d.mts +1325 -0
  103. package/dist/calendar/index.d.ts +1325 -0
  104. package/dist/calendar/index.js +5964 -0
  105. package/dist/calendar/index.js.map +1 -0
  106. package/dist/calendar/index.mjs +5878 -0
  107. package/dist/calendar/index.mjs.map +1 -0
  108. package/dist/components/index.d.mts +405 -0
  109. package/dist/components/index.d.ts +405 -0
  110. package/dist/components/index.js +2516 -0
  111. package/dist/components/index.js.map +1 -0
  112. package/dist/components/index.mjs +2396 -0
  113. package/dist/components/index.mjs.map +1 -0
  114. package/dist/drizzle-schema-BNhqj2AZ.d.mts +1114 -0
  115. package/dist/drizzle-schema-BNhqj2AZ.d.ts +1114 -0
  116. package/dist/festivalCard/index.d.mts +75 -0
  117. package/dist/festivalCard/index.d.ts +75 -0
  118. package/dist/festivalCard/index.js +1492 -0
  119. package/dist/festivalCard/index.js.map +1 -0
  120. package/dist/festivalCard/index.mjs +1475 -0
  121. package/dist/festivalCard/index.mjs.map +1 -0
  122. package/dist/festivalCard/server/index.d.mts +120 -0
  123. package/dist/festivalCard/server/index.d.ts +120 -0
  124. package/dist/festivalCard/server/index.js +272 -0
  125. package/dist/festivalCard/server/index.js.map +1 -0
  126. package/dist/festivalCard/server/index.mjs +265 -0
  127. package/dist/festivalCard/server/index.mjs.map +1 -0
  128. package/dist/festivalCardService-CZomuQ4E.d.mts +80 -0
  129. package/dist/festivalCardService-CZomuQ4E.d.ts +80 -0
  130. package/dist/index-1Ag7IBXN.d.ts +144 -0
  131. package/dist/index-DNKZ7-R_.d.mts +184 -0
  132. package/dist/index-DNKZ7-R_.d.ts +184 -0
  133. package/dist/index-DSel44Ke.d.mts +93 -0
  134. package/dist/index-DSel44Ke.d.ts +93 -0
  135. package/dist/index-DdeZSeTJ.d.mts +144 -0
  136. package/dist/index-DrPcMJPc.d.mts +250 -0
  137. package/dist/index-DrPcMJPc.d.ts +250 -0
  138. package/dist/index.d.mts +5333 -0
  139. package/dist/index.d.ts +5333 -0
  140. package/dist/index.js +18809 -0
  141. package/dist/index.js.map +1 -0
  142. package/dist/index.mjs +18533 -0
  143. package/dist/index.mjs.map +1 -0
  144. package/dist/mikuContest/ui/web/index.d.mts +2 -0
  145. package/dist/mikuContest/ui/web/index.d.ts +2 -0
  146. package/dist/mikuContest/ui/web/index.js +353 -0
  147. package/dist/mikuContest/ui/web/index.js.map +1 -0
  148. package/dist/mikuContest/ui/web/index.mjs +343 -0
  149. package/dist/mikuContest/ui/web/index.mjs.map +1 -0
  150. package/dist/mikuFireworks3D/index.d.mts +268 -0
  151. package/dist/mikuFireworks3D/index.d.ts +268 -0
  152. package/dist/mikuFireworks3D/index.js +1267 -0
  153. package/dist/mikuFireworks3D/index.js.map +1 -0
  154. package/dist/mikuFireworks3D/index.mjs +1228 -0
  155. package/dist/mikuFireworks3D/index.mjs.map +1 -0
  156. package/dist/mikuFusionGame/index.d.mts +117 -0
  157. package/dist/mikuFusionGame/index.d.ts +117 -0
  158. package/dist/mikuFusionGame/index.js +1208 -0
  159. package/dist/mikuFusionGame/index.js.map +1 -0
  160. package/dist/mikuFusionGame/index.mjs +1195 -0
  161. package/dist/mikuFusionGame/index.mjs.map +1 -0
  162. package/dist/mmd/admin/index.d.mts +487 -0
  163. package/dist/mmd/admin/index.d.ts +487 -0
  164. package/dist/mmd/admin/index.js +1058 -0
  165. package/dist/mmd/admin/index.js.map +1 -0
  166. package/dist/mmd/admin/index.mjs +1027 -0
  167. package/dist/mmd/admin/index.mjs.map +1 -0
  168. package/dist/mmd/index.d.mts +2467 -0
  169. package/dist/mmd/index.d.ts +2467 -0
  170. package/dist/mmd/index.js +10119 -0
  171. package/dist/mmd/index.js.map +1 -0
  172. package/dist/mmd/index.mjs +10028 -0
  173. package/dist/mmd/index.mjs.map +1 -0
  174. package/dist/mmd/server/index.d.mts +139 -0
  175. package/dist/mmd/server/index.d.ts +139 -0
  176. package/dist/mmd/server/index.js +424 -0
  177. package/dist/mmd/server/index.js.map +1 -0
  178. package/dist/mmd/server/index.mjs +404 -0
  179. package/dist/mmd/server/index.mjs.map +1 -0
  180. package/dist/music/index.d.mts +74 -0
  181. package/dist/music/index.d.ts +74 -0
  182. package/dist/music/index.js +830 -0
  183. package/dist/music/index.js.map +1 -0
  184. package/dist/music/index.mjs +809 -0
  185. package/dist/music/index.mjs.map +1 -0
  186. package/dist/music/server/index.d.mts +1 -0
  187. package/dist/music/server/index.d.ts +1 -0
  188. package/dist/music/server/index.js +194 -0
  189. package/dist/music/server/index.js.map +1 -0
  190. package/dist/music/server/index.mjs +182 -0
  191. package/dist/music/server/index.mjs.map +1 -0
  192. package/dist/navigation/index.d.mts +93 -0
  193. package/dist/navigation/index.d.ts +93 -0
  194. package/dist/navigation/index.js +453 -0
  195. package/dist/navigation/index.js.map +1 -0
  196. package/dist/navigation/index.mjs +443 -0
  197. package/dist/navigation/index.mjs.map +1 -0
  198. package/dist/portfolio/index.d.mts +66 -0
  199. package/dist/portfolio/index.d.ts +66 -0
  200. package/dist/portfolio/index.js +736 -0
  201. package/dist/portfolio/index.js.map +1 -0
  202. package/dist/portfolio/index.mjs +724 -0
  203. package/dist/portfolio/index.mjs.map +1 -0
  204. package/dist/qqbot/server/index.d.mts +216 -0
  205. package/dist/qqbot/server/index.d.ts +216 -0
  206. package/dist/qqbot/server/index.js +394 -0
  207. package/dist/qqbot/server/index.js.map +1 -0
  208. package/dist/qqbot/server/index.mjs +385 -0
  209. package/dist/qqbot/server/index.mjs.map +1 -0
  210. package/dist/qqbot/ui/web/index.d.mts +10 -0
  211. package/dist/qqbot/ui/web/index.d.ts +10 -0
  212. package/dist/qqbot/ui/web/index.js +105 -0
  213. package/dist/qqbot/ui/web/index.js.map +1 -0
  214. package/dist/qqbot/ui/web/index.mjs +99 -0
  215. package/dist/qqbot/ui/web/index.mjs.map +1 -0
  216. package/dist/screenReceiver/index.d.mts +86 -0
  217. package/dist/screenReceiver/index.d.ts +86 -0
  218. package/dist/screenReceiver/index.js +281 -0
  219. package/dist/screenReceiver/index.js.map +1 -0
  220. package/dist/screenReceiver/index.mjs +273 -0
  221. package/dist/screenReceiver/index.mjs.map +1 -0
  222. package/dist/testYourself/admin/index.d.mts +58 -0
  223. package/dist/testYourself/admin/index.d.ts +58 -0
  224. package/dist/testYourself/admin/index.js +1009 -0
  225. package/dist/testYourself/admin/index.js.map +1 -0
  226. package/dist/testYourself/admin/index.mjs +1002 -0
  227. package/dist/testYourself/admin/index.mjs.map +1 -0
  228. package/dist/testYourself/index.d.mts +53 -0
  229. package/dist/testYourself/index.d.ts +53 -0
  230. package/dist/testYourself/index.js +2551 -0
  231. package/dist/testYourself/index.js.map +1 -0
  232. package/dist/testYourself/index.mjs +2531 -0
  233. package/dist/testYourself/index.mjs.map +1 -0
  234. package/dist/testYourself/server/index.d.mts +1029 -0
  235. package/dist/testYourself/server/index.d.ts +1029 -0
  236. package/dist/testYourself/server/index.js +825 -0
  237. package/dist/testYourself/server/index.js.map +1 -0
  238. package/dist/testYourself/server/index.mjs +816 -0
  239. package/dist/testYourself/server/index.mjs.map +1 -0
  240. package/dist/types-BTiaMsBz.d.mts +292 -0
  241. package/dist/types-DyG3ZV9V.d.mts +270 -0
  242. package/dist/types-DyG3ZV9V.d.ts +270 -0
  243. package/dist/types-ERmJyjx8.d.ts +292 -0
  244. package/dist/types-HorDyIRv.d.mts +303 -0
  245. package/dist/types-HorDyIRv.d.ts +303 -0
  246. package/dist/vocaloidBooth/index.d.mts +64 -0
  247. package/dist/vocaloidBooth/index.d.ts +64 -0
  248. package/dist/vocaloidBooth/index.js +376 -0
  249. package/dist/vocaloidBooth/index.js.map +1 -0
  250. package/dist/vocaloidBooth/index.mjs +362 -0
  251. package/dist/vocaloidBooth/index.mjs.map +1 -0
  252. package/dist/vocaloidBooth/server/index.d.mts +111 -0
  253. package/dist/vocaloidBooth/server/index.d.ts +111 -0
  254. package/dist/vocaloidBooth/server/index.js +247 -0
  255. package/dist/vocaloidBooth/server/index.js.map +1 -0
  256. package/dist/vocaloidBooth/server/index.mjs +237 -0
  257. package/dist/vocaloidBooth/server/index.mjs.map +1 -0
  258. package/dist/vocaloidBooth/web/index.d.mts +3 -0
  259. package/dist/vocaloidBooth/web/index.d.ts +3 -0
  260. package/dist/vocaloidBooth/web/index.js +376 -0
  261. package/dist/vocaloidBooth/web/index.js.map +1 -0
  262. package/dist/vocaloidBooth/web/index.mjs +362 -0
  263. package/dist/vocaloidBooth/web/index.mjs.map +1 -0
  264. package/package.json +1 -1
@@ -0,0 +1,765 @@
1
+ 'use strict';
2
+
3
+ var React2 = require('react');
4
+
5
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
6
+
7
+ var React2__default = /*#__PURE__*/_interopDefault(React2);
8
+
9
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
10
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
11
+ }) : x)(function(x) {
12
+ if (typeof require !== "undefined") return require.apply(this, arguments);
13
+ throw Error('Dynamic require of "' + x + '" is not supported');
14
+ });
15
+
16
+ // src/common/auth/client/types.ts
17
+ var STORAGE_KEYS = {
18
+ AUTH_TOKEN: "auth_token",
19
+ USER_DATA: "user_data"
20
+ };
21
+ var API_ROUTES = {
22
+ AUTH: {
23
+ LOGIN: "/auth/login",
24
+ REGISTER: "/auth/register",
25
+ LOGOUT: "/auth/logout",
26
+ ME: "/auth/me"
27
+ }
28
+ };
29
+
30
+ // src/common/auth/client/base-api-client.ts
31
+ var BaseApiClient = class {
32
+ constructor(storage, request, baseUrl) {
33
+ this.storage = storage;
34
+ this.request = request;
35
+ this.baseUrl = baseUrl;
36
+ this.token = null;
37
+ this.user = null;
38
+ }
39
+ /**
40
+ * 初始化 - 从存储中加载 token 和用户信息
41
+ */
42
+ async init() {
43
+ try {
44
+ this.token = await this.storage.getItem(STORAGE_KEYS.AUTH_TOKEN);
45
+ const userData = await this.storage.getItem(STORAGE_KEYS.USER_DATA);
46
+ if (userData) {
47
+ this.user = JSON.parse(userData);
48
+ }
49
+ } catch (error) {
50
+ console.error("Failed to load auth data:", error);
51
+ }
52
+ }
53
+ /**
54
+ * 设置认证 token
55
+ */
56
+ async setToken(token) {
57
+ this.token = token;
58
+ if (token) {
59
+ await this.storage.setItem(STORAGE_KEYS.AUTH_TOKEN, token);
60
+ } else {
61
+ await this.storage.removeItem(STORAGE_KEYS.AUTH_TOKEN);
62
+ }
63
+ }
64
+ /**
65
+ * 设置用户信息
66
+ */
67
+ async setUser(user) {
68
+ this.user = user;
69
+ if (user) {
70
+ await this.storage.setItem(STORAGE_KEYS.USER_DATA, JSON.stringify(user));
71
+ } else {
72
+ await this.storage.removeItem(STORAGE_KEYS.USER_DATA);
73
+ }
74
+ }
75
+ /**
76
+ * 获取当前 token
77
+ */
78
+ getToken() {
79
+ return this.token;
80
+ }
81
+ /**
82
+ * 获取当前用户
83
+ */
84
+ getUser() {
85
+ return this.user;
86
+ }
87
+ /**
88
+ * 检查是否已登录
89
+ */
90
+ async isAuthenticated() {
91
+ return !!this.token;
92
+ }
93
+ /**
94
+ * 清除用户数据
95
+ */
96
+ async clearUserData() {
97
+ await this.storage.removeItem(STORAGE_KEYS.AUTH_TOKEN);
98
+ await this.storage.removeItem(STORAGE_KEYS.USER_DATA);
99
+ this.token = null;
100
+ this.user = null;
101
+ }
102
+ /**
103
+ * 发送请求的通用方法
104
+ */
105
+ async sendRequest(config) {
106
+ try {
107
+ const headers = {
108
+ "Content-Type": "application/json",
109
+ ...config.headers || {}
110
+ };
111
+ if (this.token) {
112
+ headers["Authorization"] = "Bearer " + this.token;
113
+ }
114
+ const response = await this.request.request({
115
+ ...config,
116
+ url: this.baseUrl + config.url,
117
+ headers
118
+ });
119
+ return response;
120
+ } catch (error) {
121
+ console.error("API request error:", error);
122
+ return {
123
+ success: false,
124
+ error: error instanceof Error ? error.message : "\u7F51\u7EDC\u9519\u8BEF\uFF0C\u8BF7\u91CD\u8BD5"
125
+ };
126
+ }
127
+ }
128
+ // ==================== 认证相关 API ====================
129
+ /**
130
+ * 用户注册
131
+ */
132
+ async register(email, password, username) {
133
+ const response = await this.sendRequest({
134
+ url: API_ROUTES.AUTH.REGISTER,
135
+ method: "POST",
136
+ body: { email, password, username }
137
+ });
138
+ if (response.success && response.data) {
139
+ await this.setToken(response.data.token);
140
+ await this.setUser(response.data.user);
141
+ }
142
+ return response;
143
+ }
144
+ /**
145
+ * 用户登录
146
+ */
147
+ async login(email, password) {
148
+ const response = await this.sendRequest({
149
+ url: API_ROUTES.AUTH.LOGIN,
150
+ method: "POST",
151
+ body: { email, password }
152
+ });
153
+ if (response.success && response.data) {
154
+ await this.setToken(response.data.token);
155
+ await this.setUser(response.data.user);
156
+ if (typeof window !== "undefined") {
157
+ window.dispatchEvent(
158
+ new CustomEvent("user_login_success", {
159
+ detail: {
160
+ userId: response.data.user.id,
161
+ email: response.data.user.email,
162
+ role: response.data.user.role
163
+ }
164
+ })
165
+ );
166
+ }
167
+ }
168
+ return response;
169
+ }
170
+ /**
171
+ * 用户退出登录
172
+ */
173
+ async logout() {
174
+ await this.sendRequest({
175
+ url: API_ROUTES.AUTH.LOGOUT,
176
+ method: "POST"
177
+ });
178
+ await this.clearUserData();
179
+ }
180
+ /**
181
+ * 获取当前用户信息
182
+ */
183
+ async getCurrentUser() {
184
+ const response = await this.sendRequest({
185
+ url: API_ROUTES.AUTH.ME,
186
+ method: "GET"
187
+ });
188
+ if (response.success && response.data) {
189
+ const userData = response.data.user || response.data;
190
+ await this.setUser(userData);
191
+ return {
192
+ ...response,
193
+ data: userData
194
+ };
195
+ }
196
+ return response;
197
+ }
198
+ // ==================== 通用方法 ====================
199
+ /**
200
+ * 发送 GET 请求
201
+ */
202
+ async get(url, params) {
203
+ return this.sendRequest({ url, method: "GET", params });
204
+ }
205
+ /**
206
+ * 发送 POST 请求
207
+ */
208
+ async post(url, body) {
209
+ return this.sendRequest({ url, method: "POST", body });
210
+ }
211
+ /**
212
+ * 发送 PUT 请求
213
+ */
214
+ async put(url, body) {
215
+ return this.sendRequest({ url, method: "PUT", body });
216
+ }
217
+ /**
218
+ * 发送 DELETE 请求
219
+ */
220
+ async delete(url) {
221
+ return this.sendRequest({ url, method: "DELETE" });
222
+ }
223
+ };
224
+
225
+ // src/storage/adapters/react-native-adapter.ts
226
+ var AsyncStorage = null;
227
+ try {
228
+ AsyncStorage = __require("@react-native-async-storage/async-storage").default;
229
+ } catch (e) {
230
+ }
231
+ var ReactNativeStorageAdapter = class {
232
+ constructor() {
233
+ this.listeners = /* @__PURE__ */ new Map();
234
+ }
235
+ async getItem(key) {
236
+ if (!AsyncStorage) return null;
237
+ try {
238
+ return await AsyncStorage.getItem(key);
239
+ } catch (error) {
240
+ console.error('[ReactNativeStorage] Error getting item "' + key + '":', error);
241
+ return null;
242
+ }
243
+ }
244
+ async setItem(key, value) {
245
+ if (!AsyncStorage) {
246
+ throw new Error("AsyncStorage is not available");
247
+ }
248
+ try {
249
+ await AsyncStorage.setItem(key, value);
250
+ this.notifyListeners(key, value);
251
+ } catch (error) {
252
+ console.error('[ReactNativeStorage] Error setting item "' + key + '":', error);
253
+ throw error;
254
+ }
255
+ }
256
+ async removeItem(key) {
257
+ if (!AsyncStorage) {
258
+ throw new Error("AsyncStorage is not available");
259
+ }
260
+ try {
261
+ await AsyncStorage.removeItem(key);
262
+ this.notifyListeners(key, null);
263
+ } catch (error) {
264
+ console.error('[ReactNativeStorage] Error removing item "' + key + '":', error);
265
+ throw error;
266
+ }
267
+ }
268
+ async clear() {
269
+ if (!AsyncStorage) {
270
+ throw new Error("AsyncStorage is not available");
271
+ }
272
+ try {
273
+ await AsyncStorage.clear();
274
+ } catch (error) {
275
+ console.error("[ReactNativeStorage] Error clearing storage:", error);
276
+ throw error;
277
+ }
278
+ }
279
+ addChangeListener(callback) {
280
+ if (!this.listeners.has("*")) {
281
+ this.listeners.set("*", /* @__PURE__ */ new Set());
282
+ }
283
+ this.listeners.get("*").add(callback);
284
+ return () => {
285
+ this.listeners.get("*")?.delete(callback);
286
+ };
287
+ }
288
+ notifyListeners(key, value) {
289
+ const globalListeners = this.listeners.get("*");
290
+ if (globalListeners) {
291
+ globalListeners.forEach((callback) => callback(key, value));
292
+ }
293
+ }
294
+ };
295
+
296
+ // src/request/adapters/react-native-adapter.ts
297
+ var ReactNativeRequestAdapter = class {
298
+ async request(config) {
299
+ const { url, method = "GET", headers = {}, body, params } = config;
300
+ let fullUrl = url;
301
+ if (params) {
302
+ const searchParams = new URLSearchParams();
303
+ Object.entries(params).forEach(([key, value]) => {
304
+ if (value !== void 0 && value !== null) {
305
+ searchParams.append(key, String(value));
306
+ }
307
+ });
308
+ const qs = searchParams.toString();
309
+ if (qs) {
310
+ fullUrl += url.includes("?") ? `&${qs}` : `?${qs}`;
311
+ }
312
+ }
313
+ const response = await fetch(fullUrl, {
314
+ method,
315
+ headers: {
316
+ "Content-Type": "application/json",
317
+ ...headers
318
+ },
319
+ body: body ? JSON.stringify(body) : void 0
320
+ });
321
+ const data = await response.json();
322
+ if (!response.ok) {
323
+ return {
324
+ success: false,
325
+ error: data.error ?? `\u8BF7\u6C42\u5931\u8D25 (${response.status})`
326
+ };
327
+ }
328
+ return data;
329
+ }
330
+ };
331
+
332
+ // src/common/auth/rn/client.ts
333
+ var cached = null;
334
+ var cachedBase = "";
335
+ function createRnAuthClient(authApiBase) {
336
+ const base = authApiBase.replace(/\/+$/, "");
337
+ if (cached && cachedBase === base) {
338
+ return cached;
339
+ }
340
+ const client = new BaseApiClient(
341
+ new ReactNativeStorageAdapter(),
342
+ new ReactNativeRequestAdapter(),
343
+ base
344
+ );
345
+ cached = client;
346
+ cachedBase = base;
347
+ return client;
348
+ }
349
+ async function initRnAuthClient(authApiBase) {
350
+ const client = createRnAuthClient(authApiBase);
351
+ await client.init();
352
+ return client;
353
+ }
354
+ function resetRnAuthClientCache() {
355
+ cached = null;
356
+ cachedBase = "";
357
+ }
358
+
359
+ // src/business/auth-legacy/utils/authUtils.ts
360
+ function validatePhoneNumber(phone) {
361
+ return /^1[3-9]\d{9}$/.test(phone);
362
+ }
363
+
364
+ // src/business/auth-legacy/rn/legacy-login.ts
365
+ async function loginWithLegacyPhone(authApiBase, phone, password) {
366
+ const trimmedPhone = phone.trim();
367
+ if (!trimmedPhone || !password) {
368
+ return { success: false, message: "\u8BF7\u586B\u5199\u624B\u673A\u53F7\u548C\u5BC6\u7801" };
369
+ }
370
+ if (!validatePhoneNumber(trimmedPhone)) {
371
+ return { success: false, message: "\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u624B\u673A\u53F7" };
372
+ }
373
+ const base = authApiBase.replace(/\/+$/, "");
374
+ const adapter = new ReactNativeRequestAdapter();
375
+ const data = await adapter.request({
376
+ url: `${base}/auth/login`,
377
+ method: "POST",
378
+ body: { phone: trimmedPhone, password }
379
+ });
380
+ if (!data.success) {
381
+ return {
382
+ success: false,
383
+ message: data.message ?? "\u767B\u5F55\u5931\u8D25"
384
+ };
385
+ }
386
+ const token = data.sessionToken ?? data.data?.sessionToken;
387
+ if (!token || token.length < 8) {
388
+ return { success: false, message: "\u767B\u5F55\u6210\u529F\u4F46\u672A\u8FD4\u56DE\u6709\u6548\u4F1A\u8BDD\u4EE4\u724C" };
389
+ }
390
+ return { success: true, token };
391
+ }
392
+ function isPhoneAccount(account) {
393
+ return validatePhoneNumber(account.trim());
394
+ }
395
+ function useAuth(apiClient) {
396
+ const [user, setUser] = React2.useState(null);
397
+ const [isLoggedIn, setIsLoggedIn] = React2.useState(false);
398
+ const [loading, setLoading] = React2.useState(false);
399
+ const [checkingAuth, setCheckingAuth] = React2.useState(true);
400
+ const [error, setError] = React2.useState(null);
401
+ const checkAuthStatus = React2.useCallback(async () => {
402
+ try {
403
+ setCheckingAuth(true);
404
+ setError(null);
405
+ const isAuth = await apiClient.isAuthenticated();
406
+ if (isAuth) {
407
+ const response = await apiClient.getCurrentUser();
408
+ if (response.success && response.data) {
409
+ setUser(response.data);
410
+ setIsLoggedIn(true);
411
+ } else {
412
+ await apiClient.clearUserData();
413
+ setUser(null);
414
+ setIsLoggedIn(false);
415
+ }
416
+ } else {
417
+ setUser(null);
418
+ setIsLoggedIn(false);
419
+ }
420
+ } catch (err) {
421
+ console.error("\u68C0\u67E5\u767B\u5F55\u72B6\u6001\u5931\u8D25:", err);
422
+ setError(err instanceof Error ? err.message : "\u68C0\u67E5\u767B\u5F55\u72B6\u6001\u5931\u8D25");
423
+ setUser(null);
424
+ setIsLoggedIn(false);
425
+ } finally {
426
+ setCheckingAuth(false);
427
+ }
428
+ }, [apiClient]);
429
+ const login = React2.useCallback(
430
+ async (email, password) => {
431
+ setLoading(true);
432
+ setError(null);
433
+ try {
434
+ const response = await apiClient.login(email, password);
435
+ if (response.success && response.data) {
436
+ setUser(response.data.user);
437
+ setIsLoggedIn(true);
438
+ return { success: true };
439
+ } else {
440
+ const errorMsg = response.error || "\u767B\u5F55\u5931\u8D25";
441
+ setError(errorMsg);
442
+ return { success: false, error: errorMsg };
443
+ }
444
+ } catch (err) {
445
+ const errorMsg = err instanceof Error ? err.message : "\u767B\u5F55\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5";
446
+ setError(errorMsg);
447
+ return { success: false, error: errorMsg };
448
+ } finally {
449
+ setLoading(false);
450
+ }
451
+ },
452
+ [apiClient]
453
+ );
454
+ const register = React2.useCallback(
455
+ async (email, password, username) => {
456
+ setLoading(true);
457
+ setError(null);
458
+ try {
459
+ const response = await apiClient.register(email, password, username);
460
+ if (response.success && response.data) {
461
+ setUser(response.data.user);
462
+ setIsLoggedIn(true);
463
+ return { success: true };
464
+ } else {
465
+ const errorMsg = response.error || "\u6CE8\u518C\u5931\u8D25";
466
+ setError(errorMsg);
467
+ return { success: false, error: errorMsg };
468
+ }
469
+ } catch (err) {
470
+ const errorMsg = err instanceof Error ? err.message : "\u6CE8\u518C\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5";
471
+ setError(errorMsg);
472
+ return { success: false, error: errorMsg };
473
+ } finally {
474
+ setLoading(false);
475
+ }
476
+ },
477
+ [apiClient]
478
+ );
479
+ const logout = React2.useCallback(async () => {
480
+ setLoading(true);
481
+ setError(null);
482
+ try {
483
+ await apiClient.logout();
484
+ setUser(null);
485
+ setIsLoggedIn(false);
486
+ } catch (err) {
487
+ console.error("\u767B\u51FA\u5931\u8D25:", err);
488
+ setError(err instanceof Error ? err.message : "\u767B\u51FA\u5931\u8D25");
489
+ setUser(null);
490
+ setIsLoggedIn(false);
491
+ } finally {
492
+ setLoading(false);
493
+ }
494
+ }, [apiClient]);
495
+ const clearError = React2.useCallback(() => {
496
+ setError(null);
497
+ }, []);
498
+ React2.useEffect(() => {
499
+ checkAuthStatus();
500
+ }, [checkAuthStatus]);
501
+ return {
502
+ // 状态
503
+ user,
504
+ isLoggedIn,
505
+ loading,
506
+ checkingAuth,
507
+ error,
508
+ // 操作方法
509
+ login,
510
+ register,
511
+ logout,
512
+ refresh: checkAuthStatus,
513
+ clearError
514
+ };
515
+ }
516
+
517
+ // src/common/auth/components/LoginForm.tsx
518
+ function LoginForm({ apiClient, onSuccess, onError, children }) {
519
+ const { login, loading, error: authError, clearError } = useAuth(apiClient);
520
+ const [email, setEmail] = React2.useState("");
521
+ const [password, setPassword] = React2.useState("");
522
+ const handleSubmit = async (e) => {
523
+ if (e) {
524
+ e.preventDefault();
525
+ }
526
+ clearError();
527
+ const result = await login(email, password);
528
+ if (result.success) {
529
+ const currentUser = apiClient.getUser();
530
+ if (currentUser) {
531
+ onSuccess?.(currentUser);
532
+ }
533
+ } else {
534
+ onError?.(result.error || "\u767B\u5F55\u5931\u8D25");
535
+ }
536
+ };
537
+ const state = {
538
+ email,
539
+ password,
540
+ loading,
541
+ error: authError,
542
+ handleEmailChange: setEmail,
543
+ handlePasswordChange: setPassword,
544
+ handleSubmit
545
+ };
546
+ return /* @__PURE__ */ React2__default.default.createElement(React2__default.default.Fragment, null, children(state));
547
+ }
548
+
549
+ // src/business/auth-legacy/rn/components/AccountLoginForm.tsx
550
+ var ReactNative = __require("react-native");
551
+ var { ActivityIndicator, Pressable, Text, TextInput, View, StyleSheet } = ReactNative;
552
+ var defaultStyles = StyleSheet.create({
553
+ label: { fontSize: 12, color: "#8b98a5", marginBottom: 6, marginTop: 12 },
554
+ input: {
555
+ borderWidth: 1,
556
+ borderColor: "rgba(255,255,255,0.12)",
557
+ borderRadius: 10,
558
+ paddingHorizontal: 12,
559
+ paddingVertical: 10,
560
+ color: "#e8edf2",
561
+ backgroundColor: "rgba(0,0,0,0.2)",
562
+ fontSize: 15
563
+ },
564
+ err: { color: "#f87171", marginTop: 10, fontSize: 14 },
565
+ btn: {
566
+ marginTop: 14,
567
+ paddingVertical: 12,
568
+ borderRadius: 10,
569
+ alignItems: "center",
570
+ borderWidth: 1,
571
+ borderColor: "rgba(255,255,255,0.12)",
572
+ backgroundColor: "rgba(255,255,255,0.08)"
573
+ },
574
+ primary: { backgroundColor: "#3d9eff", borderColor: "transparent" },
575
+ disabled: { opacity: 0.6 },
576
+ btnTextPrimary: { color: "#fff", fontSize: 15, fontWeight: "600" },
577
+ centerInline: { paddingVertical: 24, alignItems: "center" }
578
+ });
579
+ var DEFAULT_LABELS = {
580
+ authApiBase: "\u8BA4\u8BC1 API \u6839\u5730\u5740\uFF08\u542B /api\uFF09",
581
+ phone: "\u624B\u673A\u53F7",
582
+ email: "\u90AE\u7BB1",
583
+ password: "\u5BC6\u7801",
584
+ submit: "\u767B\u5F55"
585
+ };
586
+ function RnAccountLoginForm({
587
+ authApiBase,
588
+ defaultAuthApiBase = "",
589
+ onAuthApiBaseChange,
590
+ submitting = false,
591
+ error = "",
592
+ onError,
593
+ onSuccess,
594
+ theme,
595
+ labels: labelsProp,
596
+ placeholders
597
+ }) {
598
+ const labels = { ...DEFAULT_LABELS, ...labelsProp };
599
+ const [apiClient, setApiClient] = React2.useState(null);
600
+ const [account, setAccount] = React2.useState("");
601
+ const [password, setPassword] = React2.useState("");
602
+ const [useLegacyPhone, setUseLegacyPhone] = React2.useState(true);
603
+ React2.useEffect(() => {
604
+ let cancelled = false;
605
+ const base = authApiBase.trim() || defaultAuthApiBase;
606
+ if (!base) {
607
+ setApiClient(null);
608
+ return;
609
+ }
610
+ resetRnAuthClientCache();
611
+ initRnAuthClient(base).then((c) => {
612
+ if (!cancelled) {
613
+ setApiClient(c);
614
+ }
615
+ });
616
+ return () => {
617
+ cancelled = true;
618
+ };
619
+ }, [authApiBase, defaultAuthApiBase]);
620
+ React2.useEffect(() => {
621
+ const trimmed = account.trim();
622
+ if (!trimmed) {
623
+ setUseLegacyPhone(true);
624
+ return;
625
+ }
626
+ setUseLegacyPhone(isPhoneAccount(trimmed));
627
+ }, [account]);
628
+ const handleLegacySubmit = React2.useCallback(async () => {
629
+ const base = authApiBase.trim() || defaultAuthApiBase;
630
+ onError?.("");
631
+ const result = await loginWithLegacyPhone(base, account, password);
632
+ if (!result.success || !result.token) {
633
+ onError?.(result.message ?? "\u767B\u5F55\u5931\u8D25");
634
+ return;
635
+ }
636
+ await onSuccess(result.token);
637
+ }, [account, authApiBase, defaultAuthApiBase, onError, onSuccess, password]);
638
+ const authApiField = onAuthApiBaseChange ? /* @__PURE__ */ React2__default.default.createElement(React2__default.default.Fragment, null, /* @__PURE__ */ React2__default.default.createElement(Text, { style: [defaultStyles.label, theme?.label] }, labels.authApiBase), /* @__PURE__ */ React2__default.default.createElement(
639
+ TextInput,
640
+ {
641
+ style: [defaultStyles.input, theme?.input, theme?.inputContainer],
642
+ value: authApiBase,
643
+ onChangeText: onAuthApiBaseChange,
644
+ autoCapitalize: "none",
645
+ autoCorrect: false,
646
+ placeholder: placeholders?.authApiBase ?? defaultAuthApiBase,
647
+ placeholderTextColor: "#6b7a8a"
648
+ }
649
+ )) : null;
650
+ if (!apiClient) {
651
+ return /* @__PURE__ */ React2__default.default.createElement(View, { style: [defaultStyles.centerInline, theme?.loadingContainer] }, /* @__PURE__ */ React2__default.default.createElement(ActivityIndicator, null));
652
+ }
653
+ if (useLegacyPhone) {
654
+ return /* @__PURE__ */ React2__default.default.createElement(React2__default.default.Fragment, null, authApiField, /* @__PURE__ */ React2__default.default.createElement(Text, { style: [defaultStyles.label, theme?.label] }, labels.phone), /* @__PURE__ */ React2__default.default.createElement(
655
+ TextInput,
656
+ {
657
+ style: [defaultStyles.input, theme?.input, theme?.inputContainer],
658
+ value: account,
659
+ onChangeText: setAccount,
660
+ keyboardType: "phone-pad",
661
+ autoCapitalize: "none",
662
+ autoCorrect: false,
663
+ placeholder: placeholders?.phone ?? "13800138000",
664
+ placeholderTextColor: "#6b7a8a"
665
+ }
666
+ ), /* @__PURE__ */ React2__default.default.createElement(Text, { style: [defaultStyles.label, theme?.label] }, labels.password), /* @__PURE__ */ React2__default.default.createElement(
667
+ TextInput,
668
+ {
669
+ style: [defaultStyles.input, theme?.input, theme?.inputContainer],
670
+ value: password,
671
+ onChangeText: setPassword,
672
+ secureTextEntry: true,
673
+ autoCapitalize: "none",
674
+ autoCorrect: false,
675
+ placeholder: placeholders?.password ?? "\u5BC6\u7801",
676
+ placeholderTextColor: "#6b7a8a"
677
+ }
678
+ ), error ? /* @__PURE__ */ React2__default.default.createElement(Text, { style: [defaultStyles.err, theme?.error] }, error) : null, /* @__PURE__ */ React2__default.default.createElement(
679
+ Pressable,
680
+ {
681
+ style: [
682
+ defaultStyles.btn,
683
+ defaultStyles.primary,
684
+ theme?.button,
685
+ theme?.buttonPrimary,
686
+ submitting && (theme?.buttonDisabled ?? defaultStyles.disabled)
687
+ ],
688
+ onPress: handleLegacySubmit,
689
+ disabled: submitting
690
+ },
691
+ submitting ? /* @__PURE__ */ React2__default.default.createElement(ActivityIndicator, { color: "#fff" }) : /* @__PURE__ */ React2__default.default.createElement(Text, { style: [defaultStyles.btnTextPrimary, theme?.buttonTextPrimary] }, labels.submit)
692
+ ));
693
+ }
694
+ return /* @__PURE__ */ React2__default.default.createElement(React2__default.default.Fragment, null, authApiField, /* @__PURE__ */ React2__default.default.createElement(
695
+ LoginForm,
696
+ {
697
+ apiClient,
698
+ onSuccess: () => {
699
+ const tok = apiClient.getToken();
700
+ if (tok) {
701
+ void onSuccess(tok);
702
+ } else {
703
+ onError?.("\u767B\u5F55\u6210\u529F\u4F46\u672A\u83B7\u53D6\u5230\u4EE4\u724C");
704
+ }
705
+ },
706
+ onError: (msg) => onError?.(msg)
707
+ },
708
+ ({
709
+ email,
710
+ password: pwd,
711
+ loading,
712
+ error: formErr,
713
+ handleEmailChange,
714
+ handlePasswordChange,
715
+ handleSubmit
716
+ }) => /* @__PURE__ */ React2__default.default.createElement(React2__default.default.Fragment, null, /* @__PURE__ */ React2__default.default.createElement(Text, { style: [defaultStyles.label, theme?.label] }, labels.email), /* @__PURE__ */ React2__default.default.createElement(
717
+ TextInput,
718
+ {
719
+ style: [defaultStyles.input, theme?.input, theme?.inputContainer],
720
+ value: email,
721
+ onChangeText: handleEmailChange,
722
+ keyboardType: "email-address",
723
+ autoCapitalize: "none",
724
+ autoCorrect: false,
725
+ placeholder: placeholders?.email ?? "user@example.com",
726
+ placeholderTextColor: "#6b7a8a"
727
+ }
728
+ ), /* @__PURE__ */ React2__default.default.createElement(Text, { style: [defaultStyles.label, theme?.label] }, labels.password), /* @__PURE__ */ React2__default.default.createElement(
729
+ TextInput,
730
+ {
731
+ style: [defaultStyles.input, theme?.input, theme?.inputContainer],
732
+ value: pwd,
733
+ onChangeText: handlePasswordChange,
734
+ secureTextEntry: true,
735
+ autoCapitalize: "none",
736
+ autoCorrect: false,
737
+ placeholder: placeholders?.password ?? "\u5BC6\u7801",
738
+ placeholderTextColor: "#6b7a8a"
739
+ }
740
+ ), formErr || error ? /* @__PURE__ */ React2__default.default.createElement(Text, { style: [defaultStyles.err, theme?.error] }, formErr ?? error) : null, /* @__PURE__ */ React2__default.default.createElement(
741
+ Pressable,
742
+ {
743
+ style: [
744
+ defaultStyles.btn,
745
+ defaultStyles.primary,
746
+ theme?.button,
747
+ theme?.buttonPrimary,
748
+ (loading || submitting) && (theme?.buttonDisabled ?? defaultStyles.disabled)
749
+ ],
750
+ onPress: () => handleSubmit(),
751
+ disabled: loading || submitting
752
+ },
753
+ loading || submitting ? /* @__PURE__ */ React2__default.default.createElement(ActivityIndicator, { color: "#fff" }) : /* @__PURE__ */ React2__default.default.createElement(Text, { style: [defaultStyles.btnTextPrimary, theme?.buttonTextPrimary] }, labels.submit)
754
+ ))
755
+ ));
756
+ }
757
+
758
+ exports.RnAccountLoginForm = RnAccountLoginForm;
759
+ exports.createRnAuthClient = createRnAuthClient;
760
+ exports.initRnAuthClient = initRnAuthClient;
761
+ exports.isPhoneAccount = isPhoneAccount;
762
+ exports.loginWithLegacyPhone = loginWithLegacyPhone;
763
+ exports.resetRnAuthClientCache = resetRnAuthClientCache;
764
+ //# sourceMappingURL=index.js.map
765
+ //# sourceMappingURL=index.js.map