@visiblebase/core 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/README.md +127 -0
  2. package/bin/core/auth/authenticator.d.ts +68 -0
  3. package/bin/core/auth/authenticator.d.ts.map +1 -0
  4. package/bin/core/auth/authenticator.js +106 -0
  5. package/bin/core/auth/authenticator.js.map +1 -0
  6. package/bin/core/auth/token-signer.d.ts +27 -0
  7. package/bin/core/auth/token-signer.d.ts.map +1 -0
  8. package/bin/core/auth/token-signer.js +116 -0
  9. package/bin/core/auth/token-signer.js.map +1 -0
  10. package/bin/core/auth/types.d.ts +94 -0
  11. package/bin/core/auth/types.d.ts.map +1 -0
  12. package/bin/core/auth/types.js +7 -0
  13. package/bin/core/auth/types.js.map +1 -0
  14. package/bin/core/base/base.d.ts +98 -0
  15. package/bin/core/base/base.d.ts.map +1 -0
  16. package/bin/core/base/base.js +281 -0
  17. package/bin/core/base/base.js.map +1 -0
  18. package/bin/core/runtime.d.ts +112 -0
  19. package/bin/core/runtime.d.ts.map +1 -0
  20. package/bin/core/runtime.js +19 -0
  21. package/bin/core/runtime.js.map +1 -0
  22. package/bin/core/types.d.ts +39 -0
  23. package/bin/core/types.d.ts.map +1 -0
  24. package/bin/core/types.js +7 -0
  25. package/bin/core/types.js.map +1 -0
  26. package/bin/index.d.ts +39 -0
  27. package/bin/index.d.ts.map +1 -0
  28. package/bin/index.js +45 -0
  29. package/bin/index.js.map +1 -0
  30. package/bin/service/ai/ai-service.d.ts +80 -0
  31. package/bin/service/ai/ai-service.d.ts.map +1 -0
  32. package/bin/service/ai/ai-service.js +184 -0
  33. package/bin/service/ai/ai-service.js.map +1 -0
  34. package/bin/service/ai/provider.d.ts +77 -0
  35. package/bin/service/ai/provider.d.ts.map +1 -0
  36. package/bin/service/ai/provider.js +71 -0
  37. package/bin/service/ai/provider.js.map +1 -0
  38. package/bin/service/ai/types.d.ts +72 -0
  39. package/bin/service/ai/types.d.ts.map +1 -0
  40. package/bin/service/ai/types.js +7 -0
  41. package/bin/service/ai/types.js.map +1 -0
  42. package/bin/service/env/env-service.d.ts +14 -0
  43. package/bin/service/env/env-service.d.ts.map +1 -0
  44. package/bin/service/env/env-service.js +42 -0
  45. package/bin/service/env/env-service.js.map +1 -0
  46. package/bin/service/env/env-store.d.ts +15 -0
  47. package/bin/service/env/env-store.d.ts.map +1 -0
  48. package/bin/service/env/env-store.js +35 -0
  49. package/bin/service/env/env-store.js.map +1 -0
  50. package/bin/service/env/schema.d.ts +171 -0
  51. package/bin/service/env/schema.d.ts.map +1 -0
  52. package/bin/service/env/schema.js +52 -0
  53. package/bin/service/env/schema.js.map +1 -0
  54. package/bin/service/env/types.d.ts +37 -0
  55. package/bin/service/env/types.d.ts.map +1 -0
  56. package/bin/service/env/types.js +8 -0
  57. package/bin/service/env/types.js.map +1 -0
  58. package/bin/service/hook.d.ts +20 -0
  59. package/bin/service/hook.d.ts.map +1 -0
  60. package/bin/service/hook.js +52 -0
  61. package/bin/service/hook.js.map +1 -0
  62. package/bin/service/plugin.d.ts +141 -0
  63. package/bin/service/plugin.d.ts.map +1 -0
  64. package/bin/service/plugin.js +124 -0
  65. package/bin/service/plugin.js.map +1 -0
  66. package/bin/service/products/product-store.d.ts +17 -0
  67. package/bin/service/products/product-store.d.ts.map +1 -0
  68. package/bin/service/products/product-store.js +49 -0
  69. package/bin/service/products/product-store.js.map +1 -0
  70. package/bin/service/products/products-service.d.ts +16 -0
  71. package/bin/service/products/products-service.d.ts.map +1 -0
  72. package/bin/service/products/products-service.js +52 -0
  73. package/bin/service/products/products-service.js.map +1 -0
  74. package/bin/service/products/schema.d.ts +207 -0
  75. package/bin/service/products/schema.d.ts.map +1 -0
  76. package/bin/service/products/schema.js +60 -0
  77. package/bin/service/products/schema.js.map +1 -0
  78. package/bin/service/products/types.d.ts +51 -0
  79. package/bin/service/products/types.d.ts.map +1 -0
  80. package/bin/service/products/types.js +7 -0
  81. package/bin/service/products/types.js.map +1 -0
  82. package/bin/service/service.d.ts +118 -0
  83. package/bin/service/service.d.ts.map +1 -0
  84. package/bin/service/service.js +114 -0
  85. package/bin/service/service.js.map +1 -0
  86. package/bin/service/types.d.ts +17 -0
  87. package/bin/service/types.d.ts.map +1 -0
  88. package/bin/service/types.js +5 -0
  89. package/bin/service/types.js.map +1 -0
  90. package/bin/store/db.d.ts +64 -0
  91. package/bin/store/db.d.ts.map +1 -0
  92. package/bin/store/db.js +28 -0
  93. package/bin/store/db.js.map +1 -0
  94. package/bin/store/table-api.d.ts +42 -0
  95. package/bin/store/table-api.d.ts.map +1 -0
  96. package/bin/store/table-api.js +98 -0
  97. package/bin/store/table-api.js.map +1 -0
  98. package/bin/store/types.d.ts +14 -0
  99. package/bin/store/types.d.ts.map +1 -0
  100. package/bin/store/types.js +7 -0
  101. package/bin/store/types.js.map +1 -0
  102. package/bin/utils/helpers.d.ts +101 -0
  103. package/bin/utils/helpers.d.ts.map +1 -0
  104. package/bin/utils/helpers.js +192 -0
  105. package/bin/utils/helpers.js.map +1 -0
  106. package/bin/utils/validation.d.ts +18 -0
  107. package/bin/utils/validation.d.ts.map +1 -0
  108. package/bin/utils/validation.js +28 -0
  109. package/bin/utils/validation.js.map +1 -0
  110. package/package.json +52 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/core/base/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAqC,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAChG,OAAO,EAAE,OAAO,EAA2C,MAAM,0BAA0B,CAAC;AAC5F,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAOpD,OAAO,QAAQ,MAAM,CAAC;IACpB,UAAU,kBAAkB;QAC1B,IAAI,CAAC,EAAE,WAAW,CAAC;QACnB,OAAO,CAAC,EAAE;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;KAClD;CACF;AAMD;;;;;GAKG;AACH,qBAAa,IAAI;IACf,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IAEvD,OAAO,CAAC,QAAQ,CAAC,CAAuC;IACxD,OAAO,CAAC,MAAM,CAAC,CAAoD;IACnE,OAAO,CAAC,QAAQ,CAAC,CAA4B;IAC7C,OAAO,CAAC,WAAW,CAAC,CAAgB;IACpC,OAAO,CAAC,IAAI,CAAC,CAAO;IACpB,OAAO,CAAC,aAAa,CAAC,CAAgB;gBAE1B,OAAO,EAAE,WAAW;IAWhC;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI;IAMpC,wBAAwB;IACxB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAI3C,uBAAuB;IACvB,WAAW,IAAI,OAAO,EAAE;IAQlB,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC;IAShD;;;;OAIG;IACG,KAAK,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxE,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAW9B;;;;;;;;;;;OAWG;IACH,MAAM,IAAI,IAAI;IAKd;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAKxD;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,gBAAgB,CAAC;YAgB3B,UAAU;IAsDxB,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,SAAS;YA8DH,WAAW;IAKzB,OAAO,CAAC,gBAAgB;YAIV,YAAY;CAK3B;AAED,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,CAAC"}
@@ -0,0 +1,281 @@
1
+ /**
2
+ * Base Runtime 主模块。
3
+ *
4
+ * Base 是运行时容器,只负责:Service 路由、鉴权、HTTP。
5
+ * 不知道任何具体 Service 的实现,所有 Service 通过 _onInit() 自初始化。
6
+ *
7
+ * 数据库连接、环境变量存储等运行时特定逻辑由 Runtime 适配器注入。
8
+ *
9
+ * 使用方式:
10
+ * ```ts
11
+ * import { Base } from "@visiblebase/core";
12
+ * import { node } from "@visiblebase/node";
13
+ *
14
+ * const base = new Base({ runtime: node({ database: "sqlite:./data.sqlite" }) });
15
+ * base.use(new AIService());
16
+ * // 路由始终是标准 Hono app
17
+ * serve({ fetch: base.router().fetch, port: 3000 });
18
+ * ```
19
+ */
20
+ import { Hono } from "hono";
21
+ import { executeDDL } from "../../store/db.js";
22
+ import { TableApi, buildCreateUserTableSQL } from "../../store/table-api.js";
23
+ import { serviceRouteFullPath } from "../../service/service.js";
24
+ import { asPlugin } from "../../service/plugin.js";
25
+ import { Authenticator } from "../auth/authenticator.js";
26
+ import { randomSecret, bearerToken } from "../../utils/helpers.js";
27
+ // ===========================================================================
28
+ // Base
29
+ // ===========================================================================
30
+ /**
31
+ * VisibleBase 运行时容器。
32
+ *
33
+ * 接收 Service 注册、构建 Hono 路由、管理初始化生命周期。
34
+ * 数据库和 env 通过 Runtime 适配器注入,不依赖任何特定运行时。
35
+ */
36
+ export class Base {
37
+ runtime;
38
+ services = new Map();
39
+ database;
40
+ client;
41
+ tableMap;
42
+ initPromise;
43
+ hono;
44
+ authenticator;
45
+ constructor(options) {
46
+ if (!options.runtime) {
47
+ throw new Error("Base requires a runtime adapter. Use @visiblebase/node or @visiblebase/serverless.");
48
+ }
49
+ this.runtime = options.runtime;
50
+ }
51
+ // ===========================================================================
52
+ // Service 注册
53
+ // ===========================================================================
54
+ /**
55
+ * 注册一个 Service。
56
+ *
57
+ * Service 在 Base 初始化时自动获得数据库、鉴权器、env 等基础设施。
58
+ */
59
+ use(svc) {
60
+ const service = "install" in svc && !("get" in svc) ? asPlugin(svc) : svc;
61
+ this.services.set(service.id, service);
62
+ return this;
63
+ }
64
+ /** 获取指定 ID 的 Service */
65
+ getService(id) {
66
+ return this.services.get(id);
67
+ }
68
+ /** 获取所有已注册的 Service */
69
+ getServices() {
70
+ return [...this.services.values()];
71
+ }
72
+ // ===========================================================================
73
+ // 鉴权器
74
+ // ===========================================================================
75
+ async getAuthenticator() {
76
+ await this.ensureReady();
77
+ return this.authenticator;
78
+ }
79
+ // ===========================================================================
80
+ // 表操作
81
+ // ===========================================================================
82
+ /**
83
+ * 获取指定名称的数据库表 API。
84
+ *
85
+ * @param name - 表名(格式为 "service_id.table_name" 或内置表名)
86
+ */
87
+ async table(name) {
88
+ await this.ensureReady();
89
+ const api = this.tableMap.get(name);
90
+ if (!api)
91
+ throw new Error(`Unknown schema table: ${name}`);
92
+ return api;
93
+ }
94
+ // ===========================================================================
95
+ // HTTP
96
+ // ===========================================================================
97
+ /**
98
+ * 获取 Hono 路由实例(需先完成初始化)。
99
+ *
100
+ * 路由可以直接挂载到任何支持 fetch 的 HTTP 服务器:
101
+ * ```ts
102
+ * // Node.js
103
+ * serve({ fetch: base.router().fetch, port: 3000 });
104
+ *
105
+ * // Cloudflare Workers
106
+ * export default { fetch: base.router().fetch };
107
+ * ```
108
+ */
109
+ router() {
110
+ this.requireReadySync();
111
+ return this.hono;
112
+ }
113
+ /**
114
+ * 直接处理一个 Request(用于 Serverless 场景)。
115
+ */
116
+ async handleRequest(request) {
117
+ await this.ensureReady();
118
+ return this.hono.fetch(request);
119
+ }
120
+ /**
121
+ * 健康检查。
122
+ */
123
+ async health() {
124
+ await this.ensureReady();
125
+ const services = this.getServices();
126
+ return {
127
+ ok: true,
128
+ name: "visiblebase",
129
+ checked_at: new Date().toISOString(),
130
+ services: services.map((s) => s.id),
131
+ service_list: services.map((s) => ({ id: s.id, name: s.name })),
132
+ };
133
+ }
134
+ // ===========================================================================
135
+ // 初始化(完全通用,不知道任何具体 Service)
136
+ // ===========================================================================
137
+ async initialize() {
138
+ const { database, client, env, builtinTables } = this.runtime;
139
+ this.database = database;
140
+ this.client = { $client: client };
141
+ // 1. 收集所有 Service 的 tables + 内置表
142
+ const userSchema = this.collectServiceSchemas();
143
+ // 2. 创建 TableApi(内置表 + 用户表)
144
+ this.tableMap = new Map();
145
+ // 内置表
146
+ this.tableMap.set("products", new TableApi(database, builtinTables.products));
147
+ this.tableMap.set("env", new TableApi(database, builtinTables.env));
148
+ // 用户表(scoped: "service_id.table_name")
149
+ for (const [name, table] of Object.entries(userSchema)) {
150
+ this.tableMap.set(name, new TableApi(database, table));
151
+ }
152
+ // 3. 执行 DDL
153
+ for (const t of this.tableMap.values()) {
154
+ const ddl = buildCreateUserTableSQL(t.schema);
155
+ if (ddl)
156
+ await executeDDL(this.client, ddl);
157
+ }
158
+ // 4. Bootstrap 默认密钥(如果 EnvProvider 支持持久化)
159
+ await bootstrapDefaultKeys(env);
160
+ // 5. 关联 EnvStore 到 EnvProvider(数据库中的值优先级更高)
161
+ if (env.attachStore) {
162
+ const envStoreModule = await import("../../service/env/env-store.js");
163
+ const envTable = this.tableMap.get("env");
164
+ const store = new envStoreModule.EnvStore(envTable);
165
+ await env.attachStore(store);
166
+ }
167
+ // 6. 创建鉴权器
168
+ this.authenticator = new Authenticator(env, () => this.requireReady());
169
+ // 7. 设置 Service 基础设施 + 调用 _onInit
170
+ for (const svc of this.services.values()) {
171
+ svc._db = database;
172
+ svc._client = this.client;
173
+ svc._authenticator = this.authenticator;
174
+ svc._env = env;
175
+ await svc._onInit();
176
+ }
177
+ // 8. 构建 Hono 路由
178
+ this.hono = this.buildHono();
179
+ }
180
+ collectServiceSchemas() {
181
+ const collected = {};
182
+ for (const svc of this.services.values()) {
183
+ if (!svc.tables)
184
+ continue;
185
+ for (const [name, table] of Object.entries(svc.tables)) {
186
+ const scopedName = `${svc.id}.${name}`;
187
+ if (collected[scopedName]) {
188
+ throw new Error(`Duplicate schema table "${scopedName}" from services: ${svc.id}`);
189
+ }
190
+ collected[scopedName] = table;
191
+ }
192
+ }
193
+ return collected;
194
+ }
195
+ buildHono() {
196
+ const app = new Hono();
197
+ app.get("/health", (c) => {
198
+ const services = this.getServices();
199
+ return c.json({
200
+ ok: true,
201
+ name: "visiblebase",
202
+ checked_at: new Date().toISOString(),
203
+ services: services.map((s) => s.id),
204
+ service_list: services.map((s) => ({ id: s.id, name: s.name })),
205
+ });
206
+ });
207
+ app.use("/api/admin/*", async (c, next) => {
208
+ await this.authenticator.authenticate(c.req.raw, "admin");
209
+ await next();
210
+ });
211
+ app.use("/v1/*", async (c, next) => {
212
+ const token = bearerToken(c.req.raw);
213
+ if (token) {
214
+ const result = await this.authenticator.authenticate(c.req.raw, "user");
215
+ c.set("user", result.user);
216
+ c.set("product", result.product);
217
+ }
218
+ await next();
219
+ });
220
+ app.get("/v1/services", (c) => c.json({ items: this.getServices().map((s) => s.id) }));
221
+ for (const svc of this.services.values()) {
222
+ for (const route of svc._listRoutes()) {
223
+ const fullPath = serviceRouteFullPath(svc.id, route);
224
+ app.on(route.method, fullPath, async (c) => {
225
+ const ctx = {
226
+ request: c.req.raw,
227
+ url: new URL(c.req.url),
228
+ service_id: svc.id,
229
+ route,
230
+ user: c.get("user"),
231
+ product: c.get("product"),
232
+ json: () => c.req.json(),
233
+ text: () => c.req.text(),
234
+ jsonResponse: (body, status) => c.json(body, status),
235
+ table: async (name) => this.tableMap.get(`${svc.id}.${name}`),
236
+ env: (key) => this.runtime.env.get(key),
237
+ };
238
+ return route.handler(ctx);
239
+ });
240
+ }
241
+ }
242
+ return app;
243
+ }
244
+ // ===========================================================================
245
+ // 内部辅助
246
+ // ===========================================================================
247
+ async ensureReady() {
248
+ if (!this.initPromise)
249
+ this.initPromise = this.initialize();
250
+ await this.initPromise;
251
+ }
252
+ requireReadySync() {
253
+ if (!this.hono)
254
+ throw new Error("Base init has not completed yet");
255
+ }
256
+ async requireReady() {
257
+ await this.ensureReady();
258
+ const products = this.services.get("products");
259
+ return { product: products?.store ?? { get: () => Promise.resolve(undefined) } };
260
+ }
261
+ }
262
+ export { Base as VisibleBase };
263
+ // ===========================================================================
264
+ // 默认密钥 Bootstrap
265
+ // ===========================================================================
266
+ /**
267
+ * 自动生成 Base 必需的默认密钥(ADMIN_SECRET_KEY、TOKEN_SIGNING_KEY)。
268
+ *
269
+ * 仅在 .env / Secrets 中没有对应值时才生成,降低首次启动配置成本。
270
+ */
271
+ async function bootstrapDefaultKeys(env) {
272
+ const ADMIN_SECRET_KEY = "VISIBLEBASE_ADMIN_SECRET_KEY";
273
+ const TOKEN_SIGNING_KEY = "VISIBLEBASE_TOKEN_SIGNING_KEY";
274
+ if (!env.get(ADMIN_SECRET_KEY)) {
275
+ await env.upsert({ key: ADMIN_SECRET_KEY, value: `admin_${randomSecret()}` });
276
+ }
277
+ if (!env.get(TOKEN_SIGNING_KEY)) {
278
+ await env.upsert({ key: TOKEN_SIGNING_KEY, value: `sign_${randomSecret()}` });
279
+ }
280
+ }
281
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/core/base/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Runtime 适配器接口模块。
3
+ *
4
+ * 定义 Base 依赖的运行时抽象:数据库连接 + 环境变量存储 + 内置表。
5
+ * 每个运行时(Node.js、Cloudflare Workers、Deno 等)提供各自的实现。
6
+ *
7
+ * 使用示例:
8
+ * ```ts
9
+ * // Node.js
10
+ * import { node } from "@visiblebase/node";
11
+ * const base = new Base({ runtime: node({ database: "sqlite:./data.sqlite" }) });
12
+ *
13
+ * // Cloudflare Workers
14
+ * import { serverless } from "@visiblebase/serverless";
15
+ * const base = new Base({ runtime: serverless({ database: env.DB }) });
16
+ * ```
17
+ */
18
+ import type { Database, DbClient } from "../store/db.js";
19
+ import type { EnvEntry, EnvUpsertInput } from "../service/env/types.js";
20
+ import type { EnvStore } from "../service/env/env-store.js";
21
+ import type { AnySQLiteTable } from "drizzle-orm/sqlite-core";
22
+ import type { AnyPgTable } from "drizzle-orm/pg-core";
23
+ /** 表定义类型(SQLite 或 Postgres) */
24
+ export type TableDef = AnySQLiteTable | AnyPgTable;
25
+ /**
26
+ * 环境变量提供者接口。
27
+ *
28
+ * Base 通过此接口读取/写入运行时环境变量,
29
+ * 不关心底层存储是 .env 文件、Worker Secrets 还是数据库。
30
+ */
31
+ export interface EnvProvider {
32
+ /**
33
+ * 读取单个环境变量。
34
+ *
35
+ * @param key - 环境变量名(会自动标准化)
36
+ */
37
+ get(key: string): string | undefined;
38
+ /**
39
+ * 列出所有环境变量(含来源信息)。
40
+ */
41
+ list(): EnvEntry[] | Promise<EnvEntry[]>;
42
+ /**
43
+ * 写入或更新环境变量。
44
+ *
45
+ * @param input - 环境变量键值
46
+ */
47
+ upsert(input: EnvUpsertInput): Promise<EnvEntry>;
48
+ /**
49
+ * 删除环境变量。
50
+ *
51
+ * @param key - 环境变量名
52
+ */
53
+ remove(key: string): Promise<void>;
54
+ /**
55
+ * 批量导入环境变量文本(.env 格式)。
56
+ *
57
+ * @param raw - .env 文本内容
58
+ */
59
+ import(raw: unknown): Promise<EnvEntry[]>;
60
+ /**
61
+ * 关联数据库存储(可选)。
62
+ *
63
+ * 当 Base 初始化数据库后调用,允许 EnvProvider 将值持久化到数据库。
64
+ * 数据库中的值优先级高于运行时源(如 .env 文件)。
65
+ *
66
+ * @param store - 数据库 Env 存储实例
67
+ */
68
+ attachStore?(store: EnvStore): Promise<void>;
69
+ }
70
+ /**
71
+ * Base 内置表定义。
72
+ *
73
+ * 包含 products 和 env 两个内置表。
74
+ * 适配器根据数据库类型(SQLite / Postgres)提供对应的表定义。
75
+ */
76
+ export interface BuiltinTables {
77
+ /** 产品表 */
78
+ products: TableDef;
79
+ /** 环境变量表 */
80
+ env: TableDef;
81
+ }
82
+ /**
83
+ * 运行时适配器接口。
84
+ *
85
+ * 封装 Base 需要的所有运行时特定依赖。
86
+ * 每个平台(Node.js、Cloudflare Workers 等)提供自己的 Runtime 实现。
87
+ */
88
+ export interface Runtime {
89
+ /**
90
+ * 数据库实例(Drizzle Database 接口)。
91
+ *
92
+ * 用于 Service 的 CRUD 操作。
93
+ */
94
+ database: Database;
95
+ /**
96
+ * 底层数据库客户端(用于 DDL 执行)。
97
+ */
98
+ client: DbClient;
99
+ /**
100
+ * 环境变量提供者。
101
+ *
102
+ * 用于读取密钥、API key 等配置。
103
+ */
104
+ env: EnvProvider;
105
+ /**
106
+ * Base 内置表定义(products + env)。
107
+ *
108
+ * 适配器根据数据库类型提供正确的 Drizzle 表定义。
109
+ */
110
+ builtinTables: BuiltinTables;
111
+ }
112
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/core/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,+BAA+B;AAC/B,MAAM,MAAM,QAAQ,GAAG,cAAc,GAAG,UAAU,CAAC;AAMnD;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAErC;;OAEG;IACH,IAAI,IAAI,QAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEzC;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEjD;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE1C;;;;;;;OAOG;IACH,WAAW,CAAC,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C;AAMD;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU;IACV,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY;IACZ,GAAG,EAAE,QAAQ,CAAC;CACf;AAMD;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACtB;;;;OAIG;IACH,QAAQ,EAAE,QAAQ,CAAC;IAEnB;;OAEG;IACH,MAAM,EAAE,QAAQ,CAAC;IAEjB;;;;OAIG;IACH,GAAG,EAAE,WAAW,CAAC;IAEjB;;;;OAIG;IACH,aAAa,EAAE,aAAa,CAAC;CAC9B"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Runtime 适配器接口模块。
3
+ *
4
+ * 定义 Base 依赖的运行时抽象:数据库连接 + 环境变量存储 + 内置表。
5
+ * 每个运行时(Node.js、Cloudflare Workers、Deno 等)提供各自的实现。
6
+ *
7
+ * 使用示例:
8
+ * ```ts
9
+ * // Node.js
10
+ * import { node } from "@visiblebase/node";
11
+ * const base = new Base({ runtime: node({ database: "sqlite:./data.sqlite" }) });
12
+ *
13
+ * // Cloudflare Workers
14
+ * import { serverless } from "@visiblebase/serverless";
15
+ * const base = new Base({ runtime: serverless({ database: env.DB }) });
16
+ * ```
17
+ */
18
+ export {};
19
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/core/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Base Runtime 配置类型模块。
3
+ *
4
+ * 包含创建 Base 实例和健康检查所需的所有类型定义。
5
+ */
6
+ import type { Runtime } from "./runtime.js";
7
+ /**
8
+ * Base 健康检查结果。
9
+ */
10
+ export interface BaseHealthStatus {
11
+ /** 当前 Runtime 是否已经完成初始化并可处理请求 */
12
+ ok: boolean;
13
+ /** 服务名称,用于外部探测确认命中的服务类型 */
14
+ name: string;
15
+ /** 健康检查响应时间 */
16
+ checked_at: string;
17
+ /** 当前注册的 service ID 列表 */
18
+ services: string[];
19
+ /** 当前启用的 service 信息列表 */
20
+ service_list: {
21
+ id: string;
22
+ name: string;
23
+ }[];
24
+ }
25
+ /**
26
+ * 创建 Base 实例时传入的顶层配置。
27
+ *
28
+ * 必须传入 Runtime 适配器,数据库和 env 存储由适配器提供。
29
+ */
30
+ export interface BaseOptions {
31
+ /**
32
+ * 运行时适配器。
33
+ *
34
+ * 提供数据库连接、环境变量存储、内置表定义。
35
+ * 使用 @visiblebase/node 或 @visiblebase/serverless 创建。
36
+ */
37
+ runtime: Runtime;
38
+ }
39
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iCAAiC;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,eAAe;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,yBAAyB;IACzB,YAAY,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC9C;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Base Runtime 配置类型模块。
3
+ *
4
+ * 包含创建 Base 实例和健康检查所需的所有类型定义。
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
package/bin/index.d.ts ADDED
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @visiblebase/core 公共入口。
3
+ *
4
+ * 按使用场景组织导出,方便开发者按需查找。
5
+ *
6
+ * 使用方式:
7
+ * ```ts
8
+ * import { Base, Service, AIService, type Context } from "@visiblebase/core";
9
+ * import { node } from "@visiblebase/node";
10
+ *
11
+ * const base = new Base({ runtime: node({ database: "sqlite:./data.sqlite" }) });
12
+ * ```
13
+ */
14
+ export { Base, VisibleBase } from "./core/base/base.js";
15
+ export type { BaseOptions, BaseHealthStatus } from "./core/types.js";
16
+ export type { Runtime, EnvProvider, BuiltinTables, TableDef } from "./core/runtime.js";
17
+ export { Service } from "./service/service.js";
18
+ export { Plugin } from "./service/plugin.js";
19
+ export type { Context, Handler, RouteAuth, EnvRequirement, } from "./service/service.js";
20
+ export type { BasePlugin, BasePluginContext, PluginRouteContext, ServiceContext, } from "./service/plugin.js";
21
+ export { AIService } from "./service/ai/ai-service.js";
22
+ export { Provider } from "./service/ai/provider.js";
23
+ export type { ModelConfig, ModelHandlers, PublicModel, } from "./service/ai/types.js";
24
+ export type { HookFn, ServiceHandler, } from "./service/types.js";
25
+ export { TokenSigner } from "./core/auth/token-signer.js";
26
+ export type { RuntimeUser, CreateUserTokenInput, UserTokenPayload, UserTokenIssueResult, } from "./core/auth/types.js";
27
+ export { EnvService } from "./service/env/env-service.js";
28
+ export type { EnvEntry, EnvUpsertInput } from "./service/env/types.js";
29
+ export { EnvStore } from "./service/env/env-store.js";
30
+ export { ProductsService } from "./service/products/products-service.js";
31
+ export type { Product, ProductCreateInput, ProductStatus } from "./service/products/types.js";
32
+ export type { Database, DbClient } from "./store/db.js";
33
+ export { executeDDL } from "./store/db.js";
34
+ export type { BaseTableApi } from "./store/table-api.js";
35
+ export type { BaseUserSchemaInput } from "./store/types.js";
36
+ export { sqliteProducts, pgProducts } from "./service/products/schema.js";
37
+ export { sqliteEnv, pgEnv } from "./service/env/schema.js";
38
+ export { randomSecret, base64UrlEncode, base64UrlDecode, base64UrlEncodeBytes, base64UrlDecodeBytes, timingSafeEqualBytes, httpError, normalizeEnvKey, bearerToken, parseDotenvEntries, } from "./utils/helpers.js";
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAExD,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAErE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAMvF,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,YAAY,EACV,OAAO,EACP,OAAO,EACP,SAAS,EACT,cAAc,GACf,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,GACf,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,YAAY,EACV,WAAW,EACX,aAAa,EACb,WAAW,GACZ,MAAM,uBAAuB,CAAC;AAM/B,YAAY,EACV,MAAM,EACN,cAAc,GACf,MAAM,oBAAoB,CAAC;AAM5B,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACzE,YAAY,EAAE,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAM9F,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAM5D,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAM3D,OAAO,EACL,YAAY,EACZ,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,SAAS,EACT,eAAe,EACf,WAAW,EACX,kBAAkB,GACnB,MAAM,oBAAoB,CAAC"}
package/bin/index.js ADDED
@@ -0,0 +1,45 @@
1
+ /**
2
+ * @visiblebase/core 公共入口。
3
+ *
4
+ * 按使用场景组织导出,方便开发者按需查找。
5
+ *
6
+ * 使用方式:
7
+ * ```ts
8
+ * import { Base, Service, AIService, type Context } from "@visiblebase/core";
9
+ * import { node } from "@visiblebase/node";
10
+ *
11
+ * const base = new Base({ runtime: node({ database: "sqlite:./data.sqlite" }) });
12
+ * ```
13
+ */
14
+ // ===========================================================================
15
+ // 场景 1:创建 Base 实例
16
+ // ===========================================================================
17
+ export { Base, VisibleBase } from "./core/base/base.js";
18
+ // ===========================================================================
19
+ // 场景 2:注册 Service / Plugin / AI 模型
20
+ // ===========================================================================
21
+ export { Service } from "./service/service.js";
22
+ export { Plugin } from "./service/plugin.js";
23
+ export { AIService } from "./service/ai/ai-service.js";
24
+ export { Provider } from "./service/ai/provider.js";
25
+ // ===========================================================================
26
+ // 场景 4:用户鉴权与 Token
27
+ // ===========================================================================
28
+ export { TokenSigner } from "./core/auth/token-signer.js";
29
+ // ===========================================================================
30
+ // 场景 5:管理 Product 与环境变量(内置 Service)
31
+ // ===========================================================================
32
+ export { EnvService } from "./service/env/env-service.js";
33
+ export { EnvStore } from "./service/env/env-store.js";
34
+ export { ProductsService } from "./service/products/products-service.js";
35
+ export { executeDDL } from "./store/db.js";
36
+ // ===========================================================================
37
+ // 场景 7:内置表 Schema(供 Runtime 适配器使用)
38
+ // ===========================================================================
39
+ export { sqliteProducts, pgProducts } from "./service/products/schema.js";
40
+ export { sqliteEnv, pgEnv } from "./service/env/schema.js";
41
+ // ===========================================================================
42
+ // 场景 8:工具函数
43
+ // ===========================================================================
44
+ export { randomSecret, base64UrlEncode, base64UrlDecode, base64UrlEncodeBytes, base64UrlDecodeBytes, timingSafeEqualBytes, httpError, normalizeEnvKey, bearerToken, parseDotenvEntries, } from "./utils/helpers.js";
45
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAMxD,8EAA8E;AAC9E,mCAAmC;AACnC,8EAA8E;AAE9E,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAgB7C,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAiBpD,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAS1D,8EAA8E;AAC9E,oCAAoC;AACpC,8EAA8E;AAE9E,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAQzE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAI3C,8EAA8E;AAC9E,mCAAmC;AACnC,8EAA8E;AAE9E,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAE3D,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,OAAO,EACL,YAAY,EACZ,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,SAAS,EACT,eAAe,EACf,WAAW,EACX,kBAAkB,GACnB,MAAM,oBAAoB,CAAC"}