@cotal-ai/core 0.90.0 → 0.91.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/agent-file.d.ts +2 -1
- package/dist/agent-file.d.ts.map +1 -1
- package/dist/agent-file.js +5 -3
- package/dist/agent-file.js.map +1 -1
- package/dist/auth-provider.d.ts +144 -1
- package/dist/auth-provider.d.ts.map +1 -1
- package/dist/auth-provider.js +24 -0
- package/dist/auth-provider.js.map +1 -1
- package/dist/authority-store-config.d.ts +31 -0
- package/dist/authority-store-config.d.ts.map +1 -0
- package/dist/authority-store-config.js +45 -0
- package/dist/authority-store-config.js.map +1 -0
- package/dist/backup-config.d.ts +32 -1
- package/dist/backup-config.d.ts.map +1 -1
- package/dist/backup-config.js +11 -0
- package/dist/backup-config.js.map +1 -1
- package/dist/broker-identity.d.ts +24 -0
- package/dist/broker-identity.d.ts.map +1 -0
- package/dist/broker-identity.js +36 -0
- package/dist/broker-identity.js.map +1 -0
- package/dist/browser-control.d.ts +1 -0
- package/dist/browser-control.d.ts.map +1 -1
- package/dist/browser-control.js +1 -0
- package/dist/browser-control.js.map +1 -1
- package/dist/browser-validators-build.d.ts +1 -0
- package/dist/browser-validators-build.d.ts.map +1 -1
- package/dist/channels.d.ts +14 -0
- package/dist/channels.d.ts.map +1 -1
- package/dist/channels.js +19 -5
- package/dist/channels.js.map +1 -1
- package/dist/command.d.ts +57 -0
- package/dist/command.d.ts.map +1 -1
- package/dist/command.js +49 -2
- package/dist/command.js.map +1 -1
- package/dist/connector-setup.d.ts +6 -0
- package/dist/connector-setup.d.ts.map +1 -1
- package/dist/connector.d.ts +3 -0
- package/dist/connector.d.ts.map +1 -1
- package/dist/connector.js.map +1 -1
- package/dist/endpoint-binding.d.ts +66 -1
- package/dist/endpoint-binding.d.ts.map +1 -1
- package/dist/endpoint-binding.js +167 -118
- package/dist/endpoint-binding.js.map +1 -1
- package/dist/endpoint-call.js +1 -1
- package/dist/endpoint-call.js.map +1 -1
- package/dist/endpoint-caller.d.ts +2 -0
- package/dist/endpoint-caller.d.ts.map +1 -1
- package/dist/endpoint-caller.js.map +1 -1
- package/dist/endpoint-grants.d.ts +7 -1
- package/dist/endpoint-grants.d.ts.map +1 -1
- package/dist/endpoint-grants.js +9 -1
- package/dist/endpoint-grants.js.map +1 -1
- package/dist/endpoint-invoke.d.ts +9 -0
- package/dist/endpoint-invoke.d.ts.map +1 -1
- package/dist/endpoint-invoke.js +7 -0
- package/dist/endpoint-invoke.js.map +1 -1
- package/dist/endpoint-schema-diff.d.ts +20 -0
- package/dist/endpoint-schema-diff.d.ts.map +1 -0
- package/dist/endpoint-schema-diff.js +15 -0
- package/dist/endpoint-schema-diff.js.map +1 -0
- package/dist/endpoint.d.ts +90 -5
- package/dist/endpoint.d.ts.map +1 -1
- package/dist/endpoint.js +329 -31
- package/dist/endpoint.js.map +1 -1
- package/dist/identity.d.ts +18 -0
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +28 -1
- package/dist/identity.js.map +1 -1
- package/dist/index.d.ts +12 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/issued-authority.d.ts +25 -1
- package/dist/issued-authority.d.ts.map +1 -1
- package/dist/issued-authority.js +24 -7
- package/dist/issued-authority.js.map +1 -1
- package/dist/membership-feed.d.ts +16 -12
- package/dist/membership-feed.d.ts.map +1 -1
- package/dist/membership-feed.js +143 -12
- package/dist/membership-feed.js.map +1 -1
- package/dist/one-line.d.ts +5 -4
- package/dist/one-line.d.ts.map +1 -1
- package/dist/one-line.js +6 -5
- package/dist/one-line.js.map +1 -1
- package/dist/provision.d.ts +4 -1
- package/dist/provision.d.ts.map +1 -1
- package/dist/provision.js +35 -16
- package/dist/provision.js.map +1 -1
- package/dist/registry.d.ts +8 -4
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +58 -20
- package/dist/registry.js.map +1 -1
- package/dist/run-admission.d.ts +18 -1
- package/dist/run-admission.d.ts.map +1 -1
- package/dist/run-admission.js +18 -3
- package/dist/run-admission.js.map +1 -1
- package/dist/sealed-reply.d.ts +21 -0
- package/dist/sealed-reply.d.ts.map +1 -0
- package/dist/sealed-reply.js +75 -0
- package/dist/sealed-reply.js.map +1 -0
- package/dist/secret-fs.d.ts +29 -6
- package/dist/secret-fs.d.ts.map +1 -1
- package/dist/secret-fs.js +107 -18
- package/dist/secret-fs.js.map +1 -1
- package/dist/space-deletion-targets.d.ts +4 -0
- package/dist/space-deletion-targets.d.ts.map +1 -0
- package/dist/space-deletion-targets.js +15 -0
- package/dist/space-deletion-targets.js.map +1 -0
- package/dist/space-initialization-diff.d.ts +47 -0
- package/dist/space-initialization-diff.d.ts.map +1 -0
- package/dist/space-initialization-diff.js +100 -0
- package/dist/space-initialization-diff.js.map +1 -0
- package/dist/space-initialization-observation.d.ts +52 -0
- package/dist/space-initialization-observation.d.ts.map +1 -0
- package/dist/space-initialization-observation.js +133 -0
- package/dist/space-initialization-observation.js.map +1 -0
- package/dist/space-resource-definitions.d.ts +86 -0
- package/dist/space-resource-definitions.d.ts.map +1 -0
- package/dist/space-resource-definitions.js +133 -0
- package/dist/space-resource-definitions.js.map +1 -0
- package/dist/space-schema-diff.d.ts +45 -0
- package/dist/space-schema-diff.d.ts.map +1 -0
- package/dist/space-schema-diff.js +204 -0
- package/dist/space-schema-diff.js.map +1 -0
- package/dist/space-schema-observation.d.ts +45 -0
- package/dist/space-schema-observation.d.ts.map +1 -0
- package/dist/space-schema-observation.js +78 -0
- package/dist/space-schema-observation.js.map +1 -0
- package/dist/spaces.d.ts.map +1 -1
- package/dist/spaces.js +5 -25
- package/dist/spaces.js.map +1 -1
- package/dist/stream-schema-diff.d.ts +31 -0
- package/dist/stream-schema-diff.d.ts.map +1 -0
- package/dist/stream-schema-diff.js +45 -0
- package/dist/stream-schema-diff.js.map +1 -0
- package/dist/streams.d.ts +30 -1
- package/dist/streams.d.ts.map +1 -1
- package/dist/streams.js +41 -18
- package/dist/streams.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { explicitSpaceResourceFields, nativeKvScalarInputDefaults, spaceResourceDefinitions } from "./space-resource-definitions.js";
|
|
2
|
+
import { assertAuthStoreConfig, assertContractStoreConfig, assertRecordsStoreConfig, assertSessionsStoreConfig } from "./endpoint-binding.js";
|
|
3
|
+
import { assertIssuedStoreConfig, WRITE_ONCE_PER_KEY } from "./issued-authority.js";
|
|
4
|
+
import { assertAdmissionStoreConfig } from "./run-admission.js";
|
|
5
|
+
import { authorityStreamShapeIssue } from "./authority-store-config.js";
|
|
6
|
+
import { assertArtifactStoreConfig, LEGACY_ARTIFACT_STORE_MAX_BYTES } from "./streams.js";
|
|
7
|
+
import { streamReadPolicyBaseline, validateCanonicalBackupStreamConfig } from "./backup-config.js";
|
|
8
|
+
import { canonicalJson } from "./canonical.js";
|
|
9
|
+
import { DiscardPolicy } from "@nats-io/jetstream";
|
|
10
|
+
import { diffDeclaredStreamConfigs } from "./stream-schema-diff.js";
|
|
11
|
+
function observedExtraFields(resource, config, declared) {
|
|
12
|
+
const result = { status: "not-modeled", matchesPolicy: [], nondefaultUndeclared: [], unmodeled: [] };
|
|
13
|
+
try {
|
|
14
|
+
if (!Array.isArray(declared.subjects))
|
|
15
|
+
throw new Error();
|
|
16
|
+
const baseline = streamReadPolicyBaseline(resource.stream, declared.subjects);
|
|
17
|
+
if (resource.kind !== "stream") {
|
|
18
|
+
baseline.discard = DiscardPolicy.New;
|
|
19
|
+
baseline.allow_rollup_hdrs = true;
|
|
20
|
+
baseline.allow_direct = true;
|
|
21
|
+
if (resource.kind === "kv") {
|
|
22
|
+
// Public input defaults supply only these scalar fields, not an effective stream
|
|
23
|
+
// builder. Version-dependent/native invariants remain separately checked.
|
|
24
|
+
Object.assign(baseline, nativeKvScalarInputDefaults());
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const actual = config;
|
|
28
|
+
result.status = "checked";
|
|
29
|
+
for (const field of Object.keys(actual).sort()) {
|
|
30
|
+
if (Object.hasOwn(declared, field))
|
|
31
|
+
continue;
|
|
32
|
+
// Native artifact verification deliberately permits either direct-read setting.
|
|
33
|
+
if (resource.kind === "object-store" && field === "allow_direct" && typeof actual[field] === "boolean") {
|
|
34
|
+
result.matchesPolicy.push(field);
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
// Native TTL reconciliation preserves a smaller existing duplicate window.
|
|
38
|
+
if (resource.kind === "kv" && field === "duplicate_window" && typeof declared.max_age === "number" && declared.max_age > 0) {
|
|
39
|
+
const value = actual[field];
|
|
40
|
+
if (typeof value === "number" && Number.isSafeInteger(value) && value >= 0 && value <= declared.max_age)
|
|
41
|
+
result.matchesPolicy.push(field);
|
|
42
|
+
else
|
|
43
|
+
result.nondefaultUndeclared.push(field);
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
if (!Object.hasOwn(baseline, field)) {
|
|
47
|
+
result.unmodeled.push(field);
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
let value = actual[field];
|
|
51
|
+
if (field === "metadata" && value && typeof value === "object" && !Array.isArray(value) && Object.entries(value).every(([key, item]) => key.startsWith("_nats.") && typeof item === "string"))
|
|
52
|
+
value = {};
|
|
53
|
+
if (canonicalJson(value) === canonicalJson(baseline[field]))
|
|
54
|
+
result.matchesPolicy.push(field);
|
|
55
|
+
else
|
|
56
|
+
result.nondefaultUndeclared.push(field);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
result.status = "failed";
|
|
61
|
+
}
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
function nativeVerification(resource, config, space) {
|
|
65
|
+
try {
|
|
66
|
+
if (resource.kind === "kv" && resource.verification !== "native-runtime-check-required") {
|
|
67
|
+
const issue = authorityStreamShapeIssue(config, resource.bucket);
|
|
68
|
+
if (issue)
|
|
69
|
+
return { status: "not-confirmed", fields: issue.fields };
|
|
70
|
+
}
|
|
71
|
+
switch (resource.verification) {
|
|
72
|
+
case "canonical-backup":
|
|
73
|
+
validateCanonicalBackupStreamConfig(space, resource.stream, config);
|
|
74
|
+
break;
|
|
75
|
+
case "contract":
|
|
76
|
+
assertContractStoreConfig(config, space);
|
|
77
|
+
break;
|
|
78
|
+
case "records":
|
|
79
|
+
assertRecordsStoreConfig(config, space);
|
|
80
|
+
break;
|
|
81
|
+
case "auth":
|
|
82
|
+
assertAuthStoreConfig(config, space);
|
|
83
|
+
break;
|
|
84
|
+
case "sessions":
|
|
85
|
+
assertSessionsStoreConfig(config, space);
|
|
86
|
+
break;
|
|
87
|
+
case "issued":
|
|
88
|
+
if (resource.kind !== "kv")
|
|
89
|
+
return { status: "not-confirmed", fields: [] };
|
|
90
|
+
assertIssuedStoreConfig(config, space, resource.bucket);
|
|
91
|
+
break;
|
|
92
|
+
case "admission":
|
|
93
|
+
assertAdmissionStoreConfig(config, space);
|
|
94
|
+
break;
|
|
95
|
+
case "artifact":
|
|
96
|
+
assertArtifactStoreConfig(config, space);
|
|
97
|
+
break;
|
|
98
|
+
case "declared-fields":
|
|
99
|
+
case "native-runtime-check-required": return { status: "not-checked", fields: [] };
|
|
100
|
+
default: throw new Error("unrecognized native schema verification policy");
|
|
101
|
+
}
|
|
102
|
+
return { status: "invariants-match", fields: [] };
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// Native diagnostics may contain broker values. They are not public schema-report text.
|
|
106
|
+
return { status: "not-confirmed", fields: [] };
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/** This allowlist names existing native guard families, never accepted actions. It does not
|
|
110
|
+
* call creators/migrations, prove a shadow-free stream or inspect a leftover TTL canary. */
|
|
111
|
+
function reconciliationPolicy(resource, observation, row, extras, unexpanded, space) {
|
|
112
|
+
const fields = [...new Set([...row.differences.map((difference) => difference.field), ...extras.nondefaultUndeclared])];
|
|
113
|
+
const blocked = { state: "migration-required", nativeGuard: null, fields, nonAllowlistedFields: fields };
|
|
114
|
+
if (!observation || observation.state !== "present" || !["declared-fields-match", "incompatible-or-drifted"].includes(row.state))
|
|
115
|
+
return { ...blocked, state: "not-evaluated" };
|
|
116
|
+
if (unexpanded.length || extras.status !== "checked" || extras.unmodeled.length)
|
|
117
|
+
return blocked;
|
|
118
|
+
if (resource.kind === "kv" && typeof resource.createOptions.ttl === "number" && resource.createOptions.ttl > 0) {
|
|
119
|
+
const nonAllowlistedFields = fields.filter((field) => field !== "max_age" && field !== "duplicate_window");
|
|
120
|
+
if (nonAllowlistedFields.length)
|
|
121
|
+
return { ...blocked, nonAllowlistedFields };
|
|
122
|
+
return { state: "native-guard-required", nativeGuard: "ttl-enforcement", fields, nonAllowlistedFields: [] };
|
|
123
|
+
}
|
|
124
|
+
if (fields.length === 0)
|
|
125
|
+
return { state: "no-declared-change", nativeGuard: null, fields, nonAllowlistedFields: [] };
|
|
126
|
+
if (resource.kind === "object-store" && fields.length === 1 && fields[0] === "max_bytes" && observation.config.max_bytes === LEGACY_ARTIFACT_STORE_MAX_BYTES) {
|
|
127
|
+
try {
|
|
128
|
+
assertArtifactStoreConfig({ ...observation.config, max_bytes: -1 }, space);
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return blocked;
|
|
132
|
+
}
|
|
133
|
+
return { state: "native-guard-required", nativeGuard: "artifact-legacy-cap", fields, nonAllowlistedFields: [] };
|
|
134
|
+
}
|
|
135
|
+
if (resource.kind === "stream" && resource.verification === "contract") {
|
|
136
|
+
const allowed = new Set(Object.keys(WRITE_ONCE_PER_KEY));
|
|
137
|
+
const nonAllowlistedFields = fields.filter((field) => !allowed.has(field));
|
|
138
|
+
if (nonAllowlistedFields.length)
|
|
139
|
+
return { ...blocked, nonAllowlistedFields };
|
|
140
|
+
try {
|
|
141
|
+
assertContractStoreConfig({ ...observation.config, ...WRITE_ONCE_PER_KEY }, space);
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return blocked;
|
|
145
|
+
}
|
|
146
|
+
return { state: "native-guard-required", nativeGuard: "contract-shadow", fields, nonAllowlistedFields: [] };
|
|
147
|
+
}
|
|
148
|
+
return blocked;
|
|
149
|
+
}
|
|
150
|
+
/** Compare only explicit native stream fields and post-create hardening. KV/object-store
|
|
151
|
+
* creation options are not expanded into guessed SDK/server defaults. Pure native invariant
|
|
152
|
+
* checks run where declared; runtime checks and complete field policy stay separate. No
|
|
153
|
+
* mutating create-or-verify helper, canary, repair or migration is invoked. */
|
|
154
|
+
export function diffSpaceResources(space, observations, options = {}) {
|
|
155
|
+
const definitions = spaceResourceDefinitions(space, options);
|
|
156
|
+
const resources = new Map(definitions.resources.map((resource) => [resource.stream, resource]));
|
|
157
|
+
const found = new Map();
|
|
158
|
+
for (const observation of observations) {
|
|
159
|
+
if (!resources.has(observation.stream) || found.has(observation.stream))
|
|
160
|
+
throw new Error("space schema diff requires unique observations of the declared resource set; no foreign or duplicate observation was adopted");
|
|
161
|
+
found.set(observation.stream, observation);
|
|
162
|
+
}
|
|
163
|
+
const rows = definitions.resources.map((resource) => {
|
|
164
|
+
const observation = found.get(resource.stream);
|
|
165
|
+
const fields = explicitSpaceResourceFields(resource), desired = fields.config;
|
|
166
|
+
const input = observation && observation.state !== "not-observed-budget" ? [
|
|
167
|
+
observation.kind !== resource.kind ? { stream: resource.stream, state: "target-mismatch" }
|
|
168
|
+
: observation.state === "present" ? { stream: resource.stream, state: "present", config: observation.config }
|
|
169
|
+
: { stream: resource.stream, state: observation.state === "reported-not-found" ? "not-found" : observation.state },
|
|
170
|
+
] : [];
|
|
171
|
+
const row = diffDeclaredStreamConfigs([desired], input)[0];
|
|
172
|
+
const checked = observation?.state === "present" && row.state !== "target-mismatch" && row.state !== "observation-failed"
|
|
173
|
+
? nativeVerification(resource, observation.config, space) : { status: "not-checked", fields: [] };
|
|
174
|
+
const verification = checked.status;
|
|
175
|
+
const extras = observation?.state === "present" && row.state !== "target-mismatch" && row.state !== "observation-failed"
|
|
176
|
+
? observedExtraFields(resource, observation.config, desired) : { status: "not-modeled", matchesPolicy: [], nondefaultUndeclared: [], unmodeled: [] };
|
|
177
|
+
const state = row.state === "declared-fields-match"
|
|
178
|
+
? fields.unexpanded.length ? "creation-options-policy-required"
|
|
179
|
+
: extras.status === "failed" ? "observation-failed"
|
|
180
|
+
: extras.nondefaultUndeclared.length || extras.unmodeled.length ? "unclassified-stream-settings"
|
|
181
|
+
: verification === "not-confirmed" ? "native-store-verification-unconfirmed"
|
|
182
|
+
: resource.kind !== "stream" ? verification === "invariants-match" ? "native-store-invariants-match" : "native-store-verification-required"
|
|
183
|
+
: row.state
|
|
184
|
+
: row.state;
|
|
185
|
+
const reconciliation = reconciliationPolicy(resource, observation, row, extras, fields.unexpanded, space);
|
|
186
|
+
const { uninspectedFields, ...comparison } = row;
|
|
187
|
+
return { ...comparison, kind: resource.kind, state, uncomparedFields: uninspectedFields, nativeVerification: verification, nativeInvariantFields: checked.fields, unexpandedCreationOptions: fields.unexpanded, observedExtraFields: extras, reconciliation };
|
|
188
|
+
});
|
|
189
|
+
return {
|
|
190
|
+
kind: "space-resource-schema-diff",
|
|
191
|
+
space,
|
|
192
|
+
rows,
|
|
193
|
+
scope: "explicit stream/public store-option fields, hardening and pure native invariants; unspecified SDK defaults, runtime checks and full field policy remain unestablished",
|
|
194
|
+
pendingPolicy: definitions.pendingPolicy,
|
|
195
|
+
completeSpaceSchema: false,
|
|
196
|
+
sdkDefaultsExpanded: false,
|
|
197
|
+
sdkInputDefaultsUsedForReadPolicy: true,
|
|
198
|
+
connectionAuthorityChecked: false,
|
|
199
|
+
absenceAuthoritativelyProven: false,
|
|
200
|
+
applyPermitted: false,
|
|
201
|
+
writes: [],
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=space-schema-diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"space-schema-diff.js","sourceRoot":"","sources":["../src/space-schema-diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type JetStreamManager, type StreamConfig } from "@nats-io/jetstream";
|
|
2
|
+
import type { EndpointStreamOptions } from "./endpoint-binding.js";
|
|
3
|
+
import { type SpaceResourceDefinition } from "./space-resource-definitions.js";
|
|
4
|
+
/** The schema reader receives only stream-info. Connection custody, target validation and
|
|
5
|
+
* credentials stay with its caller; a read port is not evidence of bootstrap authority. */
|
|
6
|
+
export interface SpaceSchemaReadPort {
|
|
7
|
+
readonly info: (stream: string) => Promise<{
|
|
8
|
+
config: StreamConfig;
|
|
9
|
+
}>;
|
|
10
|
+
}
|
|
11
|
+
/** Narrow an existing native manager to a frozen read-only facade. No connection is opened. */
|
|
12
|
+
export declare function spaceSchemaReadPort(manager: JetStreamManager): SpaceSchemaReadPort;
|
|
13
|
+
type ObservedResource = {
|
|
14
|
+
kind: SpaceResourceDefinition["kind"];
|
|
15
|
+
stream: string;
|
|
16
|
+
operation: "stream-info";
|
|
17
|
+
};
|
|
18
|
+
export type SpaceSchemaObservation = ObservedResource & ({
|
|
19
|
+
state: "present";
|
|
20
|
+
config: StreamConfig;
|
|
21
|
+
} | {
|
|
22
|
+
state: "reported-not-found" | "permission-denied" | "target-mismatch" | "observation-failed" | "not-observed-budget";
|
|
23
|
+
});
|
|
24
|
+
/** Structured native stream-read failure classification. It establishes no absence or grant. */
|
|
25
|
+
export declare function spaceSchemaReadFailure(error: unknown): "permission-denied" | "reported-not-found" | "observation-failed";
|
|
26
|
+
/** Read each declared resource once through the supplied port. Structured SDK errors are
|
|
27
|
+
* classified without message matching or raw diagnostics. A reported missing stream is not
|
|
28
|
+
* authoritative absence, even when a caller describes their connection as privileged. A shared
|
|
29
|
+
* five-second budget leaves later rows unvisited and does not cancel an in-flight request. */
|
|
30
|
+
export declare function observeSpaceResources(reads: SpaceSchemaReadPort, space: string, options?: EndpointStreamOptions): Promise<{
|
|
31
|
+
kind: "space-resource-observations";
|
|
32
|
+
space: string;
|
|
33
|
+
observations: SpaceSchemaObservation[];
|
|
34
|
+
deadlineMs: number;
|
|
35
|
+
deadlineReached: boolean;
|
|
36
|
+
readerRequestCancellationEstablished: false;
|
|
37
|
+
scope: "declared resources through the supplied read port; server/account/mode binding is not established";
|
|
38
|
+
completeSpaceSchema: false;
|
|
39
|
+
connectionAuthorityChecked: false;
|
|
40
|
+
absenceAuthoritativelyProven: false;
|
|
41
|
+
applyPermitted: false;
|
|
42
|
+
writes: readonly [];
|
|
43
|
+
}>;
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=space-schema-observation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"space-schema-observation.d.ts","sourceRoot":"","sources":["../src/space-schema-observation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEpH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,EAA4B,KAAK,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAEzG;4FAC4F;AAC5F,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;CACtE;AAED,+FAA+F;AAC/F,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,mBAAmB,CAElF;AAED,KAAK,gBAAgB,GAAG;IAAE,IAAI,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,aAAa,CAAA;CAAE,CAAC;AAC5G,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,GAAG,CACpD;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GAC1C;IAAE,KAAK,EAAE,oBAAoB,GAAG,mBAAmB,GAAG,iBAAiB,GAAG,oBAAoB,GAAG,qBAAqB,CAAA;CAAE,CAC3H,CAAC;AAEF,gGAAgG;AAChG,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,GAAG,oBAAoB,GAAG,oBAAoB,CAIxH;AAED;;;+FAG+F;AAC/F,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B;;;;;;;;;;;;;GA0CzH"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { JetStreamApiCodes, JetStreamApiError } from "@nats-io/jetstream";
|
|
2
|
+
import { PermissionViolationError } from "@nats-io/transport-node";
|
|
3
|
+
import { isJetStreamMissing } from "./jetstream-missing.js";
|
|
4
|
+
import { spaceResourceDefinitions } from "./space-resource-definitions.js";
|
|
5
|
+
/** Narrow an existing native manager to a frozen read-only facade. No connection is opened. */
|
|
6
|
+
export function spaceSchemaReadPort(manager) {
|
|
7
|
+
return Object.freeze({ info: (stream) => manager.streams.info(stream) });
|
|
8
|
+
}
|
|
9
|
+
/** Structured native stream-read failure classification. It establishes no absence or grant. */
|
|
10
|
+
export function spaceSchemaReadFailure(error) {
|
|
11
|
+
if (error instanceof PermissionViolationError || error instanceof JetStreamApiError && error.status === 403)
|
|
12
|
+
return "permission-denied";
|
|
13
|
+
if (error instanceof JetStreamApiError && error.status === 404 && isJetStreamMissing(error, JetStreamApiCodes.StreamNotFound))
|
|
14
|
+
return "reported-not-found";
|
|
15
|
+
return "observation-failed";
|
|
16
|
+
}
|
|
17
|
+
/** Read each declared resource once through the supplied port. Structured SDK errors are
|
|
18
|
+
* classified without message matching or raw diagnostics. A reported missing stream is not
|
|
19
|
+
* authoritative absence, even when a caller describes their connection as privileged. A shared
|
|
20
|
+
* five-second budget leaves later rows unvisited and does not cancel an in-flight request. */
|
|
21
|
+
export async function observeSpaceResources(reads, space, options = {}) {
|
|
22
|
+
const definitions = spaceResourceDefinitions(space, options);
|
|
23
|
+
const observations = [];
|
|
24
|
+
const deadline = performance.now() + 5000;
|
|
25
|
+
let deadlineReached = false;
|
|
26
|
+
for (const definition of definitions.resources) {
|
|
27
|
+
const resource = { kind: definition.kind, stream: definition.stream, operation: "stream-info" };
|
|
28
|
+
const remaining = deadline - performance.now();
|
|
29
|
+
if (remaining <= 0)
|
|
30
|
+
deadlineReached = true;
|
|
31
|
+
if (deadlineReached) {
|
|
32
|
+
observations.push({ ...resource, state: "not-observed-budget" });
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
let timer;
|
|
36
|
+
try {
|
|
37
|
+
const result = await Promise.race([
|
|
38
|
+
reads.info(definition.stream).then((info) => ({ kind: "read", info })),
|
|
39
|
+
new Promise((resolve) => { timer = setTimeout(() => resolve({ kind: "deadline" }), remaining); }),
|
|
40
|
+
]);
|
|
41
|
+
if (result.kind === "deadline") {
|
|
42
|
+
deadlineReached = true;
|
|
43
|
+
observations.push({ ...resource, state: "observation-failed" });
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
const info = result.info;
|
|
47
|
+
if (!info || !info.config || typeof info.config !== "object" || Array.isArray(info.config)) {
|
|
48
|
+
observations.push({ ...resource, state: "observation-failed" });
|
|
49
|
+
}
|
|
50
|
+
else if (info.config.name !== definition.stream) {
|
|
51
|
+
observations.push({ ...resource, state: "target-mismatch" });
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
observations.push({ ...resource, state: "present", config: info.config });
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
observations.push({ ...resource, state: spaceSchemaReadFailure(error) });
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
clearTimeout(timer);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
kind: "space-resource-observations",
|
|
66
|
+
space,
|
|
67
|
+
observations,
|
|
68
|
+
deadlineMs: 5000, deadlineReached,
|
|
69
|
+
readerRequestCancellationEstablished: false,
|
|
70
|
+
scope: "declared resources through the supplied read port; server/account/mode binding is not established",
|
|
71
|
+
completeSpaceSchema: false,
|
|
72
|
+
connectionAuthorityChecked: false,
|
|
73
|
+
absenceAuthoritativelyProven: false,
|
|
74
|
+
applyPermitted: false,
|
|
75
|
+
writes: [],
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=space-schema-observation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"space-schema-observation.js","sourceRoot":"","sources":["../src/space-schema-observation.ts"],"names":[],"mappings":"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"}
|
package/dist/spaces.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spaces.d.ts","sourceRoot":"","sources":["../src/spaces.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"spaces.d.ts","sourceRoot":"","sources":["../src/spaces.ts"],"names":[],"mappings":"AAaA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAa3D,qCAAqC;AACrC,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;2EAE2E;AAC3E,wBAAsB,UAAU,CAAC,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAmDnF;AAyBD;;;;iDAIiD;AACjD,wBAAsB,WAAW,CAAC,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB5H"}
|
package/dist/spaces.js
CHANGED
|
@@ -7,9 +7,9 @@ import { connect, credsAuthenticator } from "@nats-io/transport-node";
|
|
|
7
7
|
import { JetStreamApiCodes, JetStreamApiError, jetstreamManager } from "@nats-io/jetstream";
|
|
8
8
|
import { Kvm } from "@nats-io/kv";
|
|
9
9
|
import { DEFAULT_SERVER } from "./endpoint.js";
|
|
10
|
-
import { parseSubject,
|
|
10
|
+
import { parseSubject, isTransferStream, mintLifecycleUid } from "./subjects.js";
|
|
11
|
+
import { spaceDeletionStreams } from "./space-deletion-targets.js";
|
|
11
12
|
import { idFromCreds, newIdentity } from "./identity.js";
|
|
12
|
-
import { endpointPlaneStreamNames } from "./endpoint-binding.js";
|
|
13
13
|
import { mintCreds } from "./provision.js";
|
|
14
14
|
/** Connect opts for a possibly-scoped cred: an authenticator plus the per-id `inboxPrefix` a scoped
|
|
15
15
|
* cred needs (its `sub.allow` is `_INBOX_<id>.>`, so JS API replies must land there, not the default
|
|
@@ -124,29 +124,9 @@ export async function deleteSpace(opts) {
|
|
|
124
124
|
// Delete EVERY stream + KV bucket `setupSpaceStreams` creates — otherwise `down` leaves the DLV/INBOX
|
|
125
125
|
// streams and the members/acl/membership/delivery/manager buckets orphaned (a space leak), and since
|
|
126
126
|
// `teardown` is the sole STREAM.DELETE holder, nothing else could ever reap them.
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
taskStream(opts.space),
|
|
131
|
-
inboxStream(opts.space),
|
|
132
|
-
dlvStream(opts.space),
|
|
133
|
-
`KV_${presenceBucket(opts.space)}`,
|
|
134
|
-
`KV_${channelBucket(opts.space)}`,
|
|
135
|
-
`KV_${membersBucket(opts.space)}`,
|
|
136
|
-
`KV_${aclBucket(opts.space)}`,
|
|
137
|
-
`KV_${membershipBucket(opts.space)}`,
|
|
138
|
-
`KV_${deliveryBucket(opts.space)}`,
|
|
139
|
-
`KV_${managerBucket(opts.space)}`,
|
|
140
|
-
...endpointPlaneStreamNames(opts.space),
|
|
141
|
-
// The artifact Object Store's backing stream. It must be named HERE and not swept by
|
|
142
|
-
// prefix: `$O.<bucket>.>` lives outside the `cotal.<space>.>` grammar, so a subject-based
|
|
143
|
-
// sweep of the space never sees it. Teardown is the sole STREAM.DELETE holder, so a stream
|
|
144
|
-
// missing from this list is not merely un-deleted - nothing in the system can ever reap it.
|
|
145
|
-
objectStoreStream(artifactBucket(opts.space)),
|
|
146
|
-
];
|
|
147
|
-
// Each manager instance that received a carried resume holds its own transfer bucket, so those
|
|
148
|
-
// streams are found by name shape; a teardown credential deletes the ones named at its mint.
|
|
149
|
-
streams.push(...await listTransferStreams(nc, opts.space));
|
|
127
|
+
// The same closed target list mints teardown's exact grants. Transfer streams are enumerated
|
|
128
|
+
// under this account and filtered to this space, never inferred from a prefix alone.
|
|
129
|
+
const streams = spaceDeletionStreams(opts.space, await listTransferStreams(nc, opts.space));
|
|
150
130
|
const survived = [];
|
|
151
131
|
for (const s of streams)
|
|
152
132
|
await jsm.streams.delete(s).catch((e) => {
|
package/dist/spaces.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spaces.js","sourceRoot":"","sources":["../src/spaces.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,+FAA+F;AAC/F,2FAA2F;AAC3F,+FAA+F;AAC/F,wFAAwF;AAExF,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAuB,MAAM,yBAAyB,CAAC;AAC3F,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"spaces.js","sourceRoot":"","sources":["../src/spaces.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { StreamConfig } from "@nats-io/jetstream";
|
|
2
|
+
/** Input observations are data, not a credential, target proof or permission to create a store. */
|
|
3
|
+
export type StreamSchemaObservation = {
|
|
4
|
+
stream: string;
|
|
5
|
+
state: "present";
|
|
6
|
+
config: Partial<StreamConfig>;
|
|
7
|
+
} | {
|
|
8
|
+
stream: string;
|
|
9
|
+
state: "not-found" | "permission-denied" | "target-mismatch" | "observation-failed";
|
|
10
|
+
};
|
|
11
|
+
export interface StreamSchemaFieldDifference {
|
|
12
|
+
field: string;
|
|
13
|
+
observedPresent: boolean;
|
|
14
|
+
expected: unknown;
|
|
15
|
+
observed: unknown;
|
|
16
|
+
}
|
|
17
|
+
export interface StreamSchemaRow {
|
|
18
|
+
stream: string;
|
|
19
|
+
state: "declared-fields-match" | "incompatible-or-drifted" | "missing-requires-privileged-observation" | "permission-denied" | "target-mismatch" | "observation-failed" | "not-observed";
|
|
20
|
+
differences: StreamSchemaFieldDifference[];
|
|
21
|
+
comparedFields: string[];
|
|
22
|
+
/** Server defaults and undeclared fields were not normalized or silently accepted as canonical. */
|
|
23
|
+
uninspectedFields: string[];
|
|
24
|
+
}
|
|
25
|
+
/** Pure, conservative diff of the directly declared native stream fields. No broker read/write,
|
|
26
|
+
* absent-store proof, migration allowlist or full-space canonicality is manufactured here.
|
|
27
|
+
* Subject ordering is irrelevant; a different literal subject set remains a difference. */
|
|
28
|
+
export declare function diffDeclaredStreamConfigs(expected: ReadonlyArray<Partial<StreamConfig> & {
|
|
29
|
+
name: string;
|
|
30
|
+
}>, observations: readonly StreamSchemaObservation[]): StreamSchemaRow[];
|
|
31
|
+
//# sourceMappingURL=stream-schema-diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-schema-diff.d.ts","sourceRoot":"","sources":["../src/stream-schema-diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,mGAAmG;AACnG,MAAM,MAAM,uBAAuB,GAC/B;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;CAAE,GACnE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,WAAW,GAAG,mBAAmB,GAAG,iBAAiB,GAAG,oBAAoB,CAAA;CAAE,CAAC;AAE5G,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,uBAAuB,GAAG,yBAAyB,GAAG,yCAAyC,GAAG,mBAAmB,GAAG,iBAAiB,GAAG,oBAAoB,GAAG,cAAc,CAAC;IACzL,WAAW,EAAE,2BAA2B,EAAE,CAAC;IAC3C,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,mGAAmG;IACnG,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;4FAE4F;AAC5F,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,YAAY,EAAE,SAAS,uBAAuB,EAAE,GAAG,eAAe,EAAE,CA8BhL"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { canonicalJson } from "./canonical.js";
|
|
2
|
+
/** Pure, conservative diff of the directly declared native stream fields. No broker read/write,
|
|
3
|
+
* absent-store proof, migration allowlist or full-space canonicality is manufactured here.
|
|
4
|
+
* Subject ordering is irrelevant; a different literal subject set remains a difference. */
|
|
5
|
+
export function diffDeclaredStreamConfigs(expected, observations) {
|
|
6
|
+
const names = new Set(expected.map((definition) => definition.name));
|
|
7
|
+
const found = new Map();
|
|
8
|
+
for (const observation of observations) {
|
|
9
|
+
if (!names.has(observation.stream) || found.has(observation.stream))
|
|
10
|
+
throw new Error("stream schema diff requires unique observations of the selected stream set; no foreign or duplicate observation was adopted");
|
|
11
|
+
found.set(observation.stream, observation);
|
|
12
|
+
}
|
|
13
|
+
const comparable = (field, value) => {
|
|
14
|
+
if (field === "subjects") {
|
|
15
|
+
if (!Array.isArray(value) || value.some((subject) => typeof subject !== "string"))
|
|
16
|
+
throw new Error();
|
|
17
|
+
return canonicalJson([...new Set(value)].sort());
|
|
18
|
+
}
|
|
19
|
+
return canonicalJson(value);
|
|
20
|
+
};
|
|
21
|
+
return expected.map((definition) => {
|
|
22
|
+
const observation = found.get(definition.name), fields = Object.keys(definition).sort();
|
|
23
|
+
const base = { stream: definition.name, differences: [], comparedFields: [], uninspectedFields: [] };
|
|
24
|
+
if (!observation)
|
|
25
|
+
return { ...base, state: "not-observed" };
|
|
26
|
+
if (observation.state !== "present")
|
|
27
|
+
return { ...base, state: observation.state === "not-found" ? "missing-requires-privileged-observation" : observation.state };
|
|
28
|
+
if (observation.config.name !== definition.name)
|
|
29
|
+
return { ...base, state: "target-mismatch" };
|
|
30
|
+
const current = observation.config, desired = definition;
|
|
31
|
+
const differences = [];
|
|
32
|
+
try {
|
|
33
|
+
for (const field of fields) {
|
|
34
|
+
const present = Object.hasOwn(current, field);
|
|
35
|
+
if (!present || comparable(field, current[field]) !== comparable(field, desired[field]))
|
|
36
|
+
differences.push({ field, observedPresent: present, expected: desired[field], observed: present ? current[field] : null });
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return { ...base, state: "observation-failed" };
|
|
41
|
+
}
|
|
42
|
+
return { stream: definition.name, state: differences.length ? "incompatible-or-drifted" : "declared-fields-match", differences, comparedFields: fields, uninspectedFields: Object.keys(current).filter((field) => !fields.includes(field)).sort() };
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=stream-schema-diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-schema-diff.js","sourceRoot":"","sources":["../src/stream-schema-diff.ts"],"names":[],"mappings":"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"}
|
package/dist/streams.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { StorageType, type ConsumerConfig, type JetStreamClient, type JetStreamManager } from "@nats-io/jetstream";
|
|
1
|
+
import { StorageType, type ConsumerConfig, type JetStreamClient, type JetStreamManager, type StreamConfig } from "@nats-io/jetstream";
|
|
2
2
|
import { type NatsConnection } from "@nats-io/transport-node";
|
|
3
3
|
/** #1356: the presence bucket is memory-backed. Its records are pure liveness that every endpoint
|
|
4
4
|
* rewrites every heartbeat and republishes after a broker restart, so durability buys nothing, while
|
|
@@ -64,6 +64,12 @@ export declare const MANAGER_LEASE_ATTEMPT_MS = 2000;
|
|
|
64
64
|
* far above any realistic readership while keeping the bucket from growing unbounded. A deliberate cap,
|
|
65
65
|
* not a guess at scale — the design is cap-safe by construction (per-agent, store-patterns-not-expanded). */
|
|
66
66
|
export declare const MEMBERSHIP_MAX_BYTES: number;
|
|
67
|
+
/** The `max_bytes` a per-space artifact Object Store carried before the reservation was removed:
|
|
68
|
+
* 4 GiB, the stock value every store created by that code holds. Kept for ONE purpose —
|
|
69
|
+
* {@link ensureArtifactStore} recognizes it and reconciles it to `-1`, releasing the reservation.
|
|
70
|
+
* Schema inspection shares the value to name that native migration gate. It is never a new
|
|
71
|
+
* quota, a generic widening rule or permission to run the migration. */
|
|
72
|
+
export declare const LEGACY_ARTIFACT_STORE_MAX_BYTES: number;
|
|
67
73
|
export interface ClearSpaceHistoryResult {
|
|
68
74
|
chat: number;
|
|
69
75
|
dm?: number;
|
|
@@ -105,6 +111,18 @@ export interface StandaloneAuth {
|
|
|
105
111
|
* client-chosen inbox NONCE goes out as the connect `name` — the callout scopes `_INBOX_<nonce>.>`
|
|
106
112
|
* from it (the client cannot know its nkey pre-connect). Open mode (no auth) connects bare. */
|
|
107
113
|
export declare function standaloneConnectOpts(auth: StandaloneAuth): Record<string, unknown>;
|
|
114
|
+
/** Native message-stream creation fields shared by bootstrap and schema planning. */
|
|
115
|
+
export declare function spaceMessageStreamConfigs(space: string): import("./backup-config.js").CanonicalBackupStreamConfig[];
|
|
116
|
+
/** Native durable registry-stream creation fields. The backup inventory stays independent. */
|
|
117
|
+
export declare function spaceRegistryStreamConfigs(space: string): import("./backup-config.js").CanonicalBackupStreamConfig[];
|
|
118
|
+
/** Native derived-membership creation inputs, not evidence of observed membership. */
|
|
119
|
+
export declare function membershipStoreDefinition(space: string): {
|
|
120
|
+
bucket: string;
|
|
121
|
+
createOptions: {
|
|
122
|
+
history: number;
|
|
123
|
+
max_bytes: number;
|
|
124
|
+
};
|
|
125
|
+
};
|
|
108
126
|
/**
|
|
109
127
|
* Create (idempotently) the five message streams for a space.
|
|
110
128
|
*
|
|
@@ -235,6 +253,14 @@ export declare function reconcileSpaceTtls(opts: {
|
|
|
235
253
|
/** Privileged creds for an authed mesh; omit on an open mesh (a bare connection has the rights). */
|
|
236
254
|
creds?: string;
|
|
237
255
|
}): Promise<TtlReconciled[]>;
|
|
256
|
+
/** Native object-store creation inputs. Binding, bounds and legacy-cap checks stay
|
|
257
|
+
* in {@link ensureArtifactStore}; SDK-derived fields are not inferred by schema planning. */
|
|
258
|
+
export declare function artifactStoreDefinition(space: string): {
|
|
259
|
+
bucket: string;
|
|
260
|
+
createOptions: {
|
|
261
|
+
max_bytes: number;
|
|
262
|
+
};
|
|
263
|
+
};
|
|
238
264
|
/**
|
|
239
265
|
* Create the space's artifact Object Store, or VERIFY an existing one — never silently adopt it.
|
|
240
266
|
*
|
|
@@ -268,6 +294,9 @@ export declare function reconcileSpaceTtls(opts: {
|
|
|
268
294
|
* decision and is still refused as drift: this path never silently widens a bound it did not set.
|
|
269
295
|
*/
|
|
270
296
|
export declare function ensureArtifactStore(nc: NatsConnection, space: string): Promise<void>;
|
|
297
|
+
/** Pure native artifact-store invariant checks. The legacy-cap update and broker readback
|
|
298
|
+
* remain in {@link ensureArtifactStore}; this function never widens a bound or writes. */
|
|
299
|
+
export declare function assertArtifactStoreConfig(config: StreamConfig, space: string): void;
|
|
271
300
|
export declare function setupSpaceStreams(opts: {
|
|
272
301
|
servers: string;
|
|
273
302
|
space: string;
|