@lark-apaas/db-schema-sync 0.1.6-alpha.4 → 0.1.6-alpha.5
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 +1 -1
- package/dist/{chunk-5ZXUJ7KP.js → chunk-PV4EVRKJ.js} +97 -22
- package/dist/index.js +1 -1
- package/package.json +2 -2
package/dist/bin.js
CHANGED
|
@@ -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,
|
|
@@ -228,21 +229,80 @@ var require_dist = __commonJS({
|
|
|
228
229
|
};
|
|
229
230
|
}
|
|
230
231
|
};
|
|
231
|
-
var
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
232
|
+
var import_fs = __require("fs");
|
|
233
|
+
var DEFAULT_REFRESH_BEFORE_MS = 5 * 60 * 1e3;
|
|
234
|
+
var DEFAULT_TOKEN_PATHS = [
|
|
235
|
+
"/home/gem/workspace/.force/openclaw/miaoda-provider-key"
|
|
236
|
+
];
|
|
237
|
+
var FileTokenProvider = class {
|
|
238
|
+
cache = /* @__PURE__ */ new Map();
|
|
239
|
+
paths;
|
|
240
|
+
refreshBeforeMs;
|
|
241
|
+
constructor(config) {
|
|
242
|
+
this.paths = config?.paths ?? DEFAULT_TOKEN_PATHS;
|
|
243
|
+
this.refreshBeforeMs = config?.refreshBeforeMs ?? DEFAULT_REFRESH_BEFORE_MS;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* 获取 token,按路径优先级依次尝试
|
|
247
|
+
*
|
|
248
|
+
* 1. 缓存有效且不在刷新窗口 → 直接返回
|
|
249
|
+
* 2. 进入刷新窗口 → 重读文件,更新缓存
|
|
250
|
+
* 3. 文件未更新但缓存未过期 → 仍返回旧缓存
|
|
251
|
+
* 4. 所有路径均无有效 token → 返回 null
|
|
252
|
+
*/
|
|
253
|
+
getToken() {
|
|
254
|
+
const now = Date.now();
|
|
255
|
+
for (const filePath of this.paths) {
|
|
256
|
+
const cached = this.cache.get(filePath);
|
|
257
|
+
if (cached && cached.expiresAtMs - now > this.refreshBeforeMs) {
|
|
258
|
+
return { token: cached.token, accessKey: cached.accessKey };
|
|
259
|
+
}
|
|
260
|
+
const result = this.readAndParse(filePath);
|
|
261
|
+
if (result) {
|
|
262
|
+
this.cache.set(filePath, result);
|
|
263
|
+
if (result.expiresAtMs > now) {
|
|
264
|
+
return { token: result.token, accessKey: result.accessKey };
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
if (cached && cached.expiresAtMs > now) {
|
|
268
|
+
return { token: cached.token, accessKey: cached.accessKey };
|
|
269
|
+
}
|
|
236
270
|
}
|
|
271
|
+
return null;
|
|
237
272
|
}
|
|
238
|
-
|
|
239
|
-
|
|
273
|
+
clearCache() {
|
|
274
|
+
this.cache.clear();
|
|
275
|
+
}
|
|
276
|
+
readAndParse(filePath) {
|
|
277
|
+
try {
|
|
278
|
+
const token = (0, import_fs.readFileSync)(filePath, "utf-8").trim();
|
|
279
|
+
if (!token) return null;
|
|
280
|
+
const payload = this.decodePayload(token);
|
|
281
|
+
if (!payload?.exp) return null;
|
|
282
|
+
return {
|
|
283
|
+
token,
|
|
284
|
+
accessKey: payload.access_key ?? "",
|
|
285
|
+
expiresAtMs: payload.exp * 1e3
|
|
286
|
+
};
|
|
287
|
+
} catch {
|
|
288
|
+
return null;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
decodePayload(token) {
|
|
292
|
+
try {
|
|
293
|
+
const segments = token.split(".");
|
|
294
|
+
if (segments.length !== 3) return null;
|
|
295
|
+
const padLength = (4 - (segments[1].length % 4 || 4)) % 4;
|
|
296
|
+
const padded = `${segments[1]}${"=".repeat(padLength)}`.replace(/-/g, "+").replace(/_/g, "/");
|
|
297
|
+
return JSON.parse(Buffer.from(padded, "base64").toString("utf8"));
|
|
298
|
+
} catch {
|
|
299
|
+
return null;
|
|
300
|
+
}
|
|
240
301
|
}
|
|
241
302
|
};
|
|
242
303
|
var DEFAULT_DOMAIN_ENV = "FORCE_AUTHN_INNERAPI_DOMAIN";
|
|
243
304
|
var DEFAULT_ACCESS_KEY_ENV = "FORCE_AUTHN_ACCESS_KEY";
|
|
244
305
|
var DEFAULT_SECRET_KEY_ENV = "FORCE_AUTHN_ACCESS_SECRET";
|
|
245
|
-
var DEFAULT_TOKEN_ENV = "FORCE_AUTHN_TOKEN";
|
|
246
306
|
var DEFAULT_ADMIN_DOMAIN_ENV = "MIAODA_DEV_INNER_DOMAIN_WITH_PREFIX";
|
|
247
307
|
var DEFAULT_CLIENT_TOKEN_ENV = "MIAODA_AUTHN_CODE";
|
|
248
308
|
var MIAODA_CLIENT_TOKEN_HEADER = "X-Miaoda-Client-Token";
|
|
@@ -265,6 +325,13 @@ var require_dist = __commonJS({
|
|
|
265
325
|
return void 0;
|
|
266
326
|
}
|
|
267
327
|
ensureNoAccessKeyOverride("platform.defaultClaims", options.defaultClaims);
|
|
328
|
+
let fileTokenProvider;
|
|
329
|
+
if (options.tokenProvider?.type === "file") {
|
|
330
|
+
fileTokenProvider = new FileTokenProvider({
|
|
331
|
+
paths: options.tokenProvider.paths,
|
|
332
|
+
refreshBeforeMs: options.refreshBeforeMs
|
|
333
|
+
});
|
|
334
|
+
}
|
|
268
335
|
const accessKeyEnv = options.accessKeyEnv || DEFAULT_ACCESS_KEY_ENV;
|
|
269
336
|
const secretKeyEnv = options.secretKeyEnv || DEFAULT_SECRET_KEY_ENV;
|
|
270
337
|
const accessKey = options.accessKey ?? (process.env[accessKeyEnv] || "");
|
|
@@ -276,26 +343,26 @@ var require_dist = __commonJS({
|
|
|
276
343
|
expireTimeMs,
|
|
277
344
|
refreshBeforeMs: options.refreshBeforeMs
|
|
278
345
|
});
|
|
279
|
-
const tokenEnv = options.tokenEnv || DEFAULT_TOKEN_ENV;
|
|
280
|
-
const platformToken = options.token ?? (process.env[tokenEnv] || "");
|
|
281
|
-
const staticTokenSource = platformToken ? new StaticTokenSource(platformToken) : null;
|
|
282
|
-
const primaryTokenSource = staticTokenSource ?? tokenManager;
|
|
283
|
-
const fallbackTokenSource = staticTokenSource ? tokenManager : null;
|
|
284
346
|
const clientTokenEnv = options.clientTokenEnv || DEFAULT_CLIENT_TOKEN_ENV;
|
|
285
347
|
interceptors.request.use((config) => {
|
|
348
|
+
if (fileTokenProvider) {
|
|
349
|
+
const fileToken = fileTokenProvider.getToken();
|
|
350
|
+
if (fileToken) {
|
|
351
|
+
const headers2 = {
|
|
352
|
+
...config.headers,
|
|
353
|
+
"Authorization": `Bearer ${fileToken.token}`,
|
|
354
|
+
"x-api-key": fileToken.accessKey
|
|
355
|
+
};
|
|
356
|
+
return { ...config, headers: headers2 };
|
|
357
|
+
}
|
|
358
|
+
}
|
|
286
359
|
ensureNoAccessKeyOverride("request.platformAuth.customClaims", config.platformAuth?.customClaims);
|
|
287
360
|
const claims = {
|
|
288
361
|
...options.defaultClaims || {},
|
|
289
362
|
...config.platformAuth?.customClaims || {},
|
|
290
363
|
access_key: accessKey
|
|
291
364
|
};
|
|
292
|
-
|
|
293
|
-
try {
|
|
294
|
-
token = primaryTokenSource.getToken(claims);
|
|
295
|
-
} catch (err) {
|
|
296
|
-
if (!fallbackTokenSource) throw err;
|
|
297
|
-
token = fallbackTokenSource.getToken(claims);
|
|
298
|
-
}
|
|
365
|
+
const token = tokenManager.getToken(claims);
|
|
299
366
|
const headers = {
|
|
300
367
|
...config.headers,
|
|
301
368
|
"Authorization": `Bearer ${token}`,
|
|
@@ -1530,7 +1597,9 @@ var ImportCollector = class {
|
|
|
1530
1597
|
};
|
|
1531
1598
|
|
|
1532
1599
|
// src/generator/default-value.ts
|
|
1533
|
-
|
|
1600
|
+
var CUSTOM_CAST_TYPES = /* @__PURE__ */ new Set(["user_profile", "file_attachment"]);
|
|
1601
|
+
var CURRENT_USER_SENTINEL = "current_user";
|
|
1602
|
+
function formatDefaultValue(value, field) {
|
|
1534
1603
|
if (value == null || value === "") return "";
|
|
1535
1604
|
const trimmed = value.trim();
|
|
1536
1605
|
if (!trimmed || trimmed.toUpperCase() === "NULL") return "";
|
|
@@ -1539,6 +1608,12 @@ function formatDefaultValue(value) {
|
|
|
1539
1608
|
if (trimmed === "true") return ".default(true)";
|
|
1540
1609
|
if (trimmed === "false") return ".default(false)";
|
|
1541
1610
|
if (/^-?\d+(\.\d+)?$/.test(trimmed)) return `.default(${trimmed})`;
|
|
1611
|
+
if (field && CUSTOM_CAST_TYPES.has(field.type) && !trimmed.includes("::") && trimmed.toLowerCase() !== CURRENT_USER_SENTINEL) {
|
|
1612
|
+
const pgLiteral = trimmed.replace(/'/g, "''");
|
|
1613
|
+
const escaped = pgLiteral.replace(/`/g, "\\`").replace(/\$\{/g, "\\${");
|
|
1614
|
+
const cast = field.isArray ? `${field.type}[]` : field.type;
|
|
1615
|
+
return `.default(sql\`'${escaped}'::${cast}\`)`;
|
|
1616
|
+
}
|
|
1542
1617
|
if (/::|\(|CASE|current_setting/i.test(trimmed)) {
|
|
1543
1618
|
const escaped = trimmed.replace(/`/g, "\\`").replace(/\$\{/g, "\\${");
|
|
1544
1619
|
return `.default(sql\`${escaped}\`)`;
|
|
@@ -1567,7 +1642,7 @@ var defaultModifiers = [
|
|
|
1567
1642
|
{
|
|
1568
1643
|
name: "defaultValue",
|
|
1569
1644
|
match: (f) => f.defaultValue != null && f.defaultValue !== "",
|
|
1570
|
-
modify: (f) => formatDefaultValue(f.defaultValue)
|
|
1645
|
+
modify: (f) => formatDefaultValue(f.defaultValue, f)
|
|
1571
1646
|
}
|
|
1572
1647
|
];
|
|
1573
1648
|
function applyModifiers(field, modifiers) {
|
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lark-apaas/db-schema-sync",
|
|
3
|
-
"version": "0.1.6-alpha.
|
|
3
|
+
"version": "0.1.6-alpha.5",
|
|
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.
|
|
32
|
+
"@lark-apaas/http-client": "0.1.7-alpha.10",
|
|
33
33
|
"dotenv": "^17.3.1",
|
|
34
34
|
"tiny-pinyin": "^1.3.2"
|
|
35
35
|
},
|