@lark-apaas/db-schema-sync 0.1.6-alpha.4 → 0.1.6-alpha.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/bin.js CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  __toESM,
7
7
  generateSchema,
8
8
  resolveEnvOptions
9
- } from "./chunk-5ZXUJ7KP.js";
9
+ } from "./chunk-SWKVIZTR.js";
10
10
 
11
11
  // node_modules/dotenv/package.json
12
12
  var require_package = __commonJS({
@@ -56,6 +56,7 @@ var require_dist = __commonJS({
56
56
  __export(index_exports, {
57
57
  DEFAULT_CLOCK_TOLERANCE_SEC: () => DEFAULT_CLOCK_TOLERANCE_SEC,
58
58
  DEFAULT_JWT_EXPIRE_TIME_MS: () => DEFAULT_JWT_EXPIRE_TIME_MS,
59
+ FileTokenProvider: () => FileTokenProvider,
59
60
  HttpClient: () => HttpClient2,
60
61
  HttpError: () => HttpError,
61
62
  generateJWTToken: () => generateJWTToken,
@@ -239,6 +240,77 @@ var require_dist = __commonJS({
239
240
  return this.token;
240
241
  }
241
242
  };
243
+ var import_fs = __require("fs");
244
+ var DEFAULT_REFRESH_BEFORE_MS = 5 * 60 * 1e3;
245
+ var DEFAULT_TOKEN_PATHS = [
246
+ "/home/gem/workspace/.force/openclaw/miaoda-provider-key"
247
+ ];
248
+ var FileTokenProvider = class {
249
+ cache = /* @__PURE__ */ new Map();
250
+ paths;
251
+ refreshBeforeMs;
252
+ constructor(config) {
253
+ this.paths = config?.paths ?? DEFAULT_TOKEN_PATHS;
254
+ this.refreshBeforeMs = config?.refreshBeforeMs ?? DEFAULT_REFRESH_BEFORE_MS;
255
+ }
256
+ /**
257
+ * 获取 token,按路径优先级依次尝试
258
+ *
259
+ * 1. 缓存有效且不在刷新窗口 → 直接返回
260
+ * 2. 进入刷新窗口 → 重读文件,更新缓存
261
+ * 3. 文件未更新但缓存未过期 → 仍返回旧缓存
262
+ * 4. 所有路径均无有效 token → 返回 null
263
+ */
264
+ getToken() {
265
+ const now = Date.now();
266
+ for (const filePath of this.paths) {
267
+ const cached = this.cache.get(filePath);
268
+ if (cached && cached.expiresAtMs - now > this.refreshBeforeMs) {
269
+ return { token: cached.token, accessKey: cached.accessKey };
270
+ }
271
+ const result = this.readAndParse(filePath);
272
+ if (result) {
273
+ this.cache.set(filePath, result);
274
+ if (result.expiresAtMs > now) {
275
+ return { token: result.token, accessKey: result.accessKey };
276
+ }
277
+ }
278
+ if (cached && cached.expiresAtMs > now) {
279
+ return { token: cached.token, accessKey: cached.accessKey };
280
+ }
281
+ }
282
+ return null;
283
+ }
284
+ clearCache() {
285
+ this.cache.clear();
286
+ }
287
+ readAndParse(filePath) {
288
+ try {
289
+ const token = (0, import_fs.readFileSync)(filePath, "utf-8").trim();
290
+ if (!token) return null;
291
+ const payload = this.decodePayload(token);
292
+ if (!payload?.exp) return null;
293
+ return {
294
+ token,
295
+ accessKey: payload.access_key ?? "",
296
+ expiresAtMs: payload.exp * 1e3
297
+ };
298
+ } catch {
299
+ return null;
300
+ }
301
+ }
302
+ decodePayload(token) {
303
+ try {
304
+ const segments = token.split(".");
305
+ if (segments.length !== 3) return null;
306
+ const padLength = (4 - (segments[1].length % 4 || 4)) % 4;
307
+ const padded = `${segments[1]}${"=".repeat(padLength)}`.replace(/-/g, "+").replace(/_/g, "/");
308
+ return JSON.parse(Buffer.from(padded, "base64").toString("utf8"));
309
+ } catch {
310
+ return null;
311
+ }
312
+ }
313
+ };
242
314
  var DEFAULT_DOMAIN_ENV = "FORCE_AUTHN_INNERAPI_DOMAIN";
243
315
  var DEFAULT_ACCESS_KEY_ENV = "FORCE_AUTHN_ACCESS_KEY";
244
316
  var DEFAULT_SECRET_KEY_ENV = "FORCE_AUTHN_ACCESS_SECRET";
@@ -265,6 +337,13 @@ var require_dist = __commonJS({
265
337
  return void 0;
266
338
  }
267
339
  ensureNoAccessKeyOverride("platform.defaultClaims", options.defaultClaims);
340
+ let fileTokenProvider;
341
+ if (options.tokenProvider?.type === "file") {
342
+ fileTokenProvider = new FileTokenProvider({
343
+ paths: options.tokenProvider.paths,
344
+ refreshBeforeMs: options.refreshBeforeMs
345
+ });
346
+ }
268
347
  const accessKeyEnv = options.accessKeyEnv || DEFAULT_ACCESS_KEY_ENV;
269
348
  const secretKeyEnv = options.secretKeyEnv || DEFAULT_SECRET_KEY_ENV;
270
349
  const accessKey = options.accessKey ?? (process.env[accessKeyEnv] || "");
@@ -279,10 +358,19 @@ var require_dist = __commonJS({
279
358
  const tokenEnv = options.tokenEnv || DEFAULT_TOKEN_ENV;
280
359
  const platformToken = options.token ?? (process.env[tokenEnv] || "");
281
360
  const staticTokenSource = platformToken ? new StaticTokenSource(platformToken) : null;
282
- const primaryTokenSource = staticTokenSource ?? tokenManager;
283
- const fallbackTokenSource = staticTokenSource ? tokenManager : null;
284
361
  const clientTokenEnv = options.clientTokenEnv || DEFAULT_CLIENT_TOKEN_ENV;
285
362
  interceptors.request.use((config) => {
363
+ if (fileTokenProvider) {
364
+ const fileToken = fileTokenProvider.getToken();
365
+ if (fileToken) {
366
+ const headers2 = {
367
+ ...config.headers,
368
+ "Authorization": `Bearer ${fileToken.token}`,
369
+ "x-api-key": fileToken.accessKey
370
+ };
371
+ return { ...config, headers: headers2 };
372
+ }
373
+ }
286
374
  ensureNoAccessKeyOverride("request.platformAuth.customClaims", config.platformAuth?.customClaims);
287
375
  const claims = {
288
376
  ...options.defaultClaims || {},
@@ -290,11 +378,14 @@ var require_dist = __commonJS({
290
378
  access_key: accessKey
291
379
  };
292
380
  let token;
293
- try {
294
- token = primaryTokenSource.getToken(claims);
295
- } catch (err) {
296
- if (!fallbackTokenSource) throw err;
297
- token = fallbackTokenSource.getToken(claims);
381
+ if (staticTokenSource) {
382
+ try {
383
+ token = staticTokenSource.getToken(claims);
384
+ } catch {
385
+ token = tokenManager.getToken(claims);
386
+ }
387
+ } else {
388
+ token = tokenManager.getToken(claims);
298
389
  }
299
390
  const headers = {
300
391
  ...config.headers,
@@ -1530,7 +1621,9 @@ var ImportCollector = class {
1530
1621
  };
1531
1622
 
1532
1623
  // src/generator/default-value.ts
1533
- function formatDefaultValue(value) {
1624
+ var CUSTOM_CAST_TYPES = /* @__PURE__ */ new Set(["user_profile", "file_attachment"]);
1625
+ var CURRENT_USER_SENTINEL = "current_user";
1626
+ function formatDefaultValue(value, field) {
1534
1627
  if (value == null || value === "") return "";
1535
1628
  const trimmed = value.trim();
1536
1629
  if (!trimmed || trimmed.toUpperCase() === "NULL") return "";
@@ -1539,6 +1632,12 @@ function formatDefaultValue(value) {
1539
1632
  if (trimmed === "true") return ".default(true)";
1540
1633
  if (trimmed === "false") return ".default(false)";
1541
1634
  if (/^-?\d+(\.\d+)?$/.test(trimmed)) return `.default(${trimmed})`;
1635
+ if (field && CUSTOM_CAST_TYPES.has(field.type) && !trimmed.includes("::") && trimmed.toLowerCase() !== CURRENT_USER_SENTINEL) {
1636
+ const pgLiteral = trimmed.replace(/'/g, "''");
1637
+ const escaped = pgLiteral.replace(/`/g, "\\`").replace(/\$\{/g, "\\${");
1638
+ const cast = field.isArray ? `${field.type}[]` : field.type;
1639
+ return `.default(sql\`'${escaped}'::${cast}\`)`;
1640
+ }
1542
1641
  if (/::|\(|CASE|current_setting/i.test(trimmed)) {
1543
1642
  const escaped = trimmed.replace(/`/g, "\\`").replace(/\$\{/g, "\\${");
1544
1643
  return `.default(sql\`${escaped}\`)`;
@@ -1567,7 +1666,7 @@ var defaultModifiers = [
1567
1666
  {
1568
1667
  name: "defaultValue",
1569
1668
  match: (f) => f.defaultValue != null && f.defaultValue !== "",
1570
- modify: (f) => formatDefaultValue(f.defaultValue)
1669
+ modify: (f) => formatDefaultValue(f.defaultValue, f)
1571
1670
  }
1572
1671
  ];
1573
1672
  function applyModifiers(field, modifiers) {
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  generateSchemaFromData,
6
6
  normalizeApiResponse,
7
7
  resolveEnvOptions
8
- } from "./chunk-5ZXUJ7KP.js";
8
+ } from "./chunk-SWKVIZTR.js";
9
9
  export {
10
10
  generateSchema,
11
11
  generateSchemaCode,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lark-apaas/db-schema-sync",
3
- "version": "0.1.6-alpha.4",
3
+ "version": "0.1.6-alpha.6",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -29,7 +29,7 @@
29
29
  "node": ">=18.0.0"
30
30
  },
31
31
  "dependencies": {
32
- "@lark-apaas/http-client": "0.1.7-alpha.9",
32
+ "@lark-apaas/http-client": "0.1.7-alpha.11",
33
33
  "dotenv": "^17.3.1",
34
34
  "tiny-pinyin": "^1.3.2"
35
35
  },