oasis_test_v2 2.2.107 → 2.2.108
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/index.js +50 -6
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -206747,6 +206747,35 @@ var init_host_isolation = __esm({
|
|
|
206747
206747
|
});
|
|
206748
206748
|
|
|
206749
206749
|
// ../connectors/src/feishu/index.ts
|
|
206750
|
+
async function fetchFeishuTenantAccessToken(appId, appSecret) {
|
|
206751
|
+
try {
|
|
206752
|
+
const resp = await fetch(FEISHU_TENANT_TOKEN_URL, {
|
|
206753
|
+
method: "POST",
|
|
206754
|
+
headers: { "Content-Type": "application/json; charset=utf-8" },
|
|
206755
|
+
body: JSON.stringify({ app_id: appId, app_secret: appSecret }),
|
|
206756
|
+
signal: AbortSignal.timeout(TENANT_TOKEN_TIMEOUT_MS)
|
|
206757
|
+
});
|
|
206758
|
+
const data = await resp.json();
|
|
206759
|
+
if (!resp.ok || data.code !== 0 || typeof data.tenant_access_token !== "string" || !data.tenant_access_token) {
|
|
206760
|
+
log("[feishu]", `\u6362\u4F01\u4E1A token \u5931\u8D25\uFF08\u672C\u8F6E bot \u8EAB\u4EFD\u4E0D\u53EF\u7528\uFF09: HTTP ${resp.status} code=${String(data.code)} ${String(data.msg ?? "")}`.trim());
|
|
206761
|
+
return null;
|
|
206762
|
+
}
|
|
206763
|
+
return data.tenant_access_token;
|
|
206764
|
+
} catch (err) {
|
|
206765
|
+
log("[feishu]", `\u6362\u4F01\u4E1A token \u5931\u8D25\uFF08\u672C\u8F6E bot \u8EAB\u4EFD\u4E0D\u53EF\u7528\uFF09: ${String(err?.message ?? err).slice(0, 200)}`);
|
|
206766
|
+
return null;
|
|
206767
|
+
}
|
|
206768
|
+
}
|
|
206769
|
+
function previousTenantToken(credsFile, appId) {
|
|
206770
|
+
if (!credsFile) return null;
|
|
206771
|
+
try {
|
|
206772
|
+
const prev = readSessionCredsFile(credsFile);
|
|
206773
|
+
if (prev["LARKSUITE_CLI_APP_ID"] !== appId) return null;
|
|
206774
|
+
return prev["LARKSUITE_CLI_TENANT_ACCESS_TOKEN"] || null;
|
|
206775
|
+
} catch {
|
|
206776
|
+
return null;
|
|
206777
|
+
}
|
|
206778
|
+
}
|
|
206750
206779
|
function parseFeishuTokenResponse(data, nowMs) {
|
|
206751
206780
|
const accessToken = String(data["access_token"] ?? "");
|
|
206752
206781
|
const refreshToken = String(data["refresh_token"] ?? "");
|
|
@@ -206765,7 +206794,7 @@ function parseFeishuTokenResponse(data, nowMs) {
|
|
|
206765
206794
|
expiresAt: new Date(expiresAtMs)
|
|
206766
206795
|
};
|
|
206767
206796
|
}
|
|
206768
|
-
var import_node_child_process14, import_node_util4, import_node_path16, import_node_url3, import_promises9, execFileAsync2, __dirname2, FEISHU_WELL_KNOWN_SKILLS_BASE, FEISHU_TOKEN_URL, FeishuConnector;
|
|
206797
|
+
var import_node_child_process14, import_node_util4, import_node_path16, import_node_url3, import_promises9, execFileAsync2, __dirname2, FEISHU_WELL_KNOWN_SKILLS_BASE, FEISHU_TOKEN_URL, FEISHU_TENANT_TOKEN_URL, TENANT_TOKEN_TIMEOUT_MS, FeishuConnector;
|
|
206769
206798
|
var init_feishu = __esm({
|
|
206770
206799
|
"../connectors/src/feishu/index.ts"() {
|
|
206771
206800
|
"use strict";
|
|
@@ -206775,10 +206804,13 @@ var init_feishu = __esm({
|
|
|
206775
206804
|
import_node_url3 = require("node:url");
|
|
206776
206805
|
import_promises9 = require("node:fs/promises");
|
|
206777
206806
|
init_base();
|
|
206807
|
+
init_logger();
|
|
206778
206808
|
execFileAsync2 = (0, import_node_util4.promisify)(import_node_child_process14.execFile);
|
|
206779
206809
|
__dirname2 = (0, import_node_path16.dirname)((0, import_node_url3.fileURLToPath)(__esm_import_meta_url));
|
|
206780
206810
|
FEISHU_WELL_KNOWN_SKILLS_BASE = "https://open.feishu.cn/.well-known/skills";
|
|
206781
206811
|
FEISHU_TOKEN_URL = "https://open.feishu.cn/open-apis/authen/v2/oauth/token";
|
|
206812
|
+
FEISHU_TENANT_TOKEN_URL = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal";
|
|
206813
|
+
TENANT_TOKEN_TIMEOUT_MS = 5e3;
|
|
206782
206814
|
FeishuConnector = class extends CliConnector {
|
|
206783
206815
|
config = {
|
|
206784
206816
|
slug: "feishu",
|
|
@@ -206876,9 +206908,12 @@ var init_feishu = __esm({
|
|
|
206876
206908
|
/** 厂商技能包源——平台自动拉取飞书官方技能包时用。 */
|
|
206877
206909
|
wellKnownSkillsBase = FEISHU_WELL_KNOWN_SKILLS_BASE;
|
|
206878
206910
|
larkBin;
|
|
206879
|
-
|
|
206911
|
+
fetchTenantToken;
|
|
206912
|
+
/** `fetchTenantToken` 只给测试替换(不打真飞书);生产一律用 {@link fetchFeishuTenantAccessToken}。 */
|
|
206913
|
+
constructor(larkBin, opts = {}) {
|
|
206880
206914
|
super(__dirname2);
|
|
206881
206915
|
this.larkBin = larkBin ?? this.resolveLarkBin();
|
|
206916
|
+
this.fetchTenantToken = opts.fetchTenantToken ?? fetchFeishuTenantAccessToken;
|
|
206882
206917
|
}
|
|
206883
206918
|
/**
|
|
206884
206919
|
* 解析 user_info 的 JSON。lark-cli 的 `ok:false` 也是**退出码 0** 的正常输出,
|
|
@@ -206909,6 +206944,7 @@ var init_feishu = __esm({
|
|
|
206909
206944
|
/**
|
|
206910
206945
|
* Agent run 开始:把凭据作为 lark-cli「外部凭据」写进凭据文件(不进 agent env)。
|
|
206911
206946
|
* credentials 接受:app_id, app_secret, user_access_token?(及其 FEISHU_* 别名)。
|
|
206947
|
+
* 企业 token 不随 job 下发,由这里用 app_id/app_secret 现换(换不到只是本轮没有 bot 身份,不抛)。
|
|
206912
206948
|
*
|
|
206913
206949
|
* 注入的 sessionEnv 键(全部非敏感):
|
|
206914
206950
|
* FEISHU_CREDS_FILE — 凭据文件路径,wrapper source 它
|
|
@@ -206921,9 +206957,11 @@ var init_feishu = __esm({
|
|
|
206921
206957
|
if (!appId) throw new Error("feishu inject: missing app_id");
|
|
206922
206958
|
if (!appSecret) throw new Error("feishu inject: missing app_secret");
|
|
206923
206959
|
const userAccessToken = credentials2["user_access_token"] ?? credentials2["FEISHU_USER_ACCESS_TOKEN"];
|
|
206960
|
+
const tenantAccessToken = this.isSimulated() ? null : await this.fetchTenantToken(appId, appSecret) ?? previousTenantToken(sessionEnv.get("FEISHU_CREDS_FILE"), appId);
|
|
206924
206961
|
const creds = await writeSessionCredsFile(this.config.slug, {
|
|
206925
206962
|
LARKSUITE_CLI_APP_ID: appId,
|
|
206926
206963
|
LARKSUITE_CLI_APP_SECRET: appSecret,
|
|
206964
|
+
...tenantAccessToken ? { LARKSUITE_CLI_TENANT_ACCESS_TOKEN: tenantAccessToken } : {},
|
|
206927
206965
|
...userAccessToken ? { LARKSUITE_CLI_USER_ACCESS_TOKEN: userAccessToken } : {}
|
|
206928
206966
|
}, sessionEnv.get("FEISHU_RUN_TMPDIR"));
|
|
206929
206967
|
const configDir = (0, import_node_path16.join)(creds.dir, "lark-config");
|
|
@@ -210646,7 +210684,7 @@ async function prepareConnectorsForJob(job, deps) {
|
|
|
210646
210684
|
await connector.inject(credentials2, sessionEnv);
|
|
210647
210685
|
for (const [k2, v2] of sessionEnv) envOverrides[k2] = v2;
|
|
210648
210686
|
cleanups.push(() => connector.cleanup(sessionEnv));
|
|
210649
|
-
injected.set(slug5, { connector, sessionEnv, credsFingerprint: credentialsFingerprint(credentials2) });
|
|
210687
|
+
injected.set(slug5, { connector, sessionEnv, credentials: credentials2, credsFingerprint: credentialsFingerprint(credentials2) });
|
|
210650
210688
|
status.credsReady = true;
|
|
210651
210689
|
} catch (err) {
|
|
210652
210690
|
status.error = String(err);
|
|
@@ -210772,7 +210810,12 @@ async function renewInjectedCredentials(injected, fetchCredentials) {
|
|
|
210772
210810
|
try {
|
|
210773
210811
|
fresh = await fetchCredentials();
|
|
210774
210812
|
} catch (err) {
|
|
210775
|
-
for (const slug5 of injected
|
|
210813
|
+
for (const [slug5, target] of injected) {
|
|
210814
|
+
outcome.failed.push({ slug: slug5, error: String(err) });
|
|
210815
|
+
await target.connector.inject(target.credentials, target.sessionEnv).catch((reErr) => {
|
|
210816
|
+
log("[node-connectors]", `\u26A0 \u7EED\u671F\uFF1A${slug5} \u6309\u65E7\u51ED\u636E\u91CD\u6CE8\u5931\u8D25: ${String(reErr)}`);
|
|
210817
|
+
});
|
|
210818
|
+
}
|
|
210776
210819
|
log("[node-connectors]", `\u7EED\u671F\uFF1A\u5411 server \u53D6\u51ED\u636E\u5931\u8D25\uFF0C\u672C\u8F6E\u6CBF\u7528\u65E7\u51ED\u636E: ${String(err)}`);
|
|
210777
210820
|
return outcome;
|
|
210778
210821
|
}
|
|
@@ -210781,6 +210824,7 @@ async function renewInjectedCredentials(injected, fetchCredentials) {
|
|
|
210781
210824
|
if (!target) continue;
|
|
210782
210825
|
try {
|
|
210783
210826
|
await target.connector.inject(credentials2, target.sessionEnv);
|
|
210827
|
+
target.credentials = credentials2;
|
|
210784
210828
|
const fingerprint2 = credentialsFingerprint(credentials2);
|
|
210785
210829
|
if (fingerprint2 !== target.credsFingerprint) {
|
|
210786
210830
|
target.credsFingerprint = fingerprint2;
|
|
@@ -299347,7 +299391,7 @@ async function waitForCommandAuthorization(base, headers, draftId, fallback) {
|
|
|
299347
299391
|
}
|
|
299348
299392
|
}
|
|
299349
299393
|
}
|
|
299350
|
-
var CLI_VERSION = "2.2.
|
|
299394
|
+
var CLI_VERSION = "2.2.108" ? "2.2.108" : "dev";
|
|
299351
299395
|
function apiHeaders(token2, company) {
|
|
299352
299396
|
const headers = {
|
|
299353
299397
|
authorization: `Bearer ${token2}`,
|
|
@@ -303518,7 +303562,7 @@ function shimScript() {
|
|
|
303518
303562
|
}
|
|
303519
303563
|
|
|
303520
303564
|
// src/index.ts
|
|
303521
|
-
var PKG_VERSION = true ? "2.2.
|
|
303565
|
+
var PKG_VERSION = true ? "2.2.108" : "dev";
|
|
303522
303566
|
var LOCAL_BIN = localBin();
|
|
303523
303567
|
var NPM_PREFIX = npmPrefix();
|
|
303524
303568
|
var INSTANCE = DEFAULT_INSTANCE;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oasis_test_v2",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.108",
|
|
4
4
|
"description": "Oasis node daemon + CLI — background daemon, auto-start, full server CLI",
|
|
5
5
|
"bin": {
|
|
6
6
|
"oasis": "./dist/index.js"
|
|
@@ -26,6 +26,6 @@
|
|
|
26
26
|
"node": ">=20"
|
|
27
27
|
},
|
|
28
28
|
"oasisRelease": {
|
|
29
|
-
"sourceHead": "
|
|
29
|
+
"sourceHead": "a953575106dcf944d7b32f0eca289792092539ff"
|
|
30
30
|
}
|
|
31
31
|
}
|