@lobehub/market-sdk 0.0.8 → 0.0.9
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 +313 -50
- package/dist/index.mjs +372 -86
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -3
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,310 @@ 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
|
-
*
|
|
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
|
+
* 处理管理员相关功能
|
|
278
|
+
*/
|
|
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
|
+
meta: {
|
|
304
|
+
total: number;
|
|
305
|
+
limit: number;
|
|
306
|
+
offset: number;
|
|
307
|
+
};
|
|
308
|
+
}>;
|
|
309
|
+
/**
|
|
310
|
+
* 获取单个插件(含所有版本)
|
|
311
|
+
* @param id 插件 ID
|
|
312
|
+
* @returns 插件(含版本)
|
|
313
|
+
*/
|
|
314
|
+
getPlugin(id: number): Promise<{
|
|
315
|
+
data: Plugin & {
|
|
316
|
+
versions: PluginVersion[];
|
|
317
|
+
};
|
|
318
|
+
}>;
|
|
319
|
+
/**
|
|
320
|
+
* 更新插件信息
|
|
321
|
+
* @param id 插件 ID
|
|
322
|
+
* @param data 插件更新数据
|
|
323
|
+
* @returns 更新后的插件
|
|
324
|
+
*/
|
|
325
|
+
updatePlugin(id: number, data: PluginUpdateParams): Promise<{
|
|
326
|
+
data: Plugin;
|
|
327
|
+
}>;
|
|
328
|
+
/**
|
|
329
|
+
* 更新插件状态
|
|
330
|
+
* @param id 插件 ID
|
|
331
|
+
* @param status 新状态
|
|
332
|
+
* @returns 成功响应
|
|
333
|
+
*/
|
|
334
|
+
updatePluginStatus(id: number, status: 'published' | 'draft' | 'review' | 'rejected'): Promise<{
|
|
335
|
+
success: boolean;
|
|
336
|
+
message: string;
|
|
337
|
+
}>;
|
|
338
|
+
/**
|
|
339
|
+
* 删除插件
|
|
340
|
+
* @param id 插件 ID
|
|
341
|
+
* @returns 成功响应
|
|
342
|
+
*/
|
|
343
|
+
deletePlugin(id: number): Promise<{
|
|
344
|
+
success: boolean;
|
|
345
|
+
message: string;
|
|
346
|
+
}>;
|
|
347
|
+
/**
|
|
348
|
+
* 获取插件版本列表
|
|
349
|
+
* @param pluginId 插件 ID
|
|
350
|
+
* @returns 插件版本列表
|
|
351
|
+
*/
|
|
352
|
+
getPluginVersions(pluginId: number): Promise<{
|
|
353
|
+
data: PluginVersion[];
|
|
354
|
+
}>;
|
|
355
|
+
/**
|
|
356
|
+
* 获取单个插件版本
|
|
357
|
+
* @param pluginId 插件 ID
|
|
358
|
+
* @param versionId 版本 ID
|
|
359
|
+
* @returns 插件版本
|
|
360
|
+
*/
|
|
361
|
+
getPluginVersion(pluginId: number, versionId: number): Promise<{
|
|
362
|
+
data: PluginVersion;
|
|
363
|
+
}>;
|
|
364
|
+
/**
|
|
365
|
+
* 创建插件版本
|
|
366
|
+
* @param pluginId 插件 ID
|
|
367
|
+
* @param data 版本创建数据
|
|
368
|
+
* @returns 创建的版本
|
|
369
|
+
*/
|
|
370
|
+
createPluginVersion(pluginId: number, data: PluginVersionCreateParams): Promise<{
|
|
371
|
+
data: PluginVersion;
|
|
372
|
+
}>;
|
|
373
|
+
/**
|
|
374
|
+
* 更新插件版本
|
|
375
|
+
* @param pluginId 插件 ID
|
|
376
|
+
* @param versionId 版本 ID
|
|
377
|
+
* @param data 版本更新数据
|
|
378
|
+
* @returns 更新后的版本
|
|
379
|
+
*/
|
|
380
|
+
updatePluginVersion(pluginId: number, versionId: number, data: PluginVersionUpdateParams): Promise<{
|
|
381
|
+
data: PluginVersion;
|
|
382
|
+
}>;
|
|
383
|
+
/**
|
|
384
|
+
* 删除插件版本
|
|
385
|
+
* @param pluginId 插件 ID
|
|
386
|
+
* @param versionId 版本 ID
|
|
387
|
+
* @returns 成功响应
|
|
388
|
+
*/
|
|
389
|
+
deletePluginVersion(pluginId: number, versionId: number): Promise<{
|
|
390
|
+
success: boolean;
|
|
391
|
+
message: string;
|
|
392
|
+
}>;
|
|
393
|
+
/**
|
|
394
|
+
* 设置插件版本为最新版本
|
|
395
|
+
* @param pluginId 插件 ID
|
|
396
|
+
* @param versionId 版本 ID
|
|
397
|
+
* @returns 成功响应
|
|
398
|
+
*/
|
|
399
|
+
setPluginVersionAsLatest(pluginId: number, versionId: number): Promise<{
|
|
400
|
+
success: boolean;
|
|
401
|
+
message: string;
|
|
402
|
+
}>;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
/**
|
|
406
|
+
* 插件服务
|
|
407
|
+
* 处理插件相关功能
|
|
408
|
+
*/
|
|
409
|
+
declare class PluginsService extends BaseSDK {
|
|
410
|
+
/**
|
|
411
|
+
* 创建插件服务实例
|
|
412
|
+
* @param options SDK 配置选项
|
|
413
|
+
* @param sharedHeaders 共享的 headers 对象(可选)
|
|
414
|
+
*/
|
|
415
|
+
constructor(options?: MarketSDKOptions, sharedHeaders?: Record<string, string>);
|
|
416
|
+
/**
|
|
417
|
+
* 获取插件列表
|
|
418
|
+
* @param params 查询参数
|
|
419
|
+
* @returns 插件列表响应
|
|
420
|
+
*/
|
|
421
|
+
getPluginList(params?: PluginQueryParams): Promise<PluginListResponse>;
|
|
422
|
+
/**
|
|
423
|
+
* 获取插件清单
|
|
424
|
+
* @param identifier 插件标识符
|
|
425
|
+
* @param locale 语言
|
|
426
|
+
* @param version 版本
|
|
427
|
+
* @returns 插件清单
|
|
428
|
+
*/
|
|
429
|
+
getPluginManifest(identifier: string, locale?: string, version?: string): Promise<PluginManifest>;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/**
|
|
433
|
+
* 发现服务
|
|
434
|
+
* 处理服务发现功能
|
|
154
435
|
*/
|
|
155
|
-
declare class
|
|
156
|
-
private baseUrl;
|
|
157
|
-
private defaultLocale;
|
|
436
|
+
declare class DiscoveryService extends BaseSDK {
|
|
158
437
|
private discoveryDoc?;
|
|
159
|
-
private headers;
|
|
160
438
|
/**
|
|
161
|
-
*
|
|
162
|
-
* @param options SDK
|
|
439
|
+
* 创建发现服务实例
|
|
440
|
+
* @param options SDK 配置选项
|
|
441
|
+
* @param sharedHeaders 共享的 headers 对象(可选)
|
|
163
442
|
*/
|
|
164
|
-
constructor(options?: MarketSDKOptions);
|
|
443
|
+
constructor(options?: MarketSDKOptions, sharedHeaders?: Record<string, string>);
|
|
444
|
+
/**
|
|
445
|
+
* 获取市场服务发现文档
|
|
446
|
+
* @returns 服务发现文档
|
|
447
|
+
*/
|
|
448
|
+
getDiscoveryDocument(): Promise<DiscoveryDocument>;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
/**
|
|
452
|
+
* LobeHub Market SDK Client
|
|
453
|
+
* 采用组合模式组合各个领域服务
|
|
454
|
+
*/
|
|
455
|
+
declare class MarketSDK extends BaseSDK {
|
|
165
456
|
/**
|
|
166
|
-
*
|
|
167
|
-
* @param url Request URL
|
|
168
|
-
* @param options fetch options
|
|
169
|
-
* @returns Response data
|
|
457
|
+
* 插件服务
|
|
170
458
|
*/
|
|
171
|
-
|
|
459
|
+
readonly plugins: PluginsService;
|
|
172
460
|
/**
|
|
173
|
-
*
|
|
174
|
-
* @param params Query parameters
|
|
175
|
-
* @returns Query string
|
|
461
|
+
* 管理员服务
|
|
176
462
|
*/
|
|
177
|
-
|
|
463
|
+
readonly admin: AdminService;
|
|
464
|
+
/**
|
|
465
|
+
* 发现服务
|
|
466
|
+
*/
|
|
467
|
+
private readonly discovery;
|
|
468
|
+
/**
|
|
469
|
+
* Create MarketSDK instance
|
|
470
|
+
* @param options SDK configuration options
|
|
471
|
+
*/
|
|
472
|
+
constructor(options?: MarketSDKOptions);
|
|
178
473
|
/**
|
|
179
474
|
* Get market service discovery document
|
|
180
475
|
* @returns Service discovery document
|
|
181
476
|
*/
|
|
182
477
|
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
478
|
/**
|
|
207
479
|
* Import plugin manifests (requires admin privileges)
|
|
208
480
|
* @param manifests Plugin manifest array
|
|
@@ -213,15 +485,6 @@ declare class MarketSDK {
|
|
|
213
485
|
success: number;
|
|
214
486
|
failed: number;
|
|
215
487
|
}>;
|
|
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
488
|
}
|
|
226
489
|
|
|
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 };
|
|
490
|
+
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,41 +1,41 @@
|
|
|
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
|
|
6
|
+
var log = debug("lobe-market-sdk:core");
|
|
7
|
+
var BaseSDK = class {
|
|
18
8
|
/**
|
|
19
|
-
*
|
|
20
|
-
* @param options SDK
|
|
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
15
|
this.defaultLocale = options.defaultLocale || "zh-CN";
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
|
|
16
|
+
if (sharedHeaders) {
|
|
17
|
+
this.headers = sharedHeaders;
|
|
18
|
+
log("\u4F7F\u7528\u5171\u4EAB\u7684 headers \u5BF9\u8C61");
|
|
19
|
+
} else {
|
|
20
|
+
this.headers = {
|
|
21
|
+
"Content-Type": "application/json",
|
|
22
|
+
...options.apiKey ? { Authorization: `Bearer ${options.apiKey}` } : {}
|
|
23
|
+
};
|
|
24
|
+
log("\u521B\u5EFA\u65B0\u7684 headers \u5BF9\u8C61");
|
|
25
|
+
}
|
|
26
|
+
log("BaseSDK \u5B9E\u4F8B\u5DF2\u521B\u5EFA: %O", {
|
|
27
|
+
baseUrl: this.baseUrl,
|
|
28
|
+
defaultLocale: this.defaultLocale
|
|
29
|
+
});
|
|
30
30
|
}
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
33
|
-
* @param url
|
|
34
|
-
* @param options fetch
|
|
35
|
-
* @returns
|
|
32
|
+
* 发送请求并处理响应
|
|
33
|
+
* @param url 请求 URL
|
|
34
|
+
* @param options fetch 选项
|
|
35
|
+
* @returns 响应数据
|
|
36
36
|
*/
|
|
37
37
|
async request(url, options = {}) {
|
|
38
|
-
log("
|
|
38
|
+
log("\u53D1\u9001\u8BF7\u6C42: %s", `${this.baseUrl}${url}`);
|
|
39
39
|
const response = await fetch(`${this.baseUrl}${url}`, {
|
|
40
40
|
...options,
|
|
41
41
|
headers: {
|
|
@@ -44,110 +44,396 @@ var MarketSDK = class {
|
|
|
44
44
|
}
|
|
45
45
|
});
|
|
46
46
|
if (!response.ok) {
|
|
47
|
-
const errorMsg =
|
|
48
|
-
log("
|
|
47
|
+
const errorMsg = `\u8BF7\u6C42\u5931\u8D25: ${response.status} ${response.statusText}`;
|
|
48
|
+
log("\u8BF7\u6C42\u9519\u8BEF: %s", errorMsg);
|
|
49
49
|
throw new Error(errorMsg);
|
|
50
50
|
}
|
|
51
|
-
log("
|
|
51
|
+
log("\u8BF7\u6C42\u6210\u529F: %s", url);
|
|
52
52
|
return response.json();
|
|
53
53
|
}
|
|
54
54
|
/**
|
|
55
|
-
*
|
|
56
|
-
* @param params
|
|
57
|
-
* @returns
|
|
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
|
-
*
|
|
65
|
-
* @
|
|
64
|
+
* 设置认证令牌
|
|
65
|
+
* @param token 认证令牌
|
|
66
66
|
*/
|
|
67
|
-
|
|
68
|
-
log("
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
67
|
+
setAuthToken(token) {
|
|
68
|
+
log("\u8BBE\u7F6E\u8BA4\u8BC1\u4EE4\u724C");
|
|
69
|
+
this.headers.Authorization = `Bearer ${token}`;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* 清除认证令牌
|
|
73
|
+
*/
|
|
74
|
+
clearAuthToken() {
|
|
75
|
+
log("\u6E05\u9664\u8BA4\u8BC1\u4EE4\u724C");
|
|
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 \u5B9E\u4F8B\u5DF2\u521B\u5EFA");
|
|
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
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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(
|
|
115
|
+
`\u6279\u91CF\u5BFC\u5165\u5B8C\u6210: ${response.data.success} \u4E2A\u6210\u529F, ${response.data.failed} \u4E2A\u5931\u8D25`
|
|
116
|
+
);
|
|
117
|
+
return response.data;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* 获取所有插件(高级筛选)
|
|
121
|
+
* @param params 管理员插件查询参数
|
|
122
|
+
* @returns 插件列表响应
|
|
123
|
+
*/
|
|
124
|
+
async getPlugins(params = {}) {
|
|
125
|
+
log2("\u83B7\u53D6\u63D2\u4EF6\u5217\u8868\uFF08\u7BA1\u7406\u5458\uFF09: %O", params);
|
|
126
|
+
const queryString = this.buildQueryString(params);
|
|
127
|
+
const result = await this.request(
|
|
128
|
+
`/admin/plugins${queryString}`
|
|
129
|
+
);
|
|
130
|
+
log2("\u5DF2\u83B7\u53D6 %d \u4E2A\u63D2\u4EF6", result.data.length);
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* 获取单个插件(含所有版本)
|
|
135
|
+
* @param id 插件 ID
|
|
136
|
+
* @returns 插件(含版本)
|
|
137
|
+
*/
|
|
138
|
+
async getPlugin(id) {
|
|
139
|
+
log2("\u83B7\u53D6\u63D2\u4EF6\u8BE6\u60C5\uFF08\u7BA1\u7406\u5458\uFF09: %d", id);
|
|
140
|
+
const result = await this.request(
|
|
141
|
+
`/admin/plugins/${id}`
|
|
142
|
+
);
|
|
143
|
+
log2("\u5DF2\u83B7\u53D6\u63D2\u4EF6\uFF08\u5171 %d \u4E2A\u7248\u672C\uFF09", result.data.versions.length);
|
|
144
|
+
return result;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* 更新插件信息
|
|
148
|
+
* @param id 插件 ID
|
|
149
|
+
* @param data 插件更新数据
|
|
150
|
+
* @returns 更新后的插件
|
|
151
|
+
*/
|
|
152
|
+
async updatePlugin(id, data) {
|
|
153
|
+
log2("\u66F4\u65B0\u63D2\u4EF6: %d\uFF0C\u6570\u636E: %O", id, data);
|
|
154
|
+
const result = await this.request(
|
|
155
|
+
`/admin/plugins/${id}`,
|
|
156
|
+
{
|
|
157
|
+
method: "PUT",
|
|
158
|
+
body: JSON.stringify(data)
|
|
159
|
+
}
|
|
160
|
+
);
|
|
161
|
+
log2("\u63D2\u4EF6\u66F4\u65B0\u6210\u529F");
|
|
162
|
+
return result;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* 更新插件状态
|
|
166
|
+
* @param id 插件 ID
|
|
167
|
+
* @param status 新状态
|
|
168
|
+
* @returns 成功响应
|
|
169
|
+
*/
|
|
170
|
+
async updatePluginStatus(id, status) {
|
|
171
|
+
log2("\u66F4\u65B0\u63D2\u4EF6\u72B6\u6001: %d \u4E3A %s", id, status);
|
|
172
|
+
const result = await this.request(
|
|
173
|
+
`/admin/plugins/${id}/status`,
|
|
174
|
+
{
|
|
175
|
+
method: "PATCH",
|
|
176
|
+
body: JSON.stringify({ status })
|
|
177
|
+
}
|
|
178
|
+
);
|
|
179
|
+
log2("\u63D2\u4EF6\u72B6\u6001\u66F4\u65B0\u6210\u529F");
|
|
180
|
+
return result;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* 删除插件
|
|
184
|
+
* @param id 插件 ID
|
|
185
|
+
* @returns 成功响应
|
|
186
|
+
*/
|
|
187
|
+
async deletePlugin(id) {
|
|
188
|
+
log2("\u5220\u9664\u63D2\u4EF6: %d", id);
|
|
189
|
+
const result = await this.request(
|
|
190
|
+
`/admin/plugins/${id}`,
|
|
191
|
+
{ method: "DELETE" }
|
|
192
|
+
);
|
|
193
|
+
log2("\u63D2\u4EF6\u5220\u9664\u6210\u529F");
|
|
194
|
+
return result;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* 获取插件版本列表
|
|
198
|
+
* @param pluginId 插件 ID
|
|
199
|
+
* @returns 插件版本列表
|
|
200
|
+
*/
|
|
201
|
+
async getPluginVersions(pluginId) {
|
|
202
|
+
log2("\u83B7\u53D6\u63D2\u4EF6\u7248\u672C: pluginId=%d", pluginId);
|
|
203
|
+
const result = await this.request(
|
|
204
|
+
`/admin/plugins/${pluginId}/versions`
|
|
205
|
+
);
|
|
206
|
+
log2("\u5DF2\u83B7\u53D6 %d \u4E2A\u7248\u672C", result.data.length);
|
|
207
|
+
return result;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* 获取单个插件版本
|
|
211
|
+
* @param pluginId 插件 ID
|
|
212
|
+
* @param versionId 版本 ID
|
|
213
|
+
* @returns 插件版本
|
|
214
|
+
*/
|
|
215
|
+
async getPluginVersion(pluginId, versionId) {
|
|
216
|
+
log2("\u83B7\u53D6\u7248\u672C\u8BE6\u60C5: pluginId=%d, versionId=%d", pluginId, versionId);
|
|
217
|
+
const result = await this.request(
|
|
218
|
+
`/admin/plugins/${pluginId}/versions/${versionId}`
|
|
219
|
+
);
|
|
220
|
+
log2("\u5DF2\u83B7\u53D6\u7248\u672C\u8BE6\u60C5");
|
|
221
|
+
return result;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* 创建插件版本
|
|
225
|
+
* @param pluginId 插件 ID
|
|
226
|
+
* @param data 版本创建数据
|
|
227
|
+
* @returns 创建的版本
|
|
228
|
+
*/
|
|
229
|
+
async createPluginVersion(pluginId, data) {
|
|
230
|
+
log2("\u521B\u5EFA\u65B0\u7248\u672C: pluginId=%d", pluginId);
|
|
231
|
+
const result = await this.request(
|
|
232
|
+
`/admin/plugins/${pluginId}/versions`,
|
|
233
|
+
{
|
|
234
|
+
method: "POST",
|
|
235
|
+
body: JSON.stringify(data)
|
|
236
|
+
}
|
|
237
|
+
);
|
|
238
|
+
log2("\u63D2\u4EF6\u7248\u672C\u521B\u5EFA\u6210\u529F");
|
|
239
|
+
return result;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* 更新插件版本
|
|
243
|
+
* @param pluginId 插件 ID
|
|
244
|
+
* @param versionId 版本 ID
|
|
245
|
+
* @param data 版本更新数据
|
|
246
|
+
* @returns 更新后的版本
|
|
247
|
+
*/
|
|
248
|
+
async updatePluginVersion(pluginId, versionId, data) {
|
|
249
|
+
log2("\u66F4\u65B0\u7248\u672C: pluginId=%d, versionId=%d", pluginId, versionId);
|
|
250
|
+
const result = await this.request(
|
|
251
|
+
`/admin/plugins/${pluginId}/versions/${versionId}`,
|
|
252
|
+
{
|
|
253
|
+
method: "PUT",
|
|
254
|
+
body: JSON.stringify(data)
|
|
255
|
+
}
|
|
256
|
+
);
|
|
257
|
+
log2("\u63D2\u4EF6\u7248\u672C\u66F4\u65B0\u6210\u529F");
|
|
258
|
+
return result;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* 删除插件版本
|
|
262
|
+
* @param pluginId 插件 ID
|
|
263
|
+
* @param versionId 版本 ID
|
|
264
|
+
* @returns 成功响应
|
|
265
|
+
*/
|
|
266
|
+
async deletePluginVersion(pluginId, versionId) {
|
|
267
|
+
log2("\u5220\u9664\u7248\u672C: pluginId=%d, versionId=%d", pluginId, versionId);
|
|
268
|
+
const result = await this.request(
|
|
269
|
+
`/admin/plugins/${pluginId}/versions/${versionId}`,
|
|
270
|
+
{ method: "DELETE" }
|
|
271
|
+
);
|
|
272
|
+
log2("\u63D2\u4EF6\u7248\u672C\u5220\u9664\u6210\u529F");
|
|
273
|
+
return result;
|
|
76
274
|
}
|
|
77
275
|
/**
|
|
78
|
-
*
|
|
79
|
-
* @param
|
|
80
|
-
* @
|
|
276
|
+
* 设置插件版本为最新版本
|
|
277
|
+
* @param pluginId 插件 ID
|
|
278
|
+
* @param versionId 版本 ID
|
|
279
|
+
* @returns 成功响应
|
|
280
|
+
*/
|
|
281
|
+
async setPluginVersionAsLatest(pluginId, versionId) {
|
|
282
|
+
log2("\u8BBE\u7F6E\u7248\u672C\u4E3A\u6700\u65B0: pluginId=%d, versionId=%d", pluginId, versionId);
|
|
283
|
+
const result = await this.request(
|
|
284
|
+
`/admin/plugins/${pluginId}/versions/${versionId}/latest`,
|
|
285
|
+
{ method: "POST" }
|
|
286
|
+
);
|
|
287
|
+
log2("\u7248\u672C\u5DF2\u8BBE\u7F6E\u4E3A\u6700\u65B0");
|
|
288
|
+
return result;
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
|
|
292
|
+
// src/services/PluginsService.ts
|
|
293
|
+
import debug3 from "debug";
|
|
294
|
+
var log3 = debug3("lobe-market-sdk:plugins");
|
|
295
|
+
var PluginsService = class extends BaseSDK {
|
|
296
|
+
/**
|
|
297
|
+
* 创建插件服务实例
|
|
298
|
+
* @param options SDK 配置选项
|
|
299
|
+
* @param sharedHeaders 共享的 headers 对象(可选)
|
|
300
|
+
*/
|
|
301
|
+
constructor(options = {}, sharedHeaders) {
|
|
302
|
+
super(options, sharedHeaders);
|
|
303
|
+
log3("PluginsService \u5B9E\u4F8B\u5DF2\u521B\u5EFA");
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* 获取插件列表
|
|
307
|
+
* @param params 查询参数
|
|
308
|
+
* @returns 插件列表响应
|
|
81
309
|
*/
|
|
82
310
|
async getPluginList(params = {}) {
|
|
83
311
|
const locale = params.locale || this.defaultLocale;
|
|
84
312
|
const queryParams = { ...params, locale };
|
|
85
313
|
const queryString = this.buildQueryString(queryParams);
|
|
86
|
-
|
|
314
|
+
log3("\u83B7\u53D6\u63D2\u4EF6\u5217\u8868: %O", queryParams);
|
|
87
315
|
const result = await this.request(`/v1/plugins${queryString}`);
|
|
88
|
-
|
|
316
|
+
log3("\u5DF2\u83B7\u53D6 %d \u4E2A\u63D2\u4EF6", result.items.length);
|
|
89
317
|
return result;
|
|
90
318
|
}
|
|
91
319
|
/**
|
|
92
|
-
*
|
|
93
|
-
* @param identifier
|
|
94
|
-
* @param locale
|
|
95
|
-
* @param version
|
|
96
|
-
* @returns
|
|
320
|
+
* 获取插件清单
|
|
321
|
+
* @param identifier 插件标识符
|
|
322
|
+
* @param locale 语言
|
|
323
|
+
* @param version 版本
|
|
324
|
+
* @returns 插件清单
|
|
97
325
|
*/
|
|
98
326
|
async getPluginManifest(identifier, locale, version) {
|
|
99
|
-
|
|
327
|
+
log3("\u83B7\u53D6\u63D2\u4EF6\u6E05\u5355: %O", { identifier, version, locale });
|
|
100
328
|
const localeParam = locale || this.defaultLocale;
|
|
101
329
|
const params = { locale: localeParam };
|
|
102
330
|
if (version) {
|
|
103
331
|
params.version = version;
|
|
104
332
|
}
|
|
105
333
|
const queryString = this.buildQueryString(params);
|
|
106
|
-
const manifest = await this.request(
|
|
107
|
-
|
|
334
|
+
const manifest = await this.request(
|
|
335
|
+
`/v1/plugins/${identifier}/manifest${queryString}`
|
|
336
|
+
);
|
|
337
|
+
log3("\u6210\u529F\u83B7\u53D6\u63D2\u4EF6\u6E05\u5355: %s", identifier);
|
|
108
338
|
return manifest;
|
|
109
339
|
}
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
// src/services/DiscoveryService.ts
|
|
343
|
+
import debug4 from "debug";
|
|
344
|
+
var log4 = debug4("lobe-market-sdk:discovery");
|
|
345
|
+
var DiscoveryService = class extends BaseSDK {
|
|
346
|
+
/**
|
|
347
|
+
* 创建发现服务实例
|
|
348
|
+
* @param options SDK 配置选项
|
|
349
|
+
* @param sharedHeaders 共享的 headers 对象(可选)
|
|
350
|
+
*/
|
|
351
|
+
constructor(options = {}, sharedHeaders) {
|
|
352
|
+
super(options, sharedHeaders);
|
|
353
|
+
log4("DiscoveryService \u5B9E\u4F8B\u5DF2\u521B\u5EFA");
|
|
354
|
+
}
|
|
110
355
|
/**
|
|
111
|
-
*
|
|
112
|
-
* @
|
|
113
|
-
* @param ownerId Owner ID
|
|
114
|
-
* @returns Import result
|
|
356
|
+
* 获取市场服务发现文档
|
|
357
|
+
* @returns 服务发现文档
|
|
115
358
|
*/
|
|
116
|
-
async
|
|
117
|
-
|
|
118
|
-
if (
|
|
119
|
-
|
|
359
|
+
async getDiscoveryDocument() {
|
|
360
|
+
log4("\u83B7\u53D6\u670D\u52A1\u53D1\u73B0\u6587\u6863");
|
|
361
|
+
if (this.discoveryDoc) {
|
|
362
|
+
log4("\u8FD4\u56DE\u7F13\u5B58\u7684\u53D1\u73B0\u6587\u6863");
|
|
363
|
+
return this.discoveryDoc;
|
|
120
364
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
manifests,
|
|
125
|
-
ownerId
|
|
126
|
-
})
|
|
127
|
-
});
|
|
128
|
-
log(`Batch import completed: ${response.data.success} successful, ${response.data.failed} failed`);
|
|
129
|
-
return response.data;
|
|
365
|
+
this.discoveryDoc = await this.request("/market/.well-known/discovery");
|
|
366
|
+
log4("\u6210\u529F\u83B7\u53D6\u670D\u52A1\u53D1\u73B0\u6587\u6863");
|
|
367
|
+
return this.discoveryDoc;
|
|
130
368
|
}
|
|
369
|
+
};
|
|
370
|
+
|
|
371
|
+
// src/market-sdk.ts
|
|
372
|
+
var log5 = debug5("lobe-market-sdk");
|
|
373
|
+
var MarketSDK = class extends BaseSDK {
|
|
131
374
|
/**
|
|
132
|
-
*
|
|
133
|
-
* @param
|
|
375
|
+
* Create MarketSDK instance
|
|
376
|
+
* @param options SDK configuration options
|
|
134
377
|
*/
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
378
|
+
constructor(options = {}) {
|
|
379
|
+
super(options);
|
|
380
|
+
log5("MarketSDK \u5B9E\u4F8B\u5DF2\u521B\u5EFA");
|
|
381
|
+
this.plugins = new PluginsService(options, this.headers);
|
|
382
|
+
this.admin = new AdminService(options, this.headers);
|
|
383
|
+
this.discovery = new DiscoveryService(options, this.headers);
|
|
138
384
|
}
|
|
139
385
|
/**
|
|
140
|
-
*
|
|
386
|
+
* Get market service discovery document
|
|
387
|
+
* @returns Service discovery document
|
|
141
388
|
*/
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
389
|
+
async getDiscoveryDocument() {
|
|
390
|
+
return this.discovery.getDiscoveryDocument();
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Import plugin manifests (requires admin privileges)
|
|
394
|
+
* @param manifests Plugin manifest array
|
|
395
|
+
* @param ownerId Owner ID
|
|
396
|
+
* @returns Import result
|
|
397
|
+
*/
|
|
398
|
+
async importManifests(manifests, ownerId) {
|
|
399
|
+
return this.admin.importManifests(manifests, ownerId);
|
|
145
400
|
}
|
|
146
401
|
};
|
|
402
|
+
|
|
403
|
+
// src/types/index.ts
|
|
404
|
+
import { z as z2 } from "zod";
|
|
405
|
+
|
|
406
|
+
// src/types/plugins.ts
|
|
407
|
+
import { z } from "zod";
|
|
408
|
+
var PluginTypeEnum = z.enum(["lobe", "openai", "mcp"]);
|
|
409
|
+
var ConnectionTypeEnum = z.enum(["http", "stdio"]);
|
|
410
|
+
var InstallationMethodEnum = z.enum([
|
|
411
|
+
"npm",
|
|
412
|
+
"docker",
|
|
413
|
+
"git",
|
|
414
|
+
"binaryUrl",
|
|
415
|
+
"manual",
|
|
416
|
+
"none"
|
|
417
|
+
]);
|
|
418
|
+
|
|
419
|
+
// src/types/index.ts
|
|
420
|
+
var PluginTypeEnum2 = z2.enum(["lobe", "openai", "mcp"]);
|
|
421
|
+
var ConnectionTypeEnum2 = z2.enum(["http", "stdio"]);
|
|
422
|
+
var InstallationMethodEnum2 = z2.enum([
|
|
423
|
+
"npm",
|
|
424
|
+
"docker",
|
|
425
|
+
"git",
|
|
426
|
+
"binaryUrl",
|
|
427
|
+
"manual",
|
|
428
|
+
"none"
|
|
429
|
+
]);
|
|
147
430
|
export {
|
|
148
|
-
|
|
149
|
-
|
|
431
|
+
AdminService,
|
|
432
|
+
ConnectionTypeEnum2 as ConnectionTypeEnum,
|
|
433
|
+
DiscoveryService,
|
|
434
|
+
InstallationMethodEnum2 as InstallationMethodEnum,
|
|
150
435
|
MarketSDK,
|
|
151
|
-
PluginTypeEnum
|
|
436
|
+
PluginTypeEnum2 as PluginTypeEnum,
|
|
437
|
+
PluginsService
|
|
152
438
|
};
|
|
153
439
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -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":";AAAA,SAAS,SAAS;AAGX,IAAM,iBAAiB,EAAE,KAAK,CAAC,QAAQ,UAAU,KAAK,CAAC;AAIvD,IAAM,qBAAqB,EAAE,KAAK,CAAC,QAAQ,OAAO,CAAC;AAInD,IAAM,yBAAyB,EAAE,KAAK;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;;;ACXD,OAAO,WAAW;AAGlB,IAAM,MAAM,MAAM,iBAAiB;AAK5B,IAAM,YAAN,MAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,EAUrB,YAAY,UAA4B,CAAC,GAAG;AAC1C,SAAK,UAAU,QAAQ,WAAW;AAClC,SAAK,gBAAgB,QAAQ,iBAAiB;AAC9C,SAAK,UAAU;AAAA,MACb,gBAAgB;AAAA,MAChB,GAAI,QAAQ,SAAS,EAAE,eAAe,UAAU,QAAQ,MAAM,GAAG,IAAI,CAAC;AAAA,IACxE;AACA,QAAI,kCAAkC,EAAE,SAAS,KAAK,SAAS,eAAe,KAAK,cAAc,CAAC;AAAA,EACpG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,QAAW,KAAa,UAAuB,CAAC,GAAe;AAC3E,QAAI,uBAAuB,GAAG,KAAK,OAAO,GAAG,GAAG,EAAE;AAElD,UAAM,WAAW,MAAM,MAAM,GAAG,KAAK,OAAO,GAAG,GAAG,IAAI;AAAA,MACpD,GAAG;AAAA,MACH,SAAS;AAAA,QACP,GAAG,KAAK;AAAA,QACR,GAAG,QAAQ;AAAA,MACb;AAAA,IACF,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,WAAW,mBAAmB,SAAS,MAAM,IAAI,SAAS,UAAU;AAC1E,UAAI,qBAAqB,QAAQ;AACjC,YAAM,IAAI,MAAM,QAAQ;AAAA,IAC1B;AAEA,QAAI,0BAA0B,GAAG;AACjC,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,iBAAiB,QAAqC;AAC5D,UAAM,QAAQ,OAAO,QAAQ,MAAM,EAChC,OAAO,CAAC,CAAC,GAAG,KAAK,MAAM,UAAU,UAAa,UAAU,IAAI,EAC5D,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,mBAAmB,GAAG,CAAC,IAAI,mBAAmB,OAAO,KAAK,CAAC,CAAC,EAAE,EACvF,KAAK,GAAG;AAEX,WAAO,QAAQ,IAAI,KAAK,KAAK;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,uBAAmD;AACvD,QAAI,oCAAoC;AACxC,QAAI,KAAK,cAAc;AACrB,UAAI,qCAAqC;AACzC,aAAO,KAAK;AAAA,IACd;AAEA,SAAK,eAAe,MAAM,KAAK,QAA2B,+BAA+B;AACzF,QAAI,mDAAmD;AACvD,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,cAAc,SAShB,CAAC,GAAgC;AACnC,UAAM,SAAS,OAAO,UAAU,KAAK;AACrC,UAAM,cAAc,EAAE,GAAG,QAAQ,OAAO;AACxC,UAAM,cAAc,KAAK,iBAAiB,WAAW;AAErD,QAAI,2BAA2B,WAAW;AAE1C,UAAM,SAAS,MAAM,KAAK,QAA4B,cAAc,WAAW,EAAE;AACjF,QAAI,wBAAwB,OAAO,MAAM,MAAM;AAC/C,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,kBACJ,YACA,QACA,SACyB;AACzB,QAAI,+BAA+B,EAAE,YAAY,SAAS,OAAO,CAAC;AAClE,UAAM,cAAc,UAAU,KAAK;AACnC,UAAM,SAAiC,EAAE,QAAQ,YAAY;AAC7D,QAAI,SAAS;AACX,aAAO,UAAU;AAAA,IACnB;AACA,UAAM,cAAc,KAAK,iBAAiB,MAAM;AAEhD,UAAM,WAAW,MAAM,KAAK,QAAwB,eAAe,UAAU,YAAY,WAAW,EAAE;AACtG,QAAI,8CAA8C,UAAU;AAC5D,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,gBAAgB,WAA6B,SAAgE;AACjH,QAAI,4BAA4B,UAAU,MAAM,YAAY;AAC5D,QAAI,SAAS;AACX,UAAI,6BAA6B,OAAO,EAAE;AAAA,IAC5C;AAEA,UAAM,WAAW,MAAM,KAAK,QAAuD,4BAA4B;AAAA,MAC7G,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU;AAAA,QACnB;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAED,QAAI,2BAA2B,SAAS,KAAK,OAAO,gBAAgB,SAAS,KAAK,MAAM,SAAS;AACjG,WAAO,SAAS;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa,OAAqB;AAChC,QAAI,8BAA8B;AAClC,SAAK,QAAQ,gBAAgB,UAAU,KAAK;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAuB;AACrB,QAAI,+BAA+B;AACnC,WAAO,KAAK,QAAQ;AAAA,EACtB;AACF;","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 实例已创建');\n\n // 初始化各领域服务,共享 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// 创建调试实例\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 || 'zh-CN';\n \n // 使用共享的 headers 或创建新的\n if (sharedHeaders) {\n this.headers = sharedHeaders;\n log('使用共享的 headers 对象');\n } else {\n this.headers = {\n 'Content-Type': 'application/json',\n ...(options.apiKey ? { Authorization: `Bearer ${options.apiKey}` } : {}),\n };\n log('创建新的 headers 对象');\n }\n\n log('BaseSDK 实例已创建: %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('发送请求: %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 = `请求失败: ${response.status} ${response.statusText}`;\n log('请求错误: %s', errorMsg);\n throw new Error(errorMsg);\n }\n\n log('请求成功: %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('设置认证令牌');\n this.headers.Authorization = `Bearer ${token}`;\n }\n\n /**\n * 清除认证令牌\n */\n clearAuthToken(): void {\n log('清除认证令牌');\n delete this.headers.Authorization;\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} from '../types';\n\n// 创建调试实例\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 实例已创建');\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(\n `批量导入完成: ${response.data.success} 个成功, ${response.data.failed} 个失败`,\n );\n return response.data;\n }\n\n /**\n * 获取所有插件(高级筛选)\n * @param params 管理员插件查询参数\n * @returns 插件列表响应\n */\n async getPlugins(params: AdminPluginParams = {}): Promise<{ data: Plugin[]; meta: { total: number; limit: number; offset: number } }> {\n log('获取插件列表(管理员): %O', params);\n const queryString = this.buildQueryString(params);\n\n const result = await this.request<{ data: Plugin[]; meta: { total: number; limit: number; offset: number } }>(\n `/admin/plugins${queryString}`,\n );\n log('已获取 %d 个插件', 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(\n id: number, \n data: PluginUpdateParams\n ): Promise<{ data: Plugin }> {\n log('更新插件: %d,数据: %O', id, data);\n \n const result = await this.request<{ data: Plugin }>(\n `/admin/plugins/${id}`,\n {\n method: 'PUT',\n body: JSON.stringify(data),\n }\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('获取插件版本: pluginId=%d', pluginId);\n \n const result = await this.request<{ data: PluginVersion[] }>(\n `/admin/plugins/${pluginId}/versions`,\n );\n log('已获取 %d 个版本', 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('获取版本详情: pluginId=%d, versionId=%d', pluginId, versionId);\n \n const result = await this.request<{ data: PluginVersion }>(\n `/admin/plugins/${pluginId}/versions/${versionId}`,\n );\n log('已获取版本详情');\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('创建新版本: 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('插件版本创建成功');\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('更新版本: 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(pluginId: number, versionId: number): 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(pluginId: number, versionId: number): 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}/latest`,\n { method: 'POST' }\n );\n log('版本已设置为最新');\n return result;\n }\n} ","import debug from 'debug';\n\nimport { BaseSDK } from '../core/BaseSDK';\nimport { MarketSDKOptions, PluginListResponse, PluginManifest, PluginQueryParams } from '../types';\n\n// 创建调试实例\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 实例已创建');\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('获取插件列表: %O', queryParams);\n\n const result = await this.request<PluginListResponse>(`/v1/plugins${queryString}`);\n log('已获取 %d 个插件', 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('获取插件清单: %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('成功获取插件清单: %s', identifier);\n return manifest;\n }\n} ","import debug from 'debug';\n\nimport { BaseSDK } from '../core/BaseSDK';\nimport { DiscoveryDocument, MarketSDKOptions } from '../types';\n\n// 创建调试实例\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 实例已创建');\n }\n\n /**\n * 获取市场服务发现文档\n * @returns 服务发现文档\n */\n async getDiscoveryDocument(): Promise<DiscoveryDocument> {\n log('获取服务发现文档');\n if (this.discoveryDoc) {\n log('返回缓存的发现文档');\n return this.discoveryDoc;\n }\n\n this.discoveryDoc = await this.request<DiscoveryDocument>('/market/.well-known/discovery');\n log('成功获取服务发现文档');\n return this.discoveryDoc;\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.
|
|
3
|
+
"version": "0.0.9",
|
|
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",
|