@tokenfactory/acc-runner 0.28.4 → 0.28.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/cli.js +0 -0
- package/dist/doctor.d.ts +12 -0
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +127 -2
- package/dist/doctor.js.map +1 -1
- package/dist/runtime/cache-dir.d.ts +8 -0
- package/dist/runtime/cache-dir.d.ts.map +1 -1
- package/dist/runtime/cache-dir.js +29 -2
- package/dist/runtime/cache-dir.js.map +1 -1
- package/dist/runtime/locks.d.ts.map +1 -1
- package/dist/runtime/locks.js +12 -6
- package/dist/runtime/locks.js.map +1 -1
- package/dist/runtime/quarantine.d.ts +5 -1
- package/dist/runtime/quarantine.d.ts.map +1 -1
- package/dist/runtime/quarantine.js +7 -4
- package/dist/runtime/quarantine.js.map +1 -1
- package/dist/runtime/singleton.d.ts +27 -8
- package/dist/runtime/singleton.d.ts.map +1 -1
- package/dist/runtime/singleton.js +43 -16
- package/dist/runtime/singleton.js.map +1 -1
- package/dist/runtime/worktree.d.ts.map +1 -1
- package/dist/runtime/worktree.js +8 -3
- package/dist/runtime/worktree.js.map +1 -1
- package/dist/token-provider.d.ts +34 -0
- package/dist/token-provider.d.ts.map +1 -1
- package/dist/token-provider.js +124 -15
- package/dist/token-provider.js.map +1 -1
- package/dist/watch.d.ts +1 -0
- package/dist/watch.d.ts.map +1 -1
- package/dist/watch.js +151 -14
- package/dist/watch.js.map +1 -1
- package/package.json +2 -1
|
@@ -17,6 +17,16 @@
|
|
|
17
17
|
* one runner per repo without contention. The conceptual name in the spec
|
|
18
18
|
* is `<cache>/runner.lock`; the per-repo hash suffix is what makes
|
|
19
19
|
* coexistence possible.
|
|
20
|
+
*
|
|
21
|
+
* v1.02-A — concurrent runners per host. The lock is now keyed by
|
|
22
|
+
* (canonical repo path + runner identity), not the repo path alone, so two
|
|
23
|
+
* DISTINCT ACC_RUNNER_IDs can serve the same repo on one machine at the same
|
|
24
|
+
* time (each gets its own cache dir via `cacheDir()`, so no worktree/ref
|
|
25
|
+
* race). A runner with NO ACC_RUNNER_ID keeps the legacy repo-path-only key
|
|
26
|
+
* — two un-identified runners on one repo still collide, which is the
|
|
27
|
+
* original duplicate-runner footgun the lock exists to catch. The identity
|
|
28
|
+
* deliberately reads ACC_RUNNER_ID directly (never the minted acc-eph id,
|
|
29
|
+
* which is random per process and would make the lock never collide).
|
|
20
30
|
*/
|
|
21
31
|
import fs from "node:fs";
|
|
22
32
|
import fsp from "node:fs/promises";
|
|
@@ -25,11 +35,19 @@ import crypto from "node:crypto";
|
|
|
25
35
|
import { cacheDir } from "./cache-dir.js";
|
|
26
36
|
import { isProcessAlive } from "./locks.js";
|
|
27
37
|
import { PACKAGE_VERSION } from "../pkg-version.js";
|
|
38
|
+
/**
|
|
39
|
+
* v1.02-A: the runner identity that keys the singleton lock. ACC_RUNNER_ID
|
|
40
|
+
* when set, else "" (legacy repo-path-only key). Never the minted acc-eph id.
|
|
41
|
+
*/
|
|
42
|
+
export function singletonRunnerId(env = process.env) {
|
|
43
|
+
return env.ACC_RUNNER_ID?.trim() || "";
|
|
44
|
+
}
|
|
28
45
|
export class SingletonLockHeldError extends Error {
|
|
29
46
|
holder;
|
|
30
47
|
lockFile;
|
|
31
48
|
constructor(holder, lockFile) {
|
|
32
|
-
super(`another acc-runner (pid ${holder.pid}) is already serving repo ${holder.repoPath}`
|
|
49
|
+
super(`another acc-runner (pid ${holder.pid}) is already serving repo ${holder.repoPath}` +
|
|
50
|
+
(holder.runnerId ? ` as ${holder.runnerId}` : ""));
|
|
33
51
|
this.holder = holder;
|
|
34
52
|
this.lockFile = lockFile;
|
|
35
53
|
this.name = "SingletonLockHeldError";
|
|
@@ -49,13 +67,17 @@ export function canonicalRepoPath(repoPath) {
|
|
|
49
67
|
return resolved;
|
|
50
68
|
}
|
|
51
69
|
}
|
|
52
|
-
/**
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
70
|
+
/**
|
|
71
|
+
* `<cache>/runner.<hash>.lock`. The hash is derived from the canonical repo
|
|
72
|
+
* path AND the runner identity (v1.02-A), so two distinct ACC_RUNNER_IDs on
|
|
73
|
+
* one repo get distinct lock files and coexist. An empty `runnerId` keeps the
|
|
74
|
+
* pre-v1.02 hash (repo path alone) so a runner without ACC_RUNNER_ID still
|
|
75
|
+
* detects a pre-upgrade holder for the same repo.
|
|
76
|
+
*/
|
|
77
|
+
export function singletonLockPath(repoPath, runnerId = singletonRunnerId()) {
|
|
78
|
+
const canonical = canonicalRepoPath(repoPath);
|
|
79
|
+
const key = runnerId ? `${canonical}\0${runnerId}` : canonical;
|
|
80
|
+
const hash = crypto.createHash("sha1").update(key).digest("hex").slice(0, 12);
|
|
59
81
|
return path.join(cacheDir(), `runner.${hash}.lock`);
|
|
60
82
|
}
|
|
61
83
|
async function readLockInfo(file) {
|
|
@@ -75,6 +97,8 @@ async function readLockInfo(file) {
|
|
|
75
97
|
return {
|
|
76
98
|
pid: parsed.pid,
|
|
77
99
|
repoPath: typeof parsed.repoPath === "string" ? parsed.repoPath : "<unknown>",
|
|
100
|
+
// Absent in pre-v1.02 lock files → "" (legacy repo-path-only key).
|
|
101
|
+
runnerId: typeof parsed.runnerId === "string" ? parsed.runnerId : "",
|
|
78
102
|
acquiredAt: typeof parsed.acquiredAt === "string" ? parsed.acquiredAt : "<unknown>",
|
|
79
103
|
version: typeof parsed.version === "string" ? parsed.version : "<unknown>",
|
|
80
104
|
};
|
|
@@ -104,18 +128,21 @@ function makeLock(file, repoPath, pid) {
|
|
|
104
128
|
};
|
|
105
129
|
}
|
|
106
130
|
/**
|
|
107
|
-
* Acquire the single-instance lock for `repoPath`. Throws
|
|
108
|
-
* SingletonLockHeldError when a *live* process already holds the lock for
|
|
109
|
-
*
|
|
110
|
-
* corrupt file) is reclaimed with a stderr breadcrumb and
|
|
131
|
+
* Acquire the single-instance lock for `repoPath` under `runnerId`. Throws
|
|
132
|
+
* SingletonLockHeldError when a *live* process already holds the lock for the
|
|
133
|
+
* same (canonical repo path, runner identity) pair. A stale lock (dead pid,
|
|
134
|
+
* our own pid, or a corrupt file) is reclaimed with a stderr breadcrumb and
|
|
135
|
+
* then re-acquired. A different `runnerId` keys a different lock file, so two
|
|
136
|
+
* distinct identities on one repo never contend (v1.02-A).
|
|
111
137
|
*/
|
|
112
|
-
export async function acquireSingletonLock(repoPath, pid = process.pid) {
|
|
138
|
+
export async function acquireSingletonLock(repoPath, pid = process.pid, runnerId = singletonRunnerId()) {
|
|
113
139
|
const canonical = canonicalRepoPath(repoPath);
|
|
114
|
-
const file = singletonLockPath(repoPath);
|
|
140
|
+
const file = singletonLockPath(repoPath, runnerId);
|
|
115
141
|
await fsp.mkdir(path.dirname(file), { recursive: true });
|
|
116
142
|
const payload = `${JSON.stringify({
|
|
117
143
|
pid,
|
|
118
144
|
repoPath: canonical,
|
|
145
|
+
runnerId,
|
|
119
146
|
acquiredAt: new Date().toISOString(),
|
|
120
147
|
version: PACKAGE_VERSION,
|
|
121
148
|
}, null, 2)}\n`;
|
|
@@ -159,8 +186,8 @@ export async function acquireSingletonLock(repoPath, pid = process.pid) {
|
|
|
159
186
|
* process other than `selfPid` owns it. Used by `acc-runner doctor` to
|
|
160
187
|
* report a duplicate runner without trying to acquire the lock.
|
|
161
188
|
*/
|
|
162
|
-
export async function findLiveLockHolder(repoPath, selfPid = process.pid) {
|
|
163
|
-
const holder = await readLockInfo(singletonLockPath(repoPath));
|
|
189
|
+
export async function findLiveLockHolder(repoPath, selfPid = process.pid, runnerId = singletonRunnerId()) {
|
|
190
|
+
const holder = await readLockInfo(singletonLockPath(repoPath, runnerId));
|
|
164
191
|
if (holder && holder.pid !== selfPid && isProcessAlive(holder.pid)) {
|
|
165
192
|
return holder;
|
|
166
193
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"singleton.js","sourceRoot":"","sources":["../../src/runtime/singleton.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"singleton.js","sourceRoot":"","sources":["../../src/runtime/singleton.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../src/runtime/worktree.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../src/runtime/worktree.ts"],"names":[],"mappings":"AAwCA,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AACrE,MAAM,MAAM,iBAAiB,GAAG,CAC9B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;AAExC,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd;;;;;OAKG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAMD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnD;AAyBD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAgDpC;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,gBAAgB,CAAC,CA8D3B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,iFAAiF;AACjF,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,EAAE,CAAC,CA+B3B"}
|
package/dist/runtime/worktree.js
CHANGED
|
@@ -27,13 +27,18 @@
|
|
|
27
27
|
* partially-committed state instead of restarting from baseBranch.
|
|
28
28
|
*/
|
|
29
29
|
import fs from "node:fs/promises";
|
|
30
|
-
import os from "node:os";
|
|
31
30
|
import path from "node:path";
|
|
32
31
|
import { execa } from "execa";
|
|
33
32
|
import { buildEnv } from "../bin-resolve.js";
|
|
34
|
-
|
|
33
|
+
import { cacheDir } from "./cache-dir.js";
|
|
34
|
+
// Lazy so tests can override ACC_RUNNER_CACHE_DIR / HOME between cases.
|
|
35
|
+
//
|
|
36
|
+
// v1.00-B: resolves through `cacheDir()` (honours ACC_RUNNER_CACHE_DIR)
|
|
37
|
+
// rather than a hardcoded ~/.cache path, so two ephemeral runners with
|
|
38
|
+
// distinct cache dirs get isolated `work/` trees and never race on each
|
|
39
|
+
// other's per-task worktrees.
|
|
35
40
|
export function workDir() {
|
|
36
|
-
return path.join(
|
|
41
|
+
return path.join(cacheDir(), "work");
|
|
37
42
|
}
|
|
38
43
|
function defaultGitExec(args, cwd) {
|
|
39
44
|
return execa("git", args, { cwd, env: buildEnv() }).then(() => undefined);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/runtime/worktree.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,
|
|
1
|
+
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/runtime/worktree.ts"],"names":[],"mappings":"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"}
|
package/dist/token-provider.d.ts
CHANGED
|
@@ -8,6 +8,18 @@ export interface TokenProvider {
|
|
|
8
8
|
load(): Promise<StoredSession | null>;
|
|
9
9
|
save(session: StoredSession): Promise<void>;
|
|
10
10
|
clear(): Promise<boolean>;
|
|
11
|
+
/**
|
|
12
|
+
* v1.08 (T-1780801080001): rotate to the next NON-EXPIRED credential in
|
|
13
|
+
* the configured fleet and return the resulting session (runner_id
|
|
14
|
+
* preserved). Returns null when no healthy spare remains — the keychain
|
|
15
|
+
* provider always returns null (no fleet). The watch loop calls this when
|
|
16
|
+
* an in-place refresh is unavailable or has failed, so a runner whose
|
|
17
|
+
* access token expired can recover by switching credentials rather than
|
|
18
|
+
* quarantining.
|
|
19
|
+
*/
|
|
20
|
+
failover(reason?: string): Promise<StoredSession | null>;
|
|
21
|
+
/** Number of credentials configured (1 for keychain / single-token env). */
|
|
22
|
+
fleetSize(): number;
|
|
11
23
|
}
|
|
12
24
|
/** Prefix marking a runner as ephemeral to the autoscale sweep. */
|
|
13
25
|
export declare const EPHEMERAL_RUNNER_PREFIX = "acc-eph-";
|
|
@@ -27,15 +39,37 @@ interface JwtClaims {
|
|
|
27
39
|
* rather than an opaque 401 on the first RPC.
|
|
28
40
|
*/
|
|
29
41
|
export declare function decodeJwtClaims(jwt: string): JwtClaims | null;
|
|
42
|
+
/**
|
|
43
|
+
* v1.08 (T-1780801080001): split a fallback env value into individual tokens.
|
|
44
|
+
* Tolerant of commas, whitespace, and newlines so an operator can list the
|
|
45
|
+
* fleet however a deployment template renders it. Blank entries are dropped.
|
|
46
|
+
*/
|
|
47
|
+
export declare function splitTokenList(raw: string | undefined): string[];
|
|
30
48
|
export declare class EnvTokenProvider implements TokenProvider {
|
|
31
49
|
readonly mode: "env";
|
|
32
50
|
private session;
|
|
33
51
|
private initError;
|
|
52
|
+
private fleet;
|
|
53
|
+
private index;
|
|
54
|
+
private runnerId;
|
|
34
55
|
constructor(env?: NodeJS.ProcessEnv);
|
|
56
|
+
/** v1.08: build a StoredSession from a fleet credential (runner id preserved). */
|
|
57
|
+
private sessionFromCredential;
|
|
35
58
|
canRefresh(): boolean;
|
|
36
59
|
load(): Promise<StoredSession | null>;
|
|
37
60
|
save(session: StoredSession): Promise<void>;
|
|
38
61
|
clear(): Promise<boolean>;
|
|
62
|
+
/**
|
|
63
|
+
* v1.08 (T-1780801080001): advance to the next NON-EXPIRED credential in
|
|
64
|
+
* the fleet and return its session. Linear, forward-only: each call walks
|
|
65
|
+
* past the current index looking for a healthy spare, so repeated auth
|
|
66
|
+
* failures exhaust the fleet predictably instead of cycling. Returns null
|
|
67
|
+
* (leaving the current session intact) when no healthy spare remains, which
|
|
68
|
+
* is the watch loop's signal to fall through to quarantine. reason is for
|
|
69
|
+
* the caller's log line only.
|
|
70
|
+
*/
|
|
71
|
+
failover(_reason?: string): Promise<StoredSession | null>;
|
|
72
|
+
fleetSize(): number;
|
|
39
73
|
}
|
|
40
74
|
export declare function resolveTokenMode(env?: NodeJS.ProcessEnv): TokenMode;
|
|
41
75
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-provider.d.ts","sourceRoot":"","sources":["../src/token-provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"token-provider.d.ts","sourceRoot":"","sources":["../src/token-provider.ts"],"names":[],"mappings":"AAuEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,KAAK,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB;kEAC8D;IAC9D,UAAU,IAAI,OAAO,CAAC;IACtB,IAAI,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1B;;;;;;;;OAQG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IACzD,4EAA4E;IAC5E,SAAS,IAAI,MAAM,CAAC;CACrB;AAED,mEAAmE;AACnE,eAAO,MAAM,uBAAuB,aAAa,CAAC;AAElD,+DAA+D;AAC/D,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,UAAU,SAAS;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAiB7D;AA2BD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAMhE;AAeD,qBAAa,gBAAiB,YAAW,aAAa;IACpD,QAAQ,CAAC,IAAI,EAAG,KAAK,CAAU;IAC/B,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,SAAS,CAAuB;IAMxC,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,QAAQ,CAAM;gBAEV,GAAG,GAAE,MAAM,CAAC,UAAwB;IAiChD,kFAAkF;IAClF,OAAO,CAAC,qBAAqB;IAiB7B,UAAU,IAAI,OAAO;IAIf,IAAI,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAKrC,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAc3C,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAM/B;;;;;;;;OAQG;IACG,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAY/D,SAAS,IAAI,MAAM;CAGpB;AAED,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,SAAS,CAOhF;AAID;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAOhD;AAED,6DAA6D;AAC7D,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI,CAEvE"}
|
package/dist/token-provider.js
CHANGED
|
@@ -44,6 +44,24 @@
|
|
|
44
44
|
* works for the life of the process) and deliberately does NOT persist:
|
|
45
45
|
* an ephemeral runner that writes credentials to its writable layer
|
|
46
46
|
* would leak them into image diffs / volume snapshots.
|
|
47
|
+
*
|
|
48
|
+
* v1.08 (T-1780801080001, V4/E2): API-key fleet failover. An env-token
|
|
49
|
+
* runner can be given a FLEET of access tokens instead of a single one:
|
|
50
|
+
*
|
|
51
|
+
* ACC_RUNNER_ACCESS_TOKEN primary JWT (still required)
|
|
52
|
+
* ACC_RUNNER_ACCESS_TOKEN_FALLBACKS comma/whitespace-separated spare JWTs
|
|
53
|
+
* ACC_RUNNER_REFRESH_TOKEN_FALLBACKS optional spare refresh tokens, paired
|
|
54
|
+
* positionally with the access fallbacks
|
|
55
|
+
*
|
|
56
|
+
* When the active credential's access token expires (or an RPC/heartbeat
|
|
57
|
+
* comes back auth-shaped) and it cannot be refreshed in place, the runner
|
|
58
|
+
* calls failover() to advance to the next NON-EXPIRED credential in the
|
|
59
|
+
* fleet and rebuilds its Supabase client around the new JWT — recovering
|
|
60
|
+
* instead of quarantining. The runner identity (runner_id) is preserved
|
|
61
|
+
* across a failover so the realtime channel, heartbeats, and the registered
|
|
62
|
+
* acc.runners row all stay pointed at the same id; only the bearer rotates.
|
|
63
|
+
* The keychain (desktop) path has no fleet — failover() is a null there and
|
|
64
|
+
* recovery stays `acc-runner login`.
|
|
47
65
|
*/
|
|
48
66
|
import crypto from "node:crypto";
|
|
49
67
|
import { clearSession as keychainClear, loadSession as keychainLoad, saveSession as keychainSave, } from "./keychain.js";
|
|
@@ -94,39 +112,95 @@ class KeychainTokenProvider {
|
|
|
94
112
|
clear() {
|
|
95
113
|
return keychainClear();
|
|
96
114
|
}
|
|
115
|
+
// Desktop keychain holds a single credential — recovery is `acc-runner
|
|
116
|
+
// login`, not a fleet rotation. v1.08: a no-op so the watch loop can call
|
|
117
|
+
// failover() uniformly without branching on mode.
|
|
118
|
+
async failover() {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
fleetSize() {
|
|
122
|
+
return 1;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* v1.08 (T-1780801080001): split a fallback env value into individual tokens.
|
|
127
|
+
* Tolerant of commas, whitespace, and newlines so an operator can list the
|
|
128
|
+
* fleet however a deployment template renders it. Blank entries are dropped.
|
|
129
|
+
*/
|
|
130
|
+
export function splitTokenList(raw) {
|
|
131
|
+
if (!raw)
|
|
132
|
+
return [];
|
|
133
|
+
return raw
|
|
134
|
+
.split(/[\s,]+/)
|
|
135
|
+
.map((s) => s.trim())
|
|
136
|
+
.filter(Boolean);
|
|
137
|
+
}
|
|
138
|
+
/** v1.08: true when a JWT's `exp` claim is in the past (no exp = never). */
|
|
139
|
+
function credentialExpired(claims, now = Date.now()) {
|
|
140
|
+
if (typeof claims.exp !== "number")
|
|
141
|
+
return false;
|
|
142
|
+
return claims.exp * 1000 <= now;
|
|
97
143
|
}
|
|
98
144
|
export class EnvTokenProvider {
|
|
99
145
|
mode = "env";
|
|
100
146
|
session = null;
|
|
101
147
|
initError = null;
|
|
148
|
+
// v1.08 (T-1780801080001): the credential fleet and the index of the
|
|
149
|
+
// active credential. fleet holds only decodable candidates, in env order
|
|
150
|
+
// (primary first, then ACC_RUNNER_ACCESS_TOKEN_FALLBACKS). runnerId is
|
|
151
|
+
// minted once and preserved across failover so the runner identity is
|
|
152
|
+
// stable while the bearer rotates.
|
|
153
|
+
fleet = [];
|
|
154
|
+
index = 0;
|
|
155
|
+
runnerId = "";
|
|
102
156
|
constructor(env = process.env) {
|
|
103
|
-
const
|
|
104
|
-
if (!
|
|
157
|
+
const primary = env.ACC_RUNNER_ACCESS_TOKEN?.trim() ?? "";
|
|
158
|
+
if (!primary) {
|
|
105
159
|
this.initError =
|
|
106
160
|
"ACC_RUNNER_TOKEN_MODE=env requires ACC_RUNNER_ACCESS_TOKEN to be set";
|
|
107
161
|
return;
|
|
108
162
|
}
|
|
109
|
-
const
|
|
110
|
-
|
|
163
|
+
const accessTokens = [primary, ...splitTokenList(env.ACC_RUNNER_ACCESS_TOKEN_FALLBACKS)];
|
|
164
|
+
const refreshTokens = [
|
|
165
|
+
env.ACC_RUNNER_REFRESH_TOKEN?.trim() ?? "",
|
|
166
|
+
...splitTokenList(env.ACC_RUNNER_REFRESH_TOKEN_FALLBACKS),
|
|
167
|
+
];
|
|
168
|
+
for (let i = 0; i < accessTokens.length; i++) {
|
|
169
|
+
const claims = decodeJwtClaims(accessTokens[i]);
|
|
170
|
+
// Skip an undecodable fallback rather than poison the whole fleet; the
|
|
171
|
+
// primary's decodability still gates initError below so a lone garbage
|
|
172
|
+
// token fails loudly exactly as before.
|
|
173
|
+
if (!claims?.sub)
|
|
174
|
+
continue;
|
|
175
|
+
this.fleet.push({
|
|
176
|
+
accessToken: accessTokens[i],
|
|
177
|
+
refreshToken: refreshTokens[i]?.trim() ?? "",
|
|
178
|
+
claims: { ...claims, sub: claims.sub },
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
if (this.fleet.length === 0) {
|
|
111
182
|
this.initError =
|
|
112
183
|
"ACC_RUNNER_ACCESS_TOKEN is not a decodable JWT (expected the access token minted by the device-code exchange or the autoscale provider)";
|
|
113
184
|
return;
|
|
114
185
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
186
|
+
this.runnerId = env.ACC_RUNNER_ID?.trim() || mintEphemeralRunnerId();
|
|
187
|
+
this.session = this.sessionFromCredential(this.fleet[0]);
|
|
188
|
+
}
|
|
189
|
+
/** v1.08: build a StoredSession from a fleet credential (runner id preserved). */
|
|
190
|
+
sessionFromCredential(cred) {
|
|
191
|
+
return {
|
|
192
|
+
access_token: cred.accessToken,
|
|
119
193
|
// Empty string when refresh is unavailable; canRefresh() gates every
|
|
120
194
|
// consumer so the placeholder is never sent to /api/runner/refresh.
|
|
121
|
-
refresh_token: refreshToken,
|
|
122
|
-
access_expires_at: claims.exp
|
|
123
|
-
? new Date(claims.exp * 1000).toISOString()
|
|
195
|
+
refresh_token: cred.refreshToken,
|
|
196
|
+
access_expires_at: cred.claims.exp
|
|
197
|
+
? new Date(cred.claims.exp * 1000).toISOString()
|
|
124
198
|
: // No exp claim: treat as far-future so the watch loop doesn't
|
|
125
199
|
// spin on refresh attempts it can't perform.
|
|
126
200
|
new Date(Date.now() + 365 * 24 * 60 * 60 * 1000).toISOString(),
|
|
127
|
-
email: claims.email ?? null,
|
|
128
|
-
user_id: claims.sub,
|
|
129
|
-
runner_id: runnerId,
|
|
201
|
+
email: cred.claims.email ?? null,
|
|
202
|
+
user_id: cred.claims.sub,
|
|
203
|
+
runner_id: this.runnerId,
|
|
130
204
|
};
|
|
131
205
|
}
|
|
132
206
|
canRefresh() {
|
|
@@ -138,14 +212,49 @@ export class EnvTokenProvider {
|
|
|
138
212
|
return this.session;
|
|
139
213
|
}
|
|
140
214
|
async save(session) {
|
|
141
|
-
// In-memory only — see module docstring.
|
|
215
|
+
// In-memory only — see module docstring. Mirror a rotated access/refresh
|
|
216
|
+
// token back into the active fleet slot so a later failover-and-return
|
|
217
|
+
// doesn't drop the rotation.
|
|
142
218
|
this.session = session;
|
|
219
|
+
const active = this.fleet[this.index];
|
|
220
|
+
if (active) {
|
|
221
|
+
active.accessToken = session.access_token;
|
|
222
|
+
active.refreshToken = session.refresh_token;
|
|
223
|
+
const decoded = decodeJwtClaims(session.access_token);
|
|
224
|
+
if (decoded?.sub)
|
|
225
|
+
active.claims = { ...decoded, sub: decoded.sub };
|
|
226
|
+
}
|
|
143
227
|
}
|
|
144
228
|
async clear() {
|
|
145
229
|
const had = this.session !== null;
|
|
146
230
|
this.session = null;
|
|
147
231
|
return had;
|
|
148
232
|
}
|
|
233
|
+
/**
|
|
234
|
+
* v1.08 (T-1780801080001): advance to the next NON-EXPIRED credential in
|
|
235
|
+
* the fleet and return its session. Linear, forward-only: each call walks
|
|
236
|
+
* past the current index looking for a healthy spare, so repeated auth
|
|
237
|
+
* failures exhaust the fleet predictably instead of cycling. Returns null
|
|
238
|
+
* (leaving the current session intact) when no healthy spare remains, which
|
|
239
|
+
* is the watch loop's signal to fall through to quarantine. reason is for
|
|
240
|
+
* the caller's log line only.
|
|
241
|
+
*/
|
|
242
|
+
async failover(_reason) {
|
|
243
|
+
if (this.initError || this.fleet.length === 0)
|
|
244
|
+
return null;
|
|
245
|
+
const now = Date.now();
|
|
246
|
+
for (let next = this.index + 1; next < this.fleet.length; next++) {
|
|
247
|
+
if (credentialExpired(this.fleet[next].claims, now))
|
|
248
|
+
continue;
|
|
249
|
+
this.index = next;
|
|
250
|
+
this.session = this.sessionFromCredential(this.fleet[next]);
|
|
251
|
+
return this.session;
|
|
252
|
+
}
|
|
253
|
+
return null;
|
|
254
|
+
}
|
|
255
|
+
fleetSize() {
|
|
256
|
+
return this.fleet.length;
|
|
257
|
+
}
|
|
149
258
|
}
|
|
150
259
|
export function resolveTokenMode(env = process.env) {
|
|
151
260
|
const raw = env.ACC_RUNNER_TOKEN_MODE?.trim().toLowerCase();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-provider.js","sourceRoot":"","sources":["../src/token-provider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"token-provider.js","sourceRoot":"","sources":["../src/token-provider.ts"],"names":[],"mappings":"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"}
|
package/dist/watch.d.ts
CHANGED
|
@@ -290,6 +290,7 @@ interface WatchState {
|
|
|
290
290
|
singletonLock: SingletonLock | null;
|
|
291
291
|
}
|
|
292
292
|
export declare function resubscribeChannel(state: WatchState, factory: typeof runTask): Promise<void>;
|
|
293
|
+
export declare function reassertRunningClaims(state: WatchState): Promise<void>;
|
|
293
294
|
export declare function watchCommand(options?: WatchOptions): Promise<WatchHandle>;
|
|
294
295
|
export {};
|
|
295
296
|
//# sourceMappingURL=watch.d.ts.map
|
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,EAAc,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE3E,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,
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"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"}
|