@round2ai/r2-cli 1.0.1 → 1.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 (157) hide show
  1. package/dist/api.d.ts +45 -0
  2. package/dist/api.d.ts.map +1 -0
  3. package/dist/api.js +90 -0
  4. package/dist/api.js.map +1 -0
  5. package/dist/auth.d.ts +35 -0
  6. package/dist/auth.d.ts.map +1 -0
  7. package/dist/auth.js +240 -0
  8. package/dist/auth.js.map +1 -0
  9. package/dist/commands/ai/chat.d.ts +9 -0
  10. package/dist/commands/ai/chat.d.ts.map +1 -0
  11. package/dist/commands/ai/chat.js +16 -0
  12. package/dist/commands/ai/chat.js.map +1 -0
  13. package/dist/commands/ai/skills.d.ts +9 -0
  14. package/dist/commands/ai/skills.d.ts.map +1 -0
  15. package/dist/commands/ai/skills.js +16 -0
  16. package/dist/commands/ai/skills.js.map +1 -0
  17. package/dist/commands/auth/login.d.ts +24 -0
  18. package/dist/commands/auth/login.d.ts.map +1 -0
  19. package/dist/commands/auth/login.js +288 -0
  20. package/dist/commands/auth/login.js.map +1 -0
  21. package/dist/commands/auth/logout.d.ts +16 -0
  22. package/dist/commands/auth/logout.d.ts.map +1 -0
  23. package/dist/commands/auth/logout.js +49 -0
  24. package/dist/commands/auth/logout.js.map +1 -0
  25. package/dist/commands/auth/status.d.ts +28 -0
  26. package/dist/commands/auth/status.d.ts.map +1 -0
  27. package/dist/commands/auth/status.js +92 -0
  28. package/dist/commands/auth/status.js.map +1 -0
  29. package/dist/commands/base.d.ts +107 -0
  30. package/dist/commands/base.d.ts.map +1 -0
  31. package/dist/commands/base.js +153 -0
  32. package/dist/commands/base.js.map +1 -0
  33. package/dist/commands/business/pricing.d.ts +9 -0
  34. package/dist/commands/business/pricing.d.ts.map +1 -0
  35. package/dist/commands/business/pricing.js +16 -0
  36. package/dist/commands/business/pricing.js.map +1 -0
  37. package/dist/commands/business/report.d.ts +9 -0
  38. package/dist/commands/business/report.d.ts.map +1 -0
  39. package/dist/commands/business/report.js +16 -0
  40. package/dist/commands/business/report.js.map +1 -0
  41. package/dist/commands/inventory/risk.d.ts +9 -0
  42. package/dist/commands/inventory/risk.d.ts.map +1 -0
  43. package/dist/commands/inventory/risk.js +16 -0
  44. package/dist/commands/inventory/risk.js.map +1 -0
  45. package/dist/config.d.ts +54 -0
  46. package/dist/config.d.ts.map +1 -0
  47. package/dist/config.js +111 -0
  48. package/dist/config.js.map +1 -0
  49. package/dist/index.d.ts +4 -0
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +66 -116
  52. package/dist/index.js.map +1 -1
  53. package/dist/query/executor.d.ts +138 -0
  54. package/dist/query/executor.d.ts.map +1 -0
  55. package/dist/query/executor.js +232 -0
  56. package/dist/query/executor.js.map +1 -0
  57. package/dist/query/types.d.ts +116 -0
  58. package/dist/query/types.d.ts.map +1 -0
  59. package/dist/query/types.js +15 -0
  60. package/dist/query/types.js.map +1 -0
  61. package/dist/query/utils.d.ts +99 -0
  62. package/dist/query/utils.d.ts.map +1 -0
  63. package/dist/query/utils.js +151 -0
  64. package/dist/query/utils.js.map +1 -0
  65. package/dist/services/ServiceContainer.d.ts +110 -0
  66. package/dist/services/ServiceContainer.d.ts.map +1 -0
  67. package/dist/services/ServiceContainer.js +242 -0
  68. package/dist/services/ServiceContainer.js.map +1 -0
  69. package/dist/services/api/client.d.ts +88 -0
  70. package/dist/services/api/client.d.ts.map +1 -0
  71. package/dist/services/api/client.js +188 -0
  72. package/dist/services/api/client.js.map +1 -0
  73. package/dist/services/api/types.d.ts +233 -0
  74. package/dist/services/api/types.d.ts.map +1 -0
  75. package/dist/services/api/types.js +83 -0
  76. package/dist/services/api/types.js.map +1 -0
  77. package/dist/services/auth/provider.d.ts +73 -0
  78. package/dist/services/auth/provider.d.ts.map +1 -0
  79. package/dist/services/auth/provider.js +339 -0
  80. package/dist/services/auth/provider.js.map +1 -0
  81. package/dist/services/auth/session.d.ts +73 -0
  82. package/dist/services/auth/session.d.ts.map +1 -0
  83. package/dist/services/auth/session.js +200 -0
  84. package/dist/services/auth/session.js.map +1 -0
  85. package/dist/services/business/demand.d.ts +70 -0
  86. package/dist/services/business/demand.d.ts.map +1 -0
  87. package/dist/services/business/demand.js +240 -0
  88. package/dist/services/business/demand.js.map +1 -0
  89. package/dist/services/business/fulfillment.d.ts +122 -0
  90. package/dist/services/business/fulfillment.d.ts.map +1 -0
  91. package/dist/services/business/fulfillment.js +267 -0
  92. package/dist/services/business/fulfillment.js.map +1 -0
  93. package/dist/services/business/inventory.d.ts +54 -0
  94. package/dist/services/business/inventory.d.ts.map +1 -0
  95. package/dist/services/business/inventory.js +245 -0
  96. package/dist/services/business/inventory.js.map +1 -0
  97. package/dist/services/business/pricing.d.ts +41 -0
  98. package/dist/services/business/pricing.d.ts.map +1 -0
  99. package/dist/services/business/pricing.js +133 -0
  100. package/dist/services/business/pricing.js.map +1 -0
  101. package/dist/services/business/report.d.ts +74 -0
  102. package/dist/services/business/report.d.ts.map +1 -0
  103. package/dist/services/business/report.js +380 -0
  104. package/dist/services/business/report.js.map +1 -0
  105. package/dist/services/config/manager.d.ts +105 -0
  106. package/dist/services/config/manager.d.ts.map +1 -0
  107. package/dist/services/config/manager.js +324 -0
  108. package/dist/services/config/manager.js.map +1 -0
  109. package/dist/services/config/types.d.ts +128 -0
  110. package/dist/services/config/types.d.ts.map +1 -0
  111. package/dist/services/config/types.js +209 -0
  112. package/dist/services/config/types.js.map +1 -0
  113. package/dist/services/index.d.ts +17 -0
  114. package/dist/services/index.d.ts.map +1 -0
  115. package/dist/services/index.js +44 -0
  116. package/dist/services/index.js.map +1 -0
  117. package/dist/services/storage/index.d.ts +63 -0
  118. package/dist/services/storage/index.d.ts.map +1 -0
  119. package/dist/services/storage/index.js +136 -0
  120. package/dist/services/storage/index.js.map +1 -0
  121. package/dist/types/api.d.ts +58 -0
  122. package/dist/types/api.d.ts.map +1 -0
  123. package/dist/types/api.js +5 -0
  124. package/dist/types/api.js.map +1 -0
  125. package/dist/types/auth.d.ts +59 -0
  126. package/dist/types/auth.d.ts.map +1 -0
  127. package/dist/types/auth.js +11 -0
  128. package/dist/types/auth.js.map +1 -0
  129. package/dist/types/business.d.ts +201 -0
  130. package/dist/types/business.d.ts.map +1 -0
  131. package/dist/types/business.js +5 -0
  132. package/dist/types/business.js.map +1 -0
  133. package/dist/types/command.d.ts +106 -0
  134. package/dist/types/command.d.ts.map +1 -0
  135. package/dist/types/command.js +5 -0
  136. package/dist/types/command.js.map +1 -0
  137. package/dist/types/config.d.ts +66 -0
  138. package/dist/types/config.d.ts.map +1 -0
  139. package/dist/types/config.js +5 -0
  140. package/dist/types/config.js.map +1 -0
  141. package/dist/utils/async.d.ts +79 -0
  142. package/dist/utils/async.d.ts.map +1 -0
  143. package/dist/utils/async.js +179 -0
  144. package/dist/utils/async.js.map +1 -0
  145. package/dist/utils/format.d.ts +90 -0
  146. package/dist/utils/format.d.ts.map +1 -0
  147. package/dist/utils/format.js +227 -0
  148. package/dist/utils/format.js.map +1 -0
  149. package/dist/utils/logger.d.ts +136 -0
  150. package/dist/utils/logger.d.ts.map +1 -0
  151. package/dist/utils/logger.js +249 -0
  152. package/dist/utils/logger.js.map +1 -0
  153. package/dist/utils/validation.d.ts +100 -0
  154. package/dist/utils/validation.d.ts.map +1 -0
  155. package/dist/utils/validation.js +334 -0
  156. package/dist/utils/validation.js.map +1 -0
  157. package/package.json +6 -2
@@ -0,0 +1,288 @@
1
+ /**
2
+ * 扫码登录命令实现
3
+ *
4
+ * 参考 claude-code 的查询执行模式,实现完整的扫码登录流程:
5
+ * 1. 生成二维码
6
+ * 2. 显示二维码(使用终端 ASCII 艺术或链接)
7
+ * 3. 轮询查询状态
8
+ * 4. 等待用户扫码确认
9
+ * 5. 保存登录凭证
10
+ */
11
+ import chalk from "chalk";
12
+ import { executePollingQuery } from "../../query/executor.js";
13
+ import { createQRCodeAuthApi, createApiClient } from "../../services/api/client.js";
14
+ import { createStorageService } from "../../services/storage/index.js";
15
+ // 动态导入 qrcode-terminal(CommonJS)
16
+ import { createRequire } from "node:module";
17
+ const require = createRequire(import.meta.url);
18
+ const qrcodeTerminal = require("qrcode-terminal");
19
+ // ==================== 登录服务 ====================
20
+ /**
21
+ * 登录服务类
22
+ */
23
+ class LoginService {
24
+ apiClient;
25
+ authApi;
26
+ storage = createStorageService();
27
+ constructor() {
28
+ this.apiClient = createApiClient();
29
+ this.authApi = createQRCodeAuthApi(this.apiClient);
30
+ }
31
+ /**
32
+ * 执行扫码登录
33
+ */
34
+ async login(signal) {
35
+ console.log(chalk.cyan("\n🔐 正在启动扫码登录..."));
36
+ // 1. 生成二维码
37
+ const qrData = await this.authApi.generateQRCode();
38
+ console.log(chalk.green("✅ 二维码已生成\n"));
39
+ // 2. 显示二维码
40
+ this.displayQRCode(qrData);
41
+ // 3. 构建轮询查询
42
+ const query = {
43
+ id: "qrcode-status-poll",
44
+ description: "查询二维码登录状态",
45
+ deps: {
46
+ signal: signal ?? null,
47
+ uuid: () => Math.random().toString(36),
48
+ api: {
49
+ get: async (url) => {
50
+ // 忽略 url 参数,使用内部方法调用
51
+ return this.authApi.getQRCodeStatus(qrData.qrToken);
52
+ },
53
+ post: async (_url, _body) => {
54
+ throw new Error("Not implemented");
55
+ },
56
+ },
57
+ log: {
58
+ info: (msg) => console.log(chalk.blue(`[INFO] ${msg}`)),
59
+ error: (msg) => console.error(chalk.red(`[ERROR] ${msg}`)),
60
+ debug: (msg) => console.log(chalk.gray(`[DEBUG] ${msg}`)),
61
+ },
62
+ },
63
+ execute: async () => {
64
+ return this.authApi.getQRCodeStatus(qrData.qrToken);
65
+ },
66
+ options: {
67
+ timeout: Number.parseInt(qrData.expireTime, 10),
68
+ enableProgress: true,
69
+ },
70
+ };
71
+ // 4. 执行轮询查询
72
+ try {
73
+ const result = await this.pollLoginStatus(query, qrData);
74
+ // 5. 保存登录凭证
75
+ if (result.data.token && result.data.userInfo) {
76
+ await this.saveCredentials(result.data.token, result.data.userInfo);
77
+ console.log(chalk.green("\n✅ 登录成功!\n"));
78
+ this.displayUserInfo(result.data.userInfo);
79
+ return {
80
+ userInfo: result.data.userInfo,
81
+ token: result.data.token,
82
+ };
83
+ }
84
+ throw new Error("登录失败: 未获取到凭证");
85
+ }
86
+ catch (error) {
87
+ console.log(chalk.red("\n❌ 登录失败\n"));
88
+ throw error;
89
+ }
90
+ }
91
+ /**
92
+ * 显示二维码
93
+ */
94
+ displayQRCode(qrData) {
95
+ console.log(chalk.yellow("📱 请使用 第二回合APP 扫描二维码登录\n"));
96
+ // 使用 qrcode-terminal 显示二维码
97
+ qrcodeTerminal.generate(`r2://auth/login?qrToken=${qrData.qrContent}`, { small: true });
98
+ const expireTimeMs = Number.parseInt(qrData.expireTime, 10);
99
+ const pollIntervalMs = Number.parseInt(qrData.pollInterval, 10);
100
+ console.log(chalk.gray("\n二维码内容: ") + chalk.white(qrData.qrContent));
101
+ console.log(chalk.gray("过期时间: ") + chalk.white(`${expireTimeMs / 1000} 秒`));
102
+ console.log(chalk.gray("轮询间隔: ") + chalk.white(`${pollIntervalMs} 毫秒`));
103
+ console.log(chalk.yellow("\n⏳ 等待扫码..."));
104
+ }
105
+ /**
106
+ * 轮询登录状态
107
+ */
108
+ async pollLoginStatus(query, qrData) {
109
+ let lastStatus = "waiting";
110
+ const expireTimeMs = Number.parseInt(qrData.expireTime, 10);
111
+ const pollIntervalMs = Number.parseInt(qrData.pollInterval, 10);
112
+ const pollingIterator = executePollingQuery(query, {
113
+ interval: pollIntervalMs,
114
+ timeout: expireTimeMs,
115
+ condition: (data) => {
116
+ // 检查状态变化
117
+ if (data.status !== lastStatus) {
118
+ lastStatus = data.status;
119
+ switch (data.status) {
120
+ case "scanned":
121
+ console.log(chalk.cyan(`\n🔍 已扫码: ${data.userInfo?.nickname || "未知用户"}`));
122
+ console.log(chalk.yellow("请在 APP 上确认登录"));
123
+ break;
124
+ case "confirmed":
125
+ console.log(chalk.green("\n✅ 用户已确认登录"));
126
+ break;
127
+ case "expired":
128
+ console.log(chalk.red("\n⏰ 二维码已过期"));
129
+ break;
130
+ case "canceled":
131
+ console.log(chalk.red("\n🚫 用户已取消登录"));
132
+ break;
133
+ }
134
+ }
135
+ return data.status === "confirmed";
136
+ },
137
+ });
138
+ let result = null;
139
+ // 手动迭代以获取 AsyncGenerator 的返回值
140
+ let done = false;
141
+ while (!done) {
142
+ const { value, done: iterationDone } = await pollingIterator.next();
143
+ done = iterationDone ?? true;
144
+ // 返回值在最后一次迭代时在 value 中
145
+ if (done) {
146
+ if (value && "data" in value) {
147
+ result = { data: value.data };
148
+ }
149
+ }
150
+ else {
151
+ // 这是 yield 的 ProgressEvent,不需要处理
152
+ }
153
+ }
154
+ if (result) {
155
+ return result;
156
+ }
157
+ throw new Error("轮询异常终止");
158
+ }
159
+ /**
160
+ * 显示用户信息
161
+ */
162
+ displayUserInfo(userInfo) {
163
+ console.log(chalk.white("━━━━━━━━━━━━━━━━━━━━━━━━━━━━"));
164
+ console.log(chalk.cyan("用户信息:"));
165
+ console.log(chalk.white(" 用户名: ") + chalk.yellow(userInfo.username));
166
+ console.log(chalk.white(" 昵称: ") + chalk.yellow(userInfo.nickname));
167
+ console.log(chalk.white(" 手机号: ") + chalk.yellow(userInfo.mobile));
168
+ console.log(chalk.white(" 用户ID: ") + chalk.yellow(userInfo.userId.toString()));
169
+ console.log(chalk.white("━━━━━━━━━━━━━━━━━━━━━━━━━━━━"));
170
+ }
171
+ /**
172
+ * 保存登录凭证
173
+ */
174
+ async saveCredentials(token, userInfo) {
175
+ await this.storage.saveCredentials(token, userInfo);
176
+ const credentials = await this.storage.getCredentials();
177
+ // console.log(chalk.gray("\n💾 凭证已保存到: " + this.storage.getConfigPath()));
178
+ // console.log(chalk.gray(` Token: ${token.substring(0, 20)}...`));
179
+ // console.log(chalk.gray(` 用户: ${userInfo.nickname} (${userInfo.username})`));
180
+ // console.log(chalk.gray(` 保存时间: ${new Date(credentials!.timestamp).toLocaleString()}`));
181
+ }
182
+ /**
183
+ * 登出
184
+ */
185
+ async logout() {
186
+ console.log(chalk.cyan("\n🚪 正在退出登录..."));
187
+ // 清除本地凭证
188
+ await this.clearCredentials();
189
+ console.log(chalk.green("✅ 已退出登录\n"));
190
+ }
191
+ /**
192
+ * 查看登录状态
193
+ */
194
+ async status() {
195
+ console.log(chalk.cyan("\n📊 查看登录状态...\n"));
196
+ const isLoggedIn = await this.storage.isLoggedIn();
197
+ if (!isLoggedIn) {
198
+ console.log(chalk.yellow("⚠️ 尚未登录或凭证已过期\n"));
199
+ return;
200
+ }
201
+ const credentials = await this.storage.getCredentials();
202
+ const userInfo = credentials.userInfo;
203
+ const lastLogin = new Date(credentials.timestamp);
204
+ const daysSinceLogin = Math.floor((Date.now() - credentials.timestamp) / (1000 * 60 * 60 * 24));
205
+ console.log(chalk.green("✅ 已登录\n"));
206
+ this.displayUserInfo(userInfo);
207
+ console.log(chalk.gray("\n📅 最后登录: " + lastLogin.toLocaleString()));
208
+ console.log(chalk.gray(" 距离今天: " + daysSinceLogin + " 天前"));
209
+ // console.log(chalk.gray("\n💾 配置文件: " + this.storage.getConfigPath()));
210
+ }
211
+ /**
212
+ * 清除登录凭证
213
+ */
214
+ async clearCredentials() {
215
+ await this.storage.clearCredentials();
216
+ // console.log(chalk.gray("💾 凭证已从 " + this.storage.getConfigPath() + " 清除"));
217
+ }
218
+ }
219
+ // ==================== 命令工厂 ====================
220
+ /**
221
+ * 创建登录命令
222
+ */
223
+ export function createLoginCommand() {
224
+ const { Command } = require("commander");
225
+ const command = new Command("login");
226
+ command.description("扫码登录 Round2AI 账户");
227
+ command.option("--timeout <ms>", "超时时间(毫秒)", "300000");
228
+ command.option("--debug", "启用调试模式", false);
229
+ command.action(async (options) => {
230
+ try {
231
+ const loginService = new LoginService();
232
+ const controller = new AbortController();
233
+ // 设置超时
234
+ const timeout = setTimeout(() => {
235
+ controller.abort();
236
+ }, Number.parseInt(options.timeout ?? "300000", 10));
237
+ await loginService.login(controller.signal);
238
+ clearTimeout(timeout);
239
+ }
240
+ catch (error) {
241
+ const errorMessage = error instanceof Error ? error.message : String(error);
242
+ console.error(chalk.red(`❌ ${errorMessage}`));
243
+ process.exit(1);
244
+ }
245
+ });
246
+ return command;
247
+ }
248
+ /**
249
+ * 创建登出命令
250
+ */
251
+ export function createLogoutCommand() {
252
+ const { Command } = require("commander");
253
+ const command = new Command("logout");
254
+ command.description("退出登录");
255
+ command.action(async () => {
256
+ try {
257
+ const loginService = new LoginService();
258
+ await loginService.logout();
259
+ }
260
+ catch (error) {
261
+ const errorMessage = error instanceof Error ? error.message : String(error);
262
+ console.error(chalk.red(`❌ ${errorMessage}`));
263
+ process.exit(1);
264
+ }
265
+ });
266
+ return command;
267
+ }
268
+ /**
269
+ * 创建状态命令
270
+ */
271
+ export function createStatusCommand() {
272
+ const { Command } = require("commander");
273
+ const command = new Command("status");
274
+ command.description("查看登录状态");
275
+ command.action(async () => {
276
+ try {
277
+ const loginService = new LoginService();
278
+ await loginService.status();
279
+ }
280
+ catch (error) {
281
+ const errorMessage = error instanceof Error ? error.message : String(error);
282
+ console.error(chalk.red(`❌ ${errorMessage}`));
283
+ process.exit(1);
284
+ }
285
+ });
286
+ return command;
287
+ }
288
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * 登出命令
3
+ */
4
+ import { Command } from "commander";
5
+ import { BaseCommand } from "../base.js";
6
+ /**
7
+ * 登出命令
8
+ */
9
+ export declare class LogoutCommand extends BaseCommand {
10
+ execute(): Promise<void>;
11
+ }
12
+ /**
13
+ * 创建登出命令
14
+ */
15
+ export declare function createLogoutCommand(container: any): Command;
16
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAIzC;;GAEG;AACH,qBAAa,aAAc,SAAQ,WAAW;IACtC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CA6B/B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO,CAU3D"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * 登出命令
3
+ */
4
+ import { Command } from "commander";
5
+ import { BaseCommand } from "../base.js";
6
+ import inquirer from "inquirer";
7
+ /**
8
+ * 登出命令
9
+ */
10
+ export class LogoutCommand extends BaseCommand {
11
+ async execute() {
12
+ const authService = this.getService("auth");
13
+ // 检查是否已登录
14
+ const isValid = await authService.isValid();
15
+ if (!isValid) {
16
+ this.showWarning("当前未登录");
17
+ return;
18
+ }
19
+ // 确认登出
20
+ const { confirm } = await inquirer.prompt([
21
+ {
22
+ type: "confirm",
23
+ name: "confirm",
24
+ message: "确定要退出登录吗?",
25
+ default: false,
26
+ },
27
+ ]);
28
+ if (!confirm) {
29
+ this.showInfo("已取消登出");
30
+ return;
31
+ }
32
+ // 执行登出
33
+ await authService.logout();
34
+ this.showSuccess("已退出登录");
35
+ }
36
+ }
37
+ /**
38
+ * 创建登出命令
39
+ */
40
+ export function createLogoutCommand(container) {
41
+ const command = new Command("logout");
42
+ command.description("退出登录");
43
+ command.action(async () => {
44
+ const logoutCommand = new LogoutCommand(container);
45
+ await logoutCommand.execute();
46
+ });
47
+ return command;
48
+ }
49
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,WAAW;IAC5C,KAAK,CAAC,OAAO;QACX,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAgB,MAAM,CAAC,CAAC;QAE3D,UAAU;QACV,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,OAAO;QACP,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACxC;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,WAAW;gBACpB,OAAO,EAAE,KAAK;aACf;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACvB,OAAO;QACT,CAAC;QAED,OAAO;QACP,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAc;IAChD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAE5B,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QACxB,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * 登录状态命令
3
+ */
4
+ import { Command } from "commander";
5
+ import { AuthenticatedCommand } from "../base.js";
6
+ /**
7
+ * 登录状态命令
8
+ */
9
+ export declare class StatusCommand extends AuthenticatedCommand {
10
+ execute(): Promise<void>;
11
+ /**
12
+ * 显示用户信息
13
+ */
14
+ private displayUserInfo;
15
+ /**
16
+ * 显示会话状态
17
+ */
18
+ private displaySessionStatus;
19
+ /**
20
+ * 格式化时间
21
+ */
22
+ private formatTime;
23
+ }
24
+ /**
25
+ * 创建状态命令
26
+ */
27
+ export declare function createStatusCommand(container: any): Command;
28
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAKlD;;GAEG;AACH,qBAAa,aAAc,SAAQ,oBAAoB;IAC/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB9B;;OAEG;YACW,eAAe;IAY7B;;OAEG;YACW,oBAAoB;IAwBlC;;OAEG;IACH,OAAO,CAAC,UAAU;CAcnB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO,CAU3D"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * 登录状态命令
3
+ */
4
+ import { Command } from "commander";
5
+ import { AuthenticatedCommand } from "../base.js";
6
+ import chalk from "chalk";
7
+ import { createTable } from "../../utils/format.js";
8
+ /**
9
+ * 登录状态命令
10
+ */
11
+ export class StatusCommand extends AuthenticatedCommand {
12
+ async execute() {
13
+ const authService = this.getService("auth");
14
+ this.showInfo("检查登录状态...");
15
+ const isValid = await authService.isValid();
16
+ if (!isValid) {
17
+ this.showWarning("未登录");
18
+ return;
19
+ }
20
+ this.showSuccess("已登录");
21
+ // 获取用户信息
22
+ const user = await authService.getCurrentUser();
23
+ if (user) {
24
+ await this.displayUserInfo(user);
25
+ }
26
+ // 获取会话状态
27
+ await this.displaySessionStatus(authService);
28
+ }
29
+ /**
30
+ * 显示用户信息
31
+ */
32
+ async displayUserInfo(user) {
33
+ console.log(chalk.cyan("\n用户信息:"));
34
+ console.log(createTable(["字段", "值"], [
35
+ ["用户名", user.username],
36
+ ["用户ID", user.userId],
37
+ ["登录时间", user.loginTime?.toLocaleString() || "未知"],
38
+ ]));
39
+ }
40
+ /**
41
+ * 显示会话状态
42
+ */
43
+ async displaySessionStatus(authService) {
44
+ try {
45
+ const sessionInfo = await authService.getSessionInfo();
46
+ console.log(chalk.cyan("\n会话状态:"));
47
+ console.log(createTable(["项目", "值"], [
48
+ ["会话状态", sessionInfo.state],
49
+ ["剩余时间", this.formatTime(sessionInfo.timeUntilExpiry || 0)],
50
+ ["过期时间", sessionInfo.expiresAt ? new Date(sessionInfo.expiresAt).toLocaleString() : "未知"],
51
+ ]));
52
+ if (sessionInfo.state === "expired") {
53
+ this.showWarning("会话已过期,请重新登录");
54
+ }
55
+ else if (sessionInfo.state === "invalid") {
56
+ this.showWarning("会话无效,请重新登录");
57
+ }
58
+ }
59
+ catch (error) {
60
+ this.showWarning("无法获取会话状态");
61
+ }
62
+ }
63
+ /**
64
+ * 格式化时间
65
+ */
66
+ formatTime(milliseconds) {
67
+ if (milliseconds < 0) {
68
+ return "已过期";
69
+ }
70
+ const hours = Math.floor(milliseconds / (1000 * 60 * 60));
71
+ const minutes = Math.floor((milliseconds % (1000 * 60 * 60)) / (1000 * 60));
72
+ if (hours > 0) {
73
+ return `${hours}小时${minutes}分钟`;
74
+ }
75
+ else {
76
+ return `${minutes}分钟`;
77
+ }
78
+ }
79
+ }
80
+ /**
81
+ * 创建状态命令
82
+ */
83
+ export function createStatusCommand(container) {
84
+ const command = new Command("status");
85
+ command.description("查看登录状态");
86
+ command.action(async () => {
87
+ const statusCommand = new StatusCommand(container);
88
+ await statusCommand.execute();
89
+ });
90
+ return command;
91
+ }
92
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * 命令基类
3
+ */
4
+ import { ServiceContainer } from "../services/ServiceContainer.js";
5
+ import type { ProgressEvent, ProgressEventType } from "../query/types.js";
6
+ /**
7
+ * 命令接口
8
+ */
9
+ export interface ICommand {
10
+ execute(): Promise<void>;
11
+ abort?(): void;
12
+ }
13
+ /**
14
+ * 命令基类
15
+ */
16
+ export declare abstract class BaseCommand implements ICommand {
17
+ protected container: ServiceContainer;
18
+ protected events: ProgressEvent[];
19
+ constructor(container: ServiceContainer);
20
+ /**
21
+ * 执行命令
22
+ */
23
+ abstract execute(): Promise<void>;
24
+ /**
25
+ * 通知进度(内部使用)
26
+ */
27
+ protected notify(type: ProgressEventType, message: string, progress?: number): void;
28
+ /**
29
+ * 进度回调(可重写)
30
+ */
31
+ protected onProgress(event: ProgressEvent): void;
32
+ /**
33
+ * 显示错误
34
+ */
35
+ protected showError(error: Error | string): void;
36
+ /**
37
+ * 显示成功消息
38
+ */
39
+ protected showSuccess(message: string): void;
40
+ /**
41
+ * 显示警告
42
+ */
43
+ protected showWarning(message: string): void;
44
+ /**
45
+ * 显示信息
46
+ */
47
+ protected showInfo(message: string): void;
48
+ /**
49
+ * 显示表
50
+ */
51
+ protected showTable(headers: string[], data: string[][]): void;
52
+ /**
53
+ * 格式化货币
54
+ */
55
+ protected formatCurrency(amount: number): string;
56
+ /**
57
+ * 格式化百分比
58
+ */
59
+ protected formatPercentage(value: number): string;
60
+ /**
61
+ * 获取服务
62
+ */
63
+ protected getService<T>(name: string): T;
64
+ /**
65
+ * 获取配置
66
+ */
67
+ protected getConfig(key: string): Promise<unknown>;
68
+ /**
69
+ * 设置配置
70
+ */
71
+ protected setConfig(key: string, value: unknown): Promise<void>;
72
+ /**
73
+ * 获取所有事件
74
+ */
75
+ protected getEvents(): ProgressEvent[];
76
+ }
77
+ /**
78
+ * 认证命令基类
79
+ */
80
+ export declare abstract class AuthenticatedCommand extends BaseCommand {
81
+ /**
82
+ * 验证认证状态
83
+ */
84
+ protected authenticate(): Promise<boolean>;
85
+ /**
86
+ * 获取当前用户信息
87
+ */
88
+ protected getUserInfo(): Promise<UserInfo | null>;
89
+ }
90
+ /**
91
+ * 需要 API 的命令基类
92
+ */
93
+ export declare abstract class ApiCommand extends BaseCommand {
94
+ /**
95
+ * 初始化 API 客户端
96
+ */
97
+ protected initApiClient(): Promise<void>;
98
+ /**
99
+ * 发送 API 请求
100
+ */
101
+ protected apiRequest(endpoint: string, options?: any): Promise<any>;
102
+ }
103
+ /**
104
+ * 导入接口
105
+ */
106
+ import type { UserInfo } from "../types/auth.js";
107
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/commands/base.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAG1E;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,IAAI,CAAC;CAChB;AAED;;GAEG;AACH,8BAAsB,WAAY,YAAW,QAAQ;IACnD,SAAS,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACtC,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,CAAM;gBAE3B,SAAS,EAAE,gBAAgB;IAIvC;;OAEG;IACH,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAEjC;;OAEG;IACH,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAWnF;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAIhD;;OAEG;IACH,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI;IAQhD;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5C;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5C;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIzC;;OAEG;IACH,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI;IAI9D;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAIhD;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIjD;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC;IAIxC;;OAEG;cACa,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKxD;;OAEG;cACa,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrE;;OAEG;IACH,SAAS,CAAC,SAAS,IAAI,aAAa,EAAE;CAGvC;AAED;;GAEG;AACH,8BAAsB,oBAAqB,SAAQ,WAAW;IAC5D;;OAEG;cACa,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAYhD;;OAEG;cACa,WAAW,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;CAIxD;AAED;;GAEG;AACH,8BAAsB,UAAW,SAAQ,WAAW;IAClD;;OAEG;cACa,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9C;;OAEG;cACa,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;CAI1E;AAED;;GAEG;AACH,OAAO,KAAK,EAAiB,QAAQ,EAAE,MAAM,kBAAkB,CAAC"}