@lobehub/market-sdk 0.0.8 → 0.0.10

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.
package/dist/index.d.mts CHANGED
@@ -1,5 +1,28 @@
1
1
  import { z } from 'zod';
2
2
 
3
+ interface PluginQueryParams {
4
+ page?: number;
5
+ pageSize?: number;
6
+ category?: string;
7
+ tags?: string;
8
+ q?: string;
9
+ sort?: 'installCount' | 'createdAt' | 'updatedAt' | 'ratingAverage';
10
+ order?: 'asc' | 'desc';
11
+ locale?: string;
12
+ }
13
+
14
+ /**
15
+ * 更新插件信息参数
16
+ */
17
+ interface PluginUpdateParams {
18
+ identifier?: string;
19
+ visibility?: 'public' | 'private' | 'unlisted';
20
+ status?: 'published' | 'draft' | 'review' | 'rejected';
21
+ isFeatured?: boolean;
22
+ tags?: string[];
23
+ meta?: Record<string, any>;
24
+ }
25
+
3
26
  declare const PluginTypeEnum: z.ZodEnum<["lobe", "openai", "mcp"]>;
4
27
  type PluginType = z.infer<typeof PluginTypeEnum>;
5
28
  declare const ConnectionTypeEnum: z.ZodEnum<["http", "stdio"]>;
@@ -148,61 +171,346 @@ interface MarketSDKOptions {
148
171
  defaultLocale?: string;
149
172
  apiKey?: string;
150
173
  }
174
+ interface Plugin {
175
+ id: number;
176
+ identifier: string;
177
+ name: string;
178
+ description: string;
179
+ ownerId: number;
180
+ type: string;
181
+ visibility: 'public' | 'private' | 'unlisted';
182
+ status: 'published' | 'draft' | 'review' | 'rejected';
183
+ isFeatured: boolean;
184
+ category: string;
185
+ tags: string[];
186
+ icon: string | null;
187
+ author: string | null;
188
+ homepage: string | null;
189
+ manifestVersion: string;
190
+ createdAt: string;
191
+ updatedAt: string;
192
+ meta: Record<string, any> | null;
193
+ installCount: number;
194
+ ratingAverage: number | null;
195
+ ratingCount: number;
196
+ reviewCount: number;
197
+ }
198
+ interface PluginVersion {
199
+ id: number;
200
+ pluginId: number;
201
+ version: string;
202
+ isLatest: boolean;
203
+ manifestUrl: string | null;
204
+ toolsCount: number;
205
+ promptsCount: number;
206
+ resourcesCount: number;
207
+ isValidated: boolean;
208
+ createdAt: string;
209
+ updatedAt: string;
210
+ manifest: PluginManifest;
211
+ meta: Record<string, any> | null;
212
+ }
213
+ interface AdminPluginParams {
214
+ status?: 'published' | 'draft' | 'review' | 'rejected';
215
+ visibility?: 'public' | 'private' | 'unlisted';
216
+ featured?: boolean;
217
+ ownerId?: number;
218
+ limit?: number;
219
+ offset?: number;
220
+ orderBy?: 'createdAt' | 'updatedAt' | 'installCount' | 'ratingAverage';
221
+ order?: 'asc' | 'desc';
222
+ }
223
+ interface PluginVersionCreateParams {
224
+ version: string;
225
+ manifest: PluginManifest;
226
+ manifestUrl?: string;
227
+ isLatest?: boolean;
228
+ isValidated?: boolean;
229
+ meta?: Record<string, any>;
230
+ }
231
+ interface PluginVersionUpdateParams {
232
+ manifestUrl?: string;
233
+ isValidated?: boolean;
234
+ meta?: Record<string, any>;
235
+ }
151
236
 
152
237
  /**
153
- * LobeHub Market SDK Client
238
+ * 基础 SDK
239
+ * 提供共享的请求逻辑和认证功能
240
+ */
241
+ declare class BaseSDK {
242
+ protected baseUrl: string;
243
+ protected defaultLocale: string;
244
+ protected headers: Record<string, string>;
245
+ /**
246
+ * 创建基础 SDK 实例
247
+ * @param options SDK 配置选项
248
+ * @param sharedHeaders 共享的 headers 对象(可选)
249
+ */
250
+ constructor(options?: MarketSDKOptions, sharedHeaders?: Record<string, string>);
251
+ /**
252
+ * 发送请求并处理响应
253
+ * @param url 请求 URL
254
+ * @param options fetch 选项
255
+ * @returns 响应数据
256
+ */
257
+ protected request<T>(url: string, options?: RequestInit): Promise<T>;
258
+ /**
259
+ * 构建查询字符串
260
+ * @param params 查询参数
261
+ * @returns 查询字符串
262
+ */
263
+ protected buildQueryString(params: Record<string, any>): string;
264
+ /**
265
+ * 设置认证令牌
266
+ * @param token 认证令牌
267
+ */
268
+ setAuthToken(token: string): void;
269
+ /**
270
+ * 清除认证令牌
271
+ */
272
+ clearAuthToken(): void;
273
+ }
274
+
275
+ /**
276
+ * 管理员服务
277
+ * 处理管理员相关功能
154
278
  */
155
- declare class MarketSDK {
156
- private baseUrl;
157
- private defaultLocale;
279
+ declare class AdminService extends BaseSDK {
280
+ /**
281
+ * 创建管理员服务实例
282
+ * @param options SDK 配置选项
283
+ * @param sharedHeaders 共享的 headers 对象(可选)
284
+ */
285
+ constructor(options?: MarketSDKOptions, sharedHeaders?: Record<string, string>);
286
+ /**
287
+ * 导入插件清单(需要管理员权限)
288
+ * @param manifests 插件清单数组
289
+ * @param ownerId 所有者 ID
290
+ * @returns 导入结果
291
+ */
292
+ importManifests(manifests: PluginManifest[], ownerId?: number): Promise<{
293
+ success: number;
294
+ failed: number;
295
+ }>;
296
+ /**
297
+ * 获取插件列表
298
+ * @param params 查询参数
299
+ * @returns 插件列表响应
300
+ */
301
+ getPlugins(params?: AdminPluginParams): Promise<{
302
+ data: Plugin[];
303
+ }>;
304
+ /**
305
+ * 获取单个插件(含所有版本)
306
+ * @param id 插件 ID
307
+ * @returns 插件(含版本)
308
+ */
309
+ getPlugin(id: number): Promise<{
310
+ data: Plugin & {
311
+ versions: PluginVersion[];
312
+ };
313
+ }>;
314
+ /**
315
+ * 更新插件信息
316
+ * @param id 插件 ID
317
+ * @param data 插件更新数据
318
+ * @returns 更新后的插件
319
+ */
320
+ updatePlugin(id: number, data: PluginUpdateParams): Promise<{
321
+ data: Plugin;
322
+ }>;
323
+ /**
324
+ * 更新插件状态
325
+ * @param id 插件 ID
326
+ * @param status 新状态
327
+ * @returns 成功响应
328
+ */
329
+ updatePluginStatus(id: number, status: 'published' | 'draft' | 'review' | 'rejected'): Promise<{
330
+ success: boolean;
331
+ message: string;
332
+ }>;
333
+ /**
334
+ * 删除插件
335
+ * @param id 插件 ID
336
+ * @returns 成功响应
337
+ */
338
+ deletePlugin(id: number): Promise<{
339
+ success: boolean;
340
+ message: string;
341
+ }>;
342
+ /**
343
+ * 获取插件版本列表
344
+ * @param pluginId 插件 ID
345
+ * @returns 插件版本列表
346
+ */
347
+ getPluginVersions(pluginId: number): Promise<{
348
+ data: PluginVersion[];
349
+ }>;
350
+ /**
351
+ * 获取单个插件版本
352
+ * @param pluginId 插件 ID
353
+ * @param versionId 版本 ID
354
+ * @returns 插件版本
355
+ */
356
+ getPluginVersion(pluginId: number, versionId: number): Promise<{
357
+ data: PluginVersion;
358
+ }>;
359
+ /**
360
+ * 创建插件版本
361
+ * @param pluginId 插件 ID
362
+ * @param data 版本创建数据
363
+ * @returns 创建的版本
364
+ */
365
+ createPluginVersion(pluginId: number, data: PluginVersionCreateParams): Promise<{
366
+ data: PluginVersion;
367
+ }>;
368
+ /**
369
+ * 更新插件版本
370
+ * @param pluginId 插件 ID
371
+ * @param versionId 版本 ID
372
+ * @param data 版本更新数据
373
+ * @returns 更新后的版本
374
+ */
375
+ updatePluginVersion(pluginId: number, versionId: number, data: PluginVersionUpdateParams): Promise<{
376
+ data: PluginVersion;
377
+ }>;
378
+ /**
379
+ * 删除插件版本
380
+ * @param pluginId 插件 ID
381
+ * @param versionId 版本 ID
382
+ * @returns 成功响应
383
+ */
384
+ deletePluginVersion(pluginId: number, versionId: number): Promise<{
385
+ success: boolean;
386
+ message: string;
387
+ }>;
388
+ /**
389
+ * 设置插件版本为最新版本
390
+ * @param pluginId 插件 ID
391
+ * @param versionId 版本 ID
392
+ * @returns 成功响应
393
+ */
394
+ setPluginVersionAsLatest(pluginId: number, versionId: number): Promise<{
395
+ success: boolean;
396
+ message: string;
397
+ }>;
398
+ /**
399
+ * 获取所有系统依赖项
400
+ * @returns 系统依赖项列表
401
+ */
402
+ getSystemDependencies(): Promise<{
403
+ data: SystemDependency[];
404
+ }>;
405
+ /**
406
+ * 获取特定系统依赖项
407
+ * @param id 依赖项 ID
408
+ * @returns 系统依赖项
409
+ */
410
+ getSystemDependency(id: number): Promise<{
411
+ data: SystemDependency;
412
+ }>;
413
+ /**
414
+ * 创建系统依赖项
415
+ * @param data 依赖项创建数据
416
+ * @returns 创建的依赖项
417
+ */
418
+ createSystemDependency(data: Omit<SystemDependency, 'id'>): Promise<{
419
+ data: SystemDependency;
420
+ }>;
421
+ /**
422
+ * 更新系统依赖项
423
+ * @param id 依赖项 ID
424
+ * @param data 依赖项更新数据
425
+ * @returns 更新后的依赖项
426
+ */
427
+ updateSystemDependency(id: number, data: Partial<SystemDependency>): Promise<{
428
+ data: SystemDependency;
429
+ }>;
430
+ /**
431
+ * 删除系统依赖项
432
+ * @param id 依赖项 ID
433
+ * @returns 成功响应
434
+ */
435
+ deleteSystemDependency(id: number): Promise<{
436
+ success: boolean;
437
+ message: string;
438
+ }>;
439
+ }
440
+
441
+ /**
442
+ * 插件服务
443
+ * 处理插件相关功能
444
+ */
445
+ declare class PluginsService extends BaseSDK {
446
+ /**
447
+ * 创建插件服务实例
448
+ * @param options SDK 配置选项
449
+ * @param sharedHeaders 共享的 headers 对象(可选)
450
+ */
451
+ constructor(options?: MarketSDKOptions, sharedHeaders?: Record<string, string>);
452
+ /**
453
+ * 获取插件列表
454
+ * @param params 查询参数
455
+ * @returns 插件列表响应
456
+ */
457
+ getPluginList(params?: PluginQueryParams): Promise<PluginListResponse>;
458
+ /**
459
+ * 获取插件清单
460
+ * @param identifier 插件标识符
461
+ * @param locale 语言
462
+ * @param version 版本
463
+ * @returns 插件清单
464
+ */
465
+ getPluginManifest(identifier: string, locale?: string, version?: string): Promise<PluginManifest>;
466
+ }
467
+
468
+ /**
469
+ * 发现服务
470
+ * 处理服务发现功能
471
+ */
472
+ declare class DiscoveryService extends BaseSDK {
158
473
  private discoveryDoc?;
159
- private headers;
160
474
  /**
161
- * Create MarketSDK instance
162
- * @param options SDK configuration options
475
+ * 创建发现服务实例
476
+ * @param options SDK 配置选项
477
+ * @param sharedHeaders 共享的 headers 对象(可选)
163
478
  */
164
- constructor(options?: MarketSDKOptions);
479
+ constructor(options?: MarketSDKOptions, sharedHeaders?: Record<string, string>);
165
480
  /**
166
- * Send request and handle response
167
- * @param url Request URL
168
- * @param options fetch options
169
- * @returns Response data
481
+ * 获取市场服务发现文档
482
+ * @returns 服务发现文档
170
483
  */
171
- private request;
484
+ getDiscoveryDocument(): Promise<DiscoveryDocument>;
485
+ }
486
+
487
+ /**
488
+ * LobeHub Market SDK Client
489
+ * 采用组合模式组合各个领域服务
490
+ */
491
+ declare class MarketSDK extends BaseSDK {
172
492
  /**
173
- * Build query string
174
- * @param params Query parameters
175
- * @returns Query string
493
+ * 插件服务
176
494
  */
177
- private buildQueryString;
495
+ readonly plugins: PluginsService;
496
+ /**
497
+ * 管理员服务
498
+ */
499
+ readonly admin: AdminService;
500
+ /**
501
+ * 发现服务
502
+ */
503
+ private readonly discovery;
504
+ /**
505
+ * Create MarketSDK instance
506
+ * @param options SDK configuration options
507
+ */
508
+ constructor(options?: MarketSDKOptions);
178
509
  /**
179
510
  * Get market service discovery document
180
511
  * @returns Service discovery document
181
512
  */
182
513
  getDiscoveryDocument(): Promise<DiscoveryDocument>;
183
- /**
184
- * Get plugin list
185
- * @param params Query parameters
186
- * @returns Plugin list response
187
- */
188
- getPluginList(params?: {
189
- page?: number;
190
- pageSize?: number;
191
- category?: string;
192
- tags?: string;
193
- q?: string;
194
- sort?: 'installCount' | 'createdAt' | 'updatedAt' | 'ratingAverage';
195
- order?: 'asc' | 'desc';
196
- locale?: string;
197
- }): Promise<PluginListResponse>;
198
- /**
199
- * Get plugin manifest
200
- * @param identifier Plugin identifier
201
- * @param locale Language
202
- * @param version Version
203
- * @returns Plugin manifest
204
- */
205
- getPluginManifest(identifier: string, locale?: string, version?: string): Promise<PluginManifest>;
206
514
  /**
207
515
  * Import plugin manifests (requires admin privileges)
208
516
  * @param manifests Plugin manifest array
@@ -213,15 +521,6 @@ declare class MarketSDK {
213
521
  success: number;
214
522
  failed: number;
215
523
  }>;
216
- /**
217
- * Set authentication token
218
- * @param token Authentication token
219
- */
220
- setAuthToken(token: string): void;
221
- /**
222
- * Clear authentication token
223
- */
224
- clearAuthToken(): void;
225
524
  }
226
525
 
227
- export { type ConnectionConfig, type ConnectionType, ConnectionTypeEnum, type DeploymentOption, type DiscoveryDocument, type InstallationDetails, type InstallationMethod, InstallationMethodEnum, MarketSDK, type MarketSDKOptions, type PluginCompatibility, type PluginItem, type PluginListResponse, type PluginManifest, type PluginPrompt, type PluginResource, type PluginTool, type PluginType, PluginTypeEnum, type PromptArgument, type SystemDependency };
526
+ export { type AdminPluginParams, AdminService, type ConnectionConfig, type ConnectionType, ConnectionTypeEnum, type DeploymentOption, type DiscoveryDocument, DiscoveryService, type InstallationDetails, type InstallationMethod, InstallationMethodEnum, MarketSDK, type MarketSDKOptions, type Plugin, type PluginCompatibility, type PluginItem, type PluginListResponse, type PluginManifest, type PluginPrompt, type PluginQueryParams, type PluginResource, type PluginTool, type PluginType, PluginTypeEnum, type PluginUpdateParams, type PluginVersion, type PluginVersionCreateParams, type PluginVersionUpdateParams, PluginsService, type PromptArgument, type SystemDependency };
package/dist/index.mjs CHANGED
@@ -1,38 +1,38 @@
1
- // src/types.ts
2
- import { z } from "zod";
3
- var PluginTypeEnum = z.enum(["lobe", "openai", "mcp"]);
4
- var ConnectionTypeEnum = z.enum(["http", "stdio"]);
5
- var InstallationMethodEnum = z.enum([
6
- "npm",
7
- "docker",
8
- "git",
9
- "binaryUrl",
10
- "manual",
11
- "none"
12
- ]);
13
-
14
1
  // src/market-sdk.ts
2
+ import debug5 from "debug";
3
+
4
+ // src/core/BaseSDK.ts
15
5
  import debug from "debug";
16
- var log = debug("lobe-market-sdk");
17
- var MarketSDK = class {
6
+ var log = debug("lobe-market-sdk:core");
7
+ var BaseSDK = class {
18
8
  /**
19
- * Create MarketSDK instance
20
- * @param options SDK configuration options
9
+ * 创建基础 SDK 实例
10
+ * @param options SDK 配置选项
11
+ * @param sharedHeaders 共享的 headers 对象(可选)
21
12
  */
22
- constructor(options = {}) {
13
+ constructor(options = {}, sharedHeaders) {
23
14
  this.baseUrl = options.baseUrl || "https://market.lobehub.com/api";
24
- this.defaultLocale = options.defaultLocale || "zh-CN";
25
- this.headers = {
26
- "Content-Type": "application/json",
27
- ...options.apiKey ? { Authorization: `Bearer ${options.apiKey}` } : {}
28
- };
29
- log("MarketSDK instance created: %O", { baseUrl: this.baseUrl, defaultLocale: this.defaultLocale });
15
+ this.defaultLocale = options.defaultLocale || "en-US";
16
+ if (sharedHeaders) {
17
+ this.headers = sharedHeaders;
18
+ log("Using shared headers object");
19
+ } else {
20
+ this.headers = {
21
+ "Content-Type": "application/json",
22
+ ...options.apiKey ? { Authorization: `Bearer ${options.apiKey}` } : {}
23
+ };
24
+ log("Created new headers object");
25
+ }
26
+ log("BaseSDK instance created: %O", {
27
+ baseUrl: this.baseUrl,
28
+ defaultLocale: this.defaultLocale
29
+ });
30
30
  }
31
31
  /**
32
- * Send request and handle response
33
- * @param url Request URL
34
- * @param options fetch options
35
- * @returns Response data
32
+ * 发送请求并处理响应
33
+ * @param url 请求 URL
34
+ * @param options fetch 选项
35
+ * @returns 响应数据
36
36
  */
37
37
  async request(url, options = {}) {
38
38
  log("Sending request: %s", `${this.baseUrl}${url}`);
@@ -52,102 +52,451 @@ var MarketSDK = class {
52
52
  return response.json();
53
53
  }
54
54
  /**
55
- * Build query string
56
- * @param params Query parameters
57
- * @returns Query string
55
+ * 构建查询字符串
56
+ * @param params 查询参数
57
+ * @returns 查询字符串
58
58
  */
59
59
  buildQueryString(params) {
60
60
  const query = Object.entries(params).filter(([_, value]) => value !== void 0 && value !== null).map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`).join("&");
61
61
  return query ? `?${query}` : "";
62
62
  }
63
63
  /**
64
- * Get market service discovery document
65
- * @returns Service discovery document
64
+ * 设置认证令牌
65
+ * @param token 认证令牌
66
66
  */
67
- async getDiscoveryDocument() {
68
- log("Getting service discovery document");
69
- if (this.discoveryDoc) {
70
- log("Returning cached discovery document");
71
- return this.discoveryDoc;
67
+ setAuthToken(token) {
68
+ log("Setting authentication token");
69
+ this.headers.Authorization = `Bearer ${token}`;
70
+ }
71
+ /**
72
+ * 清除认证令牌
73
+ */
74
+ clearAuthToken() {
75
+ log("Clearing authentication token");
76
+ delete this.headers.Authorization;
77
+ }
78
+ };
79
+
80
+ // src/services/AdminService.ts
81
+ import debug2 from "debug";
82
+ var log2 = debug2("lobe-market-sdk:admin");
83
+ var AdminService = class extends BaseSDK {
84
+ /**
85
+ * 创建管理员服务实例
86
+ * @param options SDK 配置选项
87
+ * @param sharedHeaders 共享的 headers 对象(可选)
88
+ */
89
+ constructor(options = {}, sharedHeaders) {
90
+ super(options, sharedHeaders);
91
+ log2("AdminService instance created");
92
+ }
93
+ /**
94
+ * 导入插件清单(需要管理员权限)
95
+ * @param manifests 插件清单数组
96
+ * @param ownerId 所有者 ID
97
+ * @returns 导入结果
98
+ */
99
+ async importManifests(manifests, ownerId) {
100
+ log2(`\u5F00\u59CB\u6279\u91CF\u5BFC\u5165 ${manifests.length} \u4E2A\u6E05\u5355`);
101
+ if (ownerId) {
102
+ log2(`\u4F7F\u7528\u6307\u5B9A\u7684\u6240\u6709\u8005 ID: ${ownerId}`);
72
103
  }
73
- this.discoveryDoc = await this.request("/market/.well-known/discovery");
74
- log("Successfully retrieved service discovery document");
75
- return this.discoveryDoc;
104
+ const response = await this.request(
105
+ "/admin/plugins/import",
106
+ {
107
+ method: "POST",
108
+ body: JSON.stringify({
109
+ manifests,
110
+ ownerId
111
+ })
112
+ }
113
+ );
114
+ log2(`\u6279\u91CF\u5BFC\u5165\u5B8C\u6210: ${response.data.success} \u4E2A\u6210\u529F, ${response.data.failed} \u4E2A\u5931\u8D25`);
115
+ return response.data;
116
+ }
117
+ /**
118
+ * 获取插件列表
119
+ * @param params 查询参数
120
+ * @returns 插件列表响应
121
+ */
122
+ async getPlugins(params = {}) {
123
+ log2("Getting plugins with params: %O", params);
124
+ const queryString = this.buildQueryString(params);
125
+ const url = `/admin/plugins${queryString ? `?${queryString}` : ""}`;
126
+ const result = await this.request(url);
127
+ log2("Retrieved %d plugins", result.data.length);
128
+ return result;
129
+ }
130
+ /**
131
+ * 获取单个插件(含所有版本)
132
+ * @param id 插件 ID
133
+ * @returns 插件(含版本)
134
+ */
135
+ async getPlugin(id) {
136
+ log2("\u83B7\u53D6\u63D2\u4EF6\u8BE6\u60C5\uFF08\u7BA1\u7406\u5458\uFF09: %d", id);
137
+ const result = await this.request(
138
+ `/admin/plugins/${id}`
139
+ );
140
+ log2("\u5DF2\u83B7\u53D6\u63D2\u4EF6\uFF08\u5171 %d \u4E2A\u7248\u672C\uFF09", result.data.versions.length);
141
+ return result;
142
+ }
143
+ /**
144
+ * 更新插件信息
145
+ * @param id 插件 ID
146
+ * @param data 插件更新数据
147
+ * @returns 更新后的插件
148
+ */
149
+ async updatePlugin(id, data) {
150
+ log2("\u66F4\u65B0\u63D2\u4EF6: %d\uFF0C\u6570\u636E: %O", id, data);
151
+ const result = await this.request(`/admin/plugins/${id}`, {
152
+ method: "PUT",
153
+ body: JSON.stringify(data)
154
+ });
155
+ log2("\u63D2\u4EF6\u66F4\u65B0\u6210\u529F");
156
+ return result;
157
+ }
158
+ /**
159
+ * 更新插件状态
160
+ * @param id 插件 ID
161
+ * @param status 新状态
162
+ * @returns 成功响应
163
+ */
164
+ async updatePluginStatus(id, status) {
165
+ log2("\u66F4\u65B0\u63D2\u4EF6\u72B6\u6001: %d \u4E3A %s", id, status);
166
+ const result = await this.request(
167
+ `/admin/plugins/${id}/status`,
168
+ {
169
+ method: "PATCH",
170
+ body: JSON.stringify({ status })
171
+ }
172
+ );
173
+ log2("\u63D2\u4EF6\u72B6\u6001\u66F4\u65B0\u6210\u529F");
174
+ return result;
175
+ }
176
+ /**
177
+ * 删除插件
178
+ * @param id 插件 ID
179
+ * @returns 成功响应
180
+ */
181
+ async deletePlugin(id) {
182
+ log2("\u5220\u9664\u63D2\u4EF6: %d", id);
183
+ const result = await this.request(
184
+ `/admin/plugins/${id}`,
185
+ { method: "DELETE" }
186
+ );
187
+ log2("\u63D2\u4EF6\u5220\u9664\u6210\u529F");
188
+ return result;
189
+ }
190
+ /**
191
+ * 获取插件版本列表
192
+ * @param pluginId 插件 ID
193
+ * @returns 插件版本列表
194
+ */
195
+ async getPluginVersions(pluginId) {
196
+ log2("Getting plugin versions: pluginId=%d", pluginId);
197
+ const result = await this.request(
198
+ `/admin/plugins/${pluginId}/versions`
199
+ );
200
+ log2("Retrieved %d versions", result.data.length);
201
+ return result;
202
+ }
203
+ /**
204
+ * 获取单个插件版本
205
+ * @param pluginId 插件 ID
206
+ * @param versionId 版本 ID
207
+ * @returns 插件版本
208
+ */
209
+ async getPluginVersion(pluginId, versionId) {
210
+ log2("Getting version details: pluginId=%d, versionId=%d", pluginId, versionId);
211
+ const result = await this.request(
212
+ `/admin/plugins/${pluginId}/versions/${versionId}`
213
+ );
214
+ log2("Version details retrieved");
215
+ return result;
216
+ }
217
+ /**
218
+ * 创建插件版本
219
+ * @param pluginId 插件 ID
220
+ * @param data 版本创建数据
221
+ * @returns 创建的版本
222
+ */
223
+ async createPluginVersion(pluginId, data) {
224
+ log2("Creating new version: pluginId=%d", pluginId);
225
+ const result = await this.request(
226
+ `/admin/plugins/${pluginId}/versions`,
227
+ {
228
+ method: "POST",
229
+ body: JSON.stringify(data)
230
+ }
231
+ );
232
+ log2("Plugin version created successfully");
233
+ return result;
234
+ }
235
+ /**
236
+ * 更新插件版本
237
+ * @param pluginId 插件 ID
238
+ * @param versionId 版本 ID
239
+ * @param data 版本更新数据
240
+ * @returns 更新后的版本
241
+ */
242
+ async updatePluginVersion(pluginId, versionId, data) {
243
+ log2("Updating version: pluginId=%d, versionId=%d", pluginId, versionId);
244
+ const result = await this.request(
245
+ `/admin/plugins/${pluginId}/versions/${versionId}`,
246
+ {
247
+ method: "PUT",
248
+ body: JSON.stringify(data)
249
+ }
250
+ );
251
+ log2("\u63D2\u4EF6\u7248\u672C\u66F4\u65B0\u6210\u529F");
252
+ return result;
253
+ }
254
+ /**
255
+ * 删除插件版本
256
+ * @param pluginId 插件 ID
257
+ * @param versionId 版本 ID
258
+ * @returns 成功响应
259
+ */
260
+ async deletePluginVersion(pluginId, versionId) {
261
+ log2("\u5220\u9664\u7248\u672C: pluginId=%d, versionId=%d", pluginId, versionId);
262
+ const result = await this.request(
263
+ `/admin/plugins/${pluginId}/versions/${versionId}`,
264
+ { method: "DELETE" }
265
+ );
266
+ log2("\u63D2\u4EF6\u7248\u672C\u5220\u9664\u6210\u529F");
267
+ return result;
268
+ }
269
+ /**
270
+ * 设置插件版本为最新版本
271
+ * @param pluginId 插件 ID
272
+ * @param versionId 版本 ID
273
+ * @returns 成功响应
274
+ */
275
+ async setPluginVersionAsLatest(pluginId, versionId) {
276
+ log2("Setting version as latest: pluginId=%d, versionId=%d", pluginId, versionId);
277
+ const result = await this.request(
278
+ `/admin/plugins/${pluginId}/versions/${versionId}/latest`,
279
+ { method: "POST" }
280
+ );
281
+ log2("Version set as latest");
282
+ return result;
283
+ }
284
+ /**
285
+ * 获取所有系统依赖项
286
+ * @returns 系统依赖项列表
287
+ */
288
+ async getSystemDependencies() {
289
+ log2("Getting all system dependencies");
290
+ const result = await this.request(`/admin/plugins/dependencies`);
291
+ log2("Retrieved %d system dependencies", result.data.length);
292
+ return result;
293
+ }
294
+ /**
295
+ * 获取特定系统依赖项
296
+ * @param id 依赖项 ID
297
+ * @returns 系统依赖项
298
+ */
299
+ async getSystemDependency(id) {
300
+ log2("Getting system dependency details: %d", id);
301
+ const result = await this.request(
302
+ `/admin/plugins/dependencies/${id}`
303
+ );
304
+ log2("System dependency details retrieved");
305
+ return result;
306
+ }
307
+ /**
308
+ * 创建系统依赖项
309
+ * @param data 依赖项创建数据
310
+ * @returns 创建的依赖项
311
+ */
312
+ async createSystemDependency(data) {
313
+ log2("Creating system dependency: %O", data);
314
+ const result = await this.request(`/admin/plugins/dependencies`, {
315
+ method: "POST",
316
+ body: JSON.stringify(data)
317
+ });
318
+ log2("System dependency created successfully");
319
+ return result;
320
+ }
321
+ /**
322
+ * 更新系统依赖项
323
+ * @param id 依赖项 ID
324
+ * @param data 依赖项更新数据
325
+ * @returns 更新后的依赖项
326
+ */
327
+ async updateSystemDependency(id, data) {
328
+ log2("Updating system dependency: %d, data: %O", id, data);
329
+ const result = await this.request(
330
+ `/admin/plugins/dependencies/${id}`,
331
+ {
332
+ method: "PUT",
333
+ body: JSON.stringify(data)
334
+ }
335
+ );
336
+ log2("System dependency updated successfully");
337
+ return result;
76
338
  }
77
339
  /**
78
- * Get plugin list
79
- * @param params Query parameters
80
- * @returns Plugin list response
340
+ * 删除系统依赖项
341
+ * @param id 依赖项 ID
342
+ * @returns 成功响应
343
+ */
344
+ async deleteSystemDependency(id) {
345
+ log2("\u5220\u9664\u7CFB\u7EDF\u4F9D\u8D56\u9879: %d", id);
346
+ const result = await this.request(
347
+ `/admin/plugins/dependencies/${id}`,
348
+ { method: "DELETE" }
349
+ );
350
+ log2("\u7CFB\u7EDF\u4F9D\u8D56\u9879\u5220\u9664\u6210\u529F");
351
+ return result;
352
+ }
353
+ };
354
+
355
+ // src/services/PluginsService.ts
356
+ import debug3 from "debug";
357
+ var log3 = debug3("lobe-market-sdk:plugins");
358
+ var PluginsService = class extends BaseSDK {
359
+ /**
360
+ * 创建插件服务实例
361
+ * @param options SDK 配置选项
362
+ * @param sharedHeaders 共享的 headers 对象(可选)
363
+ */
364
+ constructor(options = {}, sharedHeaders) {
365
+ super(options, sharedHeaders);
366
+ log3("PluginsService instance created");
367
+ }
368
+ /**
369
+ * 获取插件列表
370
+ * @param params 查询参数
371
+ * @returns 插件列表响应
81
372
  */
82
373
  async getPluginList(params = {}) {
83
374
  const locale = params.locale || this.defaultLocale;
84
375
  const queryParams = { ...params, locale };
85
376
  const queryString = this.buildQueryString(queryParams);
86
- log("Getting plugin list: %O", queryParams);
377
+ log3("Getting plugin list: %O", queryParams);
87
378
  const result = await this.request(`/v1/plugins${queryString}`);
88
- log("Retrieved %d plugins", result.items.length);
379
+ log3("Retrieved %d plugins", result.items.length);
89
380
  return result;
90
381
  }
91
382
  /**
92
- * Get plugin manifest
93
- * @param identifier Plugin identifier
94
- * @param locale Language
95
- * @param version Version
96
- * @returns Plugin manifest
383
+ * 获取插件清单
384
+ * @param identifier 插件标识符
385
+ * @param locale 语言
386
+ * @param version 版本
387
+ * @returns 插件清单
97
388
  */
98
389
  async getPluginManifest(identifier, locale, version) {
99
- log("Getting plugin manifest: %O", { identifier, version, locale });
390
+ log3("Getting plugin manifest: %O", { identifier, version, locale });
100
391
  const localeParam = locale || this.defaultLocale;
101
392
  const params = { locale: localeParam };
102
393
  if (version) {
103
394
  params.version = version;
104
395
  }
105
396
  const queryString = this.buildQueryString(params);
106
- const manifest = await this.request(`/v1/plugins/${identifier}/manifest${queryString}`);
107
- log("Successfully retrieved plugin manifest: %s", identifier);
397
+ const manifest = await this.request(
398
+ `/v1/plugins/${identifier}/manifest${queryString}`
399
+ );
400
+ log3("Plugin manifest successfully retrieved: %s", identifier);
108
401
  return manifest;
109
402
  }
403
+ };
404
+
405
+ // src/services/DiscoveryService.ts
406
+ import debug4 from "debug";
407
+ var log4 = debug4("lobe-market-sdk:discovery");
408
+ var DiscoveryService = class extends BaseSDK {
110
409
  /**
111
- * Import plugin manifests (requires admin privileges)
112
- * @param manifests Plugin manifest array
113
- * @param ownerId Owner ID
114
- * @returns Import result
410
+ * 创建发现服务实例
411
+ * @param options SDK 配置选项
412
+ * @param sharedHeaders 共享的 headers 对象(可选)
115
413
  */
116
- async importManifests(manifests, ownerId) {
117
- log(`Starting batch import of ${manifests.length} manifests`);
118
- if (ownerId) {
119
- log(`Using specified owner ID: ${ownerId}`);
414
+ constructor(options = {}, sharedHeaders) {
415
+ super(options, sharedHeaders);
416
+ log4("DiscoveryService instance created");
417
+ }
418
+ /**
419
+ * 获取市场服务发现文档
420
+ * @returns 服务发现文档
421
+ */
422
+ async getDiscoveryDocument() {
423
+ log4("Fetching discovery document");
424
+ if (this.discoveryDoc) {
425
+ log4("Returning cached discovery document");
426
+ return this.discoveryDoc;
120
427
  }
121
- const response = await this.request("/v1/admin/plugins/import", {
122
- method: "POST",
123
- body: JSON.stringify({
124
- manifests,
125
- ownerId
126
- })
127
- });
128
- log(`Batch import completed: ${response.data.success} successful, ${response.data.failed} failed`);
129
- return response.data;
428
+ this.discoveryDoc = await this.request("/market/.well-known/discovery");
429
+ log4("Discovery document successfully fetched");
430
+ return this.discoveryDoc;
130
431
  }
432
+ };
433
+
434
+ // src/market-sdk.ts
435
+ var log5 = debug5("lobe-market-sdk");
436
+ var MarketSDK = class extends BaseSDK {
131
437
  /**
132
- * Set authentication token
133
- * @param token Authentication token
438
+ * Create MarketSDK instance
439
+ * @param options SDK configuration options
134
440
  */
135
- setAuthToken(token) {
136
- log("Setting authentication token");
137
- this.headers.Authorization = `Bearer ${token}`;
441
+ constructor(options = {}) {
442
+ super(options);
443
+ log5("MarketSDK instance created");
444
+ this.plugins = new PluginsService(options, this.headers);
445
+ this.admin = new AdminService(options, this.headers);
446
+ this.discovery = new DiscoveryService(options, this.headers);
138
447
  }
139
448
  /**
140
- * Clear authentication token
449
+ * Get market service discovery document
450
+ * @returns Service discovery document
141
451
  */
142
- clearAuthToken() {
143
- log("Clearing authentication token");
144
- delete this.headers.Authorization;
452
+ async getDiscoveryDocument() {
453
+ return this.discovery.getDiscoveryDocument();
454
+ }
455
+ /**
456
+ * Import plugin manifests (requires admin privileges)
457
+ * @param manifests Plugin manifest array
458
+ * @param ownerId Owner ID
459
+ * @returns Import result
460
+ */
461
+ async importManifests(manifests, ownerId) {
462
+ return this.admin.importManifests(manifests, ownerId);
145
463
  }
146
464
  };
465
+
466
+ // src/types/index.ts
467
+ import { z as z2 } from "zod";
468
+
469
+ // src/types/plugins.ts
470
+ import { z } from "zod";
471
+ var PluginTypeEnum = z.enum(["lobe", "openai", "mcp"]);
472
+ var ConnectionTypeEnum = z.enum(["http", "stdio"]);
473
+ var InstallationMethodEnum = z.enum([
474
+ "npm",
475
+ "docker",
476
+ "git",
477
+ "binaryUrl",
478
+ "manual",
479
+ "none"
480
+ ]);
481
+
482
+ // src/types/index.ts
483
+ var PluginTypeEnum2 = z2.enum(["lobe", "openai", "mcp"]);
484
+ var ConnectionTypeEnum2 = z2.enum(["http", "stdio"]);
485
+ var InstallationMethodEnum2 = z2.enum([
486
+ "npm",
487
+ "docker",
488
+ "git",
489
+ "binaryUrl",
490
+ "manual",
491
+ "none"
492
+ ]);
147
493
  export {
148
- ConnectionTypeEnum,
149
- InstallationMethodEnum,
494
+ AdminService,
495
+ ConnectionTypeEnum2 as ConnectionTypeEnum,
496
+ DiscoveryService,
497
+ InstallationMethodEnum2 as InstallationMethodEnum,
150
498
  MarketSDK,
151
- PluginTypeEnum
499
+ PluginTypeEnum2 as PluginTypeEnum,
500
+ PluginsService
152
501
  };
153
502
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts","../src/market-sdk.ts"],"sourcesContent":["import { z } from 'zod';\n\n// 插件类型\nexport const PluginTypeEnum = z.enum(['lobe', 'openai', 'mcp']);\nexport type PluginType = z.infer<typeof PluginTypeEnum>;\n\n// 连接类型\nexport const ConnectionTypeEnum = z.enum(['http', 'stdio']);\nexport type ConnectionType = z.infer<typeof ConnectionTypeEnum>;\n\n// 安装方法\nexport const InstallationMethodEnum = z.enum([\n 'npm',\n 'docker',\n 'git',\n 'binaryUrl',\n 'manual',\n 'none',\n]);\nexport type InstallationMethod = z.infer<typeof InstallationMethodEnum>;\n\n// 系统依赖项\nexport interface SystemDependency {\n name: string;\n type?: string;\n requiredVersion?: string;\n checkCommand?: string;\n installInstructions?: Record<string, string>;\n versionParsingRequired?: boolean;\n notes?: string;\n}\n\n// 连接配置\nexport interface ConnectionConfig {\n type: string;\n command?: string;\n args?: string[];\n url?: string;\n}\n\nexport interface InstallationDetails {\n packageName?: string;\n repositoryUrlToClone?: string;\n setupSteps?: string[];\n}\n// 部署选项\nexport interface DeploymentOption {\n installationMethod: string;\n installationDetails?: InstallationDetails;\n connection: ConnectionConfig;\n isRecommended?: boolean;\n notes?: string;\n systemDependencies?: SystemDependency[];\n}\n\n// 兼容性信息\nexport interface PluginCompatibility {\n platforms?: string[];\n minAppVersion?: string;\n maxAppVersion?: string;\n}\n\n// 插件项\nexport interface PluginItem {\n identifier: string;\n version: string;\n isLatest: boolean;\n name: string;\n createdAt: string;\n type: PluginType;\n manifestUrl?: string;\n manifestVersion: string;\n icon?: string;\n author?: string;\n homepage?: string;\n category?: string;\n connectionType?: ConnectionType;\n compatibility?: PluginCompatibility;\n capabilities: {\n tools: boolean;\n prompts: boolean;\n resources: boolean;\n };\n description: string;\n tags?: string[];\n authRequirement?: string;\n isInstallable?: boolean;\n toolsCount?: number;\n promptsCount?: number;\n resourcesCount?: number;\n isValidated?: boolean;\n installCount?: number;\n ratingAverage?: number;\n ratingCount?: number;\n commentCount?: number;\n}\n\n// 插件列表响应\nexport interface PluginListResponse {\n items: PluginItem[];\n totalCount: number;\n currentPage: number;\n pageSize: number;\n totalPages: number;\n categories: string[];\n tags: string[];\n}\n\n// 工具项定义\nexport interface PluginTool {\n name: string;\n description?: string;\n parameters?: Record<string, any>;\n}\n\n// 资源项定义\nexport interface PluginResource {\n uri: string;\n name?: string;\n mimeType?: string;\n}\n\n// 提示词参数定义\nexport interface PromptArgument {\n name: string;\n required?: boolean;\n description?: string;\n type?: string;\n}\n\n// 提示词项定义\nexport interface PluginPrompt {\n name: string;\n description: string;\n arguments?: PromptArgument[];\n}\n\n// 插件清单\nexport interface PluginManifest {\n id: string;\n name: string;\n version: string;\n description: string;\n category?: string;\n tags?: string[];\n author?: {\n name: string;\n url?: string;\n };\n homepage?: string;\n icon?: string;\n capabilities?: {\n tools?: boolean;\n prompts?: boolean;\n resources?: boolean;\n };\n deploymentOptions?: DeploymentOption[];\n compatibility?: PluginCompatibility;\n // 工具定义\n tools?: PluginTool[];\n // 资源定义\n resources?: PluginResource[];\n // 提示词定义\n prompts?: PluginPrompt[];\n // 验证信息\n isValidated?: boolean;\n validatedAt?: string;\n}\n\n// 市场服务发现文档\nexport interface DiscoveryDocument {\n issuer: string;\n market_index_schema_version: number;\n resource_types_supported: string[];\n resource_endpoints: Record<string, string>;\n manifest_endpoint_template: string | Record<string, string>;\n support_locales: string[];\n response_types_supported: string[];\n authentication?: {\n schemes_supported: Array<'none' | 'apiKey' | 'oauth2'>;\n };\n api_documentation_url?: string;\n policy_url?: string;\n terms_of_service_url?: string;\n}\n\n// SDK 配置选项\nexport interface MarketSDKOptions {\n baseUrl?: string;\n defaultLocale?: string;\n apiKey?: string;\n}\n","import {\n DiscoveryDocument,\n MarketSDKOptions,\n PluginItem,\n PluginListResponse,\n PluginManifest,\n} from './types';\nimport debug from 'debug';\n\n// Create debug instance\nconst log = debug('lobe-market-sdk');\n\n/**\n * LobeHub Market SDK Client\n */\nexport class MarketSDK {\n private baseUrl: string;\n private defaultLocale: string;\n private discoveryDoc?: DiscoveryDocument;\n private headers: Record<string, string>;\n\n /**\n * Create MarketSDK instance\n * @param options SDK configuration options\n */\n constructor(options: MarketSDKOptions = {}) {\n this.baseUrl = options.baseUrl || 'https://market.lobehub.com/api';\n this.defaultLocale = options.defaultLocale || 'zh-CN';\n this.headers = {\n 'Content-Type': 'application/json',\n ...(options.apiKey ? { Authorization: `Bearer ${options.apiKey}` } : {}),\n };\n log('MarketSDK instance created: %O', { baseUrl: this.baseUrl, defaultLocale: this.defaultLocale });\n }\n\n /**\n * Send request and handle response\n * @param url Request URL\n * @param options fetch options\n * @returns Response data\n */\n private async request<T>(url: string, options: RequestInit = {}): Promise<T> {\n log('Sending request: %s', `${this.baseUrl}${url}`);\n \n const response = await fetch(`${this.baseUrl}${url}`, {\n ...options,\n headers: {\n ...this.headers,\n ...options.headers,\n },\n });\n\n if (!response.ok) {\n const errorMsg = `Request failed: ${response.status} ${response.statusText}`;\n log('Request error: %s', errorMsg);\n throw new Error(errorMsg);\n }\n\n log('Request successful: %s', url);\n return response.json() as Promise<T>;\n }\n\n /**\n * Build query string\n * @param params Query parameters\n * @returns Query string\n */\n private buildQueryString(params: Record<string, any>): string {\n const query = Object.entries(params)\n .filter(([_, value]) => value !== undefined && value !== null)\n .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`)\n .join('&');\n \n return query ? `?${query}` : '';\n }\n\n /**\n * Get market service discovery document\n * @returns Service discovery document\n */\n async getDiscoveryDocument(): Promise<DiscoveryDocument> {\n log('Getting service discovery document');\n if (this.discoveryDoc) {\n log('Returning cached discovery document');\n return this.discoveryDoc;\n }\n\n this.discoveryDoc = await this.request<DiscoveryDocument>('/market/.well-known/discovery');\n log('Successfully retrieved service discovery document');\n return this.discoveryDoc;\n }\n\n /**\n * Get plugin list\n * @param params Query parameters\n * @returns Plugin list response\n */\n async getPluginList(params: {\n page?: number;\n pageSize?: number;\n category?: string;\n tags?: string;\n q?: string;\n sort?: 'installCount' | 'createdAt' | 'updatedAt' | 'ratingAverage';\n order?: 'asc' | 'desc';\n locale?: string;\n } = {}): Promise<PluginListResponse> {\n const locale = params.locale || this.defaultLocale;\n const queryParams = { ...params, locale };\n const queryString = this.buildQueryString(queryParams);\n\n log('Getting plugin list: %O', queryParams);\n\n const result = await this.request<PluginListResponse>(`/v1/plugins${queryString}`);\n log('Retrieved %d plugins', result.items.length);\n return result;\n }\n\n /**\n * Get plugin manifest\n * @param identifier Plugin identifier\n * @param locale Language\n * @param version Version\n * @returns Plugin manifest\n */\n async getPluginManifest(\n identifier: string,\n locale?: string,\n version?: string,\n ): Promise<PluginManifest> {\n log('Getting plugin manifest: %O', { identifier, version, locale });\n const localeParam = locale || this.defaultLocale;\n const params: Record<string, string> = { locale: localeParam };\n if (version) {\n params.version = version;\n }\n const queryString = this.buildQueryString(params);\n\n const manifest = await this.request<PluginManifest>(`/v1/plugins/${identifier}/manifest${queryString}`);\n log('Successfully retrieved plugin manifest: %s', identifier);\n return manifest;\n }\n\n /**\n * Import plugin manifests (requires admin privileges)\n * @param manifests Plugin manifest array\n * @param ownerId Owner ID\n * @returns Import result\n */\n async importManifests(manifests: PluginManifest[], ownerId?: number): Promise<{ success: number; failed: number }> {\n log(`Starting batch import of ${manifests.length} manifests`);\n if (ownerId) {\n log(`Using specified owner ID: ${ownerId}`);\n }\n\n const response = await this.request<{ data: { success: number; failed: number } }>('/v1/admin/plugins/import', {\n method: 'POST',\n body: JSON.stringify({\n manifests,\n ownerId,\n }),\n });\n\n log(`Batch import completed: ${response.data.success} successful, ${response.data.failed} failed`);\n return response.data;\n }\n\n /**\n * Set authentication token\n * @param token Authentication token\n */\n setAuthToken(token: string): void {\n log('Setting authentication token');\n this.headers.Authorization = `Bearer ${token}`;\n }\n\n /**\n * Clear authentication token\n */\n clearAuthToken(): void {\n log('Clearing authentication token');\n delete this.headers.Authorization;\n }\n} "],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/market-sdk.ts","../src/core/BaseSDK.ts","../src/services/AdminService.ts","../src/services/PluginsService.ts","../src/services/DiscoveryService.ts","../src/types/index.ts","../src/types/plugins.ts"],"sourcesContent":["import debug from 'debug';\n\nimport { BaseSDK } from './core/BaseSDK';\nimport { AdminService, DiscoveryService, PluginsService } from './services';\nimport {\n AdminPluginParams,\n DiscoveryDocument,\n MarketSDKOptions,\n Plugin,\n PluginListResponse,\n PluginManifest,\n PluginVersion,\n PluginVersionCreateParams,\n PluginVersionUpdateParams,\n} from './types';\n\n// Create debug instance\nconst log = debug('lobe-market-sdk');\n\n/**\n * LobeHub Market SDK Client\n * 采用组合模式组合各个领域服务\n */\nexport class MarketSDK extends BaseSDK {\n /**\n * 插件服务\n */\n readonly plugins: PluginsService;\n\n /**\n * 管理员服务\n */\n readonly admin: AdminService;\n\n /**\n * 发现服务\n */\n private readonly discovery: DiscoveryService;\n\n /**\n * Create MarketSDK instance\n * @param options SDK configuration options\n */\n constructor(options: MarketSDKOptions = {}) {\n super(options);\n log('MarketSDK instance created');\n\n // Initialize domain services with shared headers\n this.plugins = new PluginsService(options, this.headers);\n this.admin = new AdminService(options, this.headers);\n this.discovery = new DiscoveryService(options, this.headers);\n }\n\n /**\n * Get market service discovery document\n * @returns Service discovery document\n */\n async getDiscoveryDocument(): Promise<DiscoveryDocument> {\n return this.discovery.getDiscoveryDocument();\n }\n\n /**\n * Import plugin manifests (requires admin privileges)\n * @param manifests Plugin manifest array\n * @param ownerId Owner ID\n * @returns Import result\n */\n async importManifests(\n manifests: PluginManifest[],\n ownerId?: number,\n ): Promise<{ success: number; failed: number }> {\n return this.admin.importManifests(manifests, ownerId);\n }\n}\n","import debug from 'debug';\n\nimport { MarketSDKOptions } from '../types';\n\n// Create debug instance\nconst log = debug('lobe-market-sdk:core');\n\n/**\n * 基础 SDK 类\n * 提供共享的请求逻辑和认证功能\n */\nexport class BaseSDK {\n protected baseUrl: string;\n protected defaultLocale: string;\n protected headers: Record<string, string>;\n\n /**\n * 创建基础 SDK 实例\n * @param options SDK 配置选项\n * @param sharedHeaders 共享的 headers 对象(可选)\n */\n constructor(options: MarketSDKOptions = {}, sharedHeaders?: Record<string, string>) {\n this.baseUrl = options.baseUrl || 'https://market.lobehub.com/api';\n this.defaultLocale = options.defaultLocale || 'en-US';\n\n // 使用共享的 headers 或创建新的\n if (sharedHeaders) {\n this.headers = sharedHeaders;\n log('Using shared headers object');\n } else {\n this.headers = {\n 'Content-Type': 'application/json',\n ...(options.apiKey ? { Authorization: `Bearer ${options.apiKey}` } : {}),\n };\n log('Created new headers object');\n }\n\n log('BaseSDK instance created: %O', {\n baseUrl: this.baseUrl,\n defaultLocale: this.defaultLocale,\n });\n }\n\n /**\n * 发送请求并处理响应\n * @param url 请求 URL\n * @param options fetch 选项\n * @returns 响应数据\n */\n protected async request<T>(url: string, options: RequestInit = {}): Promise<T> {\n log('Sending request: %s', `${this.baseUrl}${url}`);\n\n const response = await fetch(`${this.baseUrl}${url}`, {\n ...options,\n headers: {\n ...this.headers,\n ...options.headers,\n },\n });\n\n if (!response.ok) {\n const errorMsg = `Request failed: ${response.status} ${response.statusText}`;\n log('Request error: %s', errorMsg);\n throw new Error(errorMsg);\n }\n\n log('Request successful: %s', url);\n return response.json() as Promise<T>;\n }\n\n /**\n * 构建查询字符串\n * @param params 查询参数\n * @returns 查询字符串\n */\n protected buildQueryString(params: Record<string, any>): string {\n const query = Object.entries(params)\n .filter(([_, value]) => value !== undefined && value !== null)\n .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`)\n .join('&');\n\n return query ? `?${query}` : '';\n }\n\n /**\n * 设置认证令牌\n * @param token 认证令牌\n */\n setAuthToken(token: string): void {\n log('Setting authentication token');\n this.headers.Authorization = `Bearer ${token}`;\n }\n\n /**\n * 清除认证令牌\n */\n clearAuthToken(): void {\n log('Clearing authentication token');\n delete this.headers.Authorization;\n }\n}\n","import debug from 'debug';\n\nimport { BaseSDK } from '../core/BaseSDK';\nimport {\n AdminPluginParams,\n MarketSDKOptions,\n Plugin,\n PluginManifest,\n PluginUpdateParams,\n PluginVersion,\n PluginVersionCreateParams,\n PluginVersionUpdateParams,\n SystemDependency,\n} from '../types';\n\n// Create debug instance\nconst log = debug('lobe-market-sdk:admin');\n\n/**\n * 管理员服务\n * 处理管理员相关功能\n */\nexport class AdminService extends BaseSDK {\n /**\n * 创建管理员服务实例\n * @param options SDK 配置选项\n * @param sharedHeaders 共享的 headers 对象(可选)\n */\n constructor(options: MarketSDKOptions = {}, sharedHeaders?: Record<string, string>) {\n super(options, sharedHeaders);\n log('AdminService instance created');\n }\n\n /**\n * 导入插件清单(需要管理员权限)\n * @param manifests 插件清单数组\n * @param ownerId 所有者 ID\n * @returns 导入结果\n */\n async importManifests(\n manifests: PluginManifest[],\n ownerId?: number,\n ): Promise<{ success: number; failed: number }> {\n log(`开始批量导入 ${manifests.length} 个清单`);\n if (ownerId) {\n log(`使用指定的所有者 ID: ${ownerId}`);\n }\n\n const response = await this.request<{ data: { success: number; failed: number } }>(\n '/admin/plugins/import',\n {\n method: 'POST',\n body: JSON.stringify({\n manifests,\n ownerId,\n }),\n },\n );\n\n log(`批量导入完成: ${response.data.success} 个成功, ${response.data.failed} 个失败`);\n return response.data;\n }\n\n /**\n * 获取插件列表\n * @param params 查询参数\n * @returns 插件列表响应\n */\n async getPlugins(params: AdminPluginParams = {}): Promise<{ data: Plugin[] }> {\n log('Getting plugins with params: %O', params);\n\n const queryString = this.buildQueryString(params);\n const url = `/admin/plugins${queryString ? `?${queryString}` : ''}`;\n\n const result = await this.request<{ data: Plugin[] }>(url);\n log('Retrieved %d plugins', result.data.length);\n return result;\n }\n\n /**\n * 获取单个插件(含所有版本)\n * @param id 插件 ID\n * @returns 插件(含版本)\n */\n async getPlugin(id: number): Promise<{ data: Plugin & { versions: PluginVersion[] } }> {\n log('获取插件详情(管理员): %d', id);\n\n const result = await this.request<{ data: Plugin & { versions: PluginVersion[] } }>(\n `/admin/plugins/${id}`,\n );\n log('已获取插件(共 %d 个版本)', result.data.versions.length);\n return result;\n }\n\n /**\n * 更新插件信息\n * @param id 插件 ID\n * @param data 插件更新数据\n * @returns 更新后的插件\n */\n async updatePlugin(id: number, data: PluginUpdateParams): Promise<{ data: Plugin }> {\n log('更新插件: %d,数据: %O', id, data);\n\n const result = await this.request<{ data: Plugin }>(`/admin/plugins/${id}`, {\n method: 'PUT',\n body: JSON.stringify(data),\n });\n log('插件更新成功');\n return result;\n }\n\n /**\n * 更新插件状态\n * @param id 插件 ID\n * @param status 新状态\n * @returns 成功响应\n */\n async updatePluginStatus(\n id: number,\n status: 'published' | 'draft' | 'review' | 'rejected',\n ): Promise<{ success: boolean; message: string }> {\n log('更新插件状态: %d 为 %s', id, status);\n\n const result = await this.request<{ success: boolean; message: string }>(\n `/admin/plugins/${id}/status`,\n {\n method: 'PATCH',\n body: JSON.stringify({ status }),\n },\n );\n log('插件状态更新成功');\n return result;\n }\n\n /**\n * 删除插件\n * @param id 插件 ID\n * @returns 成功响应\n */\n async deletePlugin(id: number): Promise<{ success: boolean; message: string }> {\n log('删除插件: %d', id);\n\n const result = await this.request<{ success: boolean; message: string }>(\n `/admin/plugins/${id}`,\n { method: 'DELETE' },\n );\n log('插件删除成功');\n return result;\n }\n\n /**\n * 获取插件版本列表\n * @param pluginId 插件 ID\n * @returns 插件版本列表\n */\n async getPluginVersions(pluginId: number): Promise<{ data: PluginVersion[] }> {\n log('Getting plugin versions: pluginId=%d', pluginId);\n\n const result = await this.request<{ data: PluginVersion[] }>(\n `/admin/plugins/${pluginId}/versions`,\n );\n\n log('Retrieved %d versions', result.data.length);\n return result;\n }\n\n /**\n * 获取单个插件版本\n * @param pluginId 插件 ID\n * @param versionId 版本 ID\n * @returns 插件版本\n */\n async getPluginVersion(pluginId: number, versionId: number): Promise<{ data: PluginVersion }> {\n log('Getting version details: pluginId=%d, versionId=%d', pluginId, versionId);\n\n const result = await this.request<{ data: PluginVersion }>(\n `/admin/plugins/${pluginId}/versions/${versionId}`,\n );\n log('Version details retrieved');\n return result;\n }\n\n /**\n * 创建插件版本\n * @param pluginId 插件 ID\n * @param data 版本创建数据\n * @returns 创建的版本\n */\n async createPluginVersion(\n pluginId: number,\n data: PluginVersionCreateParams,\n ): Promise<{ data: PluginVersion }> {\n log('Creating new version: pluginId=%d', pluginId);\n\n const result = await this.request<{ data: PluginVersion }>(\n `/admin/plugins/${pluginId}/versions`,\n {\n method: 'POST',\n body: JSON.stringify(data),\n },\n );\n log('Plugin version created successfully');\n return result;\n }\n\n /**\n * 更新插件版本\n * @param pluginId 插件 ID\n * @param versionId 版本 ID\n * @param data 版本更新数据\n * @returns 更新后的版本\n */\n async updatePluginVersion(\n pluginId: number,\n versionId: number,\n data: PluginVersionUpdateParams,\n ): Promise<{ data: PluginVersion }> {\n log('Updating version: pluginId=%d, versionId=%d', pluginId, versionId);\n\n const result = await this.request<{ data: PluginVersion }>(\n `/admin/plugins/${pluginId}/versions/${versionId}`,\n {\n method: 'PUT',\n body: JSON.stringify(data),\n },\n );\n log('插件版本更新成功');\n return result;\n }\n\n /**\n * 删除插件版本\n * @param pluginId 插件 ID\n * @param versionId 版本 ID\n * @returns 成功响应\n */\n async deletePluginVersion(\n pluginId: number,\n versionId: number,\n ): Promise<{ success: boolean; message: string }> {\n log('删除版本: pluginId=%d, versionId=%d', pluginId, versionId);\n\n const result = await this.request<{ success: boolean; message: string }>(\n `/admin/plugins/${pluginId}/versions/${versionId}`,\n { method: 'DELETE' },\n );\n log('插件版本删除成功');\n return result;\n }\n\n /**\n * 设置插件版本为最新版本\n * @param pluginId 插件 ID\n * @param versionId 版本 ID\n * @returns 成功响应\n */\n async setPluginVersionAsLatest(\n pluginId: number,\n versionId: number,\n ): Promise<{ success: boolean; message: string }> {\n log('Setting version as latest: pluginId=%d, versionId=%d', pluginId, versionId);\n\n const result = await this.request<{ success: boolean; message: string }>(\n `/admin/plugins/${pluginId}/versions/${versionId}/latest`,\n { method: 'POST' },\n );\n log('Version set as latest');\n return result;\n }\n\n /**\n * 获取所有系统依赖项\n * @returns 系统依赖项列表\n */\n async getSystemDependencies(): Promise<{ data: SystemDependency[] }> {\n log('Getting all system dependencies');\n\n const result = await this.request<{ data: SystemDependency[] }>(`/admin/plugins/dependencies`);\n log('Retrieved %d system dependencies', result.data.length);\n return result;\n }\n\n /**\n * 获取特定系统依赖项\n * @param id 依赖项 ID\n * @returns 系统依赖项\n */\n async getSystemDependency(id: number): Promise<{ data: SystemDependency }> {\n log('Getting system dependency details: %d', id);\n\n const result = await this.request<{ data: SystemDependency }>(\n `/admin/plugins/dependencies/${id}`,\n );\n log('System dependency details retrieved');\n return result;\n }\n\n /**\n * 创建系统依赖项\n * @param data 依赖项创建数据\n * @returns 创建的依赖项\n */\n async createSystemDependency(\n data: Omit<SystemDependency, 'id'>,\n ): Promise<{ data: SystemDependency }> {\n log('Creating system dependency: %O', data);\n\n const result = await this.request<{ data: SystemDependency }>(`/admin/plugins/dependencies`, {\n method: 'POST',\n body: JSON.stringify(data),\n });\n log('System dependency created successfully');\n return result;\n }\n\n /**\n * 更新系统依赖项\n * @param id 依赖项 ID\n * @param data 依赖项更新数据\n * @returns 更新后的依赖项\n */\n async updateSystemDependency(\n id: number,\n data: Partial<SystemDependency>,\n ): Promise<{ data: SystemDependency }> {\n log('Updating system dependency: %d, data: %O', id, data);\n\n const result = await this.request<{ data: SystemDependency }>(\n `/admin/plugins/dependencies/${id}`,\n {\n method: 'PUT',\n body: JSON.stringify(data),\n },\n );\n log('System dependency updated successfully');\n return result;\n }\n\n /**\n * 删除系统依赖项\n * @param id 依赖项 ID\n * @returns 成功响应\n */\n async deleteSystemDependency(id: number): Promise<{ success: boolean; message: string }> {\n log('删除系统依赖项: %d', id);\n\n const result = await this.request<{ success: boolean; message: string }>(\n `/admin/plugins/dependencies/${id}`,\n { method: 'DELETE' },\n );\n log('系统依赖项删除成功');\n return result;\n }\n}\n","import debug from 'debug';\n\nimport { BaseSDK } from '../core/BaseSDK';\nimport { MarketSDKOptions, PluginListResponse, PluginManifest, PluginQueryParams } from '../types';\n\n// Create debug instance\nconst log = debug('lobe-market-sdk:plugins');\n\n/**\n * 插件服务\n * 处理插件相关功能\n */\nexport class PluginsService extends BaseSDK {\n /**\n * 创建插件服务实例\n * @param options SDK 配置选项\n * @param sharedHeaders 共享的 headers 对象(可选)\n */\n constructor(options: MarketSDKOptions = {}, sharedHeaders?: Record<string, string>) {\n super(options, sharedHeaders);\n log('PluginsService instance created');\n }\n\n /**\n * 获取插件列表\n * @param params 查询参数\n * @returns 插件列表响应\n */\n async getPluginList(params: PluginQueryParams = {}): Promise<PluginListResponse> {\n const locale = params.locale || this.defaultLocale;\n const queryParams = { ...params, locale };\n const queryString = this.buildQueryString(queryParams);\n\n log('Getting plugin list: %O', queryParams);\n\n const result = await this.request<PluginListResponse>(`/v1/plugins${queryString}`);\n log('Retrieved %d plugins', result.items.length);\n return result;\n }\n\n /**\n * 获取插件清单\n * @param identifier 插件标识符\n * @param locale 语言\n * @param version 版本\n * @returns 插件清单\n */\n async getPluginManifest(\n identifier: string,\n locale?: string,\n version?: string,\n ): Promise<PluginManifest> {\n log('Getting plugin manifest: %O', { identifier, version, locale });\n const localeParam = locale || this.defaultLocale;\n const params: Record<string, string> = { locale: localeParam };\n if (version) {\n params.version = version;\n }\n const queryString = this.buildQueryString(params);\n\n const manifest = await this.request<PluginManifest>(\n `/v1/plugins/${identifier}/manifest${queryString}`,\n );\n log('Plugin manifest successfully retrieved: %s', identifier);\n return manifest;\n }\n}\n","import debug from 'debug';\n\nimport { BaseSDK } from '../core/BaseSDK';\nimport { DiscoveryDocument, MarketSDKOptions } from '../types';\n\n// Create debug instance\nconst log = debug('lobe-market-sdk:discovery');\n\n/**\n * 发现服务\n * 处理服务发现功能\n */\nexport class DiscoveryService extends BaseSDK {\n private discoveryDoc?: DiscoveryDocument;\n\n /**\n * 创建发现服务实例\n * @param options SDK 配置选项\n * @param sharedHeaders 共享的 headers 对象(可选)\n */\n constructor(options: MarketSDKOptions = {}, sharedHeaders?: Record<string, string>) {\n super(options, sharedHeaders);\n log('DiscoveryService instance created');\n }\n\n /**\n * 获取市场服务发现文档\n * @returns 服务发现文档\n */\n async getDiscoveryDocument(): Promise<DiscoveryDocument> {\n log('Fetching discovery document');\n if (this.discoveryDoc) {\n log('Returning cached discovery document');\n return this.discoveryDoc;\n }\n\n this.discoveryDoc = await this.request<DiscoveryDocument>('/market/.well-known/discovery');\n log('Discovery document successfully fetched');\n return this.discoveryDoc;\n }\n}\n","import { z } from 'zod';\n\n// 插件类型\nexport const PluginTypeEnum = z.enum(['lobe', 'openai', 'mcp']);\nexport type PluginType = z.infer<typeof PluginTypeEnum>;\n\n// 连接类型\nexport const ConnectionTypeEnum = z.enum(['http', 'stdio']);\nexport type ConnectionType = z.infer<typeof ConnectionTypeEnum>;\n\n// 安装方法\nexport const InstallationMethodEnum = z.enum([\n 'npm',\n 'docker',\n 'git',\n 'binaryUrl',\n 'manual',\n 'none',\n]);\nexport type InstallationMethod = z.infer<typeof InstallationMethodEnum>;\n\n// 系统依赖项\nexport interface SystemDependency {\n name: string;\n type?: string;\n requiredVersion?: string;\n checkCommand?: string;\n installInstructions?: Record<string, string>;\n versionParsingRequired?: boolean;\n notes?: string;\n}\n\n// 连接配置\nexport interface ConnectionConfig {\n type: string;\n command?: string;\n args?: string[];\n url?: string;\n}\n\nexport interface InstallationDetails {\n packageName?: string;\n repositoryUrlToClone?: string;\n setupSteps?: string[];\n}\n// 部署选项\nexport interface DeploymentOption {\n installationMethod: string;\n installationDetails?: InstallationDetails;\n connection: ConnectionConfig;\n isRecommended?: boolean;\n notes?: string;\n systemDependencies?: SystemDependency[];\n}\n\n// 兼容性信息\nexport interface PluginCompatibility {\n platforms?: string[];\n minAppVersion?: string;\n maxAppVersion?: string;\n}\n\n// 插件项\nexport interface PluginItem {\n identifier: string;\n version: string;\n isLatest: boolean;\n name: string;\n createdAt: string;\n type: PluginType;\n manifestUrl?: string;\n manifestVersion: string;\n icon?: string;\n author?: string;\n homepage?: string;\n category?: string;\n connectionType?: ConnectionType;\n compatibility?: PluginCompatibility;\n capabilities: {\n tools: boolean;\n prompts: boolean;\n resources: boolean;\n };\n description: string;\n tags?: string[];\n authRequirement?: string;\n isInstallable?: boolean;\n toolsCount?: number;\n promptsCount?: number;\n resourcesCount?: number;\n isValidated?: boolean;\n installCount?: number;\n ratingAverage?: number;\n ratingCount?: number;\n commentCount?: number;\n}\n\n// 插件列表响应\nexport interface PluginListResponse {\n items: PluginItem[];\n totalCount: number;\n currentPage: number;\n pageSize: number;\n totalPages: number;\n categories: string[];\n tags: string[];\n}\n\n// 工具项定义\nexport interface PluginTool {\n name: string;\n description?: string;\n parameters?: Record<string, any>;\n}\n\n// 资源项定义\nexport interface PluginResource {\n uri: string;\n name?: string;\n mimeType?: string;\n}\n\n// 提示词参数定义\nexport interface PromptArgument {\n name: string;\n required?: boolean;\n description?: string;\n type?: string;\n}\n\n// 提示词项定义\nexport interface PluginPrompt {\n name: string;\n description: string;\n arguments?: PromptArgument[];\n}\n\n// 插件清单\nexport interface PluginManifest {\n id: string;\n name: string;\n version: string;\n description: string;\n category?: string;\n tags?: string[];\n author?: {\n name: string;\n url?: string;\n };\n homepage?: string;\n icon?: string;\n capabilities?: {\n tools?: boolean;\n prompts?: boolean;\n resources?: boolean;\n };\n deploymentOptions?: DeploymentOption[];\n compatibility?: PluginCompatibility;\n // 工具定义\n tools?: PluginTool[];\n // 资源定义\n resources?: PluginResource[];\n // 提示词定义\n prompts?: PluginPrompt[];\n // 验证信息\n isValidated?: boolean;\n validatedAt?: string;\n}\n\n// 市场服务发现文档\nexport interface DiscoveryDocument {\n issuer: string;\n market_index_schema_version: number;\n resource_types_supported: string[];\n resource_endpoints: Record<string, string>;\n manifest_endpoint_template: string | Record<string, string>;\n support_locales: string[];\n response_types_supported: string[];\n authentication?: {\n schemes_supported: Array<'none' | 'apiKey' | 'oauth2'>;\n };\n api_documentation_url?: string;\n policy_url?: string;\n terms_of_service_url?: string;\n}\n\n// SDK 配置选项\nexport interface MarketSDKOptions {\n baseUrl?: string;\n defaultLocale?: string;\n apiKey?: string;\n}\n\n// 管理员 API 相关类型\n\n// 插件数据库模型\nexport interface Plugin {\n id: number;\n identifier: string;\n name: string;\n description: string;\n ownerId: number;\n type: string;\n visibility: 'public' | 'private' | 'unlisted';\n status: 'published' | 'draft' | 'review' | 'rejected';\n isFeatured: boolean;\n category: string;\n tags: string[];\n icon: string | null;\n author: string | null;\n homepage: string | null;\n manifestVersion: string;\n createdAt: string;\n updatedAt: string;\n meta: Record<string, any> | null;\n installCount: number;\n ratingAverage: number | null;\n ratingCount: number;\n reviewCount: number;\n}\n\n// 插件版本数据库模型\nexport interface PluginVersion {\n id: number;\n pluginId: number;\n version: string;\n isLatest: boolean;\n manifestUrl: string | null;\n toolsCount: number;\n promptsCount: number;\n resourcesCount: number;\n isValidated: boolean;\n createdAt: string;\n updatedAt: string;\n manifest: PluginManifest;\n meta: Record<string, any> | null;\n}\n\n// 管理员获取插件列表参数\nexport interface AdminPluginParams {\n status?: 'published' | 'draft' | 'review' | 'rejected';\n visibility?: 'public' | 'private' | 'unlisted';\n featured?: boolean;\n ownerId?: number;\n limit?: number;\n offset?: number;\n orderBy?: 'createdAt' | 'updatedAt' | 'installCount' | 'ratingAverage';\n order?: 'asc' | 'desc';\n}\n\n// 创建插件版本参数\nexport interface PluginVersionCreateParams {\n version: string;\n manifest: PluginManifest;\n manifestUrl?: string;\n isLatest?: boolean;\n isValidated?: boolean;\n meta?: Record<string, any>;\n}\n\n// 更新插件版本参数\nexport interface PluginVersionUpdateParams {\n manifestUrl?: string;\n isValidated?: boolean;\n meta?: Record<string, any>;\n}\n\n// 导出所有类型\nexport * from './common';\nexport * from './plugins';\nexport * from './admin';\n","import { z } from 'zod';\n\n// 插件类型\nexport const PluginTypeEnum = z.enum(['lobe', 'openai', 'mcp']);\nexport type PluginType = z.infer<typeof PluginTypeEnum>;\n\n// 连接类型\nexport const ConnectionTypeEnum = z.enum(['http', 'stdio']);\nexport type ConnectionType = z.infer<typeof ConnectionTypeEnum>;\n\n// 安装方法\nexport const InstallationMethodEnum = z.enum([\n 'npm',\n 'docker',\n 'git',\n 'binaryUrl',\n 'manual',\n 'none',\n]);\nexport type InstallationMethod = z.infer<typeof InstallationMethodEnum>;\n\n// 系统依赖项\nexport interface SystemDependency {\n name: string;\n type?: string;\n requiredVersion?: string;\n checkCommand?: string;\n installInstructions?: Record<string, string>;\n versionParsingRequired?: boolean;\n notes?: string;\n}\n\n// 连接配置\nexport interface ConnectionConfig {\n type: string;\n command?: string;\n args?: string[];\n url?: string;\n}\n\nexport interface InstallationDetails {\n packageName?: string;\n repositoryUrlToClone?: string;\n setupSteps?: string[];\n}\n\n// 部署选项\nexport interface DeploymentOption {\n installationMethod: string;\n installationDetails?: InstallationDetails;\n connection: ConnectionConfig;\n isRecommended?: boolean;\n notes?: string;\n systemDependencies?: SystemDependency[];\n}\n\n// 兼容性信息\nexport interface PluginCompatibility {\n platforms?: string[];\n minAppVersion?: string;\n maxAppVersion?: string;\n}\n\n// 插件项\nexport interface PluginItem {\n identifier: string;\n version: string;\n isLatest: boolean;\n name: string;\n createdAt: string;\n type: PluginType;\n manifestUrl?: string;\n manifestVersion: string;\n icon?: string;\n author?: string;\n homepage?: string;\n category?: string;\n connectionType?: ConnectionType;\n compatibility?: PluginCompatibility;\n capabilities: {\n tools: boolean;\n prompts: boolean;\n resources: boolean;\n };\n description: string;\n tags?: string[];\n authRequirement?: string;\n isInstallable?: boolean;\n toolsCount?: number;\n promptsCount?: number;\n resourcesCount?: number;\n isValidated?: boolean;\n installCount?: number;\n ratingAverage?: number;\n ratingCount?: number;\n commentCount?: number;\n}\n\n// 插件列表响应\nexport interface PluginListResponse {\n items: PluginItem[];\n totalCount: number;\n currentPage: number;\n pageSize: number;\n totalPages: number;\n categories: string[];\n tags: string[];\n}\n\n// 工具项定义\nexport interface PluginTool {\n name: string;\n description?: string;\n parameters?: Record<string, any>;\n}\n\n// 资源项定义\nexport interface PluginResource {\n uri: string;\n name?: string;\n mimeType?: string;\n}\n\n// 提示词参数定义\nexport interface PromptArgument {\n name: string;\n required?: boolean;\n description?: string;\n type?: string;\n}\n\n// 提示词项定义\nexport interface PluginPrompt {\n name: string;\n description: string;\n arguments?: PromptArgument[];\n}\n\n// 插件清单\nexport interface PluginManifest {\n id: string;\n name: string;\n version: string;\n description: string;\n category?: string;\n tags?: string[];\n author?: {\n name: string;\n url?: string;\n };\n homepage?: string;\n icon?: string;\n capabilities?: {\n tools?: boolean;\n prompts?: boolean;\n resources?: boolean;\n };\n deploymentOptions?: DeploymentOption[];\n compatibility?: PluginCompatibility;\n // 工具定义\n tools?: PluginTool[];\n // 资源定义\n resources?: PluginResource[];\n // 提示词定义\n prompts?: PluginPrompt[];\n // 验证信息\n isValidated?: boolean;\n validatedAt?: string;\n}\n\n// 插件查询参数\nexport interface PluginQueryParams {\n page?: number;\n pageSize?: number;\n category?: string;\n tags?: string;\n q?: string;\n sort?: 'installCount' | 'createdAt' | 'updatedAt' | 'ratingAverage';\n order?: 'asc' | 'desc';\n locale?: string;\n} "],"mappings":"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","names":["debug","debug","log","debug","debug","log","debug","debug","log","debug","log","debug","z","PluginTypeEnum","z","ConnectionTypeEnum","InstallationMethodEnum"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/market-sdk",
3
- "version": "0.0.8",
3
+ "version": "0.0.10",
4
4
  "description": "LobeHub Market JavaScript SDK",
5
5
  "keywords": [
6
6
  "lobehub",
@@ -28,10 +28,13 @@
28
28
  "build": "tsup",
29
29
  "dev": "tsup --watch",
30
30
  "prepublishOnly": "npm run build",
31
- "release": "npm publish"
31
+ "release": "npm publish",
32
+ "test:admin": "node examples/admin-test.js",
33
+ "test:domain": "node examples/domain-usage.js"
32
34
  },
33
35
  "dependencies": {
34
- "debug": "^4.4.1"
36
+ "debug": "^4.4.1",
37
+ "dotenv": "^16.4.5"
35
38
  },
36
39
  "devDependencies": {
37
40
  "@types/debug": "^4.1.12",