@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,242 @@
1
+ /**
2
+ * 服务容器 - 依赖注入核心
3
+ */
4
+ /**
5
+ * 服务容器
6
+ */
7
+ export class ServiceContainer {
8
+ services = new Map();
9
+ config;
10
+ constructor(config = {}) {
11
+ this.config = {
12
+ strictMode: true,
13
+ autoResolve: true,
14
+ ...config,
15
+ };
16
+ }
17
+ /**
18
+ * 注册服务
19
+ */
20
+ register(name, factory, options = {}) {
21
+ const { singleton = true } = options;
22
+ this.services.set(name, {
23
+ factory,
24
+ isSingleton: singleton,
25
+ instance: singleton ? undefined : null,
26
+ });
27
+ }
28
+ /**
29
+ * 注册单例服务
30
+ */
31
+ registerSingleton(name, factory) {
32
+ this.register(name, factory, { singleton: true });
33
+ }
34
+ /**
35
+ * 注册多实例服务
36
+ */
37
+ registerTransient(name, factory) {
38
+ this.register(name, factory, { singleton: false });
39
+ }
40
+ /**
41
+ * 注册工厂服务
42
+ */
43
+ registerFactory(name, factory) {
44
+ this.register(name, factory);
45
+ }
46
+ /**
47
+ * 注册单例工厂服务
48
+ */
49
+ registerSingletonFactory(name, factory) {
50
+ this.registerSingleton(name, factory);
51
+ }
52
+ /**
53
+ * 获取服务
54
+ */
55
+ async resolve(name) {
56
+ const registration = this.services.get(name);
57
+ if (!registration) {
58
+ if (this.config.strictMode) {
59
+ throw new Error(`Service '${name}' not found`);
60
+ }
61
+ return null;
62
+ }
63
+ // 如果是单例且已实例化,直接返回
64
+ if (registration.isSingleton && registration.instance !== undefined) {
65
+ return registration.instance;
66
+ }
67
+ // 处理工厂函数
68
+ const factory = registration.factory;
69
+ let instance;
70
+ if (typeof factory === "function") {
71
+ // 如果是异步工厂函数
72
+ if (this.config.autoResolve && factory.constructor.name === "AsyncFunction") {
73
+ instance = await factory();
74
+ }
75
+ else if (this.config.autoResolve && factory.length === 0) {
76
+ // 同步工厂函数
77
+ instance = factory();
78
+ }
79
+ else {
80
+ // 如果需要参数但未提供,报错
81
+ throw new Error(`Service '${name}' is a factory function but requires arguments`);
82
+ }
83
+ }
84
+ else {
85
+ // 直接返回值
86
+ instance = factory;
87
+ }
88
+ // 缓存单例实例
89
+ if (registration.isSingleton) {
90
+ registration.instance = instance;
91
+ }
92
+ return instance;
93
+ }
94
+ /**
95
+ * 获取服务(同步版本)
96
+ */
97
+ resolveSync(name) {
98
+ const registration = this.services.get(name);
99
+ if (!registration) {
100
+ if (this.config.strictMode) {
101
+ throw new Error(`Service '${name}' not found`);
102
+ }
103
+ return null;
104
+ }
105
+ // 如果是单例且已实例化,直接返回
106
+ if (registration.isSingleton && registration.instance !== undefined) {
107
+ return registration.instance;
108
+ }
109
+ // 处理工厂函数
110
+ const factory = registration.factory;
111
+ let instance;
112
+ if (typeof factory === "function") {
113
+ if (factory.constructor.name !== "AsyncFunction" && factory.length === 0) {
114
+ instance = factory();
115
+ }
116
+ else {
117
+ throw new Error(`Service '${name}' is an async factory, use resolve() instead`);
118
+ }
119
+ }
120
+ else {
121
+ instance = factory;
122
+ }
123
+ // 缓存单例实例
124
+ if (registration.isSingleton) {
125
+ registration.instance = instance;
126
+ }
127
+ return instance;
128
+ }
129
+ /**
130
+ * 检查服务是否已注册
131
+ */
132
+ has(name) {
133
+ return this.services.has(name);
134
+ }
135
+ /**
136
+ * 获取所有注册的服务名称
137
+ */
138
+ list() {
139
+ return Array.from(this.services.keys());
140
+ }
141
+ /**
142
+ * 移除服务
143
+ */
144
+ unregister(name) {
145
+ const registration = this.services.get(name);
146
+ if (registration) {
147
+ this.services.delete(name);
148
+ }
149
+ }
150
+ /**
151
+ * 创建子容器
152
+ */
153
+ createChild(config = {}) {
154
+ const child = new ServiceContainer({ ...this.config, ...config });
155
+ // 复制服务注册信息
156
+ for (const [name, registration] of this.services) {
157
+ child.services.set(name, registration);
158
+ }
159
+ return child;
160
+ }
161
+ /**
162
+ * 创建模块
163
+ */
164
+ createModule(name, setup) {
165
+ const modulePrefix = `${name}.`;
166
+ // 获取该模块的所有服务
167
+ const moduleServices = Array.from(this.services.entries()).filter(([key]) => key.startsWith(modulePrefix));
168
+ // 创建新的服务容器用于模块
169
+ const moduleContainer = new ServiceContainer(this.config);
170
+ // 复制模块服务
171
+ for (const [key, registration] of moduleServices) {
172
+ moduleContainer.services.set(key.replace(modulePrefix, ""), registration);
173
+ }
174
+ // 应用模块设置
175
+ setup(moduleContainer);
176
+ }
177
+ /**
178
+ * 清空所有服务
179
+ */
180
+ clear() {
181
+ this.services.clear();
182
+ }
183
+ /**
184
+ * 获取统计信息
185
+ */
186
+ getStats() {
187
+ const singletonCount = Array.from(this.services.values()).filter((reg) => reg.isSingleton).length;
188
+ const transientCount = Array.from(this.services.values()).filter((reg) => !reg.isSingleton).length;
189
+ const resolvedSingletons = Array.from(this.services.values()).filter((reg) => reg.isSingleton && reg.instance !== undefined).length;
190
+ return {
191
+ totalServices: this.services.size,
192
+ singletonCount,
193
+ transientCount,
194
+ resolvedSingletons,
195
+ };
196
+ }
197
+ }
198
+ /**
199
+ * 依赖注入装饰器工厂
200
+ */
201
+ export function Inject(serviceName) {
202
+ return (target, propertyKey, parameterIndex) => {
203
+ const constructor = target;
204
+ if (!constructor.__inject__) {
205
+ constructor.__inject__ = [];
206
+ }
207
+ constructor.__inject__[parameterIndex] = serviceName;
208
+ };
209
+ }
210
+ /**
211
+ * 自动注入装饰器
212
+ */
213
+ export function Injectable() {
214
+ return (target) => {
215
+ // 为类添加自动注入标记
216
+ target.__injectable__ = true;
217
+ };
218
+ }
219
+ /**
220
+ * 创建默认服务容器
221
+ */
222
+ export const defaultContainer = new ServiceContainer();
223
+ /**
224
+ * 创建默认服务提供者
225
+ */
226
+ export function createServiceProvider() {
227
+ return {
228
+ container: defaultContainer,
229
+ bootstrap: async () => {
230
+ // 初始化核心服务
231
+ if (!defaultContainer.has("logger")) {
232
+ const { logger } = await import("../utils/logger.js");
233
+ defaultContainer.registerSingleton("logger", logger);
234
+ }
235
+ },
236
+ shutdown: async () => {
237
+ // 清理资源
238
+ defaultContainer.clear();
239
+ },
240
+ };
241
+ }
242
+ //# sourceMappingURL=ServiceContainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServiceContainer.js","sourceRoot":"","sources":["../../src/services/ServiceContainer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * API 客户端 - 提供 HTTP 请求能力
3
+ */
4
+ import type { GenerateQRCodeData, QRCodeStatusData, AuthConfig } from "../../types/auth.js";
5
+ /**
6
+ * API 客户端类
7
+ */
8
+ export declare class ApiClient {
9
+ private baseUrl;
10
+ private version;
11
+ private debug;
12
+ private token;
13
+ constructor(config?: Partial<AuthConfig>);
14
+ /**
15
+ * 设置认证令牌
16
+ */
17
+ setToken(token: string | null): void;
18
+ /**
19
+ * 获取认证令牌
20
+ */
21
+ getToken(): string | null;
22
+ /**
23
+ * 构建完整 URL
24
+ */
25
+ private buildUrl;
26
+ /**
27
+ * 构建 HTTP 头
28
+ */
29
+ private buildHeaders;
30
+ /**
31
+ * 处理响应
32
+ */
33
+ private handleResponse;
34
+ /**
35
+ * GET 请求
36
+ */
37
+ get<T = unknown>(path: string, params?: URLSearchParams): Promise<T>;
38
+ /**
39
+ * POST 请求
40
+ */
41
+ post<T = unknown>(path: string, body?: unknown): Promise<T>;
42
+ /**
43
+ * PUT 请求
44
+ */
45
+ put<T = unknown>(path: string, body?: unknown): Promise<T>;
46
+ /**
47
+ * DELETE 请求
48
+ */
49
+ delete<T = unknown>(path: string): Promise<T>;
50
+ }
51
+ /**
52
+ * 二维码登录 API
53
+ */
54
+ export declare class QRCodeAuthApi {
55
+ private client;
56
+ constructor(client: ApiClient);
57
+ /**
58
+ * 生成二维码
59
+ *
60
+ * @returns 二维码信息
61
+ */
62
+ generateQRCode(): Promise<GenerateQRCodeData>;
63
+ /**
64
+ * 查询二维码状态
65
+ *
66
+ * @param qrToken 二维码 token
67
+ * @returns 二维码状态
68
+ */
69
+ getQRCodeStatus(qrToken: string): Promise<QRCodeStatusData>;
70
+ /**
71
+ * 确认登录(PC端调用)
72
+ *
73
+ * @param qrToken 二维码 token
74
+ * @returns 确认结果
75
+ */
76
+ confirmLogin(qrToken: string): Promise<{
77
+ token: string;
78
+ }>;
79
+ }
80
+ /**
81
+ * 创建 API 客户端
82
+ */
83
+ export declare function createApiClient(config?: Partial<AuthConfig>): ApiClient;
84
+ /**
85
+ * 创建二维码认证 API
86
+ */
87
+ export declare function createQRCodeAuthApi(client?: ApiClient | null, config?: Partial<AuthConfig> | null): QRCodeAuthApi;
88
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/services/api/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAEV,kBAAkB,EAClB,gBAAgB,EAChB,UAAU,EACX,MAAM,qBAAqB,CAAC;AAI7B;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,KAAK,CAAuB;gBAExB,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC;IAMxC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIpC;;OAEG;IACH,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIzB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAKhB;;OAEG;IACH,OAAO,CAAC,YAAY;IAYpB;;OAEG;YACW,cAAc;IAqB5B;;OAEG;IACG,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC;IAmB1E;;OAEG;IACG,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAmBjE;;OAEG;IACG,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAmBhE;;OAEG;IACG,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAcpD;AAID;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,EAAE,SAAS;IAI7B;;;;OAIG;IACG,cAAc,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAInD;;;;;OAKG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAMjE;;;;;OAKG;IACG,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAKhE;AAID;;GAEG;AACH,wBAAgB,eAAe,CAC7B,MAAM,GAAE,OAAO,CAAC,UAAU,CAAM,GAC/B,SAAS,CAEX;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,GAAE,SAAS,GAAG,IAAW,EAC/B,MAAM,GAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAW,GACxC,aAAa,CAGf"}
@@ -0,0 +1,188 @@
1
+ /**
2
+ * API 客户端 - 提供 HTTP 请求能力
3
+ */
4
+ // ==================== API 客户端 ====================
5
+ /**
6
+ * API 客户端类
7
+ */
8
+ export class ApiClient {
9
+ baseUrl;
10
+ version;
11
+ debug;
12
+ token = null;
13
+ constructor(config) {
14
+ this.baseUrl = config?.baseUrl || "https://api.qiuxietang.com";
15
+ this.version = config?.version || "v3";
16
+ this.debug = config?.debug || false;
17
+ }
18
+ /**
19
+ * 设置认证令牌
20
+ */
21
+ setToken(token) {
22
+ this.token = token;
23
+ }
24
+ /**
25
+ * 获取认证令牌
26
+ */
27
+ getToken() {
28
+ return this.token;
29
+ }
30
+ /**
31
+ * 构建完整 URL
32
+ */
33
+ buildUrl(path) {
34
+ const cleanPath = path.startsWith("/") ? path.slice(1) : path;
35
+ return `${this.baseUrl}/${this.version}/${cleanPath}`;
36
+ }
37
+ /**
38
+ * 构建 HTTP 头
39
+ */
40
+ buildHeaders() {
41
+ const headers = {
42
+ "Content-Type": "application/json",
43
+ };
44
+ if (this.token) {
45
+ headers["Authorization"] = `Bearer ${this.token}`;
46
+ }
47
+ return headers;
48
+ }
49
+ /**
50
+ * 处理响应
51
+ */
52
+ async handleResponse(response) {
53
+ if (!response.ok) {
54
+ const errorText = await response.text();
55
+ throw new Error(`HTTP ${response.status}: ${response.statusText} - ${errorText}`);
56
+ }
57
+ const result = (await response.json());
58
+ if (this.debug) {
59
+ console.log("[API Response]", result);
60
+ }
61
+ if (!result.success || result.status !== 0) {
62
+ throw new Error(`API Error: status=${result.status}, success=${result.success}`);
63
+ }
64
+ return result.data;
65
+ }
66
+ /**
67
+ * GET 请求
68
+ */
69
+ async get(path, params) {
70
+ let url = this.buildUrl(path);
71
+ if (params && params.size > 0) {
72
+ url += `?${params.toString()}`;
73
+ }
74
+ if (this.debug) {
75
+ console.log("[API GET]", url);
76
+ }
77
+ const response = await fetch(url, {
78
+ method: "GET",
79
+ headers: this.buildHeaders(),
80
+ });
81
+ return this.handleResponse(response);
82
+ }
83
+ /**
84
+ * POST 请求
85
+ */
86
+ async post(path, body) {
87
+ const url = this.buildUrl(path);
88
+ if (this.debug) {
89
+ console.log("[API POST]", url, body);
90
+ }
91
+ const init = {
92
+ method: "POST",
93
+ headers: this.buildHeaders(),
94
+ };
95
+ if (body !== undefined) {
96
+ init.body = JSON.stringify(body);
97
+ }
98
+ const response = await fetch(url, init);
99
+ return this.handleResponse(response);
100
+ }
101
+ /**
102
+ * PUT 请求
103
+ */
104
+ async put(path, body) {
105
+ const url = this.buildUrl(path);
106
+ if (this.debug) {
107
+ console.log("[API PUT]", url, body);
108
+ }
109
+ const init = {
110
+ method: "PUT",
111
+ headers: this.buildHeaders(),
112
+ };
113
+ if (body !== undefined) {
114
+ init.body = JSON.stringify(body);
115
+ }
116
+ const response = await fetch(url, init);
117
+ return this.handleResponse(response);
118
+ }
119
+ /**
120
+ * DELETE 请求
121
+ */
122
+ async delete(path) {
123
+ const url = this.buildUrl(path);
124
+ if (this.debug) {
125
+ console.log("[API DELETE]", url);
126
+ }
127
+ const response = await fetch(url, {
128
+ method: "DELETE",
129
+ headers: this.buildHeaders(),
130
+ });
131
+ return this.handleResponse(response);
132
+ }
133
+ }
134
+ // ==================== 二维码登录 API ====================
135
+ /**
136
+ * 二维码登录 API
137
+ */
138
+ export class QRCodeAuthApi {
139
+ client;
140
+ constructor(client) {
141
+ this.client = client;
142
+ }
143
+ /**
144
+ * 生成二维码
145
+ *
146
+ * @returns 二维码信息
147
+ */
148
+ async generateQRCode() {
149
+ return this.client.post("app/qrcode/generate");
150
+ }
151
+ /**
152
+ * 查询二维码状态
153
+ *
154
+ * @param qrToken 二维码 token
155
+ * @returns 二维码状态
156
+ */
157
+ async getQRCodeStatus(qrToken) {
158
+ const params = new URLSearchParams();
159
+ params.append("qrToken", qrToken);
160
+ return this.client.get("app/qrcode/status", params);
161
+ }
162
+ /**
163
+ * 确认登录(PC端调用)
164
+ *
165
+ * @param qrToken 二维码 token
166
+ * @returns 确认结果
167
+ */
168
+ async confirmLogin(qrToken) {
169
+ return this.client.post("app/qrcode/confirm", {
170
+ qrToken,
171
+ });
172
+ }
173
+ }
174
+ // ==================== 工厂函数 ====================
175
+ /**
176
+ * 创建 API 客户端
177
+ */
178
+ export function createApiClient(config = {}) {
179
+ return new ApiClient(config);
180
+ }
181
+ /**
182
+ * 创建二维码认证 API
183
+ */
184
+ export function createQRCodeAuthApi(client = null, config = null) {
185
+ const apiClient = client || new ApiClient(config || {});
186
+ return new QRCodeAuthApi(apiClient);
187
+ }
188
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/services/api/client.ts"],"names":[],"mappings":"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"}