@tokenfactory/acc-runner 0.40.7 → 0.40.9
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/chat-transport.d.ts +25 -1
- package/dist/chat-transport.d.ts.map +1 -1
- package/dist/chat-transport.js +56 -4
- package/dist/chat-transport.js.map +1 -1
- package/dist/companion-run.d.ts +2 -0
- package/dist/companion-run.d.ts.map +1 -1
- package/dist/companion-run.js +100 -4
- package/dist/companion-run.js.map +1 -1
- package/dist/companion.d.ts +92 -3
- package/dist/companion.d.ts.map +1 -1
- package/dist/companion.js +166 -11
- package/dist/companion.js.map +1 -1
- package/dist/runtime/auth-lifecycle.d.ts +61 -0
- package/dist/runtime/auth-lifecycle.d.ts.map +1 -0
- package/dist/runtime/auth-lifecycle.js +120 -0
- package/dist/runtime/auth-lifecycle.js.map +1 -0
- package/dist/watch.d.ts +2 -21
- package/dist/watch.d.ts.map +1 -1
- package/dist/watch.js +5 -111
- package/dist/watch.js.map +1 -1
- package/package.json +1 -1
package/dist/companion.js
CHANGED
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
import { createHash } from "node:crypto";
|
|
38
38
|
import { ChatCompanion } from "./chat-companion.js";
|
|
39
39
|
import { resolveChatLaneConfig, } from "./chat-lane.js";
|
|
40
|
+
import { ONE_HOUR_MS, classifyHeartbeatError, nextHeartbeatDelayMs, } from "./runtime/auth-lifecycle.js";
|
|
40
41
|
/** Build the per-identity capacity Realtime topic (mirror of the web builder). */
|
|
41
42
|
export function identityTopic(userId) {
|
|
42
43
|
return `identity:${userId}`;
|
|
@@ -187,9 +188,23 @@ export class CompanionRunner {
|
|
|
187
188
|
lastCapacity = null;
|
|
188
189
|
stopped = false;
|
|
189
190
|
now;
|
|
191
|
+
exit;
|
|
192
|
+
maxHeartbeatFailures;
|
|
193
|
+
beatMs = 4_000;
|
|
194
|
+
// AUTH-REFRESH lifecycle state.
|
|
195
|
+
/** Consecutive failed heartbeats; drives the backoff ladder + offline exit. */
|
|
196
|
+
heartbeatFailures = 0;
|
|
197
|
+
/** One reactive re-auth per failure streak (reset on the next healthy beat). */
|
|
198
|
+
reauthedThisStreak = false;
|
|
199
|
+
/** One consolidated warning line per streak — never a per-tick wall of noise. */
|
|
200
|
+
warnedThisStreak = false;
|
|
201
|
+
/** Single-flight guard so proactive + reactive refresh never overlap. */
|
|
202
|
+
refreshing = null;
|
|
190
203
|
constructor(deps) {
|
|
191
204
|
this.deps = deps;
|
|
192
205
|
this.now = deps.now ?? Date.now;
|
|
206
|
+
this.exit = deps.exit ?? ((code) => process.exit(code));
|
|
207
|
+
this.maxHeartbeatFailures = Math.max(1, deps.maxHeartbeatFailures ?? 5);
|
|
193
208
|
}
|
|
194
209
|
/** Chat turns currently in flight on this companion. */
|
|
195
210
|
activeChatTurns() {
|
|
@@ -216,6 +231,22 @@ export class CompanionRunner {
|
|
|
216
231
|
capacity,
|
|
217
232
|
};
|
|
218
233
|
await this.deps.announce("companion_registered", register);
|
|
234
|
+
// CHAT-LANE-BRIDGE: durably persist the registration onto the identity row —
|
|
235
|
+
// bind this runner into runner_ids and report the chat-auth probe tier so
|
|
236
|
+
// provider-status can confirm a live companion (the Realtime announce alone
|
|
237
|
+
// never wrote probe_tier/last_probe_at or the roster). Best-effort.
|
|
238
|
+
if (this.deps.identityId && this.deps.reportRegistration) {
|
|
239
|
+
await this.deps
|
|
240
|
+
.reportRegistration({
|
|
241
|
+
identityId: this.deps.identityId,
|
|
242
|
+
runnerId: this.deps.runnerId,
|
|
243
|
+
tier: probe ? probe.tier : null,
|
|
244
|
+
capacity,
|
|
245
|
+
})
|
|
246
|
+
.catch((err) => {
|
|
247
|
+
this.deps.onLog?.(`[acc-runner] companion registration persist failed: ${err.message}`);
|
|
248
|
+
});
|
|
249
|
+
}
|
|
219
250
|
if (this.deps.mirror)
|
|
220
251
|
await this.deps.mirror.start();
|
|
221
252
|
this.companion = new ChatCompanion({
|
|
@@ -236,11 +267,13 @@ export class CompanionRunner {
|
|
|
236
267
|
});
|
|
237
268
|
this.companion.start(this.deps.pumpMs ?? 1_000);
|
|
238
269
|
// Heartbeat keeps the identity online; a lapse (sleep/crash) is what flips
|
|
239
|
-
// it offline server-side and fails Auto over to the fleet.
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
270
|
+
// it offline server-side and fails Auto over to the fleet. AUTH-REFRESH:
|
|
271
|
+
// the beat is now a self-scheduling backoff-aware loop (not a fixed-cadence
|
|
272
|
+
// setInterval) so an expired token proactively refreshes, an auth failure
|
|
273
|
+
// triggers ONE re-auth then exponential backoff (max 60s), and N consecutive
|
|
274
|
+
// failures flip the identity offline + exit — never an unbounded spam loop.
|
|
275
|
+
this.beatMs = this.deps.heartbeatMs ?? 4_000;
|
|
276
|
+
await this.beatCycle();
|
|
244
277
|
}
|
|
245
278
|
/**
|
|
246
279
|
* Stop the companion: requeue in-flight turns (clean fail-over — the driver
|
|
@@ -252,7 +285,7 @@ export class CompanionRunner {
|
|
|
252
285
|
return;
|
|
253
286
|
this.stopped = true;
|
|
254
287
|
if (this.heartbeatTimer) {
|
|
255
|
-
|
|
288
|
+
clearTimeout(this.heartbeatTimer);
|
|
256
289
|
this.heartbeatTimer = null;
|
|
257
290
|
}
|
|
258
291
|
// Requeue every in-flight turn so a fleet runner can finish it.
|
|
@@ -270,13 +303,135 @@ export class CompanionRunner {
|
|
|
270
303
|
if (this.deps.mirror)
|
|
271
304
|
await this.deps.mirror.close().catch(() => undefined);
|
|
272
305
|
}
|
|
273
|
-
/**
|
|
274
|
-
|
|
306
|
+
/**
|
|
307
|
+
* One production heartbeat cycle: run a beat then arm the next backoff-aware
|
|
308
|
+
* timer (unless the beat exited / stopped the runner).
|
|
309
|
+
*/
|
|
310
|
+
async beatCycle() {
|
|
311
|
+
await this.runBeat();
|
|
312
|
+
this.scheduleBeat();
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Test hook: run exactly one beat cycle WITHOUT arming the next timer, so a
|
|
316
|
+
* chaos/fake-clock test drives beats deterministically past the backoff ladder
|
|
317
|
+
* (whose ≥4s delays make real-timer tests impractical).
|
|
318
|
+
*/
|
|
319
|
+
async beatOnce() {
|
|
320
|
+
await this.runBeat();
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* One heartbeat: proactively refresh a near-expiry token, beat the identity,
|
|
324
|
+
* and on failure walk the backoff ladder → ONE re-auth → offline flip + exit.
|
|
325
|
+
* Does NOT schedule the next beat — the caller (beatCycle) does. A healthy beat
|
|
326
|
+
* also announces a capacity change.
|
|
327
|
+
*/
|
|
328
|
+
async runBeat() {
|
|
275
329
|
if (this.stopped)
|
|
276
330
|
return;
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
331
|
+
// (1) PROACTIVE refresh: rotate a near-expiry token BEFORE it lapses, so a
|
|
332
|
+
// live session never even produces an auth-failed heartbeat. Single-
|
|
333
|
+
// flight + self-limiting (a rotated token reports "not soon" next beat).
|
|
334
|
+
await this.maybeProactiveRefresh();
|
|
335
|
+
if (this.stopped)
|
|
336
|
+
return;
|
|
337
|
+
// (2) Beat.
|
|
338
|
+
let error = null;
|
|
339
|
+
try {
|
|
340
|
+
await this.deps.heartbeat();
|
|
341
|
+
}
|
|
342
|
+
catch (err) {
|
|
343
|
+
error = err;
|
|
344
|
+
}
|
|
345
|
+
if (this.stopped)
|
|
346
|
+
return;
|
|
347
|
+
if (!error) {
|
|
348
|
+
if (this.heartbeatFailures > 0) {
|
|
349
|
+
this.deps.onLog?.("[acc-runner] companion heartbeat recovered");
|
|
350
|
+
}
|
|
351
|
+
this.heartbeatFailures = 0;
|
|
352
|
+
this.reauthedThisStreak = false;
|
|
353
|
+
this.warnedThisStreak = false;
|
|
354
|
+
await this.announceCapacityIfChanged();
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
// (3) Failed. Bump the streak and classify.
|
|
358
|
+
this.heartbeatFailures += 1;
|
|
359
|
+
const kind = classifyHeartbeatError(error);
|
|
360
|
+
// SINGLE consolidated warning per streak — the fix for the unbounded
|
|
361
|
+
// "companion heartbeat failed: JWT expired" wall the operator hit. The
|
|
362
|
+
// backoff + exit below make the spam loop structurally impossible even
|
|
363
|
+
// without this dedupe; the dedupe keeps a slow multi-failure streak quiet.
|
|
364
|
+
if (!this.warnedThisStreak) {
|
|
365
|
+
this.warnedThisStreak = true;
|
|
366
|
+
this.deps.onLog?.(`[acc-runner] companion heartbeat failing (${kind}): ${(error.message ?? "").trim()}; ` +
|
|
367
|
+
`backing off, will go offline after ${this.maxHeartbeatFailures} consecutive failures`);
|
|
368
|
+
}
|
|
369
|
+
// (4) REACTIVE re-auth: exactly ONCE per streak, only on an auth-shaped
|
|
370
|
+
// failure. A refresh that recovers resets the streak on the next beat's
|
|
371
|
+
// success; a refresh that doesn't lets the ladder run to the exit.
|
|
372
|
+
if (kind === "auth" && !this.reauthedThisStreak && this.deps.refreshAuth) {
|
|
373
|
+
this.reauthedThisStreak = true;
|
|
374
|
+
const ok = await this.runRefresh("heartbeat auth failure");
|
|
375
|
+
if (ok)
|
|
376
|
+
this.deps.onLog?.("[acc-runner] companion re-authenticated; retrying heartbeat");
|
|
377
|
+
if (this.stopped)
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
380
|
+
// (5) Give up after N: flip the identity offline (Auto fails over to the
|
|
381
|
+
// fleet, honest UI states fire) and EXIT non-zero so the autostart login
|
|
382
|
+
// agent relaunches cleanly — never a zombie process spinning forever.
|
|
383
|
+
if (this.heartbeatFailures >= this.maxHeartbeatFailures) {
|
|
384
|
+
await this.flipOfflineAndExit(kind);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
/** Schedule the next beat on the backoff-aware timer (unref'd; test seam via now/heartbeatMs). */
|
|
388
|
+
scheduleBeat() {
|
|
389
|
+
if (this.stopped)
|
|
390
|
+
return;
|
|
391
|
+
const delay = nextHeartbeatDelayMs(this.heartbeatFailures, this.beatMs);
|
|
392
|
+
this.heartbeatTimer = setTimeout(() => void this.beatCycle(), delay);
|
|
393
|
+
this.heartbeatTimer.unref?.();
|
|
394
|
+
}
|
|
395
|
+
/** Proactively refresh when the live session is within the lead window of expiry. */
|
|
396
|
+
async maybeProactiveRefresh() {
|
|
397
|
+
if (!this.deps.refreshAuth || !this.deps.expiresSoon)
|
|
398
|
+
return;
|
|
399
|
+
if (!this.deps.expiresSoon(this.deps.proactiveRefreshLeadMs ?? ONE_HOUR_MS))
|
|
400
|
+
return;
|
|
401
|
+
await this.runRefresh("proactive: token near expiry");
|
|
402
|
+
}
|
|
403
|
+
/** Single-flight refresh wrapper — proactive and reactive share one in-flight call. */
|
|
404
|
+
runRefresh(reason) {
|
|
405
|
+
if (this.refreshing)
|
|
406
|
+
return this.refreshing;
|
|
407
|
+
const refreshAuth = this.deps.refreshAuth;
|
|
408
|
+
if (!refreshAuth)
|
|
409
|
+
return Promise.resolve(false);
|
|
410
|
+
this.refreshing = (async () => {
|
|
411
|
+
try {
|
|
412
|
+
return await refreshAuth();
|
|
413
|
+
}
|
|
414
|
+
catch (err) {
|
|
415
|
+
this.deps.onLog?.(`[acc-runner] companion token refresh failed (${reason}): ${err.message}`);
|
|
416
|
+
return false;
|
|
417
|
+
}
|
|
418
|
+
finally {
|
|
419
|
+
this.refreshing = null;
|
|
420
|
+
}
|
|
421
|
+
})();
|
|
422
|
+
return this.refreshing;
|
|
423
|
+
}
|
|
424
|
+
/** Flip the identity offline (via the shared stop() teardown) and exit non-zero. */
|
|
425
|
+
async flipOfflineAndExit(kind) {
|
|
426
|
+
this.deps.onLog?.(`[acc-runner] companion offline after ${this.maxHeartbeatFailures} consecutive heartbeat ` +
|
|
427
|
+
`failures (${kind}); flipping identity offline and exiting for a clean autostart relaunch`);
|
|
428
|
+
// stop() requeues in-flight turns, announces companion_lost (immediate
|
|
429
|
+
// offline flip → Auto fails over to the fleet), and closes the mirror.
|
|
430
|
+
await this.stop();
|
|
431
|
+
this.exit(1);
|
|
432
|
+
}
|
|
433
|
+
/** Announce a capacity change on a healthy beat (unchanged behaviour). */
|
|
434
|
+
async announceCapacityIfChanged() {
|
|
280
435
|
const capacity = await this.deps.engine.classifyCapacity().catch(() => this.lastCapacity);
|
|
281
436
|
if (capacity && capacity !== this.lastCapacity) {
|
|
282
437
|
this.lastCapacity = capacity;
|
package/dist/companion.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"companion.js","sourceRoot":"","sources":["../src/companion.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"companion.js","sourceRoot":"","sources":["../src/companion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AUTH-REFRESH: shared runner auth-lifecycle primitives.
|
|
3
|
+
*
|
|
4
|
+
* Extracted verbatim from watch.ts so BOTH the fleet `watch` runner and the
|
|
5
|
+
* `companion` runner refresh, classify auth failures, and back off identically
|
|
6
|
+
* — a single source of truth for "how a runner keeps its session alive". Before
|
|
7
|
+
* this split the companion had NONE of it: its heartbeat logged the same
|
|
8
|
+
* "JWT expired" line every 4s forever (no refresh, no backoff, no exit),
|
|
9
|
+
* leaving a zombie process while the identity went stale server-side.
|
|
10
|
+
*
|
|
11
|
+
* watch.ts re-exports the heartbeat symbols so its existing test imports
|
|
12
|
+
* (`classifyHeartbeatError`, `nextHeartbeatDelayMs`, `HeartbeatErrorKind`) keep
|
|
13
|
+
* resolving from `watch.js`.
|
|
14
|
+
*/
|
|
15
|
+
import type { RunnerConfig } from "../config.js";
|
|
16
|
+
import type { StoredSession } from "../types.js";
|
|
17
|
+
export declare const ONE_HOUR_MS: number;
|
|
18
|
+
/**
|
|
19
|
+
* Thrown when /api/runner/refresh reports refresh-token reuse. There is no safe
|
|
20
|
+
* recovery from a running loop — the keychain has to be reset by
|
|
21
|
+
* `acc-runner login` — so callers surface it loudly and exit.
|
|
22
|
+
*/
|
|
23
|
+
export declare class RefreshReuseDetectedError extends Error {
|
|
24
|
+
constructor(message: string);
|
|
25
|
+
}
|
|
26
|
+
/** True when the session's access token expires within `leadMs` (or is unparseable). */
|
|
27
|
+
export declare function expiresSoon(session: StoredSession, leadMs?: number): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Exchange the stored refresh token for a fresh access token via
|
|
30
|
+
* /api/runner/refresh. Returns a new StoredSession carrying the rotated
|
|
31
|
+
* access + refresh tokens (the server rotates on every refresh; persisting the
|
|
32
|
+
* successor is mandatory or the next call replays the old one and trips the
|
|
33
|
+
* chain-revocation reuse path). Throws RefreshReuseDetectedError on a 401 whose
|
|
34
|
+
* body reports reuse; a generic Error otherwise.
|
|
35
|
+
*/
|
|
36
|
+
export declare function refreshAccessToken(cfg: RunnerConfig, session: StoredSession): Promise<StoredSession>;
|
|
37
|
+
export type HeartbeatErrorKind = "auth" | "dns" | "tls" | "reset" | "timeout" | "network" | "unknown";
|
|
38
|
+
/**
|
|
39
|
+
* Classify a heartbeat RPC error so callers (a) emit a useful line for
|
|
40
|
+
* the operator and (b) only attempt a JWT refresh when the failure shape
|
|
41
|
+
* actually implies an auth problem. Refreshing on a transient network blip just
|
|
42
|
+
* burns the refresh-token rotation chain and surfaces a confusing "refresh
|
|
43
|
+
* failed" line on top of the real underlying network error.
|
|
44
|
+
*/
|
|
45
|
+
export declare function classifyHeartbeatError(err: {
|
|
46
|
+
message?: string | null;
|
|
47
|
+
code?: string | null;
|
|
48
|
+
} | null | undefined): HeartbeatErrorKind;
|
|
49
|
+
/**
|
|
50
|
+
* Exponential backoff ladder between heartbeat attempts when the
|
|
51
|
+
* previous one failed. Bounds the retry cadence so a wedged network / expired
|
|
52
|
+
* token produces spaced attempts (max 60s) rather than a tight per-tick loop.
|
|
53
|
+
*/
|
|
54
|
+
export declare const HEARTBEAT_BACKOFF_MS: readonly [4000, 8000, 16000, 32000, 60000];
|
|
55
|
+
/**
|
|
56
|
+
* Pick the next inter-heartbeat delay from the backoff ladder. `consecutiveFailures`
|
|
57
|
+
* is 1 for the first retry. The return is at least `baseMs` so a tighter
|
|
58
|
+
* operator-configured cadence is never slowed by the backoff scheme.
|
|
59
|
+
*/
|
|
60
|
+
export declare function nextHeartbeatDelayMs(consecutiveFailures: number, baseMs: number): number;
|
|
61
|
+
//# sourceMappingURL=auth-lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-lifecycle.d.ts","sourceRoot":"","sources":["../../src/runtime/auth-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAkC,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjF,eAAO,MAAM,WAAW,QAAiB,CAAC;AAE1C;;;;GAIG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,EAAE,MAAM;CAI5B;AAED,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAc,GAAG,OAAO,CAIjF;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,YAAY,EACjB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,aAAa,CAAC,CA6BxB;AAED,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN,KAAK,GACL,KAAK,GACL,OAAO,GACP,SAAS,GACT,SAAS,GACT,SAAS,CAAC;AAEd;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GACxE,kBAAkB,CA2CpB;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,4CAAkD,CAAC;AAEpF;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,mBAAmB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAIxF"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { PROTOCOL_VERSION } from "../types.js";
|
|
2
|
+
export const ONE_HOUR_MS = 60 * 60 * 1000;
|
|
3
|
+
/**
|
|
4
|
+
* Thrown when /api/runner/refresh reports refresh-token reuse. There is no safe
|
|
5
|
+
* recovery from a running loop — the keychain has to be reset by
|
|
6
|
+
* `acc-runner login` — so callers surface it loudly and exit.
|
|
7
|
+
*/
|
|
8
|
+
export class RefreshReuseDetectedError extends Error {
|
|
9
|
+
constructor(message) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.name = "RefreshReuseDetectedError";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
/** True when the session's access token expires within `leadMs` (or is unparseable). */
|
|
15
|
+
export function expiresSoon(session, leadMs = ONE_HOUR_MS) {
|
|
16
|
+
const expires = Date.parse(session.access_expires_at);
|
|
17
|
+
if (!Number.isFinite(expires))
|
|
18
|
+
return true;
|
|
19
|
+
return expires < Date.now() + leadMs;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Exchange the stored refresh token for a fresh access token via
|
|
23
|
+
* /api/runner/refresh. Returns a new StoredSession carrying the rotated
|
|
24
|
+
* access + refresh tokens (the server rotates on every refresh; persisting the
|
|
25
|
+
* successor is mandatory or the next call replays the old one and trips the
|
|
26
|
+
* chain-revocation reuse path). Throws RefreshReuseDetectedError on a 401 whose
|
|
27
|
+
* body reports reuse; a generic Error otherwise.
|
|
28
|
+
*/
|
|
29
|
+
export async function refreshAccessToken(cfg, session) {
|
|
30
|
+
const res = await fetch(`${cfg.publicUrl.replace(/\/+$/, "")}/api/runner/refresh`, {
|
|
31
|
+
method: "POST",
|
|
32
|
+
headers: {
|
|
33
|
+
"Content-Type": "application/json",
|
|
34
|
+
"User-Agent": `acc-runner/${PROTOCOL_VERSION}`,
|
|
35
|
+
},
|
|
36
|
+
body: JSON.stringify({ refresh_token: session.refresh_token }),
|
|
37
|
+
});
|
|
38
|
+
if (res.status === 401) {
|
|
39
|
+
const body = (await res.json().catch(() => ({})));
|
|
40
|
+
if (body.error === "refresh_reuse_detected") {
|
|
41
|
+
throw new RefreshReuseDetectedError(body.hint ??
|
|
42
|
+
"refresh token reuse detected; keychain may be compromised. Run `acc-runner login` from a trusted machine.");
|
|
43
|
+
}
|
|
44
|
+
throw new Error(body.hint ?? "refresh token expired; run `acc-runner login`");
|
|
45
|
+
}
|
|
46
|
+
if (!res.ok) {
|
|
47
|
+
throw new Error(`refresh failed: ${res.status} ${await res.text()}`);
|
|
48
|
+
}
|
|
49
|
+
const body = (await res.json());
|
|
50
|
+
return {
|
|
51
|
+
...session,
|
|
52
|
+
access_token: body.access_token,
|
|
53
|
+
access_expires_at: new Date(body.expires_at * 1000).toISOString(),
|
|
54
|
+
refresh_token: body.refresh_token ?? session.refresh_token,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Classify a heartbeat RPC error so callers (a) emit a useful line for
|
|
59
|
+
* the operator and (b) only attempt a JWT refresh when the failure shape
|
|
60
|
+
* actually implies an auth problem. Refreshing on a transient network blip just
|
|
61
|
+
* burns the refresh-token rotation chain and surfaces a confusing "refresh
|
|
62
|
+
* failed" line on top of the real underlying network error.
|
|
63
|
+
*/
|
|
64
|
+
export function classifyHeartbeatError(err) {
|
|
65
|
+
if (!err)
|
|
66
|
+
return "unknown";
|
|
67
|
+
const msg = (err.message ?? "").toLowerCase();
|
|
68
|
+
const code = (err.code ?? "").toLowerCase();
|
|
69
|
+
if (code === "pgrst301" ||
|
|
70
|
+
code === "401" ||
|
|
71
|
+
code === "403" ||
|
|
72
|
+
msg.includes("jwt") ||
|
|
73
|
+
msg.includes("invalid token") ||
|
|
74
|
+
msg.includes("token has expired") ||
|
|
75
|
+
msg.includes("unauthorized") ||
|
|
76
|
+
msg.includes("forbidden")) {
|
|
77
|
+
return "auth";
|
|
78
|
+
}
|
|
79
|
+
if (msg.includes("enotfound") || msg.includes("getaddrinfo") || msg.includes("eai_again")) {
|
|
80
|
+
return "dns";
|
|
81
|
+
}
|
|
82
|
+
if (msg.includes("econnreset") || msg.includes("connection reset")) {
|
|
83
|
+
return "reset";
|
|
84
|
+
}
|
|
85
|
+
if (msg.includes("certificate") ||
|
|
86
|
+
msg.includes("self-signed") ||
|
|
87
|
+
msg.includes("self signed") ||
|
|
88
|
+
msg.includes("tls") ||
|
|
89
|
+
msg.includes("ssl")) {
|
|
90
|
+
return "tls";
|
|
91
|
+
}
|
|
92
|
+
if (msg.includes("etimedout") || msg.includes("timeout")) {
|
|
93
|
+
return "timeout";
|
|
94
|
+
}
|
|
95
|
+
if (msg.includes("fetch failed") ||
|
|
96
|
+
msg.includes("econnrefused") ||
|
|
97
|
+
msg.includes("network") ||
|
|
98
|
+
msg.includes("socket hang up")) {
|
|
99
|
+
return "network";
|
|
100
|
+
}
|
|
101
|
+
return "unknown";
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Exponential backoff ladder between heartbeat attempts when the
|
|
105
|
+
* previous one failed. Bounds the retry cadence so a wedged network / expired
|
|
106
|
+
* token produces spaced attempts (max 60s) rather than a tight per-tick loop.
|
|
107
|
+
*/
|
|
108
|
+
export const HEARTBEAT_BACKOFF_MS = [4_000, 8_000, 16_000, 32_000, 60_000];
|
|
109
|
+
/**
|
|
110
|
+
* Pick the next inter-heartbeat delay from the backoff ladder. `consecutiveFailures`
|
|
111
|
+
* is 1 for the first retry. The return is at least `baseMs` so a tighter
|
|
112
|
+
* operator-configured cadence is never slowed by the backoff scheme.
|
|
113
|
+
*/
|
|
114
|
+
export function nextHeartbeatDelayMs(consecutiveFailures, baseMs) {
|
|
115
|
+
if (consecutiveFailures <= 0)
|
|
116
|
+
return baseMs;
|
|
117
|
+
const idx = Math.min(consecutiveFailures - 1, HEARTBEAT_BACKOFF_MS.length - 1);
|
|
118
|
+
return Math.max(baseMs, HEARTBEAT_BACKOFF_MS[idx]);
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=auth-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-lifecycle.js","sourceRoot":"","sources":["../../src/runtime/auth-lifecycle.ts"],"names":[],"mappings":"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"}
|
package/dist/watch.d.ts
CHANGED
|
@@ -8,9 +8,8 @@ import { type ReviewAssignment, type ReviewerOutcome } from "./runtime/reviewer.
|
|
|
8
8
|
import { type SingletonLock } from "./runtime/singleton.js";
|
|
9
9
|
import { type SelfUpgradeResult, type SelfUpdate426Result } from "./runtime/self-upgrade.js";
|
|
10
10
|
import type { StoredSession } from "./types.js";
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
11
|
+
import { RefreshReuseDetectedError, classifyHeartbeatError, nextHeartbeatDelayMs, type HeartbeatErrorKind } from "./runtime/auth-lifecycle.js";
|
|
12
|
+
export { RefreshReuseDetectedError, classifyHeartbeatError, nextHeartbeatDelayMs, type HeartbeatErrorKind, };
|
|
14
13
|
/**
|
|
15
14
|
* REVFB (G1) / RVU-2 (FU-RVU2R): TASK slots pump() may fill, leaving `reserved`
|
|
16
15
|
* free for reviews. Normally leaves ≥1 task slot (no-op on a 1-slot runner); the
|
|
@@ -32,24 +31,6 @@ export declare function computeTaskClaimLimit(opts: {
|
|
|
32
31
|
capacityProbe?: boolean;
|
|
33
32
|
claimPaused?: boolean;
|
|
34
33
|
}): number;
|
|
35
|
-
export type HeartbeatErrorKind = "auth" | "dns" | "tls" | "reset" | "timeout" | "network" | "unknown";
|
|
36
|
-
/**
|
|
37
|
-
* v0.6.0: classify the heartbeat RPC error so we (a) emit a useful
|
|
38
|
-
* stderr line for the operator and (b) only attempt a JWT refresh
|
|
39
|
-
* when the failure shape actually implies an auth problem. Refreshing
|
|
40
|
-
* on a transient network blip just burns the refresh-token rotation
|
|
41
|
-
* chain and surfaces a confusing "refresh failed" line on top of the
|
|
42
|
-
* real underlying network error.
|
|
43
|
-
*/
|
|
44
|
-
export declare function classifyHeartbeatError(err: {
|
|
45
|
-
message?: string | null;
|
|
46
|
-
code?: string | null;
|
|
47
|
-
} | null | undefined): HeartbeatErrorKind;
|
|
48
|
-
/** Pick the next inter-heartbeat delay from the backoff ladder. Caller
|
|
49
|
-
* passes the number of consecutive failures (1 → first retry). The
|
|
50
|
-
* return is at least baseMs so a tighter operator-configured cadence
|
|
51
|
-
* is never slowed by the backoff scheme. */
|
|
52
|
-
export declare function nextHeartbeatDelayMs(consecutiveFailures: number, baseMs: number): number;
|
|
53
34
|
export interface WatchOptions {
|
|
54
35
|
/** Override heartbeat interval (ms). Defaults to 4000. */
|
|
55
36
|
heartbeatMs?: number;
|
package/dist/watch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAML,KAAK,iBAAiB,EACtB,KAAK,YAAY,EAGlB,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAG3E,OAAO,EAAsB,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAK/B,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,wBAAwB,CAAC;AAKhC,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACzB,MAAM,2BAA2B,CAAC;AAInC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"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"}
|