@visiblebase/client 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,56 @@
1
+ # @visiblebase/client
2
+
3
+ `@visiblebase/client` 是 VisibleBase 的客户端 SDK。
4
+
5
+ 它提供两类客户端:
6
+
7
+ - `UserClient`:给终端用户请求 Runtime
8
+ - `AdminClient`:给开发者后端管理 product、签发 `user_token`、维护 Runtime env
9
+
10
+ ## 安装
11
+
12
+ ```bash
13
+ pnpm add @visiblebase/client
14
+ ```
15
+
16
+ ## UserClient
17
+
18
+ ```ts
19
+ import { UserClient } from "@visiblebase/client";
20
+
21
+ const client = new UserClient({
22
+ baseUrl: "http://127.0.0.1:3001/viba",
23
+ userToken: "ub_xxx",
24
+ });
25
+
26
+ const output = await client.text({
27
+ model: "gpt-4o-mini",
28
+ prompt: "你好",
29
+ });
30
+ ```
31
+
32
+ ## AdminClient
33
+
34
+ ```ts
35
+ import { AdminClient } from "@visiblebase/client";
36
+
37
+ const admin = new AdminClient({
38
+ baseUrl: "http://127.0.0.1:3001/viba",
39
+ adminSecretKey: "admin_xxx",
40
+ });
41
+
42
+ const product = await admin.products.create({
43
+ code: "demo",
44
+ name: "Demo Product",
45
+ });
46
+
47
+ const token = await admin.users.token({
48
+ product_id: product.id,
49
+ user_id: "user_123",
50
+ });
51
+ ```
52
+
53
+ ## 文档
54
+
55
+ - 仓库首页:[visiblebase](https://github.com/wangenius/visiblebase)
56
+ - 文档目录:[homepage/content/docs](https://github.com/wangenius/visiblebase/tree/main/homepage/content/docs)
@@ -0,0 +1,53 @@
1
+ /**
2
+ * 管理端 SDK。
3
+ *
4
+ * AdminClient 只应该在开发者后端、Console 或其他可信服务端使用。它使用
5
+ * admin_secret_key 管理当前 Base 的 env、products,并派发终端用户 user_token。
6
+ */
7
+ import type { AdminClientOptions, AdminEnvEntry, AdminEnvUpsertInput, AdminProduct, AdminProductCreateInput, AdminProductIdInput, AdminTokenInput, AdminUserTokenResult, RequestInitLike } from "./types.js";
8
+ /**
9
+ * VisibleBase 管理端客户端。
10
+ */
11
+ export declare class AdminClient {
12
+ readonly env: AdminEnvClient;
13
+ readonly products: AdminProductsClient;
14
+ readonly users: AdminUsersClient;
15
+ private readonly base_url;
16
+ private readonly admin_secret_key;
17
+ private readonly fetchImpl;
18
+ constructor(options: AdminClientOptions);
19
+ requestJSON<T>(path: string, init: RequestInitLike): Promise<T>;
20
+ private withAuthHeaders;
21
+ }
22
+ /**
23
+ * 管理 product 的资源客户端。
24
+ */
25
+ export declare class AdminProductsClient {
26
+ private readonly admin;
27
+ constructor(admin: AdminClient);
28
+ list(): Promise<AdminProduct[]>;
29
+ create(input: AdminProductCreateInput): Promise<AdminProduct>;
30
+ pause(input: AdminProductIdInput): Promise<AdminProduct>;
31
+ activate(input: AdminProductIdInput): Promise<AdminProduct>;
32
+ remove(input: AdminProductIdInput): Promise<unknown>;
33
+ }
34
+ /**
35
+ * 管理 user_token 的资源客户端。
36
+ */
37
+ export declare class AdminUsersClient {
38
+ private readonly admin;
39
+ constructor(admin: AdminClient);
40
+ token(input: AdminTokenInput): Promise<AdminUserTokenResult>;
41
+ }
42
+ /**
43
+ * 管理 Runtime Env 的资源客户端。
44
+ */
45
+ export declare class AdminEnvClient {
46
+ private readonly admin;
47
+ constructor(admin: AdminClient);
48
+ list(): Promise<AdminEnvEntry[]>;
49
+ upsert(input: AdminEnvUpsertInput): Promise<unknown>;
50
+ remove(key: string): Promise<unknown>;
51
+ import(raw: string): Promise<unknown>;
52
+ }
53
+ //# sourceMappingURL=AdminClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminClient.d.ts","sourceRoot":"","sources":["../src/AdminClient.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EAEpB,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,qBAAa,WAAW;IACtB,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IAEjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;gBAE1B,OAAO,EAAE,kBAAkB;IAgBvC,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC;IAQ/D,OAAO,CAAC,eAAe;CAUxB;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;gBAExB,KAAK,EAAE,WAAW;IAIxB,IAAI,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAOrC,MAAM,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,YAAY,CAAC;IAO7D,KAAK,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC;IAOxD,QAAQ,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC;IAO3D,MAAM,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;CAMrD;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;gBAExB,KAAK,EAAE,WAAW;IAI9B,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,oBAAoB,CAAC;CAM7D;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;gBAExB,KAAK,EAAE,WAAW;IAIxB,IAAI,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAOtC,MAAM,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IAOpD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOrC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAMtC"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * 管理端 SDK。
3
+ *
4
+ * AdminClient 只应该在开发者后端、Console 或其他可信服务端使用。它使用
5
+ * admin_secret_key 管理当前 Base 的 env、products,并派发终端用户 user_token。
6
+ */
7
+ import { defaultFetch, normalizeBaseURL, requestJSON, requiredString } from "./http.js";
8
+ /**
9
+ * VisibleBase 管理端客户端。
10
+ */
11
+ export class AdminClient {
12
+ env;
13
+ products;
14
+ users;
15
+ base_url;
16
+ admin_secret_key;
17
+ fetchImpl;
18
+ constructor(options) {
19
+ if (!options || typeof options !== "object") {
20
+ throw new TypeError("AdminClient options are required");
21
+ }
22
+ this.base_url = normalizeBaseURL(options.base_url, "base_url");
23
+ this.admin_secret_key = requiredString(options.admin_secret_key ?? process.env.VISIBLEBASE_ADMIN_SECRET_KEY, "admin_secret_key");
24
+ this.fetchImpl = options.fetch ?? defaultFetch();
25
+ this.env = new AdminEnvClient(this);
26
+ this.products = new AdminProductsClient(this);
27
+ this.users = new AdminUsersClient(this);
28
+ }
29
+ requestJSON(path, init) {
30
+ return requestJSON({
31
+ fetch: this.fetchImpl,
32
+ url: `${this.base_url}${path}`,
33
+ init: this.withAuthHeaders(init),
34
+ });
35
+ }
36
+ withAuthHeaders(init) {
37
+ return {
38
+ ...init,
39
+ headers: {
40
+ "content-type": "application/json",
41
+ authorization: `Bearer ${this.admin_secret_key}`,
42
+ ...init.headers,
43
+ },
44
+ };
45
+ }
46
+ }
47
+ /**
48
+ * 管理 product 的资源客户端。
49
+ */
50
+ export class AdminProductsClient {
51
+ admin;
52
+ constructor(admin) {
53
+ this.admin = admin;
54
+ }
55
+ async list() {
56
+ const body = await this.admin.requestJSON("/api/admin/products", {
57
+ method: "GET",
58
+ });
59
+ return body.items;
60
+ }
61
+ create(input) {
62
+ return this.admin.requestJSON("/api/admin/products/create", {
63
+ method: "POST",
64
+ body: JSON.stringify(input),
65
+ });
66
+ }
67
+ pause(input) {
68
+ return this.admin.requestJSON("/api/admin/products/pause", {
69
+ method: "POST",
70
+ body: JSON.stringify(input),
71
+ });
72
+ }
73
+ activate(input) {
74
+ return this.admin.requestJSON("/api/admin/products/activate", {
75
+ method: "POST",
76
+ body: JSON.stringify(input),
77
+ });
78
+ }
79
+ remove(input) {
80
+ return this.admin.requestJSON("/api/admin/products/remove", {
81
+ method: "POST",
82
+ body: JSON.stringify(input),
83
+ });
84
+ }
85
+ }
86
+ /**
87
+ * 管理 user_token 的资源客户端。
88
+ */
89
+ export class AdminUsersClient {
90
+ admin;
91
+ constructor(admin) {
92
+ this.admin = admin;
93
+ }
94
+ token(input) {
95
+ return this.admin.requestJSON("/api/admin/users/token", {
96
+ method: "POST",
97
+ body: JSON.stringify(input),
98
+ });
99
+ }
100
+ }
101
+ /**
102
+ * 管理 Runtime Env 的资源客户端。
103
+ */
104
+ export class AdminEnvClient {
105
+ admin;
106
+ constructor(admin) {
107
+ this.admin = admin;
108
+ }
109
+ async list() {
110
+ const body = await this.admin.requestJSON("/api/admin/env", {
111
+ method: "GET",
112
+ });
113
+ return body.items;
114
+ }
115
+ upsert(input) {
116
+ return this.admin.requestJSON("/api/admin/env/upsert", {
117
+ method: "POST",
118
+ body: JSON.stringify(input),
119
+ });
120
+ }
121
+ remove(key) {
122
+ return this.admin.requestJSON("/api/admin/env/remove", {
123
+ method: "POST",
124
+ body: JSON.stringify({ key }),
125
+ });
126
+ }
127
+ import(raw) {
128
+ return this.admin.requestJSON("/api/admin/env/import", {
129
+ method: "POST",
130
+ body: JSON.stringify({ raw }),
131
+ });
132
+ }
133
+ }
134
+ //# sourceMappingURL=AdminClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminClient.js","sourceRoot":"","sources":["../src/AdminClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * 终端用户 SDK。
3
+ *
4
+ * UserClient 只面向开发者产品里的终端客户端。它携带 user_token 调用 Runtime,
5
+ * 不接触 provider API key 或管理端密钥。
6
+ */
7
+ import type { UserClientOptions } from "./types.js";
8
+ /**
9
+ * VisibleBase 终端用户客户端。
10
+ */
11
+ export declare class UserClient {
12
+ private readonly base_url;
13
+ private readonly user_token;
14
+ private readonly fetchImpl;
15
+ constructor(options: UserClientOptions);
16
+ text<T = unknown>(input: Record<string, unknown>): Promise<T>;
17
+ image<T = unknown>(input: Record<string, unknown>): Promise<T>;
18
+ audio<T = unknown>(input: Record<string, unknown>): Promise<T>;
19
+ stream(input: Record<string, unknown>): Promise<unknown>;
20
+ models<T = unknown>(): Promise<T>;
21
+ private post;
22
+ private requestJSON;
23
+ private request;
24
+ private withAuthHeaders;
25
+ }
26
+ //# sourceMappingURL=UserClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserClient.d.ts","sourceRoot":"","sources":["../src/UserClient.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAA8B,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEhF;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;gBAE1B,OAAO,EAAE,iBAAiB;IAUtC,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI7D,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI9D,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIxD,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ9D,MAAM,CAAC,CAAC,GAAG,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC;IAMjC,OAAO,CAAC,IAAI;IAOZ,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,eAAe;CAUxB"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * 终端用户 SDK。
3
+ *
4
+ * UserClient 只面向开发者产品里的终端客户端。它携带 user_token 调用 Runtime,
5
+ * 不接触 provider API key 或管理端密钥。
6
+ */
7
+ import { defaultFetch, normalizeBaseURL, requestJSON, requestRaw, requiredString } from "./http.js";
8
+ /**
9
+ * VisibleBase 终端用户客户端。
10
+ */
11
+ export class UserClient {
12
+ base_url;
13
+ user_token;
14
+ fetchImpl;
15
+ constructor(options) {
16
+ if (!options || typeof options !== "object") {
17
+ throw new TypeError("UserClient options are required");
18
+ }
19
+ this.base_url = normalizeBaseURL(options.base_url, "base_url");
20
+ this.user_token = requiredString(options.user_token, "user_token");
21
+ this.fetchImpl = options.fetch ?? defaultFetch();
22
+ }
23
+ text(input) {
24
+ return this.post("/v1/text", input);
25
+ }
26
+ image(input) {
27
+ return this.post("/v1/image", input);
28
+ }
29
+ audio(input) {
30
+ return this.post("/v1/audio", input);
31
+ }
32
+ async stream(input) {
33
+ const response = await this.request("/v1/stream", {
34
+ method: "POST",
35
+ body: JSON.stringify(input),
36
+ });
37
+ return response.body;
38
+ }
39
+ models() {
40
+ return this.requestJSON("/v1/models", {
41
+ method: "GET",
42
+ });
43
+ }
44
+ post(path, input) {
45
+ return this.requestJSON(path, {
46
+ method: "POST",
47
+ body: JSON.stringify(input),
48
+ });
49
+ }
50
+ requestJSON(path, init) {
51
+ return requestJSON({
52
+ fetch: this.fetchImpl,
53
+ url: `${this.base_url}${path}`,
54
+ init: this.withAuthHeaders(init),
55
+ });
56
+ }
57
+ request(path, init) {
58
+ return requestRaw({
59
+ fetch: this.fetchImpl,
60
+ url: `${this.base_url}${path}`,
61
+ init: this.withAuthHeaders(init),
62
+ });
63
+ }
64
+ withAuthHeaders(init) {
65
+ return {
66
+ ...init,
67
+ headers: {
68
+ "content-type": "application/json",
69
+ authorization: `Bearer ${this.user_token}`,
70
+ ...init.headers,
71
+ },
72
+ };
73
+ }
74
+ }
75
+ //# sourceMappingURL=UserClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserClient.js","sourceRoot":"","sources":["../src/UserClient.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGpG;;GAEG;AACH,MAAM,OAAO,UAAU;IACJ,QAAQ,CAAS;IACjB,UAAU,CAAS;IACnB,SAAS,CAAY;IAEtC,YAAY,OAA0B;QACpC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,IAAI,SAAS,CAAC,iCAAiC,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC/D,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACnE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,IAAI,YAAY,EAAE,CAAC;IACnD,CAAC;IAED,IAAI,CAAc,KAA8B;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAI,UAAU,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAc,KAA8B;QAC/C,OAAO,IAAI,CAAC,IAAI,CAAI,WAAW,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAc,KAA8B;QAC/C,OAAO,IAAI,CAAC,IAAI,CAAI,WAAW,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAA8B;QACzC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;YAChD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;SAC5B,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,WAAW,CAAI,YAAY,EAAE;YACvC,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;IACL,CAAC;IAEO,IAAI,CAAI,IAAY,EAAE,KAA8B;QAC1D,OAAO,IAAI,CAAC,WAAW,CAAI,IAAI,EAAE;YAC/B,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;SAC5B,CAAC,CAAC;IACL,CAAC;IAEO,WAAW,CAAI,IAAY,EAAE,IAAqB;QACxD,OAAO,WAAW,CAAI;YACpB,KAAK,EAAE,IAAI,CAAC,SAAS;YACrB,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE;YAC9B,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;SACjC,CAAC,CAAC;IACL,CAAC;IAEO,OAAO,CAAC,IAAY,EAAE,IAAqB;QACjD,OAAO,UAAU,CAAC;YAChB,KAAK,EAAE,IAAI,CAAC,SAAS;YACrB,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE;YAC9B,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;SACjC,CAAC,CAAC;IACL,CAAC;IAEO,eAAe,CAAC,IAAqB;QAC3C,OAAO;YACL,GAAG,IAAI;YACP,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,UAAU,EAAE;gBAC1C,GAAG,IAAI,CAAC,OAAO;aAChB;SACF,CAAC;IACJ,CAAC;CACF"}
package/bin/http.d.ts ADDED
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Client 包 HTTP 基础设施。
3
+ *
4
+ * 这里集中处理 base URL 规范化、默认 fetch、JSON 请求和错误转换。
5
+ */
6
+ import type { FetchLike, FetchResponseLike, RequestInitLike } from "./types.js";
7
+ /**
8
+ * 去掉 base URL 末尾多余斜杠。
9
+ */
10
+ export declare function normalizeBaseURL(value: unknown, label: string): string;
11
+ /**
12
+ * 校验必填字符串。
13
+ */
14
+ export declare function requiredString(value: unknown, label: string): string;
15
+ /**
16
+ * 读取当前环境的全局 fetch。
17
+ */
18
+ export declare function defaultFetch(): FetchLike;
19
+ /**
20
+ * 发送 JSON 请求并解析响应。
21
+ */
22
+ export declare function requestJSON<T>(params: {
23
+ /**
24
+ * fetch 实现。
25
+ */
26
+ fetch: FetchLike;
27
+ /**
28
+ * 完整请求 URL。
29
+ */
30
+ url: string;
31
+ /**
32
+ * 请求参数。
33
+ */
34
+ init: RequestInitLike;
35
+ }): Promise<T>;
36
+ /**
37
+ * 发送请求并返回原始响应。
38
+ */
39
+ export declare function requestRaw(params: {
40
+ /**
41
+ * fetch 实现。
42
+ */
43
+ fetch: FetchLike;
44
+ /**
45
+ * 完整请求 URL。
46
+ */
47
+ url: string;
48
+ /**
49
+ * 请求参数。
50
+ */
51
+ init: RequestInitLike;
52
+ }): Promise<FetchResponseLike>;
53
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +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"}
package/bin/http.js ADDED
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Client 包 HTTP 基础设施。
3
+ *
4
+ * 这里集中处理 base URL 规范化、默认 fetch、JSON 请求和错误转换。
5
+ */
6
+ /**
7
+ * 去掉 base URL 末尾多余斜杠。
8
+ */
9
+ export function normalizeBaseURL(value, label) {
10
+ const url = requiredString(value, label);
11
+ return url.replace(/\/+$/, "");
12
+ }
13
+ /**
14
+ * 校验必填字符串。
15
+ */
16
+ export function requiredString(value, label) {
17
+ if (typeof value !== "string" || value.length === 0) {
18
+ throw new TypeError(`${label} must be a non-empty string`);
19
+ }
20
+ return value;
21
+ }
22
+ /**
23
+ * 读取当前环境的全局 fetch。
24
+ */
25
+ export function defaultFetch() {
26
+ if (typeof globalThis.fetch !== "function") {
27
+ throw new Error("fetch is required");
28
+ }
29
+ return async (url, init) => globalThis.fetch(url, init);
30
+ }
31
+ /**
32
+ * 发送 JSON 请求并解析响应。
33
+ */
34
+ export async function requestJSON(params) {
35
+ const response = await params.fetch(params.url, params.init);
36
+ if (!response.ok) {
37
+ throw await httpError(response);
38
+ }
39
+ return response.json();
40
+ }
41
+ /**
42
+ * 发送请求并返回原始响应。
43
+ */
44
+ export async function requestRaw(params) {
45
+ const response = await params.fetch(params.url, params.init);
46
+ if (!response.ok) {
47
+ throw await httpError(response);
48
+ }
49
+ return response;
50
+ }
51
+ async function httpError(response) {
52
+ const body = await response.text();
53
+ const error = new Error(`VisibleBase request failed with ${response.status}: ${body}`);
54
+ error.status = response.status;
55
+ error.body = body;
56
+ return error;
57
+ }
58
+ //# sourceMappingURL=http.js.map
@@ -0,0 +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"}
package/bin/index.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @visiblebase/client 公共入口。
3
+ *
4
+ * 导出终端用户客户端、管理端客户端和 SDK 公共类型。
5
+ */
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";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
package/bin/index.js ADDED
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @visiblebase/client 公共入口。
3
+ *
4
+ * 导出终端用户客户端、管理端客户端和 SDK 公共类型。
5
+ */
6
+ export { AdminClient, AdminEnvClient, AdminProductsClient, AdminUsersClient } from "./AdminClient.js";
7
+ export { UserClient } from "./UserClient.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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"}
package/bin/types.d.ts ADDED
@@ -0,0 +1,208 @@
1
+ /**
2
+ * @visiblebase/client 公共类型。
3
+ *
4
+ * 这里描述终端用户 SDK 与管理端 SDK 的输入输出,不包含任何请求实现。
5
+ */
6
+ /**
7
+ * fetch 返回对象的最小接口。
8
+ */
9
+ export interface FetchResponseLike {
10
+ /**
11
+ * HTTP 状态是否为 2xx。
12
+ */
13
+ ok: boolean;
14
+ /**
15
+ * HTTP 状态码。
16
+ */
17
+ status: number;
18
+ /**
19
+ * 流式响应体。
20
+ */
21
+ body?: unknown;
22
+ /**
23
+ * 读取 JSON 响应体。
24
+ */
25
+ json(): Promise<unknown>;
26
+ /**
27
+ * 读取文本响应体。
28
+ */
29
+ text(): Promise<string>;
30
+ }
31
+ /**
32
+ * SDK 使用的 fetch 函数签名。
33
+ */
34
+ export interface FetchLike {
35
+ /**
36
+ * 发起 HTTP 请求。
37
+ */
38
+ (url: string, init: RequestInitLike): Promise<FetchResponseLike>;
39
+ }
40
+ /**
41
+ * SDK 内部传给 fetch 的请求配置。
42
+ */
43
+ export interface RequestInitLike {
44
+ /**
45
+ * HTTP 方法。
46
+ */
47
+ method?: string;
48
+ /**
49
+ * HTTP 请求头。
50
+ */
51
+ headers?: Record<string, string>;
52
+ /**
53
+ * JSON 序列化后的请求体。
54
+ */
55
+ body?: string;
56
+ }
57
+ /**
58
+ * UserClient 构造参数。
59
+ */
60
+ export interface UserClientOptions {
61
+ /**
62
+ * VisibleBase Runtime 对终端用户开放的 base URL。
63
+ */
64
+ base_url: string;
65
+ /**
66
+ * 开发者后端签发给终端用户的 user_token。
67
+ */
68
+ user_token: string;
69
+ /**
70
+ * 自定义 fetch 实现,主要用于测试或特殊运行环境。
71
+ */
72
+ fetch?: FetchLike;
73
+ }
74
+ /**
75
+ * AdminClient 构造参数。
76
+ */
77
+ export interface AdminClientOptions {
78
+ /**
79
+ * VisibleBase Runtime 管理端 base URL。
80
+ */
81
+ base_url: string;
82
+ /**
83
+ * VisibleBase 管理密钥。
84
+ *
85
+ * 未传入时会读取 `process.env.VISIBLEBASE_ADMIN_SECRET_KEY`。
86
+ */
87
+ admin_secret_key?: string;
88
+ /**
89
+ * 自定义 fetch 实现,主要用于测试或特殊运行环境。
90
+ */
91
+ fetch?: FetchLike;
92
+ }
93
+ /**
94
+ * 管理端 env 记录。
95
+ */
96
+ export interface AdminEnvEntry {
97
+ /**
98
+ * 环境变量名。
99
+ */
100
+ key: string;
101
+ /**
102
+ * 环境变量明文值。
103
+ */
104
+ value: string;
105
+ /**
106
+ * env 值来源。
107
+ */
108
+ source: "dotenv";
109
+ }
110
+ /**
111
+ * 管理端签发 user_token 的输入。
112
+ */
113
+ export interface AdminTokenInput {
114
+ /**
115
+ * user_token 所属 product_id。
116
+ */
117
+ product_id: string;
118
+ /**
119
+ * 开发者系统里的终端用户 ID。
120
+ */
121
+ user_id: string;
122
+ /**
123
+ * 写入 user_token 的业务 metadata。
124
+ */
125
+ metadata?: Record<string, unknown>;
126
+ /**
127
+ * 该 token 的有效期。
128
+ */
129
+ ttl?: string | number;
130
+ }
131
+ /**
132
+ * Product 记录。
133
+ */
134
+ export interface AdminProduct {
135
+ /**
136
+ * Product ID。
137
+ */
138
+ product_id: string;
139
+ /**
140
+ * Product 展示名称。
141
+ */
142
+ name: string;
143
+ /**
144
+ * Product 当前状态。
145
+ */
146
+ status: "active" | "paused";
147
+ /**
148
+ * 创建时间。
149
+ */
150
+ created_at: string;
151
+ /**
152
+ * 更新时间。
153
+ */
154
+ updated_at: string;
155
+ }
156
+ /**
157
+ * 创建 product 的输入。
158
+ */
159
+ export interface AdminProductCreateInput {
160
+ /**
161
+ * Product 展示名称。
162
+ */
163
+ name: string;
164
+ }
165
+ /**
166
+ * Product ID 输入。
167
+ */
168
+ export interface AdminProductIdInput {
169
+ /**
170
+ * Product ID。
171
+ */
172
+ product_id: string;
173
+ }
174
+ /**
175
+ * 签发 user_token 的返回值。
176
+ */
177
+ export interface AdminUserTokenResult {
178
+ /**
179
+ * 可交给 UserClient 使用的 user_token。
180
+ */
181
+ user_token: string;
182
+ /**
183
+ * user_token 所属 product_id。
184
+ */
185
+ product_id: string;
186
+ /**
187
+ * user_token 所属 user_id。
188
+ */
189
+ user_id: string;
190
+ /**
191
+ * 过期时间;未设置 ttl 时为空。
192
+ */
193
+ expires_at?: string;
194
+ }
195
+ /**
196
+ * 写入 env 的输入。
197
+ */
198
+ export interface AdminEnvUpsertInput {
199
+ /**
200
+ * 环境变量名。
201
+ */
202
+ key: string;
203
+ /**
204
+ * 环境变量明文值。
205
+ */
206
+ value: string;
207
+ }
208
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,EAAE,EAAE,OAAO,CAAC;IAEZ;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEzB;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAClE;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnC;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAE5B;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;CACf"}
package/bin/types.js ADDED
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @visiblebase/client 公共类型。
3
+ *
4
+ * 这里描述终端用户 SDK 与管理端 SDK 的输入输出,不包含任何请求实现。
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@visiblebase/client",
3
+ "version": "0.1.0",
4
+ "description": "VisibleBase user and admin client SDK.",
5
+ "type": "module",
6
+ "main": "./bin/index.js",
7
+ "module": "./bin/index.js",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./bin/index.d.ts",
11
+ "import": "./bin/index.js"
12
+ }
13
+ },
14
+ "types": "./bin/index.d.ts",
15
+ "files": [
16
+ "bin"
17
+ ],
18
+ "publishConfig": {
19
+ "access": "public"
20
+ },
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "git+https://github.com/wangenius/visiblebase.git",
24
+ "directory": "packages/client"
25
+ },
26
+ "homepage": "https://github.com/wangenius/visiblebase#readme",
27
+ "bugs": {
28
+ "url": "https://github.com/wangenius/visiblebase/issues"
29
+ },
30
+ "keywords": [
31
+ "visiblebase",
32
+ "ai",
33
+ "sdk",
34
+ "client",
35
+ "serverbase"
36
+ ],
37
+ "scripts": {
38
+ "build": "tsc",
39
+ "dev": "tsc --watch",
40
+ "typecheck": "tsc --noEmit",
41
+ "test": "tsc && node --test test/*.test.mjs",
42
+ "prepack": "npm run build"
43
+ },
44
+ "license": "MIT",
45
+ "devDependencies": {
46
+ "typescript": "^5.7.0"
47
+ }
48
+ }