velocious 1.0.685 → 1.0.687

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/README.md CHANGED
@@ -34,7 +34,7 @@
34
34
  * Cross-process broadcast bus for `broadcastToChannel` via `velocious beacon`, including background job runner processes (see [docs/beacon.md](docs/beacon.md))
35
35
  * Websocket channel primitives for 1:N pub/sub over the shared session socket (`channel-subscribe` protocol): `matches()`-routed streams, interest-gated event-log persistence with 10-minute retention, stream-scoped `lastEventId` replay with `channel-replay-gap` gap reporting, and `{liveOnly: true}` channels that never reach the replay log (see [docs/websocket-channels.md](docs/websocket-channels.md))
36
36
  * Rails-style application process initializer teardown with immutable process identity, reverse idempotent shutdown, and explicit HTTP/background-job ownership (see [docs/application-process-lifecycle.md](docs/application-process-lifecycle.md))
37
- * Configurable HTTP server worker handlers plus backpressured, descriptor-only file responses with completion callbacks (see [docs/http-server.md](docs/http-server.md))
37
+ * Configurable HTTP server worker handlers plus backpressured, descriptor-only file responses with completion callbacks, and a length-determined `serveFile` static-asset helper for proxies that cannot handle chunked transfer encoding (see [docs/http-server.md](docs/http-server.md))
38
38
  * Explicit database-free in-process HTTP applications with optional request and buffered-response byte limits (see [docs/http-server.md](docs/http-server.md#database-free-applications))
39
39
  * Client-disconnect hooks for buffered (`request.onClientDisconnect` / `request.clientDisconnected`) alongside the streaming `response.onStreamClose` so long-running handlers can settle in-flight work when the socket goes away (see [docs/http-server.md](docs/http-server.md#client-disconnect-for-buffered-requests))
40
40
  * Default-on buffered HTTP response compression with Brotli/gzip content negotiation, global and per-response opt-outs, and HEAD-correct representation headers (see [docs/http-server.md](docs/http-server.md#response-compression))
@@ -7,6 +7,49 @@ import JsonSocket from "./json-socket.js"
7
7
 
8
8
  const DEFAULT_REQUEST_TIMEOUT_MS = 10000
9
9
  export const MAX_LIFECYCLE_REQUEST_TIMEOUT_MS = 120000
10
+ const LIFECYCLE_CONNECT_RETRY_DELAY_MS = 50
11
+ const TRANSIENT_CONNECT_ERROR_CODES = new Set(["ECONNABORTED", "ECONNREFUSED", "ENOENT"])
12
+
13
+ /**
14
+ * Whether a lifecycle request failure is a transient "endpoint not ready yet"
15
+ * connect failure (the coordinator's control socket opens asynchronously after
16
+ * its process starts) rather than a definitive protocol or state rejection.
17
+ * @param {unknown} error - The rejection reason.
18
+ * @returns {boolean} - Whether the request may be retried.
19
+ */
20
+ function isTransientConnectError(error) {
21
+ if (typeof error !== "object" || error === null) return false
22
+ const code = /** @type {{code?: unknown}} */ (error).code
23
+
24
+ return typeof code === "string" && TRANSIENT_CONNECT_ERROR_CODES.has(code)
25
+ }
26
+
27
+ /**
28
+ * Waits before the next lifecycle connect retry, rejecting with the signal
29
+ * reason when the caller-owned deadline fires mid-wait.
30
+ * @param {number} delayMs - Wait between attempts.
31
+ * @param {AbortSignal} signal - Caller-owned deadline signal.
32
+ * @returns {Promise<void>} - Resolves after the delay, or rejects on abort.
33
+ */
34
+ async function waitBeforeNextAttempt(delayMs, signal) {
35
+ await new Promise((resolve, reject) => {
36
+ if (signal.aborted) {
37
+ reject(signal.reason)
38
+
39
+ return
40
+ }
41
+ const timer = setTimeout(() => {
42
+ signal.removeEventListener("abort", onAbort)
43
+ resolve(undefined)
44
+ }, delayMs)
45
+ const onAbort = () => {
46
+ clearTimeout(timer)
47
+ reject(signal.reason)
48
+ }
49
+
50
+ signal.addEventListener("abort", onAbort)
51
+ })
52
+ }
10
53
 
11
54
  /** One-request acknowledged lifecycle client. */
12
55
  export default class BackgroundJobsLifecycleClient {
@@ -59,14 +102,35 @@ export default class BackgroundJobsLifecycleClient {
59
102
  }
60
103
 
61
104
  /**
62
- * Sends the lifecycle request under its caller-owned deadline.
105
+ * Sends the lifecycle request under its caller-owned deadline. Retries
106
+ * transient "endpoint not ready yet" connect failures (the coordinator opens
107
+ * its control socket asynchronously after its process starts) until the
108
+ * deadline; any definitive protocol or state rejection fails immediately.
63
109
  * @param {object} args - Request details.
64
110
  * @param {"activate" | "retire"} args.action - Lifecycle action.
65
111
  * @param {AbortSignal} args.signal - Request deadline signal.
66
112
  * @returns {Promise<import("./types.js").BackgroundJobsGenerationLifecycleState>} - Resulting state.
67
113
  */
68
114
  async _runRequest({action, signal}) {
69
- const requestId = randomUUID()
115
+ while (true) {
116
+ try {
117
+ return await this._attemptRequest(action, randomUUID(), signal)
118
+ } catch (error) {
119
+ if (!isTransientConnectError(error)) throw error
120
+ if (signal.aborted) throw signal.reason
121
+ await waitBeforeNextAttempt(LIFECYCLE_CONNECT_RETRY_DELAY_MS, signal)
122
+ }
123
+ }
124
+ }
125
+
126
+ /**
127
+ * Performs one lifecycle request attempt against the control socket.
128
+ * @param {"activate" | "retire"} action - Lifecycle action.
129
+ * @param {string} requestId - Request identity for acknowledgement matching.
130
+ * @param {AbortSignal} signal - Request deadline signal.
131
+ * @returns {Promise<import("./types.js").BackgroundJobsGenerationLifecycleState>} - Resulting state.
132
+ */
133
+ async _attemptRequest(action, requestId, signal) {
70
134
  const socket = net.createConnection(this.socketPath)
71
135
  const jsonSocket = new JsonSocket(socket)
72
136
 
@@ -1147,6 +1147,24 @@ export default class BackgroundJobsWorker {
1147
1147
  return Math.max(0, this.pooledRunnerCount - this.pooledChildren.size)
1148
1148
  }
1149
1149
 
1150
+ /**
1151
+ * Counts live children still able to run new work. The pool must always
1152
+ * keep — or restore, through the bounded over-cap liveness replacement — at
1153
+ * least one non-retiring child: with every live child retiring, advertised
1154
+ * capacity is zero for the entire drain window, which can stretch to the
1155
+ * longest in-flight job, and dispatch silently stalls.
1156
+ * @returns {number} - Number of non-retiring pooled children.
1157
+ */
1158
+ _nonRetiringPooledChildCount() {
1159
+ let count = 0
1160
+
1161
+ for (const state of this.pooledChildStates.values()) {
1162
+ if (!state.retiring) count += 1
1163
+ }
1164
+
1165
+ return count
1166
+ }
1167
+
1150
1168
  /**
1151
1169
  * Resolves once a non-retiring pooled child has a free concurrency slot or the
1152
1170
  * pool may spawn a new one. Pooled jobs admitted while the pool is at its
@@ -1358,13 +1376,18 @@ export default class BackgroundJobsWorker {
1358
1376
  * Creates a reusable pooled child, enforcing the hard cap on total live
1359
1377
  * children (working + draining). Returns undefined when the cap is already
1360
1378
  * met — the only way a new child may exist is a slot being open, so the
1361
- * caller re-checks and waits again.
1379
+ * caller re-checks and waits again. `allowOverCap` is reserved for the
1380
+ * bounded liveness replacement: at most one child beyond the cap may exist,
1381
+ * and only when every other live child is already retiring (see
1382
+ * `_beginRetirePooledChild` for the gate).
1383
+ * @param {object} [args] - Spawn options.
1384
+ * @param {boolean} [args.allowOverCap] - Allow one over-cap spawn for the liveness replacement.
1362
1385
  * @returns {import("node:child_process").ChildProcess | undefined} - The new child, or undefined when the pool is at its cap.
1363
1386
  */
1364
- _createPooledChild() {
1387
+ _createPooledChild({allowOverCap = false} = {}) {
1365
1388
  const configuration = this.configuration
1366
1389
  if (!configuration) throw new Error("Background jobs worker configuration not initialized")
1367
- if (this.pooledChildren.size >= this.pooledRunnerCount) return undefined
1390
+ if (!allowOverCap && this.pooledChildren.size >= this.pooledRunnerCount) return undefined
1368
1391
  const child = fork(POOLED_RUNNER_ENTRY_PATH, [], {
1369
1392
  cwd: configuration.getDirectory(), execArgv: [], stdio: ["ignore", "ignore", "ignore", "ipc"],
1370
1393
  env: Object.assign({}, process.env, this._childBackgroundJobsEnvironment())
@@ -1577,10 +1600,19 @@ export default class BackgroundJobsWorker {
1577
1600
  * cap — eagerly spawns a single replacement (1-for-1) so its capacity is
1578
1601
  * restored immediately without waiting for it to finish draining. The
1579
1602
  * replacement spawn is gated by the cap (the retiring child still counts as
1580
- * live until it exits), so a full pool simply defers the replacement to the
1581
- * retiring child's drain instead of spawning over capacity. The retiring
1582
- * child stops receiving new jobs and is terminated only once its in-flight
1583
- * set drains, so a long-running job (e.g. a build) is never cut off.
1603
+ * live until it exits), so a full pool defers the replacement to the drain
1604
+ * path. One bounded exception keeps the pool from ever advertising zero
1605
+ * capacity: when this mark leaves no non-retiring child, a single liveness
1606
+ * replacement spawns over the cap — live children stay bounded at
1607
+ * `pooledRunnerCount + 1`, and the extra child is absorbed by the next
1608
+ * draining exit. Without it, a full retirement wave (e.g. every child
1609
+ * crossing the peak-RSS threshold after the same memory burst) silently
1610
+ * removes all pooled capacity for the whole drain window, which can stretch
1611
+ * to the longest in-flight job. When even the liveness spawn is unavailable
1612
+ * (an over-cap child is already draining), the starvation is logged so it is
1613
+ * visible instead of silent. The retiring child stops receiving new jobs and
1614
+ * is terminated only once its in-flight set drains, so a long-running job
1615
+ * (e.g. a build) is never cut off.
1584
1616
  * @param {import("node:child_process").ChildProcess} child - Child to retire.
1585
1617
  * @returns {void}
1586
1618
  */
@@ -1592,8 +1624,55 @@ export default class BackgroundJobsWorker {
1592
1624
  // Best-effort pre-warm: skip when stopping (no new work) or before the
1593
1625
  // worker is initialized (no configuration to fork a child from). The cap
1594
1626
  // inside _createPooledChild refuses the spawn while the pool is full, in
1595
- // which case the replacement is deferred to the drain path.
1596
- if (!this.shouldStop && this.configuration) this._createPooledChild()
1627
+ // which case the bounded liveness replacement below takes over.
1628
+ if (this.shouldStop || !this.configuration) return
1629
+
1630
+ if (this._createPooledChild()) return
1631
+ if (this._nonRetiringPooledChildCount() > 0) return
1632
+
1633
+ // Liveness replacement: this mark emptied the working pool, so advertised
1634
+ // capacity would be zero until a draining child exits. Spawn one
1635
+ // replacement over the hard cap (bounded: the gate admits it only when the
1636
+ // live count is at most the cap, so at most one over-cap child exists and
1637
+ // the next draining exit absorbs it).
1638
+ if (this.pooledChildren.size <= this.pooledRunnerCount) {
1639
+ const livenessChild = this._createPooledChild({allowOverCap: true})
1640
+
1641
+ if (livenessChild) {
1642
+ this._logPooledCapacityEvent("pooled-capacity-liveness-spawn")
1643
+ return
1644
+ }
1645
+ }
1646
+
1647
+ // An over-cap child is already draining: the pool waits for the next
1648
+ // draining exit, which frees a cap slot for a lazy replacement. Log it so
1649
+ // this bounded starvation is not silent.
1650
+ this._logPooledCapacityEvent("pooled-capacity-starved")
1651
+ }
1652
+
1653
+ /**
1654
+ * Logs one compact pooled-capacity event to the worker's own stderr (the
1655
+ * surface that reaches the production log). Used by the bounded liveness
1656
+ * replacement in `_beginRetirePooledChild`: the spawn that keeps dispatch
1657
+ * alive through a full retirement wave, or the bounded starvation when an
1658
+ * over-cap child is already draining and the pool must wait for an exit.
1659
+ * @param {"pooled-capacity-liveness-spawn" | "pooled-capacity-starved"} event - Event name.
1660
+ * @returns {void}
1661
+ */
1662
+ _logPooledCapacityEvent(event) {
1663
+ let retiringChildren = 0
1664
+
1665
+ for (const state of this.pooledChildStates.values()) {
1666
+ if (state.retiring) retiringChildren += 1
1667
+ }
1668
+
1669
+ console.error(JSON.stringify({
1670
+ event,
1671
+ liveChildren: this.pooledChildren.size,
1672
+ retiringChildren,
1673
+ cap: this.pooledRunnerCount,
1674
+ concurrency: this.pooledRunnerConcurrency
1675
+ }))
1597
1676
  }
1598
1677
 
1599
1678
  /**
@@ -0,0 +1,64 @@
1
+ // @ts-check
2
+
3
+ import fs from "node:fs/promises"
4
+ import path from "node:path"
5
+
6
+ /**
7
+ * Serves a static file from `root` directory to the response as a
8
+ * length-determined body (no chunked transfer-encoding).
9
+ *
10
+ * This is the proxy-safe alternative to `response.setFilePath()` /
11
+ * `response.stream()`: the file is read into memory and sent with an
12
+ * explicit `Content-Length` header, which avoids issues with proxies
13
+ * (e.g. Rollbridge) that do not support chunked transfer encoding.
14
+ * @param {import("./response.js").default} response
15
+ * The HTTP response to write to.
16
+ * @param {string} root - Absolute directory path that files must live under.
17
+ * @param {string} name - File name (or relative path) to serve from within `root`.
18
+ * @param {object} [options] - Serving options.
19
+ * @param {string} [options.contentType] - MIME type to set on the response.
20
+ * @param {string} [options.cacheControl] - Value for the `Cache-Control` header.
21
+ * @returns {Promise<boolean>} - `true` if the file was served, `false` if the
22
+ * file was not found or the name resolved outside the root (404 set in both cases).
23
+ */
24
+ export default async function serveFile(response, root, name, options = {}) {
25
+ const {contentType, cacheControl} = options
26
+
27
+ // Reject empty or null names.
28
+ if (!name || typeof name !== "string") {
29
+ response.setStatus(404)
30
+ return false
31
+ }
32
+
33
+ // Resolve the target path and verify it stays within root.
34
+ const resolvedRoot = path.resolve(root)
35
+ const targetPath = path.resolve(resolvedRoot, name)
36
+
37
+ // Path containment check: the resolved target must be inside root.
38
+ if (targetPath !== resolvedRoot && !targetPath.startsWith(resolvedRoot + path.sep)) {
39
+ response.setStatus(404)
40
+ return false
41
+ }
42
+
43
+ // lstat to reject symlinks and confirm the path is a regular file.
44
+ let stat
45
+ try {
46
+ stat = await fs.lstat(targetPath)
47
+ } catch {
48
+ response.setStatus(404)
49
+ return false
50
+ }
51
+
52
+ if (!stat.isFile() || stat.isSymbolicLink()) {
53
+ response.setStatus(404)
54
+ return false
55
+ }
56
+
57
+ const data = await fs.readFile(targetPath)
58
+
59
+ response.setBody(data)
60
+ response.setHeader("Content-Type", contentType || "application/octet-stream")
61
+ response.setHeader("Cache-Control", cacheControl || "no-store")
62
+
63
+ return true
64
+ }
@@ -35,7 +35,10 @@ export default class BackgroundJobsLifecycleClient {
35
35
  */
36
36
  _request(action: "activate" | "retire"): Promise<import("./types.js").BackgroundJobsGenerationLifecycleState>;
37
37
  /**
38
- * Sends the lifecycle request under its caller-owned deadline.
38
+ * Sends the lifecycle request under its caller-owned deadline. Retries
39
+ * transient "endpoint not ready yet" connect failures (the coordinator opens
40
+ * its control socket asynchronously after its process starts) until the
41
+ * deadline; any definitive protocol or state rejection fails immediately.
39
42
  * @param {object} args - Request details.
40
43
  * @param {"activate" | "retire"} args.action - Lifecycle action.
41
44
  * @param {AbortSignal} args.signal - Request deadline signal.
@@ -45,5 +48,13 @@ export default class BackgroundJobsLifecycleClient {
45
48
  action: "activate" | "retire";
46
49
  signal: AbortSignal;
47
50
  }): Promise<import("./types.js").BackgroundJobsGenerationLifecycleState>;
51
+ /**
52
+ * Performs one lifecycle request attempt against the control socket.
53
+ * @param {"activate" | "retire"} action - Lifecycle action.
54
+ * @param {string} requestId - Request identity for acknowledgement matching.
55
+ * @param {AbortSignal} signal - Request deadline signal.
56
+ * @returns {Promise<import("./types.js").BackgroundJobsGenerationLifecycleState>} - Resulting state.
57
+ */
58
+ _attemptRequest(action: "activate" | "retire", requestId: string, signal: AbortSignal): Promise<import("./types.js").BackgroundJobsGenerationLifecycleState>;
48
59
  }
49
60
  //# sourceMappingURL=lifecycle-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle-client.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/lifecycle-client.js"],"names":[],"mappings":"AAQA,eAAO,MAAM,gCAAgC,SAAS,CAAA;AAEtD,iDAAiD;AACjD,MAAM,CAAC,OAAO,OAAO,6BAA6B;IAezC,YAAY;IACZ,UAAU;IAIV,gBAAgB;IAnBvB;;;;;;;OAOG;IACH,YAAY,EAAC,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,gBAA6C,EAAC,EALjG;QAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO,CAC7C;QAAsB,YAAY,AAAlC,CACA,EADQ,MAAM,CACd;QAAsB,UAAU,AAAhC,CACA,EADQ,MAAM,CACd;QAAsB,gBAAgB,AAAtC,CACF,EADU,MAAM,CAChB;KACmG,EAcnG;IAED;;;OAGG;IACG,QAAQ,IAFD,OAAO,CAAC,OAAO,YAAY,EAAE,sCAAsC,CAAC,CAEtB;IAE3D;;;OAGG;IACG,MAAM,IAFC,OAAO,CAAC,OAAO,YAAY,EAAE,sCAAsC,CAAC,CAE1B;IAEvD;;;;OAIG;IACG,QAAQ,CAAC,MAAM,EAHV,UAAU,GAAG,QAGH,GAFR,OAAO,CAAC,OAAO,YAAY,EAAE,sCAAsC,CAAC,CAOhF;IAED;;;;;;OAMG;IACG,WAAW,CAAC,EAAC,MAAM,EAAE,MAAM,EAAC,EAJ/B;QAAoC,MAAM,EAAlC,UAAU,GAAG,QAAQ,CAC7B;QAA0B,MAAM,EAAxB,WAAW,CACnB;KAE+B,GAFrB,OAAO,CAAC,OAAO,YAAY,EAAE,sCAAsC,CAAC,CA4DhF;CACF"}
1
+ {"version":3,"file":"lifecycle-client.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/lifecycle-client.js"],"names":[],"mappings":"AAQA,eAAO,MAAM,gCAAgC,SAAS,CAAA;AA6CtD,iDAAiD;AACjD,MAAM,CAAC,OAAO,OAAO,6BAA6B;IAezC,YAAY;IACZ,UAAU;IAIV,gBAAgB;IAnBvB;;;;;;;OAOG;IACH,YAAY,EAAC,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,gBAA6C,EAAC,EALjG;QAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO,CAC7C;QAAsB,YAAY,AAAlC,CACA,EADQ,MAAM,CACd;QAAsB,UAAU,AAAhC,CACA,EADQ,MAAM,CACd;QAAsB,gBAAgB,AAAtC,CACF,EADU,MAAM,CAChB;KACmG,EAcnG;IAED;;;OAGG;IACG,QAAQ,IAFD,OAAO,CAAC,OAAO,YAAY,EAAE,sCAAsC,CAAC,CAEtB;IAE3D;;;OAGG;IACG,MAAM,IAFC,OAAO,CAAC,OAAO,YAAY,EAAE,sCAAsC,CAAC,CAE1B;IAEvD;;;;OAIG;IACG,QAAQ,CAAC,MAAM,EAHV,UAAU,GAAG,QAGH,GAFR,OAAO,CAAC,OAAO,YAAY,EAAE,sCAAsC,CAAC,CAOhF;IAED;;;;;;;;;OASG;IACG,WAAW,CAAC,EAAC,MAAM,EAAE,MAAM,EAAC,EAJ/B;QAAoC,MAAM,EAAlC,UAAU,GAAG,QAAQ,CAC7B;QAA0B,MAAM,EAAxB,WAAW,CACnB;KAE+B,GAFrB,OAAO,CAAC,OAAO,YAAY,EAAE,sCAAsC,CAAC,CAYhF;IAED;;;;;;OAMG;IACG,eAAe,CAAC,MAAM,EALjB,UAAU,GAAG,QAKI,EAAE,SAAS,EAJ5B,MAI4B,EAAE,MAAM,EAHpC,WAGoC,GAFlC,OAAO,CAAC,OAAO,YAAY,EAAE,sCAAsC,CAAC,CA2DhF;CACF"}
@@ -5,6 +5,45 @@ import timeout from "awaitery/build/timeout.js";
5
5
  import JsonSocket from "./json-socket.js";
6
6
  const DEFAULT_REQUEST_TIMEOUT_MS = 10000;
7
7
  export const MAX_LIFECYCLE_REQUEST_TIMEOUT_MS = 120000;
8
+ const LIFECYCLE_CONNECT_RETRY_DELAY_MS = 50;
9
+ const TRANSIENT_CONNECT_ERROR_CODES = new Set(["ECONNABORTED", "ECONNREFUSED", "ENOENT"]);
10
+ /**
11
+ * Whether a lifecycle request failure is a transient "endpoint not ready yet"
12
+ * connect failure (the coordinator's control socket opens asynchronously after
13
+ * its process starts) rather than a definitive protocol or state rejection.
14
+ * @param {unknown} error - The rejection reason.
15
+ * @returns {boolean} - Whether the request may be retried.
16
+ */
17
+ function isTransientConnectError(error) {
18
+ if (typeof error !== "object" || error === null)
19
+ return false;
20
+ const code = /** @type {{code?: unknown}} */ (error).code;
21
+ return typeof code === "string" && TRANSIENT_CONNECT_ERROR_CODES.has(code);
22
+ }
23
+ /**
24
+ * Waits before the next lifecycle connect retry, rejecting with the signal
25
+ * reason when the caller-owned deadline fires mid-wait.
26
+ * @param {number} delayMs - Wait between attempts.
27
+ * @param {AbortSignal} signal - Caller-owned deadline signal.
28
+ * @returns {Promise<void>} - Resolves after the delay, or rejects on abort.
29
+ */
30
+ async function waitBeforeNextAttempt(delayMs, signal) {
31
+ await new Promise((resolve, reject) => {
32
+ if (signal.aborted) {
33
+ reject(signal.reason);
34
+ return;
35
+ }
36
+ const timer = setTimeout(() => {
37
+ signal.removeEventListener("abort", onAbort);
38
+ resolve(undefined);
39
+ }, delayMs);
40
+ const onAbort = () => {
41
+ clearTimeout(timer);
42
+ reject(signal.reason);
43
+ };
44
+ signal.addEventListener("abort", onAbort);
45
+ });
46
+ }
8
47
  /** One-request acknowledged lifecycle client. */
9
48
  export default class BackgroundJobsLifecycleClient {
10
49
  /**
@@ -54,14 +93,37 @@ export default class BackgroundJobsLifecycleClient {
54
93
  }, async ({ control }) => await this._runRequest({ action, signal: control.signal }));
55
94
  }
56
95
  /**
57
- * Sends the lifecycle request under its caller-owned deadline.
96
+ * Sends the lifecycle request under its caller-owned deadline. Retries
97
+ * transient "endpoint not ready yet" connect failures (the coordinator opens
98
+ * its control socket asynchronously after its process starts) until the
99
+ * deadline; any definitive protocol or state rejection fails immediately.
58
100
  * @param {object} args - Request details.
59
101
  * @param {"activate" | "retire"} args.action - Lifecycle action.
60
102
  * @param {AbortSignal} args.signal - Request deadline signal.
61
103
  * @returns {Promise<import("./types.js").BackgroundJobsGenerationLifecycleState>} - Resulting state.
62
104
  */
63
105
  async _runRequest({ action, signal }) {
64
- const requestId = randomUUID();
106
+ while (true) {
107
+ try {
108
+ return await this._attemptRequest(action, randomUUID(), signal);
109
+ }
110
+ catch (error) {
111
+ if (!isTransientConnectError(error))
112
+ throw error;
113
+ if (signal.aborted)
114
+ throw signal.reason;
115
+ await waitBeforeNextAttempt(LIFECYCLE_CONNECT_RETRY_DELAY_MS, signal);
116
+ }
117
+ }
118
+ }
119
+ /**
120
+ * Performs one lifecycle request attempt against the control socket.
121
+ * @param {"activate" | "retire"} action - Lifecycle action.
122
+ * @param {string} requestId - Request identity for acknowledgement matching.
123
+ * @param {AbortSignal} signal - Request deadline signal.
124
+ * @returns {Promise<import("./types.js").BackgroundJobsGenerationLifecycleState>} - Resulting state.
125
+ */
126
+ async _attemptRequest(action, requestId, signal) {
65
127
  const socket = net.createConnection(this.socketPath);
66
128
  const jsonSocket = new JsonSocket(socket);
67
129
  return await new Promise((resolve, reject) => {
@@ -123,4 +185,4 @@ export default class BackgroundJobsLifecycleClient {
123
185
  });
124
186
  }
125
187
  }
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlmZWN5Y2xlLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZ3JvdW5kLWpvYnMvbGlmZWN5Y2xlLWNsaWVudC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN4QyxPQUFPLEdBQUcsTUFBTSxVQUFVLENBQUE7QUFDMUIsT0FBTyxPQUFPLE1BQU0sMkJBQTJCLENBQUE7QUFDL0MsT0FBTyxVQUFVLE1BQU0sa0JBQWtCLENBQUE7QUFFekMsTUFBTSwwQkFBMEIsR0FBRyxLQUFLLENBQUE7QUFDeEMsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsTUFBTSxDQUFBO0FBRXRELGlEQUFpRDtBQUNqRCxNQUFNLENBQUMsT0FBTyxPQUFPLDZCQUE2QjtJQUNoRDs7Ozs7OztPQU9HO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixHQUFHLDBCQUEwQixFQUFDO1FBQ2xHLE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLHFDQUFxQyxDQUFDO1lBQzNFLFlBQVk7WUFDWixtQkFBbUIsRUFBRSxVQUFVO1lBQy9CLFVBQVUsRUFBRSwrQkFBK0I7U0FDNUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUE7UUFDakQsSUFBSSxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQTtRQUN0RCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLGdCQUFnQixHQUFHLENBQUMsSUFBSSxnQkFBZ0IsR0FBRyxnQ0FBZ0MsRUFBRSxDQUFDO1lBQ3ZILE1BQU0sSUFBSSxTQUFTLENBQUMscURBQXFELGdDQUFnQyxFQUFFLENBQUMsQ0FBQTtRQUM5RyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGdC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Q0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUE7b0JBQy9FLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7b0JBQy9CLE9BQU07Z0JBQ1IsQ0FBQztnQkFDRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssK0JBQStCLElBQUksT0FBTyxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ25HLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUMsQ0FBQyxDQUFBO29CQUN4RixPQUFNO2dCQUNSLENBQUM7Z0JBQ0QsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUE7WUFDbkQsQ0FBQyxDQUFDLENBQUE7WUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQTtZQUNqQyxJQUFJLE1BQU0sQ0FBQyxPQUFPO2dCQUFFLE9BQU8sRUFBRSxDQUFBO1FBQy9CLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwibm9kZTpjcnlwdG9cIlxuaW1wb3J0IG5ldCBmcm9tIFwibm9kZTpuZXRcIlxuaW1wb3J0IHRpbWVvdXQgZnJvbSBcImF3YWl0ZXJ5L2J1aWxkL3RpbWVvdXQuanNcIlxuaW1wb3J0IEpzb25Tb2NrZXQgZnJvbSBcIi4vanNvbi1zb2NrZXQuanNcIlxuXG5jb25zdCBERUZBVUxUX1JFUVVFU1RfVElNRU9VVF9NUyA9IDEwMDAwXG5leHBvcnQgY29uc3QgTUFYX0xJRkVDWUNMRV9SRVFVRVNUX1RJTUVPVVRfTVMgPSAxMjAwMDBcblxuLyoqIE9uZS1yZXF1ZXN0IGFja25vd2xlZGdlZCBsaWZlY3ljbGUgY2xpZW50LiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFja2dyb3VuZEpvYnNMaWZlY3ljbGVDbGllbnQge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIGxpZmVjeWNsZSBjbGllbnQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQ2xpZW50IG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBhcmdzLmNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuZ2VuZXJhdGlvbklkXSAtIEV4cGxpY2l0IGdlbmVyYXRpb24gaWRlbnRpdHkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zb2NrZXRQYXRoXSAtIEV4cGxpY2l0IGNvbnRyb2wgc29ja2V0IHBhdGguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5yZXF1ZXN0VGltZW91dE1zXSAtIFJlcXVlc3QgZGVhZGxpbmUgYmVsb3cgdGhlIHN1cGVydmlzb3IgaG9vayB0aW1lb3V0IChkZWZhdWx0OiAxMDAwMCkuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y29uZmlndXJhdGlvbiwgZ2VuZXJhdGlvbklkLCBzb2NrZXRQYXRoLCByZXF1ZXN0VGltZW91dE1zID0gREVGQVVMVF9SRVFVRVNUX1RJTUVPVVRfTVN9KSB7XG4gICAgY29uc3QgZ2VuZXJhdGlvbkNvbmZpZyA9IGNvbmZpZ3VyYXRpb24ucmVzb2x2ZUJhY2tncm91bmRKb2JzR2VuZXJhdGlvbkNvbmZpZyh7XG4gICAgICBnZW5lcmF0aW9uSWQsXG4gICAgICBsaWZlY3ljbGVTb2NrZXRQYXRoOiBzb2NrZXRQYXRoLFxuICAgICAgc291cmNlTmFtZTogXCJCYWNrZ3JvdW5kSm9ic0xpZmVjeWNsZUNsaWVudFwiXG4gICAgfSlcbiAgICB0aGlzLmdlbmVyYXRpb25JZCA9IGdlbmVyYXRpb25Db25maWcuZ2VuZXJhdGlvbklkXG4gICAgdGhpcy5zb2NrZXRQYXRoID0gZ2VuZXJhdGlvbkNvbmZpZy5saWZlY3ljbGVTb2NrZXRQYXRoXG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHJlcXVlc3RUaW1lb3V0TXMpIHx8IHJlcXVlc3RUaW1lb3V0TXMgPCAxIHx8IHJlcXVlc3RUaW1lb3V0TXMgPiBNQVhfTElGRUNZQ0xFX1JFUVVFU1RfVElNRU9VVF9NUykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgcmVxdWVzdFRpbWVvdXRNcyBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCAke01BWF9MSUZFQ1lDTEVfUkVRVUVTVF9USU1FT1VUX01TfWApXG4gICAgfVxuICAgIHRoaXMucmVxdWVzdFRpbWVvdXRNcyA9IHJlcXVlc3RUaW1lb3V0TXNcbiAgICBpZiAoIXRoaXMuZ2VuZXJhdGlvbklkKSB0aHJvdyBuZXcgRXJyb3IoXCJCYWNrZ3JvdW5kIGpvYnMgbGlmZWN5Y2xlIGNsaWVudCByZXF1aXJlcyBnZW5lcmF0aW9uSWRcIilcbiAgICBpZiAoIXRoaXMuc29ja2V0UGF0aCkgdGhyb3cgbmV3IEVycm9yKFwiQmFja2dyb3VuZCBqb2JzIGxpZmVjeWNsZSBjbGllbnQgcmVxdWlyZXMgbGlmZWN5Y2xlU29ja2V0UGF0aFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEFjdGl2YXRlcyB0aGUgZ2VuZXJhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9ic0dlbmVyYXRpb25MaWZlY3ljbGVTdGF0ZT59IC0gUmVzdWx0aW5nIHN0YXRlLlxuICAgKi9cbiAgYXN5bmMgYWN0aXZhdGUoKSB7IHJldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KFwiYWN0aXZhdGVcIikgfVxuXG4gIC8qKlxuICAgKiBSZXRpcmVzIHRoZSBnZW5lcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JzR2VuZXJhdGlvbkxpZmVjeWNsZVN0YXRlPn0gLSBSZXN1bHRpbmcgc3RhdGUuXG4gICAqL1xuICBhc3luYyByZXRpcmUoKSB7IHJldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KFwicmV0aXJlXCIpIH1cblxuICAvKipcbiAgICogU2VuZHMgZXhhY3RseSBvbmUgbGlmZWN5Y2xlIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7XCJhY3RpdmF0ZVwiIHwgXCJyZXRpcmVcIn0gYWN0aW9uIC0gTGlmZWN5Y2xlIGFjdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9ic0dlbmVyYXRpb25MaWZlY3ljbGVTdGF0ZT59IC0gUmVzdWx0aW5nIHN0YXRlLlxuICAgKi9cbiAgYXN5bmMgX3JlcXVlc3QoYWN0aW9uKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRpbWVvdXQoe1xuICAgICAgZXJyb3JNZXNzYWdlOiBgQmFja2dyb3VuZCBqb2JzICR7YWN0aW9ufSByZXF1ZXN0IGZvciAke3RoaXMuZ2VuZXJhdGlvbklkfSB0aW1lZCBvdXQgYWZ0ZXIgJHt0aGlzLnJlcXVlc3RUaW1lb3V0TXN9bXMgYXQgJHt0aGlzLnNvY2tldFBhdGh9YCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMucmVxdWVzdFRpbWVvdXRNc1xuICAgIH0sIGFzeW5jICh7Y29udHJvbH0pID0+IGF3YWl0IHRoaXMuX3J1blJlcXVlc3Qoe2FjdGlvbiwgc2lnbmFsOiBjb250cm9sLnNpZ25hbH0pKVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIHRoZSBsaWZlY3ljbGUgcmVxdWVzdCB1bmRlciBpdHMgY2FsbGVyLW93bmVkIGRlYWRsaW5lLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIFJlcXVlc3QgZGV0YWlscy5cbiAgICogQHBhcmFtIHtcImFjdGl2YXRlXCIgfCBcInJldGlyZVwifSBhcmdzLmFjdGlvbiAtIExpZmVjeWNsZSBhY3Rpb24uXG4gICAqIEBwYXJhbSB7QWJvcnRTaWduYWx9IGFyZ3Muc2lnbmFsIC0gUmVxdWVzdCBkZWFkbGluZSBzaWduYWwuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYnNHZW5lcmF0aW9uTGlmZWN5Y2xlU3RhdGU+fSAtIFJlc3VsdGluZyBzdGF0ZS5cbiAgICovXG4gIGFzeW5jIF9ydW5SZXF1ZXN0KHthY3Rpb24sIHNpZ25hbH0pIHtcbiAgICBjb25zdCByZXF1ZXN0SWQgPSByYW5kb21VVUlEKClcbiAgICBjb25zdCBzb2NrZXQgPSBuZXQuY3JlYXRlQ29ubmVjdGlvbih0aGlzLnNvY2tldFBhdGgpXG4gICAgY29uc3QganNvblNvY2tldCA9IG5ldyBKc29uU29ja2V0KHNvY2tldClcblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgZmluaXNoZWQgPSBmYWxzZVxuICAgICAgLyoqXG4gICAgICAgKiBTZXR0bGVzIHRoZSByZXF1ZXN0IG9uY2UuXG4gICAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIFRlYXJkb3duIG9wdGlvbnMuXG4gICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRlc3Ryb3ldIC0gRGVzdHJveSBpbnN0ZWFkIG9mIGNsb3NpbmcuXG4gICAgICAgKiBAcGFyYW0geygpID0+IHZvaWR9IGNhbGxiYWNrIC0gU2V0dGxlbWVudCBjYWxsYmFjay5cbiAgICAgICAqL1xuICAgICAgY29uc3QgZmluaXNoID0gKHtkZXN0cm95ID0gZmFsc2V9LCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBpZiAoZmluaXNoZWQpIHJldHVyblxuICAgICAgICBmaW5pc2hlZCA9IHRydWVcbiAgICAgICAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KVxuICAgICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoXCJjb25uZWN0XCIsIG9uQ29ubmVjdClcbiAgICAgICAganNvblNvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoKVxuICAgICAgICBpZiAoZGVzdHJveSkganNvblNvY2tldC5kZXN0cm95KClcbiAgICAgICAgZWxzZSBqc29uU29ja2V0LmNsb3NlKClcbiAgICAgICAgY2FsbGJhY2soKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBvbkFib3J0ID0gKCkgPT4gZmluaXNoKHtkZXN0cm95OiB0cnVlfSwgKCkgPT4gcmVqZWN0KHNpZ25hbC5yZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHNpZ25hbC5yZWFzb24gOiBuZXcgRXJyb3IoXCJCYWNrZ3JvdW5kIGpvYnMgbGlmZWN5Y2xlIHJlcXVlc3QgYWJvcnRlZFwiKSkpXG4gICAgICBjb25zdCBvbkNvbm5lY3QgPSAoKSA9PiB7XG4gICAgICAgIGpzb25Tb2NrZXQuc2VuZCh7XG4gICAgICAgICAgdHlwZTogXCJiYWNrZ3JvdW5kLWpvYnMtbGlmZWN5Y2xlXCIsXG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGdlbmVyYXRpb25JZDogdGhpcy5nZW5lcmF0aW9uSWQsXG4gICAgICAgICAgcmVxdWVzdElkXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydClcbiAgICAgIGpzb25Tb2NrZXQub24oXCJlcnJvclwiLCAoZXJyb3IpID0+IGZpbmlzaCh7fSwgKCkgPT4gcmVqZWN0KGVycm9yKSkpXG4gICAgICBqc29uU29ja2V0Lm9uKFwiY2xvc2VcIiwgKCkgPT4gZmluaXNoKHtkZXN0cm95OiB0cnVlfSwgKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihcIkJhY2tncm91bmQgam9icyBsaWZlY3ljbGUgc29ja2V0IGNsb3NlZCBiZWZvcmUgYWNrbm93bGVkZ2VtZW50XCIpKSkpXG4gICAgICBqc29uU29ja2V0Lm9uKFwibWVzc2FnZVwiLCAobWVzc2FnZSkgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZT8ucmVxdWVzdElkICE9PSByZXF1ZXN0SWQgfHwgbWVzc2FnZS5hY3Rpb24gIT09IGFjdGlvbikge1xuICAgICAgICAgIGZpbmlzaCh7fSwgKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihcIkJhY2tncm91bmQgam9icyBsaWZlY3ljbGUgcmVzcG9uc2UgZGlkIG5vdCBtYXRjaCBpdHMgcmVxdWVzdFwiKSkpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gXCJiYWNrZ3JvdW5kLWpvYnMtbGlmZWN5Y2xlLWVycm9yXCIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlLmVycm9yPy5tZXNzYWdlIHx8IFwiQmFja2dyb3VuZCBqb2JzIGxpZmVjeWNsZSByZXF1ZXN0IGZhaWxlZFwiKVxuICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5lcnJvcj8ubmFtZSA9PT0gXCJzdHJpbmdcIikgZXJyb3IubmFtZSA9IG1lc3NhZ2UuZXJyb3IubmFtZVxuICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5lcnJvcj8uc3RhY2sgPT09IFwic3RyaW5nXCIpIGVycm9yLnN0YWNrID0gbWVzc2FnZS5lcnJvci5zdGFja1xuICAgICAgICAgIGZpbmlzaCh7fSwgKCkgPT4gcmVqZWN0KGVycm9yKSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAobWVzc2FnZS50eXBlICE9PSBcImJhY2tncm91bmQtam9icy1saWZlY3ljbGUtYWNrXCIgfHwgbWVzc2FnZS5nZW5lcmF0aW9uSWQgIT09IHRoaXMuZ2VuZXJhdGlvbklkKSB7XG4gICAgICAgICAgZmluaXNoKHt9LCAoKSA9PiByZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBiYWNrZ3JvdW5kIGpvYnMgbGlmZWN5Y2xlIGFja25vd2xlZGdlbWVudFwiKSkpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgZmluaXNoKHt9LCAoKSA9PiByZXNvbHZlKG1lc3NhZ2UubGlmZWN5Y2xlU3RhdGUpKVxuICAgICAgfSlcbiAgICAgIHNvY2tldC5vbmNlKFwiY29ubmVjdFwiLCBvbkNvbm5lY3QpXG4gICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIG9uQWJvcnQoKVxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
188
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlmZWN5Y2xlLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZ3JvdW5kLWpvYnMvbGlmZWN5Y2xlLWNsaWVudC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN4QyxPQUFPLEdBQUcsTUFBTSxVQUFVLENBQUE7QUFDMUIsT0FBTyxPQUFPLE1BQU0sMkJBQTJCLENBQUE7QUFDL0MsT0FBTyxVQUFVLE1BQU0sa0JBQWtCLENBQUE7QUFFekMsTUFBTSwwQkFBMEIsR0FBRyxLQUFLLENBQUE7QUFDeEMsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsTUFBTSxDQUFBO0FBQ3RELE1BQU0sZ0NBQWdDLEdBQUcsRUFBRSxDQUFBO0FBQzNDLE1BQU0sNkJBQTZCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7QUFFekY7Ozs7OztHQU1HO0FBQ0gsU0FBUyx1QkFBdUIsQ0FBQyxLQUFLO0lBQ3BDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFDN0QsTUFBTSxJQUFJLEdBQUcsK0JBQStCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFFekQsT0FBTyxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksNkJBQTZCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQzVFLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxLQUFLLFVBQVUscUJBQXFCLENBQUMsT0FBTyxFQUFFLE1BQU07SUFDbEQsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNwQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuQixN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QUFTLEVBQUUsU0FBUyxDQUFDLENBQUE7WUFDakMsSUFBSSxNQUFNLENBQUMsT0FBTztnQkFBRSxPQUFPLEVBQUUsQ0FBQTtRQUMvQixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCJcbmltcG9ydCBuZXQgZnJvbSBcIm5vZGU6bmV0XCJcbmltcG9ydCB0aW1lb3V0IGZyb20gXCJhd2FpdGVyeS9idWlsZC90aW1lb3V0LmpzXCJcbmltcG9ydCBKc29uU29ja2V0IGZyb20gXCIuL2pzb24tc29ja2V0LmpzXCJcblxuY29uc3QgREVGQVVMVF9SRVFVRVNUX1RJTUVPVVRfTVMgPSAxMDAwMFxuZXhwb3J0IGNvbnN0IE1BWF9MSUZFQ1lDTEVfUkVRVUVTVF9USU1FT1VUX01TID0gMTIwMDAwXG5jb25zdCBMSUZFQ1lDTEVfQ09OTkVDVF9SRVRSWV9ERUxBWV9NUyA9IDUwXG5jb25zdCBUUkFOU0lFTlRfQ09OTkVDVF9FUlJPUl9DT0RFUyA9IG5ldyBTZXQoW1wiRUNPTk5BQk9SVEVEXCIsIFwiRUNPTk5SRUZVU0VEXCIsIFwiRU5PRU5UXCJdKVxuXG4vKipcbiAqIFdoZXRoZXIgYSBsaWZlY3ljbGUgcmVxdWVzdCBmYWlsdXJlIGlzIGEgdHJhbnNpZW50IFwiZW5kcG9pbnQgbm90IHJlYWR5IHlldFwiXG4gKiBjb25uZWN0IGZhaWx1cmUgKHRoZSBjb29yZGluYXRvcidzIGNvbnRyb2wgc29ja2V0IG9wZW5zIGFzeW5jaHJvbm91c2x5IGFmdGVyXG4gKiBpdHMgcHJvY2VzcyBzdGFydHMpIHJhdGhlciB0aGFuIGEgZGVmaW5pdGl2ZSBwcm90b2NvbCBvciBzdGF0ZSByZWplY3Rpb24uXG4gKiBAcGFyYW0ge3Vua25vd259IGVycm9yIC0gVGhlIHJlamVjdGlvbiByZWFzb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHRoZSByZXF1ZXN0IG1heSBiZSByZXRyaWVkLlxuICovXG5mdW5jdGlvbiBpc1RyYW5zaWVudENvbm5lY3RFcnJvcihlcnJvcikge1xuICBpZiAodHlwZW9mIGVycm9yICE9PSBcIm9iamVjdFwiIHx8IGVycm9yID09PSBudWxsKSByZXR1cm4gZmFsc2VcbiAgY29uc3QgY29kZSA9IC8qKiBAdHlwZSB7e2NvZGU/OiB1bmtub3dufX0gKi8gKGVycm9yKS5jb2RlXG5cbiAgcmV0dXJuIHR5cGVvZiBjb2RlID09PSBcInN0cmluZ1wiICYmIFRSQU5TSUVOVF9DT05ORUNUX0VSUk9SX0NPREVTLmhhcyhjb2RlKVxufVxuXG4vKipcbiAqIFdhaXRzIGJlZm9yZSB0aGUgbmV4dCBsaWZlY3ljbGUgY29ubmVjdCByZXRyeSwgcmVqZWN0aW5nIHdpdGggdGhlIHNpZ25hbFxuICogcmVhc29uIHdoZW4gdGhlIGNhbGxlci1vd25lZCBkZWFkbGluZSBmaXJlcyBtaWQtd2FpdC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWxheU1zIC0gV2FpdCBiZXR3ZWVuIGF0dGVtcHRzLlxuICogQHBhcmFtIHtBYm9ydFNpZ25hbH0gc2lnbmFsIC0gQ2FsbGVyLW93bmVkIGRlYWRsaW5lIHNpZ25hbC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIGFmdGVyIHRoZSBkZWxheSwgb3IgcmVqZWN0cyBvbiBhYm9ydC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gd2FpdEJlZm9yZU5leHRBdHRlbXB0KGRlbGF5TXMsIHNpZ25hbCkge1xuICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICByZWplY3Qoc2lnbmFsLnJlYXNvbilcblxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpXG4gICAgICByZXNvbHZlKHVuZGVmaW5lZClcbiAgICB9LCBkZWxheU1zKVxuICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpXG4gICAgICByZWplY3Qoc2lnbmFsLnJlYXNvbilcbiAgICB9XG5cbiAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpXG4gIH0pXG59XG5cbi8qKiBPbmUtcmVxdWVzdCBhY2tub3dsZWRnZWQgbGlmZWN5Y2xlIGNsaWVudC4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhY2tncm91bmRKb2JzTGlmZWN5Y2xlQ2xpZW50IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBsaWZlY3ljbGUgY2xpZW50LlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIENsaWVudCBvcHRpb25zLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmdlbmVyYXRpb25JZF0gLSBFeHBsaWNpdCBnZW5lcmF0aW9uIGlkZW50aXR5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc29ja2V0UGF0aF0gLSBFeHBsaWNpdCBjb250cm9sIHNvY2tldCBwYXRoLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MucmVxdWVzdFRpbWVvdXRNc10gLSBSZXF1ZXN0IGRlYWRsaW5lIGJlbG93IHRoZSBzdXBlcnZpc29yIGhvb2sgdGltZW91dCAoZGVmYXVsdDogMTAwMDApLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ3VyYXRpb24sIGdlbmVyYXRpb25JZCwgc29ja2V0UGF0aCwgcmVxdWVzdFRpbWVvdXRNcyA9IERFRkFVTFRfUkVRVUVTVF9USU1FT1VUX01TfSkge1xuICAgIGNvbnN0IGdlbmVyYXRpb25Db25maWcgPSBjb25maWd1cmF0aW9uLnJlc29sdmVCYWNrZ3JvdW5kSm9ic0dlbmVyYXRpb25Db25maWcoe1xuICAgICAgZ2VuZXJhdGlvbklkLFxuICAgICAgbGlmZWN5Y2xlU29ja2V0UGF0aDogc29ja2V0UGF0aCxcbiAgICAgIHNvdXJjZU5hbWU6IFwiQmFja2dyb3VuZEpvYnNMaWZlY3ljbGVDbGllbnRcIlxuICAgIH0pXG4gICAgdGhpcy5nZW5lcmF0aW9uSWQgPSBnZW5lcmF0aW9uQ29uZmlnLmdlbmVyYXRpb25JZFxuICAgIHRoaXMuc29ja2V0UGF0aCA9IGdlbmVyYXRpb25Db25maWcubGlmZWN5Y2xlU29ja2V0UGF0aFxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihyZXF1ZXN0VGltZW91dE1zKSB8fCByZXF1ZXN0VGltZW91dE1zIDwgMSB8fCByZXF1ZXN0VGltZW91dE1zID4gTUFYX0xJRkVDWUNMRV9SRVFVRVNUX1RJTUVPVVRfTVMpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYHJlcXVlc3RUaW1lb3V0TXMgbXVzdCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgJHtNQVhfTElGRUNZQ0xFX1JFUVVFU1RfVElNRU9VVF9NU31gKVxuICAgIH1cbiAgICB0aGlzLnJlcXVlc3RUaW1lb3V0TXMgPSByZXF1ZXN0VGltZW91dE1zXG4gICAgaWYgKCF0aGlzLmdlbmVyYXRpb25JZCkgdGhyb3cgbmV3IEVycm9yKFwiQmFja2dyb3VuZCBqb2JzIGxpZmVjeWNsZSBjbGllbnQgcmVxdWlyZXMgZ2VuZXJhdGlvbklkXCIpXG4gICAgaWYgKCF0aGlzLnNvY2tldFBhdGgpIHRocm93IG5ldyBFcnJvcihcIkJhY2tncm91bmQgam9icyBsaWZlY3ljbGUgY2xpZW50IHJlcXVpcmVzIGxpZmVjeWNsZVNvY2tldFBhdGhcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZXMgdGhlIGdlbmVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYnNHZW5lcmF0aW9uTGlmZWN5Y2xlU3RhdGU+fSAtIFJlc3VsdGluZyBzdGF0ZS5cbiAgICovXG4gIGFzeW5jIGFjdGl2YXRlKCkgeyByZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChcImFjdGl2YXRlXCIpIH1cblxuICAvKipcbiAgICogUmV0aXJlcyB0aGUgZ2VuZXJhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9ic0dlbmVyYXRpb25MaWZlY3ljbGVTdGF0ZT59IC0gUmVzdWx0aW5nIHN0YXRlLlxuICAgKi9cbiAgYXN5bmMgcmV0aXJlKCkgeyByZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChcInJldGlyZVwiKSB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGV4YWN0bHkgb25lIGxpZmVjeWNsZSByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge1wiYWN0aXZhdGVcIiB8IFwicmV0aXJlXCJ9IGFjdGlvbiAtIExpZmVjeWNsZSBhY3Rpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYnNHZW5lcmF0aW9uTGlmZWN5Y2xlU3RhdGU+fSAtIFJlc3VsdGluZyBzdGF0ZS5cbiAgICovXG4gIGFzeW5jIF9yZXF1ZXN0KGFjdGlvbikge1xuICAgIHJldHVybiBhd2FpdCB0aW1lb3V0KHtcbiAgICAgIGVycm9yTWVzc2FnZTogYEJhY2tncm91bmQgam9icyAke2FjdGlvbn0gcmVxdWVzdCBmb3IgJHt0aGlzLmdlbmVyYXRpb25JZH0gdGltZWQgb3V0IGFmdGVyICR7dGhpcy5yZXF1ZXN0VGltZW91dE1zfW1zIGF0ICR7dGhpcy5zb2NrZXRQYXRofWAsXG4gICAgICB0aW1lb3V0OiB0aGlzLnJlcXVlc3RUaW1lb3V0TXNcbiAgICB9LCBhc3luYyAoe2NvbnRyb2x9KSA9PiBhd2FpdCB0aGlzLl9ydW5SZXF1ZXN0KHthY3Rpb24sIHNpZ25hbDogY29udHJvbC5zaWduYWx9KSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyB0aGUgbGlmZWN5Y2xlIHJlcXVlc3QgdW5kZXIgaXRzIGNhbGxlci1vd25lZCBkZWFkbGluZS4gUmV0cmllc1xuICAgKiB0cmFuc2llbnQgXCJlbmRwb2ludCBub3QgcmVhZHkgeWV0XCIgY29ubmVjdCBmYWlsdXJlcyAodGhlIGNvb3JkaW5hdG9yIG9wZW5zXG4gICAqIGl0cyBjb250cm9sIHNvY2tldCBhc3luY2hyb25vdXNseSBhZnRlciBpdHMgcHJvY2VzcyBzdGFydHMpIHVudGlsIHRoZVxuICAgKiBkZWFkbGluZTsgYW55IGRlZmluaXRpdmUgcHJvdG9jb2wgb3Igc3RhdGUgcmVqZWN0aW9uIGZhaWxzIGltbWVkaWF0ZWx5LlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIFJlcXVlc3QgZGV0YWlscy5cbiAgICogQHBhcmFtIHtcImFjdGl2YXRlXCIgfCBcInJldGlyZVwifSBhcmdzLmFjdGlvbiAtIExpZmVjeWNsZSBhY3Rpb24uXG4gICAqIEBwYXJhbSB7QWJvcnRTaWduYWx9IGFyZ3Muc2lnbmFsIC0gUmVxdWVzdCBkZWFkbGluZSBzaWduYWwuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYnNHZW5lcmF0aW9uTGlmZWN5Y2xlU3RhdGU+fSAtIFJlc3VsdGluZyBzdGF0ZS5cbiAgICovXG4gIGFzeW5jIF9ydW5SZXF1ZXN0KHthY3Rpb24sIHNpZ25hbH0pIHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2F0dGVtcHRSZXF1ZXN0KGFjdGlvbiwgcmFuZG9tVVVJRCgpLCBzaWduYWwpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIWlzVHJhbnNpZW50Q29ubmVjdEVycm9yKGVycm9yKSkgdGhyb3cgZXJyb3JcbiAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB0aHJvdyBzaWduYWwucmVhc29uXG4gICAgICAgIGF3YWl0IHdhaXRCZWZvcmVOZXh0QXR0ZW1wdChMSUZFQ1lDTEVfQ09OTkVDVF9SRVRSWV9ERUxBWV9NUywgc2lnbmFsKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtcyBvbmUgbGlmZWN5Y2xlIHJlcXVlc3QgYXR0ZW1wdCBhZ2FpbnN0IHRoZSBjb250cm9sIHNvY2tldC5cbiAgICogQHBhcmFtIHtcImFjdGl2YXRlXCIgfCBcInJldGlyZVwifSBhY3Rpb24gLSBMaWZlY3ljbGUgYWN0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdElkIC0gUmVxdWVzdCBpZGVudGl0eSBmb3IgYWNrbm93bGVkZ2VtZW50IG1hdGNoaW5nLlxuICAgKiBAcGFyYW0ge0Fib3J0U2lnbmFsfSBzaWduYWwgLSBSZXF1ZXN0IGRlYWRsaW5lIHNpZ25hbC5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9ic0dlbmVyYXRpb25MaWZlY3ljbGVTdGF0ZT59IC0gUmVzdWx0aW5nIHN0YXRlLlxuICAgKi9cbiAgYXN5bmMgX2F0dGVtcHRSZXF1ZXN0KGFjdGlvbiwgcmVxdWVzdElkLCBzaWduYWwpIHtcbiAgICBjb25zdCBzb2NrZXQgPSBuZXQuY3JlYXRlQ29ubmVjdGlvbih0aGlzLnNvY2tldFBhdGgpXG4gICAgY29uc3QganNvblNvY2tldCA9IG5ldyBKc29uU29ja2V0KHNvY2tldClcblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgZmluaXNoZWQgPSBmYWxzZVxuICAgICAgLyoqXG4gICAgICAgKiBTZXR0bGVzIHRoZSByZXF1ZXN0IG9uY2UuXG4gICAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIFRlYXJkb3duIG9wdGlvbnMuXG4gICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRlc3Ryb3ldIC0gRGVzdHJveSBpbnN0ZWFkIG9mIGNsb3NpbmcuXG4gICAgICAgKiBAcGFyYW0geygpID0+IHZvaWR9IGNhbGxiYWNrIC0gU2V0dGxlbWVudCBjYWxsYmFjay5cbiAgICAgICAqL1xuICAgICAgY29uc3QgZmluaXNoID0gKHtkZXN0cm95ID0gZmFsc2V9LCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBpZiAoZmluaXNoZWQpIHJldHVyblxuICAgICAgICBmaW5pc2hlZCA9IHRydWVcbiAgICAgICAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KVxuICAgICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoXCJjb25uZWN0XCIsIG9uQ29ubmVjdClcbiAgICAgICAganNvblNvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoKVxuICAgICAgICBpZiAoZGVzdHJveSkganNvblNvY2tldC5kZXN0cm95KClcbiAgICAgICAgZWxzZSBqc29uU29ja2V0LmNsb3NlKClcbiAgICAgICAgY2FsbGJhY2soKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBvbkFib3J0ID0gKCkgPT4gZmluaXNoKHtkZXN0cm95OiB0cnVlfSwgKCkgPT4gcmVqZWN0KHNpZ25hbC5yZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHNpZ25hbC5yZWFzb24gOiBuZXcgRXJyb3IoXCJCYWNrZ3JvdW5kIGpvYnMgbGlmZWN5Y2xlIHJlcXVlc3QgYWJvcnRlZFwiKSkpXG4gICAgICBjb25zdCBvbkNvbm5lY3QgPSAoKSA9PiB7XG4gICAgICAgIGpzb25Tb2NrZXQuc2VuZCh7XG4gICAgICAgICAgdHlwZTogXCJiYWNrZ3JvdW5kLWpvYnMtbGlmZWN5Y2xlXCIsXG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGdlbmVyYXRpb25JZDogdGhpcy5nZW5lcmF0aW9uSWQsXG4gICAgICAgICAgcmVxdWVzdElkXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydClcbiAgICAgIGpzb25Tb2NrZXQub24oXCJlcnJvclwiLCAoZXJyb3IpID0+IGZpbmlzaCh7fSwgKCkgPT4gcmVqZWN0KGVycm9yKSkpXG4gICAgICBqc29uU29ja2V0Lm9uKFwiY2xvc2VcIiwgKCkgPT4gZmluaXNoKHtkZXN0cm95OiB0cnVlfSwgKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihcIkJhY2tncm91bmQgam9icyBsaWZlY3ljbGUgc29ja2V0IGNsb3NlZCBiZWZvcmUgYWNrbm93bGVkZ2VtZW50XCIpKSkpXG4gICAgICBqc29uU29ja2V0Lm9uKFwibWVzc2FnZVwiLCAobWVzc2FnZSkgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZT8ucmVxdWVzdElkICE9PSByZXF1ZXN0SWQgfHwgbWVzc2FnZS5hY3Rpb24gIT09IGFjdGlvbikge1xuICAgICAgICAgIGZpbmlzaCh7fSwgKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihcIkJhY2tncm91bmQgam9icyBsaWZlY3ljbGUgcmVzcG9uc2UgZGlkIG5vdCBtYXRjaCBpdHMgcmVxdWVzdFwiKSkpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gXCJiYWNrZ3JvdW5kLWpvYnMtbGlmZWN5Y2xlLWVycm9yXCIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlLmVycm9yPy5tZXNzYWdlIHx8IFwiQmFja2dyb3VuZCBqb2JzIGxpZmVjeWNsZSByZXF1ZXN0IGZhaWxlZFwiKVxuICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5lcnJvcj8ubmFtZSA9PT0gXCJzdHJpbmdcIikgZXJyb3IubmFtZSA9IG1lc3NhZ2UuZXJyb3IubmFtZVxuICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5lcnJvcj8uc3RhY2sgPT09IFwic3RyaW5nXCIpIGVycm9yLnN0YWNrID0gbWVzc2FnZS5lcnJvci5zdGFja1xuICAgICAgICAgIGZpbmlzaCh7fSwgKCkgPT4gcmVqZWN0KGVycm9yKSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAobWVzc2FnZS50eXBlICE9PSBcImJhY2tncm91bmQtam9icy1saWZlY3ljbGUtYWNrXCIgfHwgbWVzc2FnZS5nZW5lcmF0aW9uSWQgIT09IHRoaXMuZ2VuZXJhdGlvbklkKSB7XG4gICAgICAgICAgZmluaXNoKHt9LCAoKSA9PiByZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBiYWNrZ3JvdW5kIGpvYnMgbGlmZWN5Y2xlIGFja25vd2xlZGdlbWVudFwiKSkpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgZmluaXNoKHt9LCAoKSA9PiByZXNvbHZlKG1lc3NhZ2UubGlmZWN5Y2xlU3RhdGUpKVxuICAgICAgfSlcbiAgICAgIHNvY2tldC5vbmNlKFwiY29ubmVjdFwiLCBvbkNvbm5lY3QpXG4gICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIG9uQWJvcnQoKVxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
@@ -508,6 +508,15 @@ export default class BackgroundJobsWorker {
508
508
  * @returns {number} - Number of children the pool may still spawn.
509
509
  */
510
510
  _spawnablePooledChildren(): number;
511
+ /**
512
+ * Counts live children still able to run new work. The pool must always
513
+ * keep — or restore, through the bounded over-cap liveness replacement — at
514
+ * least one non-retiring child: with every live child retiring, advertised
515
+ * capacity is zero for the entire drain window, which can stretch to the
516
+ * longest in-flight job, and dispatch silently stalls.
517
+ * @returns {number} - Number of non-retiring pooled children.
518
+ */
519
+ _nonRetiringPooledChildCount(): number;
511
520
  /**
512
521
  * Resolves once a non-retiring pooled child has a free concurrency slot or the
513
522
  * pool may spawn a new one. Pooled jobs admitted while the pool is at its
@@ -606,10 +615,17 @@ export default class BackgroundJobsWorker {
606
615
  * Creates a reusable pooled child, enforcing the hard cap on total live
607
616
  * children (working + draining). Returns undefined when the cap is already
608
617
  * met — the only way a new child may exist is a slot being open, so the
609
- * caller re-checks and waits again.
618
+ * caller re-checks and waits again. `allowOverCap` is reserved for the
619
+ * bounded liveness replacement: at most one child beyond the cap may exist,
620
+ * and only when every other live child is already retiring (see
621
+ * `_beginRetirePooledChild` for the gate).
622
+ * @param {object} [args] - Spawn options.
623
+ * @param {boolean} [args.allowOverCap] - Allow one over-cap spawn for the liveness replacement.
610
624
  * @returns {import("node:child_process").ChildProcess | undefined} - The new child, or undefined when the pool is at its cap.
611
625
  */
612
- _createPooledChild(): import("node:child_process").ChildProcess | undefined;
626
+ _createPooledChild({ allowOverCap }?: {
627
+ allowOverCap?: boolean;
628
+ }): import("node:child_process").ChildProcess | undefined;
613
629
  /**
614
630
  * Handles a pooled child's per-job durable-report acknowledgement. A child
615
631
  * runs jobs concurrently and reports one `job-outcome` per job id.
@@ -679,14 +695,33 @@ export default class BackgroundJobsWorker {
679
695
  * cap — eagerly spawns a single replacement (1-for-1) so its capacity is
680
696
  * restored immediately without waiting for it to finish draining. The
681
697
  * replacement spawn is gated by the cap (the retiring child still counts as
682
- * live until it exits), so a full pool simply defers the replacement to the
683
- * retiring child's drain instead of spawning over capacity. The retiring
684
- * child stops receiving new jobs and is terminated only once its in-flight
685
- * set drains, so a long-running job (e.g. a build) is never cut off.
698
+ * live until it exits), so a full pool defers the replacement to the drain
699
+ * path. One bounded exception keeps the pool from ever advertising zero
700
+ * capacity: when this mark leaves no non-retiring child, a single liveness
701
+ * replacement spawns over the cap — live children stay bounded at
702
+ * `pooledRunnerCount + 1`, and the extra child is absorbed by the next
703
+ * draining exit. Without it, a full retirement wave (e.g. every child
704
+ * crossing the peak-RSS threshold after the same memory burst) silently
705
+ * removes all pooled capacity for the whole drain window, which can stretch
706
+ * to the longest in-flight job. When even the liveness spawn is unavailable
707
+ * (an over-cap child is already draining), the starvation is logged so it is
708
+ * visible instead of silent. The retiring child stops receiving new jobs and
709
+ * is terminated only once its in-flight set drains, so a long-running job
710
+ * (e.g. a build) is never cut off.
686
711
  * @param {import("node:child_process").ChildProcess} child - Child to retire.
687
712
  * @returns {void}
688
713
  */
689
714
  _beginRetirePooledChild(child: import("node:child_process").ChildProcess): void;
715
+ /**
716
+ * Logs one compact pooled-capacity event to the worker's own stderr (the
717
+ * surface that reaches the production log). Used by the bounded liveness
718
+ * replacement in `_beginRetirePooledChild`: the spawn that keeps dispatch
719
+ * alive through a full retirement wave, or the bounded starvation when an
720
+ * over-cap child is already draining and the pool must wait for an exit.
721
+ * @param {"pooled-capacity-liveness-spawn" | "pooled-capacity-starved"} event - Event name.
722
+ * @returns {void}
723
+ */
724
+ _logPooledCapacityEvent(event: "pooled-capacity-liveness-spawn" | "pooled-capacity-starved"): void;
690
725
  /**
691
726
  * Terminates a retiring pooled child once it has no in-flight jobs left.
692
727
  * @param {import("node:child_process").ChildProcess} child - Child to check.
@@ -1 +1 @@
1
- {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/worker.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/worker.js"],"names":[],"mappings":"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"}