@cotal-ai/core 0.16.0 → 0.18.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/dist/acls.d.ts +21 -0
- package/dist/acls.d.ts.map +1 -1
- package/dist/acls.js +44 -1
- package/dist/acls.js.map +1 -1
- package/dist/artifact.d.ts +45 -0
- package/dist/artifact.d.ts.map +1 -0
- package/dist/artifact.js +82 -0
- package/dist/artifact.js.map +1 -0
- package/dist/backup-config.d.ts +9 -2
- package/dist/backup-config.d.ts.map +1 -1
- package/dist/backup-config.js +6 -2
- package/dist/backup-config.js.map +1 -1
- package/dist/broker-tls.d.ts +70 -0
- package/dist/broker-tls.d.ts.map +1 -0
- package/dist/broker-tls.js +195 -0
- package/dist/broker-tls.js.map +1 -0
- package/dist/canonical.d.ts +14 -1
- package/dist/canonical.d.ts.map +1 -1
- package/dist/canonical.js +21 -1
- package/dist/canonical.js.map +1 -1
- package/dist/channels.js +4 -4
- package/dist/channels.js.map +1 -1
- package/dist/endpoint-action.d.ts +108 -3
- package/dist/endpoint-action.d.ts.map +1 -1
- package/dist/endpoint-action.js +209 -20
- package/dist/endpoint-action.js.map +1 -1
- package/dist/endpoint-binding.d.ts +138 -8
- package/dist/endpoint-binding.d.ts.map +1 -1
- package/dist/endpoint-binding.js +233 -26
- package/dist/endpoint-binding.js.map +1 -1
- package/dist/endpoint-contract-store.d.ts +30 -1
- package/dist/endpoint-contract-store.d.ts.map +1 -1
- package/dist/endpoint-contract-store.js +100 -29
- package/dist/endpoint-contract-store.js.map +1 -1
- package/dist/endpoint-envelope.d.ts +15 -37
- package/dist/endpoint-envelope.d.ts.map +1 -1
- package/dist/endpoint-envelope.js +93 -44
- package/dist/endpoint-envelope.js.map +1 -1
- package/dist/endpoint-error.d.ts +33 -0
- package/dist/endpoint-error.d.ts.map +1 -0
- package/dist/endpoint-error.js +34 -0
- package/dist/endpoint-error.js.map +1 -0
- package/dist/endpoint-grants.d.ts +63 -7
- package/dist/endpoint-grants.d.ts.map +1 -1
- package/dist/endpoint-grants.js +118 -9
- package/dist/endpoint-grants.js.map +1 -1
- package/dist/endpoint-invoke.d.ts +138 -0
- package/dist/endpoint-invoke.d.ts.map +1 -0
- package/dist/endpoint-invoke.js +393 -0
- package/dist/endpoint-invoke.js.map +1 -0
- package/dist/endpoint-records.d.ts.map +1 -1
- package/dist/endpoint-records.js +17 -0
- package/dist/endpoint-records.js.map +1 -1
- package/dist/endpoint-serve-kv.d.ts +97 -0
- package/dist/endpoint-serve-kv.d.ts.map +1 -0
- package/dist/endpoint-serve-kv.js +336 -0
- package/dist/endpoint-serve-kv.js.map +1 -0
- package/dist/endpoint-serve.d.ts.map +1 -1
- package/dist/endpoint-serve.js +21 -1
- package/dist/endpoint-serve.js.map +1 -1
- package/dist/endpoint-service.d.ts +1 -1
- package/dist/endpoint-service.d.ts.map +1 -1
- package/dist/endpoint-service.js +34 -10
- package/dist/endpoint-service.js.map +1 -1
- package/dist/endpoint-session-rail.d.ts +127 -0
- package/dist/endpoint-session-rail.d.ts.map +1 -0
- package/dist/endpoint-session-rail.js +325 -0
- package/dist/endpoint-session-rail.js.map +1 -0
- package/dist/endpoint-session.d.ts +1 -115
- package/dist/endpoint-session.d.ts.map +1 -1
- package/dist/endpoint-session.js +4 -316
- package/dist/endpoint-session.js.map +1 -1
- package/dist/endpoint-subjects.d.ts +20 -1
- package/dist/endpoint-subjects.d.ts.map +1 -1
- package/dist/endpoint-subjects.js +20 -1
- package/dist/endpoint-subjects.js.map +1 -1
- package/dist/endpoint-verbs.d.ts +1 -2
- package/dist/endpoint-verbs.d.ts.map +1 -1
- package/dist/endpoint-verbs.js +6 -6
- package/dist/endpoint-verbs.js.map +1 -1
- package/dist/endpoint.d.ts +157 -11
- package/dist/endpoint.d.ts.map +1 -1
- package/dist/endpoint.js +471 -47
- package/dist/endpoint.js.map +1 -1
- package/dist/evict.d.ts +47 -0
- package/dist/evict.d.ts.map +1 -1
- package/dist/evict.js +191 -59
- package/dist/evict.js.map +1 -1
- package/dist/identity.d.ts +34 -0
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +46 -0
- package/dist/identity.js.map +1 -1
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/kv-scan.d.ts +8 -0
- package/dist/kv-scan.d.ts.map +1 -1
- package/dist/kv-scan.js +8 -0
- package/dist/kv-scan.js.map +1 -1
- package/dist/lease.d.ts +12 -5
- package/dist/lease.d.ts.map +1 -1
- package/dist/lease.js.map +1 -1
- package/dist/lifecycle-saga.d.ts +174 -0
- package/dist/lifecycle-saga.d.ts.map +1 -0
- package/dist/lifecycle-saga.js +418 -0
- package/dist/lifecycle-saga.js.map +1 -0
- package/dist/lifecycle-state.d.ts +202 -0
- package/dist/lifecycle-state.d.ts.map +1 -0
- package/dist/lifecycle-state.js +347 -0
- package/dist/lifecycle-state.js.map +1 -0
- package/dist/parts.d.ts +13 -0
- package/dist/parts.d.ts.map +1 -0
- package/dist/parts.js +17 -0
- package/dist/parts.js.map +1 -0
- package/dist/provision.d.ts +124 -15
- package/dist/provision.d.ts.map +1 -1
- package/dist/provision.js +578 -121
- package/dist/provision.js.map +1 -1
- package/dist/schema-profile.d.ts +3 -2
- package/dist/schema-profile.d.ts.map +1 -1
- package/dist/schema-profile.js +242 -18
- package/dist/schema-profile.js.map +1 -1
- package/dist/session-browser.d.ts +15 -0
- package/dist/session-browser.d.ts.map +1 -0
- package/dist/session-browser.js +14 -0
- package/dist/session-browser.js.map +1 -0
- package/dist/session-terminal-frames.d.ts +36 -0
- package/dist/session-terminal-frames.d.ts.map +1 -0
- package/dist/session-terminal-frames.js +149 -0
- package/dist/session-terminal-frames.js.map +1 -0
- package/dist/spaces.d.ts.map +1 -1
- package/dist/spaces.js +6 -1
- package/dist/spaces.js.map +1 -1
- package/dist/streams.d.ts +168 -1
- package/dist/streams.d.ts.map +1 -1
- package/dist/streams.js +299 -21
- package/dist/streams.js.map +1 -1
- package/dist/subjects.d.ts +34 -36
- package/dist/subjects.d.ts.map +1 -1
- package/dist/subjects.js +46 -35
- package/dist/subjects.js.map +1 -1
- package/dist/types.d.ts +27 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -1
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The broker's client-listener transport, and the checks that must pass before one is served.
|
|
3
|
+
*
|
|
4
|
+
* The shape here is deliberate. `BrokerTransport` is a REQUIRED discriminated union rather than an
|
|
5
|
+
* optional `tls?:` field, because the failure this feature exists to prevent is a SILENT DOWNGRADE
|
|
6
|
+
* TO PLAINTEXT. With an optional field, any future code path that regenerates the broker config and
|
|
7
|
+
* forgets to thread it through renders a plaintext listener and says nothing; with a required union
|
|
8
|
+
* that state is unrepresentable, and the compiler asks the question at every render site. The
|
|
9
|
+
* protection is in the type, not in a test that someone has to remember to run.
|
|
10
|
+
*/
|
|
11
|
+
import { readFileSync, statSync } from "node:fs";
|
|
12
|
+
import { X509Certificate, createPrivateKey } from "node:crypto";
|
|
13
|
+
import net from "node:net";
|
|
14
|
+
import tls from "node:tls";
|
|
15
|
+
/** Thrown for every rejected cert/key pair. A distinct type so callers can surface a
|
|
16
|
+
* CERTIFICATE cause to the operator rather than a generic "broker unreachable" — a TLS failure
|
|
17
|
+
* reported as unreachability invites exactly the wrong remedy. */
|
|
18
|
+
export class TlsMaterialError extends Error {
|
|
19
|
+
constructor(message) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.name = "TlsMaterialError";
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Validate a cert/key pair BEFORE the broker is started or reloaded. Throws `TlsMaterialError`
|
|
26
|
+
* on anything wrong; never returns a "degraded" result and never falls back to plaintext.
|
|
27
|
+
*
|
|
28
|
+
* This exists because nats-server's own checks are not sufficient. Missing, unreadable and
|
|
29
|
+
* mismatched pairs do stop it before it opens a listener — but an EXPIRED certificate does not:
|
|
30
|
+
* `nats-server -t` reports such a config valid, the process starts, logs "Server is ready" and
|
|
31
|
+
* "TLS required for client connections", and only the CLIENT then fails with
|
|
32
|
+
* `CERT_HAS_EXPIRED`. An expired cert must never be allowed to yield a "mesh up", so the validity
|
|
33
|
+
* window is checked here.
|
|
34
|
+
*
|
|
35
|
+
* @param dialHost the hostname clients will DIAL and verify against, which is not the bind host:
|
|
36
|
+
* a broker may bind `0.0.0.0` while clients verify `broker.example`. Omit only
|
|
37
|
+
* when no dial name is known yet.
|
|
38
|
+
*/
|
|
39
|
+
/** Whether a dial host is an IP literal (v4 or v6) rather than a DNS name. Decides which of Node's
|
|
40
|
+
* two certificate matchers applies: IP SANs answer to `checkIP`, DNS SANs to `checkHost`, and
|
|
41
|
+
* neither one falls back to the other. */
|
|
42
|
+
function isIpLiteral(host) {
|
|
43
|
+
return net.isIP(host) !== 0;
|
|
44
|
+
}
|
|
45
|
+
export function validateTlsMaterial(t, opts = {}) {
|
|
46
|
+
const now = opts.now ?? new Date();
|
|
47
|
+
let certPem;
|
|
48
|
+
try {
|
|
49
|
+
certPem = readFileSync(t.certFile, "utf8");
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
throw new TlsMaterialError(`TLS certificate is not readable at ${t.certFile}: ${e.message}`);
|
|
53
|
+
}
|
|
54
|
+
let keyPem;
|
|
55
|
+
try {
|
|
56
|
+
keyPem = readFileSync(t.keyFile, "utf8");
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
throw new TlsMaterialError(`TLS private key is not readable at ${t.keyFile}: ${e.message}`);
|
|
60
|
+
}
|
|
61
|
+
// The private key must not be readable by group or other. The manager runs agent children under
|
|
62
|
+
// the SAME OS uid, so file permissions are not a boundary against a hostile same-uid agent — but
|
|
63
|
+
// a world-readable broker key is a much wider exposure than that, and refusing it is cheap.
|
|
64
|
+
// POSIX mode bits do not map onto Windows ACLs, so the check applies where the concept exists.
|
|
65
|
+
if (process.platform !== "win32") {
|
|
66
|
+
const mode = statSync(t.keyFile).mode & 0o777;
|
|
67
|
+
if (mode & 0o077)
|
|
68
|
+
throw new TlsMaterialError(`TLS private key ${t.keyFile} is group/other-accessible (mode ${mode.toString(8).padStart(3, "0")}); ` +
|
|
69
|
+
`tighten it to 600 before serving TLS`);
|
|
70
|
+
}
|
|
71
|
+
let cert;
|
|
72
|
+
try {
|
|
73
|
+
cert = new X509Certificate(certPem);
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
throw new TlsMaterialError(`TLS certificate at ${t.certFile} is not a parseable X.509 certificate: ${e.message}`);
|
|
77
|
+
}
|
|
78
|
+
let key;
|
|
79
|
+
try {
|
|
80
|
+
key = createPrivateKey(keyPem);
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
throw new TlsMaterialError(`TLS private key at ${t.keyFile} is not a parseable private key: ${e.message}`);
|
|
84
|
+
}
|
|
85
|
+
if (!cert.checkPrivateKey(key))
|
|
86
|
+
throw new TlsMaterialError(`TLS certificate ${t.certFile} and private key ${t.keyFile} are not a matching pair`);
|
|
87
|
+
const notBefore = new Date(cert.validFrom);
|
|
88
|
+
const notAfter = new Date(cert.validTo);
|
|
89
|
+
if (now < notBefore)
|
|
90
|
+
throw new TlsMaterialError(`TLS certificate ${t.certFile} is not valid until ${notBefore.toISOString()} (now ${now.toISOString()})`);
|
|
91
|
+
if (now > notAfter)
|
|
92
|
+
throw new TlsMaterialError(`TLS certificate ${t.certFile} EXPIRED at ${notAfter.toISOString()} (now ${now.toISOString()}); nats-server would start and serve it anyway`);
|
|
93
|
+
// AN IP LITERAL IS NOT A HOSTNAME, AND `checkHost` WILL NOT MATCH ONE.
|
|
94
|
+
//
|
|
95
|
+
// Node checks IP subject-alternative names through `checkIP` and DNS names through `checkHost`;
|
|
96
|
+
// `checkHost` returns undefined for "127.0.0.1" even when the certificate carries
|
|
97
|
+
// `IP Address:127.0.0.1`, because an IP literal is never a DNS name. Using the wrong one here
|
|
98
|
+
// rejected a correct certificate, and the error text printed the very SAN entry that covered the
|
|
99
|
+
// host it claimed was uncovered — the message contained its own refutation.
|
|
100
|
+
//
|
|
101
|
+
// This mattered far more than an edge case: `cotal up` binds and dials 127.0.0.1 by default, so
|
|
102
|
+
// the wrong check refused nearly every real TLS launch. It failed CLOSED, which is the safe
|
|
103
|
+
// direction and is exactly why no amount of "does it refuse?" testing would have found it. It
|
|
104
|
+
// took running the actual command.
|
|
105
|
+
if (opts.dialHost !== undefined) {
|
|
106
|
+
const covered = isIpLiteral(opts.dialHost)
|
|
107
|
+
? cert.checkIP(opts.dialHost) !== undefined
|
|
108
|
+
: cert.checkHost(opts.dialHost) !== undefined;
|
|
109
|
+
if (!covered)
|
|
110
|
+
throw new TlsMaterialError(`TLS certificate ${t.certFile} does not cover the dial host "${opts.dialHost}" ` +
|
|
111
|
+
`(subject ${cert.subject}, SAN ${cert.subjectAltName ?? "none"}); clients would fail ` +
|
|
112
|
+
`${isIpLiteral(opts.dialHost) ? "IP address" : "hostname"} verification`);
|
|
113
|
+
}
|
|
114
|
+
return { notBefore, notAfter, fingerprint256: cert.fingerprint256, subject: cert.subject };
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Open a real NATS STARTTLS connection and report the leaf certificate the broker is SERVING.
|
|
118
|
+
*
|
|
119
|
+
* This is the only honest proof that a rotation took effect. Renewing the files on disk does not
|
|
120
|
+
* reload nats-server: the reference deployment renews its Let's Encrypt material on a timer and
|
|
121
|
+
* the broker process has gone on serving the previous certificate for weeks, because nothing
|
|
122
|
+
* signalled it. Comparing file mtimes, or trusting that a reload command exited zero, would both
|
|
123
|
+
* have reported success there. Only reading back what the listener presents catches it.
|
|
124
|
+
*
|
|
125
|
+
* `rejectUnauthorized` is false on purpose: this call answers "which certificate is being served",
|
|
126
|
+
* not "do I trust it". The caller compares the returned fingerprint to the file it intended to
|
|
127
|
+
* install, which is a stronger and more specific check than chain validation.
|
|
128
|
+
*/
|
|
129
|
+
export async function probeServedCert(opts) {
|
|
130
|
+
const timeoutMs = opts.timeoutMs ?? 5000;
|
|
131
|
+
// The socket is carried out of this promise rather than reopened, and that is load-bearing:
|
|
132
|
+
// NATS STARTTLS upgrades THE SAME connection, so a second dial probes a different socket and,
|
|
133
|
+
// behind a load balancer or a second listener, could read a DIFFERENT SERVER'S certificate. A
|
|
134
|
+
// rotation check that might sample the wrong server is worse than no rotation check at all,
|
|
135
|
+
// because it reports success while the served leaf is stale — the exact failure this helper
|
|
136
|
+
// exists to detect.
|
|
137
|
+
const { info, socket } = await new Promise((resolve, reject) => {
|
|
138
|
+
const sock = net.connect(opts.port, opts.host);
|
|
139
|
+
let buf = "";
|
|
140
|
+
const fail = (m) => { sock.destroy(); reject(new TlsMaterialError(m)); };
|
|
141
|
+
sock.setTimeout(timeoutMs, () => fail(`no NATS INFO from ${opts.host}:${opts.port} within ${timeoutMs}ms`));
|
|
142
|
+
sock.on("error", (e) => fail(`cannot reach ${opts.host}:${opts.port}: ${e.message}`));
|
|
143
|
+
sock.on("data", (d) => {
|
|
144
|
+
buf += d.toString();
|
|
145
|
+
const line = buf.split("\r\n")[0];
|
|
146
|
+
if (!line?.startsWith("INFO "))
|
|
147
|
+
return;
|
|
148
|
+
try {
|
|
149
|
+
resolve({ info: JSON.parse(line.slice(5)), socket: sock });
|
|
150
|
+
}
|
|
151
|
+
catch (e) {
|
|
152
|
+
fail(`unparseable NATS INFO from ${opts.host}:${opts.port}: ${e.message}`);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
if (info.tls_required !== true) {
|
|
157
|
+
socket.destroy();
|
|
158
|
+
throw new TlsMaterialError(`${opts.host}:${opts.port} does not advertise tls_required — it is serving PLAINTEXT, so there is no served certificate to verify`);
|
|
159
|
+
}
|
|
160
|
+
// Disarm the INFO phase before handing the socket over. Its inactivity timer is still running
|
|
161
|
+
// and would destroy the connection mid-handshake on a slow peer, and its `data` handler would
|
|
162
|
+
// otherwise keep consuming bytes that now belong to TLS. Neither shows up on loopback, where
|
|
163
|
+
// the handshake completes in microseconds — this is the kind of green that hides a timing bug
|
|
164
|
+
// from everyone until a real network appears, so do not remove it because the tests pass.
|
|
165
|
+
socket.setTimeout(0);
|
|
166
|
+
socket.removeAllListeners("timeout");
|
|
167
|
+
socket.removeAllListeners("data");
|
|
168
|
+
socket.removeAllListeners("error");
|
|
169
|
+
return await new Promise((resolve, reject) => {
|
|
170
|
+
const secure = tls.connect({ socket, servername: opts.servername ?? opts.host, rejectUnauthorized: false }, () => {
|
|
171
|
+
const peer = secure.getPeerCertificate();
|
|
172
|
+
secure.destroy();
|
|
173
|
+
if (!peer || !peer.fingerprint256)
|
|
174
|
+
return reject(new TlsMaterialError(`${opts.host}:${opts.port} completed a TLS handshake but presented no leaf certificate`));
|
|
175
|
+
resolve({ fingerprint256: peer.fingerprint256, validTo: peer.valid_to, subject: String(peer.subject?.CN ?? "") });
|
|
176
|
+
});
|
|
177
|
+
secure.setTimeout(timeoutMs, () => { secure.destroy(); reject(new TlsMaterialError(`TLS handshake with ${opts.host}:${opts.port} timed out`)); });
|
|
178
|
+
secure.on("error", (e) => reject(new TlsMaterialError(`TLS handshake with ${opts.host}:${opts.port} failed: ${e.message}`)));
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Assert that the broker is serving exactly the certificate in `expected`. This is the rotation
|
|
183
|
+
* gate: validate the new pair, install it, signal the broker, then call this. A mismatch means the
|
|
184
|
+
* reload did not take, and the caller must fail loud and leave the previous listener in place —
|
|
185
|
+
* never fall back to plaintext.
|
|
186
|
+
*/
|
|
187
|
+
export async function assertServedCertMatches(expected, where) {
|
|
188
|
+
const served = await probeServedCert(where);
|
|
189
|
+
if (served.fingerprint256 !== expected.fingerprint256)
|
|
190
|
+
throw new TlsMaterialError(`${where.host}:${where.port} is serving a DIFFERENT certificate than the one on disk — ` +
|
|
191
|
+
`served ${served.fingerprint256} (expires ${served.validTo}), expected ${expected.fingerprint256} ` +
|
|
192
|
+
`(expires ${expected.notAfter.toISOString()}). The reload did not take effect.`);
|
|
193
|
+
return served;
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=broker-tls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broker-tls.js","sourceRoot":"","sources":["../src/broker-tls.ts"],"names":[],"mappings":"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"}
|
package/dist/canonical.d.ts
CHANGED
|
@@ -17,8 +17,21 @@ export declare function contractDigest(value: unknown): string;
|
|
|
17
17
|
* encoder would substitute U+FFFD, and two DISTINCT carried values would silently share one
|
|
18
18
|
* digest — the opposite of "exactly as carried". Throws instead. */
|
|
19
19
|
export declare function rawDigest(data: Uint8Array | string): string;
|
|
20
|
+
/** Verify OPAQUE bytes against their advertised `sha256:<hex>` digest, and return them unchanged.
|
|
21
|
+
*
|
|
22
|
+
* The counterpart to {@link rawDigest}, as {@link verifyArtifact} is to {@link contractDigest} —
|
|
23
|
+
* and deliberately NOT the same function. `verifyArtifact` parses its input as JSON and
|
|
24
|
+
* re-canonicalizes it; artifact bytes are opaque (an image, a tarball, a truncated file) and must
|
|
25
|
+
* never be parsed, both because parsing would reject legitimate content and because a digest over
|
|
26
|
+
* a re-serialization is not a digest over what was carried.
|
|
27
|
+
*
|
|
28
|
+
* This runs on every fetch, before any byte reaches a caller. Digest-verify on READ is what
|
|
29
|
+
* catches the truncation class: a store that hands back a short object is otherwise
|
|
30
|
+
* indistinguishable from a small one. */
|
|
31
|
+
export declare function verifyRawBytes(bytes: Uint8Array, digest: string): Uint8Array;
|
|
20
32
|
/** Verify fetched artifact BYTES against their advertised digest (verify-on-read, SPEC §13.7):
|
|
21
33
|
* content addressing, not store ACLs, is the tamper boundary. The bytes must parse as JSON and
|
|
22
|
-
* re-canonicalize to the digest; anything else throws. Returns the parsed artifact.
|
|
34
|
+
* re-canonicalize to the digest; anything else throws. Returns the parsed artifact.
|
|
35
|
+
* For opaque (non-JSON) bytes use {@link verifyRawBytes}. */
|
|
23
36
|
export declare function verifyArtifact(bytes: Uint8Array, digest: string): unknown;
|
|
24
37
|
//# sourceMappingURL=canonical.d.ts.map
|
package/dist/canonical.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../src/canonical.ts"],"names":[],"mappings":"AAYA,8FAA8F;AAC9F,eAAO,MAAM,aAAa,EAAG,SAAkB,CAAC;AAGhD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;0FAE0F;AAC1F,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEtD;AAsFD,4FAA4F;AAC5F,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGpD;AAED,kGAAkG;AAClG,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAErD;AAED;;;;;qEAKqE;AACrE,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAS3D;AAED
|
|
1
|
+
{"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../src/canonical.ts"],"names":[],"mappings":"AAYA,8FAA8F;AAC9F,eAAO,MAAM,aAAa,EAAG,SAAkB,CAAC;AAGhD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;0FAE0F;AAC1F,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEtD;AAsFD,4FAA4F;AAC5F,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGpD;AAED,kGAAkG;AAClG,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAErD;AAED;;;;;qEAKqE;AACrE,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAS3D;AAED;;;;;;;;;;0CAU0C;AAC1C,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAK5E;AAED;;;8DAG8D;AAC9D,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAWzE"}
|
package/dist/canonical.js
CHANGED
|
@@ -138,9 +138,29 @@ export function rawDigest(data) {
|
|
|
138
138
|
}
|
|
139
139
|
return DIGEST_PREFIX + h.digest("hex");
|
|
140
140
|
}
|
|
141
|
+
/** Verify OPAQUE bytes against their advertised `sha256:<hex>` digest, and return them unchanged.
|
|
142
|
+
*
|
|
143
|
+
* The counterpart to {@link rawDigest}, as {@link verifyArtifact} is to {@link contractDigest} —
|
|
144
|
+
* and deliberately NOT the same function. `verifyArtifact` parses its input as JSON and
|
|
145
|
+
* re-canonicalizes it; artifact bytes are opaque (an image, a tarball, a truncated file) and must
|
|
146
|
+
* never be parsed, both because parsing would reject legitimate content and because a digest over
|
|
147
|
+
* a re-serialization is not a digest over what was carried.
|
|
148
|
+
*
|
|
149
|
+
* This runs on every fetch, before any byte reaches a caller. Digest-verify on READ is what
|
|
150
|
+
* catches the truncation class: a store that hands back a short object is otherwise
|
|
151
|
+
* indistinguishable from a small one. */
|
|
152
|
+
export function verifyRawBytes(bytes, digest) {
|
|
153
|
+
if (!isContractDigest(digest))
|
|
154
|
+
throw new Error(`verifyRawBytes: malformed digest ${JSON.stringify(digest)}`);
|
|
155
|
+
const actual = rawDigest(bytes);
|
|
156
|
+
if (actual !== digest)
|
|
157
|
+
throw new Error(`verifyRawBytes: digest mismatch over ${bytes.byteLength} bytes; advertised ${digest}, content is ${actual}`);
|
|
158
|
+
return bytes;
|
|
159
|
+
}
|
|
141
160
|
/** Verify fetched artifact BYTES against their advertised digest (verify-on-read, SPEC §13.7):
|
|
142
161
|
* content addressing, not store ACLs, is the tamper boundary. The bytes must parse as JSON and
|
|
143
|
-
* re-canonicalize to the digest; anything else throws. Returns the parsed artifact.
|
|
162
|
+
* re-canonicalize to the digest; anything else throws. Returns the parsed artifact.
|
|
163
|
+
* For opaque (non-JSON) bytes use {@link verifyRawBytes}. */
|
|
144
164
|
export function verifyArtifact(bytes, digest) {
|
|
145
165
|
if (!isContractDigest(digest))
|
|
146
166
|
throw new Error(`verifyArtifact: malformed digest ${JSON.stringify(digest)}`);
|
package/dist/canonical.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonical.js","sourceRoot":"","sources":["../src/canonical.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"canonical.js","sourceRoot":"","sources":["../src/canonical.ts"],"names":[],"mappings":"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"}
|
package/dist/channels.js
CHANGED
|
@@ -113,7 +113,7 @@ async function decode(kv, key) {
|
|
|
113
113
|
* Used by `cotal up` to seed once at setup, and by `cotal channels` for runtime writes.
|
|
114
114
|
* Each field in the file overwrites that field in the registry; unspecified fields are kept. */
|
|
115
115
|
export async function seedChannelRegistry(opts) {
|
|
116
|
-
const nc = await connect({ servers: opts.servers, ...standaloneConnectOpts(opts) });
|
|
116
|
+
const nc = await connect({ servers: opts.servers, ...standaloneConnectOpts({ ...opts, /* not yet wired to a recorded transport - see broker-policy/MeshEntry work */ tls: false }) });
|
|
117
117
|
try {
|
|
118
118
|
// The seed path is privileged (manager creds or open) so it may CREATE the bucket — this
|
|
119
119
|
// makes `cotal channels` work on a space whose bucket wasn't pre-created (e.g. one set up
|
|
@@ -135,7 +135,7 @@ export async function seedChannelRegistry(opts) {
|
|
|
135
135
|
* overrides an operator's choice. Returns true if it wrote. Called by `cotal up` with the profile
|
|
136
136
|
* class — local/self-hosted (auth, daemon present) ⇒ `durable`, open/dev (no daemon) ⇒ `live`. */
|
|
137
137
|
export async function ensureDefaultDeliveryClass(opts) {
|
|
138
|
-
const nc = await connect({ servers: opts.servers, ...standaloneConnectOpts(opts) });
|
|
138
|
+
const nc = await connect({ servers: opts.servers, ...standaloneConnectOpts({ ...opts, /* not yet wired to a recorded transport - see broker-policy/MeshEntry work */ tls: false }) });
|
|
139
139
|
try {
|
|
140
140
|
const kv = await openChannelRegistry(nc, opts.space, { create: true });
|
|
141
141
|
if ((await readChannelDefaults(kv))?.deliveryClass !== undefined)
|
|
@@ -153,7 +153,7 @@ export async function ensureDefaultDeliveryClass(opts) {
|
|
|
153
153
|
* delete path); a key that's already absent is a no-op. The space-wide defaults key is never a
|
|
154
154
|
* channel name, so it can't be removed here. */
|
|
155
155
|
export async function deleteChannels(opts) {
|
|
156
|
-
const nc = await connect({ servers: opts.servers, ...standaloneConnectOpts(opts) });
|
|
156
|
+
const nc = await connect({ servers: opts.servers, ...standaloneConnectOpts({ ...opts, /* not yet wired to a recorded transport - see broker-policy/MeshEntry work */ tls: false }) });
|
|
157
157
|
try {
|
|
158
158
|
const kv = await openChannelRegistry(nc, opts.space, { create: false });
|
|
159
159
|
for (const channel of opts.channels)
|
|
@@ -167,7 +167,7 @@ export async function deleteChannels(opts) {
|
|
|
167
167
|
* {@link ChannelRegistryFile}, disconnect. The read side of {@link seedChannelRegistry},
|
|
168
168
|
* used by `cotal channels list`. */
|
|
169
169
|
export async function readChannelRegistry(opts) {
|
|
170
|
-
const nc = await connect({ servers: opts.servers, ...standaloneConnectOpts(opts) });
|
|
170
|
+
const nc = await connect({ servers: opts.servers, ...standaloneConnectOpts({ ...opts, /* not yet wired to a recorded transport - see broker-policy/MeshEntry work */ tls: false }) });
|
|
171
171
|
try {
|
|
172
172
|
// Read-only: never CREATE the bucket — a scoped read cred (operator) has no STREAM.CREATE, and a
|
|
173
173
|
// read must not have the side effect of provisioning. `Kvm.open` binds lazily, so a never-seeded
|
package/dist/channels.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channels.js","sourceRoot":"","sources":["../src/channels.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"channels.js","sourceRoot":"","sources":["../src/channels.ts"],"names":[],"mappings":"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"}
|
|
@@ -93,7 +93,18 @@ export declare function snapshotRef(ref: GoalRef): GoalRef;
|
|
|
93
93
|
* request cannot retarget it, never from body fields — a seam taking this ref addresses only
|
|
94
94
|
* the authenticated caller's own goals. */
|
|
95
95
|
export declare function goalRefOf(request: ParsedEpRequest, goalId: string): GoalRef;
|
|
96
|
-
/** The goal's terminal-result fact subject
|
|
96
|
+
/** The goal's terminal-result fact subject — the ONE subject SPEC:1394 reserves,
|
|
97
|
+
* `epf.<e>.goal.<cOwner>.<cActor>.<cUid>.<goalId>.result`, with NO epoch token.
|
|
98
|
+
*
|
|
99
|
+
* An earlier revision epoch-scoped this (`…result.<execEpoch>`) to fence a live-superseded
|
|
100
|
+
* committer by giving each executor epoch its own create-only subject. That was non-conformant
|
|
101
|
+
* AND wrong: the window it addressed is "commit the fact, then die before the projection", where
|
|
102
|
+
* the pre-restart fact is the LEGITIMATE outcome, not a corpse's guess. Scoping by epoch hid that
|
|
103
|
+
* winner from every post-restart reader, let the successor commit a SECOND contradictory terminal
|
|
104
|
+
* at the new epoch, and surfaced the wrong one to callers (executed repro: a real `succeeded`
|
|
105
|
+
* read back as `uncertain`). One goal has one terminal, on one subject, first-fact-wins globally.
|
|
106
|
+
* The fence against a superseded committer is the §13.1 takeover barrier, which revokes and
|
|
107
|
+
* cluster-verify-evicts the family BEFORE it advances the process epoch. */
|
|
97
108
|
export declare function goalResultSubject(space: string, ref: GoalRef): string;
|
|
98
109
|
/** The per-goal progress EVENT topic tail (§13.2 reserved topics). */
|
|
99
110
|
export declare function goalProgressTopic(ref: GoalRef): string[];
|
|
@@ -161,6 +172,14 @@ export interface GoalSpecValue {
|
|
|
161
172
|
lifecycleUid: string;
|
|
162
173
|
mappingRevision: number;
|
|
163
174
|
};
|
|
175
|
+
/** The ACCEPTING incarnation's process epoch (§13.1), recorded at acceptance. Paired with the
|
|
176
|
+
* terminal fact's {@link GoalResultFact.committer} epoch, it is what makes a terminal
|
|
177
|
+
* ATTRIBUTABLE: `committed == accepted` is the executor answering for its OWN work and stays
|
|
178
|
+
* valid FOREVER however far the current epoch advances (this is what keeps the legitimate
|
|
179
|
+
* pre-restart winner readable — the property HIGH-1 lost); `committed > accepted` is a
|
|
180
|
+
* successor settling inherited work; `committed < accepted` cannot happen and is refused as
|
|
181
|
+
* garbled. Present exactly when the endpoint commits under an epoch at all. */
|
|
182
|
+
acceptedEpoch?: number;
|
|
164
183
|
/** The accepted submission's request id — the goal's ADDRESS for its durable acceptance fact
|
|
165
184
|
* (`epf.<e>.dec.<triple>.<id>`), written at acceptance when it is known. The raw submission
|
|
166
185
|
* (EPJ) is age-evicted, so receipt reconstruction after a crash reads the acceptance THROUGH
|
|
@@ -243,7 +262,9 @@ export declare function transitionGoal(ctx: ActionContext, ref: GoalRef, to: Goa
|
|
|
243
262
|
/** Project the WINNING terminal fact onto the status — the ONLY path a status reaches a terminal
|
|
244
263
|
* state, and the crash reconciler for a commit that fenced the fact but died before projecting.
|
|
245
264
|
* Cross-checks the fact's fingerprint against the persisted spec (a terminal fact whose
|
|
246
|
-
* fingerprint disagrees with the accepted goal is a garbled authority chain).
|
|
265
|
+
* fingerprint disagrees with the accepted goal is a garbled authority chain). One goal has ONE
|
|
266
|
+
* terminal subject (SPEC:1394), so the projection follows the one committed fact — there is no
|
|
267
|
+
* epoch to resolve and no per-epoch variant of "the winner". */
|
|
247
268
|
export declare function projectGoalTerminal(ctx: ActionContext, ref: GoalRef): Promise<GoalStatusValue>;
|
|
248
269
|
export type GoalOutcomeState = "succeeded" | "failed" | "cancelled" | "expired" | "uncertain";
|
|
249
270
|
/** The goal's terminal fact + the §13.6 item-5 tombstone summary in one immutable artifact. */
|
|
@@ -254,6 +275,17 @@ export interface GoalResultFact {
|
|
|
254
275
|
state: GoalOutcomeState;
|
|
255
276
|
outcomeDigest: string;
|
|
256
277
|
data?: unknown;
|
|
278
|
+
/** WHO committed this terminal, and under which process epoch. The fact records its own
|
|
279
|
+
* authorship so a reader can tell the accepting executor's own answer from a successor's
|
|
280
|
+
* settle of inherited work; without it a terminal is anonymous and neither case is
|
|
281
|
+
* distinguishable from the other. Judged against the goal spec's `acceptedEpoch`, never
|
|
282
|
+
* against the CURRENT epoch — comparing to current is precisely what hid the legitimate
|
|
283
|
+
* pre-restart winner, because a corpse's fact and a real pre-restart winner's fact are
|
|
284
|
+
* byte-identical to a reader looking only at "is this epoch stale". */
|
|
285
|
+
committer?: {
|
|
286
|
+
instanceId: string;
|
|
287
|
+
epoch: number;
|
|
288
|
+
};
|
|
257
289
|
ts: number;
|
|
258
290
|
}
|
|
259
291
|
/** Build the retirement-cancelled goal terminal (§13.8 option (i)): the FIRST-CLASS `cancelled`
|
|
@@ -282,7 +314,9 @@ export declare function goalCancelledResultOf(acceptance: {
|
|
|
282
314
|
export declare function goalTombstone(fact: GoalResultFact): GoalResultFact;
|
|
283
315
|
/** Closed validation, IDENTITY-BOUND to the ref, with the tombstone digest RE-VERIFIED. */
|
|
284
316
|
export declare function parseGoalResultFact(raw: unknown, subject: string, ref: GoalRef): GoalResultFact;
|
|
285
|
-
/** Read the goal's cached terminal outcome (`undefined` = not terminal yet).
|
|
317
|
+
/** Read the goal's cached terminal outcome (`undefined` = not terminal yet). ONE goal, ONE
|
|
318
|
+
* terminal subject (SPEC:1394), read exactly (never a wildcard `last_by_subj` — the append-shadow
|
|
319
|
+
* lesson): a committed terminal is surfaced to every reader, in every incarnation, forever. */
|
|
286
320
|
export declare function readGoalResult(ctx: ActionContext, ref: GoalRef): Promise<GoalResultFact | undefined>;
|
|
287
321
|
/** What receipt emission needs beyond the action context: the receipt store bonded to the SAME
|
|
288
322
|
* space AND the same connection, the EMITTING instance recorded as EVIDENCE (who produced this
|
|
@@ -384,6 +418,10 @@ export declare function commitGoalResult(ctx: ActionContext, args: {
|
|
|
384
418
|
ref: GoalRef;
|
|
385
419
|
now: number;
|
|
386
420
|
receipts?: ReceiptEmissionWiring;
|
|
421
|
+
committer?: {
|
|
422
|
+
instanceId: string;
|
|
423
|
+
epoch: number;
|
|
424
|
+
};
|
|
387
425
|
} & GoalCommitCause): Promise<{
|
|
388
426
|
won: boolean;
|
|
389
427
|
fact: GoalResultFact;
|
|
@@ -413,11 +451,78 @@ export declare function requestGoalCancel(ctx: ActionContext, args: {
|
|
|
413
451
|
export declare function settleGoalUncertain(ctx: ActionContext, args: {
|
|
414
452
|
ref: GoalRef;
|
|
415
453
|
now: number;
|
|
454
|
+
committer?: {
|
|
455
|
+
instanceId: string;
|
|
456
|
+
epoch: number;
|
|
457
|
+
};
|
|
416
458
|
}): Promise<{
|
|
417
459
|
won: boolean;
|
|
418
460
|
fact: GoalResultFact;
|
|
419
461
|
status: GoalStatusValue;
|
|
420
462
|
}>;
|
|
463
|
+
/** One reconcile-index entry: a pointer to a goal ref plus the ACCEPTING executor's instanceId —
|
|
464
|
+
* the coordinates a SUCCESSOR incarnation needs to find + settle an orphaned in-flight goal it
|
|
465
|
+
* never held in memory. `iid` is the accepting incarnation's instanceId: a single-manager
|
|
466
|
+
* successor (a fresh instanceId) reconciles every entry, but it is the hook a multi-instance
|
|
467
|
+
* sweep filters on (never settle a goal a still-LIVE sibling instance owns — a filter-only add,
|
|
468
|
+
* no schema change). The acceptance clock is NOT duplicated here (it lives in the goal spec the
|
|
469
|
+
* sweep reads); for one (endpoint, iid) a concurrent same-goalId retry writes the byte-IDENTICAL
|
|
470
|
+
* entry (create-only idempotent). */
|
|
471
|
+
export interface GoalIndexEntry {
|
|
472
|
+
v: 1;
|
|
473
|
+
endpoint: string;
|
|
474
|
+
owner: string;
|
|
475
|
+
actor: string;
|
|
476
|
+
uid: string;
|
|
477
|
+
goalId: string;
|
|
478
|
+
iid: string;
|
|
479
|
+
/** THE ACCEPTANCE FLOOR (H2). The identity the accepting incarnation ALLOCATED for this goal,
|
|
480
|
+
* written here because this entry is the only durable record that exists BEFORE the acceptance
|
|
481
|
+
* is acked — the goal spec does not carry it and the terminal fact does not exist yet. Without
|
|
482
|
+
* it, a concurrent same-goalId attempt that loses the bind has nothing truthful to serve while
|
|
483
|
+
* the winner is still in flight, and the honest answers are only "here is what the winner
|
|
484
|
+
* allocated" or a refusal. OPTIONAL for read compatibility with entries written before this
|
|
485
|
+
* field existed; absent means the floor was never persisted and a reader must refuse rather
|
|
486
|
+
* than invent one. */
|
|
487
|
+
allocated?: {
|
|
488
|
+
name: string;
|
|
489
|
+
actor: string;
|
|
490
|
+
uid: string;
|
|
491
|
+
};
|
|
492
|
+
}
|
|
493
|
+
/** Record an accepted goal in the endpoint's reconcile index, CREATE-ONLY and BEFORE the bind
|
|
494
|
+
* (must-5 Q-B): the atomicity is `index-CAS-before-bind`, so recoverability is clean either side
|
|
495
|
+
* of a crash — a crash AFTER this write and BEFORE the bind leaves an index entry whose goal
|
|
496
|
+
* status is absent (the sweep treats it as a no-goal and clears it); a crash BEFORE it leaves no
|
|
497
|
+
* entry, so the acceptance was never durable. `iid` is the accepting incarnation's instanceId.
|
|
498
|
+
* Idempotent for an adopted or concurrent same-goalId retry (a byte-identical pointer). */
|
|
499
|
+
export declare function recordGoalIndex(ctx: ActionContext, ref: GoalRef, iid: string, allocated?: {
|
|
500
|
+
name: string;
|
|
501
|
+
actor: string;
|
|
502
|
+
uid: string;
|
|
503
|
+
}): Promise<{
|
|
504
|
+
recorded: true;
|
|
505
|
+
} | {
|
|
506
|
+
recorded: false;
|
|
507
|
+
existing: GoalIndexEntry;
|
|
508
|
+
}>;
|
|
509
|
+
/** Delete an index entry once its goal is terminal (or after a sweep settles it): a terminal goal
|
|
510
|
+
* is never reconciled again. Idempotent — an absent entry is a no-op. */
|
|
511
|
+
export declare function clearGoalIndex(ctx: ActionContext, ref: GoalRef): Promise<void>;
|
|
512
|
+
/** Read ONE reconcile-index entry over the goal-writer's own bonded KV — the durable answer to
|
|
513
|
+
* "who accepted this goalId, and what identity did they allocate for it", available from the
|
|
514
|
+
* moment of acceptance rather than only once a terminal exists. Absent means no incarnation ever
|
|
515
|
+
* durably accepted it. */
|
|
516
|
+
export declare function readGoalIndex(ctx: ActionContext, ref: GoalRef): Promise<GoalIndexEntry | undefined>;
|
|
517
|
+
/** Enumerate the endpoint's in-flight reconcile index over a RAW records KV: a successor's boot
|
|
518
|
+
* sweep opens it with the PROVISIONER credential (records CONSUMER.CREATE), never the goal-writer
|
|
519
|
+
* (which holds no enumeration grant), and settles each unterminal goal so an accepted goal is
|
|
520
|
+
* never dropped across a manager restart. Returns each recorded GoalRef + the accepting `iid` (the
|
|
521
|
+
* hook a multi-instance sweep filters on so it never settles a live sibling's goal). */
|
|
522
|
+
export declare function listGoalIndex(kv: KV, endpoint: string): Promise<{
|
|
523
|
+
ref: GoalRef;
|
|
524
|
+
iid: string;
|
|
525
|
+
}[]>;
|
|
421
526
|
/** Classify a resubmission against the recorded bind: same fingerprint = retry (cached), else
|
|
422
527
|
* `conflict`. {@link resolveGoalSubmission} composes this with the orphaned-bind recovery. */
|
|
423
528
|
export declare function classifyGoalReuse(existing: GoalBindFact, submittedFingerprint: string): "cached" | "conflict";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endpoint-action.d.ts","sourceRoot":"","sources":["../src/endpoint-action.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAA+B,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC9G,OAAO,EAA0B,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEtF,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,
|
|
1
|
+
{"version":3,"file":"endpoint-action.d.ts","sourceRoot":"","sources":["../src/endpoint-action.ts"],"names":[],"mappings":"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"}
|