signalk-container-helper 0.3.1 → 0.4.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/CHANGELOG.md CHANGED
@@ -1,3 +1,36 @@
1
+ # v0.4.0
2
+
3
+ - **`start()` and `applyUpdate()` accept an `AbortSignal`** via a new optional
4
+ `OperationOptions` argument. (`stop()` does not: it has nothing cancellable,
5
+ so accepting one would promise what it cannot deliver.) An aborted operation rejects with
6
+ `ContainerHelperError` code `cancelled`, flagged `reported` so `startSafely`
7
+ logs it rather than surfacing a plugin error for a stop the caller asked for.
8
+
9
+ Cancellation is **cooperative**: signalk-container's `ensureRunning`,
10
+ `recreate` and `stop` take no signal (only its one-off job API does), so a
11
+ call already in flight runs to completion. The signal cancels everything
12
+ around it — the manager-global wait, the drift probe, readiness polling, and
13
+ each step boundary. Those are the waits with minute-scale deadlines, and
14
+ cancelling them is what stops an abandoned start from continuing to work
15
+ against a container the caller has already torn down.
16
+
17
+ `waitForContainerManager` and `waitForHttpReady` take a `signal` too, so
18
+ their poll loops exit promptly instead of running out their full budget.
19
+ An aborted `waitForHttpReady` throws an `AbortError` (a `DOMException`,
20
+ matching what `fetch` itself throws) rather than its deadline error — a
21
+ caller that cancelled must be able to tell "I stopped this" from "the app
22
+ never came up", or a container it deliberately tore down surfaces a
23
+ readiness failure.
24
+
25
+ - **Lifecycle operations are serialized per `ManagedContainer`.** An
26
+ overlapping `start` and `stop` — a plugin restarted while its first start is
27
+ still waiting on readiness — now queue instead of interleaving, so `stop`
28
+ cannot land between `ensureRunning` and the readiness poll and leave the
29
+ plugin believing it started something it just removed. Callers that already
30
+ hold their own lifecycle lock see no behaviour change.
31
+
32
+ Every consumer plugin had built this itself; it belongs in the library.
33
+
1
34
  # v0.3.1
2
35
 
3
36
  Maintenance release. One small change reaches the published package; the rest of
package/README.md CHANGED
@@ -440,6 +440,7 @@ Adopt these even where you don't use the components:
440
440
  | `waitForHttpReady(url, opts)` | Poll until 2xx or deadline (throws) |
441
441
  | `probeHttpHealth(url, opts)` | Retrying liveness probe with slow-response detection (never throws) |
442
442
  | `fetchWithTimeout(url, opts)` | `fetch` with an `AbortController` timeout |
443
+ | `throwIfAborted(signal)` | Throw `ContainerHelperError` `cancelled` if the signal has fired — the check the lifecycle methods run between steps |
443
444
  | `startSafely(app, fn)` | Sync wrapper for async plugin startup — Signal K does not await `start()` |
444
445
  | `isValidImageTag(tag)` | Tag guard (`IMAGE_TAG_PATTERN`) |
445
446
  | `errMsg(err)` | Normalize unknown errors to strings |
@@ -450,18 +451,61 @@ Adopt these even where you don't use the components:
450
451
 
451
452
  `ContainerHelperError.code` values thrown by `start()` / `applyUpdate()`:
452
453
 
453
- | Code | Meaning |
454
- | --------------------- | ------------------------------------------------------------------------------ |
455
- | `manager-unavailable` | signalk-container never published its API within the budget |
456
- | `no-runtime` | Manager present, but no podman/docker was detected |
457
- | `invalid-tag` | Tag failed the `IMAGE_TAG_PATTERN` guard |
458
- | `address-unresolved` | No host:port could be found for the readiness port |
459
- | `not-ready` | The app never answered its health URL before the deadline |
460
- | `recreate-limbo` | Legacy update path removed the container but recreation failed — retry applies |
454
+ | Code | Meaning |
455
+ | --------------------- | --------------------------------------------------------------------------------------------------------- |
456
+ | `manager-unavailable` | signalk-container never published its API within the budget |
457
+ | `no-runtime` | Manager present, but no podman/docker was detected |
458
+ | `invalid-tag` | Tag failed the `IMAGE_TAG_PATTERN` guard |
459
+ | `address-unresolved` | No host:port could be found for the readiness port |
460
+ | `not-ready` | The app never answered its health URL before the deadline |
461
+ | `recreate-limbo` | Legacy update path removed the container but recreation failed — retry applies |
462
+ | `cancelled` | The `AbortSignal` passed to the operation fired (see [Cancelling an operation](#cancelling-an-operation)) |
461
463
 
462
464
  All errors thrown by the helpers have already been surfaced through
463
465
  `app.setPluginError` (`reported: true`), so `startSafely` won't report them twice.
464
466
 
467
+ ### Cancelling an operation
468
+
469
+ `start()` and `applyUpdate()` take an optional second argument carrying an
470
+ `AbortSignal`:
471
+
472
+ ```ts
473
+ const abort = new AbortController();
474
+
475
+ // in start():
476
+ startSafely(app, () =>
477
+ container.start(settings.imageTag, { signal: abort.signal }),
478
+ );
479
+
480
+ // in stop():
481
+ abort.abort(); // unblocks an in-flight start
482
+ await container.stop();
483
+ ```
484
+
485
+ `stop()` takes no signal: it has nothing cancellable — an unregister call and
486
+ one uninterruptible `manager.stop` — so accepting one would promise what it
487
+ cannot deliver. It is still serialized against the other operations.
488
+
489
+ An aborted operation rejects with `ContainerHelperError` code `cancelled`,
490
+ already flagged `reported`, so `startSafely` logs it at debug rather than
491
+ putting a plugin error on screen for something you asked for.
492
+
493
+ **Cancellation is cooperative, not pre-emptive.** signalk-container's
494
+ `ensureRunning`, `recreate` and `stop` take no signal — only its one-off job
495
+ API does — so a call already in flight runs to completion. What the signal
496
+ cancels is everything around it: waiting for the manager global, the drift
497
+ probe, readiness polling, and each step boundary. That is where the time
498
+ actually goes, since those are the polls with deadlines measured in minutes,
499
+ and it is what stops an abandoned start from continuing to work against a
500
+ container you have already torn down.
501
+
502
+ Operations are also **serialized per instance**. An overlapping `start` and
503
+ `stop` — a plugin restarted while its first start is still waiting on
504
+ readiness — queue rather than interleave, so `stop` can no longer land between
505
+ `ensureRunning` and the readiness poll and leave the plugin believing it
506
+ started something it just removed. Callers that already hold their own
507
+ lifecycle lock see no change.
508
+
465
509
  ### Version compatibility
466
510
 
467
511
  The helpers feature-detect newer signalk-container capabilities:
package/dist/http.d.ts CHANGED
@@ -30,6 +30,15 @@ export interface WaitForHttpReadyOptions {
30
30
  /** Per-request timeout. Default 2_000. */
31
31
  requestTimeoutMs?: number;
32
32
  fetchImpl?: FetchLike;
33
+ /**
34
+ * Stops polling when aborted, throwing an `AbortError` (a `DOMException`,
35
+ * matching what `fetch` itself throws) rather than the deadline error — a
36
+ * caller that cancelled must be able to tell "I stopped this" from "the app
37
+ * never came up". Without it, a caller that has given up still waits out
38
+ * the full `maxMs`: up to a minute of pointless requests against a
39
+ * container it is about to stop.
40
+ */
41
+ signal?: AbortSignal;
33
42
  }
34
43
  /**
35
44
  * Poll a URL until it answers 2xx, or throw when the deadline passes.
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAEA,8EAA8E;AAC9E,MAAM,MAAM,SAAS,GAAG,CACtB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,KACpD,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC,CAAC;AAExE,MAAM,WAAW,uBAAuB;IACtC,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC,CAUpE;AAED,MAAM,WAAW,uBAAuB;IACtC,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED,MAAM,WAAW,sBAAsB;IACrC,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,iBAAiB,CAAC,CA0B5B"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAEA,8EAA8E;AAC9E,MAAM,MAAM,SAAS,GAAG,CACtB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,KACpD,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC,CAAC;AAExE,MAAM,WAAW,uBAAuB;IACtC,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC,CAUpE;AAED,MAAM,WAAW,uBAAuB;IACtC,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,IAAI,CAAC,CAwCf;AAED,MAAM,WAAW,sBAAsB;IACrC,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,iBAAiB,CAAC,CA0B5B"}
package/dist/http.js CHANGED
@@ -21,10 +21,17 @@ export async function fetchWithTimeout(url, options = {}) {
21
21
  * containerized app's own health endpoint after ensureRunning.
22
22
  */
23
23
  export async function waitForHttpReady(url, options = {}) {
24
- const { maxMs = 60_000, intervalMs = 1_000, requestTimeoutMs = 2_000, fetchImpl, } = options;
24
+ const { maxMs = 60_000, intervalMs = 1_000, requestTimeoutMs = 2_000, fetchImpl, signal, } = options;
25
25
  const deadline = Date.now() + maxMs;
26
26
  let lastErr;
27
+ // Aborting must NOT fall through to the deadline message below: a caller
28
+ // that cancelled needs to tell "I stopped this" from "the app never came
29
+ // up", and reporting the latter would put a readiness failure on screen for
30
+ // a container it deliberately tore down.
31
+ const aborted = () => new DOMException(`Readiness polling aborted for ${url}${lastErr === undefined ? "" : ` (last error: ${errMsg(lastErr)})`}`, "AbortError");
27
32
  for (;;) {
33
+ if (signal?.aborted)
34
+ throw aborted();
28
35
  try {
29
36
  const res = await fetchWithTimeout(url, {
30
37
  timeoutMs: requestTimeoutMs,
@@ -37,6 +44,8 @@ export async function waitForHttpReady(url, options = {}) {
37
44
  catch (err) {
38
45
  lastErr = err;
39
46
  }
47
+ if (signal?.aborted)
48
+ throw aborted();
40
49
  if (Date.now() >= deadline)
41
50
  break;
42
51
  await sleep(intervalMs);
package/dist/http.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAe1C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAW,EACX,UAAmC,EAAE;IAErC,MAAM,EAAE,SAAS,GAAG,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAC3D,MAAM,IAAI,GAAG,SAAS,IAAI,KAAK,CAAC;IAChC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;IAC9D,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IACjE,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAYD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAW,EACX,UAAmC,EAAE;IAErC,MAAM,EACJ,KAAK,GAAG,MAAM,EACd,UAAU,GAAG,KAAK,EAClB,gBAAgB,GAAG,KAAK,EACxB,SAAS,GACV,GAAG,OAAO,CAAC;IACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;IACpC,IAAI,OAAgB,CAAC;IACrB,SAAS,CAAC;QACR,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE;gBACtC,SAAS,EAAE,gBAAgB;gBAC3B,SAAS;aACV,CAAC,CAAC;YACH,IAAI,GAAG,CAAC,EAAE;gBAAE,OAAO;YACnB,OAAO,GAAG,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,GAAG,GAAG,CAAC;QAChB,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ;YAAE,MAAM;QAClC,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;IACD,MAAM,IAAI,KAAK,CACb,GAAG,GAAG,gCAAgC,KAAK,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,CACpE,CAAC;AACJ,CAAC;AAuBD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAW,EACX,UAAkC,EAAE;IAEpC,MAAM,EACJ,QAAQ,GAAG,CAAC,EACZ,gBAAgB,GAAG,KAAK,EACxB,YAAY,GAAG,KAAK,EACpB,MAAM,GAAG,KAAK,EACd,SAAS,GACV,GAAG,OAAO,CAAC;IACZ,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC;QACpD,IAAI,OAAO,GAAG,CAAC;YAAE,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE;gBACtC,SAAS,EAAE,gBAAgB;gBAC3B,SAAS;aACV,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,SAAS;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;YACrC,OAAO,OAAO,GAAG,MAAM;gBACrB,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;gBACtC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;IACH,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC9B,CAAC"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,13 +2,13 @@ export * from "./types.js";
2
2
  export { getContainerManager, waitForContainerManager } from "./manager.js";
3
3
  export type { WaitForManagerOptions, ManagerWaitResult } from "./manager.js";
4
4
  export { ManagedContainer } from "./managed-container.js";
5
- export type { ManagedContainerOptions, ManagedUpdateOptions, ReadinessOptions, StartResult, RouterLike, ResponseLike, UpdateRoutesOptions, } from "./managed-container.js";
5
+ export type { ManagedContainerOptions, ManagedUpdateOptions, ReadinessOptions, StartResult, RouterLike, ResponseLike, UpdateRoutesOptions, OperationOptions, } from "./managed-container.js";
6
6
  export { AdoptedContainer } from "./adopted-container.js";
7
7
  export type { AdoptedContainerOptions } from "./adopted-container.js";
8
8
  export { buildVersionSource } from "./version-source.js";
9
9
  export type { VersionSourceSpec } from "./version-source.js";
10
10
  export { fetchWithTimeout, waitForHttpReady, probeHttpHealth } from "./http.js";
11
11
  export type { FetchLike, FetchWithTimeoutOptions, WaitForHttpReadyOptions, ProbeHttpHealthOptions, HealthProbeResult, } from "./http.js";
12
- export { startSafely, errMsg, isValidImageTag, IMAGE_TAG_PATTERN, ContainerHelperError, } from "./util.js";
12
+ export { startSafely, throwIfAborted, errMsg, isValidImageTag, IMAGE_TAG_PATTERN, ContainerHelperError, } from "./util.js";
13
13
  export type { ContainerHelperErrorCode } from "./util.js";
14
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC5E,YAAY,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EACV,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,YAAY,EACZ,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAChF,YAAY,EACV,SAAS,EACT,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,WAAW,EACX,MAAM,EACN,eAAe,EACf,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC5E,YAAY,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EACV,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAChF,YAAY,EACV,SAAS,EACT,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,WAAW,EACX,cAAc,EACd,MAAM,EACN,eAAe,EACf,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -4,5 +4,5 @@ export { ManagedContainer } from "./managed-container.js";
4
4
  export { AdoptedContainer } from "./adopted-container.js";
5
5
  export { buildVersionSource } from "./version-source.js";
6
6
  export { fetchWithTimeout, waitForHttpReady, probeHttpHealth } from "./http.js";
7
- export { startSafely, errMsg, isValidImageTag, IMAGE_TAG_PATTERN, ContainerHelperError, } from "./util.js";
7
+ export { startSafely, throwIfAborted, errMsg, isValidImageTag, IMAGE_TAG_PATTERN, ContainerHelperError, } from "./util.js";
8
8
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAU1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAQhF,OAAO,EACL,WAAW,EACX,MAAM,EACN,eAAe,EACf,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAW1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAQhF,OAAO,EACL,WAAW,EACX,cAAc,EACd,MAAM,EACN,eAAe,EACf,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,WAAW,CAAC"}
@@ -65,6 +65,24 @@ export interface ManagedContainerOptions {
65
65
  /** Injectable fetch for tests. */
66
66
  fetchImpl?: FetchLike;
67
67
  }
68
+ /** Per-call options shared by the long-running lifecycle operations. */
69
+ export interface OperationOptions {
70
+ /**
71
+ * Cancels the operation.
72
+ *
73
+ * **Cooperative, not pre-emptive.** signalk-container's `ensureRunning`,
74
+ * `recreate` and `stop` take no signal — only its one-off job API does — so
75
+ * a call already in flight runs to completion. What this cancels is
76
+ * everything around it: waiting for the manager global, the drift probe,
77
+ * readiness polling, and each step boundary. In practice that is where the
78
+ * time goes, since those are the polls with deadlines measured in minutes.
79
+ *
80
+ * Aborted operations reject with `ContainerHelperError` code `"cancelled"`,
81
+ * already flagged as reported so `startSafely` logs it rather than putting
82
+ * a plugin error on screen for something the caller asked for.
83
+ */
84
+ signal?: AbortSignal;
85
+ }
68
86
  export interface StartResult {
69
87
  manager: ContainerManagerApi;
70
88
  /** The resolved tag that was started. */
@@ -104,7 +122,19 @@ export declare class ManagedContainer {
104
122
  /** "http://host:port" once readiness resolved an address. */
105
123
  address: string | null;
106
124
  private updatesRegistered;
125
+ /**
126
+ * Serializes the lifecycle operations. Without it an overlapping
127
+ * start/stop — a plugin restarted while its first start is still waiting on
128
+ * readiness — interleaves ensureRunning and stop against the same container.
129
+ * Every consumer plugin had built its own lock for this; it belongs here.
130
+ */
131
+ private chain;
107
132
  constructor(options: ManagedContainerOptions);
133
+ /**
134
+ * Queue `fn` behind any operation already in flight. Both settlement paths
135
+ * advance the chain, so one rejection cannot wedge every later call.
136
+ */
137
+ private serialize;
108
138
  private get app();
109
139
  private status;
110
140
  private fail;
@@ -145,7 +175,8 @@ export declare class ManagedContainer {
145
175
  * (already reported via setPluginError) on fatal conditions; pair with
146
176
  * `startSafely` in a synchronous plugin.start().
147
177
  */
148
- start(tag?: string): Promise<StartResult>;
178
+ start(tag?: string, options?: OperationOptions): Promise<StartResult>;
179
+ private startInner;
149
180
  private registerUpdates;
150
181
  private awaitReadiness;
151
182
  /**
@@ -162,6 +193,7 @@ export declare class ManagedContainer {
162
193
  * instantly without a pull. Never throws.
163
194
  */
164
195
  stop(): Promise<void>;
196
+ private stopInner;
165
197
  /**
166
198
  * Apply a new tag now ("Update now" UX): recreate when available
167
199
  * (signalk-container 1.12.0+), otherwise the legacy
@@ -172,9 +204,10 @@ export declare class ManagedContainer {
172
204
  * Returns the resolved tag. When readiness is configured the address is
173
205
  * re-resolved afterwards (non-fatal on failure).
174
206
  */
175
- applyUpdate(tag: string): Promise<{
207
+ applyUpdate(tag: string, options?: OperationOptions): Promise<{
176
208
  tag: string;
177
209
  }>;
210
+ private applyUpdateInner;
178
211
  /** updates.checkOne — null when the manager is unavailable. */
179
212
  checkForUpdate(): Promise<UpdateCheckResult | null>;
180
213
  /** Container state; 'no-runtime' when the manager is unavailable. Never throws. */
@@ -1 +1 @@
1
- {"version":3,"file":"managed-container.d.ts","sourceRoot":"","sources":["../src/managed-container.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"managed-container.d.ts","sourceRoot":"","sources":["../src/managed-container.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { getContainerManager, waitForContainerManager } from "./manager.js";
2
2
  import { buildVersionSource, } from "./version-source.js";
3
3
  import { waitForHttpReady } from "./http.js";
4
- import { ContainerHelperError, errMsg, isValidImageTag } from "./util.js";
4
+ import { ContainerHelperError, errMsg, isValidImageTag, throwIfAborted, } from "./util.js";
5
5
  /**
6
6
  * Full lifecycle wrapper for a plugin-owned ("managed") container — the
7
7
  * signalk-backup / mayara archetype. One instance per container.
@@ -15,9 +15,25 @@ export class ManagedContainer {
15
15
  /** "http://host:port" once readiness resolved an address. */
16
16
  address = null;
17
17
  updatesRegistered = false;
18
+ /**
19
+ * Serializes the lifecycle operations. Without it an overlapping
20
+ * start/stop — a plugin restarted while its first start is still waiting on
21
+ * readiness — interleaves ensureRunning and stop against the same container.
22
+ * Every consumer plugin had built its own lock for this; it belongs here.
23
+ */
24
+ chain = Promise.resolve();
18
25
  constructor(options) {
19
26
  this.options = options;
20
27
  }
28
+ /**
29
+ * Queue `fn` behind any operation already in flight. Both settlement paths
30
+ * advance the chain, so one rejection cannot wedge every later call.
31
+ */
32
+ serialize(fn) {
33
+ const run = this.chain.then(fn, fn);
34
+ this.chain = run.then(() => undefined, () => undefined);
35
+ return run;
36
+ }
21
37
  get app() {
22
38
  return this.options.app;
23
39
  }
@@ -97,17 +113,23 @@ export class ManagedContainer {
97
113
  * (already reported via setPluginError) on fatal conditions; pair with
98
114
  * `startSafely` in a synchronous plugin.start().
99
115
  */
100
- async start(tag) {
116
+ async start(tag, options) {
117
+ return this.serialize(() => this.startInner(tag, options?.signal));
118
+ }
119
+ async startInner(tag, signal) {
101
120
  const { name, image, buildConfig, ensureOptions, managerTimeoutMs = 120_000, managerPollIntervalMs = 500, } = this.options;
121
+ throwIfAborted(signal);
102
122
  this.status("Waiting for signalk-container plugin...");
103
123
  const { manager, runtime } = await waitForContainerManager({
104
124
  timeoutMs: managerTimeoutMs,
105
125
  intervalMs: managerPollIntervalMs,
126
+ signal,
106
127
  onWaiting: (phase) => {
107
128
  if (phase === "runtime")
108
129
  this.status("Waiting for container runtime detection...");
109
130
  },
110
131
  });
132
+ throwIfAborted(signal);
111
133
  if (!manager) {
112
134
  this.fail("manager-unavailable", `signalk-container plugin not available after ${Math.round(managerTimeoutMs / 1000)}s. Install and enable it, then restart this plugin.`);
113
135
  }
@@ -125,6 +147,7 @@ export class ManagedContainer {
125
147
  if (typeof manager.recreate === "function") {
126
148
  try {
127
149
  const found = this.matchInfo(await manager.listContainers());
150
+ throwIfAborted(signal);
128
151
  if (found && found.image !== desiredImage) {
129
152
  this.status(`Recreating ${found.image} → ${desiredImage}...`);
130
153
  await manager.recreate(name, config, ensureOptions);
@@ -132,18 +155,26 @@ export class ManagedContainer {
132
155
  }
133
156
  }
134
157
  catch (probeErr) {
158
+ // A cancellation is not a probe failure — it must propagate, or the
159
+ // abandoned start would fall through and ensureRunning anyway.
160
+ if (probeErr instanceof ContainerHelperError &&
161
+ probeErr.code === "cancelled") {
162
+ throw probeErr;
163
+ }
135
164
  this.app.debug(`self-heal probe failed (non-fatal): ${errMsg(probeErr)}`);
136
165
  }
137
166
  }
138
167
  if (!reconciled) {
168
+ throwIfAborted(signal);
139
169
  this.status(`Starting ${desiredImage}...`);
140
170
  await manager.ensureRunning(name, config, ensureOptions);
141
171
  }
172
+ throwIfAborted(signal);
142
173
  this.lastStartedTag = resolved;
143
174
  this.registerUpdates(manager);
144
175
  this.address = null;
145
176
  if (this.options.readiness) {
146
- this.address = await this.awaitReadiness(resolved);
177
+ this.address = await this.awaitReadiness(resolved, signal);
147
178
  }
148
179
  return { manager, tag: resolved, address: this.address };
149
180
  }
@@ -169,7 +200,7 @@ export class ManagedContainer {
169
200
  this.app.debug(`updates.register failed (non-fatal): ${errMsg(err)}`);
170
201
  }
171
202
  }
172
- async awaitReadiness(tag) {
203
+ async awaitReadiness(tag, signal) {
173
204
  const readiness = this.options.readiness;
174
205
  const addr = await this.resolveAddress(readiness.port);
175
206
  if (!addr) {
@@ -184,9 +215,14 @@ export class ManagedContainer {
184
215
  intervalMs: readiness.intervalMs,
185
216
  requestTimeoutMs: readiness.requestTimeoutMs,
186
217
  fetchImpl: this.options.fetchImpl,
218
+ signal,
187
219
  });
188
220
  }
189
221
  catch (err) {
222
+ // A cancelled readiness wait is not a readiness failure — reporting it
223
+ // as one would put "never became ready" in the plugin error box for a
224
+ // container the caller deliberately abandoned.
225
+ throwIfAborted(signal);
190
226
  this.fail("not-ready", `${this.options.image}:${tag} started but ${url} never became ready: ${errMsg(err)}`);
191
227
  }
192
228
  return base;
@@ -232,6 +268,9 @@ export class ManagedContainer {
232
268
  * instantly without a pull. Never throws.
233
269
  */
234
270
  async stop() {
271
+ return this.serialize(() => this.stopInner());
272
+ }
273
+ async stopInner() {
235
274
  this.address = null;
236
275
  const manager = this.manager ?? getContainerManager();
237
276
  if (!manager)
@@ -262,7 +301,11 @@ export class ManagedContainer {
262
301
  * Returns the resolved tag. When readiness is configured the address is
263
302
  * re-resolved afterwards (non-fatal on failure).
264
303
  */
265
- async applyUpdate(tag) {
304
+ async applyUpdate(tag, options) {
305
+ return this.serialize(() => this.applyUpdateInner(tag, options?.signal));
306
+ }
307
+ async applyUpdateInner(tag, signal) {
308
+ throwIfAborted(signal);
266
309
  const manager = this.requireManager();
267
310
  const resolved = this.resolveTag(tag);
268
311
  const { name, image, buildConfig, ensureOptions } = this.options;
@@ -1 +1 @@
1
- {"version":3,"file":"managed-container.js","sourceRoot":"","sources":["../src/managed-container.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"managed-container.js","sourceRoot":"","sources":["../src/managed-container.ts"],"names":[],"mappings":"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"}
package/dist/manager.d.ts CHANGED
@@ -13,6 +13,13 @@ export interface WaitForManagerOptions {
13
13
  intervalMs?: number;
14
14
  /** Progress callback, e.g. to update the plugin status line per phase. */
15
15
  onWaiting?: (phase: "manager" | "runtime") => void;
16
+ /**
17
+ * Abandons the wait when aborted, returning what has been found so far
18
+ * rather than throwing — the caller decides whether an abort is an error.
19
+ * Without it, a plugin stopped during startup keeps polling for the manager
20
+ * until the full timeout elapses.
21
+ */
22
+ signal?: AbortSignal;
16
23
  }
17
24
  export interface ManagerWaitResult {
18
25
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAG5E;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,mBAAmB,GAAG,SAAS,CAErE;AAED,MAAM,WAAW,qBAAqB;IACpC,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,KAAK,IAAI,CAAC;CACpD;AAED,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,OAAO,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACzC;;;;;OAKG;IACH,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACtC;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,iBAAiB,CAAC,CA4B5B"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAG5E;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,mBAAmB,GAAG,SAAS,CAErE;AAED,MAAM,WAAW,qBAAqB;IACpC,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,KAAK,IAAI,CAAC;IACnD;;;;;OAKG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,OAAO,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACzC;;;;;OAKG;IACH,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACtC;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,iBAAiB,CAAC,CAgC5B"}
package/dist/manager.js CHANGED
@@ -21,10 +21,10 @@ export function getContainerManager() {
21
21
  * Never throws; inspect the result to pick the right error message.
22
22
  */
23
23
  export async function waitForContainerManager(options = {}) {
24
- const { timeoutMs = 60_000, intervalMs = 500, onWaiting } = options;
24
+ const { timeoutMs = 60_000, intervalMs = 500, onWaiting, signal } = options;
25
25
  const deadline = Date.now() + timeoutMs;
26
26
  let manager = getContainerManager();
27
- while (!manager && Date.now() < deadline) {
27
+ while (!manager && Date.now() < deadline && !signal?.aborted) {
28
28
  onWaiting?.("manager");
29
29
  await sleep(intervalMs);
30
30
  manager = getContainerManager();
@@ -40,7 +40,9 @@ export async function waitForContainerManager(options = {}) {
40
40
  }
41
41
  else {
42
42
  // Pre-1.6.0 fallback: poll until detection settles or the deadline hits.
43
- while (!manager.getRuntime() && Date.now() < deadline) {
43
+ while (!manager.getRuntime() &&
44
+ Date.now() < deadline &&
45
+ !signal?.aborted) {
44
46
  await sleep(intervalMs);
45
47
  }
46
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAElC;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,UAAU,CAAC,0BAA0B,CAAC;AAC/C,CAAC;AA0BD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,UAAiC,EAAE;IAEnC,MAAM,EAAE,SAAS,GAAG,MAAM,EAAE,UAAU,GAAG,GAAG,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAExC,IAAI,OAAO,GAAG,mBAAmB,EAAE,CAAC;IACpC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QACzC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC;QACvB,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;QACxB,OAAO,GAAG,mBAAmB,EAAE,CAAC;IAClC,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC/C,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;QAC1B,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC;QACvB,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YACrD,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,yEAAyE;YACzE,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;gBACtD,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAElC;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,UAAU,CAAC,0BAA0B,CAAC;AAC/C,CAAC;AAiCD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,UAAiC,EAAE;IAEnC,MAAM,EAAE,SAAS,GAAG,MAAM,EAAE,UAAU,GAAG,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAExC,IAAI,OAAO,GAAG,mBAAmB,EAAE,CAAC;IACpC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QAC7D,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC;QACvB,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;QACxB,OAAO,GAAG,mBAAmB,EAAE,CAAC;IAClC,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC/C,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;QAC1B,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC;QACvB,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YACrD,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,yEAAyE;YACzE,OACE,CAAC,OAAO,CAAC,UAAU,EAAE;gBACrB,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ;gBACrB,CAAC,MAAM,EAAE,OAAO,EAChB,CAAC;gBACD,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;AACpD,CAAC"}
package/dist/util.d.ts CHANGED
@@ -8,7 +8,7 @@ export declare function isValidImageTag(tag: unknown): tag is string;
8
8
  /** Normalize an unknown thrown value into a printable message. */
9
9
  export declare function errMsg(err: unknown): string;
10
10
  export declare function sleep(ms: number): Promise<void>;
11
- export type ContainerHelperErrorCode = "manager-unavailable" | "no-runtime" | "invalid-tag" | "address-unresolved" | "not-ready" | "recreate-limbo";
11
+ export type ContainerHelperErrorCode = "manager-unavailable" | "no-runtime" | "invalid-tag" | "address-unresolved" | "not-ready" | "recreate-limbo" | "cancelled";
12
12
  /**
13
13
  * Typed error thrown by ManagedContainer/AdoptedContainer operations.
14
14
  * `reported` is true when the helper already surfaced the message via
@@ -33,4 +33,20 @@ export declare class ContainerHelperError extends Error {
33
33
  * not re-reported; everything else lands in `setPluginError`.
34
34
  */
35
35
  export declare function startSafely(app: AppLike, fn: () => Promise<unknown>): void;
36
+ /**
37
+ * Throws if `signal` has been aborted.
38
+ *
39
+ * Called after every await inside a long container operation. This is the
40
+ * whole of the helper's cancellation: signalk-container exposes a signal only
41
+ * on its one-off job API, so `ensureRunning`/`recreate`/`stop` cannot be
42
+ * interrupted mid-call. Checking between steps is what stops an abandoned
43
+ * operation from continuing — through the manager-global wait, the drift
44
+ * probe and readiness polling — against a container the caller has already
45
+ * torn down.
46
+ *
47
+ * `reported: true` because a cancellation is the caller's own doing: it asked
48
+ * for the stop. Surfacing "Startup failed: cancelled" in the plugin error box
49
+ * would be noise, so startSafely logs it at debug instead.
50
+ */
51
+ export declare function throwIfAborted(signal?: AbortSignal): void;
36
52
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAAsB,CAAC;AAErD,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAO3D;AAED,kEAAkE;AAClE,wBAAgB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAE3C;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED,MAAM,MAAM,wBAAwB,GAChC,qBAAqB,GACrB,YAAY,GACZ,aAAa,GACb,oBAAoB,GACpB,WAAW,GACX,gBAAgB,CAAC;AAErB;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;IACxC,QAAQ,EAAE,OAAO,CAAC;gBAGhB,IAAI,EAAE,wBAAwB,EAC9B,OAAO,EAAE,MAAM,EACf,QAAQ,UAAQ;CAOnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAQ1E"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAAsB,CAAC;AAErD,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAO3D;AAED,kEAAkE;AAClE,wBAAgB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAE3C;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED,MAAM,MAAM,wBAAwB,GAChC,qBAAqB,GACrB,YAAY,GACZ,aAAa,GACb,oBAAoB,GACpB,WAAW,GACX,gBAAgB,GAChB,WAAW,CAAC;AAEhB;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;IACxC,QAAQ,EAAE,OAAO,CAAC;gBAGhB,IAAI,EAAE,wBAAwB,EAC9B,OAAO,EAAE,MAAM,EACf,QAAQ,UAAQ;CAOnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAQ1E;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAQzD"}
package/dist/util.js CHANGED
@@ -53,4 +53,24 @@ export function startSafely(app, fn) {
53
53
  app.setPluginError(`Startup failed: ${errMsg(err)}`);
54
54
  });
55
55
  }
56
+ /**
57
+ * Throws if `signal` has been aborted.
58
+ *
59
+ * Called after every await inside a long container operation. This is the
60
+ * whole of the helper's cancellation: signalk-container exposes a signal only
61
+ * on its one-off job API, so `ensureRunning`/`recreate`/`stop` cannot be
62
+ * interrupted mid-call. Checking between steps is what stops an abandoned
63
+ * operation from continuing — through the manager-global wait, the drift
64
+ * probe and readiness polling — against a container the caller has already
65
+ * torn down.
66
+ *
67
+ * `reported: true` because a cancellation is the caller's own doing: it asked
68
+ * for the stop. Surfacing "Startup failed: cancelled" in the plugin error box
69
+ * would be noise, so startSafely logs it at debug instead.
70
+ */
71
+ export function throwIfAborted(signal) {
72
+ if (signal?.aborted) {
73
+ throw new ContainerHelperError("cancelled", "Operation cancelled by the caller.", true);
74
+ }
75
+ }
56
76
  //# sourceMappingURL=util.js.map
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAErD,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,CAAC,MAAM,GAAG,CAAC;QACd,GAAG,CAAC,MAAM,IAAI,GAAG;QACjB,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAC5B,CAAC;AACJ,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,MAAM,CAAC,GAAY;IACjC,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAUD;;;;GAIG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACpC,IAAI,CAA2B;IACxC,QAAQ,CAAU;IAElB,YACE,IAA8B,EAC9B,OAAe,EACf,QAAQ,GAAG,KAAK;QAEhB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY,EAAE,EAA0B;IAClE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QAC1B,IAAI,GAAG,YAAY,oBAAoB,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACxD,GAAG,CAAC,KAAK,CAAC,oBAAoB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QACD,GAAG,CAAC,cAAc,CAAC,mBAAmB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAErD,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,CAAC,MAAM,GAAG,CAAC;QACd,GAAG,CAAC,MAAM,IAAI,GAAG;QACjB,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAC5B,CAAC;AACJ,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,MAAM,CAAC,GAAY;IACjC,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAWD;;;;GAIG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACpC,IAAI,CAA2B;IACxC,QAAQ,CAAU;IAElB,YACE,IAA8B,EAC9B,OAAe,EACf,QAAQ,GAAG,KAAK;QAEhB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY,EAAE,EAA0B;IAClE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QAC1B,IAAI,GAAG,YAAY,oBAAoB,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACxD,GAAG,CAAC,KAAK,CAAC,oBAAoB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QACD,GAAG,CAAC,cAAc,CAAC,mBAAmB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,oBAAoB,CAC5B,WAAW,EACX,oCAAoC,EACpC,IAAI,CACL,CAAC;IACJ,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "signalk-container-helper",
3
- "version": "0.3.1",
3
+ "version": "0.4.0",
4
4
  "description": "Helper library for Signal K plugins that manage containers via the signalk-container plugin",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",