oasis_test_v2 2.2.102 → 2.2.104

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 (2) hide show
  1. package/dist/index.js +46 -8
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -1122,7 +1122,7 @@ var RUNTIME_QUOTA_POLL_MS, RUNTIME_QUOTA_STALE_MS, RUNTIME_QUOTA_REFRESH_MIN_GAP
1122
1122
  var init_runtime_quota = __esm({
1123
1123
  "../contract/src/runtime-quota.ts"() {
1124
1124
  "use strict";
1125
- RUNTIME_QUOTA_POLL_MS = 5 * 6e4;
1125
+ RUNTIME_QUOTA_POLL_MS = 60 * 6e4;
1126
1126
  RUNTIME_QUOTA_STALE_MS = 2 * RUNTIME_QUOTA_POLL_MS;
1127
1127
  RUNTIME_QUOTA_REFRESH_MIN_GAP_MS = 3e4;
1128
1128
  statuses = /* @__PURE__ */ new Set(["ok", "unavailable", "unauthenticated", "unsupported", "error", "rate_limited"]);
@@ -247578,7 +247578,8 @@ function nodesDomain(deps) {
247578
247578
  resolve11({ ok: false, code: "timeout", reason: `\u8FD9\u53F0\u8282\u70B9\u6CA1\u5728 ${Math.round(RUNTIME_DETECT_TIMEOUT_MS / 1e3)} \u79D2\u5185\u56DE\u8BDD\uFF0C\u6CA1\u62FF\u5230\u63A2\u6D4B\u7ED3\u679C` });
247579
247579
  }, RUNTIME_DETECT_TIMEOUT_MS);
247580
247580
  runtimeDetectWaiters.set(requestId, {
247581
- resolve: (r) => resolve11(r.ok ? { ok: true, runtimes: r.runtimes ?? [] } : { ok: false, code: "node", reason: r.reason ?? "\u8FD9\u53F0\u8282\u70B9\u63A2\u6D4B\u8FD0\u884C\u65F6\u65F6\u51FA\u9519\u4E86" }),
247581
+ nodeId,
247582
+ resolve: (r) => resolve11(r.ok ? { ok: true, runtimes: r.runtimes ?? [] } : { ok: false, code: r.code ?? "node", reason: r.reason ?? "\u8FD9\u53F0\u8282\u70B9\u63A2\u6D4B\u8FD0\u884C\u65F6\u65F6\u51FA\u9519\u4E86" }),
247582
247583
  timer
247583
247584
  });
247584
247585
  const sent = hub.dispatch(nodeId, { type: "detect_runtimes", requestId });
@@ -247594,6 +247595,27 @@ function nodesDomain(deps) {
247594
247595
  runtimeDetectInFlight.set(nodeId, task);
247595
247596
  return task;
247596
247597
  }
247598
+ const reenrollDetects = /* @__PURE__ */ new Map();
247599
+ const REENROLL_DETECT_TTL_MS = 30 * 6e4;
247600
+ function startReenrollDetect(enrollToken, nodeId, conn) {
247601
+ const nowMs = Date.now();
247602
+ for (const [k2, v2] of reenrollDetects) if (v2.expiresAt <= nowMs) reenrollDetects.delete(k2);
247603
+ const rec2 = { nodeId, conn, expiresAt: nowMs + REENROLL_DETECT_TTL_MS };
247604
+ reenrollDetects.set(enrollToken, rec2);
247605
+ void detectNodeRuntimes(nodeId).then((outcome) => {
247606
+ rec2.outcome = outcome;
247607
+ if (!outcome.ok) console.log(`[nodes] \u91CD\u65B0\u63A5\u5165\u65F6\u73B0\u573A\u63A2\u6D4B\u6CA1\u62FF\u5230\u7ED3\u679C(node=${nodeId})\uFF1A${outcome.reason}\uFF1B\u7B2C 3 \u6B65\u9000\u56DE\u8FD9\u53F0\u8282\u70B9\u4E0A\u6B21\u4E0A\u62A5\u7684\u5217\u8868`);
247608
+ });
247609
+ }
247610
+ function detectedForEnrollment(enrollToken, nodeId) {
247611
+ const latest = detectedRuntimesOf(nodeId);
247612
+ const rec2 = reenrollDetects.get(enrollToken);
247613
+ if (!rec2 || rec2.nodeId !== nodeId) return latest;
247614
+ const conn = deps.getHub()?.connectedDaemons().find((d) => d.daemonId === nodeId);
247615
+ if (!conn || conn !== rec2.conn) return latest;
247616
+ if (!rec2.outcome) return void 0;
247617
+ return rec2.outcome.ok ? rec2.outcome.runtimes : latest;
247618
+ }
247597
247619
  let hubWired = false;
247598
247620
  function wireHub(hub) {
247599
247621
  if (hubWired) return;
@@ -247691,6 +247713,14 @@ function nodesDomain(deps) {
247691
247713
  deps.onStatusChange?.();
247692
247714
  }
247693
247715
  });
247716
+ hub.addDisconnectListener?.((daemonId) => {
247717
+ for (const [requestId, waiter] of runtimeDetectWaiters) {
247718
+ if (waiter.nodeId !== daemonId) continue;
247719
+ runtimeDetectWaiters.delete(requestId);
247720
+ clearTimeout(waiter.timer);
247721
+ waiter.resolve({ ok: false, code: "offline", reason: "\u8FDE\u63A5\u65AD\u5F00\u4E86\uFF0C\u8282\u70B9\u6CA1\u6765\u5F97\u53CA\u56DE\u62A5\u63A2\u6D4B\u7ED3\u679C" });
247722
+ }
247723
+ });
247694
247724
  hub.onDaemonDisconnected = async (daemonId) => {
247695
247725
  quotaByNode.delete(daemonId);
247696
247726
  try {
@@ -247895,7 +247925,7 @@ function nodesDomain(deps) {
247895
247925
  const crossCompany = raw?.companyId !== void 0 && companyId !== void 0 && raw.companyId !== companyId;
247896
247926
  const entry = crossCompany ? null : raw;
247897
247927
  const nodeId = entry?.issuedNodeId;
247898
- const detected = nodeId !== void 0 ? detectedRuntimesOf(nodeId) : void 0;
247928
+ const detected = nodeId !== void 0 ? detectedForEnrollment(enrollToken, nodeId) : void 0;
247899
247929
  const nodeConnected = nodeId !== void 0 && (deps.getHub()?.connectedDaemons() ?? []).some((d) => d.daemonId === nodeId);
247900
247930
  const boundNodeReady = nodeId !== void 0 && (nodeConnected || usable.some((r) => r.nodeId === nodeId));
247901
247931
  const boundNode = boundNodeReady && nodeId !== void 0 ? await deps.nodeStore.getNode(nodeId) : null;
@@ -247987,6 +248017,8 @@ function nodesDomain(deps) {
247987
248017
  deps.nodeTokens.clearRevocations(nodeId);
247988
248018
  const existing = deps.nodeTokens.list().find((e) => e.nodeId === nodeId);
247989
248019
  const token2 = existing?.token ?? deps.nodeTokens.issue(nodeId);
248020
+ const liveConn = deps.getHub()?.connectedDaemons().find((d) => d.daemonId === nodeId);
248021
+ if (liveConn) startReenrollDetect(enrollToken, nodeId, liveConn);
247990
248022
  return { status: 200, body: { nodeId, token: token2 } };
247991
248023
  });
247992
248024
  router.patch("/api/nodes/:nodeId", async (req) => {
@@ -293875,7 +293907,7 @@ var RuntimeQuotaMonitor = class _RuntimeQuotaMonitor {
293875
293907
  /**
293876
293908
  * 人点了页面上的「刷新」(服务端下发 `refresh_quotas`,ADR 0620):**现在就去问上游**。
293877
293909
  *
293878
- * 与 {@link refresh} 的唯一区别就是**不看那 5 分钟**——那条节流是背景轮询的节奏,
293910
+ * 与 {@link refresh} 的唯一区别就是**不看那 1 小时**——那条节流是背景轮询的节奏,
293879
293911
  * 对一个正盯着页面等结果的人没有任何意义。换上的是一条窄得多的闸:
293880
293912
  * {@link RUNTIME_QUOTA_REFRESH_MIN_GAP_MS}(30 秒)。连点被它挡下,且挡下时**如实说**
293881
293913
  * 「刚在 N 秒前采过」,不假装采了一次(发起人方申的定则:会静默降级的动作必须回报走了哪条路)。
@@ -297882,7 +297914,7 @@ async function waitForCommandAuthorization(base, headers, draftId, fallback) {
297882
297914
  }
297883
297915
  }
297884
297916
  }
297885
- var CLI_VERSION = "2.2.102" ? "2.2.102" : "dev";
297917
+ var CLI_VERSION = "2.2.104" ? "2.2.104" : "dev";
297886
297918
  function apiHeaders(token2, company) {
297887
297919
  const headers = {
297888
297920
  authorization: `Bearer ${token2}`,
@@ -301918,7 +301950,7 @@ function shimScript() {
301918
301950
  }
301919
301951
 
301920
301952
  // src/index.ts
301921
- var PKG_VERSION = true ? "2.2.102" : "dev";
301953
+ var PKG_VERSION = true ? "2.2.104" : "dev";
301922
301954
  var LOCAL_BIN = localBin();
301923
301955
  var NPM_PREFIX = npmPrefix();
301924
301956
  var INSTANCE = DEFAULT_INSTANCE;
@@ -302310,8 +302342,14 @@ async function startOneInstance(o) {
302310
302342
  }
302311
302343
  const pidNow = readPid();
302312
302344
  const alive2 = !!pidNow && isRunning2(pidNow);
302313
- if (alive2 && !enrollToken && label2 === before && !serverChanged && !companyChanged && !nameChanged) {
302314
- console.log(`\u2713 ${INSTANCE}\uFF1A\u5DF2\u5728\u8DD1\uFF08PID ${pidNow}\uFF0C${label2 ?? "?"}\uFF09\uFF0C\u7248\u672C\u4E0E\u914D\u7F6E\u5747\u672A\u53D8\uFF0C\u672A\u91CD\u542F`);
302345
+ const identityChanged = !!prev && (prev.nodeId !== nodeId || prev.token !== token2);
302346
+ if (alive2 && label2 === before && !serverChanged && !companyChanged && !identityChanged) {
302347
+ if (enrollToken) {
302348
+ console.log(`\u2713 ${INSTANCE}\uFF1A\u5DF2\u5728\u8FD0\u884C\uFF0C\u672A\u91CD\u542F\uFF08PID ${pidNow}\uFF0C${label2 ?? "?"}\uFF09\uFF1B\u63A5\u5165\u5DF2\u786E\u8BA4\uFF0C\u8BF7\u56DE\u5230\u9875\u9762\u9009\u62E9\u8981\u6DFB\u52A0\u7684\u8FD0\u884C\u65F6`);
302349
+ } else {
302350
+ console.log(`\u2713 ${INSTANCE}\uFF1A\u5DF2\u5728\u8DD1\uFF08PID ${pidNow}\uFF0C${label2 ?? "?"}\uFF09\uFF0C\u7248\u672C\u4E0E\u914D\u7F6E\u5747\u672A\u53D8\uFF0C\u672A\u91CD\u542F`);
302351
+ }
302352
+ if (nameChanged) console.log(` \u672C\u673A\u8BB0\u5F55\u7684\u8282\u70B9\u540D\u5DF2\u66F4\u65B0\uFF1A${prev.name} \u2192 ${name}`);
302315
302353
  return;
302316
302354
  }
302317
302355
  stopDaemon(INSTANCE);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oasis_test_v2",
3
- "version": "2.2.102",
3
+ "version": "2.2.104",
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": "0f65390893b8eb868ae7c38792ef34c1a00cb0b0"
29
+ "sourceHead": "fedeeaeaf192842d2e7e5ba8c0b0c9ed72aaca14"
30
30
  }
31
31
  }