@telorun/kernel 0.44.1 → 0.45.0
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/controller-loaders/npm-loader.d.ts +32 -0
- package/dist/controller-loaders/npm-loader.d.ts.map +1 -1
- package/dist/controller-loaders/npm-loader.js +76 -54
- package/dist/controller-loaders/npm-loader.js.map +1 -1
- package/dist/transports/egress-guard.d.ts +26 -0
- package/dist/transports/egress-guard.d.ts.map +1 -0
- package/dist/transports/egress-guard.js +99 -0
- package/dist/transports/egress-guard.js.map +1 -0
- package/dist/transports/oci/oci-client.d.ts +8 -0
- package/dist/transports/oci/oci-client.d.ts.map +1 -1
- package/dist/transports/oci/oci-client.js +62 -6
- package/dist/transports/oci/oci-client.js.map +1 -1
- package/dist/transports/oci/oci-ref.d.ts +1 -20
- package/dist/transports/oci/oci-ref.d.ts.map +1 -1
- package/dist/transports/oci/oci-ref.js +4 -35
- package/dist/transports/oci/oci-ref.js.map +1 -1
- package/dist/transports/oci/oci-transport.d.ts +1 -0
- package/dist/transports/oci/oci-transport.d.ts.map +1 -1
- package/dist/transports/oci/oci-transport.js +4 -0
- package/dist/transports/oci/oci-transport.js.map +1 -1
- package/dist/transports/registry-transport.d.ts +1 -0
- package/dist/transports/registry-transport.d.ts.map +1 -1
- package/dist/transports/registry-transport.js +36 -2
- package/dist/transports/registry-transport.js.map +1 -1
- package/dist/transports/transport-registry.d.ts +3 -0
- package/dist/transports/transport-registry.d.ts.map +1 -1
- package/dist/transports/transport-registry.js +5 -0
- package/dist/transports/transport-registry.js.map +1 -1
- package/dist/transports/transport.d.ts +9 -0
- package/dist/transports/transport.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/controller-loaders/npm-loader.ts +79 -50
- package/src/transports/egress-guard.ts +103 -0
- package/src/transports/oci/oci-client.ts +67 -6
- package/src/transports/oci/oci-ref.ts +4 -53
- package/src/transports/oci/oci-transport.ts +5 -0
- package/src/transports/registry-transport.ts +34 -1
- package/src/transports/transport-registry.ts +6 -0
- package/src/transports/transport.ts +10 -0
|
@@ -133,6 +133,34 @@ export declare class NpmControllerLoader {
|
|
|
133
133
|
*/
|
|
134
134
|
private installPackage;
|
|
135
135
|
}
|
|
136
|
+
/**
|
|
137
|
+
* Acquire a process-portable lock on `<root>/.lock` and execute fn while
|
|
138
|
+
* holding it. `fs.open(path, 'wx')` is atomic on POSIX and Windows, so
|
|
139
|
+
* concurrent processes serialize naturally.
|
|
140
|
+
*
|
|
141
|
+
* Liveness is a heartbeat: the holder bumps the lock's mtime every
|
|
142
|
+
* {@link LOCK_HEARTBEAT_MS} while `fn` runs, and a waiter reclaims a lock whose
|
|
143
|
+
* mtime is older than {@link LOCK_STALE_MS} (holder crashed/killed/vanished).
|
|
144
|
+
* mtime age is the *only* reclaim signal — the recorded `{pid, host}` is
|
|
145
|
+
* diagnostics, never probed for liveness, because PID identity is unreliable
|
|
146
|
+
* across container restarts and PID namespaces (the failure that deadlocked
|
|
147
|
+
* container boots). Reclaim is via atomic rename to a unique tombstone so two
|
|
148
|
+
* waiters that both see the lock stale can't both win.
|
|
149
|
+
*
|
|
150
|
+
* The lock guards the install-root manifest write, the package-manager
|
|
151
|
+
* invocation, and any state-file writes. It does NOT serialize *reads* of
|
|
152
|
+
* already-installed controllers — those run lock-free against a stable tree.
|
|
153
|
+
*/
|
|
154
|
+
declare function withInstallLock<T>(installRoot: string, fn: () => Promise<T>): Promise<T>;
|
|
155
|
+
/**
|
|
156
|
+
* If the lock at `lockPath` is stale (mtime older than {@link LOCK_STALE_MS}, so
|
|
157
|
+
* its holder stopped heartbeating), atomically claim and remove it and return
|
|
158
|
+
* true; otherwise return false. The claim is a `rename` to a unique tombstone:
|
|
159
|
+
* `rename` is atomic and fails for all but one racer, so two processes that
|
|
160
|
+
* both observe the same stale lock cannot both reclaim it — the loser's rename
|
|
161
|
+
* throws ENOENT (the file is already gone) and it simply retries the open.
|
|
162
|
+
*/
|
|
163
|
+
declare function reclaimIfStale(lockPath: string): Promise<boolean>;
|
|
136
164
|
/**
|
|
137
165
|
* Decide where the per-kernel install root lives for a given entry URL.
|
|
138
166
|
*
|
|
@@ -211,6 +239,10 @@ export declare const __testing__: {
|
|
|
211
239
|
resolveExportTargetValue: typeof resolveExportTargetValue;
|
|
212
240
|
tryResolveFile: typeof tryResolveFile;
|
|
213
241
|
computeInstallRoot: typeof computeInstallRoot;
|
|
242
|
+
withInstallLock: typeof withInstallLock;
|
|
243
|
+
reclaimIfStale: typeof reclaimIfStale;
|
|
244
|
+
LOCK_STALE_MS: number;
|
|
245
|
+
LOCK_HEARTBEAT_MS: number;
|
|
214
246
|
EXPORTS_MAX_DEPTH: number;
|
|
215
247
|
DEFAULT_RESOLVER_CONDITIONS: readonly string[];
|
|
216
248
|
REALM_COLLAPSE_NAMES: readonly string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"npm-loader.d.ts","sourceRoot":"","sources":["../../src/controller-loaders/npm-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"npm-loader.d.ts","sourceRoot":"","sources":["../../src/controller-loaders/npm-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AA+ElD;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,cAAc,GAAG,aAAa,GAAG,OAAO,CAAC;AAoBlF,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED,MAAM,WAAW,0BAA0B;IACzC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IACnC,kFAAkF;IAClF,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAS;IAE9C;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;IAEpD;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAE7D;;;;OAIG;IACH,OAAO,CAAC,SAAS,CAAC,CAAkB;IAEpC;;;;;;;;OAQG;IACH,OAAO,CAAC,QAAQ,CAA8B;gBAElC,OAAO,GAAE,0BAA+B;IAK9C,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAKjE;;;;;OAKG;IACG,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,MAAM,EAAE,gBAAgB,CAAC;QAAC,cAAc,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAA;KAAE,CAAC;IA2B3F;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;YAUX,sBAAsB;IAqFpC;;;;;;;OAOG;YACW,aAAa;IAe3B;;;;;;;;;;;;;;OAcG;YACW,cAAc;CAuH7B;AAoDD;;;;;;;;;;;;;;;;;GAiBG;AACH,iBAAe,eAAe,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA8DvF;AAED;;;;;;;GAOG;AACH,iBAAe,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAsBhE;AAmED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,iBAAS,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA4BpD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,iBAAS,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAMzE;AAED;;;;;;GAMG;AACH,iBAAS,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAKpE;AAsLD;;;;GAIG;AACH,iBAAe,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOrE;AAED,iBAAS,0BAA0B,CACjC,YAAY,EAAE,GAAG,EACjB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,GAChC,MAAM,GAAG,IAAI,CAIf;AAED,iBAAS,wBAAwB,CAC/B,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,EACjC,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,IAAI,CAoBf;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;CAcvB,CAAC"}
|
|
@@ -38,20 +38,35 @@ const PEER_INSTALL_FLAGS = PACKAGE_MANAGER === "npm"
|
|
|
38
38
|
? ["--no-strict-peer-dependencies"]
|
|
39
39
|
: [];
|
|
40
40
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
41
|
+
* A held lock is refreshed (its mtime bumped) every {@link LOCK_HEARTBEAT_MS}
|
|
42
|
+
* by the holder. Staleness is judged purely by mtime age — a lock older than
|
|
43
|
+
* this means the holder stopped heartbeating (crashed, was killed, or its
|
|
44
|
+
* container vanished), so it is safe to reclaim. This deliberately does NOT
|
|
45
|
+
* probe the recorded PID for liveness: PID identity is meaningless across
|
|
46
|
+
* container restarts and PID namespaces (deterministic PID reuse makes an
|
|
47
|
+
* unrelated process look like the dead holder on the same hostname), which is
|
|
48
|
+
* exactly what deadlocked container boots. The `{pid, host}` in the lock body
|
|
49
|
+
* is diagnostics for humans, never a reclaim signal. Must be comfortably
|
|
50
|
+
* larger than the heartbeat interval so a briefly-descheduled holder (GC
|
|
51
|
+
* pause, busy event loop) is not reclaimed out from under itself.
|
|
44
52
|
*/
|
|
45
|
-
const LOCK_STALE_MS =
|
|
53
|
+
const LOCK_STALE_MS = 30000;
|
|
54
|
+
/** How often the holder refreshes the lock mtime while `fn` runs. Well under
|
|
55
|
+
* {@link LOCK_STALE_MS} so several heartbeats are missed before a live holder
|
|
56
|
+
* is ever judged stale. */
|
|
57
|
+
const LOCK_HEARTBEAT_MS = 5000;
|
|
46
58
|
/**
|
|
47
59
|
* Total wall-clock cap for waiting on the install lock — enough for a slow
|
|
48
|
-
* first install on a peer process to finish, short enough that a
|
|
49
|
-
* CI job fails loudly rather than hanging for hours. The retry
|
|
50
|
-
* trades wakeup latency vs. wasted polls; 500ms is well below the
|
|
51
|
-
* holder's typical hold time.
|
|
60
|
+
* first install on a peer process to finish, short enough that a genuinely
|
|
61
|
+
* deadlocked CI job fails loudly rather than hanging for hours. The retry
|
|
62
|
+
* interval trades wakeup latency vs. wasted polls; 500ms is well below the
|
|
63
|
+
* lock holder's typical hold time.
|
|
52
64
|
*/
|
|
53
65
|
const LOCK_WAIT_MAX_MS = 5 * 60000;
|
|
54
66
|
const LOCK_RETRY_MS = 500;
|
|
67
|
+
/** After this long waiting on a lock, emit one stderr line so a slow wait is
|
|
68
|
+
* visible instead of looking like a silent hang. */
|
|
69
|
+
const LOCK_WAIT_NOTICE_MS = 2000;
|
|
55
70
|
/**
|
|
56
71
|
* The npm-loader maintains a single install root per kernel process. For a
|
|
57
72
|
* local entry manifest (`file://` URL or bare path) the root lives at
|
|
@@ -420,9 +435,17 @@ async function resolveKernelPackageRoot(name) {
|
|
|
420
435
|
}
|
|
421
436
|
/**
|
|
422
437
|
* Acquire a process-portable lock on `<root>/.lock` and execute fn while
|
|
423
|
-
* holding it.
|
|
424
|
-
*
|
|
425
|
-
*
|
|
438
|
+
* holding it. `fs.open(path, 'wx')` is atomic on POSIX and Windows, so
|
|
439
|
+
* concurrent processes serialize naturally.
|
|
440
|
+
*
|
|
441
|
+
* Liveness is a heartbeat: the holder bumps the lock's mtime every
|
|
442
|
+
* {@link LOCK_HEARTBEAT_MS} while `fn` runs, and a waiter reclaims a lock whose
|
|
443
|
+
* mtime is older than {@link LOCK_STALE_MS} (holder crashed/killed/vanished).
|
|
444
|
+
* mtime age is the *only* reclaim signal — the recorded `{pid, host}` is
|
|
445
|
+
* diagnostics, never probed for liveness, because PID identity is unreliable
|
|
446
|
+
* across container restarts and PID namespaces (the failure that deadlocked
|
|
447
|
+
* container boots). Reclaim is via atomic rename to a unique tombstone so two
|
|
448
|
+
* waiters that both see the lock stale can't both win.
|
|
426
449
|
*
|
|
427
450
|
* The lock guards the install-root manifest write, the package-manager
|
|
428
451
|
* invocation, and any state-file writes. It does NOT serialize *reads* of
|
|
@@ -434,6 +457,7 @@ async function withInstallLock(installRoot, fn) {
|
|
|
434
457
|
const lockBody = JSON.stringify({ pid: process.pid, host: os.hostname(), startedAt: Date.now() });
|
|
435
458
|
let handle = null;
|
|
436
459
|
const waitedSince = Date.now();
|
|
460
|
+
let noticed = false;
|
|
437
461
|
while (true) {
|
|
438
462
|
try {
|
|
439
463
|
handle = await fs.open(lockPath, "wx");
|
|
@@ -443,29 +467,39 @@ async function withInstallLock(installRoot, fn) {
|
|
|
443
467
|
catch (err) {
|
|
444
468
|
if (err?.code !== "EEXIST")
|
|
445
469
|
throw err;
|
|
446
|
-
// Lock exists.
|
|
447
|
-
|
|
448
|
-
if (await isLockStale(lockPath)) {
|
|
449
|
-
await fs.rm(lockPath, { force: true });
|
|
470
|
+
// Lock exists. Reclaim it only if its heartbeat has gone silent.
|
|
471
|
+
if (await reclaimIfStale(lockPath))
|
|
450
472
|
continue;
|
|
451
|
-
|
|
452
|
-
if (
|
|
473
|
+
const waited = Date.now() - waitedSince;
|
|
474
|
+
if (waited > LOCK_WAIT_MAX_MS) {
|
|
453
475
|
throw new Error(`[telo] timed out waiting for install lock at ${lockPath} ` +
|
|
454
|
-
`(held >${LOCK_WAIT_MAX_MS / 60000} min). ` +
|
|
476
|
+
`(held >${LOCK_WAIT_MAX_MS / 60000} min with a live heartbeat). ` +
|
|
455
477
|
`Inspect the lock file or remove it manually if no other Telo process is running.`);
|
|
456
478
|
}
|
|
479
|
+
if (!noticed && waited > LOCK_WAIT_NOTICE_MS) {
|
|
480
|
+
noticed = true;
|
|
481
|
+
process.stderr.write(`[telo] waiting for controller install lock at ${lockPath}…\n`);
|
|
482
|
+
}
|
|
457
483
|
await sleep(LOCK_RETRY_MS);
|
|
458
484
|
}
|
|
459
485
|
}
|
|
486
|
+
// Keep the lock fresh while `fn` runs so a slow-but-live install is never
|
|
487
|
+
// reclaimed. `unref` so the heartbeat can't by itself keep the process alive.
|
|
488
|
+
const heartbeat = setInterval(() => {
|
|
489
|
+
const now = new Date();
|
|
490
|
+
fs.utimes(lockPath, now, now).catch(() => { });
|
|
491
|
+
}, LOCK_HEARTBEAT_MS);
|
|
492
|
+
heartbeat.unref?.();
|
|
460
493
|
try {
|
|
461
494
|
return await fn();
|
|
462
495
|
}
|
|
463
496
|
finally {
|
|
497
|
+
clearInterval(heartbeat);
|
|
464
498
|
// The fd close races nothing important: if it fails, the FD is reaped on
|
|
465
499
|
// process exit. The unlink is the dangerous one — a non-ENOENT failure
|
|
466
500
|
// (permissions, read-only mount) means every subsequent kernel waits
|
|
467
501
|
// LOCK_STALE_MS before reclaiming. Surface it so the cause is visible
|
|
468
|
-
// rather than hiding behind a silent
|
|
502
|
+
// rather than hiding behind a silent hang.
|
|
469
503
|
await handle.close().catch(() => { });
|
|
470
504
|
try {
|
|
471
505
|
await fs.rm(lockPath, { force: true });
|
|
@@ -477,56 +511,40 @@ async function withInstallLock(installRoot, fn) {
|
|
|
477
511
|
}
|
|
478
512
|
}
|
|
479
513
|
}
|
|
480
|
-
|
|
514
|
+
/**
|
|
515
|
+
* If the lock at `lockPath` is stale (mtime older than {@link LOCK_STALE_MS}, so
|
|
516
|
+
* its holder stopped heartbeating), atomically claim and remove it and return
|
|
517
|
+
* true; otherwise return false. The claim is a `rename` to a unique tombstone:
|
|
518
|
+
* `rename` is atomic and fails for all but one racer, so two processes that
|
|
519
|
+
* both observe the same stale lock cannot both reclaim it — the loser's rename
|
|
520
|
+
* throws ENOENT (the file is already gone) and it simply retries the open.
|
|
521
|
+
*/
|
|
522
|
+
async function reclaimIfStale(lockPath) {
|
|
481
523
|
let stat;
|
|
482
524
|
try {
|
|
483
525
|
stat = await fs.stat(lockPath);
|
|
484
526
|
}
|
|
485
527
|
catch (err) {
|
|
486
|
-
// Race: lock vanished while we inspected it.
|
|
528
|
+
// Race: lock vanished while we inspected it. Retry the open immediately.
|
|
487
529
|
if (err?.code === "ENOENT")
|
|
488
|
-
return
|
|
530
|
+
return true;
|
|
489
531
|
throw err;
|
|
490
532
|
}
|
|
491
|
-
|
|
492
|
-
if (age < LOCK_STALE_MS)
|
|
533
|
+
if (Date.now() - stat.mtimeMs < LOCK_STALE_MS)
|
|
493
534
|
return false;
|
|
494
|
-
|
|
535
|
+
// Stale — the holder's heartbeat is silent. Claim via atomic rename; only one
|
|
536
|
+
// racer wins, the rest get ENOENT and fall back to retrying the open.
|
|
537
|
+
const tombstone = `${lockPath}.stale.${process.pid}.${stat.mtimeMs}`;
|
|
495
538
|
try {
|
|
496
|
-
|
|
539
|
+
await fs.rename(lockPath, tombstone);
|
|
497
540
|
}
|
|
498
541
|
catch (err) {
|
|
499
542
|
if (err?.code === "ENOENT")
|
|
500
|
-
return
|
|
543
|
+
return true; // another waiter reclaimed it first
|
|
501
544
|
throw err;
|
|
502
545
|
}
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
// JSON). Treating either as held would deadlock; throwing here would block
|
|
506
|
-
// every controller load behind a broken file the operator may not even
|
|
507
|
-
// notice exists.
|
|
508
|
-
if (!body)
|
|
509
|
-
return true;
|
|
510
|
-
let parsed;
|
|
511
|
-
try {
|
|
512
|
-
parsed = JSON.parse(body);
|
|
513
|
-
}
|
|
514
|
-
catch {
|
|
515
|
-
return true;
|
|
516
|
-
}
|
|
517
|
-
if (!parsed?.pid)
|
|
518
|
-
return true;
|
|
519
|
-
if (parsed.host && parsed.host !== os.hostname())
|
|
520
|
-
return false; // different host: assume held
|
|
521
|
-
try {
|
|
522
|
-
// signal 0 throws if the PID isn't alive (or is owned by a different user)
|
|
523
|
-
process.kill(parsed.pid, 0);
|
|
524
|
-
return false;
|
|
525
|
-
}
|
|
526
|
-
catch (err) {
|
|
527
|
-
// ESRCH = no such process. EPERM = exists but we can't signal it; treat as alive.
|
|
528
|
-
return err?.code === "ESRCH";
|
|
529
|
-
}
|
|
546
|
+
await fs.rm(tombstone, { force: true });
|
|
547
|
+
return true;
|
|
530
548
|
}
|
|
531
549
|
async function runPackageManager(cwd, args) {
|
|
532
550
|
try {
|
|
@@ -902,6 +920,10 @@ export const __testing__ = {
|
|
|
902
920
|
resolveExportTargetValue,
|
|
903
921
|
tryResolveFile,
|
|
904
922
|
computeInstallRoot,
|
|
923
|
+
withInstallLock,
|
|
924
|
+
reclaimIfStale,
|
|
925
|
+
LOCK_STALE_MS,
|
|
926
|
+
LOCK_HEARTBEAT_MS,
|
|
905
927
|
EXPORTS_MAX_DEPTH,
|
|
906
928
|
DEFAULT_RESOLVER_CONDITIONS,
|
|
907
929
|
REALM_COLLAPSE_NAMES,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"npm-loader.js","sourceRoot":"","sources":["../../src/controller-loaders/npm-loader.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"npm-loader.js","sourceRoot":"","sources":["../../src/controller-loaders/npm-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** Egress policy for transport fetches, from `TELO_EGRESS`:
|
|
2
|
+
* - unset / `open` — no restriction (the default; a developer machine).
|
|
3
|
+
* - `public-only` — refuse any host that is, or resolves to, a private,
|
|
4
|
+
* loopback, link-local, or carrier-grade-NAT address.
|
|
5
|
+
*
|
|
6
|
+
* Built for deployments whose transports fetch attacker-suppliable refs — the
|
|
7
|
+
* discovery hub's tracker is the first: a registered `oci://10.0.0.5/…` or
|
|
8
|
+
* `https://169.254.169.254/…` ref must not become a request into the hub's
|
|
9
|
+
* own network. A guardrail, not isolation: it checks the name a fetch starts
|
|
10
|
+
* at, so redirect hops are not re-checked, and the check-then-fetch gap is
|
|
11
|
+
* open to DNS rebinding (a hostile resolver can answer public for the check
|
|
12
|
+
* and private for the fetch — the classic bypass for this guard shape).
|
|
13
|
+
* Network-level egress policy on the deployment is the actual boundary;
|
|
14
|
+
* this guard is defense-in-depth, not a substitute. */
|
|
15
|
+
export declare class EgressDeniedError extends Error {
|
|
16
|
+
constructor(host: string, address: string);
|
|
17
|
+
}
|
|
18
|
+
/** True when `address` (an IP literal) is not publicly routable. */
|
|
19
|
+
export declare function isPrivateAddress(address: string): boolean;
|
|
20
|
+
/** Assert `hostOrUrl` (a `host[:port]` or a full URL) may be fetched under the
|
|
21
|
+
* active egress policy. No-op unless `TELO_EGRESS=public-only`. An IP-literal
|
|
22
|
+
* host is judged directly; a hostname is resolved and every returned address
|
|
23
|
+
* must be public. Throws {@link EgressDeniedError}; DNS failure surfaces as
|
|
24
|
+
* the underlying error (never a silent pass). */
|
|
25
|
+
export declare function assertPublicEgress(hostOrUrl: string): Promise<void>;
|
|
26
|
+
//# sourceMappingURL=egress-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"egress-guard.d.ts","sourceRoot":"","sources":["../../src/transports/egress-guard.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;wDAawD;AACxD,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAQ1C;AAkCD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAKzD;AAUD;;;;kDAIkD;AAClD,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBzE"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { lookup } from "node:dns/promises";
|
|
2
|
+
import { isIP } from "node:net";
|
|
3
|
+
import { hostEnv } from "../host-env.js";
|
|
4
|
+
/** Egress policy for transport fetches, from `TELO_EGRESS`:
|
|
5
|
+
* - unset / `open` — no restriction (the default; a developer machine).
|
|
6
|
+
* - `public-only` — refuse any host that is, or resolves to, a private,
|
|
7
|
+
* loopback, link-local, or carrier-grade-NAT address.
|
|
8
|
+
*
|
|
9
|
+
* Built for deployments whose transports fetch attacker-suppliable refs — the
|
|
10
|
+
* discovery hub's tracker is the first: a registered `oci://10.0.0.5/…` or
|
|
11
|
+
* `https://169.254.169.254/…` ref must not become a request into the hub's
|
|
12
|
+
* own network. A guardrail, not isolation: it checks the name a fetch starts
|
|
13
|
+
* at, so redirect hops are not re-checked, and the check-then-fetch gap is
|
|
14
|
+
* open to DNS rebinding (a hostile resolver can answer public for the check
|
|
15
|
+
* and private for the fetch — the classic bypass for this guard shape).
|
|
16
|
+
* Network-level egress policy on the deployment is the actual boundary;
|
|
17
|
+
* this guard is defense-in-depth, not a substitute. */
|
|
18
|
+
export class EgressDeniedError extends Error {
|
|
19
|
+
constructor(host, address) {
|
|
20
|
+
super(`Egress to '${host}' denied: it resolves to the non-public address ${address} ` +
|
|
21
|
+
`(TELO_EGRESS=public-only). Refusing to fetch from private, loopback, ` +
|
|
22
|
+
`link-local, or CGNAT ranges.`);
|
|
23
|
+
this.name = "EgressDeniedError";
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function isPrivateIpv4(address) {
|
|
27
|
+
const octets = address.split(".").map(Number);
|
|
28
|
+
if (octets.length !== 4 || octets.some((o) => Number.isNaN(o)))
|
|
29
|
+
return true; // malformed → deny
|
|
30
|
+
const [a, b] = octets;
|
|
31
|
+
return (a === 0 || // "this network"
|
|
32
|
+
a === 10 ||
|
|
33
|
+
a === 127 || // loopback
|
|
34
|
+
(a === 100 && b >= 64 && b <= 127) || // CGNAT 100.64/10
|
|
35
|
+
(a === 169 && b === 254) || // link-local (incl. cloud metadata)
|
|
36
|
+
(a === 172 && b >= 16 && b <= 31) ||
|
|
37
|
+
(a === 192 && b === 168));
|
|
38
|
+
}
|
|
39
|
+
function isPrivateIpv6(address) {
|
|
40
|
+
const lower = address.toLowerCase();
|
|
41
|
+
// IPv4-mapped (::ffff:a.b.c.d) — judge the embedded IPv4.
|
|
42
|
+
const mapped = lower.match(/^::ffff:(\d+\.\d+\.\d+\.\d+)$/);
|
|
43
|
+
if (mapped)
|
|
44
|
+
return isPrivateIpv4(mapped[1]);
|
|
45
|
+
return (lower === "::" ||
|
|
46
|
+
lower === "::1" || // loopback
|
|
47
|
+
lower.startsWith("fc") || // unique-local fc00::/7
|
|
48
|
+
lower.startsWith("fd") ||
|
|
49
|
+
lower.startsWith("fe8") || // link-local fe80::/10
|
|
50
|
+
lower.startsWith("fe9") ||
|
|
51
|
+
lower.startsWith("fea") ||
|
|
52
|
+
lower.startsWith("feb"));
|
|
53
|
+
}
|
|
54
|
+
/** True when `address` (an IP literal) is not publicly routable. */
|
|
55
|
+
export function isPrivateAddress(address) {
|
|
56
|
+
const family = isIP(address);
|
|
57
|
+
if (family === 4)
|
|
58
|
+
return isPrivateIpv4(address);
|
|
59
|
+
if (family === 6)
|
|
60
|
+
return isPrivateIpv6(address);
|
|
61
|
+
return true; // not an IP literal → caller passed garbage; deny
|
|
62
|
+
}
|
|
63
|
+
function policyActive() {
|
|
64
|
+
// Read through `hostEnv()` like every kernel TELO_* read: `boot()` replaces
|
|
65
|
+
// `process.env` with the guardrail proxy that hides manifest-declared keys,
|
|
66
|
+
// so a manifest binding `env: TELO_EGRESS` must not be able to silently
|
|
67
|
+
// switch this security control off.
|
|
68
|
+
return (hostEnv().TELO_EGRESS ?? "").toLowerCase() === "public-only";
|
|
69
|
+
}
|
|
70
|
+
/** Assert `hostOrUrl` (a `host[:port]` or a full URL) may be fetched under the
|
|
71
|
+
* active egress policy. No-op unless `TELO_EGRESS=public-only`. An IP-literal
|
|
72
|
+
* host is judged directly; a hostname is resolved and every returned address
|
|
73
|
+
* must be public. Throws {@link EgressDeniedError}; DNS failure surfaces as
|
|
74
|
+
* the underlying error (never a silent pass). */
|
|
75
|
+
export async function assertPublicEgress(hostOrUrl) {
|
|
76
|
+
if (!policyActive())
|
|
77
|
+
return;
|
|
78
|
+
let hostname = hostOrUrl;
|
|
79
|
+
if (hostOrUrl.includes("://")) {
|
|
80
|
+
hostname = new URL(hostOrUrl).hostname;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
// Bare host[:port] — URL parsing handles IPv6 brackets and ports.
|
|
84
|
+
hostname = new URL(`https://${hostOrUrl}`).hostname;
|
|
85
|
+
}
|
|
86
|
+
// URL wraps IPv6 literals in brackets; strip for isIP/lookup.
|
|
87
|
+
const bare = hostname.replace(/^\[|\]$/g, "");
|
|
88
|
+
if (isIP(bare)) {
|
|
89
|
+
if (isPrivateAddress(bare))
|
|
90
|
+
throw new EgressDeniedError(bare, bare);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const addresses = await lookup(bare, { all: true, verbatim: true });
|
|
94
|
+
for (const { address } of addresses) {
|
|
95
|
+
if (isPrivateAddress(address))
|
|
96
|
+
throw new EgressDeniedError(bare, address);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=egress-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"egress-guard.js","sourceRoot":"","sources":["../../src/transports/egress-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,6 +39,14 @@ export declare class OciClient {
|
|
|
39
39
|
private fetchToken;
|
|
40
40
|
pullManifest(reference: string): Promise<OciManifest>;
|
|
41
41
|
pullBlob(digest: string): Promise<Buffer>;
|
|
42
|
+
/** Content-identity digest of the manifest a reference resolves to, via a
|
|
43
|
+
* HEAD request — no blob download. Falls back to hashing the manifest body
|
|
44
|
+
* when the registry omits `Docker-Content-Digest`. `null` when the
|
|
45
|
+
* reference does not exist. */
|
|
46
|
+
headManifest(reference: string): Promise<string | null>;
|
|
47
|
+
/** All tags, following the distribution spec's pagination (`Link: …;
|
|
48
|
+
* rel="next"` with `last=` cursors) so a many-versioned repo enumerates
|
|
49
|
+
* fully — registries cap a single page (Docker Hub at 100). */
|
|
42
50
|
listTags(): Promise<string[]>;
|
|
43
51
|
/** Upload `bytes` as a blob (skipped when already present), returning its
|
|
44
52
|
* `sha256:<hex>` digest. Two-step upload: obtain a session, then PUT with
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oci-client.d.ts","sourceRoot":"","sources":["../../../src/transports/oci/oci-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"oci-client.d.ts","sourceRoot":"","sources":["../../../src/transports/oci/oci-client.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,qBAAqB,uCAAuC,CAAC;AAC1E,eAAO,MAAM,uBAAuB,+CAA+C,CAAC;AACpF,eAAO,MAAM,2BAA2B,sCAAsC,CAAC;AAa/E,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AA2BD;;;;;;;GAOG;AACH,qBAAa,SAAS;IAIlB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAJvB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;gBAGvC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM;IAG/B,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,SAAS;IAIjB;gFAC4E;YAC9D,WAAW;IA4BzB;2EACuE;YACzD,UAAU;IAuBlB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAcrD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAU/C;;;oCAGgC;IAC1B,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA2B7D;;oEAEgE;IAC1D,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAoBnC;;sBAEkB;IACZ,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IA+C5C,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAe3E,qEAAqE;IAC/D,eAAe,IAAI,OAAO,CAAC,aAAa,CAAC;CAShD"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
+
import { assertPublicEgress } from "../egress-guard.js";
|
|
2
3
|
import { resolveDockerCredential } from "./docker-credentials.js";
|
|
3
4
|
export const TELO_LAYER_MEDIA_TYPE = "application/vnd.telo.module.v1+tar";
|
|
4
5
|
export const OCI_MANIFEST_MEDIA_TYPE = "application/vnd.oci.image.manifest.v1+json";
|
|
@@ -15,6 +16,18 @@ const MANIFEST_ACCEPT = [
|
|
|
15
16
|
function sha256Hex(bytes) {
|
|
16
17
|
return createHash("sha256").update(bytes).digest("hex");
|
|
17
18
|
}
|
|
19
|
+
/** Resolve the `rel="next"` target of a `Link` header against the registry
|
|
20
|
+
* origin, or `null` when there is no next page. */
|
|
21
|
+
function nextPageUrl(linkHeader, origin) {
|
|
22
|
+
if (!linkHeader)
|
|
23
|
+
return null;
|
|
24
|
+
for (const part of linkHeader.split(",")) {
|
|
25
|
+
const m = part.match(/<([^>]+)>\s*;[^,]*rel="?next"?/i);
|
|
26
|
+
if (m)
|
|
27
|
+
return new URL(m[1], origin).href;
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
18
31
|
/** Parse a `WWW-Authenticate: Bearer realm="...",service="...",scope="..."` header. */
|
|
19
32
|
function parseBearerChallenge(header) {
|
|
20
33
|
const out = {};
|
|
@@ -50,6 +63,9 @@ export class OciClient {
|
|
|
50
63
|
/** Fetch with the bearer-token dance: try (cached token if any), and on 401
|
|
51
64
|
* resolve a token from the `WWW-Authenticate` challenge and retry once. */
|
|
52
65
|
async authedFetch(url, init, scope) {
|
|
66
|
+
// Registry refs are attacker-suppliable once public registration exists —
|
|
67
|
+
// refuse non-public hosts under TELO_EGRESS=public-only (no-op otherwise).
|
|
68
|
+
await assertPublicEgress(url);
|
|
53
69
|
const withToken = (token) => {
|
|
54
70
|
const headers = new Headers(init.headers);
|
|
55
71
|
if (token)
|
|
@@ -77,6 +93,10 @@ export class OciClient {
|
|
|
77
93
|
const params = parseBearerChallenge(challenge);
|
|
78
94
|
if (!params.realm)
|
|
79
95
|
return null;
|
|
96
|
+
// The token realm comes from the registry's own WWW-Authenticate header —
|
|
97
|
+
// an attacker-controlled registry could point it anywhere, so it is
|
|
98
|
+
// egress-checked like any other host.
|
|
99
|
+
await assertPublicEgress(params.realm);
|
|
80
100
|
const tokenUrl = new URL(params.realm);
|
|
81
101
|
if (params.service)
|
|
82
102
|
tokenUrl.searchParams.set("service", params.service);
|
|
@@ -107,15 +127,51 @@ export class OciClient {
|
|
|
107
127
|
}
|
|
108
128
|
return Buffer.from(await res.arrayBuffer());
|
|
109
129
|
}
|
|
110
|
-
|
|
111
|
-
|
|
130
|
+
/** Content-identity digest of the manifest a reference resolves to, via a
|
|
131
|
+
* HEAD request — no blob download. Falls back to hashing the manifest body
|
|
132
|
+
* when the registry omits `Docker-Content-Digest`. `null` when the
|
|
133
|
+
* reference does not exist. */
|
|
134
|
+
async headManifest(reference) {
|
|
135
|
+
const url = `${this.base()}/manifests/${reference}`;
|
|
136
|
+
const head = await this.authedFetch(url, { method: "HEAD", headers: { accept: MANIFEST_ACCEPT } }, this.pullScope());
|
|
137
|
+
await head.text().catch(() => { });
|
|
138
|
+
if (head.status === 404)
|
|
139
|
+
return null;
|
|
140
|
+
if (!head.ok) {
|
|
141
|
+
throw new Error(`OCI head manifest ${this.repo}:${reference} on ${this.host} failed: ${head.status} ${head.statusText}`);
|
|
142
|
+
}
|
|
143
|
+
const digest = head.headers.get("docker-content-digest");
|
|
144
|
+
if (digest)
|
|
145
|
+
return digest;
|
|
146
|
+
const res = await this.authedFetch(url, { headers: { accept: MANIFEST_ACCEPT } }, this.pullScope());
|
|
112
147
|
if (res.status === 404)
|
|
113
|
-
return
|
|
148
|
+
return null;
|
|
114
149
|
if (!res.ok) {
|
|
115
|
-
throw new Error(`OCI
|
|
150
|
+
throw new Error(`OCI pull manifest ${this.repo}:${reference} on ${this.host} failed: ${res.status} ${res.statusText}`);
|
|
116
151
|
}
|
|
117
|
-
|
|
118
|
-
|
|
152
|
+
return `sha256:${sha256Hex(new Uint8Array(await res.arrayBuffer()))}`;
|
|
153
|
+
}
|
|
154
|
+
/** All tags, following the distribution spec's pagination (`Link: …;
|
|
155
|
+
* rel="next"` with `last=` cursors) so a many-versioned repo enumerates
|
|
156
|
+
* fully — registries cap a single page (Docker Hub at 100). */
|
|
157
|
+
async listTags() {
|
|
158
|
+
const tags = [];
|
|
159
|
+
let url = `${this.base()}/tags/list?n=1000`;
|
|
160
|
+
const seen = new Set();
|
|
161
|
+
while (url && !seen.has(url)) {
|
|
162
|
+
seen.add(url);
|
|
163
|
+
const res = await this.authedFetch(url, {}, this.pullScope());
|
|
164
|
+
if (res.status === 404)
|
|
165
|
+
return tags;
|
|
166
|
+
if (!res.ok) {
|
|
167
|
+
throw new Error(`OCI list tags for ${this.repo} on ${this.host} failed: ${res.status} ${res.statusText}`);
|
|
168
|
+
}
|
|
169
|
+
const body = (await res.json());
|
|
170
|
+
if (Array.isArray(body.tags))
|
|
171
|
+
tags.push(...body.tags);
|
|
172
|
+
url = nextPageUrl(res.headers.get("link"), `https://${this.host}`);
|
|
173
|
+
}
|
|
174
|
+
return tags;
|
|
119
175
|
}
|
|
120
176
|
/** Upload `bytes` as a blob (skipped when already present), returning its
|
|
121
177
|
* `sha256:<hex>` digest. Two-step upload: obtain a session, then PUT with
|