@compforge/harness-toolbox 0.5.5 → 0.5.6

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
@@ -152,23 +152,27 @@ selectorless Services and failed access raise KubernetesError.
152
152
 
153
153
  The resource path uses client-node kubeconfig authentication/TLS and bounded native JSON reads,
154
154
  not kubectl error text. Configure request timeout, concurrency and response bytes with the
155
- client's ResourceLimits constructor argument. Native exec uses the same root capacity/byte policy
155
+ client's ResourceLimits constructor argument. Exec uses the same root capacity/byte policy
156
156
  with a separate slot pool; its per-call timeout defaults to that policy and covers queueing,
157
157
  authentication, upgrade and execution. Explicit per-call timeouts support longer commands.
158
158
 
159
- Exec requires `get pods/exec` permission for the WebSocket upgrade (kubectl/SPDY paths may use
160
- `create pods/exec`). It connects directly to the Pod exec WebSocket endpoint without a preliminary Pod GET or
161
- kubectl subprocess. Each command owns a stream session; failures are never retried or replayed.
162
- Kubeconfig controls authentication, TLS and proxy access. stdout/stderr and remote exit status
163
- remain separate; retained output and individual messages are bounded. Streaming callers may
164
- set `collectStdout: false` and enforce their own total byte budget. Root disposal cancels active
165
- and queued sessions. Protocol v4 is accepted for output-only commands; stdin requires v5 to
166
- close input without losing remaining output/status. Bun does not expose HTTP upgrade rejection
167
- status, so those failures retain an unknown connection error. Native exec with a kubeconfig
168
- proxy requires Node: Bun cannot reliably release proxy sockets or preserve TLS name overrides.
169
- It fails before opening a session on Bun; use Node or explicitly provide an Executor adapter.
170
- The transport never bypasses the proxy or TLS checks.
171
- Port-forward still uses kubectl.
159
+ Output-only exec connects directly to the Pod exec WebSocket endpoint without a preliminary
160
+ Pod GET and requires `get pods/exec`. Commands with explicit stdin (including empty input) use
161
+ `kubectl exec -i`, which handles input EOF through SPDY/v5 on older and newer clusters. This
162
+ path requires a compatible kubectl on the Host, Pod read permission and `create pods/exec`
163
+ for SPDY (`get pods/exec` for WebSocket). The channel is selected before execution; failures
164
+ are never retried or replayed by Toolbox. The result's `command` records the actual channel.
165
+ Kubeconfig controls authentication, TLS and proxy access. Both paths share the root exec slot
166
+ pool, deadline, retained-output byte limit and cancellation. stdout/stderr remain separate;
167
+ native exec uses remote status and kubectl uses process exit status, retaining raw CLI stderr
168
+ without guessing structured HTTP error kinds. Streaming callers may set `collectStdout: false`
169
+ and enforce their own total byte budget; individual output chunks remain bounded. Root disposal
170
+ cancels active and queued sessions and waits for the local kubectl process to exit.
171
+ Output-only sessions accept v4/v5. Bun does not expose HTTP upgrade rejection status, so those
172
+ failures retain an unknown connection error. Native exec with a kubeconfig proxy requires Node:
173
+ Bun cannot reliably release proxy sockets or preserve TLS name overrides. This restriction does
174
+ not apply to the kubectl stdin path. Neither path bypasses proxy or TLS checks.
175
+ Port-forward also uses kubectl.
172
176
  See [the shared Workload model](../../../docs/workload.md).
173
177
 
174
178
  ```ts
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-6fnhzhdb.js";
9
9
  import {
10
10
  PortForwardScope
11
- } from "./chunk-mvkxs8d0.js";
11
+ } from "./chunk-v9rcxg0e.js";
12
12
 
13
13
  // src/kubernetes/service-port-forward.ts
14
14
  class ServicePortForwarder {
@@ -1,6 +1,10 @@
1
1
  import {
2
2
  ConcurrencyPool
3
3
  } from "./chunk-v3hxvnrc.js";
4
+ import {
5
+ KubectlExecutor,
6
+ buildExecArgs
7
+ } from "./chunk-evb5tj13.js";
4
8
  import {
5
9
  KubernetesError,
6
10
  kubernetesHttpError
@@ -10,29 +14,28 @@ import {
10
14
  import { KubeConfig } from "@kubernetes/client-node";
11
15
  import WebSocket from "ws";
12
16
  class KubernetesExecTransport {
17
+ connection;
13
18
  signal;
14
19
  limits;
15
20
  #config = new KubeConfig;
16
21
  #capacity;
17
22
  #server;
18
- constructor(options, signal, limits) {
23
+ constructor(connection, signal, limits) {
24
+ this.connection = connection;
19
25
  this.signal = signal;
20
26
  this.limits = limits;
21
27
  if (!Object.values(limits).every((value) => Number.isSafeInteger(value) && value > 0)) {
22
28
  throw new KubernetesError("Exec limits must be positive integers", { kind: "invalid_argument" });
23
29
  }
24
- if (options.kubeconfig)
25
- this.#config.loadFromFile(options.kubeconfig);
30
+ if (connection.kubeconfig)
31
+ this.#config.loadFromFile(connection.kubeconfig);
26
32
  else
27
33
  this.#config.loadFromDefault();
28
- if (options.context)
29
- this.#config.setCurrentContext(options.context);
34
+ if (connection.context)
35
+ this.#config.setCurrentContext(connection.context);
30
36
  const cluster = this.#config.getCurrentCluster();
31
37
  if (!cluster)
32
38
  throw new KubernetesError("Kubernetes context has no cluster", { kind: "invalid_argument" });
33
- if (process.versions.bun && cluster.proxyUrl) {
34
- throw new KubernetesError("Native exec through a kubeconfig proxy requires a Node host", { kind: "unsupported_operation" });
35
- }
36
39
  this.#server = cluster.server.replace(/\/$/, "");
37
40
  if (new URL(cluster.server).protocol === "http:")
38
41
  this.#config.clusters = this.#config.clusters.map((item) => item === cluster ? { ...item, skipTLSVerify: true } : item);
@@ -49,17 +52,71 @@ class KubernetesExecTransport {
49
52
  const signal = AbortSignal.any([caller, deadline.signal]);
50
53
  const timer = setTimeout(() => deadline.abort(), timeoutMs);
51
54
  try {
52
- return await this.#capacity.run(() => this.#session(namespace, target, command, options, signal, started, deadline.signal), signal);
55
+ return await this.#capacity.run(() => options.stdin === undefined ? this.#session(namespace, target, command, options, signal, started, deadline.signal) : this.#stdinSession(namespace, target, command, options, signal, started), signal);
53
56
  } catch (error) {
54
57
  if (caller.aborted)
55
58
  throw caller.reason;
56
- if (deadline.signal.aborted)
57
- return this.#result(namespace, target, command, started, null, "", "Exec deadline exceeded", true);
59
+ if (deadline.signal.aborted) {
60
+ const result = this.#result(namespace, target, command, started, null, "", "Exec deadline exceeded", true);
61
+ if (options.stdin !== undefined)
62
+ result.command = buildExecArgs({ ...this.connection, namespace }, target, command, true);
63
+ return result;
64
+ }
58
65
  throw error;
59
66
  } finally {
60
67
  clearTimeout(timer);
61
68
  }
62
69
  }
70
+ async#stdinSession(namespace, target, command, options, signal, started) {
71
+ const controller = new AbortController;
72
+ const combined = AbortSignal.any([signal, controller.signal]);
73
+ let retained = 0;
74
+ let stdout = "";
75
+ let failure;
76
+ const guard = (action) => {
77
+ if (combined.aborted)
78
+ return;
79
+ try {
80
+ action();
81
+ } catch (cause) {
82
+ failure = cause;
83
+ controller.abort(cause);
84
+ throw cause;
85
+ }
86
+ };
87
+ const count = (size, retain) => {
88
+ if (retain)
89
+ retained += size;
90
+ if (size > this.limits.maxBytes || retained > this.limits.maxBytes) {
91
+ throw new KubernetesError(`Kubernetes exec ${namespace}/${target.pod} output exceeds ${this.limits.maxBytes} bytes`, { kind: "limit_exceeded" });
92
+ }
93
+ };
94
+ const executor = new KubectlExecutor({ ...this.connection, namespace });
95
+ const result = await executor.exec(target, command, {
96
+ ...options,
97
+ signal: combined,
98
+ timeoutMs: Math.max(1, (options.timeoutMs ?? this.limits.timeoutMs) - (performance.now() - started)),
99
+ collectStdout: false,
100
+ onStdoutBytes: (bytes) => guard(() => {
101
+ count(bytes.length, options.collectStdout !== false);
102
+ options.onStdoutBytes?.(bytes);
103
+ }),
104
+ onStdout: (text) => guard(() => {
105
+ if (options.collectStdout !== false)
106
+ stdout += text;
107
+ options.onStdout?.(text);
108
+ }),
109
+ onStderr: (text) => guard(() => {
110
+ count(Buffer.byteLength(text), true);
111
+ options.onStderr?.(text);
112
+ })
113
+ });
114
+ if (controller.signal.aborted)
115
+ throw failure;
116
+ if (signal.aborted)
117
+ throw signal.reason;
118
+ return { ...result, stdout, durationMs: performance.now() - started };
119
+ }
63
120
  #result(namespace, target, command, started, exitCode, stdout, stderr, timedOut = false) {
64
121
  return {
65
122
  ok: exitCode === 0 && !timedOut,
@@ -81,10 +138,12 @@ class KubernetesExecTransport {
81
138
  };
82
139
  }
83
140
  #session(namespace, target, command, options, signal, started, deadline) {
141
+ if (process.versions.bun && this.#config.getCurrentCluster()?.proxyUrl) {
142
+ throw new KubernetesError("Native exec through a kubeconfig proxy requires a Node host", { kind: "unsupported_operation" });
143
+ }
84
144
  return new Promise((resolve, reject) => {
85
145
  let socket;
86
146
  let agent;
87
- let input;
88
147
  let settled = false;
89
148
  let stdout = "", stderr = "", retained = 0;
90
149
  const outDecoder = new TextDecoder, errDecoder = new TextDecoder;
@@ -95,7 +154,6 @@ class KubernetesExecTransport {
95
154
  signal.removeEventListener("abort", abort);
96
155
  socket?.terminate();
97
156
  agent?.destroy();
98
- input?.cancel().catch(() => {});
99
157
  const tail = outDecoder.decode(), errTail = errDecoder.decode();
100
158
  if (options.collectStdout !== false)
101
159
  stdout += tail;
@@ -140,11 +198,11 @@ Exec deadline exceeded`;
140
198
  url.searchParams.append("command", arg);
141
199
  url.searchParams.set("stdout", "true");
142
200
  url.searchParams.set("stderr", "true");
143
- url.searchParams.set("stdin", String(options.stdin !== undefined));
201
+ url.searchParams.set("stdin", "false");
144
202
  url.searchParams.set("tty", "false");
145
203
  if (target.container)
146
204
  url.searchParams.set("container", target.container);
147
- socket = new WebSocket(url, options.stdin === undefined ? ["v5.channel.k8s.io", "v4.channel.k8s.io"] : ["v5.channel.k8s.io"], { ...request, ...process.versions.bun ? { tls: {
205
+ socket = new WebSocket(url, ["v5.channel.k8s.io", "v4.channel.k8s.io"], { ...request, ...process.versions.bun ? { tls: {
148
206
  ca: request.ca,
149
207
  cert: request.cert,
150
208
  key: request.key,
@@ -225,37 +283,6 @@ Exec deadline exceeded`;
225
283
  fail("invalid_response", error);
226
284
  }
227
285
  });
228
- socket.on("open", () => {
229
- if (options.stdin === undefined || settled)
230
- return;
231
- const send = (bytes) => new Promise((done, failed) => {
232
- if (settled) {
233
- failed(new Error("Exec closed"));
234
- return;
235
- }
236
- socket.send(Buffer.concat([Buffer.from([0]), bytes]), (error) => error ? failed(error) : done());
237
- });
238
- (async () => {
239
- const stdin = options.stdin;
240
- if (typeof stdin === "string" || stdin instanceof Uint8Array)
241
- await send(typeof stdin === "string" ? new TextEncoder().encode(stdin) : stdin);
242
- else {
243
- const reader = stdin.getReader();
244
- input = reader;
245
- while (!settled) {
246
- const chunk = await reader.read();
247
- if (chunk.done)
248
- break;
249
- await send(chunk.value);
250
- }
251
- }
252
- if (!settled)
253
- socket.send(Buffer.from([255, 0]));
254
- })().catch((error) => {
255
- if (!settled)
256
- fail("connection_failed", error);
257
- });
258
- });
259
286
  }).catch((error) => {
260
287
  if (!settled)
261
288
  fail("connection_failed", error);
@@ -6,13 +6,13 @@ import {
6
6
  } from "./chunk-361x998p.js";
7
7
  import {
8
8
  KubernetesExecTransport
9
- } from "./chunk-0zcq74ep.js";
9
+ } from "./chunk-dfpqr0r9.js";
10
10
  import {
11
11
  ServicePortForwarder
12
- } from "./chunk-0d8vs5q8.js";
12
+ } from "./chunk-91xh8tsr.js";
13
13
  import {
14
14
  KubectlExecutor
15
- } from "./chunk-rq5fc007.js";
15
+ } from "./chunk-evb5tj13.js";
16
16
  import {
17
17
  KubernetesError
18
18
  } from "./chunk-68zz17hs.js";
@@ -68,24 +68,25 @@ async function runArgv(argv, opts) {
68
68
  let aborted = false;
69
69
  const abort = () => {
70
70
  aborted = true;
71
- proc.kill();
71
+ proc.kill("SIGKILL");
72
72
  };
73
73
  const timer = setTimeout(() => {
74
74
  timedOut = true;
75
- proc.kill();
75
+ proc.kill("SIGKILL");
76
76
  }, timeoutMs);
77
77
  if (opts?.signal?.aborted)
78
78
  abort();
79
79
  else
80
80
  opts?.signal?.addEventListener("abort", abort, { once: true });
81
+ const outputs = [
82
+ readOutput(proc.stdout, opts?.onStdout, opts?.onStdoutBytes, opts?.collectStdout ?? true),
83
+ readOutput(proc.stderr, opts?.onStderr),
84
+ proc.exited
85
+ ];
81
86
  try {
82
- const [stdout, stderr, exitCode] = await Promise.all([
83
- readOutput(proc.stdout, opts?.onStdout, opts?.onStdoutBytes, opts?.collectStdout ?? true),
84
- readOutput(proc.stderr, opts?.onStderr),
85
- proc.exited
86
- ]);
87
+ const [stdout, stderr, exitCode] = await Promise.all(outputs);
87
88
  return {
88
- ok: exitCode === 0 && !timedOut,
89
+ ok: exitCode === 0 && !timedOut && !aborted,
89
90
  exitCode,
90
91
  stdout,
91
92
  stderr: timedOut ? `${stderr}
@@ -96,6 +97,8 @@ async function runArgv(argv, opts) {
96
97
  command: argv
97
98
  };
98
99
  } catch (err) {
100
+ proc.kill("SIGKILL");
101
+ await Promise.allSettled(outputs);
99
102
  return {
100
103
  ok: false,
101
104
  exitCode: null,
@@ -3,10 +3,10 @@ import {
3
3
  } from "./chunk-ssj93brx.js";
4
4
  import {
5
5
  startPortForward
6
- } from "./chunk-mvkxs8d0.js";
6
+ } from "./chunk-v9rcxg0e.js";
7
7
  import {
8
8
  KubectlExecutor
9
- } from "./chunk-rq5fc007.js";
9
+ } from "./chunk-evb5tj13.js";
10
10
  import {
11
11
  Transport
12
12
  } from "./chunk-6rcyw5ek.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  buildKubectlArgs
3
- } from "./chunk-rq5fc007.js";
3
+ } from "./chunk-evb5tj13.js";
4
4
  import {
5
5
  spawnProcess
6
6
  } from "./chunk-9shz0bw1.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  ServicePortForwarder
3
- } from "./chunk-0d8vs5q8.js";
3
+ } from "./chunk-91xh8tsr.js";
4
4
  import {
5
5
  KubectlExecutor
6
- } from "./chunk-rq5fc007.js";
6
+ } from "./chunk-evb5tj13.js";
7
7
  import {
8
8
  Transport
9
9
  } from "./chunk-6rcyw5ek.js";
@@ -2,16 +2,16 @@ import {
2
2
  HttpClient
3
3
  } from "../chunk-81agmerq.js";
4
4
  import"../chunk-ps7f1x05.js";
5
- import"../chunk-9d0ph5km.js";
5
+ import"../chunk-s7a3fqzc.js";
6
6
  import"../chunk-v3hxvnrc.js";
7
7
  import"../chunk-c2b2jwm4.js";
8
8
  import"../chunk-ssj93brx.js";
9
- import"../chunk-47x0r2kr.js";
10
- import"../chunk-0d8vs5q8.js";
9
+ import"../chunk-xv3nn2vd.js";
10
+ import"../chunk-91xh8tsr.js";
11
11
  import"../chunk-xgnz10sr.js";
12
12
  import"../chunk-6fnhzhdb.js";
13
- import"../chunk-mvkxs8d0.js";
14
- import"../chunk-rq5fc007.js";
13
+ import"../chunk-v9rcxg0e.js";
14
+ import"../chunk-evb5tj13.js";
15
15
  import"../chunk-9shz0bw1.js";
16
16
  import"../chunk-6rcyw5ek.js";
17
17
  import"../chunk-9f9dsjnr.js";
@@ -2,16 +2,16 @@ import {
2
2
  HttpClient
3
3
  } from "../chunk-81agmerq.js";
4
4
  import"../chunk-ps7f1x05.js";
5
- import"../chunk-9d0ph5km.js";
5
+ import"../chunk-s7a3fqzc.js";
6
6
  import"../chunk-v3hxvnrc.js";
7
7
  import"../chunk-c2b2jwm4.js";
8
8
  import"../chunk-ssj93brx.js";
9
- import"../chunk-47x0r2kr.js";
10
- import"../chunk-0d8vs5q8.js";
9
+ import"../chunk-xv3nn2vd.js";
10
+ import"../chunk-91xh8tsr.js";
11
11
  import"../chunk-xgnz10sr.js";
12
12
  import"../chunk-6fnhzhdb.js";
13
- import"../chunk-mvkxs8d0.js";
14
- import"../chunk-rq5fc007.js";
13
+ import"../chunk-v9rcxg0e.js";
14
+ import"../chunk-evb5tj13.js";
15
15
  import"../chunk-9shz0bw1.js";
16
16
  import"../chunk-6rcyw5ek.js";
17
17
  import"../chunk-9f9dsjnr.js";
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  KubernetesClient
3
- } from "../chunk-226wxr2s.js";
3
+ } from "../chunk-erbehkcz.js";
4
4
  import"../chunk-d2y5ewbb.js";
5
5
  import"../chunk-361x998p.js";
6
6
  import"../chunk-jt8fn3wg.js";
7
- import"../chunk-0zcq74ep.js";
7
+ import"../chunk-dfpqr0r9.js";
8
8
  import"../chunk-a9htb6cr.js";
9
9
  import"../chunk-v3hxvnrc.js";
10
- import"../chunk-0d8vs5q8.js";
10
+ import"../chunk-91xh8tsr.js";
11
11
  import"../chunk-xgnz10sr.js";
12
12
  import"../chunk-6fnhzhdb.js";
13
- import"../chunk-mvkxs8d0.js";
14
- import"../chunk-rq5fc007.js";
13
+ import"../chunk-v9rcxg0e.js";
14
+ import"../chunk-evb5tj13.js";
15
15
  import"../chunk-9shz0bw1.js";
16
16
  import"../chunk-68zz17hs.js";
17
17
  export {
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  KubernetesClient
3
- } from "../chunk-226wxr2s.js";
3
+ } from "../chunk-erbehkcz.js";
4
4
  import"../chunk-d2y5ewbb.js";
5
5
  import"../chunk-361x998p.js";
6
6
  import"../chunk-jt8fn3wg.js";
7
- import"../chunk-0zcq74ep.js";
7
+ import"../chunk-dfpqr0r9.js";
8
8
  import {
9
9
  clientKey
10
10
  } from "../chunk-a9htb6cr.js";
11
11
  import"../chunk-v3hxvnrc.js";
12
- import"../chunk-0d8vs5q8.js";
12
+ import"../chunk-91xh8tsr.js";
13
13
  import"../chunk-xgnz10sr.js";
14
14
  import"../chunk-6fnhzhdb.js";
15
- import"../chunk-mvkxs8d0.js";
16
- import"../chunk-rq5fc007.js";
15
+ import"../chunk-v9rcxg0e.js";
16
+ import"../chunk-evb5tj13.js";
17
17
  import"../chunk-9shz0bw1.js";
18
18
  import"../chunk-68zz17hs.js";
19
19
 
@@ -1,4 +1,4 @@
1
- import type { ExecTarget, ExecResult, RunOptions } from "./executor";
1
+ import { type ExecTarget, type ExecResult, type RunOptions } from "./executor";
2
2
  import type { KubernetesConnectionOptions } from "./resource-transport";
3
3
  export interface KubernetesExecLimits {
4
4
  timeoutMs: number;
@@ -12,8 +12,9 @@ export interface KubernetesExecLimits {
12
12
  */
13
13
  export declare class KubernetesExecTransport {
14
14
  #private;
15
+ private readonly connection;
15
16
  private readonly signal;
16
17
  private readonly limits;
17
- constructor(options: KubernetesConnectionOptions, signal: AbortSignal, limits: KubernetesExecLimits);
18
+ constructor(connection: KubernetesConnectionOptions, signal: AbortSignal, limits: KubernetesExecLimits);
18
19
  exec(namespace: string, target: ExecTarget, command: string[], options?: RunOptions): Promise<ExecResult>;
19
20
  }
@@ -1,7 +1,9 @@
1
1
  import {
2
2
  KubernetesExecTransport
3
- } from "../chunk-0zcq74ep.js";
3
+ } from "../chunk-dfpqr0r9.js";
4
4
  import"../chunk-v3hxvnrc.js";
5
+ import"../chunk-evb5tj13.js";
6
+ import"../chunk-9shz0bw1.js";
5
7
  import"../chunk-68zz17hs.js";
6
8
  export {
7
9
  KubernetesExecTransport
@@ -3,7 +3,7 @@ import {
3
3
  buildExecArgs,
4
4
  buildKubectlArgs,
5
5
  runArgv
6
- } from "../chunk-rq5fc007.js";
6
+ } from "../chunk-evb5tj13.js";
7
7
  import"../chunk-9shz0bw1.js";
8
8
  export {
9
9
  runArgv,
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  PortForwardScope,
3
3
  startPortForward
4
- } from "../chunk-mvkxs8d0.js";
5
- import"../chunk-rq5fc007.js";
4
+ } from "../chunk-v9rcxg0e.js";
5
+ import"../chunk-evb5tj13.js";
6
6
  import"../chunk-9shz0bw1.js";
7
7
  export {
8
8
  startPortForward,
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  ServicePortForwarder
3
- } from "../chunk-0d8vs5q8.js";
3
+ } from "../chunk-91xh8tsr.js";
4
4
  import"../chunk-xgnz10sr.js";
5
5
  import"../chunk-6fnhzhdb.js";
6
- import"../chunk-mvkxs8d0.js";
7
- import"../chunk-rq5fc007.js";
6
+ import"../chunk-v9rcxg0e.js";
7
+ import"../chunk-evb5tj13.js";
8
8
  import"../chunk-9shz0bw1.js";
9
9
  export {
10
10
  ServicePortForwarder
@@ -7,15 +7,15 @@ import"../chunk-m91t44jh.js";
7
7
  import"../chunk-db4an9td.js";
8
8
  import"../chunk-835fssgz.js";
9
9
  import"../chunk-ps7f1x05.js";
10
- import"../chunk-9d0ph5km.js";
10
+ import"../chunk-s7a3fqzc.js";
11
11
  import"../chunk-v3hxvnrc.js";
12
12
  import"../chunk-ssj93brx.js";
13
- import"../chunk-47x0r2kr.js";
14
- import"../chunk-0d8vs5q8.js";
13
+ import"../chunk-xv3nn2vd.js";
14
+ import"../chunk-91xh8tsr.js";
15
15
  import"../chunk-xgnz10sr.js";
16
16
  import"../chunk-6fnhzhdb.js";
17
- import"../chunk-mvkxs8d0.js";
18
- import"../chunk-rq5fc007.js";
17
+ import"../chunk-v9rcxg0e.js";
18
+ import"../chunk-evb5tj13.js";
19
19
  import"../chunk-9shz0bw1.js";
20
20
  import"../chunk-6rcyw5ek.js";
21
21
  import"../chunk-9f9dsjnr.js";
@@ -19,15 +19,15 @@ import {
19
19
  } from "../chunk-1gyshqd9.js";
20
20
  import"../chunk-835fssgz.js";
21
21
  import"../chunk-ps7f1x05.js";
22
- import"../chunk-9d0ph5km.js";
22
+ import"../chunk-s7a3fqzc.js";
23
23
  import"../chunk-v3hxvnrc.js";
24
24
  import"../chunk-ssj93brx.js";
25
- import"../chunk-47x0r2kr.js";
26
- import"../chunk-0d8vs5q8.js";
25
+ import"../chunk-xv3nn2vd.js";
26
+ import"../chunk-91xh8tsr.js";
27
27
  import"../chunk-xgnz10sr.js";
28
28
  import"../chunk-6fnhzhdb.js";
29
- import"../chunk-mvkxs8d0.js";
30
- import"../chunk-rq5fc007.js";
29
+ import"../chunk-v9rcxg0e.js";
30
+ import"../chunk-evb5tj13.js";
31
31
  import"../chunk-9shz0bw1.js";
32
32
  import"../chunk-6rcyw5ek.js";
33
33
  import"../chunk-9f9dsjnr.js";
@@ -7,14 +7,14 @@ import {
7
7
  openSearchServername
8
8
  } from "../chunk-6dfcndra.js";
9
9
  import"../chunk-ps7f1x05.js";
10
- import"../chunk-9d0ph5km.js";
10
+ import"../chunk-s7a3fqzc.js";
11
11
  import"../chunk-ssj93brx.js";
12
- import"../chunk-47x0r2kr.js";
13
- import"../chunk-0d8vs5q8.js";
12
+ import"../chunk-xv3nn2vd.js";
13
+ import"../chunk-91xh8tsr.js";
14
14
  import"../chunk-xgnz10sr.js";
15
15
  import"../chunk-6fnhzhdb.js";
16
- import"../chunk-mvkxs8d0.js";
17
- import"../chunk-rq5fc007.js";
16
+ import"../chunk-v9rcxg0e.js";
17
+ import"../chunk-evb5tj13.js";
18
18
  import"../chunk-9shz0bw1.js";
19
19
  import"../chunk-6rcyw5ek.js";
20
20
  import"../chunk-9f9dsjnr.js";
@@ -14,14 +14,14 @@ import {
14
14
  openSearchServername
15
15
  } from "../chunk-6dfcndra.js";
16
16
  import"../chunk-ps7f1x05.js";
17
- import"../chunk-9d0ph5km.js";
17
+ import"../chunk-s7a3fqzc.js";
18
18
  import"../chunk-ssj93brx.js";
19
- import"../chunk-47x0r2kr.js";
20
- import"../chunk-0d8vs5q8.js";
19
+ import"../chunk-xv3nn2vd.js";
20
+ import"../chunk-91xh8tsr.js";
21
21
  import"../chunk-xgnz10sr.js";
22
22
  import"../chunk-6fnhzhdb.js";
23
- import"../chunk-mvkxs8d0.js";
24
- import"../chunk-rq5fc007.js";
23
+ import"../chunk-v9rcxg0e.js";
24
+ import"../chunk-evb5tj13.js";
25
25
  import"../chunk-9shz0bw1.js";
26
26
  import"../chunk-6rcyw5ek.js";
27
27
  import"../chunk-9f9dsjnr.js";
@@ -7,14 +7,14 @@ import {
7
7
  } from "../chunk-ywk81p8a.js";
8
8
  import"../chunk-5tbzf9wd.js";
9
9
  import"../chunk-ps7f1x05.js";
10
- import"../chunk-9d0ph5km.js";
10
+ import"../chunk-s7a3fqzc.js";
11
11
  import"../chunk-ssj93brx.js";
12
- import"../chunk-47x0r2kr.js";
13
- import"../chunk-0d8vs5q8.js";
12
+ import"../chunk-xv3nn2vd.js";
13
+ import"../chunk-91xh8tsr.js";
14
14
  import"../chunk-xgnz10sr.js";
15
15
  import"../chunk-6fnhzhdb.js";
16
- import"../chunk-mvkxs8d0.js";
17
- import"../chunk-rq5fc007.js";
16
+ import"../chunk-v9rcxg0e.js";
17
+ import"../chunk-evb5tj13.js";
18
18
  import"../chunk-9shz0bw1.js";
19
19
  import"../chunk-6rcyw5ek.js";
20
20
  import"../chunk-9f9dsjnr.js";
@@ -13,14 +13,14 @@ import {
13
13
  discoverRedisTopology
14
14
  } from "../chunk-5tbzf9wd.js";
15
15
  import"../chunk-ps7f1x05.js";
16
- import"../chunk-9d0ph5km.js";
16
+ import"../chunk-s7a3fqzc.js";
17
17
  import"../chunk-ssj93brx.js";
18
- import"../chunk-47x0r2kr.js";
19
- import"../chunk-0d8vs5q8.js";
18
+ import"../chunk-xv3nn2vd.js";
19
+ import"../chunk-91xh8tsr.js";
20
20
  import"../chunk-xgnz10sr.js";
21
21
  import"../chunk-6fnhzhdb.js";
22
- import"../chunk-mvkxs8d0.js";
23
- import"../chunk-rq5fc007.js";
22
+ import"../chunk-v9rcxg0e.js";
23
+ import"../chunk-evb5tj13.js";
24
24
  import"../chunk-9shz0bw1.js";
25
25
  import"../chunk-6rcyw5ek.js";
26
26
  import"../chunk-9f9dsjnr.js";
package/dist/s3/client.js CHANGED
@@ -2,17 +2,17 @@ import {
2
2
  S3Client
3
3
  } from "../chunk-mj6ckk1g.js";
4
4
  import"../chunk-ps7f1x05.js";
5
- import"../chunk-9d0ph5km.js";
5
+ import"../chunk-s7a3fqzc.js";
6
6
  import"../chunk-v3hxvnrc.js";
7
7
  import"../chunk-z8e1ckkq.js";
8
8
  import"../chunk-c2b2jwm4.js";
9
9
  import"../chunk-ssj93brx.js";
10
- import"../chunk-47x0r2kr.js";
11
- import"../chunk-0d8vs5q8.js";
10
+ import"../chunk-xv3nn2vd.js";
11
+ import"../chunk-91xh8tsr.js";
12
12
  import"../chunk-xgnz10sr.js";
13
13
  import"../chunk-6fnhzhdb.js";
14
- import"../chunk-mvkxs8d0.js";
15
- import"../chunk-rq5fc007.js";
14
+ import"../chunk-v9rcxg0e.js";
15
+ import"../chunk-evb5tj13.js";
16
16
  import"../chunk-9shz0bw1.js";
17
17
  import"../chunk-6rcyw5ek.js";
18
18
  import"../chunk-9f9dsjnr.js";
@@ -4,17 +4,17 @@ import {
4
4
  import"../chunk-z5pm2emz.js";
5
5
  import"../chunk-mj6ckk1g.js";
6
6
  import"../chunk-ps7f1x05.js";
7
- import"../chunk-9d0ph5km.js";
7
+ import"../chunk-s7a3fqzc.js";
8
8
  import"../chunk-v3hxvnrc.js";
9
9
  import"../chunk-z8e1ckkq.js";
10
10
  import"../chunk-c2b2jwm4.js";
11
11
  import"../chunk-ssj93brx.js";
12
- import"../chunk-47x0r2kr.js";
13
- import"../chunk-0d8vs5q8.js";
12
+ import"../chunk-xv3nn2vd.js";
13
+ import"../chunk-91xh8tsr.js";
14
14
  import"../chunk-xgnz10sr.js";
15
15
  import"../chunk-6fnhzhdb.js";
16
- import"../chunk-mvkxs8d0.js";
17
- import"../chunk-rq5fc007.js";
16
+ import"../chunk-v9rcxg0e.js";
17
+ import"../chunk-evb5tj13.js";
18
18
  import"../chunk-9shz0bw1.js";
19
19
  import"../chunk-6rcyw5ek.js";
20
20
  import"../chunk-9f9dsjnr.js";
package/dist/s3/index.js CHANGED
@@ -6,17 +6,17 @@ import {
6
6
  S3Client
7
7
  } from "../chunk-mj6ckk1g.js";
8
8
  import"../chunk-ps7f1x05.js";
9
- import"../chunk-9d0ph5km.js";
9
+ import"../chunk-s7a3fqzc.js";
10
10
  import"../chunk-v3hxvnrc.js";
11
11
  import"../chunk-z8e1ckkq.js";
12
12
  import"../chunk-c2b2jwm4.js";
13
13
  import"../chunk-ssj93brx.js";
14
- import"../chunk-47x0r2kr.js";
15
- import"../chunk-0d8vs5q8.js";
14
+ import"../chunk-xv3nn2vd.js";
15
+ import"../chunk-91xh8tsr.js";
16
16
  import"../chunk-xgnz10sr.js";
17
17
  import"../chunk-6fnhzhdb.js";
18
- import"../chunk-mvkxs8d0.js";
19
- import"../chunk-rq5fc007.js";
18
+ import"../chunk-v9rcxg0e.js";
19
+ import"../chunk-evb5tj13.js";
20
20
  import"../chunk-9shz0bw1.js";
21
21
  import"../chunk-6rcyw5ek.js";
22
22
  import"../chunk-9f9dsjnr.js";
@@ -6,16 +6,16 @@ import {
6
6
  } from "../chunk-ps7f1x05.js";
7
7
  import {
8
8
  PodRelayTransport
9
- } from "../chunk-9d0ph5km.js";
9
+ } from "../chunk-s7a3fqzc.js";
10
10
  import"../chunk-ssj93brx.js";
11
11
  import {
12
12
  ServicePortForwardTransport
13
- } from "../chunk-47x0r2kr.js";
14
- import"../chunk-0d8vs5q8.js";
13
+ } from "../chunk-xv3nn2vd.js";
14
+ import"../chunk-91xh8tsr.js";
15
15
  import"../chunk-xgnz10sr.js";
16
16
  import"../chunk-6fnhzhdb.js";
17
- import"../chunk-mvkxs8d0.js";
18
- import"../chunk-rq5fc007.js";
17
+ import"../chunk-v9rcxg0e.js";
18
+ import"../chunk-evb5tj13.js";
19
19
  import"../chunk-9shz0bw1.js";
20
20
  import {
21
21
  Transport
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  PodRelayTransport
3
- } from "../chunk-9d0ph5km.js";
3
+ } from "../chunk-s7a3fqzc.js";
4
4
  import"../chunk-ssj93brx.js";
5
- import"../chunk-mvkxs8d0.js";
6
- import"../chunk-rq5fc007.js";
5
+ import"../chunk-v9rcxg0e.js";
6
+ import"../chunk-evb5tj13.js";
7
7
  import"../chunk-9shz0bw1.js";
8
8
  import"../chunk-6rcyw5ek.js";
9
9
  import"../chunk-9f9dsjnr.js";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  ServicePortForwardTransport
3
- } from "../chunk-47x0r2kr.js";
4
- import"../chunk-0d8vs5q8.js";
3
+ } from "../chunk-xv3nn2vd.js";
4
+ import"../chunk-91xh8tsr.js";
5
5
  import"../chunk-xgnz10sr.js";
6
6
  import"../chunk-6fnhzhdb.js";
7
- import"../chunk-mvkxs8d0.js";
8
- import"../chunk-rq5fc007.js";
7
+ import"../chunk-v9rcxg0e.js";
8
+ import"../chunk-evb5tj13.js";
9
9
  import"../chunk-9shz0bw1.js";
10
10
  import"../chunk-6rcyw5ek.js";
11
11
  import"../chunk-9f9dsjnr.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@compforge/harness-toolbox",
3
- "version": "0.5.5",
3
+ "version": "0.5.6",
4
4
  "description": "Shared infrastructure clients, transports and bounded data capture",
5
5
  "type": "module",
6
6
  "scripts": {