@compforge/harness-toolbox 0.4.3 → 0.4.5
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 +18 -0
- package/dist/chunk-835fssgz.js +37 -0
- package/dist/{chunk-0s27bgga.js → chunk-ae84rzq5.js} +1 -1
- package/dist/{chunk-age65q4n.js → chunk-db4an9td.js} +1 -1
- package/dist/{chunk-ftkrjqkc.js → chunk-dpcge1xt.js} +1 -1
- package/dist/{chunk-grpygk6f.js → chunk-dx6yvj81.js} +2 -2
- package/dist/{chunk-sqbew04a.js → chunk-f3vq900j.js} +2 -2
- package/dist/{chunk-yp6tcw22.js → chunk-f98qrpx1.js} +38 -78
- package/dist/{chunk-8kts470p.js → chunk-g2bac2jd.js} +12 -6
- package/dist/chunk-gm4swndx.js +106 -0
- package/dist/{chunk-shsabpc1.js → chunk-r3rnsvwv.js} +1 -1
- package/dist/{chunk-20kv4wc3.js → chunk-rkt41za2.js} +7 -1
- package/dist/{chunk-8mb6natq.js → chunk-sbt20n84.js} +53 -35
- package/dist/{chunk-h73h2b7y.js → chunk-t4hrnaj0.js} +44 -39
- package/dist/{chunk-kkts16w9.js → chunk-ww11q58v.js} +1 -1
- package/dist/{chunk-4ms037k2.js → chunk-x0yhfg29.js} +2 -2
- package/dist/chunk-z15gwjvg.js +145 -0
- package/dist/connection/acquire.d.ts +34 -0
- package/dist/connection/acquire.js +9 -0
- package/dist/datasource.js +1 -1
- package/dist/errors.d.ts +4 -0
- package/dist/errors.js +3 -1
- package/dist/file/client.js +2 -2
- package/dist/file/index.js +4 -4
- package/dist/file/local.js +3 -3
- package/dist/file/pod.js +3 -3
- package/dist/kubernetes/client.d.ts +4 -0
- package/dist/kubernetes/client.js +6 -6
- package/dist/kubernetes/compute-model.d.ts +115 -0
- package/dist/kubernetes/compute-model.js +0 -0
- package/dist/kubernetes/compute-quantity.d.ts +18 -0
- package/dist/kubernetes/compute-quantity.js +23 -0
- package/dist/kubernetes/compute.d.ts +17 -0
- package/dist/kubernetes/compute.js +211 -0
- package/dist/kubernetes/environment.js +6 -6
- package/dist/kubernetes/exec-transport.js +2 -2
- package/dist/kubernetes/pod-log-datasource.js +1 -1
- package/dist/kubernetes/resource-transport.js +3 -3
- package/dist/kubernetes/resources.js +2 -2
- package/dist/kubernetes/workload.js +2 -2
- package/dist/mysql/client.d.ts +5 -2
- package/dist/mysql/client.js +5 -4
- package/dist/mysql/connection.d.ts +3 -0
- package/dist/mysql/connection.js +4 -2
- package/dist/mysql/index.js +6 -5
- package/dist/mysql/readonly.js +2 -2
- package/dist/opensearch/client.d.ts +3 -1
- package/dist/opensearch/client.js +3 -2
- package/dist/opensearch/index.js +3 -2
- package/dist/redis/client.js +3 -2
- package/dist/redis/index.js +7 -6
- package/dist/s3/datasource.js +1 -1
- package/dist/s3/index.js +1 -1
- package/package.json +4 -1
- package/dist/chunk-136egyff.js +0 -11
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import {
|
|
2
|
+
object,
|
|
3
|
+
parseComputeQuantity,
|
|
4
|
+
podCompute,
|
|
5
|
+
quantities,
|
|
6
|
+
requiredString,
|
|
7
|
+
sum,
|
|
8
|
+
summarizePods
|
|
9
|
+
} from "../chunk-z15gwjvg.js";
|
|
10
|
+
import {
|
|
11
|
+
KubernetesError
|
|
12
|
+
} from "../chunk-rkt41za2.js";
|
|
13
|
+
|
|
14
|
+
// src/kubernetes/compute.ts
|
|
15
|
+
function requestBudget(options) {
|
|
16
|
+
if (!options.environment.trim() || [options.timeoutMs, options.maxPods, options.maxNodes, options.pageSize].some((value) => !Number.isSafeInteger(value) || value <= 0)) {
|
|
17
|
+
throw new KubernetesError("Compute requires environment and positive timeout/item/page budgets", { kind: "invalid_argument" });
|
|
18
|
+
}
|
|
19
|
+
const deadline = performance.now() + options.timeoutMs;
|
|
20
|
+
return () => {
|
|
21
|
+
options.signal?.throwIfAborted();
|
|
22
|
+
const remaining = Math.ceil(deadline - performance.now());
|
|
23
|
+
if (remaining <= 0)
|
|
24
|
+
throw new KubernetesError("Compute collection budget exhausted", { kind: "timeout" });
|
|
25
|
+
return { signal: options.signal, timeoutMs: remaining };
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function issue(source, error) {
|
|
29
|
+
const kind = error instanceof KubernetesError ? error.kind : "operation_failed";
|
|
30
|
+
return {
|
|
31
|
+
source,
|
|
32
|
+
kind,
|
|
33
|
+
code: error instanceof KubernetesError ? error.code : undefined,
|
|
34
|
+
message: kind === "permission_denied" ? "Permission denied" : `Kubernetes compute read failed: ${kind}`
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function finish(items, issues, observed) {
|
|
38
|
+
return { items, issues, status: !issues.length ? "complete" : observed ? "partial" : "unavailable" };
|
|
39
|
+
}
|
|
40
|
+
function gap(source, kind, message) {
|
|
41
|
+
return { source, kind, message };
|
|
42
|
+
}
|
|
43
|
+
async function readPages(access, query, maxItems, options, request, parse, identity) {
|
|
44
|
+
const source = `${query.apiVersion}/${query.resource}`;
|
|
45
|
+
const items = [], issues = [];
|
|
46
|
+
const tokens = new Set, identities = new Set;
|
|
47
|
+
let continuation, observed = false, read = 0;
|
|
48
|
+
try {
|
|
49
|
+
do {
|
|
50
|
+
const page = await access.list({ ...query, limit: Math.min(options.pageSize, maxItems - read), continue: continuation }, request());
|
|
51
|
+
if (!Array.isArray(page.items))
|
|
52
|
+
throw new KubernetesError("List lacks items", { kind: "invalid_response" });
|
|
53
|
+
observed = true;
|
|
54
|
+
for (const item of page.items.slice(0, maxItems - read)) {
|
|
55
|
+
try {
|
|
56
|
+
const parsed = parse(item), key = identity(parsed);
|
|
57
|
+
if (!identities.has(key)) {
|
|
58
|
+
items.push(parsed);
|
|
59
|
+
identities.add(key);
|
|
60
|
+
}
|
|
61
|
+
} catch (error) {
|
|
62
|
+
issues.push(issue(source, error));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
read += page.items.length;
|
|
66
|
+
continuation = page.metadata?.continue || undefined;
|
|
67
|
+
if (read > maxItems || read >= maxItems && continuation) {
|
|
68
|
+
issues.push(gap(source, "limit_exceeded", `Collection limited to ${maxItems} items`));
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
if (continuation && tokens.has(continuation)) {
|
|
72
|
+
issues.push(gap(source, "invalid_response", "Pagination did not advance"));
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
if (continuation)
|
|
76
|
+
tokens.add(continuation);
|
|
77
|
+
} while (continuation);
|
|
78
|
+
} catch (error) {
|
|
79
|
+
options.signal?.throwIfAborted();
|
|
80
|
+
issues.push(issue(source, error));
|
|
81
|
+
}
|
|
82
|
+
return finish(items, issues, observed);
|
|
83
|
+
}
|
|
84
|
+
function nodeCompute(value) {
|
|
85
|
+
const meta = object(value.metadata), status = object(value.status), spec = object(value.spec);
|
|
86
|
+
const conditions = Array.isArray(status.conditions) ? status.conditions.map(object) : [];
|
|
87
|
+
return {
|
|
88
|
+
name: requiredString(meta.name, "node name"),
|
|
89
|
+
uid: requiredString(meta.uid, "node uid"),
|
|
90
|
+
ready: conditions.some((c) => c.type === "Ready" && c.status === "True"),
|
|
91
|
+
unschedulable: spec.unschedulable === true,
|
|
92
|
+
capacity: quantities(status.capacity, true),
|
|
93
|
+
allocatable: quantities(status.allocatable, true)
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function usage(value) {
|
|
97
|
+
const timestamp = requiredString(value.timestamp, "metrics timestamp"), window = requiredString(value.window, "metrics window");
|
|
98
|
+
if (!Number.isFinite(Date.parse(timestamp)))
|
|
99
|
+
throw new KubernetesError("Invalid metrics timestamp", { kind: "invalid_response" });
|
|
100
|
+
return { ...quantities(value.usage, true), timestamp, window };
|
|
101
|
+
}
|
|
102
|
+
async function collectClusterCompute(access, options) {
|
|
103
|
+
const request = requestBudget(options);
|
|
104
|
+
const nodes = await readPages(access, { apiVersion: "v1", resource: "nodes" }, options.maxNodes, options, request, nodeCompute, (n) => n.uid);
|
|
105
|
+
const pods = await readPages(access, { apiVersion: "v1", resource: "pods" }, options.maxPods, options, request, podCompute, (p) => `${p.namespace}/${p.uid}`);
|
|
106
|
+
const metrics = await readPages(access, { apiVersion: "metrics.k8s.io/v1beta1", resource: "nodes" }, options.maxNodes, options, request, (item) => ({ ...usage(item), name: requiredString(item.metadata?.name, "metrics node name") }), (n) => n.name);
|
|
107
|
+
if (nodes.status !== "unavailable" && metrics.status !== "unavailable") {
|
|
108
|
+
const measured = new Set(metrics.items.map((item) => item.name));
|
|
109
|
+
for (const node of nodes.items)
|
|
110
|
+
if (!measured.has(node.name)) {
|
|
111
|
+
metrics.issues.push(gap(`nodes/${node.name}`, "resource_not_found", "Node has no metrics sample"));
|
|
112
|
+
}
|
|
113
|
+
if (metrics.issues.length)
|
|
114
|
+
metrics.status = "partial";
|
|
115
|
+
}
|
|
116
|
+
options.signal?.throwIfAborted();
|
|
117
|
+
return {
|
|
118
|
+
environment: options.environment,
|
|
119
|
+
observedAt: new Date().toISOString(),
|
|
120
|
+
scope: "cluster",
|
|
121
|
+
nodes,
|
|
122
|
+
pods,
|
|
123
|
+
usage: metrics,
|
|
124
|
+
summary: {
|
|
125
|
+
capacity: nodes.status !== "complete" && !nodes.items.length ? undefined : sum(nodes.items.map((n) => n.capacity)),
|
|
126
|
+
allocatable: nodes.status !== "complete" && !nodes.items.length ? undefined : sum(nodes.items.map((n) => n.allocatable)),
|
|
127
|
+
pods: pods.status !== "complete" && !pods.items.length ? undefined : summarizePods(pods.items),
|
|
128
|
+
usage: metrics.status === "unavailable" || !metrics.items.length && (metrics.status !== "complete" || nodes.status !== "complete" || nodes.items.length > 0) ? undefined : sum(metrics.items)
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
async function collectWorkloadCompute(access, instances, options) {
|
|
133
|
+
const request = requestBudget(options);
|
|
134
|
+
const selected = new Map;
|
|
135
|
+
for (const instance of instances) {
|
|
136
|
+
if (instance.environment !== options.environment) {
|
|
137
|
+
throw new KubernetesError("Compute instance belongs to a different environment", { kind: "invalid_argument" });
|
|
138
|
+
}
|
|
139
|
+
selected.set(JSON.stringify([instance.namespace, instance.pod, instance.uid]), instance);
|
|
140
|
+
}
|
|
141
|
+
const pods = [], metrics = [];
|
|
142
|
+
const podIssues = [], metricIssues = [];
|
|
143
|
+
if (selected.size > options.maxPods)
|
|
144
|
+
podIssues.push(gap("pods", "limit_exceeded", `Collection limited to ${options.maxPods} Pods`));
|
|
145
|
+
for (const instance of [...selected.values()].slice(0, options.maxPods)) {
|
|
146
|
+
const source = `pods/${instance.namespace}/${instance.pod}`;
|
|
147
|
+
let pod;
|
|
148
|
+
try {
|
|
149
|
+
pod = podCompute(await access.get({ apiVersion: "v1", resource: "pods", namespace: instance.namespace, name: instance.pod }, request()));
|
|
150
|
+
if (pod.uid !== instance.uid || pod.name !== instance.pod || pod.namespace !== instance.namespace) {
|
|
151
|
+
throw new KubernetesError("Pod identity changed after discovery", { kind: "invalid_response" });
|
|
152
|
+
}
|
|
153
|
+
pods.push(pod);
|
|
154
|
+
} catch (error) {
|
|
155
|
+
options.signal?.throwIfAborted();
|
|
156
|
+
podIssues.push(issue(source, error));
|
|
157
|
+
metricIssues.push(gap(source, "operation_failed", "Metrics not collected because Pod identity could not be verified"));
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
if (pod.phase === "Succeeded" || pod.phase === "Failed")
|
|
161
|
+
continue;
|
|
162
|
+
try {
|
|
163
|
+
const raw = await access.get({ apiVersion: "metrics.k8s.io/v1beta1", resource: "pods", namespace: pod.namespace, name: pod.name }, request());
|
|
164
|
+
if (raw.metadata?.name !== pod.name || raw.metadata?.namespace !== pod.namespace || !Array.isArray(raw.containers)) {
|
|
165
|
+
throw new KubernetesError("Pod metrics lacks identity or containers", { kind: "invalid_response" });
|
|
166
|
+
}
|
|
167
|
+
const names = raw.containers.map((c) => requiredString(object(c).name, "metrics container name"));
|
|
168
|
+
if (new Set(names).size !== names.length || pod.containers.some((name) => !names.includes(name))) {
|
|
169
|
+
throw new KubernetesError("Pod metrics does not cover its containers", { kind: "invalid_response" });
|
|
170
|
+
}
|
|
171
|
+
const values = raw.containers.map((c) => quantities(object(c).usage, true));
|
|
172
|
+
if (!values.length)
|
|
173
|
+
throw new KubernetesError("Empty Pod metrics", { kind: "invalid_response" });
|
|
174
|
+
const measured = {
|
|
175
|
+
...usage({ ...raw, usage: { cpu: String(sum(values).cpu), memory: String(sum(values).memory) } }),
|
|
176
|
+
namespace: pod.namespace,
|
|
177
|
+
name: pod.name,
|
|
178
|
+
uid: pod.uid
|
|
179
|
+
};
|
|
180
|
+
if (raw.metadata.uid && raw.metadata.uid !== pod.uid || pod.createdAt && Date.parse(measured.timestamp) < Date.parse(pod.createdAt)) {
|
|
181
|
+
throw new KubernetesError("Pod metrics precedes current Pod incarnation", { kind: "invalid_response" });
|
|
182
|
+
}
|
|
183
|
+
metrics.push(measured);
|
|
184
|
+
} catch (error) {
|
|
185
|
+
options.signal?.throwIfAborted();
|
|
186
|
+
metricIssues.push(issue(`metrics/${source}`, error));
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
if (selected.size > options.maxPods)
|
|
190
|
+
metricIssues.push(gap("metrics/pods", "limit_exceeded", "Metrics limited to collected Pods"));
|
|
191
|
+
options.signal?.throwIfAborted();
|
|
192
|
+
const podRead = finish(pods, podIssues, pods.length > 0 || !selected.size);
|
|
193
|
+
const metricRead = finish(metrics, metricIssues, metrics.length > 0 || !podIssues.length && pods.every((p) => p.phase === "Succeeded" || p.phase === "Failed"));
|
|
194
|
+
return {
|
|
195
|
+
environment: options.environment,
|
|
196
|
+
observedAt: new Date().toISOString(),
|
|
197
|
+
scope: "instances",
|
|
198
|
+
workloads: instances.map(({ namespace, workload, pod, uid }) => ({ namespace, workload, pod, uid })),
|
|
199
|
+
pods: podRead,
|
|
200
|
+
usage: metricRead,
|
|
201
|
+
summary: {
|
|
202
|
+
pods: podRead.status === "unavailable" ? undefined : summarizePods(pods),
|
|
203
|
+
usage: metricRead.status === "unavailable" ? undefined : sum(metrics)
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
export {
|
|
208
|
+
parseComputeQuantity,
|
|
209
|
+
collectWorkloadCompute,
|
|
210
|
+
collectClusterCompute
|
|
211
|
+
};
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import {
|
|
2
2
|
KubernetesClient
|
|
3
|
-
} from "../chunk-
|
|
4
|
-
import"../chunk-
|
|
5
|
-
import"../chunk-0s27bgga.js";
|
|
3
|
+
} from "../chunk-g2bac2jd.js";
|
|
4
|
+
import"../chunk-ae84rzq5.js";
|
|
6
5
|
import"../chunk-2171tajs.js";
|
|
7
6
|
import"../chunk-j46x7j7c.js";
|
|
8
7
|
import"../chunk-6fnhzhdb.js";
|
|
9
|
-
import"../chunk-
|
|
10
|
-
import"../chunk-
|
|
8
|
+
import"../chunk-x0yhfg29.js";
|
|
9
|
+
import"../chunk-dpcge1xt.js";
|
|
10
|
+
import"../chunk-r3rnsvwv.js";
|
|
11
11
|
import {
|
|
12
12
|
clientKey
|
|
13
13
|
} from "../chunk-a9htb6cr.js";
|
|
14
|
-
import"../chunk-
|
|
14
|
+
import"../chunk-rkt41za2.js";
|
|
15
15
|
import"../chunk-v3hxvnrc.js";
|
|
16
16
|
import"../chunk-631vce5z.js";
|
|
17
17
|
import"../chunk-hmah9t8e.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
KubernetesResourceTransport
|
|
3
|
-
} from "../chunk-
|
|
4
|
-
import"../chunk-
|
|
3
|
+
} from "../chunk-x0yhfg29.js";
|
|
4
|
+
import"../chunk-dpcge1xt.js";
|
|
5
5
|
import"../chunk-a9htb6cr.js";
|
|
6
|
-
import"../chunk-
|
|
6
|
+
import"../chunk-rkt41za2.js";
|
|
7
7
|
import"../chunk-v3hxvnrc.js";
|
|
8
8
|
export {
|
|
9
9
|
KubernetesResourceTransport
|
package/dist/mysql/client.d.ts
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import type { Client } from "../client";
|
|
2
|
-
import {
|
|
2
|
+
import type { Connection, ConnectionOptions } from "mysql2/promise";
|
|
3
3
|
import type { Database, DatabaseTarget, DatabaseRow, DatabaseQueryLimits, DatabaseQueryResult, SqlStatement } from "./types";
|
|
4
4
|
import type { ConnectionSource, ClientLifecycle } from "../datasource";
|
|
5
5
|
import { type Transport } from "../transport";
|
|
6
6
|
export interface MysqlDatabaseOptions extends ClientLifecycle {
|
|
7
|
+
/** Per-route mapping and handshake budget. */
|
|
7
8
|
connectTimeoutMs: number;
|
|
9
|
+
/** Total acquisition budget; defaults to connectTimeoutMs times the route count. */
|
|
10
|
+
acquireTimeoutMs?: number;
|
|
8
11
|
queryTimeoutMs: number;
|
|
9
12
|
}
|
|
10
|
-
type ConnectionFactory = (options: ConnectionOptions) => Promise<Connection>;
|
|
13
|
+
type ConnectionFactory = (options: ConnectionOptions, signal?: AbortSignal) => Promise<Connection>;
|
|
11
14
|
/**
|
|
12
15
|
* @spec SQL is executed once; only native connection establishment may advance to another transport.
|
|
13
16
|
* @why mysql2 reports a socket closed during handshake as PROTOCOL_CONNECTION_LOST, before any SQL is sent.
|
package/dist/mysql/client.js
CHANGED
|
@@ -2,11 +2,12 @@ import {
|
|
|
2
2
|
MysqlClient,
|
|
3
3
|
MysqlDatabase,
|
|
4
4
|
openMysql
|
|
5
|
-
} from "../chunk-
|
|
5
|
+
} from "../chunk-t4hrnaj0.js";
|
|
6
6
|
import"../chunk-m91t44jh.js";
|
|
7
|
-
import"../chunk-
|
|
8
|
-
import"../chunk-
|
|
9
|
-
import"../chunk-
|
|
7
|
+
import"../chunk-db4an9td.js";
|
|
8
|
+
import"../chunk-835fssgz.js";
|
|
9
|
+
import"../chunk-gm4swndx.js";
|
|
10
|
+
import"../chunk-rkt41za2.js";
|
|
10
11
|
import"../chunk-v3hxvnrc.js";
|
|
11
12
|
import"../chunk-h8fwx0k7.js";
|
|
12
13
|
import"../chunk-wv4jwhvj.js";
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { type ConnectionOptions } from "mysql2";
|
|
1
2
|
import type { Connection } from "mysql2/promise";
|
|
3
|
+
/** Keep the native handle available so cancellation can destroy an unfinished handshake. */
|
|
4
|
+
export declare function connectMysql(options: ConnectionOptions, signal?: AbortSignal): Promise<Connection>;
|
|
2
5
|
/** @why Disposal must release the socket even when the peer never finishes its TCP half-close. */
|
|
3
6
|
export declare function destroyMysqlConnection(connection: Connection): void;
|
package/dist/mysql/connection.js
CHANGED
package/dist/mysql/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import"../chunk-pfar9cm3.js";
|
|
1
2
|
import {
|
|
2
3
|
withReadScope
|
|
3
4
|
} from "../chunk-4sqvppz7.js";
|
|
@@ -5,9 +6,9 @@ import {
|
|
|
5
6
|
MysqlClient,
|
|
6
7
|
MysqlDatabase,
|
|
7
8
|
openMysql
|
|
8
|
-
} from "../chunk-
|
|
9
|
+
} from "../chunk-t4hrnaj0.js";
|
|
9
10
|
import"../chunk-m91t44jh.js";
|
|
10
|
-
import"../chunk-
|
|
11
|
+
import"../chunk-db4an9td.js";
|
|
11
12
|
import {
|
|
12
13
|
parseMysqlEnvTarget
|
|
13
14
|
} from "../chunk-qq77x9ek.js";
|
|
@@ -16,9 +17,9 @@ import {
|
|
|
16
17
|
limitedStatement,
|
|
17
18
|
queryLimited
|
|
18
19
|
} from "../chunk-1gyshqd9.js";
|
|
19
|
-
import"../chunk-
|
|
20
|
-
import"../chunk-
|
|
21
|
-
import"../chunk-
|
|
20
|
+
import"../chunk-835fssgz.js";
|
|
21
|
+
import"../chunk-gm4swndx.js";
|
|
22
|
+
import"../chunk-rkt41za2.js";
|
|
22
23
|
import"../chunk-v3hxvnrc.js";
|
|
23
24
|
import"../chunk-h8fwx0k7.js";
|
|
24
25
|
import"../chunk-wv4jwhvj.js";
|
package/dist/mysql/readonly.js
CHANGED
|
@@ -9,8 +9,10 @@ export interface OpenSearchOptions {
|
|
|
9
9
|
node: string;
|
|
10
10
|
auth: OpenSearchAuth;
|
|
11
11
|
requestTimeoutMs?: number;
|
|
12
|
-
/**
|
|
12
|
+
/** Per-route mapping and probe budget; query deadlines remain independent. */
|
|
13
13
|
connectTimeoutMs?: number;
|
|
14
|
+
/** Total acquisition budget; defaults to the per-route budget times the route count. */
|
|
15
|
+
acquireTimeoutMs?: number;
|
|
14
16
|
/** Original TLS identity when a transport maps the socket to localhost. */
|
|
15
17
|
servername?: string;
|
|
16
18
|
}
|
|
@@ -3,8 +3,9 @@ import {
|
|
|
3
3
|
OpenSearchEngine,
|
|
4
4
|
isOpenSearchReadApi,
|
|
5
5
|
openOpenSearch
|
|
6
|
-
} from "../chunk-
|
|
7
|
-
import"../chunk-
|
|
6
|
+
} from "../chunk-sbt20n84.js";
|
|
7
|
+
import"../chunk-gm4swndx.js";
|
|
8
|
+
import"../chunk-rkt41za2.js";
|
|
8
9
|
import"../chunk-h8fwx0k7.js";
|
|
9
10
|
import"../chunk-wv4jwhvj.js";
|
|
10
11
|
import"../chunk-631vce5z.js";
|
package/dist/opensearch/index.js
CHANGED
|
@@ -10,8 +10,9 @@ import {
|
|
|
10
10
|
OpenSearchEngine,
|
|
11
11
|
isOpenSearchReadApi,
|
|
12
12
|
openOpenSearch
|
|
13
|
-
} from "../chunk-
|
|
14
|
-
import"../chunk-
|
|
13
|
+
} from "../chunk-sbt20n84.js";
|
|
14
|
+
import"../chunk-gm4swndx.js";
|
|
15
|
+
import"../chunk-rkt41za2.js";
|
|
15
16
|
import"../chunk-h8fwx0k7.js";
|
|
16
17
|
import"../chunk-wv4jwhvj.js";
|
|
17
18
|
import"../chunk-631vce5z.js";
|
package/dist/redis/client.js
CHANGED
|
@@ -4,9 +4,10 @@ import {
|
|
|
4
4
|
RedisConnection,
|
|
5
5
|
openRedis,
|
|
6
6
|
parseRedisInfo
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-f98qrpx1.js";
|
|
8
|
+
import"../chunk-gm4swndx.js";
|
|
8
9
|
import"../chunk-5tbzf9wd.js";
|
|
9
|
-
import"../chunk-
|
|
10
|
+
import"../chunk-rkt41za2.js";
|
|
10
11
|
import"../chunk-h8fwx0k7.js";
|
|
11
12
|
import"../chunk-wv4jwhvj.js";
|
|
12
13
|
import"../chunk-631vce5z.js";
|
package/dist/redis/index.js
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
collectRedisKeyStats,
|
|
3
|
-
redisGroupedSampleSizes
|
|
4
|
-
} from "../chunk-jr9y0ghr.js";
|
|
5
1
|
import {
|
|
6
2
|
RedisAccess,
|
|
7
3
|
RedisClient,
|
|
8
4
|
RedisConnection,
|
|
9
5
|
openRedis,
|
|
10
6
|
parseRedisInfo
|
|
11
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-f98qrpx1.js";
|
|
8
|
+
import"../chunk-gm4swndx.js";
|
|
9
|
+
import {
|
|
10
|
+
collectRedisKeyStats,
|
|
11
|
+
redisGroupedSampleSizes
|
|
12
|
+
} from "../chunk-jr9y0ghr.js";
|
|
12
13
|
import {
|
|
13
14
|
discoverRedisTopology
|
|
14
15
|
} from "../chunk-5tbzf9wd.js";
|
|
15
|
-
import"../chunk-
|
|
16
|
+
import"../chunk-rkt41za2.js";
|
|
16
17
|
import"../chunk-h8fwx0k7.js";
|
|
17
18
|
import"../chunk-wv4jwhvj.js";
|
|
18
19
|
import"../chunk-631vce5z.js";
|
package/dist/s3/datasource.js
CHANGED
package/dist/s3/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@compforge/harness-toolbox",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.5",
|
|
4
4
|
"description": "Shared infrastructure clients, transports and bounded data capture",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
@@ -116,6 +116,9 @@
|
|
|
116
116
|
"@types/node": "^22",
|
|
117
117
|
"@types/ws": "^8.18.1"
|
|
118
118
|
},
|
|
119
|
+
"overrides": {
|
|
120
|
+
"@compforge/harness-common": "file:../common"
|
|
121
|
+
},
|
|
119
122
|
"publishConfig": {
|
|
120
123
|
"access": "public"
|
|
121
124
|
},
|
package/dist/chunk-136egyff.js
DELETED