ai-world-sdk 1.3.5 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/admin.d.ts +129 -0
  2. package/dist/admin.js +322 -0
  3. package/dist/agent-skills.d.ts +3 -0
  4. package/dist/agent-skills.js +16 -0
  5. package/dist/chrome-extension.d.ts +54 -0
  6. package/dist/chrome-extension.js +124 -0
  7. package/dist/cli/commands/admin.d.ts +2 -0
  8. package/dist/cli/commands/admin.js +455 -0
  9. package/dist/cli/commands/auth.d.ts +2 -0
  10. package/dist/cli/commands/auth.js +110 -0
  11. package/dist/cli/commands/chrome.d.ts +2 -0
  12. package/dist/cli/commands/chrome.js +192 -0
  13. package/dist/cli/commands/config-cmd.d.ts +2 -0
  14. package/dist/cli/commands/config-cmd.js +80 -0
  15. package/dist/cli/commands/image.d.ts +2 -0
  16. package/dist/cli/commands/image.js +186 -0
  17. package/dist/cli/commands/model.d.ts +2 -0
  18. package/dist/cli/commands/model.js +62 -0
  19. package/dist/cli/commands/plugin.d.ts +2 -0
  20. package/dist/cli/commands/plugin.js +258 -0
  21. package/dist/cli/commands/resource.d.ts +2 -0
  22. package/dist/cli/commands/resource.js +303 -0
  23. package/dist/cli/commands/shared.d.ts +2 -0
  24. package/dist/cli/commands/shared.js +251 -0
  25. package/dist/cli/commands/skill.d.ts +2 -0
  26. package/dist/cli/commands/skill.js +213 -0
  27. package/dist/cli/commands/stats.d.ts +2 -0
  28. package/dist/cli/commands/stats.js +185 -0
  29. package/dist/cli/commands/text.d.ts +2 -0
  30. package/dist/cli/commands/text.js +104 -0
  31. package/dist/cli/commands/versioned.d.ts +2 -0
  32. package/dist/cli/commands/versioned.js +186 -0
  33. package/dist/cli/commands/video.d.ts +2 -0
  34. package/dist/cli/commands/video.js +228 -0
  35. package/dist/cli/config.d.ts +40 -0
  36. package/dist/cli/config.js +133 -0
  37. package/dist/cli/index.d.ts +2 -0
  38. package/dist/cli/index.js +46 -0
  39. package/dist/cli/output.d.ts +5 -0
  40. package/dist/cli/output.js +82 -0
  41. package/dist/cli/utils.d.ts +23 -0
  42. package/dist/cli/utils.js +151 -0
  43. package/dist/config.d.ts +3 -3
  44. package/dist/config.js +2 -2
  45. package/dist/index.d.ts +5 -0
  46. package/dist/index.js +17 -1
  47. package/dist/plugin-management.d.ts +144 -0
  48. package/dist/plugin-management.js +333 -0
  49. package/dist/shared-resource.d.ts +61 -0
  50. package/dist/shared-resource.js +133 -0
  51. package/dist/stats.d.ts +60 -0
  52. package/dist/stats.js +172 -0
  53. package/package.json +7 -3
  54. package/skills/ai-world-sdk/SKILL.md +54 -1
  55. package/skills/ai-world-sdk/docs/admin-api.md +133 -0
  56. package/skills/ai-world-sdk/docs/auth-and-download.md +87 -0
  57. package/skills/ai-world-sdk/docs/cli-commands.md +191 -0
  58. package/skills/ai-world-sdk/docs/cli-usage.md +154 -0
  59. package/skills/ai-world-sdk/docs/common-mistakes.md +23 -2
  60. package/skills/ai-world-sdk/docs/platform-api.md +186 -0
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Admin Client
3
+ * 管理员客户端:用户管理、角色管理、数据库表管理
4
+ * 所有接口需管理员权限
5
+ */
6
+ export interface AdminClientConfig {
7
+ baseUrl?: string;
8
+ token?: string;
9
+ headers?: Record<string, string>;
10
+ }
11
+ export interface AdminUserInfo {
12
+ id: number;
13
+ email?: string;
14
+ full_name?: string;
15
+ avatar_url?: string;
16
+ feishu_user_id?: string;
17
+ is_active: boolean;
18
+ is_superuser: boolean;
19
+ role_id?: number;
20
+ role_name?: string;
21
+ created_at: string;
22
+ }
23
+ export interface AdminUserListResponse {
24
+ items: AdminUserInfo[];
25
+ total: number;
26
+ page: number;
27
+ page_size: number;
28
+ }
29
+ export interface ListUsersOptions {
30
+ page?: number;
31
+ pageSize?: number;
32
+ search?: string;
33
+ roleId?: number;
34
+ noRole?: boolean;
35
+ }
36
+ export interface RoleInfo {
37
+ id: number;
38
+ name: string;
39
+ description?: string;
40
+ permissions: Record<string, boolean>;
41
+ created_at?: string;
42
+ updated_at?: string;
43
+ }
44
+ export interface CreateRoleData {
45
+ name: string;
46
+ description?: string;
47
+ permissions?: Record<string, boolean>;
48
+ }
49
+ export interface UpdateRoleData {
50
+ name?: string;
51
+ description?: string;
52
+ permissions?: Record<string, boolean>;
53
+ }
54
+ export interface RoleUserCount {
55
+ role_id: number;
56
+ role_name: string;
57
+ user_count: number;
58
+ }
59
+ export interface TableColumn {
60
+ name: string;
61
+ type: string;
62
+ nullable?: boolean;
63
+ default?: string;
64
+ primary_key?: boolean;
65
+ }
66
+ export interface TableDataResponse {
67
+ data: Record<string, any>[];
68
+ total: number;
69
+ page: number;
70
+ page_size: number;
71
+ }
72
+ export interface ListTableDataOptions {
73
+ page?: number;
74
+ pageSize?: number;
75
+ search?: string;
76
+ sortBy?: string;
77
+ sortOrder?: "asc" | "desc";
78
+ }
79
+ export declare class AdminClient {
80
+ private baseUrl;
81
+ private headers;
82
+ constructor(config?: AdminClientConfig);
83
+ private handleErrorResponse;
84
+ private buildUrl;
85
+ listUsers(options?: ListUsersOptions): Promise<AdminUserListResponse>;
86
+ getUser(userId: number): Promise<AdminUserInfo>;
87
+ activateUser(userId: number): Promise<{
88
+ message: string;
89
+ }>;
90
+ deactivateUser(userId: number): Promise<{
91
+ message: string;
92
+ }>;
93
+ makeAdmin(userId: number): Promise<{
94
+ message: string;
95
+ }>;
96
+ removeAdmin(userId: number): Promise<{
97
+ message: string;
98
+ }>;
99
+ setUserRole(userId: number, roleId?: number): Promise<{
100
+ message: string;
101
+ }>;
102
+ batchSetRole(userIds: number[], roleId?: number | null): Promise<{
103
+ message: string;
104
+ }>;
105
+ listRoles(): Promise<RoleInfo[]>;
106
+ getRole(roleId: number): Promise<RoleInfo>;
107
+ getRoleUserCounts(): Promise<RoleUserCount[]>;
108
+ createRole(data: CreateRoleData): Promise<RoleInfo>;
109
+ updateRole(roleId: number, data: UpdateRoleData): Promise<RoleInfo>;
110
+ deleteRole(roleId: number): Promise<{
111
+ message: string;
112
+ }>;
113
+ listTables(): Promise<string[]>;
114
+ getTableSchema(tableName: string): Promise<TableColumn[]>;
115
+ getTableData(tableName: string, options?: ListTableDataOptions): Promise<TableDataResponse>;
116
+ insertRow(tableName: string, data: Record<string, any>): Promise<Record<string, any>>;
117
+ updateRow(tableName: string, primaryKey: Record<string, any>, data: Record<string, any>): Promise<Record<string, any>>;
118
+ deleteRow(tableName: string, primaryKey: Record<string, any>): Promise<{
119
+ message: string;
120
+ }>;
121
+ executeSql(data: {
122
+ sql: string;
123
+ description?: string;
124
+ }): Promise<any>;
125
+ getSqlHistory(options?: {
126
+ page?: number;
127
+ pageSize?: number;
128
+ }): Promise<any>;
129
+ }
package/dist/admin.js ADDED
@@ -0,0 +1,322 @@
1
+ "use strict";
2
+ /**
3
+ * Admin Client
4
+ * 管理员客户端:用户管理、角色管理、数据库表管理
5
+ * 所有接口需管理员权限
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.AdminClient = void 0;
9
+ const config_1 = require("./config");
10
+ const log_1 = require("./log");
11
+ class AdminClient {
12
+ constructor(config = {}) {
13
+ this.baseUrl =
14
+ config.baseUrl ||
15
+ config_1.sdkConfig.getServerUrl() ||
16
+ (typeof window !== "undefined" ? window.location.origin : "");
17
+ const globalHeaders = config_1.sdkConfig.getHeaders();
18
+ const globalToken = config.token || config_1.sdkConfig.getToken();
19
+ this.headers = {
20
+ "Content-Type": "application/json",
21
+ ...globalHeaders,
22
+ ...config.headers,
23
+ };
24
+ if (globalToken) {
25
+ this.headers["Authorization"] = `Bearer ${globalToken}`;
26
+ }
27
+ }
28
+ async handleErrorResponse(response) {
29
+ let errorMessage = `Request failed: ${response.status} ${response.statusText}`;
30
+ try {
31
+ const errorText = await response.text();
32
+ const errorJson = JSON.parse(errorText);
33
+ errorMessage = errorJson.detail || errorMessage;
34
+ }
35
+ catch { }
36
+ throw new Error(errorMessage);
37
+ }
38
+ buildUrl(path, params) {
39
+ const url = `${this.baseUrl}${path}`;
40
+ if (!params)
41
+ return url;
42
+ const sp = new URLSearchParams();
43
+ for (const [k, v] of Object.entries(params)) {
44
+ if (v !== undefined && v !== null)
45
+ sp.append(k, String(v));
46
+ }
47
+ const qs = sp.toString();
48
+ return qs ? `${url}?${qs}` : url;
49
+ }
50
+ // ==================== 用户管理 ====================
51
+ async listUsers(options = {}) {
52
+ config_1.sdkConfig.ensureVersionCompatible();
53
+ const url = this.buildUrl("/api/admin/users", {
54
+ page: options.page,
55
+ page_size: options.pageSize,
56
+ search: options.search,
57
+ role_id: options.roleId,
58
+ no_role: options.noRole,
59
+ });
60
+ (0, log_1.debugLog)("Admin list users:", options);
61
+ (0, log_1.logRequest)("GET", url, this.headers);
62
+ const response = await fetch(url, { headers: this.headers });
63
+ if (!response.ok)
64
+ await this.handleErrorResponse(response);
65
+ const result = (await response.json());
66
+ (0, log_1.logResponse)(response.status, response.statusText, response.headers, result);
67
+ return result;
68
+ }
69
+ async getUser(userId) {
70
+ config_1.sdkConfig.ensureVersionCompatible();
71
+ const url = `${this.baseUrl}/api/admin/users/${userId}`;
72
+ (0, log_1.logRequest)("GET", url, this.headers);
73
+ const response = await fetch(url, { headers: this.headers });
74
+ if (!response.ok)
75
+ await this.handleErrorResponse(response);
76
+ const result = (await response.json());
77
+ (0, log_1.logResponse)(response.status, response.statusText, response.headers, result);
78
+ return result;
79
+ }
80
+ async activateUser(userId) {
81
+ config_1.sdkConfig.ensureVersionCompatible();
82
+ const url = `${this.baseUrl}/api/admin/users/${userId}/activate`;
83
+ (0, log_1.logRequest)("PATCH", url, this.headers);
84
+ const response = await fetch(url, {
85
+ method: "PATCH",
86
+ headers: this.headers,
87
+ });
88
+ if (!response.ok)
89
+ await this.handleErrorResponse(response);
90
+ return (await response.json());
91
+ }
92
+ async deactivateUser(userId) {
93
+ config_1.sdkConfig.ensureVersionCompatible();
94
+ const url = `${this.baseUrl}/api/admin/users/${userId}/deactivate`;
95
+ (0, log_1.logRequest)("PATCH", url, this.headers);
96
+ const response = await fetch(url, {
97
+ method: "PATCH",
98
+ headers: this.headers,
99
+ });
100
+ if (!response.ok)
101
+ await this.handleErrorResponse(response);
102
+ return (await response.json());
103
+ }
104
+ async makeAdmin(userId) {
105
+ config_1.sdkConfig.ensureVersionCompatible();
106
+ const url = `${this.baseUrl}/api/admin/users/${userId}/make-admin`;
107
+ (0, log_1.logRequest)("PATCH", url, this.headers);
108
+ const response = await fetch(url, {
109
+ method: "PATCH",
110
+ headers: this.headers,
111
+ });
112
+ if (!response.ok)
113
+ await this.handleErrorResponse(response);
114
+ return (await response.json());
115
+ }
116
+ async removeAdmin(userId) {
117
+ config_1.sdkConfig.ensureVersionCompatible();
118
+ const url = `${this.baseUrl}/api/admin/users/${userId}/remove-admin`;
119
+ (0, log_1.logRequest)("PATCH", url, this.headers);
120
+ const response = await fetch(url, {
121
+ method: "PATCH",
122
+ headers: this.headers,
123
+ });
124
+ if (!response.ok)
125
+ await this.handleErrorResponse(response);
126
+ return (await response.json());
127
+ }
128
+ async setUserRole(userId, roleId) {
129
+ config_1.sdkConfig.ensureVersionCompatible();
130
+ const url = this.buildUrl(`/api/admin/users/${userId}/role`, roleId !== undefined ? { role_id: roleId } : undefined);
131
+ (0, log_1.logRequest)("PATCH", url, this.headers);
132
+ const response = await fetch(url, {
133
+ method: "PATCH",
134
+ headers: this.headers,
135
+ });
136
+ if (!response.ok)
137
+ await this.handleErrorResponse(response);
138
+ return (await response.json());
139
+ }
140
+ async batchSetRole(userIds, roleId) {
141
+ config_1.sdkConfig.ensureVersionCompatible();
142
+ const url = `${this.baseUrl}/api/admin/users/batch-role`;
143
+ (0, log_1.logRequest)("PATCH", url, this.headers);
144
+ const response = await fetch(url, {
145
+ method: "PATCH",
146
+ headers: this.headers,
147
+ body: JSON.stringify({ user_ids: userIds, role_id: roleId ?? null }),
148
+ });
149
+ if (!response.ok)
150
+ await this.handleErrorResponse(response);
151
+ return (await response.json());
152
+ }
153
+ // ==================== 角色管理 ====================
154
+ async listRoles() {
155
+ config_1.sdkConfig.ensureVersionCompatible();
156
+ const url = `${this.baseUrl}/api/admin/roles`;
157
+ (0, log_1.logRequest)("GET", url, this.headers);
158
+ const response = await fetch(url, { headers: this.headers });
159
+ if (!response.ok)
160
+ await this.handleErrorResponse(response);
161
+ const result = (await response.json());
162
+ (0, log_1.logResponse)(response.status, response.statusText, response.headers, result);
163
+ return result;
164
+ }
165
+ async getRole(roleId) {
166
+ config_1.sdkConfig.ensureVersionCompatible();
167
+ const url = `${this.baseUrl}/api/admin/roles/${roleId}`;
168
+ (0, log_1.logRequest)("GET", url, this.headers);
169
+ const response = await fetch(url, { headers: this.headers });
170
+ if (!response.ok)
171
+ await this.handleErrorResponse(response);
172
+ const result = (await response.json());
173
+ (0, log_1.logResponse)(response.status, response.statusText, response.headers, result);
174
+ return result;
175
+ }
176
+ async getRoleUserCounts() {
177
+ config_1.sdkConfig.ensureVersionCompatible();
178
+ const url = `${this.baseUrl}/api/admin/roles/user-counts`;
179
+ (0, log_1.logRequest)("GET", url, this.headers);
180
+ const response = await fetch(url, { headers: this.headers });
181
+ if (!response.ok)
182
+ await this.handleErrorResponse(response);
183
+ return (await response.json());
184
+ }
185
+ async createRole(data) {
186
+ config_1.sdkConfig.ensureVersionCompatible();
187
+ const url = `${this.baseUrl}/api/admin/roles`;
188
+ (0, log_1.logRequest)("POST", url, this.headers);
189
+ const response = await fetch(url, {
190
+ method: "POST",
191
+ headers: this.headers,
192
+ body: JSON.stringify(data),
193
+ });
194
+ if (!response.ok)
195
+ await this.handleErrorResponse(response);
196
+ return (await response.json());
197
+ }
198
+ async updateRole(roleId, data) {
199
+ config_1.sdkConfig.ensureVersionCompatible();
200
+ const url = `${this.baseUrl}/api/admin/roles/${roleId}`;
201
+ (0, log_1.logRequest)("PATCH", url, this.headers);
202
+ const response = await fetch(url, {
203
+ method: "PATCH",
204
+ headers: this.headers,
205
+ body: JSON.stringify(data),
206
+ });
207
+ if (!response.ok)
208
+ await this.handleErrorResponse(response);
209
+ return (await response.json());
210
+ }
211
+ async deleteRole(roleId) {
212
+ config_1.sdkConfig.ensureVersionCompatible();
213
+ const url = `${this.baseUrl}/api/admin/roles/${roleId}`;
214
+ (0, log_1.logRequest)("DELETE", url, this.headers);
215
+ const response = await fetch(url, {
216
+ method: "DELETE",
217
+ headers: this.headers,
218
+ });
219
+ if (!response.ok)
220
+ await this.handleErrorResponse(response);
221
+ return (await response.json());
222
+ }
223
+ // ==================== 数据库表管理 ====================
224
+ async listTables() {
225
+ config_1.sdkConfig.ensureVersionCompatible();
226
+ const url = `${this.baseUrl}/api/admin/database/tables`;
227
+ (0, log_1.logRequest)("GET", url, this.headers);
228
+ const response = await fetch(url, { headers: this.headers });
229
+ if (!response.ok)
230
+ await this.handleErrorResponse(response);
231
+ return (await response.json());
232
+ }
233
+ async getTableSchema(tableName) {
234
+ config_1.sdkConfig.ensureVersionCompatible();
235
+ const url = `${this.baseUrl}/api/admin/database/tables/${tableName}/schema`;
236
+ (0, log_1.logRequest)("GET", url, this.headers);
237
+ const response = await fetch(url, { headers: this.headers });
238
+ if (!response.ok)
239
+ await this.handleErrorResponse(response);
240
+ return (await response.json());
241
+ }
242
+ async getTableData(tableName, options = {}) {
243
+ config_1.sdkConfig.ensureVersionCompatible();
244
+ const url = this.buildUrl(`/api/admin/database/tables/${tableName}/data`, {
245
+ page: options.page,
246
+ page_size: options.pageSize,
247
+ search: options.search,
248
+ sort_by: options.sortBy,
249
+ sort_order: options.sortOrder,
250
+ });
251
+ (0, log_1.logRequest)("GET", url, this.headers);
252
+ const response = await fetch(url, { headers: this.headers });
253
+ if (!response.ok)
254
+ await this.handleErrorResponse(response);
255
+ return (await response.json());
256
+ }
257
+ async insertRow(tableName, data) {
258
+ config_1.sdkConfig.ensureVersionCompatible();
259
+ const url = `${this.baseUrl}/api/admin/database/tables/${tableName}/data`;
260
+ (0, log_1.logRequest)("POST", url, this.headers);
261
+ const response = await fetch(url, {
262
+ method: "POST",
263
+ headers: this.headers,
264
+ body: JSON.stringify(data),
265
+ });
266
+ if (!response.ok)
267
+ await this.handleErrorResponse(response);
268
+ return (await response.json());
269
+ }
270
+ async updateRow(tableName, primaryKey, data) {
271
+ config_1.sdkConfig.ensureVersionCompatible();
272
+ const url = `${this.baseUrl}/api/admin/database/tables/${tableName}/data`;
273
+ (0, log_1.logRequest)("PUT", url, this.headers);
274
+ const response = await fetch(url, {
275
+ method: "PUT",
276
+ headers: this.headers,
277
+ body: JSON.stringify({ primary_key: primaryKey, data }),
278
+ });
279
+ if (!response.ok)
280
+ await this.handleErrorResponse(response);
281
+ return (await response.json());
282
+ }
283
+ async deleteRow(tableName, primaryKey) {
284
+ config_1.sdkConfig.ensureVersionCompatible();
285
+ const url = `${this.baseUrl}/api/admin/database/tables/${tableName}/data`;
286
+ (0, log_1.logRequest)("DELETE", url, this.headers);
287
+ const response = await fetch(url, {
288
+ method: "DELETE",
289
+ headers: this.headers,
290
+ body: JSON.stringify({ primary_key: primaryKey }),
291
+ });
292
+ if (!response.ok)
293
+ await this.handleErrorResponse(response);
294
+ return (await response.json());
295
+ }
296
+ async executeSql(data) {
297
+ config_1.sdkConfig.ensureVersionCompatible();
298
+ const url = `${this.baseUrl}/api/admin/database/execute-sql`;
299
+ (0, log_1.logRequest)("POST", url, this.headers);
300
+ const response = await fetch(url, {
301
+ method: "POST",
302
+ headers: this.headers,
303
+ body: JSON.stringify(data),
304
+ });
305
+ if (!response.ok)
306
+ await this.handleErrorResponse(response);
307
+ return await response.json();
308
+ }
309
+ async getSqlHistory(options = {}) {
310
+ config_1.sdkConfig.ensureVersionCompatible();
311
+ const url = this.buildUrl("/api/admin/database/sql-history", {
312
+ page: options.page,
313
+ page_size: options.pageSize,
314
+ });
315
+ (0, log_1.logRequest)("GET", url, this.headers);
316
+ const response = await fetch(url, { headers: this.headers });
317
+ if (!response.ok)
318
+ await this.handleErrorResponse(response);
319
+ return await response.json();
320
+ }
321
+ }
322
+ exports.AdminClient = AdminClient;
@@ -69,6 +69,9 @@ export declare class AgentSkillClient {
69
69
  * 获取 Skill 详情
70
70
  */
71
71
  get(skillName: string): Promise<AgentSkillInfo>;
72
+ getSkillMd(skillName: string): Promise<{
73
+ content: string;
74
+ }>;
72
75
  /**
73
76
  * Upload a skill (zip file)
74
77
  * 上传 Skill
@@ -112,6 +112,22 @@ class AgentSkillClient {
112
112
  (0, log_1.logResponse)(response.status, response.statusText, response.headers, result);
113
113
  return result;
114
114
  }
115
+ async getSkillMd(skillName) {
116
+ config_1.sdkConfig.ensureVersionCompatible();
117
+ const apiUrl = `${this.baseUrl}/api/agent-skills/${skillName}/skill-md`;
118
+ (0, log_1.debugLog)("Get agent skill SKILL.md:", { skillName });
119
+ (0, log_1.logRequest)("GET", apiUrl, this.headers);
120
+ const response = await fetch(apiUrl, {
121
+ method: "GET",
122
+ headers: this.headers,
123
+ });
124
+ if (!response.ok) {
125
+ await this.handleErrorResponse(response);
126
+ }
127
+ const result = (await response.json());
128
+ (0, log_1.logResponse)(response.status, response.statusText, response.headers, result);
129
+ return result;
130
+ }
115
131
  /**
116
132
  * Upload a skill (zip file)
117
133
  * 上传 Skill
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Chrome Extension Client
3
+ * Chrome 插件管理客户端
4
+ */
5
+ export interface ChromeExtensionClientConfig {
6
+ baseUrl?: string;
7
+ token?: string;
8
+ headers?: Record<string, string>;
9
+ }
10
+ export interface ChromeExtensionInfo {
11
+ extension_id: string;
12
+ name: string;
13
+ description: string;
14
+ author?: string;
15
+ version: string;
16
+ user_id?: number;
17
+ created_at?: string;
18
+ updated_at?: string;
19
+ }
20
+ export interface ChromeExtensionListResponse {
21
+ items: ChromeExtensionInfo[];
22
+ total: number;
23
+ page: number;
24
+ page_size: number;
25
+ }
26
+ export interface ListChromeExtensionsOptions {
27
+ page?: number;
28
+ pageSize?: number;
29
+ name?: string;
30
+ extensionId?: string;
31
+ author?: string;
32
+ }
33
+ export interface CreateChromeExtensionData {
34
+ extensionId: string;
35
+ name: string;
36
+ description: string;
37
+ author?: string;
38
+ version?: string;
39
+ extensionZip?: File | Blob;
40
+ }
41
+ export declare class ChromeExtensionClient {
42
+ private baseUrl;
43
+ private headers;
44
+ constructor(config?: ChromeExtensionClientConfig);
45
+ private handleErrorResponse;
46
+ private buildUrl;
47
+ list(options?: ListChromeExtensionsOptions): Promise<ChromeExtensionListResponse>;
48
+ get(extensionId: string): Promise<ChromeExtensionInfo>;
49
+ create(data: CreateChromeExtensionData): Promise<ChromeExtensionInfo>;
50
+ delete(extensionId: string): Promise<{
51
+ message: string;
52
+ }>;
53
+ download(extensionId: string): Promise<Blob>;
54
+ }
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ /**
3
+ * Chrome Extension Client
4
+ * Chrome 插件管理客户端
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.ChromeExtensionClient = void 0;
8
+ const config_1 = require("./config");
9
+ const log_1 = require("./log");
10
+ class ChromeExtensionClient {
11
+ constructor(config = {}) {
12
+ this.baseUrl =
13
+ config.baseUrl ||
14
+ config_1.sdkConfig.getServerUrl() ||
15
+ (typeof window !== "undefined" ? window.location.origin : "");
16
+ const globalHeaders = config_1.sdkConfig.getHeaders();
17
+ const globalToken = config.token || config_1.sdkConfig.getToken();
18
+ this.headers = {
19
+ "Content-Type": "application/json",
20
+ ...globalHeaders,
21
+ ...config.headers,
22
+ };
23
+ if (globalToken) {
24
+ this.headers["Authorization"] = `Bearer ${globalToken}`;
25
+ }
26
+ }
27
+ async handleErrorResponse(response) {
28
+ let errorMessage = `Request failed: ${response.status} ${response.statusText}`;
29
+ try {
30
+ const errorText = await response.text();
31
+ const errorJson = JSON.parse(errorText);
32
+ errorMessage = errorJson.detail || errorMessage;
33
+ }
34
+ catch { }
35
+ throw new Error(errorMessage);
36
+ }
37
+ buildUrl(path, params) {
38
+ const url = `${this.baseUrl}${path}`;
39
+ if (!params)
40
+ return url;
41
+ const sp = new URLSearchParams();
42
+ for (const [k, v] of Object.entries(params)) {
43
+ if (v !== undefined && v !== null)
44
+ sp.append(k, String(v));
45
+ }
46
+ const qs = sp.toString();
47
+ return qs ? `${url}?${qs}` : url;
48
+ }
49
+ async list(options = {}) {
50
+ config_1.sdkConfig.ensureVersionCompatible();
51
+ const url = this.buildUrl("/api/chrome-extensions/", {
52
+ page: options.page,
53
+ page_size: options.pageSize,
54
+ name: options.name,
55
+ extension_id: options.extensionId,
56
+ author: options.author,
57
+ });
58
+ (0, log_1.logRequest)("GET", url, this.headers);
59
+ const response = await fetch(url, { headers: this.headers });
60
+ if (!response.ok)
61
+ await this.handleErrorResponse(response);
62
+ const result = (await response.json());
63
+ (0, log_1.logResponse)(response.status, response.statusText, response.headers, result);
64
+ return result;
65
+ }
66
+ async get(extensionId) {
67
+ config_1.sdkConfig.ensureVersionCompatible();
68
+ const url = `${this.baseUrl}/api/chrome-extensions/${extensionId}`;
69
+ (0, log_1.logRequest)("GET", url, this.headers);
70
+ const response = await fetch(url, { headers: this.headers });
71
+ if (!response.ok)
72
+ await this.handleErrorResponse(response);
73
+ const result = (await response.json());
74
+ (0, log_1.logResponse)(response.status, response.statusText, response.headers, result);
75
+ return result;
76
+ }
77
+ async create(data) {
78
+ config_1.sdkConfig.ensureVersionCompatible();
79
+ const url = `${this.baseUrl}/api/chrome-extensions/create`;
80
+ const formData = new FormData();
81
+ formData.append("extension_id", data.extensionId);
82
+ formData.append("name", data.name);
83
+ formData.append("description", data.description);
84
+ if (data.author)
85
+ formData.append("author", data.author);
86
+ if (data.version)
87
+ formData.append("version", data.version);
88
+ if (data.extensionZip)
89
+ formData.append("extension_zip", data.extensionZip);
90
+ const uploadHeaders = { ...this.headers };
91
+ delete uploadHeaders["Content-Type"];
92
+ (0, log_1.logRequest)("POST", url, uploadHeaders);
93
+ const response = await fetch(url, {
94
+ method: "POST",
95
+ headers: uploadHeaders,
96
+ body: formData,
97
+ });
98
+ if (!response.ok)
99
+ await this.handleErrorResponse(response);
100
+ return (await response.json());
101
+ }
102
+ async delete(extensionId) {
103
+ config_1.sdkConfig.ensureVersionCompatible();
104
+ const url = `${this.baseUrl}/api/chrome-extensions/${extensionId}`;
105
+ (0, log_1.logRequest)("DELETE", url, this.headers);
106
+ const response = await fetch(url, {
107
+ method: "DELETE",
108
+ headers: this.headers,
109
+ });
110
+ if (!response.ok)
111
+ await this.handleErrorResponse(response);
112
+ return (await response.json());
113
+ }
114
+ async download(extensionId) {
115
+ config_1.sdkConfig.ensureVersionCompatible();
116
+ const url = `${this.baseUrl}/api/chrome-extensions/${extensionId}/download`;
117
+ (0, log_1.logRequest)("GET", url, this.headers);
118
+ const response = await fetch(url, { headers: this.headers });
119
+ if (!response.ok)
120
+ await this.handleErrorResponse(response);
121
+ return await response.blob();
122
+ }
123
+ }
124
+ exports.ChromeExtensionClient = ChromeExtensionClient;
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerAdminCommands(program: Command): void;