@cotal-ai/core 0.11.6 → 0.13.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 +31 -7
- package/dist/acls.d.ts.map +1 -1
- package/dist/acls.js +105 -17
- package/dist/acls.js.map +1 -1
- package/dist/agent-file.js +1 -1
- package/dist/agent-file.js.map +1 -1
- package/dist/auth-provider.d.ts +90 -10
- package/dist/auth-provider.d.ts.map +1 -1
- package/dist/auth-provider.js.map +1 -1
- package/dist/backup-config.d.ts +55 -0
- package/dist/backup-config.d.ts.map +1 -0
- package/dist/backup-config.js +243 -0
- package/dist/backup-config.js.map +1 -0
- package/dist/backup.d.ts +86 -0
- package/dist/backup.d.ts.map +1 -0
- package/dist/backup.js +497 -0
- package/dist/backup.js.map +1 -0
- package/dist/broker-floor.d.ts +34 -0
- package/dist/broker-floor.d.ts.map +1 -0
- package/dist/broker-floor.js +39 -0
- package/dist/broker-floor.js.map +1 -0
- package/dist/canonical.d.ts +24 -0
- package/dist/canonical.d.ts.map +1 -0
- package/dist/canonical.js +159 -0
- package/dist/canonical.js.map +1 -0
- package/dist/channels.d.ts.map +1 -1
- package/dist/channels.js +8 -1
- package/dist/channels.js.map +1 -1
- package/dist/connector.d.ts +4 -0
- package/dist/connector.d.ts.map +1 -1
- package/dist/endpoint-action.d.ts +424 -0
- package/dist/endpoint-action.d.ts.map +1 -0
- package/dist/endpoint-action.js +910 -0
- package/dist/endpoint-action.js.map +1 -0
- package/dist/endpoint-binding.d.ts +344 -0
- package/dist/endpoint-binding.d.ts.map +1 -0
- package/dist/endpoint-binding.js +753 -0
- package/dist/endpoint-binding.js.map +1 -0
- package/dist/endpoint-checkpoint.d.ts +292 -0
- package/dist/endpoint-checkpoint.d.ts.map +1 -0
- package/dist/endpoint-checkpoint.js +818 -0
- package/dist/endpoint-checkpoint.js.map +1 -0
- package/dist/endpoint-cluster.d.ts +95 -0
- package/dist/endpoint-cluster.d.ts.map +1 -0
- package/dist/endpoint-cluster.js +194 -0
- package/dist/endpoint-cluster.js.map +1 -0
- package/dist/endpoint-contract-store.d.ts +90 -0
- package/dist/endpoint-contract-store.d.ts.map +1 -0
- package/dist/endpoint-contract-store.js +348 -0
- package/dist/endpoint-contract-store.js.map +1 -0
- package/dist/endpoint-envelope.d.ts +165 -0
- package/dist/endpoint-envelope.d.ts.map +1 -0
- package/dist/endpoint-envelope.js +346 -0
- package/dist/endpoint-envelope.js.map +1 -0
- package/dist/endpoint-grants.d.ts +123 -0
- package/dist/endpoint-grants.d.ts.map +1 -0
- package/dist/endpoint-grants.js +215 -0
- package/dist/endpoint-grants.js.map +1 -0
- package/dist/endpoint-guard.d.ts +222 -0
- package/dist/endpoint-guard.d.ts.map +1 -0
- package/dist/endpoint-guard.js +468 -0
- package/dist/endpoint-guard.js.map +1 -0
- package/dist/endpoint-handle.d.ts +176 -0
- package/dist/endpoint-handle.d.ts.map +1 -0
- package/dist/endpoint-handle.js +608 -0
- package/dist/endpoint-handle.js.map +1 -0
- package/dist/endpoint-journal.d.ts +225 -0
- package/dist/endpoint-journal.d.ts.map +1 -0
- package/dist/endpoint-journal.js +431 -0
- package/dist/endpoint-journal.js.map +1 -0
- package/dist/endpoint-receipt.d.ts +225 -0
- package/dist/endpoint-receipt.d.ts.map +1 -0
- package/dist/endpoint-receipt.js +417 -0
- package/dist/endpoint-receipt.js.map +1 -0
- package/dist/endpoint-records.d.ts +243 -0
- package/dist/endpoint-records.d.ts.map +1 -0
- package/dist/endpoint-records.js +591 -0
- package/dist/endpoint-records.js.map +1 -0
- package/dist/endpoint-serve.d.ts +176 -0
- package/dist/endpoint-serve.d.ts.map +1 -0
- package/dist/endpoint-serve.js +446 -0
- package/dist/endpoint-serve.js.map +1 -0
- package/dist/endpoint-service.d.ts +518 -0
- package/dist/endpoint-service.d.ts.map +1 -0
- package/dist/endpoint-service.js +973 -0
- package/dist/endpoint-service.js.map +1 -0
- package/dist/endpoint-session.d.ts +398 -0
- package/dist/endpoint-session.d.ts.map +1 -0
- package/dist/endpoint-session.js +834 -0
- package/dist/endpoint-session.js.map +1 -0
- package/dist/endpoint-signing.d.ts +105 -0
- package/dist/endpoint-signing.d.ts.map +1 -0
- package/dist/endpoint-signing.js +190 -0
- package/dist/endpoint-signing.js.map +1 -0
- package/dist/endpoint-subjects.d.ts +222 -0
- package/dist/endpoint-subjects.d.ts.map +1 -0
- package/dist/endpoint-subjects.js +381 -0
- package/dist/endpoint-subjects.js.map +1 -0
- package/dist/endpoint-supervisor.d.ts +19 -0
- package/dist/endpoint-supervisor.d.ts.map +1 -0
- package/dist/endpoint-supervisor.js +12 -0
- package/dist/endpoint-supervisor.js.map +1 -0
- package/dist/endpoint-traits.d.ts +225 -0
- package/dist/endpoint-traits.d.ts.map +1 -0
- package/dist/endpoint-traits.js +469 -0
- package/dist/endpoint-traits.js.map +1 -0
- package/dist/endpoint-verbs.d.ts +277 -0
- package/dist/endpoint-verbs.d.ts.map +1 -0
- package/dist/endpoint-verbs.js +576 -0
- package/dist/endpoint-verbs.js.map +1 -0
- package/dist/endpoint-virtual.d.ts +308 -0
- package/dist/endpoint-virtual.d.ts.map +1 -0
- package/dist/endpoint-virtual.js +440 -0
- package/dist/endpoint-virtual.js.map +1 -0
- package/dist/endpoint-work.d.ts +304 -0
- package/dist/endpoint-work.d.ts.map +1 -0
- package/dist/endpoint-work.js +728 -0
- package/dist/endpoint-work.js.map +1 -0
- package/dist/endpoint.d.ts +66 -22
- package/dist/endpoint.d.ts.map +1 -1
- package/dist/endpoint.js +289 -89
- package/dist/endpoint.js.map +1 -1
- package/dist/evict.d.ts +95 -32
- package/dist/evict.d.ts.map +1 -1
- package/dist/evict.js +193 -3
- package/dist/evict.js.map +1 -1
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -1
- package/dist/lease.d.ts +4 -0
- package/dist/lease.d.ts.map +1 -1
- package/dist/lease.js.map +1 -1
- package/dist/members.d.ts +4 -4
- package/dist/members.d.ts.map +1 -1
- package/dist/members.js +12 -12
- package/dist/members.js.map +1 -1
- package/dist/provision.d.ts +78 -20
- package/dist/provision.d.ts.map +1 -1
- package/dist/provision.js +214 -37
- package/dist/provision.js.map +1 -1
- package/dist/runtime.d.ts +3 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/safe-pattern.d.ts +33 -0
- package/dist/safe-pattern.d.ts.map +1 -0
- package/dist/safe-pattern.js +486 -0
- package/dist/safe-pattern.js.map +1 -0
- package/dist/schema-profile.d.ts +93 -0
- package/dist/schema-profile.d.ts.map +1 -0
- package/dist/schema-profile.js +284 -0
- package/dist/schema-profile.js.map +1 -0
- package/dist/secret-store.d.ts +46 -0
- package/dist/secret-store.d.ts.map +1 -0
- package/dist/secret-store.js +2 -0
- package/dist/secret-store.js.map +1 -0
- package/dist/space-auth.d.ts +9 -0
- package/dist/space-auth.d.ts.map +1 -0
- package/dist/space-auth.js +126 -0
- package/dist/space-auth.js.map +1 -0
- package/dist/streams.d.ts +14 -10
- package/dist/streams.d.ts.map +1 -1
- package/dist/streams.js +47 -76
- package/dist/streams.js.map +1 -1
- package/dist/subjects.d.ts +100 -40
- package/dist/subjects.d.ts.map +1 -1
- package/dist/subjects.js +136 -60
- package/dist/subjects.js.map +1 -1
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -2
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import { DiscardPolicy, RetentionPolicy, StorageType, StoreCompression, } from "@nats-io/jetstream";
|
|
2
|
+
import { nanos } from "@nats-io/transport-node";
|
|
3
|
+
import { aclBucket, channelBucket, chatStream, deliveryBucket, dlvStream, dmStream, inboxStream, managerBucket, membersBucket, membershipBucket, presenceBucket, spacePrefix, taskStream, } from "./subjects.js";
|
|
4
|
+
/** The complete Cotal stream inventory at a stable backup cut. Only the eight `backedUp` streams
|
|
5
|
+
* enter a full artifact; the four excluded streams are transient, derived, or leases. */
|
|
6
|
+
export function spaceBackupInventory(space) {
|
|
7
|
+
const registry = `KV_${channelBucket(space)}`;
|
|
8
|
+
const backedUp = [
|
|
9
|
+
{ name: registry, class: "registry" },
|
|
10
|
+
{ name: chatStream(space), class: "messages" },
|
|
11
|
+
{ name: dmStream(space), class: "messages" },
|
|
12
|
+
{ name: taskStream(space), class: "messages" },
|
|
13
|
+
{ name: inboxStream(space), class: "messages" },
|
|
14
|
+
{ name: dlvStream(space), class: "messages" },
|
|
15
|
+
{ name: `KV_${aclBucket(space)}`, class: "authorization" },
|
|
16
|
+
{ name: `KV_${membersBucket(space)}`, class: "authorization" },
|
|
17
|
+
];
|
|
18
|
+
const excluded = [
|
|
19
|
+
{ name: `KV_${presenceBucket(space)}`, class: "transient" },
|
|
20
|
+
{ name: `KV_${membershipBucket(space)}`, class: "derived" },
|
|
21
|
+
{ name: `KV_${deliveryBucket(space)}`, class: "lease" },
|
|
22
|
+
{ name: `KV_${managerBucket(space)}`, class: "lease" },
|
|
23
|
+
];
|
|
24
|
+
return {
|
|
25
|
+
backedUp,
|
|
26
|
+
excluded,
|
|
27
|
+
full: backedUp.map((s) => s.name),
|
|
28
|
+
registry: [registry],
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/** Reject a missing, foreign, or additional stream before selecting artifact components. */
|
|
32
|
+
export function validateSpaceBackupInventory(space, actualNames) {
|
|
33
|
+
const inventory = spaceBackupInventory(space);
|
|
34
|
+
const expected = [...inventory.full, ...inventory.excluded.map((s) => s.name)].sort();
|
|
35
|
+
const actual = [...actualNames].sort();
|
|
36
|
+
if (new Set(actual).size !== actual.length)
|
|
37
|
+
throw new Error("space backup inventory contains duplicate stream names");
|
|
38
|
+
if (JSON.stringify(actual) !== JSON.stringify(expected)) {
|
|
39
|
+
const expectedSet = new Set(expected);
|
|
40
|
+
const actualSet = new Set(actual);
|
|
41
|
+
const missing = expected.filter((name) => !actualSet.has(name));
|
|
42
|
+
const unexpected = actual.filter((name) => !expectedSet.has(name));
|
|
43
|
+
throw new Error(`space backup inventory mismatch: missing [${missing.join(", ")}], unexpected [${unexpected.join(", ")}]`);
|
|
44
|
+
}
|
|
45
|
+
return inventory;
|
|
46
|
+
}
|
|
47
|
+
const DEFAULT_DUPLICATE_WINDOW = nanos(2 * 60 * 1000);
|
|
48
|
+
export const BACKUP_MAX_MSGS_PER_SUBJECT = 1000;
|
|
49
|
+
export const BACKUP_PLANE3_DEDUP_WINDOW_MS = 2 * 60 * 60 * 1000;
|
|
50
|
+
const PLANE3_DUPLICATE_WINDOW = nanos(BACKUP_PLANE3_DEDUP_WINDOW_MS);
|
|
51
|
+
function baseConfig(name, subjects) {
|
|
52
|
+
return {
|
|
53
|
+
name,
|
|
54
|
+
subjects,
|
|
55
|
+
retention: RetentionPolicy.Limits,
|
|
56
|
+
storage: StorageType.File,
|
|
57
|
+
max_consumers: -1,
|
|
58
|
+
max_msgs: -1,
|
|
59
|
+
max_bytes: -1,
|
|
60
|
+
max_age: 0,
|
|
61
|
+
max_msgs_per_subject: -1,
|
|
62
|
+
max_msg_size: -1,
|
|
63
|
+
discard: DiscardPolicy.Old,
|
|
64
|
+
num_replicas: 1,
|
|
65
|
+
no_ack: false,
|
|
66
|
+
duplicate_window: DEFAULT_DUPLICATE_WINDOW,
|
|
67
|
+
compression: StoreCompression.None,
|
|
68
|
+
allow_direct: false,
|
|
69
|
+
mirror_direct: false,
|
|
70
|
+
discard_new_per_subject: false,
|
|
71
|
+
allow_rollup_hdrs: false,
|
|
72
|
+
deny_delete: false,
|
|
73
|
+
deny_purge: false,
|
|
74
|
+
sealed: false,
|
|
75
|
+
consumer_limits: {},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/** Current canonical config for one of the eight backed-up streams. Restore callers must use this
|
|
79
|
+
* config, not the config embedded in untrusted snapshot bytes. */
|
|
80
|
+
export function canonicalBackupStreamConfig(space, stream) {
|
|
81
|
+
const p = spacePrefix(space);
|
|
82
|
+
if (stream === chatStream(space)) {
|
|
83
|
+
return {
|
|
84
|
+
...baseConfig(stream, [`${p}.chat.>`]),
|
|
85
|
+
max_msgs_per_subject: BACKUP_MAX_MSGS_PER_SUBJECT,
|
|
86
|
+
allow_direct: true,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
if (stream === dmStream(space))
|
|
90
|
+
return baseConfig(stream, [`${p}.inst.>`]);
|
|
91
|
+
if (stream === taskStream(space)) {
|
|
92
|
+
return { ...baseConfig(stream, [`${p}.svc.>`]), retention: RetentionPolicy.Workqueue };
|
|
93
|
+
}
|
|
94
|
+
if (stream === inboxStream(space)) {
|
|
95
|
+
return {
|
|
96
|
+
...baseConfig(stream, [`${p}.dinbox.>`]),
|
|
97
|
+
max_msgs_per_subject: BACKUP_MAX_MSGS_PER_SUBJECT,
|
|
98
|
+
duplicate_window: PLANE3_DUPLICATE_WINDOW,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
if (stream === dlvStream(space)) {
|
|
102
|
+
return {
|
|
103
|
+
...baseConfig(stream, [`${p}.dlv.>`]),
|
|
104
|
+
max_msgs_per_subject: BACKUP_MAX_MSGS_PER_SUBJECT,
|
|
105
|
+
duplicate_window: PLANE3_DUPLICATE_WINDOW,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
for (const bucket of [channelBucket(space), aclBucket(space), membersBucket(space)]) {
|
|
109
|
+
if (stream === `KV_${bucket}`) {
|
|
110
|
+
return {
|
|
111
|
+
...baseConfig(stream, [`$KV.${bucket}.>`]),
|
|
112
|
+
max_msgs_per_subject: 1,
|
|
113
|
+
discard: DiscardPolicy.New,
|
|
114
|
+
allow_direct: true,
|
|
115
|
+
allow_rollup_hdrs: true,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
throw new Error(`stream ${JSON.stringify(stream)} is not a backed-up stream for space ${JSON.stringify(space)}`);
|
|
120
|
+
}
|
|
121
|
+
const INERT_CONFIG_DEFAULTS = {
|
|
122
|
+
description: "",
|
|
123
|
+
template_owner: "",
|
|
124
|
+
first_seq: 0,
|
|
125
|
+
placement: null,
|
|
126
|
+
mirror: null,
|
|
127
|
+
sources: [],
|
|
128
|
+
subject_transform: null,
|
|
129
|
+
republish: null,
|
|
130
|
+
metadata: {},
|
|
131
|
+
allow_msg_ttl: false,
|
|
132
|
+
subject_delete_marker_ttl: 0,
|
|
133
|
+
allow_msg_schedules: false,
|
|
134
|
+
allow_atomic: false,
|
|
135
|
+
allow_batched: false,
|
|
136
|
+
allow_msg_counter: false,
|
|
137
|
+
persist_mode: "",
|
|
138
|
+
};
|
|
139
|
+
function normalize(value) {
|
|
140
|
+
if (Array.isArray(value))
|
|
141
|
+
return value.map(normalize);
|
|
142
|
+
if (value && typeof value === "object") {
|
|
143
|
+
return Object.fromEntries(Object.entries(value)
|
|
144
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
145
|
+
.map(([key, item]) => [key, normalize(item)]));
|
|
146
|
+
}
|
|
147
|
+
return value;
|
|
148
|
+
}
|
|
149
|
+
/** Validate every active and security-sensitive stream setting, including explicit rejection of
|
|
150
|
+
* mirrors, sources, transforms, republish, placement, sealing, metadata, and future active features. */
|
|
151
|
+
export function validateCanonicalBackupStreamConfig(space, stream, actual) {
|
|
152
|
+
const expected = canonicalBackupStreamConfig(space, stream);
|
|
153
|
+
const known = new Set([...Object.keys(expected), ...Object.keys(INERT_CONFIG_DEFAULTS)]);
|
|
154
|
+
const unknown = Object.keys(actual).filter((key) => !known.has(key));
|
|
155
|
+
if (unknown.length)
|
|
156
|
+
throw new Error(`${stream} config has unsupported fields: ${unknown.sort().join(", ")}`);
|
|
157
|
+
const comparable = {};
|
|
158
|
+
for (const [key, expectedValue] of Object.entries(expected))
|
|
159
|
+
comparable[key] = actual[key] === undefined ? expectedValue : actual[key];
|
|
160
|
+
for (const [key, expectedValue] of Object.entries(INERT_CONFIG_DEFAULTS)) {
|
|
161
|
+
const actualValue = actual[key];
|
|
162
|
+
comparable[key] = actualValue === undefined || actualValue === null ? expectedValue : actualValue;
|
|
163
|
+
}
|
|
164
|
+
// Newer servers annotate a request-level floor in their reserved metadata namespace. It is
|
|
165
|
+
// server-owned protocol bookkeeping, not caller configuration; no other metadata is canonical.
|
|
166
|
+
if (comparable.metadata &&
|
|
167
|
+
typeof comparable.metadata === "object" &&
|
|
168
|
+
!Array.isArray(comparable.metadata) &&
|
|
169
|
+
Object.entries(comparable.metadata)
|
|
170
|
+
.every(([key, value]) => key.startsWith("_nats.") && typeof value === "string"))
|
|
171
|
+
comparable.metadata = {};
|
|
172
|
+
const target = { ...expected, ...INERT_CONFIG_DEFAULTS };
|
|
173
|
+
if (JSON.stringify(normalize(comparable)) !== JSON.stringify(normalize(target))) {
|
|
174
|
+
const drift = Object.keys(target).filter((key) => JSON.stringify(normalize(comparable[key])) !== JSON.stringify(normalize(target[key])));
|
|
175
|
+
throw new Error(`${stream} config is not canonical: ${drift.map((key) => `${key}=${JSON.stringify(comparable[key])}`).join(", ")}`);
|
|
176
|
+
}
|
|
177
|
+
return expected;
|
|
178
|
+
}
|
|
179
|
+
export function validateBackupStreamState(state) {
|
|
180
|
+
const allowed = new Set([
|
|
181
|
+
"messages", "bytes", "first_seq", "last_seq", "consumer_count", "first_ts", "last_ts",
|
|
182
|
+
"deleted", "num_deleted", "num_subjects", "subjects", "lost",
|
|
183
|
+
]);
|
|
184
|
+
const unknown = Object.keys(state).filter((key) => !allowed.has(key));
|
|
185
|
+
if (unknown.length)
|
|
186
|
+
throw new Error(`stream state has unsupported fields: ${unknown.sort().join(", ")}`);
|
|
187
|
+
for (const key of ["messages", "bytes", "first_seq", "last_seq", "consumer_count"]) {
|
|
188
|
+
const value = state[key];
|
|
189
|
+
if (!Number.isSafeInteger(value) || value < 0)
|
|
190
|
+
throw new Error(`stream state ${key} must be a non-negative safe integer`);
|
|
191
|
+
}
|
|
192
|
+
const messages = state.messages;
|
|
193
|
+
const firstSequence = state.first_seq;
|
|
194
|
+
const lastSequence = state.last_seq;
|
|
195
|
+
if (messages === 0) {
|
|
196
|
+
const initial = firstSequence === 0 && lastSequence === 0;
|
|
197
|
+
const exhausted = lastSequence < Number.MAX_SAFE_INTEGER && firstSequence === lastSequence + 1;
|
|
198
|
+
if (!initial && !exhausted)
|
|
199
|
+
throw new Error("empty stream state must be initial or exhausted at last_seq + 1");
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
if (firstSequence < 1 || firstSequence > lastSequence)
|
|
203
|
+
throw new Error("non-empty stream state has an invalid first/last sequence window");
|
|
204
|
+
if (messages > lastSequence - firstSequence + 1)
|
|
205
|
+
throw new Error("stream state messages exceed its first/last sequence window");
|
|
206
|
+
}
|
|
207
|
+
for (const seq of state.deleted ?? [])
|
|
208
|
+
if (!Number.isSafeInteger(seq) || seq < 1)
|
|
209
|
+
throw new Error("stream state deleted sequences must be positive safe integers");
|
|
210
|
+
for (const key of ["num_deleted", "num_subjects"]) {
|
|
211
|
+
const value = state[key];
|
|
212
|
+
if (value !== undefined && (!Number.isSafeInteger(value) || value < 0))
|
|
213
|
+
throw new Error(`stream state ${key} must be a non-negative safe integer`);
|
|
214
|
+
}
|
|
215
|
+
for (const key of ["first_ts", "last_ts"]) {
|
|
216
|
+
const value = state[key];
|
|
217
|
+
if (value !== undefined && (typeof value !== "string" || Number.isNaN(Date.parse(value))))
|
|
218
|
+
throw new Error(`stream state ${key} must be an ISO timestamp`);
|
|
219
|
+
}
|
|
220
|
+
if (state.subjects !== undefined) {
|
|
221
|
+
if (!state.subjects || typeof state.subjects !== "object" || Array.isArray(state.subjects))
|
|
222
|
+
throw new Error("stream state subjects must be an object");
|
|
223
|
+
for (const count of Object.values(state.subjects))
|
|
224
|
+
if (!Number.isSafeInteger(count) || count < 0)
|
|
225
|
+
throw new Error("stream state subject counts must be non-negative safe integers");
|
|
226
|
+
}
|
|
227
|
+
if (state.lost !== undefined) {
|
|
228
|
+
if (!state.lost || typeof state.lost !== "object" || Array.isArray(state.lost))
|
|
229
|
+
throw new Error("stream state lost must be an object");
|
|
230
|
+
const lost = state.lost;
|
|
231
|
+
const lostUnknown = Object.keys(lost).filter((key) => key !== "msgs" && key !== "bytes");
|
|
232
|
+
if (lostUnknown.length)
|
|
233
|
+
throw new Error(`stream state lost has unsupported fields: ${lostUnknown.join(", ")}`);
|
|
234
|
+
if (lost.bytes !== undefined && (!Number.isSafeInteger(lost.bytes) || lost.bytes < 0))
|
|
235
|
+
throw new Error("stream state lost.bytes must be a non-negative safe integer");
|
|
236
|
+
if (lost.msgs !== undefined && lost.msgs !== null) {
|
|
237
|
+
if (!Array.isArray(lost.msgs) || lost.msgs.some((seq) => !Number.isSafeInteger(seq) || seq < 1))
|
|
238
|
+
throw new Error("stream state lost.msgs must contain positive safe integers");
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return state;
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=backup-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup-config.js","sourceRoot":"","sources":["../src/backup-config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,eAAe,EACf,WAAW,EACX,gBAAgB,GAEjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EACL,SAAS,EACT,aAAa,EACb,UAAU,EACV,cAAc,EACd,SAAS,EACT,QAAQ,EACR,WAAW,EACX,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,UAAU,GACX,MAAM,eAAe,CAAC;AAuBvB;yFACyF;AACzF,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAwB;QACpC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE;QACrC,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE;QAC9C,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE;QAC5C,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE;QAC9C,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE;QAC/C,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE;QAC7C,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE;QAC1D,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE;KAC/D,CAAC;IACF,MAAM,QAAQ,GAAgC;QAC5C,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;QAC3D,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;QAC3D,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;QACvD,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;KACvD,CAAC;IACF,OAAO;QACL,QAAQ;QACR,QAAQ;QACR,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACjC,QAAQ,EAAE,CAAC,QAAQ,CAAC;KACrB,CAAC;AACJ,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,4BAA4B,CAAC,KAAa,EAAE,WAA8B;IACxF,MAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACtF,MAAM,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;IACvC,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM;QACxC,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACnE,MAAM,IAAI,KAAK,CACb,6CAA6C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC1G,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AA8CD,MAAM,wBAAwB,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACtD,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAC;AAChD,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAChE,MAAM,uBAAuB,GAAG,KAAK,CAAC,6BAA6B,CAAC,CAAC;AAErE,SAAS,UAAU,CAAC,IAAY,EAAE,QAAkB;IAClD,OAAO;QACL,IAAI;QACJ,QAAQ;QACR,SAAS,EAAE,eAAe,CAAC,MAAM;QACjC,OAAO,EAAE,WAAW,CAAC,IAAI;QACzB,aAAa,EAAE,CAAC,CAAC;QACjB,QAAQ,EAAE,CAAC,CAAC;QACZ,SAAS,EAAE,CAAC,CAAC;QACb,OAAO,EAAE,CAAC;QACV,oBAAoB,EAAE,CAAC,CAAC;QACxB,YAAY,EAAE,CAAC,CAAC;QAChB,OAAO,EAAE,aAAa,CAAC,GAAG;QAC1B,YAAY,EAAE,CAAC;QACf,MAAM,EAAE,KAAK;QACb,gBAAgB,EAAE,wBAAwB;QAC1C,WAAW,EAAE,gBAAgB,CAAC,IAAI;QAClC,YAAY,EAAE,KAAK;QACnB,aAAa,EAAE,KAAK;QACpB,uBAAuB,EAAE,KAAK;QAC9B,iBAAiB,EAAE,KAAK;QACxB,WAAW,EAAE,KAAK;QAClB,UAAU,EAAE,KAAK;QACjB,MAAM,EAAE,KAAK;QACb,eAAe,EAAE,EAAE;KACpB,CAAC;AACJ,CAAC;AAED;kEACkE;AAClE,MAAM,UAAU,2BAA2B,CAAC,KAAa,EAAE,MAAc;IACvE,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,MAAM,KAAK,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO;YACL,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACtC,oBAAoB,EAAE,2BAA2B;YACjD,YAAY,EAAE,IAAI;SACnB,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,KAAK,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3E,IAAI,MAAM,KAAK,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,eAAe,CAAC,SAAS,EAAE,CAAC;IACzF,CAAC;IACD,IAAI,MAAM,KAAK,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO;YACL,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACxC,oBAAoB,EAAE,2BAA2B;YACjD,gBAAgB,EAAE,uBAAuB;SAC1C,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO;YACL,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACrC,oBAAoB,EAAE,2BAA2B;YACjD,gBAAgB,EAAE,uBAAuB;SAC1C,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACpF,IAAI,MAAM,KAAK,MAAM,MAAM,EAAE,EAAE,CAAC;YAC9B,OAAO;gBACL,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,OAAO,MAAM,IAAI,CAAC,CAAC;gBAC1C,oBAAoB,EAAE,CAAC;gBACvB,OAAO,EAAE,aAAa,CAAC,GAAG;gBAC1B,YAAY,EAAE,IAAI;gBAClB,iBAAiB,EAAE,IAAI;aACxB,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,wCAAwC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACnH,CAAC;AAED,MAAM,qBAAqB,GAA4B;IACrD,WAAW,EAAE,EAAE;IACf,cAAc,EAAE,EAAE;IAClB,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,EAAE;IACX,iBAAiB,EAAE,IAAI;IACvB,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,EAAE;IACZ,aAAa,EAAE,KAAK;IACpB,yBAAyB,EAAE,CAAC;IAC5B,mBAAmB,EAAE,KAAK;IAC1B,YAAY,EAAE,KAAK;IACnB,aAAa,EAAE,KAAK;IACpB,iBAAiB,EAAE,KAAK;IACxB,YAAY,EAAE,EAAE;CACjB,CAAC;AAEF,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC;aAC7C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;aACtC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAChD,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;wGACwG;AACxG,MAAM,UAAU,mCAAmC,CACjD,KAAa,EACb,MAAc,EACd,MAAyC;IAEzC,MAAM,QAAQ,GAAG,2BAA2B,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACzF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACrE,IAAI,OAAO,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,mCAAmC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE7G,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;QACzD,UAAU,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5E,KAAK,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACzE,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAChC,UAAU,CAAC,GAAG,CAAC,GAAG,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC;IACpG,CAAC;IACD,2FAA2F;IAC3F,+FAA+F;IAC/F,IACE,UAAU,CAAC,QAAQ;QACnB,OAAO,UAAU,CAAC,QAAQ,KAAK,QAAQ;QACvC,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,QAAmC,CAAC;aAC3D,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;QACjF,UAAU,CAAC,QAAQ,GAAG,EAAE,CAAC;IAC3B,MAAM,MAAM,GAA4B,EAAE,GAAG,QAAQ,EAAE,GAAG,qBAAqB,EAAE,CAAC;IAClF,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAChF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CACtC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAC/F,CAAC;QACF,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,6BAA6B,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtI,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAwC;IAChF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC;QACtB,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,SAAS;QACrF,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM;KAC7D,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACtE,IAAI,OAAO,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzG,KAAK,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,CAAU,EAAE,CAAC;QAC5F,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAK,KAAgB,GAAG,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,sCAAsC,CAAC,CAAC;IAC/E,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAkB,CAAC;IAC1C,MAAM,aAAa,GAAG,KAAK,CAAC,SAAmB,CAAC;IAChD,MAAM,YAAY,GAAG,KAAK,CAAC,QAAkB,CAAC;IAC9C,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,aAAa,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,YAAY,GAAG,MAAM,CAAC,gBAAgB,IAAI,aAAa,KAAK,YAAY,GAAG,CAAC,CAAC;QAC/F,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS;YACxB,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACvF,CAAC;SAAM,CAAC;QACN,IAAI,aAAa,GAAG,CAAC,IAAI,aAAa,GAAG,YAAY;YACnD,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;QACtF,IAAI,QAAQ,GAAG,YAAY,GAAG,aAAa,GAAG,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACnF,CAAC;IACD,KAAK,MAAM,GAAG,IAAK,KAAK,CAAC,OAAiC,IAAI,EAAE;QAC9D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAK,GAAc,GAAG,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACrF,KAAK,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,cAAc,CAAU,EAAE,CAAC;QAC3D,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAK,KAAgB,GAAG,CAAC,CAAC;YAChF,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,sCAAsC,CAAC,CAAC;IAC/E,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAU,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YACvF,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,2BAA2B,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;YACxF,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAmC,CAAC;YAC1E,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAK,KAAgB,GAAG,CAAC;gBACvD,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACxF,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,KAAK,CAAC,IAA+B,CAAC;QACnD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,OAAO,CAAC,CAAC;QACzF,IAAI,WAAW,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/G,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAK,IAAI,CAAC,KAAgB,GAAG,CAAC,CAAC;YAC/F,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;gBAC7F,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IACD,OAAO,KAAqC,CAAC;AAC/C,CAAC"}
|
package/dist/backup.d.ts
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { type ConsumerConfig, type ConsumerInfo } from "@nats-io/jetstream";
|
|
2
|
+
import { type NatsConnection } from "@nats-io/transport-node";
|
|
3
|
+
import { type BackupStreamState, type SpaceBackupSelection } from "./backup-config.js";
|
|
4
|
+
export declare class JetStreamBackupError extends Error {
|
|
5
|
+
readonly code?: number | undefined;
|
|
6
|
+
readonly errCode?: number | undefined;
|
|
7
|
+
constructor(message: string, code?: number | undefined, errCode?: number | undefined);
|
|
8
|
+
}
|
|
9
|
+
export interface StreamSnapshotMetadata {
|
|
10
|
+
config: Record<string, unknown>;
|
|
11
|
+
state: BackupStreamState;
|
|
12
|
+
}
|
|
13
|
+
export interface DownloadStreamSnapshotOptions {
|
|
14
|
+
deliverSubject: string;
|
|
15
|
+
onChunk(chunk: Uint8Array): void | Promise<void>;
|
|
16
|
+
timeoutMs?: number;
|
|
17
|
+
/** Per-chunk sink deadline. Must stay below the server's two-second snapshot flow timeout. */
|
|
18
|
+
sinkTimeoutMs?: number;
|
|
19
|
+
checkMessages?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/** Download a no-consumer native snapshot through one ordered, deadline-bounded sink. Each ackable
|
|
22
|
+
* binary chunk is ACKed only after its sink call succeeds. Completion requires a clean empty EOF
|
|
23
|
+
* after all accepted chunks. */
|
|
24
|
+
export declare function downloadStreamSnapshot(nc: NatsConnection, stream: string, opts: DownloadStreamSnapshotOptions): Promise<StreamSnapshotMetadata>;
|
|
25
|
+
export interface StreamRestoreSession {
|
|
26
|
+
stream: string;
|
|
27
|
+
deliverSubject: string;
|
|
28
|
+
}
|
|
29
|
+
/** Initiate restore with caller-supplied, current canonical config and separately validated state.
|
|
30
|
+
* Snapshot-embedded config is never trusted or sent to the target broker. */
|
|
31
|
+
export declare function initiateStreamRestore(nc: NatsConnection, space: string, stream: string, config: Readonly<Record<string, unknown>>, state: Readonly<Record<string, unknown>>, timeoutMs?: number): Promise<StreamRestoreSession>;
|
|
32
|
+
/** Upload one non-empty binary restore chunk and await the server's storage ACK. */
|
|
33
|
+
export declare function uploadStreamRestoreChunk(nc: NatsConnection, session: StreamRestoreSession, chunk: Uint8Array, timeoutMs?: number): Promise<void>;
|
|
34
|
+
export interface StreamRestoreResult {
|
|
35
|
+
config: Record<string, unknown>;
|
|
36
|
+
state: BackupStreamState;
|
|
37
|
+
}
|
|
38
|
+
/** Send the empty EOF request and require the final stream-create response. */
|
|
39
|
+
export declare function finalizeStreamRestore(nc: NatsConnection, session: StreamRestoreSession, timeoutMs?: number): Promise<StreamRestoreResult>;
|
|
40
|
+
export interface PersistentConsumerCheckpoint {
|
|
41
|
+
stream: string;
|
|
42
|
+
name: string;
|
|
43
|
+
ackFloorStreamSequence: number;
|
|
44
|
+
creationLowerBound: number;
|
|
45
|
+
streamState: Pick<BackupStreamState, "messages" | "first_seq" | "last_seq">;
|
|
46
|
+
}
|
|
47
|
+
/** Validate one recognized Cotal pull durable. Limits-retention consumers accept the checkpoint
|
|
48
|
+
* migration shape; TASK remains canonical WorkQueue DeliverAll. */
|
|
49
|
+
export declare function validatePersistentConsumer(space: string, stream: string, info: ConsumerInfo): void;
|
|
50
|
+
/** Validate the complete consumer inventory for all eight streams and extract conservative checkpoints. */
|
|
51
|
+
export declare function validatePersistentConsumerInventory(space: string, consumersByStream: Readonly<Record<string, readonly ConsumerInfo[]>>, statesByStream: Readonly<Record<string, BackupStreamState>>): PersistentConsumerCheckpoint[];
|
|
52
|
+
/** Recreate a validated pull durable. Limits-retention consumers start after the contiguous ACK
|
|
53
|
+
* floor and original lower bound; TASK uses WorkQueue DeliverAll because ACKed entries left the stream. */
|
|
54
|
+
export declare function consumerConfigFromCheckpoint(space: string, checkpoint: PersistentConsumerCheckpoint): Partial<ConsumerConfig>;
|
|
55
|
+
/** Recreate one validated checkpoint through the NATS 2.10 extended create API, whose subject pins
|
|
56
|
+
* stream, durable name, and its canonical single filter. */
|
|
57
|
+
export declare function recreateConsumerCheckpoint(nc: NatsConnection, space: string, checkpoint: PersistentConsumerCheckpoint, timeoutMs?: number): Promise<ConsumerInfo>;
|
|
58
|
+
export type BackupPermissionScope = {
|
|
59
|
+
operation: "snapshot";
|
|
60
|
+
stream: string;
|
|
61
|
+
deliverSubject: string;
|
|
62
|
+
} | {
|
|
63
|
+
operation: "inspect";
|
|
64
|
+
selection: SpaceBackupSelection;
|
|
65
|
+
};
|
|
66
|
+
export type RestorePermissionScope = {
|
|
67
|
+
operation: "initiate";
|
|
68
|
+
stream: string;
|
|
69
|
+
} | {
|
|
70
|
+
operation: "upload";
|
|
71
|
+
stream: string;
|
|
72
|
+
deliverSubject: string;
|
|
73
|
+
} | {
|
|
74
|
+
operation: "validate";
|
|
75
|
+
stream: string;
|
|
76
|
+
} | {
|
|
77
|
+
operation: "checkpoint";
|
|
78
|
+
checkpoint: PersistentConsumerCheckpoint;
|
|
79
|
+
};
|
|
80
|
+
/** Exact snapshot permission set. It has no stream read/admin verbs beyond one snapshot API; chunk
|
|
81
|
+
* ACK authority is created dynamically for the exact reply received, never granted as a wildcard. */
|
|
82
|
+
export declare function backupProfilePermissions(space: string, connId: string, scope: BackupPermissionScope): Record<string, unknown>;
|
|
83
|
+
/** Restore initiation, exact-ID upload, stream validation, and one-checkpoint recreation are disjoint
|
|
84
|
+
* credentials. No phase inherits a body-read verb or another phase's mutation authority. */
|
|
85
|
+
export declare function restoreProfilePermissions(space: string, connId: string, scope: RestorePermissionScope): Record<string, unknown>;
|
|
86
|
+
//# sourceMappingURL=backup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../src/backup.ts"],"names":[],"mappings":"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"}
|