@cotal-ai/core 0.23.0 → 0.24.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/checkpoint-answer.d.ts +46 -0
- package/dist/checkpoint-answer.d.ts.map +1 -0
- package/dist/checkpoint-answer.js +112 -0
- package/dist/checkpoint-answer.js.map +1 -0
- package/dist/endpoint-binding.d.ts +61 -0
- package/dist/endpoint-binding.d.ts.map +1 -1
- package/dist/endpoint-binding.js +109 -0
- package/dist/endpoint-binding.js.map +1 -1
- package/dist/endpoint-checkpoint.d.ts +21 -0
- package/dist/endpoint-checkpoint.d.ts.map +1 -1
- package/dist/endpoint-checkpoint.js +41 -3
- package/dist/endpoint-checkpoint.js.map +1 -1
- package/dist/endpoint-records.d.ts.map +1 -1
- package/dist/endpoint-records.js +86 -0
- package/dist/endpoint-records.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/provision.d.ts.map +1 -1
- package/dist/provision.js +7 -2
- package/dist/provision.js.map +1 -1
- package/dist/run-journal.d.ts +337 -0
- package/dist/run-journal.d.ts.map +1 -0
- package/dist/run-journal.js +703 -0
- package/dist/run-journal.js.map +1 -0
- package/dist/run-migration.d.ts +85 -0
- package/dist/run-migration.d.ts.map +1 -0
- package/dist/run-migration.js +201 -0
- package/dist/run-migration.js.map +1 -0
- package/dist/run-notice.d.ts +84 -0
- package/dist/run-notice.d.ts.map +1 -0
- package/dist/run-notice.js +212 -0
- package/dist/run-notice.js.map +1 -0
- package/dist/run-record.d.ts +104 -0
- package/dist/run-record.d.ts.map +1 -0
- package/dist/run-record.js +58 -0
- package/dist/run-record.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
import { type JetStreamClient, type JetStreamManager } from "@nats-io/jetstream";
|
|
2
|
+
import { type NatsConnection } from "@nats-io/transport-node";
|
|
3
|
+
/**
|
|
4
|
+
* The successor's first act, and the only record the runtime layer writes that is not a step.
|
|
5
|
+
*
|
|
6
|
+
* `replayedTo` is the sequence the activation expected, so a reader of the journal alone can say
|
|
7
|
+
* which prefix each driver actually saw — a takeover that replayed less than its predecessor wrote
|
|
8
|
+
* is visible in the record rather than inferred from a gap.
|
|
9
|
+
*/
|
|
10
|
+
export interface RunJournalActivation {
|
|
11
|
+
readonly v: 1;
|
|
12
|
+
readonly kind: "activation";
|
|
13
|
+
readonly run: string;
|
|
14
|
+
/**
|
|
15
|
+
* This record's position in the run's journal, from 0. The CHAIN: a replay requires
|
|
16
|
+
* `records[i].n === i`, which is the only check that sees a record removed from the MIDDLE —
|
|
17
|
+
* counting cannot, and neither can any anchor at the front. Measured: deleting one interior
|
|
18
|
+
* message left a replay of sequences [1,2,4] that passed every other check, so the run would have
|
|
19
|
+
* re-performed an effect it had already done.
|
|
20
|
+
*/
|
|
21
|
+
readonly n: number;
|
|
22
|
+
/** The driver principal taking the run over. */
|
|
23
|
+
readonly holder: string;
|
|
24
|
+
/**
|
|
25
|
+
* The work-pool lease's fencing token this takeover is authorized by — `WorkLease.fencingToken`,
|
|
26
|
+
* a positive integer that only ever increases for a given work item. It is recorded so that the
|
|
27
|
+
* NEXT takeover can refuse to activate under an older one: see {@link activateRun}.
|
|
28
|
+
*/
|
|
29
|
+
readonly fencingToken: number;
|
|
30
|
+
/** The holder's process epoch: two takeovers by one principal are still two drivers. */
|
|
31
|
+
readonly epoch: number;
|
|
32
|
+
readonly replayedTo: number;
|
|
33
|
+
readonly at: number;
|
|
34
|
+
}
|
|
35
|
+
/** One step-journal entry, wrapped. The `entry` is the LANGUAGE's shape and core does not read it:
|
|
36
|
+
* what a step recorded is the interpreter's business, and a wire layer that parsed it would have to
|
|
37
|
+
* be revised every time the language learns an effect. */
|
|
38
|
+
export interface RunJournalStep {
|
|
39
|
+
readonly v: 1;
|
|
40
|
+
readonly kind: "step";
|
|
41
|
+
readonly run: string;
|
|
42
|
+
/** This record's position in the run's journal, from 0. See {@link RunJournalActivation.n}. */
|
|
43
|
+
readonly n: number;
|
|
44
|
+
readonly at: number;
|
|
45
|
+
readonly entry: unknown;
|
|
46
|
+
}
|
|
47
|
+
export type RunJournalRecord = RunJournalActivation | RunJournalStep;
|
|
48
|
+
/** A record as it was read back, with the stream sequence it landed at. */
|
|
49
|
+
export interface StoredRunJournalRecord {
|
|
50
|
+
readonly seq: number;
|
|
51
|
+
readonly record: RunJournalRecord;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* The server refused an append from a driver that had already activated: the run's subject is no
|
|
55
|
+
* longer where this driver left it.
|
|
56
|
+
*
|
|
57
|
+
* Usually that means someone else activated, and that is what the name says. It is NOT the only
|
|
58
|
+
* cause: purging a run's subject — the retirement mechanism the subject range exists for — also
|
|
59
|
+
* moves the head out from under a live appender, and measured, it produced exactly this refusal
|
|
60
|
+
* with no successor in existence. So `isSuperseded` is "the stream refused my expectation", and a
|
|
61
|
+
* driver that needs to know WHICH replays the run: a journal that reads back empty was retired, one
|
|
62
|
+
* that carries a later activation was taken over.
|
|
63
|
+
*
|
|
64
|
+
* Not retryable either way, and not an effect failure. It says nothing about the effect the entry
|
|
65
|
+
* described — whatever it did, it did — only that this process may no longer speak for the run.
|
|
66
|
+
*/
|
|
67
|
+
export declare class RunSuperseded extends Error {
|
|
68
|
+
readonly run: string;
|
|
69
|
+
readonly subject: string;
|
|
70
|
+
readonly expectedSeq: number;
|
|
71
|
+
readonly cause?: unknown | undefined;
|
|
72
|
+
constructor(run: string, subject: string, expectedSeq: number, cause?: unknown | undefined);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* An append ended without a PubAck for a reason that is not a refusal.
|
|
76
|
+
*
|
|
77
|
+
* A timeout, a dropped connection, a serialization failure: the entry may be on disk, may not be,
|
|
78
|
+
* and the appender cannot tell. Either way its head is no longer known to match the subject's, so
|
|
79
|
+
* every later append would carry an expectation it invented. That is the read-then-publish window
|
|
80
|
+
* the barrier exists to close, so this is terminal in exactly the way {@link RunSuperseded} is —
|
|
81
|
+
* distinct only because nobody else has necessarily taken the run, and the same driver may recover
|
|
82
|
+
* it by replaying and activating again, which is what re-reads the true head.
|
|
83
|
+
*/
|
|
84
|
+
export declare class RunJournalStalled extends Error {
|
|
85
|
+
readonly run: string;
|
|
86
|
+
readonly subject: string;
|
|
87
|
+
readonly expectedSeq: number;
|
|
88
|
+
readonly cause: unknown;
|
|
89
|
+
constructor(run: string, subject: string, expectedSeq: number, cause: unknown);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* An ACTIVATION lost its CAS: the prefix this driver replayed is already stale.
|
|
93
|
+
*
|
|
94
|
+
* Deliberately not {@link RunSuperseded}. Nothing orders a takeover ahead of the outgoing driver's
|
|
95
|
+
* last packet, so losing here is the ordinary case of "it appended while I was reading", and the
|
|
96
|
+
* successor has performed no work to abandon. It re-replays and activates again while it still holds
|
|
97
|
+
* the lease. Only an append AFTER a won activation means superseded.
|
|
98
|
+
*/
|
|
99
|
+
export declare class ActivationRaced extends Error {
|
|
100
|
+
readonly run: string;
|
|
101
|
+
readonly subject: string;
|
|
102
|
+
readonly expectedSeq: number;
|
|
103
|
+
readonly attempts: number;
|
|
104
|
+
readonly cause?: unknown | undefined;
|
|
105
|
+
constructor(run: string, subject: string, expectedSeq: number, attempts: number, cause?: unknown | undefined);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* The replay did not deliver the whole prefix.
|
|
109
|
+
*
|
|
110
|
+
* A short replay is the same failure as an evicted journal prefix: the run re-performs effects it
|
|
111
|
+
* has already performed, under a driver that believes it is resuming correctly. A pull iterator
|
|
112
|
+
* ends cleanly on a dropped connection, so "it stopped early" and "there was no more" look alike on
|
|
113
|
+
* the wire and have to be distinguished by counting.
|
|
114
|
+
*/
|
|
115
|
+
export declare class RunJournalReplayIncomplete extends Error {
|
|
116
|
+
readonly run: string;
|
|
117
|
+
readonly expected: number;
|
|
118
|
+
readonly delivered: number;
|
|
119
|
+
constructor(run: string, expected: number, delivered: number);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Two drivers replayed the same run at once, and this one inherited the other's consumer.
|
|
123
|
+
*
|
|
124
|
+
* Retryable at the takeover level — the loser waits and replays again — and deliberately not an
|
|
125
|
+
* incomplete-replay error, because nothing is missing from the JOURNAL: the run is simply being
|
|
126
|
+
* contended, which is what a takeover is.
|
|
127
|
+
*/
|
|
128
|
+
export declare class RunJournalReplayRaced extends Error {
|
|
129
|
+
readonly run: string;
|
|
130
|
+
readonly durable: string;
|
|
131
|
+
readonly alreadyDelivered: number;
|
|
132
|
+
constructor(run: string, durable: string, alreadyDelivered: number);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* The replayed prefix does not start at the run's beginning.
|
|
136
|
+
*
|
|
137
|
+
* Its counts were consistent and its last sequence may well be the subject's true head — that is
|
|
138
|
+
* exactly why this check exists separately from {@link RunJournalReplayIncomplete}.
|
|
139
|
+
*/
|
|
140
|
+
/**
|
|
141
|
+
* A takeover was attempted under a lease token older than the one the run is already held under.
|
|
142
|
+
*
|
|
143
|
+
* Terminal for this driver: it does not hold the lease, and the fix is not to try again but to stop
|
|
144
|
+
* driving. The activation barrier cannot catch this on its own — a stale holder that replays learns
|
|
145
|
+
* the head like anyone else — so the ordering is enforced against the journal's own record of who
|
|
146
|
+
* activated, which the replay has just read.
|
|
147
|
+
*/
|
|
148
|
+
export declare class StaleLeaseToken extends Error {
|
|
149
|
+
readonly run: string;
|
|
150
|
+
readonly offered: number;
|
|
151
|
+
readonly held: number;
|
|
152
|
+
readonly holder: string;
|
|
153
|
+
constructor(run: string, offered: number, held: number, holder: string);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* A takeover said the run exists and its journal is empty.
|
|
157
|
+
*
|
|
158
|
+
* Terminal. A run whose journal has been purged is RETIRED, not new, and the difference is
|
|
159
|
+
* unrecoverable from the stream alone — which is why the caller states which it expected.
|
|
160
|
+
*/
|
|
161
|
+
export declare class RunNotResumable extends Error {
|
|
162
|
+
readonly run: string;
|
|
163
|
+
readonly subject: string;
|
|
164
|
+
constructor(run: string, subject: string);
|
|
165
|
+
}
|
|
166
|
+
/** A takeover said the run is new and its journal already has records. Terminal: a run id is used
|
|
167
|
+
* once, and re-running one under its own id is a fork, which takes a new id. */
|
|
168
|
+
export declare class RunAlreadyStarted extends Error {
|
|
169
|
+
readonly run: string;
|
|
170
|
+
readonly records: number;
|
|
171
|
+
constructor(run: string, records: number);
|
|
172
|
+
}
|
|
173
|
+
/** A takeover carried a current fencing token but not the identity that holds it. Terminal. */
|
|
174
|
+
export declare class ActivationNotAuthorized extends Error {
|
|
175
|
+
readonly run: string;
|
|
176
|
+
readonly why: string;
|
|
177
|
+
constructor(run: string, why: string);
|
|
178
|
+
}
|
|
179
|
+
export declare class RunJournalPrefixTruncated extends Error {
|
|
180
|
+
readonly run: string;
|
|
181
|
+
readonly seq: number;
|
|
182
|
+
readonly expectedN: number;
|
|
183
|
+
readonly foundN: number;
|
|
184
|
+
constructor(run: string, seq: number, expectedN: number, foundN: number);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* The freshness test itself, separate so it can be put to a consumer that really was inherited.
|
|
188
|
+
*
|
|
189
|
+
* A consumer that has delivered anything, or is holding an ack, has fed another driver part of this
|
|
190
|
+
* run; what is left on it is a tail, however consistent its counts look.
|
|
191
|
+
*/
|
|
192
|
+
export declare function assertReplayConsumerFresh(run: string, durable: string, info: {
|
|
193
|
+
delivered: {
|
|
194
|
+
consumer_seq: number;
|
|
195
|
+
};
|
|
196
|
+
num_ack_pending: number;
|
|
197
|
+
}): void;
|
|
198
|
+
/**
|
|
199
|
+
* Measured on the repo's broker floor: `name: "ConsumerNotFoundError"`, `code: 10014`.
|
|
200
|
+
*
|
|
201
|
+
* Exported so the one error the replay is allowed to swallow can be checked against a real one.
|
|
202
|
+
*/
|
|
203
|
+
export declare function isConsumerNotFound(e: unknown): boolean;
|
|
204
|
+
/** Parse one stored record. The envelope is validated; the step's `entry` is passed through. */
|
|
205
|
+
export declare function parseRunJournalRecord(raw: unknown, subject: string): RunJournalRecord;
|
|
206
|
+
export interface RunJournalReplay {
|
|
207
|
+
readonly records: readonly StoredRunJournalRecord[];
|
|
208
|
+
/** The run subject's last sequence, and therefore the expectation an activation must carry. 0
|
|
209
|
+
* when the run has never been appended to, which is the create-only expectation. */
|
|
210
|
+
readonly lastSeq: number;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Read the run's whole journal, in append order, from the beginning.
|
|
214
|
+
*
|
|
215
|
+
* The replay durable is DELETED and recreated rather than reused. A durable remembers how far it
|
|
216
|
+
* delivered, and resume is not a cursor: every takeover needs the prefix FROM THE TOP, so a durable
|
|
217
|
+
* that survived the previous driver would hand its successor the empty tail and let it resume a run
|
|
218
|
+
* as if nothing had happened. Deleting is also why a rival's interference is bounded — it can only
|
|
219
|
+
* disturb a pre-activation replay, and a disturbed replay either fails its count check or loses its
|
|
220
|
+
* activation CAS, both of which end in "replay again".
|
|
221
|
+
*/
|
|
222
|
+
export declare function replayRunJournal(js: JetStreamClient, jsm: JetStreamManager, space: string, runId: string, takeoverId: string): Promise<RunJournalReplay>;
|
|
223
|
+
/** A takeover id: what a driver asks its credential to be minted for. Callers that mint their own
|
|
224
|
+
* rows use this; one that is handed a credential uses the id that credential names. */
|
|
225
|
+
export declare function newTakeoverId(): string;
|
|
226
|
+
/**
|
|
227
|
+
* The one authorized appender for a run, for as long as nobody else takes it.
|
|
228
|
+
*
|
|
229
|
+
* Obtained only from {@link activateRun}: an appender that has not activated does not know the
|
|
230
|
+
* subject's sequence, and one that guessed would be the read-then-publish window again. The head is
|
|
231
|
+
* private and advances only from a PubAck — a caller that could pass an expectation in could pass a
|
|
232
|
+
* stale one, and every branch of a concurrency scope would be passing its own.
|
|
233
|
+
*/
|
|
234
|
+
export declare class RunJournalAppender {
|
|
235
|
+
private readonly js;
|
|
236
|
+
readonly run: string;
|
|
237
|
+
readonly subject: string;
|
|
238
|
+
/** The prefix this driver replayed, which is the journal the interpreter resumes from. */
|
|
239
|
+
readonly replayed: readonly StoredRunJournalRecord[];
|
|
240
|
+
private seq;
|
|
241
|
+
/** Set once the stream refuses an append. Terminal, and checked before the wire is touched. */
|
|
242
|
+
private dead;
|
|
243
|
+
/** The serial pump. Every append waits for the one before it, so one expectation is in flight. */
|
|
244
|
+
private chain;
|
|
245
|
+
/** The next journal ordinal. Allocated under the serial pump, so it cannot be raced, and only
|
|
246
|
+
* advanced by a PubAck — a stalled append leaves the ordinal where it was, and the appender is
|
|
247
|
+
* finished anyway. */
|
|
248
|
+
private nextN;
|
|
249
|
+
private constructor();
|
|
250
|
+
/** @internal — {@link activateRun} is the only way in. */
|
|
251
|
+
static of(js: JetStreamClient, run: string, subject: string, replayed: readonly StoredRunJournalRecord[], seq: number): RunJournalAppender;
|
|
252
|
+
/** The last sequence this appender has seen acknowledged on the run's subject. */
|
|
253
|
+
get lastSeq(): number;
|
|
254
|
+
/** True once the stream has REFUSED an append: someone else holds the run. */
|
|
255
|
+
get isSuperseded(): boolean;
|
|
256
|
+
/**
|
|
257
|
+
* True once this appender has stopped writing, for either reason. Drivers test this; only the
|
|
258
|
+
* recovery path cares which of the two it was.
|
|
259
|
+
*/
|
|
260
|
+
get isFinished(): boolean;
|
|
261
|
+
/**
|
|
262
|
+
* The highest journal ordinal this appender has written or replayed.
|
|
263
|
+
*
|
|
264
|
+
* The run record's tail anchor is written from this: it is the one number that says how far the
|
|
265
|
+
* journal got, and it lives here because `nextN` advances only on a PubAck — so it is a fact about
|
|
266
|
+
* what the broker accepted, never about what this process attempted.
|
|
267
|
+
*/
|
|
268
|
+
get journalHigh(): number;
|
|
269
|
+
/** The step entries of the replayed prefix, in order, with the activations dropped. */
|
|
270
|
+
steps(): readonly unknown[];
|
|
271
|
+
/**
|
|
272
|
+
* Append one step entry. Serialized against every other append on this run.
|
|
273
|
+
*
|
|
274
|
+
* Callers do not pass a sequence and could not usefully hold one: two concurrent branches of a
|
|
275
|
+
* `parallel` would both hold the same head, and the second publish would be refused by a server
|
|
276
|
+
* doing exactly what it was asked. Here they queue instead, and the head moves only when the
|
|
277
|
+
* broker says it did.
|
|
278
|
+
*/
|
|
279
|
+
append(entry: unknown, at: number): Promise<number>;
|
|
280
|
+
private publishOne;
|
|
281
|
+
}
|
|
282
|
+
export interface RunTakeover {
|
|
283
|
+
readonly space: string;
|
|
284
|
+
readonly runId: string;
|
|
285
|
+
readonly holder: string;
|
|
286
|
+
/** The work-pool lease's fencing token. A takeover under an OLDER one is refused. */
|
|
287
|
+
readonly fencingToken: number;
|
|
288
|
+
readonly epoch: number;
|
|
289
|
+
/**
|
|
290
|
+
* Whether this activation STARTS the run or RESUMES one that already exists.
|
|
291
|
+
*
|
|
292
|
+
* An empty journal is ambiguous on its own and the stream cannot resolve it: a run that was never
|
|
293
|
+
* started and a run that was retired by subject purge — which is the retirement mechanism the
|
|
294
|
+
* subject range exists for — read back identically as zero records. Measured: a purged run
|
|
295
|
+
* activated again as if new. Only the caller knows which it meant, because the run record is what
|
|
296
|
+
* says the run exists, so the caller states it and this refuses the mismatch either way.
|
|
297
|
+
*/
|
|
298
|
+
readonly expect: "new" | "existing";
|
|
299
|
+
/**
|
|
300
|
+
* The id this attempt's replay consumer is named for, and the id its CREDENTIAL was minted for.
|
|
301
|
+
*
|
|
302
|
+
* A consumer name is one subject token, so a per-takeover name cannot be covered by a grant
|
|
303
|
+
* pattern — `*` is a whole-token wildcard in NATS and `wfj_<run>_*` is a literal that matches
|
|
304
|
+
* nothing. The uniqueness therefore has to be known when the rows are minted, which is when the
|
|
305
|
+
* lease is handed out, so the caller brings it here rather than the replay inventing one.
|
|
306
|
+
*/
|
|
307
|
+
readonly takeoverId: string;
|
|
308
|
+
readonly at: number;
|
|
309
|
+
}
|
|
310
|
+
export interface ActivateOptions {
|
|
311
|
+
/** How many replay+activate rounds to try before giving up. Each round re-reads the prefix. */
|
|
312
|
+
readonly attempts?: number;
|
|
313
|
+
/**
|
|
314
|
+
* Called between rounds, and the place a driver re-checks that it still holds the lease.
|
|
315
|
+
*
|
|
316
|
+
* A losing activation means the journal moved, which is also the shape a takeover BY SOMEONE ELSE
|
|
317
|
+
* has: retrying forever would be a driver that lost the lease politely re-reading until the real
|
|
318
|
+
* holder pauses. Throwing from here stops the loop with that reason.
|
|
319
|
+
*/
|
|
320
|
+
readonly beforeRetry?: (attempt: number) => Promise<void> | void;
|
|
321
|
+
/**
|
|
322
|
+
* Called with the replayed prefix, immediately before the activation is published.
|
|
323
|
+
*
|
|
324
|
+
* This is the LAST point at which anything can be checked against a prefix that is still current,
|
|
325
|
+
* so it is where a driver re-reads its lease: the gap between "I replayed" and "I claimed" is the
|
|
326
|
+
* only window in the takeover, and every millisecond of work moved out of it is a window narrowed.
|
|
327
|
+
* Throwing from here abandons the takeover without claiming the subject.
|
|
328
|
+
*/
|
|
329
|
+
readonly onReplayed?: (replay: RunJournalReplay) => Promise<void> | void;
|
|
330
|
+
}
|
|
331
|
+
export declare function activateRun(js: JetStreamClient, jsm: JetStreamManager, takeover: RunTakeover, opts?: ActivateOptions): Promise<RunJournalAppender>;
|
|
332
|
+
/** Convenience for a caller holding only a connection. */
|
|
333
|
+
export declare function runJournalContext(nc: NatsConnection): Promise<{
|
|
334
|
+
js: JetStreamClient;
|
|
335
|
+
jsm: JetStreamManager;
|
|
336
|
+
}>;
|
|
337
|
+
//# sourceMappingURL=run-journal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-journal.d.ts","sourceRoot":"","sources":["../src/run-journal.ts"],"names":[],"mappings":"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"}
|