@visiblebase/client 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +55 -11
  2. package/bin/admin/index.d.ts +19 -0
  3. package/bin/admin/index.d.ts.map +1 -0
  4. package/bin/admin/index.js +47 -0
  5. package/bin/admin/index.js.map +1 -0
  6. package/bin/admin/types.d.ts +14 -0
  7. package/bin/admin/types.d.ts.map +1 -0
  8. package/bin/admin/types.js +5 -0
  9. package/bin/admin/types.js.map +1 -0
  10. package/bin/http.d.ts +31 -35
  11. package/bin/http.d.ts.map +1 -1
  12. package/bin/http.js +33 -20
  13. package/bin/http.js.map +1 -1
  14. package/bin/index.d.ts +12 -5
  15. package/bin/index.d.ts.map +1 -1
  16. package/bin/index.js +12 -4
  17. package/bin/index.js.map +1 -1
  18. package/bin/invoker/ai/index.d.ts +139 -0
  19. package/bin/invoker/ai/index.d.ts.map +1 -0
  20. package/bin/invoker/ai/index.js +247 -0
  21. package/bin/invoker/ai/index.js.map +1 -0
  22. package/bin/invoker/ai/stream.d.ts +8 -0
  23. package/bin/invoker/ai/stream.d.ts.map +1 -0
  24. package/bin/invoker/ai/stream.js +17 -0
  25. package/bin/invoker/ai/stream.js.map +1 -0
  26. package/bin/invoker/ai/types.d.ts +25 -0
  27. package/bin/invoker/ai/types.d.ts.map +1 -0
  28. package/bin/invoker/ai/types.js +5 -0
  29. package/bin/invoker/ai/types.js.map +1 -0
  30. package/bin/invoker/env/index.d.ts +31 -0
  31. package/bin/invoker/env/index.d.ts.map +1 -0
  32. package/bin/invoker/env/index.js +48 -0
  33. package/bin/invoker/env/index.js.map +1 -0
  34. package/bin/invoker/env/types.d.ts +15 -0
  35. package/bin/invoker/env/types.d.ts.map +1 -0
  36. package/bin/invoker/env/types.js +5 -0
  37. package/bin/invoker/env/types.js.map +1 -0
  38. package/bin/invoker/invoker.d.ts +43 -0
  39. package/bin/invoker/invoker.d.ts.map +1 -0
  40. package/bin/invoker/invoker.js +67 -0
  41. package/bin/invoker/invoker.js.map +1 -0
  42. package/bin/invoker/products/index.d.ts +46 -0
  43. package/bin/invoker/products/index.d.ts.map +1 -0
  44. package/bin/invoker/products/index.js +73 -0
  45. package/bin/invoker/products/index.js.map +1 -0
  46. package/bin/invoker/products/types.d.ts +28 -0
  47. package/bin/invoker/products/types.d.ts.map +1 -0
  48. package/bin/invoker/products/types.js +5 -0
  49. package/bin/invoker/products/types.js.map +1 -0
  50. package/bin/user/index.d.ts +25 -0
  51. package/bin/user/index.d.ts.map +1 -0
  52. package/bin/user/index.js +93 -0
  53. package/bin/user/index.js.map +1 -0
  54. package/bin/user/types.d.ts +25 -0
  55. package/bin/user/types.d.ts.map +1 -0
  56. package/bin/user/types.js +5 -0
  57. package/bin/user/types.js.map +1 -0
  58. package/package.json +7 -3
  59. package/bin/AdminClient.d.ts +0 -53
  60. package/bin/AdminClient.d.ts.map +0 -1
  61. package/bin/AdminClient.js +0 -134
  62. package/bin/AdminClient.js.map +0 -1
  63. package/bin/UserClient.d.ts +0 -26
  64. package/bin/UserClient.d.ts.map +0 -1
  65. package/bin/UserClient.js +0 -75
  66. package/bin/UserClient.js.map +0 -1
  67. package/bin/types.d.ts +0 -208
  68. package/bin/types.d.ts.map +0 -1
  69. package/bin/types.js +0 -7
  70. package/bin/types.js.map +0 -1
package/README.md CHANGED
@@ -4,8 +4,8 @@
4
4
 
5
5
  它提供两类客户端:
6
6
 
7
- - `UserClient`:给终端用户请求 Runtime
8
- - `AdminClient`:给开发者后端管理 product、签发 `user_token`、维护 Runtime env
7
+ - `UserClient`:给终端用户产品调用 Base,也负责公开插件入口,例如登录、注册、webhook
8
+ - `AdminClient`:给可信后端管理 product、签发 `user_token`、维护 Runtime env
9
9
 
10
10
  ## 安装
11
11
 
@@ -13,20 +13,58 @@
13
13
  pnpm add @visiblebase/client
14
14
  ```
15
15
 
16
+ ## UserClient 调公开插件
17
+
18
+ ```ts
19
+ import { UserClient } from "@visiblebase/client";
20
+
21
+ const guest = new UserClient({
22
+ base_url: "http://127.0.0.1:3001",
23
+ });
24
+
25
+ const session = await guest.plugin("auth").post("login", {
26
+ email: "user@example.com",
27
+ password: "password123",
28
+ product_id: "prod_xxx",
29
+ });
30
+ ```
31
+
16
32
  ## UserClient
17
33
 
18
34
  ```ts
19
35
  import { UserClient } from "@visiblebase/client";
36
+ import type { UIMessageChunk } from "ai";
20
37
 
21
38
  const client = new UserClient({
22
- baseUrl: "http://127.0.0.1:3001/viba",
23
- userToken: "ub_xxx",
39
+ base_url: "http://127.0.0.1:3001",
40
+ product_id: "prod_xxx",
41
+ user_token: "ub_xxx",
24
42
  });
25
43
 
26
- const output = await client.text({
27
- model: "gpt-4o-mini",
44
+ const models = await client.models();
45
+
46
+ const message = await client.text({
47
+ model: models.primary(),
28
48
  prompt: "你好",
29
49
  });
50
+
51
+ const stream = await client.stream({
52
+ model: models.primary(),
53
+ prompt: "流式输出一段文案",
54
+ });
55
+
56
+ const reader = stream.getReader();
57
+ const firstChunk: UIMessageChunk | undefined = (await reader.read()).value;
58
+ ```
59
+
60
+ `text()` 固定返回 AI SDK `UIMessage`。`stream()` 固定返回 `ReadableStream<UIMessageChunk>`,适配 Base 侧的 `createUIMessageStreamResponse()` 或 `streamText().toUIMessageStreamResponse()`。
61
+
62
+ `image()` 和 `video()` 也固定返回 AI SDK `UIMessage`,建议用 message 的 file part 表达图片或视频文件。
63
+
64
+ 需要调用用户侧插件路由时,使用 `plugin(id)`:
65
+
66
+ ```ts
67
+ const usage = await client.plugin("usage").get("me");
30
68
  ```
31
69
 
32
70
  ## AdminClient
@@ -35,21 +73,27 @@ const output = await client.text({
35
73
  import { AdminClient } from "@visiblebase/client";
36
74
 
37
75
  const admin = new AdminClient({
38
- baseUrl: "http://127.0.0.1:3001/viba",
39
- adminSecretKey: "admin_xxx",
76
+ base_url: "http://127.0.0.1:3001",
77
+ admin_secret_key: "admin_xxx",
40
78
  });
41
79
 
42
80
  const product = await admin.products.create({
43
- code: "demo",
44
81
  name: "Demo Product",
45
82
  });
46
83
 
47
- const token = await admin.users.token({
48
- product_id: product.id,
84
+ const token = await admin.tokens.apply({
85
+ product_id: product.product_id,
49
86
  user_id: "user_123",
87
+ ttl: "30m",
50
88
  });
51
89
  ```
52
90
 
91
+ 需要调用管理侧插件路由时,使用 `plugin(id)`:
92
+
93
+ ```ts
94
+ const events = await admin.plugin("usage").get("events");
95
+ ```
96
+
53
97
  ## 文档
54
98
 
55
99
  - 仓库首页:[visiblebase](https://github.com/wangenius/visiblebase)
@@ -0,0 +1,19 @@
1
+ /**
2
+ * 管理端 SDK。
3
+ */
4
+ import { ServiceClient } from "../invoker/invoker.js";
5
+ import { EnvInvoker } from "../invoker/env/index.js";
6
+ import { ProductsInvoker } from "../invoker/products/index.js";
7
+ import type { AdminClientOptions } from "./types.js";
8
+ export declare class AdminClient {
9
+ readonly env: EnvInvoker;
10
+ readonly products: ProductsInvoker;
11
+ private readonly base_url;
12
+ private readonly secret;
13
+ private readonly fetchImpl;
14
+ constructor(options: AdminClientOptions);
15
+ /** 获取 Service 调用器(admin 通路) */
16
+ service(name: string): ServiceClient;
17
+ private json;
18
+ }
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAS/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,qBAAa,WAAW;IACtB,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IAEnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;gBAE1B,OAAO,EAAE,kBAAkB;IAiBvC,+BAA+B;IAC/B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa;IAUpC,OAAO,CAAC,IAAI;CAcb"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * 管理端 SDK。
3
+ */
4
+ import { ServiceClient } from "../invoker/invoker.js";
5
+ import { EnvInvoker } from "../invoker/env/index.js";
6
+ import { ProductsInvoker } from "../invoker/products/index.js";
7
+ import { defaultFetch, normalizeBaseURL, requestJSON, requiredString, } from "../http.js";
8
+ export class AdminClient {
9
+ env;
10
+ products;
11
+ base_url;
12
+ secret;
13
+ fetchImpl;
14
+ constructor(options) {
15
+ if (!options || typeof options !== "object") {
16
+ throw new TypeError("AdminClient options are required");
17
+ }
18
+ this.base_url = normalizeBaseURL(options.base_url, "base_url");
19
+ this.secret = requiredString(options.admin_secret_key ?? process.env.VISIBLEBASE_ADMIN_SECRET_KEY, "admin_secret_key");
20
+ this.fetchImpl = options.fetch ?? defaultFetch();
21
+ const req = (path, init) => this.json(path, init);
22
+ this.env = new EnvInvoker({ requestJSON: req });
23
+ this.products = new ProductsInvoker({ requestJSON: req });
24
+ }
25
+ /** 获取 Service 调用器(admin 通路) */
26
+ service(name) {
27
+ const id = String(name ?? "").trim();
28
+ if (!id)
29
+ throw new TypeError("service name is required");
30
+ return new ServiceClient((path, init) => this.json(path, init), "/api/admin/services", id);
31
+ }
32
+ json(path, init) {
33
+ return requestJSON({
34
+ fetch: this.fetchImpl,
35
+ url: `${this.base_url}${path}`,
36
+ init: {
37
+ ...init,
38
+ headers: {
39
+ "content-type": "application/json",
40
+ authorization: `Bearer ${this.secret}`,
41
+ ...init.headers,
42
+ },
43
+ },
44
+ });
45
+ }
46
+ }
47
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,cAAc,GAGf,MAAM,YAAY,CAAC;AAGpB,MAAM,OAAO,WAAW;IACb,GAAG,CAAa;IAChB,QAAQ,CAAkB;IAElB,QAAQ,CAAS;IACjB,MAAM,CAAS;IACf,SAAS,CAAY;IAEtC,YAAY,OAA2B;QACrC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,GAAG,cAAc,CAC1B,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,EACpE,kBAAkB,CACnB,CAAC;QACF,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,IAAI,YAAY,EAAE,CAAC;QAEjD,MAAM,GAAG,GAAG,CAAI,IAAY,EAAE,IAAqB,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAI,IAAI,EAAE,IAAI,CAAC,CAAC;QACjF,IAAI,CAAC,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,GAAG,IAAI,eAAe,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,+BAA+B;IAC/B,OAAO,CAAC,IAAY;QAClB,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,SAAS,CAAC,0BAA0B,CAAC,CAAC;QACzD,OAAO,IAAI,aAAa,CACtB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EACrC,qBAAqB,EACrB,EAAE,CACH,CAAC;IACJ,CAAC;IAEO,IAAI,CAAI,IAAY,EAAE,IAAqB;QACjD,OAAO,WAAW,CAAI;YACpB,KAAK,EAAE,IAAI,CAAC,SAAS;YACrB,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE;YAC9B,IAAI,EAAE;gBACJ,GAAG,IAAI;gBACP,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;oBACtC,GAAG,IAAI,CAAC,OAAO;iBAChB;aACF;SACF,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * 管理端类型。
3
+ */
4
+ import type { FetchLike } from "../http.js";
5
+ /** 管理端 SDK 构造参数 */
6
+ export interface AdminClientOptions {
7
+ /** Base 管理端 base URL */
8
+ base_url: string;
9
+ /** 管理密钥 */
10
+ admin_secret_key?: string;
11
+ /** 自定义 fetch 实现 */
12
+ fetch?: FetchLike;
13
+ }
14
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/admin/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,mBAAmB;AACnB,MAAM,WAAW,kBAAkB;IACjC,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW;IACX,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * 管理端类型。
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/admin/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
package/bin/http.d.ts CHANGED
@@ -1,53 +1,49 @@
1
1
  /**
2
2
  * Client 包 HTTP 基础设施。
3
3
  *
4
- * 这里集中处理 base URL 规范化、默认 fetch、JSON 请求和错误转换。
5
- */
6
- import type { FetchLike, FetchResponseLike, RequestInitLike } from "./types.js";
7
- /**
8
- * 去掉 base URL 末尾多余斜杠。
4
+ * 集中处理 fetch 封装、URL 规范化、插件路径等共享工具。
5
+ * 同时包含 HTTP 层的公共类型。
9
6
  */
7
+ /** fetch 层收到的原始字节流 body */
8
+ export type RawStreamBody = ReadableStream<Uint8Array> | null;
9
+ /** SDK 内部传给 fetch 的请求配置 */
10
+ export interface RequestInitLike {
11
+ method?: string;
12
+ headers?: Record<string, string>;
13
+ body?: string;
14
+ }
15
+ /** fetch 返回对象的最小接口 */
16
+ export interface FetchResponseLike {
17
+ ok: boolean;
18
+ status: number;
19
+ body: RawStreamBody;
20
+ json(): Promise<unknown>;
21
+ text(): Promise<string>;
22
+ }
23
+ /** SDK 使用的 fetch 函数签名 */
24
+ export interface FetchLike {
25
+ (url: string, init: RequestInitLike): Promise<FetchResponseLike>;
26
+ }
27
+ /** 去掉 base URL 末尾多余斜杠 */
10
28
  export declare function normalizeBaseURL(value: unknown, label: string): string;
11
- /**
12
- * 校验必填字符串。
13
- */
29
+ /** 校验必填字符串 */
14
30
  export declare function requiredString(value: unknown, label: string): string;
15
- /**
16
- * 读取当前环境的全局 fetch。
17
- */
31
+ /** 读取全局 fetch */
18
32
  export declare function defaultFetch(): FetchLike;
19
- /**
20
- * 发送 JSON 请求并解析响应。
21
- */
33
+ /** 发送 JSON 请求并解析响应 */
22
34
  export declare function requestJSON<T>(params: {
23
- /**
24
- * fetch 实现。
25
- */
26
35
  fetch: FetchLike;
27
- /**
28
- * 完整请求 URL。
29
- */
30
36
  url: string;
31
- /**
32
- * 请求参数。
33
- */
34
37
  init: RequestInitLike;
35
38
  }): Promise<T>;
36
- /**
37
- * 发送请求并返回原始响应。
38
- */
39
+ /** 发送请求并返回原始响应 */
39
40
  export declare function requestRaw(params: {
40
- /**
41
- * fetch 实现。
42
- */
43
41
  fetch: FetchLike;
44
- /**
45
- * 完整请求 URL。
46
- */
47
42
  url: string;
48
- /**
49
- * 请求参数。
50
- */
51
43
  init: RequestInitLike;
52
44
  }): Promise<FetchResponseLike>;
45
+ /** 标准化插件 ID */
46
+ export declare function normalizePluginId(value: string): string;
47
+ /** 拼接插件请求路径 */
48
+ export declare function pluginPath(prefix: string, pluginId: string, path: string): string;
53
49
  //# sourceMappingURL=http.d.ts.map
package/bin/http.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEhF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGtE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAKpE;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,SAAS,CAMxC;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE;IAC3C;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC;IAEjB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,IAAI,EAAE,eAAe,CAAC;CACvB,GAAG,OAAO,CAAC,CAAC,CAAC,CAQb;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE;IACvC;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC;IAEjB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,IAAI,EAAE,eAAe,CAAC;CACvB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAQ7B"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,2BAA2B;AAC3B,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;AAE9D,2BAA2B;AAC3B,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,sBAAsB;AACtB,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACzB,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACzB;AAED,yBAAyB;AACzB,MAAM,WAAW,SAAS;IACxB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAClE;AAMD,yBAAyB;AACzB,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGtE;AAED,cAAc;AACd,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAKpE;AAMD,iBAAiB;AACjB,wBAAgB,YAAY,IAAI,SAAS,CAKxC;AAED,sBAAsB;AACtB,wBAAsB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE;IAC3C,KAAK,EAAE,SAAS,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,eAAe,CAAC;CACvB,GAAG,OAAO,CAAC,CAAC,CAAC,CAIb;AAED,kBAAkB;AAClB,wBAAsB,UAAU,CAAC,MAAM,EAAE;IACvC,KAAK,EAAE,SAAS,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,eAAe,CAAC;CACvB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAI7B;AAMD,eAAe;AACf,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIvD;AAED,eAAe;AACf,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjF"}
package/bin/http.js CHANGED
@@ -1,53 +1,66 @@
1
1
  /**
2
2
  * Client 包 HTTP 基础设施。
3
3
  *
4
- * 这里集中处理 base URL 规范化、默认 fetch、JSON 请求和错误转换。
5
- */
6
- /**
7
- * 去掉 base URL 末尾多余斜杠。
4
+ * 集中处理 fetch 封装、URL 规范化、插件路径等共享工具。
5
+ * 同时包含 HTTP 层的公共类型。
8
6
  */
7
+ // ===========================================================================
8
+ // URL 与校验
9
+ // ===========================================================================
10
+ /** 去掉 base URL 末尾多余斜杠 */
9
11
  export function normalizeBaseURL(value, label) {
10
12
  const url = requiredString(value, label);
11
13
  return url.replace(/\/+$/, "");
12
14
  }
13
- /**
14
- * 校验必填字符串。
15
- */
15
+ /** 校验必填字符串 */
16
16
  export function requiredString(value, label) {
17
17
  if (typeof value !== "string" || value.length === 0) {
18
18
  throw new TypeError(`${label} must be a non-empty string`);
19
19
  }
20
20
  return value;
21
21
  }
22
- /**
23
- * 读取当前环境的全局 fetch。
24
- */
22
+ // ===========================================================================
23
+ // fetch 封装
24
+ // ===========================================================================
25
+ /** 读取全局 fetch */
25
26
  export function defaultFetch() {
26
27
  if (typeof globalThis.fetch !== "function") {
27
28
  throw new Error("fetch is required");
28
29
  }
29
30
  return async (url, init) => globalThis.fetch(url, init);
30
31
  }
31
- /**
32
- * 发送 JSON 请求并解析响应。
33
- */
32
+ /** 发送 JSON 请求并解析响应 */
34
33
  export async function requestJSON(params) {
35
34
  const response = await params.fetch(params.url, params.init);
36
- if (!response.ok) {
35
+ if (!response.ok)
37
36
  throw await httpError(response);
38
- }
39
37
  return response.json();
40
38
  }
41
- /**
42
- * 发送请求并返回原始响应。
43
- */
39
+ /** 发送请求并返回原始响应 */
44
40
  export async function requestRaw(params) {
45
41
  const response = await params.fetch(params.url, params.init);
46
- if (!response.ok) {
42
+ if (!response.ok)
47
43
  throw await httpError(response);
48
- }
49
44
  return response;
50
45
  }
46
+ // ===========================================================================
47
+ // 插件路径工具
48
+ // ===========================================================================
49
+ /** 标准化插件 ID */
50
+ export function normalizePluginId(value) {
51
+ const normalized = String(value ?? "").trim();
52
+ if (!normalized)
53
+ throw new TypeError("plugin id is required");
54
+ return normalized;
55
+ }
56
+ /** 拼接插件请求路径 */
57
+ export function pluginPath(prefix, pluginId, path) {
58
+ const suffix = String(path ?? "").trim().replace(/^\/+/, "").replace(/\/+$/, "");
59
+ return suffix ? `${prefix}/${pluginId}/${suffix}` : `${prefix}/${pluginId}`;
60
+ }
61
+ // ===========================================================================
62
+ // 内部
63
+ // ===========================================================================
51
64
  async function httpError(response) {
52
65
  const body = await response.text();
53
66
  const error = new Error(`VisibleBase request failed with ${response.status}: ${body}`);
package/bin/http.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc,EAAE,KAAa;IAC5D,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACzC,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAc,EAAE,KAAa;IAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,6BAA6B,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,IAAmB,CAA+B,CAAC;AACvG,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAI,MAepC;IACC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAE7D,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAehC;IACC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAE7D,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,QAA2B;IAClD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,mCAAmC,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE,CAGpF,CAAC;IACF,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC/B,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
package/bin/index.d.ts CHANGED
@@ -1,9 +1,16 @@
1
1
  /**
2
2
  * @visiblebase/client 公共入口。
3
- *
4
- * 导出终端用户客户端、管理端客户端和 SDK 公共类型。
5
3
  */
6
- export { AdminClient, AdminEnvClient, AdminProductsClient, AdminUsersClient } from "./AdminClient.js";
7
- export { UserClient } from "./UserClient.js";
8
- export type { AdminClientOptions, AdminEnvEntry, AdminEnvUpsertInput, AdminProduct, AdminProductCreateInput, AdminProductIdInput, AdminTokenInput, AdminUserTokenResult, FetchLike, FetchResponseLike, RequestInitLike, UserClientOptions, } from "./types.js";
4
+ export type { FetchLike, FetchResponseLike, RawStreamBody, RequestInitLike, } from "./http.js";
5
+ export { UserClient } from "./user/index.js";
6
+ export { AIInvoker, ModelCatalog, ModelHandle } from "./invoker/ai/index.js";
7
+ export { ServiceClient, ActionClient } from "./invoker/invoker.js";
8
+ export type { UserClientOptions, UserImageResult, UserServiceInput, UserStreamChunk, UserStreamResult, UserTextResult, UserVideoResult, } from "./user/types.js";
9
+ export type { UserModelRef, UserModelInput, } from "./invoker/ai/types.js";
10
+ export { AdminClient } from "./admin/index.js";
11
+ export { EnvInvoker } from "./invoker/env/index.js";
12
+ export { ProductsInvoker } from "./invoker/products/index.js";
13
+ export type { AdminClientOptions, } from "./admin/types.js";
14
+ export type { EnvEntry, EnvUpsertInput, } from "./invoker/env/types.js";
15
+ export type { Product, ProductCreateInput, TokenApplyInput, TokenApplyResult, } from "./invoker/products/types.js";
9
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACtG,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EACV,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,SAAS,EACT,iBAAiB,EACjB,eAAe,EACf,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,YAAY,EACV,SAAS,EACT,iBAAiB,EACjB,aAAa,EACb,eAAe,GAChB,MAAM,WAAW,CAAC;AAMnB,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEnE,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,YAAY,EACZ,cAAc,GACf,MAAM,uBAAuB,CAAC;AAM/B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,YAAY,EACV,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,QAAQ,EACR,cAAc,GACf,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EACV,OAAO,EACP,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GACjB,MAAM,6BAA6B,CAAC"}
package/bin/index.js CHANGED
@@ -1,8 +1,16 @@
1
1
  /**
2
2
  * @visiblebase/client 公共入口。
3
- *
4
- * 导出终端用户客户端、管理端客户端和 SDK 公共类型。
5
3
  */
6
- export { AdminClient, AdminEnvClient, AdminProductsClient, AdminUsersClient } from "./AdminClient.js";
7
- export { UserClient } from "./UserClient.js";
4
+ // ===========================================================================
5
+ // 用户端
6
+ // ===========================================================================
7
+ export { UserClient } from "./user/index.js";
8
+ export { AIInvoker, ModelCatalog, ModelHandle } from "./invoker/ai/index.js";
9
+ export { ServiceClient, ActionClient } from "./invoker/invoker.js";
10
+ // ===========================================================================
11
+ // 管理端
12
+ // ===========================================================================
13
+ export { AdminClient } from "./admin/index.js";
14
+ export { EnvInvoker } from "./invoker/env/index.js";
15
+ export { ProductsInvoker } from "./invoker/products/index.js";
8
16
  //# sourceMappingURL=index.js.map
package/bin/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACtG,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,8EAA8E;AAC9E,MAAM;AACN,8EAA8E;AAE9E,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAiBnE,8EAA8E;AAC9E,MAAM;AACN,8EAA8E;AAE9E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * AI Service 调用器(对应 core service/ai/ai-service.ts AIService)。
3
+ *
4
+ * 路由:/v1/s/ai/{modality} 和 /v1/s/ai/models。
5
+ */
6
+ import type { UserModelRef } from "./types.js";
7
+ import type { UserImageResult, UserServiceInput, UserStreamResult, UserTextResult, UserVideoResult } from "../../user/types.js";
8
+ import type { RequestInitLike } from "../../http.js";
9
+ /**
10
+ * AI 服务调用器。
11
+ *
12
+ * 通过 UserClient.ai 访问:
13
+ * ```ts
14
+ * await client.ai.text({ prompt: "hello" });
15
+ * const catalog = await client.ai.listModels();
16
+ * ```
17
+ */
18
+ export declare class AIInvoker {
19
+ private readonly req;
20
+ private readonly reqRaw;
21
+ private readonly input;
22
+ private readonly baseUrl;
23
+ private readonly token;
24
+ constructor(opts: {
25
+ baseUrl: string;
26
+ token?: string;
27
+ requestJSON: <T>(path: string, init: RequestInitLike) => Promise<T>;
28
+ requestRaw: (path: string, init: RequestInitLike) => Promise<{
29
+ body: import("../../http.js").RawStreamBody;
30
+ }>;
31
+ buildInput: (input: UserServiceInput) => Record<string, unknown>;
32
+ });
33
+ /** 文本生成。支持 tools 参数(ai-sdk tool 格式,自动序列化去掉 execute) */
34
+ text(input: UserServiceInput): Promise<UserTextResult>;
35
+ /** 流式生成。支持 tools 参数(ai-sdk tool 格式,自动序列化去掉 execute) */
36
+ stream(input: UserServiceInput): Promise<UserStreamResult>;
37
+ /** 图片生成 */
38
+ image(input: UserServiceInput): Promise<UserImageResult>;
39
+ /** 视频生成 */
40
+ video(input: UserServiceInput): Promise<UserVideoResult>;
41
+ /** 语音合成 */
42
+ tts<T = unknown>(input: UserServiceInput): Promise<T>;
43
+ /** 语音识别 */
44
+ asr<T = unknown>(input: UserServiceInput): Promise<T>;
45
+ /** 获取模型目录 */
46
+ listModels(): Promise<ModelCatalog>;
47
+ /**
48
+ * 获取指定模型的操作句柄。
49
+ *
50
+ * ```ts
51
+ * const ref = catalog.get("kimi-k2.6");
52
+ * const m = client.ai.model(ref);
53
+ * // 便捷调用
54
+ * const msg = await m.text({ messages: [...] });
55
+ * // 或接入 ai-sdk
56
+ * const model = await m.create();
57
+ * ```
58
+ */
59
+ model(ref: UserModelRef | string): ModelHandle;
60
+ private post;
61
+ /** 将 ai-sdk tool 格式序列化为 OpenAI function 格式(去掉 execute,只保留 schema) */
62
+ private serializeTools;
63
+ }
64
+ /**
65
+ * 模型目录(AIInvoker.listModels() 返回值)。
66
+ *
67
+ * 计算规则:
68
+ * - 第一个模型 = 全局默认
69
+ * - 每个 modality 的第一个支持模型 = 该 modality 的默认
70
+ */
71
+ export declare class ModelCatalog {
72
+ private readonly byId;
73
+ private readonly def;
74
+ constructor(items: UserModelRef[]);
75
+ get(id: string): UserModelRef | undefined;
76
+ default(): UserModelRef | undefined;
77
+ all(): UserModelRef[];
78
+ forModality(modality: string): UserModelRef[];
79
+ }
80
+ /** 将 UserModelInput 转为字符串 */
81
+ export declare function serializeModel(model: import("./types.js").UserModelInput | undefined): string | undefined;
82
+ /**
83
+ * 模型操作句柄。
84
+ *
85
+ * 三种使用方式:
86
+ * 1. 便捷调用:m.text() / m.stream() — 走 server
87
+ * 2. 接入 ai-sdk:m.create() — 直接作为 LanguageModel
88
+ * 3. 接入其他 SDK:m.url() + m.modelName() + client.token — 自己拼
89
+ *
90
+ * 通过 `client.ai.model(ref)` 获取,ref 来自 `listModels()`。
91
+ */
92
+ export declare class ModelHandle {
93
+ private readonly ai;
94
+ /** 模型 ID */
95
+ readonly id: string;
96
+ /** 模型展示名称 */
97
+ readonly name: string;
98
+ /** 模型元数据(来自 server 的 PublicModel.meta) */
99
+ readonly meta: Record<string, unknown>;
100
+ /** Server AI 端点 */
101
+ readonly endpoint: string;
102
+ /** User auth token */
103
+ readonly token: string | undefined;
104
+ constructor(ai: AIInvoker,
105
+ /** 模型 ID */
106
+ id: string,
107
+ /** 模型展示名称 */
108
+ name?: string,
109
+ /** Server AI 端点 */
110
+ endpoint?: string,
111
+ /** User auth token */
112
+ token?: string, meta?: Record<string, unknown>);
113
+ /** 流式生成 */
114
+ stream(input: Omit<UserServiceInput, "model">): Promise<UserStreamResult>;
115
+ /** 文本生成 */
116
+ text(input: Omit<UserServiceInput, "model">): Promise<UserTextResult>;
117
+ /** 图片生成 */
118
+ image(input: Omit<UserServiceInput, "model">): Promise<UserImageResult>;
119
+ /** 视频生成 */
120
+ video(input: Omit<UserServiceInput, "model">): Promise<UserVideoResult>;
121
+ /**
122
+ * 创建 ai-sdk 兼容的 LanguageModel。
123
+ *
124
+ * 直接传给 generateText / streamText:
125
+ * ```ts
126
+ * const result = await generateText({
127
+ * model: await handle.create(),
128
+ * messages: [...],
129
+ * tools: { ... },
130
+ * });
131
+ * ```
132
+ */
133
+ create(): Promise<import("ai").LanguageModel>;
134
+ /** Server AI 端点 URL */
135
+ url(): string;
136
+ /** 模型名称(API 调用时的 model 参数值) */
137
+ modelName(): string;
138
+ }
139
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/invoker/ai/index.ts"],"names":[],"mappings":"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"}