@round2ai/r2-cli 1.0.2 → 1.0.4

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 (161) hide show
  1. package/README.md +159 -75
  2. package/dist/README.md +221 -0
  3. package/dist/package.json +55 -0
  4. package/dist/r2-cli.js +28 -0
  5. package/package.json +26 -22
  6. package/dist/api.d.ts +0 -45
  7. package/dist/api.d.ts.map +0 -1
  8. package/dist/api.js +0 -90
  9. package/dist/api.js.map +0 -1
  10. package/dist/auth.d.ts +0 -35
  11. package/dist/auth.d.ts.map +0 -1
  12. package/dist/auth.js +0 -240
  13. package/dist/auth.js.map +0 -1
  14. package/dist/commands/ai/chat.d.ts +0 -9
  15. package/dist/commands/ai/chat.d.ts.map +0 -1
  16. package/dist/commands/ai/chat.js +0 -16
  17. package/dist/commands/ai/chat.js.map +0 -1
  18. package/dist/commands/ai/skills.d.ts +0 -9
  19. package/dist/commands/ai/skills.d.ts.map +0 -1
  20. package/dist/commands/ai/skills.js +0 -16
  21. package/dist/commands/ai/skills.js.map +0 -1
  22. package/dist/commands/auth/login.d.ts +0 -24
  23. package/dist/commands/auth/login.d.ts.map +0 -1
  24. package/dist/commands/auth/login.js +0 -288
  25. package/dist/commands/auth/login.js.map +0 -1
  26. package/dist/commands/auth/logout.d.ts +0 -16
  27. package/dist/commands/auth/logout.d.ts.map +0 -1
  28. package/dist/commands/auth/logout.js +0 -49
  29. package/dist/commands/auth/logout.js.map +0 -1
  30. package/dist/commands/auth/status.d.ts +0 -28
  31. package/dist/commands/auth/status.d.ts.map +0 -1
  32. package/dist/commands/auth/status.js +0 -92
  33. package/dist/commands/auth/status.js.map +0 -1
  34. package/dist/commands/base.d.ts +0 -107
  35. package/dist/commands/base.d.ts.map +0 -1
  36. package/dist/commands/base.js +0 -153
  37. package/dist/commands/base.js.map +0 -1
  38. package/dist/commands/business/pricing.d.ts +0 -9
  39. package/dist/commands/business/pricing.d.ts.map +0 -1
  40. package/dist/commands/business/pricing.js +0 -16
  41. package/dist/commands/business/pricing.js.map +0 -1
  42. package/dist/commands/business/report.d.ts +0 -9
  43. package/dist/commands/business/report.d.ts.map +0 -1
  44. package/dist/commands/business/report.js +0 -16
  45. package/dist/commands/business/report.js.map +0 -1
  46. package/dist/commands/inventory/risk.d.ts +0 -9
  47. package/dist/commands/inventory/risk.d.ts.map +0 -1
  48. package/dist/commands/inventory/risk.js +0 -16
  49. package/dist/commands/inventory/risk.js.map +0 -1
  50. package/dist/config.d.ts +0 -54
  51. package/dist/config.d.ts.map +0 -1
  52. package/dist/config.js +0 -111
  53. package/dist/config.js.map +0 -1
  54. package/dist/index.d.ts +0 -7
  55. package/dist/index.d.ts.map +0 -1
  56. package/dist/index.js +0 -186
  57. package/dist/index.js.map +0 -1
  58. package/dist/query/executor.d.ts +0 -138
  59. package/dist/query/executor.d.ts.map +0 -1
  60. package/dist/query/executor.js +0 -232
  61. package/dist/query/executor.js.map +0 -1
  62. package/dist/query/types.d.ts +0 -116
  63. package/dist/query/types.d.ts.map +0 -1
  64. package/dist/query/types.js +0 -15
  65. package/dist/query/types.js.map +0 -1
  66. package/dist/query/utils.d.ts +0 -99
  67. package/dist/query/utils.d.ts.map +0 -1
  68. package/dist/query/utils.js +0 -151
  69. package/dist/query/utils.js.map +0 -1
  70. package/dist/services/ServiceContainer.d.ts +0 -110
  71. package/dist/services/ServiceContainer.d.ts.map +0 -1
  72. package/dist/services/ServiceContainer.js +0 -242
  73. package/dist/services/ServiceContainer.js.map +0 -1
  74. package/dist/services/api/client.d.ts +0 -88
  75. package/dist/services/api/client.d.ts.map +0 -1
  76. package/dist/services/api/client.js +0 -188
  77. package/dist/services/api/client.js.map +0 -1
  78. package/dist/services/api/types.d.ts +0 -233
  79. package/dist/services/api/types.d.ts.map +0 -1
  80. package/dist/services/api/types.js +0 -83
  81. package/dist/services/api/types.js.map +0 -1
  82. package/dist/services/auth/provider.d.ts +0 -73
  83. package/dist/services/auth/provider.d.ts.map +0 -1
  84. package/dist/services/auth/provider.js +0 -339
  85. package/dist/services/auth/provider.js.map +0 -1
  86. package/dist/services/auth/session.d.ts +0 -73
  87. package/dist/services/auth/session.d.ts.map +0 -1
  88. package/dist/services/auth/session.js +0 -200
  89. package/dist/services/auth/session.js.map +0 -1
  90. package/dist/services/business/demand.d.ts +0 -70
  91. package/dist/services/business/demand.d.ts.map +0 -1
  92. package/dist/services/business/demand.js +0 -240
  93. package/dist/services/business/demand.js.map +0 -1
  94. package/dist/services/business/fulfillment.d.ts +0 -122
  95. package/dist/services/business/fulfillment.d.ts.map +0 -1
  96. package/dist/services/business/fulfillment.js +0 -267
  97. package/dist/services/business/fulfillment.js.map +0 -1
  98. package/dist/services/business/inventory.d.ts +0 -54
  99. package/dist/services/business/inventory.d.ts.map +0 -1
  100. package/dist/services/business/inventory.js +0 -245
  101. package/dist/services/business/inventory.js.map +0 -1
  102. package/dist/services/business/pricing.d.ts +0 -41
  103. package/dist/services/business/pricing.d.ts.map +0 -1
  104. package/dist/services/business/pricing.js +0 -133
  105. package/dist/services/business/pricing.js.map +0 -1
  106. package/dist/services/business/report.d.ts +0 -74
  107. package/dist/services/business/report.d.ts.map +0 -1
  108. package/dist/services/business/report.js +0 -380
  109. package/dist/services/business/report.js.map +0 -1
  110. package/dist/services/config/manager.d.ts +0 -105
  111. package/dist/services/config/manager.d.ts.map +0 -1
  112. package/dist/services/config/manager.js +0 -324
  113. package/dist/services/config/manager.js.map +0 -1
  114. package/dist/services/config/types.d.ts +0 -128
  115. package/dist/services/config/types.d.ts.map +0 -1
  116. package/dist/services/config/types.js +0 -209
  117. package/dist/services/config/types.js.map +0 -1
  118. package/dist/services/index.d.ts +0 -17
  119. package/dist/services/index.d.ts.map +0 -1
  120. package/dist/services/index.js +0 -44
  121. package/dist/services/index.js.map +0 -1
  122. package/dist/services/storage/index.d.ts +0 -63
  123. package/dist/services/storage/index.d.ts.map +0 -1
  124. package/dist/services/storage/index.js +0 -136
  125. package/dist/services/storage/index.js.map +0 -1
  126. package/dist/types/api.d.ts +0 -58
  127. package/dist/types/api.d.ts.map +0 -1
  128. package/dist/types/api.js +0 -5
  129. package/dist/types/api.js.map +0 -1
  130. package/dist/types/auth.d.ts +0 -59
  131. package/dist/types/auth.d.ts.map +0 -1
  132. package/dist/types/auth.js +0 -11
  133. package/dist/types/auth.js.map +0 -1
  134. package/dist/types/business.d.ts +0 -201
  135. package/dist/types/business.d.ts.map +0 -1
  136. package/dist/types/business.js +0 -5
  137. package/dist/types/business.js.map +0 -1
  138. package/dist/types/command.d.ts +0 -106
  139. package/dist/types/command.d.ts.map +0 -1
  140. package/dist/types/command.js +0 -5
  141. package/dist/types/command.js.map +0 -1
  142. package/dist/types/config.d.ts +0 -66
  143. package/dist/types/config.d.ts.map +0 -1
  144. package/dist/types/config.js +0 -5
  145. package/dist/types/config.js.map +0 -1
  146. package/dist/utils/async.d.ts +0 -79
  147. package/dist/utils/async.d.ts.map +0 -1
  148. package/dist/utils/async.js +0 -179
  149. package/dist/utils/async.js.map +0 -1
  150. package/dist/utils/format.d.ts +0 -90
  151. package/dist/utils/format.d.ts.map +0 -1
  152. package/dist/utils/format.js +0 -227
  153. package/dist/utils/format.js.map +0 -1
  154. package/dist/utils/logger.d.ts +0 -136
  155. package/dist/utils/logger.d.ts.map +0 -1
  156. package/dist/utils/logger.js +0 -249
  157. package/dist/utils/logger.js.map +0 -1
  158. package/dist/utils/validation.d.ts +0 -100
  159. package/dist/utils/validation.d.ts.map +0 -1
  160. package/dist/utils/validation.js +0 -334
  161. package/dist/utils/validation.js.map +0 -1
@@ -1,339 +0,0 @@
1
- /**
2
- * 认证提供者 - 重构自 auth.ts
3
- */
4
- import chalk from "chalk";
5
- import open from "open";
6
- import inquirer from "inquirer";
7
- import { IAuthProvider, AuthSession, AuthStatus, UserInfo, QrCodeResponse, LoginStatusResponse, UserConfig, AuthConfig } from "../../types/auth.js";
8
- import { apiClient } from "../api/client.js";
9
- import { readConfig, writeConfig } from "../../services/config/manager.js";
10
- import { logger } from "../../utils/logger.js";
11
- import { format } from "../../utils/format.js";
12
- import { delay, retry } from "../../utils/async.js";
13
- /**
14
- * 认证提供者实现
15
- */
16
- export class AuthProvider {
17
- config;
18
- CONFIG_FILE = "~/.r2-cli/config.json";
19
- constructor() {
20
- this.config = { api: {}, auth: {} };
21
- }
22
- /**
23
- * 生成登录二维码
24
- */
25
- async generateQrCode() {
26
- logger.info("正在生成二维码...");
27
- try {
28
- const response = await apiClient.post("/auth/qrcode");
29
- logger.debug("二维码生成成功", response.data);
30
- return response.data;
31
- }
32
- catch (error) {
33
- logger.warn("API 生成二维码失败,使用模拟模式");
34
- // 使用模拟模式
35
- const timestamp = Date.now();
36
- return {
37
- qrCodeUrl: `https://round2ai.com/auth/qr/${timestamp}`,
38
- qrCodeData: `r2://auth/login/${timestamp}`,
39
- expireIn: 300,
40
- loginId: `login-${timestamp}`,
41
- };
42
- }
43
- }
44
- /**
45
- * 检查登录状态
46
- */
47
- async checkLoginStatus(loginId) {
48
- try {
49
- const response = await apiClient.get(`/auth/qrcode/${loginId}/status`);
50
- return response.data;
51
- }
52
- catch (error) {
53
- logger.debug("API 检查登录状态失败,使用模拟状态");
54
- // 返回模拟的登录状态
55
- return {
56
- status: "confirmed",
57
- userId: "user-123456",
58
- username: "test_user",
59
- accessToken: `mock-access-token-${Date.now()}`,
60
- refreshToken: `mock-refresh-token-${Date.now()}`,
61
- expiresIn: 7200,
62
- };
63
- }
64
- }
65
- /**
66
- * 保存认证会话
67
- */
68
- async saveAuthSession(session) {
69
- const config = await readConfig();
70
- config.auth = {
71
- accessToken: session.accessToken,
72
- refreshToken: session.refreshToken,
73
- userId: session.userId,
74
- username: session.username,
75
- expiresAt: session.expiresAt,
76
- };
77
- await writeConfig(config);
78
- this.config = config;
79
- // 更新 API 客户端的令牌
80
- apiClient.setAccessToken(session.accessToken);
81
- logger.info("认证会话已保存");
82
- }
83
- /**
84
- * 清除认证会话
85
- */
86
- async clearAuthSession() {
87
- const config = await readConfig();
88
- delete config.auth;
89
- await writeConfig(config);
90
- this.config = config;
91
- // 清除 API 客户端的令牌
92
- apiClient.clearToken();
93
- logger.info("认证会话已清除");
94
- }
95
- /**
96
- * 获取认证状态
97
- */
98
- async getAuthStatus() {
99
- const config = await readConfig();
100
- this.config = config;
101
- const isAuthenticated = config.auth?.accessToken && config.auth?.expiresAt
102
- ? config.auth.expiresAt > Date.now()
103
- : false;
104
- const isExpired = config.auth?.expiresAt
105
- ? config.auth.expiresAt <= Date.now()
106
- : false;
107
- return {
108
- isAuthenticated,
109
- user: config.auth ? {
110
- userId: config.auth.userId,
111
- username: config.auth.username,
112
- email: undefined,
113
- phone: undefined,
114
- } : undefined,
115
- expiresAt: config.auth?.expiresAt,
116
- isExpired,
117
- };
118
- }
119
- /**
120
- * 获取访问令牌
121
- */
122
- async getAccessToken() {
123
- const config = await readConfig();
124
- this.config = config;
125
- if (!config.auth?.accessToken) {
126
- return null;
127
- }
128
- // 检查令牌是否过期
129
- if (config.auth.expiresAt && config.auth.expiresAt <= Date.now()) {
130
- return null;
131
- }
132
- return config.auth.accessToken;
133
- }
134
- /**
135
- * 获取当前用户信息
136
- */
137
- async getCurrentUser() {
138
- const config = await readConfig();
139
- this.config = config;
140
- if (!config.auth?.userId || !config.auth?.username) {
141
- return null;
142
- }
143
- try {
144
- // 尝试从 API 获取完整信息
145
- const response = await apiClient.get("/auth/user");
146
- return {
147
- userId: config.auth.userId,
148
- username: config.auth.username,
149
- email: response.data.email,
150
- phone: response.data.phone,
151
- };
152
- }
153
- catch (error) {
154
- // API 调用失败,返回缓存信息
155
- logger.warn("获取用户详细信息失败,返回缓存信息");
156
- return {
157
- userId: config.auth.userId,
158
- username: config.auth.username,
159
- email: undefined,
160
- phone: undefined,
161
- };
162
- }
163
- }
164
- /**
165
- * 登出
166
- */
167
- async logout() {
168
- try {
169
- await apiClient.post("/auth/logout");
170
- }
171
- catch (error) {
172
- logger.warn("后端登出请求失败,仅清除本地缓存");
173
- }
174
- finally {
175
- await this.clearAuthSession();
176
- }
177
- }
178
- /**
179
- * 执行扫码登录
180
- */
181
- async performQrCodeLogin() {
182
- // 检查是否已登录
183
- const status = await this.getAuthStatus();
184
- if (status.isAuthenticated) {
185
- const user = await this.getCurrentUser();
186
- if (user) {
187
- console.log(chalk.green("✅ 您已登录"));
188
- console.log(chalk.cyan(` 用户: ${user.username}`));
189
- return;
190
- }
191
- }
192
- try {
193
- // 生成二维码
194
- const qrCode = await this.generateQrCode();
195
- this.displayQrCode(qrCode.qrCodeUrl, qrCode.qrCodeData);
196
- // 询问是否自动打开浏览器
197
- console.log(chalk.yellow("💡 提示: 您可以手动访问上方链接,或按回车自动打开浏览器"));
198
- // 轮询登录状态
199
- const result = await this.pollLoginStatus(qrCode.loginId, (status) => {
200
- if (status === "scanned") {
201
- console.log(chalk.yellow("📱 已扫描二维码,请在手机上确认登录"));
202
- }
203
- });
204
- // 保存登录信息
205
- if (result.accessToken && result.refreshToken && result.userId && result.username) {
206
- await this.saveAuthSession({
207
- accessToken: result.accessToken,
208
- refreshToken: result.refreshToken,
209
- userId: result.userId,
210
- username: result.username,
211
- expiresAt: Date.now() + (result.expiresIn || 7200) * 1000,
212
- });
213
- console.log(chalk.green("\n✅ 登录成功!"));
214
- console.log(chalk.cyan(` 欢迎,${result.username}!\n`));
215
- }
216
- else {
217
- throw new Error("登录信息不完整");
218
- }
219
- }
220
- catch (error) {
221
- console.error(chalk.red(`\n❌ 登录失败: ${error instanceof Error ? error.message : "未知错误"}`));
222
- // 提供模拟登录选项
223
- console.log(chalk.blue("\n💡 是否使用模拟登录演示功能?"));
224
- const { mockLogin } = await inquirer.prompt([
225
- {
226
- type: "confirm",
227
- name: "mockLogin",
228
- message: "使用模拟登录(仅演示)",
229
- default: true,
230
- },
231
- ]);
232
- if (mockLogin) {
233
- await this.mockQrCodeLogin();
234
- }
235
- }
236
- }
237
- /**
238
- * 显示二维码
239
- */
240
- displayQrCode(qrCodeUrl, qrCodeData) {
241
- console.log(chalk.blue("\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"));
242
- console.log(chalk.cyan(" 📱 扫码登录 Round2AI"));
243
- console.log(chalk.blue("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"));
244
- // 如果有 qrcode-terminal 库,可以使用它显示真实二维码
245
- try {
246
- import("qrcode-terminal").then(({ default: qrcode }) => {
247
- qrcode.generate(qrCodeData, { small: true });
248
- }).catch(() => {
249
- // 没有安装 qrcode-terminal,显示占位符
250
- this.displayQrCodePlaceholder();
251
- });
252
- }
253
- catch {
254
- this.displayQrCodePlaceholder();
255
- }
256
- console.log(chalk.yellow("\n🔗 登录链接:"));
257
- console.log(chalk.cyan(` ${qrCodeUrl}\n`));
258
- }
259
- /**
260
- * 显示二维码占位符
261
- */
262
- displayQrCodePlaceholder() {
263
- console.log(chalk.gray("┌────────────────────────────────────┐"));
264
- console.log(chalk.gray("│ │"));
265
- console.log(chalk.gray("│ [ 二维码显示区域 ] │"));
266
- console.log(chalk.gray("│ │"));
267
- console.log(chalk.gray("└────────────────────────────────────┘"));
268
- }
269
- /**
270
- * 轮询登录状态
271
- */
272
- async pollLoginStatus(loginId, onStatusChange) {
273
- const maxAttempts = 60;
274
- const interval = 5000;
275
- for (let attempt = 0; attempt < maxAttempts; attempt++) {
276
- const status = await this.checkLoginStatus(loginId);
277
- if (onStatusChange && status.status !== "pending") {
278
- onStatusChange(status.status);
279
- }
280
- switch (status.status) {
281
- case "confirmed":
282
- return status;
283
- case "expired":
284
- throw new Error("二维码已过期,请重新获取");
285
- case "canceled":
286
- throw new Error("用户取消登录");
287
- case "scanned":
288
- console.log(chalk.yellow("⏳ 已扫码,请在手机上确认登录..."));
289
- break;
290
- case "pending":
291
- console.log(chalk.gray("⏳ 等待扫码..."));
292
- break;
293
- }
294
- await delay(interval);
295
- }
296
- throw new Error("登录超时,请重试");
297
- }
298
- /**
299
- * 模拟扫码登录
300
- */
301
- async mockQrCodeLogin() {
302
- console.log(chalk.blue("\n📱 模拟扫码登录演示"));
303
- console.log(chalk.blue("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"));
304
- const mockQrCodeData = `r2://auth/mock/${Date.now()}`;
305
- const mockQrCodeUrl = `https://round2ai.com/auth/demo/${Date.now()}`;
306
- this.displayQrCode(mockQrCodeUrl, mockQrCodeData);
307
- console.log(chalk.yellow("\n🔗 演示链接:"));
308
- console.log(chalk.cyan(` ${mockQrCodeUrl}`));
309
- console.log(chalk.gray(" (此为演示二维码,扫码无实际效果)\n"));
310
- // 模拟等待扫码和确认
311
- console.log(chalk.yellow("⏳ 模拟扫码中..."));
312
- await delay(1500);
313
- console.log(chalk.yellow("⏳ 模拟手机确认中..."));
314
- await delay(1500);
315
- // 模拟登录成功
316
- const mockUserInfo = {
317
- accessToken: `mock-access-token-${Date.now()}`,
318
- refreshToken: `mock-refresh-token-${Date.now()}`,
319
- userId: "user-123456",
320
- username: "demo_user",
321
- expiresAt: Date.now() + 7200 * 1000,
322
- };
323
- // 保存登录信息
324
- await this.saveAuthSession(mockUserInfo);
325
- console.log(chalk.green("\n✅ 模拟登录成功!"));
326
- console.log(chalk.cyan(` 欢迎,${mockUserInfo.username}!\n`));
327
- }
328
- }
329
- /**
330
- * 创建认证提供者
331
- */
332
- export function createAuthProvider() {
333
- return new AuthProvider();
334
- }
335
- /**
336
- * 默认认证提供者
337
- */
338
- export const authProvider = new AuthProvider();
339
- //# sourceMappingURL=provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/services/auth/provider.ts"],"names":[],"mappings":"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"}
@@ -1,73 +0,0 @@
1
- /**
2
- * 会话管理器
3
- */
4
- import { UserInfo } from "../../types/auth.js";
5
- /**
6
- * 会话状态
7
- */
8
- export declare enum SessionState {
9
- UNKNOWN = "unknown",
10
- VALID = "valid",
11
- EXPIRED = "expired",
12
- INVALID = "invalid"
13
- }
14
- /**
15
- * 会话信息
16
- */
17
- export interface SessionInfo {
18
- state: SessionState;
19
- user?: UserInfo;
20
- expiresAt?: number;
21
- timeUntilExpiry?: number;
22
- }
23
- /**
24
- * 会话管理器
25
- */
26
- export declare class SessionManager {
27
- /**
28
- * 获取会话信息
29
- */
30
- getSession(): Promise<SessionInfo>;
31
- /**
32
- * 验证会话
33
- */
34
- validateSession(): Promise<boolean>;
35
- /**
36
- * 刷新会话
37
- */
38
- refreshSession(): Promise<SessionInfo | null>;
39
- /**
40
- * 检查会话是否即将过期
41
- */
42
- isSessionExpiringSoon(threshold?: number): Promise<boolean>;
43
- /**
44
- * 获取剩余会话时间
45
- */
46
- getRemainingSessionTime(): Promise<number>;
47
- /**
48
- * 格式化会话信息
49
- */
50
- formatSessionInfo(session: SessionInfo): string;
51
- /**
52
- * 获取会话统计信息
53
- */
54
- getSessionStats(): Promise<{
55
- isValid: boolean;
56
- isExpiringSoon: boolean;
57
- remainingTime: number;
58
- user?: UserInfo;
59
- }>;
60
- /**
61
- * 会话过期监听器
62
- */
63
- createSessionExpiryListener(callback: () => void): () => void;
64
- }
65
- /**
66
- * 创建会话管理器
67
- */
68
- export declare function createSessionManager(): SessionManager;
69
- /**
70
- * 默认会话管理器
71
- */
72
- export declare const sessionManager: SessionManager;
73
- //# sourceMappingURL=session.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/services/auth/session.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAe,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAI5D;;GAEG;AACH,oBAAY,YAAY;IACtB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;IAwCxC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAWzC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAsBnD;;OAEG;IACG,qBAAqB,CAAC,SAAS,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAUjE;;OAEG;IACG,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC;IAUhD;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM;IAyB/C;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC;QAC/B,OAAO,EAAE,OAAO,CAAC;QACjB,cAAc,EAAE,OAAO,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB,IAAI,CAAC,EAAE,QAAQ,CAAC;KACjB,CAAC;IAaF;;OAEG;IACH,2BAA2B,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;CA6C9D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAErD;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
@@ -1,200 +0,0 @@
1
- /**
2
- * 会话管理器
3
- */
4
- import { AuthSession, UserInfo } from "../../types/auth.js";
5
- import { logger } from "../../utils/logger.js";
6
- import { readConfig, writeConfig } from "../../services/config/manager.js";
7
- /**
8
- * 会话状态
9
- */
10
- export var SessionState;
11
- (function (SessionState) {
12
- SessionState["UNKNOWN"] = "unknown";
13
- SessionState["VALID"] = "valid";
14
- SessionState["EXPIRED"] = "expired";
15
- SessionState["INVALID"] = "invalid";
16
- })(SessionState || (SessionState = {}));
17
- /**
18
- * 会话管理器
19
- */
20
- export class SessionManager {
21
- /**
22
- * 获取会话信息
23
- */
24
- async getSession() {
25
- const config = await readConfig();
26
- const auth = config.auth;
27
- if (!auth || !auth.expiresAt) {
28
- return { state: SessionState.UNKNOWN };
29
- }
30
- const now = Date.now();
31
- const expiresAt = auth.expiresAt;
32
- const timeUntilExpiry = expiresAt - now;
33
- // 判断会话状态
34
- if (timeUntilExpiry <= 0) {
35
- return {
36
- state: SessionState.EXPIRED,
37
- expiresAt,
38
- timeUntilExpiry: 0,
39
- };
40
- }
41
- if (!auth.accessToken) {
42
- return {
43
- state: SessionState.INVALID,
44
- expiresAt,
45
- timeUntilExpiry,
46
- };
47
- }
48
- return {
49
- state: SessionState.VALID,
50
- user: {
51
- userId: auth.userId,
52
- username: auth.username,
53
- },
54
- expiresAt,
55
- timeUntilExpiry,
56
- };
57
- }
58
- /**
59
- * 验证会话
60
- */
61
- async validateSession() {
62
- const session = await this.getSession();
63
- const isValid = session.state === SessionState.VALID;
64
- if (!isValid) {
65
- logger.warn(`会话状态无效: ${session.state}`);
66
- }
67
- return isValid;
68
- }
69
- /**
70
- * 刷新会话
71
- */
72
- async refreshSession() {
73
- logger.info("尝试刷新会话...");
74
- const currentSession = await this.getSession();
75
- if (currentSession.state !== SessionState.VALID) {
76
- logger.warn("无法刷新无效的会话");
77
- return null;
78
- }
79
- // TODO: 实现实际的令牌刷新逻辑
80
- // 目前只是延长过期时间
81
- const config = await readConfig();
82
- if (config.auth) {
83
- config.auth.expiresAt = Date.now() + 7200 * 1000;
84
- await writeConfig(config);
85
- logger.info("会话已刷新");
86
- }
87
- return this.getSession();
88
- }
89
- /**
90
- * 检查会话是否即将过期
91
- */
92
- async isSessionExpiringSoon(threshold = 300000) {
93
- const session = await this.getSession();
94
- if (session.state !== SessionState.VALID || !session.timeUntilExpiry) {
95
- return false;
96
- }
97
- return session.timeUntilExpiry < threshold;
98
- }
99
- /**
100
- * 获取剩余会话时间
101
- */
102
- async getRemainingSessionTime() {
103
- const session = await this.getSession();
104
- if (session.state !== SessionState.VALID || !session.timeUntilExpiry) {
105
- return 0;
106
- }
107
- return Math.max(0, session.timeUntilExpiry);
108
- }
109
- /**
110
- * 格式化会话信息
111
- */
112
- formatSessionInfo(session) {
113
- switch (session.state) {
114
- case SessionState.VALID:
115
- if (!session.timeUntilExpiry) {
116
- return "✅ 会话有效";
117
- }
118
- const hours = Math.floor(session.timeUntilExpiry / (1000 * 60 * 60));
119
- const minutes = Math.floor((session.timeUntilExpiry % (1000 * 60 * 60)) / (1000 * 60));
120
- if (hours > 0) {
121
- return `✅ 会话有效(剩余 ${hours}小时${minutes}分钟)`;
122
- }
123
- else {
124
- return `✅ 会话有效(剩余 ${minutes}分钟)`;
125
- }
126
- case SessionState.EXPIRED:
127
- return "❌ 会话已过期";
128
- case SessionState.INVALID:
129
- return "❌ 会话无效";
130
- default:
131
- return "⚠️ 未知会话状态";
132
- }
133
- }
134
- /**
135
- * 获取会话统计信息
136
- */
137
- async getSessionStats() {
138
- const session = await this.getSession();
139
- const isExpiringSoon = await this.isSessionExpiringSoon();
140
- const remainingTime = await this.getRemainingSessionTime();
141
- return {
142
- isValid: session.state === SessionState.VALID,
143
- isExpiringSoon,
144
- remainingTime,
145
- user: session.user,
146
- };
147
- }
148
- /**
149
- * 会话过期监听器
150
- */
151
- createSessionExpiryListener(callback) {
152
- let timer = null;
153
- let isActive = true;
154
- async function checkExpiry() {
155
- if (!isActive) {
156
- return;
157
- }
158
- const session = await this.getSession();
159
- if (session.state === SessionState.EXPIRED) {
160
- isActive = false;
161
- callback();
162
- return;
163
- }
164
- const remainingTime = await this.getRemainingSessionTime();
165
- if (remainingTime <= 0) {
166
- isActive = false;
167
- callback();
168
- return;
169
- }
170
- // 如果距离过期时间小于5分钟,每30秒检查一次
171
- if (remainingTime < 300000) {
172
- timer = setTimeout(checkExpiry, 30000);
173
- }
174
- else {
175
- // 否则每分钟检查一次
176
- timer = setTimeout(checkExpiry, 60000);
177
- }
178
- }
179
- // 启动首次检查
180
- checkExpiry();
181
- // 返回停止函数
182
- return () => {
183
- isActive = false;
184
- if (timer) {
185
- clearTimeout(timer);
186
- }
187
- };
188
- }
189
- }
190
- /**
191
- * 创建会话管理器
192
- */
193
- export function createSessionManager() {
194
- return new SessionManager();
195
- }
196
- /**
197
- * 默认会话管理器
198
- */
199
- export const sessionManager = new SessionManager();
200
- //# sourceMappingURL=session.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/services/auth/session.ts"],"names":[],"mappings":"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"}