signalk-container 1.5.0 → 1.7.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.
@@ -1,4 +1,5 @@
1
- import { ContainerConfig, ContainerInfo, ContainerRuntimeInfo, ContainerState, HealthCheckOptions } from "./types";
1
+ import { ContainerConfig, ContainerInfo, ContainerRuntimeInfo, ContainerState, HealthCheckOptions, VolumeIssue, VolumeSpec } from "./types";
2
+ import { StreamingProcessHandle, spawnRuntimeStreaming } from "./runtime";
2
3
  /**
3
4
  * Build the value for a `-v <source>:<dest>[:flags]` argument with the
4
5
  * correct SELinux relabel suffix for the runtime.
@@ -11,8 +12,162 @@ import { ContainerConfig, ContainerInfo, ContainerRuntimeInfo, ContainerState, H
11
12
  * inputs/outputs (jobs.ts) so the named-volume guard stays in one place.
12
13
  */
13
14
  export declare function volumeArg(hostPath: string, containerPath: string, runtime: ContainerRuntimeInfo, readOnly?: boolean): string;
15
+ /**
16
+ * Classify each volume entry against host-source existence and the
17
+ * declared `ifMissing` policy. Returns:
18
+ *
19
+ * - `kept`: the volumes that should be passed to the runtime,
20
+ * normalized to bare-string form (the shape `buildRunArgs` and
21
+ * `diffContainerConfig` already consume).
22
+ * - `skipped`: host-path volumes whose source is missing AND whose
23
+ * policy is `'skip'`. Caller should emit `onVolumeIssue`
24
+ * events for each.
25
+ * - `aborted`: host-path volumes whose source is missing AND whose
26
+ * policy is `'abort'`. Caller should emit `onVolumeIssue`
27
+ * events then throw.
28
+ *
29
+ * Bare-string entries and `ifMissing: 'create'` entries always end
30
+ * up in `kept` (the runtime auto-creates the host dir on demand,
31
+ * matching today's behaviour for the bare-string form).
32
+ *
33
+ * Named volumes (source without a leading `/` or `.`) always end up
34
+ * in `kept` regardless of policy — the runtime owns their lifecycle.
35
+ *
36
+ * `probe` is the host-path existence check; defaults to `existsSync`.
37
+ * Tests inject a stub so they don't touch the filesystem.
38
+ */
39
+ export declare function classifyVolumeSources(volumes: Record<string, string | VolumeSpec> | undefined, probe?: (path: string) => boolean): {
40
+ kept: Record<string, string>;
41
+ skipped: Array<{
42
+ containerPath: string;
43
+ source: string;
44
+ }>;
45
+ aborted: Array<{
46
+ containerPath: string;
47
+ source: string;
48
+ }>;
49
+ };
50
+ /**
51
+ * Given the volume issues from the last `ensureRunning` call (both
52
+ * skipped and aborted entries) and the current call's classification,
53
+ * return the list of entries that are now present and applied — i.e.
54
+ * recovered. Used to fire `onVolumeIssue` with `action: 'recovered'`
55
+ * after the inner `ensureRunning` has recreated the container to
56
+ * include the recovered mount.
57
+ *
58
+ * A volume has "recovered" when:
59
+ * - it was in `prior.skipped` or `prior.aborted` (i.e. missing on
60
+ * the last call), AND
61
+ * - it is NOT in the current call's `currentSkipped` or
62
+ * `currentAborted` (i.e. it is no longer missing), AND
63
+ * - its `containerPath` is in `kept` (i.e. the runtime will actually
64
+ * mount it this time).
65
+ *
66
+ * Pure function — no I/O.
67
+ */
68
+ export declare function collectRecoveredVolumes(prior: {
69
+ skipped: Array<{
70
+ containerPath: string;
71
+ source: string;
72
+ }>;
73
+ aborted: Array<{
74
+ containerPath: string;
75
+ source: string;
76
+ }>;
77
+ } | undefined, currentSkipped: Array<{
78
+ containerPath: string;
79
+ source: string;
80
+ }>, currentAborted: Array<{
81
+ containerPath: string;
82
+ source: string;
83
+ }>, kept: Record<string, string>): Array<{
84
+ containerPath: string;
85
+ source: string;
86
+ }>;
87
+ /**
88
+ * Invoke an `onVolumeIssue` callback safely. Synchronous throws AND
89
+ * rejected promises both route to `reportError`, so handler bugs (in
90
+ * either flavour) never escape as unhandled rejections.
91
+ *
92
+ * The declared callback type is `(event) => void | Promise<void>`,
93
+ * but TS allows assigning a plain async function where `void` is
94
+ * expected — the eventual rejection bypasses a naive `try/catch`.
95
+ * Wrap the call in `Promise.resolve(...).catch(...)` so the same
96
+ * error path catches both shapes.
97
+ *
98
+ * Pure-by-design: `reportError` is injected so tests can capture
99
+ * the message instead of writing to `app.error`.
100
+ */
101
+ export declare function safeInvokeVolumeIssue(handler: ((event: VolumeIssue) => void | Promise<void>) | undefined, event: VolumeIssue, reportError: (err: unknown) => void): void;
102
+ /**
103
+ * Invoke an `onContainerLog` callback safely. Synchronous throws AND
104
+ * rejected promises both route to `reportError`, so handler bugs (in
105
+ * either flavour) never escape as unhandled rejections. Same shape
106
+ * and rationale as `safeInvokeVolumeIssue` — see that helper's
107
+ * doc for why the `try { Promise.resolve(...).catch(...) }` dance
108
+ * is needed.
109
+ */
110
+ export declare function safeInvokeContainerLog(handler: ((line: string) => void | Promise<void>) | undefined, line: string, reportError: (err: unknown) => void): void;
111
+ /**
112
+ * Spawn `podman logs -f --tail=N sk-<name>` (or `docker logs -f`)
113
+ * and emit each line to `onLine`. Returns a stop-handle; the caller
114
+ * manages lifecycle (start after the container is running; stop on
115
+ * remove or recreate).
116
+ *
117
+ * `startTail` controls history-backfill on attach. Default 0 →
118
+ * only live lines after attach. Set to e.g. 100 for "last 100 +
119
+ * live" semantics. Both runtime CLIs accept `--tail` identically.
120
+ *
121
+ * `spawn` is exposed for tests (defaults to `spawnRuntimeStreaming`).
122
+ */
123
+ export declare function tailContainerLogs(runtime: ContainerRuntimeInfo, name: string, onLine: (line: string) => void, options?: {
124
+ startTail?: number;
125
+ onError?: (msg: string) => void;
126
+ onExit?: (code: number | null) => void;
127
+ spawn?: typeof spawnRuntimeStreaming;
128
+ }): StreamingProcessHandle;
129
+ /** Upper bound for `--tail N` accepted at the public boundary. */
130
+ export declare const MAX_TAIL = 10000;
131
+ /**
132
+ * Validate an optional unsigned-integer query parameter (e.g.
133
+ * `?tail=200`, `?since=1700000000`) at the public REST boundary.
134
+ * Returns `{ value }` on success (or `undefined` when the input
135
+ * was omitted/empty) and `{ error }` with a human-readable
136
+ * message for non-integer, negative, or non-finite inputs.
137
+ *
138
+ * Used by the `/logs` route to reject malformed inputs with 400
139
+ * instead of forwarding silently-coerced values to runtime-facing
140
+ * logic. Exported so the parser is testable in isolation.
141
+ */
142
+ export declare function parsePositiveIntQuery(raw: unknown, field: string): {
143
+ value: number | undefined;
144
+ error?: string;
145
+ };
146
+ /**
147
+ * Capture the last `tail` lines of a managed container's stdout
148
+ * and stderr via `podman logs --tail <N>` (no `-f`). Returns the
149
+ * array of lines. Caps `tail` at 10000 to prevent runaway-buffer
150
+ * requests against very chatty containers; `since` is a unix-epoch-
151
+ * seconds filter passed through to the runtime.
152
+ *
153
+ * Ordering caveat: `execFile` reads the runtime's stdout and stderr
154
+ * into separate buffers — the OS-level chronological interleave
155
+ * between the two is lost before we see them. We return stdout
156
+ * lines (in order) followed by stderr lines (in order); a stderr
157
+ * line the container actually emitted between two stdout lines
158
+ * will appear after the stdout chunk. This is a known limitation
159
+ * of one-shot capture; per-line `--timestamps` parsing would be
160
+ * the only way to reconstruct true chronology and is out of scope.
161
+ *
162
+ * Used both by the `GET /containers/:name/logs` REST route and by
163
+ * `ContainerManagerApi.getLogs` for in-process consumer-plugin calls.
164
+ */
165
+ export declare function getContainerLogs(runtime: ContainerRuntimeInfo, name: string, options?: {
166
+ tail?: number;
167
+ since?: number;
168
+ }, exec?: ExecFn): Promise<string[]>;
14
169
  export declare function qualifyImage(image: string, runtime: ContainerRuntimeInfo): string;
15
- export declare function imageExists(runtime: ContainerRuntimeInfo, image: string): Promise<boolean>;
170
+ export declare function imageExists(runtime: ContainerRuntimeInfo, image: string, exec?: ExecFn): Promise<boolean>;
16
171
  /**
17
172
  * Return the local image ID (sha256 digest) for a given image reference,
18
173
  * or null if the image is not present locally. Used for digest-drift
@@ -95,10 +250,84 @@ export declare function parsePortBindings(json: string): Map<number, PortBinding
95
250
  * had pre-validation.
96
251
  */
97
252
  export declare function getActualPortBindings(runtime: ContainerRuntimeInfo, name: string, exec?: ExecFn): Promise<Map<number, PortBinding[]>>;
98
- export declare function ensureRunning(runtime: ContainerRuntimeInfo, name: string, config: ContainerConfig, debug: (msg: string) => void, options?: HealthCheckOptions): Promise<void>;
253
+ /**
254
+ * The recreate-requiring half of a live container's effective config, parsed
255
+ * from a single `inspect` call. Mirror of the recreate-requiring fields on
256
+ * `ContainerConfig` after `buildRunArgs` would have rendered them. Resources
257
+ * have their own `getLiveResources` reader and live-update path.
258
+ *
259
+ * `image+tag` come from `.Config.Image` (the as-passed reference like
260
+ * `questdb/questdb:latest`), not `.Image` (the resolved sha256 digest) —
261
+ * digest-drift detection is the update service's job (`src/updates/`).
262
+ */
263
+ export interface LiveContainerConfig {
264
+ image: string;
265
+ tag: string;
266
+ command: string[] | null;
267
+ networkMode: string;
268
+ env: Map<string, string>;
269
+ binds: Array<{
270
+ host: string;
271
+ container: string;
272
+ }>;
273
+ portBindings: Map<string, PortBinding[]>;
274
+ }
275
+ /**
276
+ * Read the live equivalent of `ContainerConfig`'s recreate-requiring fields
277
+ * for an already-running container. Returns `null` on inspect failure (the
278
+ * caller treats that as "can't diff, fall back to early-return" — fail-safe).
279
+ *
280
+ * Used by `ensureRunning` to detect drift between the requested config and
281
+ * what the container was actually created with, so a recreate can fire
282
+ * automatically instead of silently ignoring the new config until restart.
283
+ */
284
+ export declare function getLiveContainerConfig(runtime: ContainerRuntimeInfo, name: string, exec?: ExecFn): Promise<LiveContainerConfig | null>;
285
+ /**
286
+ * Compare a requested `ContainerConfig` against the live container's
287
+ * effective config and return the list of fields that have drifted.
288
+ *
289
+ * Pure function — no I/O. The caller (`ensureRunning`) decides what to do
290
+ * with a non-empty drift list (today: log + remove + recreate).
291
+ *
292
+ * Field semantics:
293
+ * - image+tag: tag-string equality only, never digest. Update detection
294
+ * for floating tags (`:latest` digest drift) is the update service's job.
295
+ * - command: explicit drift when `requested.command` is set and differs
296
+ * from `live.command`. When `requested.command` is undefined, drift is
297
+ * reported only if a `prior.command` was set (i.e. the user is now
298
+ * unsetting it). Without a `prior`, an undefined `requested.command`
299
+ * can't be told apart from "image's baked CMD" so we skip — the
300
+ * wrapper's prior-config cache (`lastConfigs`) closes that loop on the
301
+ * second-and-later calls within a single signalk-container lifetime.
302
+ * - networkMode: runtime defaults (`bridge`, `slirp4netns`, etc.) are
303
+ * normalized to `""` and compared as equivalent to requested undefined.
304
+ * - env: requested keys must match live values. Additionally, any key
305
+ * present in `prior.env` but absent from `requested.env` is treated
306
+ * as drift (the user is unsetting it). Image-baked env keys not in
307
+ * either `requested.env` or `prior.env` are ignored — they were never
308
+ * ours.
309
+ * - volumes: trailing slashes stripped on both sides; `(host, container)`
310
+ * tuples compared as a Map keyed by container path. Live binds have
311
+ * their `:Z`/`:ro` flags already stripped by `getLiveContainerConfig`.
312
+ * - ports: container-port key compared as runtime-emitted (`9000/tcp`).
313
+ * Multiple host bindings per container port compared as a sorted set.
314
+ */
315
+ export declare function diffContainerConfig(requested: ContainerConfig, live: LiveContainerConfig, runtime: ContainerRuntimeInfo, prior?: ContainerConfig): {
316
+ drifted: string[];
317
+ };
318
+ export declare function ensureRunning(runtime: ContainerRuntimeInfo, name: string, config: ContainerConfig, debug: (msg: string) => void, options?: HealthCheckOptions, exec?: ExecFn,
319
+ /**
320
+ * Prior `ContainerConfig` from the previous `ensureRunning` call within
321
+ * this signalk-container lifetime, if any. Used to detect "unset" drift
322
+ * — env keys removed, `command` previously set and now undefined. The
323
+ * wrapper in `index.ts` reads from its `lastConfigs` cache before
324
+ * overwriting it; on the first call (or after a Signal K restart) this
325
+ * will be undefined and only positive drift is detected.
326
+ */
327
+ prior?: ContainerConfig, _postRecreate?: boolean): Promise<void>;
99
328
  export declare function startContainer(runtime: ContainerRuntimeInfo, name: string): Promise<void>;
100
329
  export declare function stopContainer(runtime: ContainerRuntimeInfo, name: string): Promise<void>;
101
- export declare function removeContainer(runtime: ContainerRuntimeInfo, name: string): Promise<void>;
330
+ export declare function removeContainer(runtime: ContainerRuntimeInfo, name: string, exec?: ExecFn): Promise<void>;
102
331
  export declare function listContainers(runtime: ContainerRuntimeInfo): Promise<ContainerInfo[]>;
103
332
  export declare function pruneImages(runtime: ContainerRuntimeInfo): Promise<{
104
333
  imagesRemoved: number;
@@ -1 +1 @@
1
- {"version":3,"file":"containers.d.ts","sourceRoot":"","sources":["../src/containers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"containers.d.ts","sourceRoot":"","sources":["../src/containers.ts"],"names":[],"mappings":"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"}