@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,192 @@
1
+ /**
2
+ * 通用工具模块。
3
+ *
4
+ * 提供 HTTP 工具函数、SQL 标识符引用、env key 校验等通用辅助。
5
+ * 所有错误统一抛 ErrorWithStatus,由 router 顶层的 try/catch 转成 JSON Response。
6
+ *
7
+ * 零运行时依赖,使用 Web Crypto API 替代 node:crypto。
8
+ */
9
+ // ===========================================================================
10
+ // JSON / Request 工具
11
+ // ===========================================================================
12
+ /**
13
+ * 从 Request body 中读取 JSON。
14
+ */
15
+ export async function readJSON(request) {
16
+ const text = await request.text();
17
+ return parseJSONText(text);
18
+ }
19
+ /**
20
+ * 从已读取的文本中解析 JSON。
21
+ */
22
+ export function parseJSONText(text) {
23
+ if (!text) {
24
+ return {};
25
+ }
26
+ return JSON.parse(text);
27
+ }
28
+ /**
29
+ * 读取 Bearer token。
30
+ */
31
+ export function bearerToken(request) {
32
+ const authorization = request.headers.get("authorization");
33
+ if (!authorization?.startsWith("Bearer ")) {
34
+ return undefined;
35
+ }
36
+ return authorization.slice("Bearer ".length);
37
+ }
38
+ /**
39
+ * 生成 JSON Response。
40
+ */
41
+ export function json(body, status = 200) {
42
+ return new Response(JSON.stringify(body), {
43
+ status,
44
+ headers: {
45
+ "content-type": "application/json",
46
+ },
47
+ });
48
+ }
49
+ /**
50
+ * 创建带 HTTP 状态码的错误。
51
+ */
52
+ export function httpError(statusCode, message) {
53
+ const error = new Error(message);
54
+ error.statusCode = statusCode;
55
+ return error;
56
+ }
57
+ /**
58
+ * 把 unknown 错误统一成 Error。
59
+ */
60
+ export function normalizeCaughtError(error) {
61
+ if (error instanceof Error) {
62
+ return error;
63
+ }
64
+ return new Error(String(error));
65
+ }
66
+ // ===========================================================================
67
+ // SQL 辅助
68
+ // ===========================================================================
69
+ /**
70
+ * SQL 标识符引用(双引号转义)。
71
+ *
72
+ * 用于动态拼接 SQL 时安全地引用表名、列名等标识符。
73
+ */
74
+ export function quoteIdent(value) {
75
+ return `"${value.replaceAll("\"", "\"\"")}"`;
76
+ }
77
+ // ===========================================================================
78
+ // Env 辅助
79
+ // ===========================================================================
80
+ /**
81
+ * 标准化 env key。
82
+ *
83
+ * 规则:转大写、去首尾空格;只允许 A-Z、0-9、_,且不能以数字开头。
84
+ */
85
+ export function normalizeEnvKey(value) {
86
+ const key = String(value || "").trim().toUpperCase();
87
+ if (!/^[A-Z_][A-Z0-9_]*$/.test(key)) {
88
+ throw new Error(`invalid env key: ${String(value || "")}`);
89
+ }
90
+ return key;
91
+ }
92
+ // ===========================================================================
93
+ // .env 文本解析
94
+ // ===========================================================================
95
+ /**
96
+ * 解析 .env 文本格式的环境变量(兼容 export 前缀)。
97
+ *
98
+ * 纯函数,零依赖,可在任何运行时使用。
99
+ *
100
+ * @param raw - .env 文本内容
101
+ * @returns 解析出的键值对数组
102
+ */
103
+ export function parseDotenvEntries(raw) {
104
+ const text = String(raw || "").replace(/^\uFEFF/, "").trim();
105
+ if (!text)
106
+ return [];
107
+ const entries = [];
108
+ const lines = text.split(/\r?\n/);
109
+ for (const line of lines) {
110
+ const trimmed = line.trim();
111
+ if (!trimmed || trimmed.startsWith("#"))
112
+ continue;
113
+ // 兼容用户从 shell 里复制 `export KEY=value` 的形式
114
+ const normalized = trimmed.replace(/^export\s+/, "");
115
+ const index = normalized.indexOf("=");
116
+ if (index < 1)
117
+ continue;
118
+ const key = normalizeEnvKey(normalized.slice(0, index));
119
+ const value = stripDotenvQuotes(normalized.slice(index + 1).trim());
120
+ entries.push({ key, value });
121
+ }
122
+ return entries;
123
+ }
124
+ /** 去掉 .env 值的引号包裹 */
125
+ function stripDotenvQuotes(value) {
126
+ if ((value.startsWith('"') && value.endsWith('"')) ||
127
+ (value.startsWith("'") && value.endsWith("'"))) {
128
+ return value.slice(1, -1);
129
+ }
130
+ return value;
131
+ }
132
+ // ===========================================================================
133
+ // 密钥生成
134
+ // ===========================================================================
135
+ /**
136
+ * 生成加密级随机字符串(base64url 编码)。
137
+ *
138
+ * 使用 Web Crypto API 的 crypto.getRandomValues,
139
+ * 兼容 Node.js、Cloudflare Workers、Deno、Bun、浏览器等所有现代运行时。
140
+ *
141
+ * @param size - 随机字节数,默认 32
142
+ */
143
+ export function randomSecret(size = 32) {
144
+ const bytes = crypto.getRandomValues(new Uint8Array(size));
145
+ return base64UrlEncodeBytes(bytes);
146
+ }
147
+ /**
148
+ * 将 Uint8Array 编码为 base64url 字符串。
149
+ *
150
+ * 与 Buffer.toString("base64url") 行为一致。
151
+ */
152
+ export function base64UrlEncodeBytes(bytes) {
153
+ const binary = Array.from(bytes, (b) => String.fromCharCode(b)).join("");
154
+ return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
155
+ }
156
+ /**
157
+ * 将 base64url 字符串解码为 Uint8Array。
158
+ *
159
+ * 与 Buffer.from(str, "base64url") 行为一致。
160
+ */
161
+ export function base64UrlDecodeBytes(str) {
162
+ const base64 = str.replace(/-/g, "+").replace(/_/g, "/");
163
+ const binary = atob(base64);
164
+ return Uint8Array.from(binary, (c) => c.charCodeAt(0));
165
+ }
166
+ /**
167
+ * 将字符串编码为 base64url。
168
+ */
169
+ export function base64UrlEncode(data) {
170
+ return base64UrlEncodeBytes(new TextEncoder().encode(data));
171
+ }
172
+ /**
173
+ * 将 base64url 字符串解码为 UTF-8 字符串。
174
+ */
175
+ export function base64UrlDecode(str) {
176
+ return new TextDecoder().decode(base64UrlDecodeBytes(str));
177
+ }
178
+ /**
179
+ * 时间安全的字节比较。
180
+ *
181
+ * 替代 node:crypto 的 timingSafeEqual,在所有运行时中行为一致。
182
+ */
183
+ export function timingSafeEqualBytes(a, b) {
184
+ if (a.byteLength !== b.byteLength)
185
+ return false;
186
+ let result = 0;
187
+ for (let i = 0; i < a.byteLength; i++) {
188
+ result |= a[i] ^ b[i];
189
+ }
190
+ return result === 0;
191
+ }
192
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Runtime 通用校验模块。
3
+ *
4
+ * 这个模块放只依赖 JavaScript 运行时的轻量校验函数,避免各业务模块互相复制。
5
+ */
6
+ /**
7
+ * 校验非空字符串。
8
+ */
9
+ export declare function assertName(value: unknown, label: string): asserts value is string;
10
+ /**
11
+ * 校验函数值。
12
+ */
13
+ export declare function assertFunction(value: unknown, label: string): asserts value is (...args: unknown[]) => unknown;
14
+ /**
15
+ * 深拷贝配置对象,避免外部继续修改已注册配置。
16
+ */
17
+ export declare function clone<T>(value: T): T;
18
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAIjF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAI9G;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAEpC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Runtime 通用校验模块。
3
+ *
4
+ * 这个模块放只依赖 JavaScript 运行时的轻量校验函数,避免各业务模块互相复制。
5
+ */
6
+ /**
7
+ * 校验非空字符串。
8
+ */
9
+ export function assertName(value, label) {
10
+ if (typeof value !== "string" || value.length === 0) {
11
+ throw new TypeError(`${label} must be a non-empty string`);
12
+ }
13
+ }
14
+ /**
15
+ * 校验函数值。
16
+ */
17
+ export function assertFunction(value, label) {
18
+ if (typeof value !== "function") {
19
+ throw new TypeError(`${label} must be a function`);
20
+ }
21
+ }
22
+ /**
23
+ * 深拷贝配置对象,避免外部继续修改已注册配置。
24
+ */
25
+ export function clone(value) {
26
+ return structuredClone(value);
27
+ }
28
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,KAAc,EAAE,KAAa;IACtD,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;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAc,EAAE,KAAa;IAC1D,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,qBAAqB,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAI,KAAQ;IAC/B,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@visiblebase/core",
3
+ "version": "0.2.0",
4
+ "description": "VisibleBase runtime-agnostic AI gateway core.",
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/core"
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
+ "runtime",
34
+ "gateway"
35
+ ],
36
+ "scripts": {
37
+ "build": "tsc",
38
+ "dev": "tsc --watch",
39
+ "typecheck": "tsc --noEmit && tsc -p tsconfig.test.json",
40
+ "test": "tsc && tsc -p tsconfig.test.json && node --test test/*.test.mjs",
41
+ "prepack": "npm run build"
42
+ },
43
+ "license": "MIT",
44
+ "devDependencies": {
45
+ "typescript": "^5.7.0"
46
+ },
47
+ "dependencies": {
48
+ "ai": "^6.0.168",
49
+ "drizzle-orm": "^0.45.2",
50
+ "hono": "^4.1.0"
51
+ }
52
+ }