@rotorsoft/act 1.10.2 → 1.12.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/.tsbuildinfo +1 -1
- package/dist/@types/act.d.ts +61 -2
- package/dist/@types/act.d.ts.map +1 -1
- package/dist/@types/builders/act-builder.d.ts.map +1 -1
- package/dist/@types/builders/state-builder.d.ts +117 -1
- package/dist/@types/builders/state-builder.d.ts.map +1 -1
- package/dist/@types/internal/autoclose-config.d.ts +72 -0
- package/dist/@types/internal/autoclose-config.d.ts.map +1 -0
- package/dist/@types/internal/autoclose-cycle.d.ts +171 -0
- package/dist/@types/internal/autoclose-cycle.d.ts.map +1 -0
- package/dist/@types/internal/autoclose-policy.d.ts +121 -0
- package/dist/@types/internal/autoclose-policy.d.ts.map +1 -0
- package/dist/@types/internal/index.d.ts +3 -0
- package/dist/@types/internal/index.d.ts.map +1 -1
- package/dist/@types/types/action.d.ts +63 -0
- package/dist/@types/types/action.d.ts.map +1 -1
- package/dist/@types/types/registry.d.ts +24 -4
- package/dist/@types/types/registry.d.ts.map +1 -1
- package/dist/index.cjs +398 -79
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +392 -77
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/@types/act.d.ts
CHANGED
|
@@ -39,6 +39,7 @@ export declare const DEFAULT_MAX_SUBSCRIBED_STREAMS = 1000;
|
|
|
39
39
|
* latency on the `"settled"` signal.
|
|
40
40
|
*/
|
|
41
41
|
export declare const DEFAULT_SETTLE_DEBOUNCE_MS = 10;
|
|
42
|
+
export { type AutocloseConfig, type AutoclosePolicy, DEFAULT_AUTOCLOSE_CYCLE_MS, DEFAULT_CLOSE_BATCH_SIZE, DEFAULT_CLOSE_YIELD_MS, resolveAutocloseConfig, } from "./internal/index.js";
|
|
42
43
|
/**
|
|
43
44
|
* Lifecycle events emitted by {@link Act}, mapped to their payload type.
|
|
44
45
|
* Drives the typing of `emit` / `on` / `off` — the event-name argument
|
|
@@ -134,6 +135,48 @@ export type ActOptions<TLanes extends string = string> = {
|
|
|
134
135
|
* lifecycle event so observability sidecars work).
|
|
135
136
|
*/
|
|
136
137
|
readonly drain?: boolean;
|
|
138
|
+
/**
|
|
139
|
+
* Online close cycle cadence in ms (#837 / epic #802). The
|
|
140
|
+
* app-level autoclose controller ticks at this interval, iterates
|
|
141
|
+
* states with `.autocloses(...)` declared, and schedules
|
|
142
|
+
* truncate-and-seed for streams whose predicate returned `true`.
|
|
143
|
+
*
|
|
144
|
+
* Default {@link DEFAULT_AUTOCLOSE_CYCLE_MS} (60 s). Validated
|
|
145
|
+
* `[10_000, 3_600_000]` at `act().build()`; out-of-range throws.
|
|
146
|
+
*
|
|
147
|
+
* Zero-cost when no state declares `.autocloses(...)` — the
|
|
148
|
+
* controller is never constructed in that case.
|
|
149
|
+
*/
|
|
150
|
+
readonly autocloseCycleMs?: number;
|
|
151
|
+
/**
|
|
152
|
+
* Max number of streams the autoclose cycle considers per tick per
|
|
153
|
+
* state (#837). Bounds memory + truncate fan-out so a misconfigured
|
|
154
|
+
* predicate that matches "everything" can't take down the writer.
|
|
155
|
+
*
|
|
156
|
+
* Default {@link DEFAULT_CLOSE_BATCH_SIZE} (64). Validated
|
|
157
|
+
* `[1, 1024]`. Above 1024, the builder throws — operators with
|
|
158
|
+
* genuine high-throughput needs opt out by passing a custom
|
|
159
|
+
* predicate that pre-filters.
|
|
160
|
+
*/
|
|
161
|
+
readonly closeBatchSize?: number;
|
|
162
|
+
/**
|
|
163
|
+
* Microsecond yield delay between successive `Store.truncate`
|
|
164
|
+
* calls within one cycle tick (#837). Defaults to `0` (microtask
|
|
165
|
+
* yield only). SQLite operators set a positive value to let the
|
|
166
|
+
* writer lock release between rows; PG / InMemory adapters
|
|
167
|
+
* generally don't need it because they don't serialize writers
|
|
168
|
+
* globally.
|
|
169
|
+
*
|
|
170
|
+
* Validated `[0, 1000]`.
|
|
171
|
+
*/
|
|
172
|
+
readonly closeYieldMs?: number;
|
|
173
|
+
/**
|
|
174
|
+
* Whether predicate exceptions should mark the stream as closed
|
|
175
|
+
* (#837). Default `false` — a thrown predicate is logged and the
|
|
176
|
+
* stream is skipped that cycle. Set `true` to close on error
|
|
177
|
+
* (defensive policy for "if I can't evaluate, assume terminal").
|
|
178
|
+
*/
|
|
179
|
+
readonly closeOnError?: boolean;
|
|
137
180
|
};
|
|
138
181
|
export declare class Act<TSchemaReg extends SchemaRegister<TActions>, TEvents extends Schemas, TActions extends Schemas, TStateMap extends Record<string, Schema> = Record<string, never>, TActor extends Actor = Actor> implements IAct<TEvents, TActions, TActor> {
|
|
139
182
|
private _emitter;
|
|
@@ -164,9 +207,25 @@ export declare class Act<TSchemaReg extends SchemaRegister<TActions>, TEvents ex
|
|
|
164
207
|
*/
|
|
165
208
|
private readonly _notify_disposer;
|
|
166
209
|
/** Public registry — kept as-is per the no-prefix-on-public convention. */
|
|
167
|
-
readonly registry: Registry<TSchemaReg, TEvents, TActions>;
|
|
210
|
+
readonly registry: Registry<TSchemaReg, TEvents, TActions, keyof TStateMap & string>;
|
|
168
211
|
/** Map of state name → state definition; populated by the builder. */
|
|
169
212
|
private readonly _states;
|
|
213
|
+
/**
|
|
214
|
+
* Resolved autoclose configuration (#837 / epic #802). Frozen at
|
|
215
|
+
* `act().build()` via {@link resolveAutocloseConfig}.
|
|
216
|
+
*
|
|
217
|
+
* @internal
|
|
218
|
+
*/
|
|
219
|
+
private readonly _autoclose_config;
|
|
220
|
+
/**
|
|
221
|
+
* App-level autoclose controller. `undefined` when no state declares
|
|
222
|
+
* `.autocloses(...)` — the controller is never constructed, so
|
|
223
|
+
* `start_correlations()` / `stop_correlations()` skip the autoclose
|
|
224
|
+
* lifecycle and the orchestrator pays zero per-tick cost.
|
|
225
|
+
*
|
|
226
|
+
* @internal
|
|
227
|
+
*/
|
|
228
|
+
private readonly _autoclose;
|
|
170
229
|
/**
|
|
171
230
|
* Emit a lifecycle event. The payload type is inferred from the event name
|
|
172
231
|
* via {@link ActLifecycleEvents}.
|
|
@@ -252,7 +311,7 @@ export declare class Act<TSchemaReg extends SchemaRegister<TActions>, TEvents ex
|
|
|
252
311
|
* these from `.withLane(...)` calls. Slice 1 records them on the
|
|
253
312
|
* instance; later slices fan out one `DrainController` per lane.
|
|
254
313
|
*/
|
|
255
|
-
constructor(registry: Registry<TSchemaReg, TEvents, TActions>, states?: Map<string, State<any, any, any>>, batch_handlers?: Map<string, BatchHandler<any>>, options?: ActOptions, lanes?: ReadonlyArray<LaneConfig>);
|
|
314
|
+
constructor(registry: Registry<TSchemaReg, TEvents, TActions, keyof TStateMap & string>, states?: Map<string, State<any, any, any>>, batch_handlers?: Map<string, BatchHandler<any>>, options?: ActOptions, lanes?: ReadonlyArray<LaneConfig>);
|
|
256
315
|
/** True after the first `shutdown()` call. Guards idempotency. */
|
|
257
316
|
private _shutdown_promise;
|
|
258
317
|
/**
|
package/dist/@types/act.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"act.d.ts","sourceRoot":"","sources":["../../src/act.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"act.d.ts","sourceRoot":"","sources":["../../src/act.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"act-builder.d.ts","sourceRoot":"","sources":["../../../src/builders/act-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,GAAG,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAajD,OAAO,EAAE,YAAY,EAAO,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EACV,KAAK,EAEL,SAAS,EACT,aAAa,EACb,IAAI,EACJ,UAAU,EAEV,eAAe,EACf,gBAAgB,EAEhB,MAAM,EACN,cAAc,EACd,OAAO,EACP,QAAQ,EACR,KAAK,EACN,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAgDhD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,MAAM,UAAU,CACpB,UAAU,SAAS,cAAc,CAAC,QAAQ,CAAC,EAC3C,OAAO,SAAS,OAAO,EACvB,QAAQ,SAAS,OAAO,EAExB,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,EAC7C,MAAM,SAAS,KAAK,GAAG,KAAK,EAC5B,MAAM,SAAS,MAAM,GAAG,OAAO,YAAY,IACzC;IACF;;;;;;;OAOG;IACH,SAAS,EAAE,CACT,SAAS,SAAS,MAAM,EACxB,UAAU,SAAS,OAAO,EAC1B,WAAW,SAAS,OAAO,EAC3B,QAAQ,SAAS,MAAM,GAAG,MAAM,EAEhC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,KACvD,UAAU,CACb,UAAU,GAAG;SAAG,CAAC,IAAI,MAAM,WAAW,GAAG,SAAS;KAAE,EACpD,OAAO,GAAG,UAAU,EACpB,QAAQ,GAAG,WAAW,EACtB,SAAS,GAAG;SAAG,CAAC,IAAI,QAAQ,GAAG,SAAS;KAAE,EAC1C,MAAM,EACN,MAAM,CACP,CAAC;IACF;;;;;;;;OAQG;IACH,SAAS,EAAE,CACT,aAAa,SAAS,cAAc,CAAC,WAAW,CAAC,EACjD,UAAU,SAAS,OAAO,EAC1B,WAAW,SAAS,OAAO,EAC3B,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACtC,SAAS,SAAS,MAAM,EAExB,KAAK,EAAE,KAAK,CACV,aAAa,EACb,UAAU,EACV,WAAW,EACX,OAAO,EACP,KAAK,EACL,SAAS,CACV,KACE,UAAU,CACb,UAAU,GAAG,aAAa,EAC1B,OAAO,GAAG,UAAU,EACpB,QAAQ,GAAG,WAAW,EACtB,SAAS,GAAG,OAAO,EACnB,MAAM,EACN,MAAM,GAAG,SAAS,CACnB,CAAC;IACF;;;;;OAKG;IACH,cAAc,EAAE,CAAC,UAAU,SAAS,OAAO,EACzC,UAAU,EAAE,CAAC,OAAO,CAAC,MAAM,UAAU,EAAE,MAAM,OAAO,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAClE,UAAU,CAAC,UAAU,CAAC,GACtB,KAAK,KACN,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1E;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,SAAS,EAAE,CAAC,SAAS,SAAS,KAAK,OAAO,UAAU,CAClD,UAAU,EACV,OAAO,EACP,QAAQ,EACR,SAAS,EACT,SAAS,EACT,MAAM,CACP,CAAC;IACF;;;;;;;;;;;;;;OAcG;IACH,QAAQ,EAAE,CAAC,KAAK,CAAC,OAAO,SAAS,UAAU,EACzC,MAAM,EAAE,OAAO,KACZ,UAAU,CACb,UAAU,EACV,OAAO,EACP,QAAQ,EACR,SAAS,EACT,MAAM,EACN,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CACzB,CAAC;IACF;;;;;;;;;;OAUG;IACH,EAAE,EAAE,CAAC,IAAI,SAAS,MAAM,OAAO,EAC7B,KAAK,EAAE,IAAI,KACR;QACH,EAAE,EAAE,CACF,OAAO,EAAE,CACP,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,EAC/B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,KACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,EAC9C,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,KAC/B,UAAU,CACb,UAAU,EACV,OAAO,EACP,QAAQ,EACR,SAAS,EACT,MAAM,EACN,MAAM,CACP,GAAG;YACF,EAAE,EAAE,CACF,QAAQ,EAAE,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,MAAM,KACvD,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;SAC3E,CAAC;KACH,CAAC;IACF;;;;;;;;;;OAUG;IACH,KAAK,EAAE,CACL,OAAO,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,KACzB,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC3D;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CACzC,CAAC;AAIF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,GAAG,CAEjB,UAAU,SAAS,cAAc,CAAC,QAAQ,CAAC,GAAG,EAAE,EAChD,OAAO,SAAS,OAAO,GAAG,EAAE,EAC5B,QAAQ,SAAS,OAAO,GAAG,EAAE,EAC7B,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,EAC7C,MAAM,SAAS,KAAK,GAAG,KAAK,KACzB,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"act-builder.d.ts","sourceRoot":"","sources":["../../../src/builders/act-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
* Fluent interface for defining a strongly-typed state machine using Zod schemas.
|
|
6
6
|
*/
|
|
7
7
|
import type { ZodType } from "zod";
|
|
8
|
-
import
|
|
8
|
+
import { type AutoclosePolicy } from "../internal/index.js";
|
|
9
|
+
import type { ActionHandler, ActionOptions, Actor, AutocloseArchiver, AutoclosePredicate, Committed, Invariant, PatchHandlers, Schema, Schemas, Snapshot, State, ZodTypes } from "../types/index.js";
|
|
9
10
|
/**
|
|
10
11
|
* Builder interface for defining a state with event sourcing.
|
|
11
12
|
*
|
|
@@ -332,6 +333,121 @@ export type ActionBuilder<TState extends Schema, TEvents extends Schemas, TActio
|
|
|
332
333
|
* ```
|
|
333
334
|
*/
|
|
334
335
|
discloses: (disclose: (event: Committed<TEvents, keyof TEvents & string>, actor: Actor) => boolean) => ActionBuilder<TState, TEvents, TActions, TName>;
|
|
336
|
+
/**
|
|
337
|
+
* Declares the online close predicate for this state. The
|
|
338
|
+
* orchestrator's autoclose cycle iterates the state's streams once
|
|
339
|
+
* per tick and calls the predicate per candidate; truthy results are
|
|
340
|
+
* scheduled for atomic truncate-and-seed via `Store.truncate` on the
|
|
341
|
+
* next batch.
|
|
342
|
+
*
|
|
343
|
+
* One predicate per state. A second `.autocloses(...)` call replaces
|
|
344
|
+
* the first (same shape as `.snap` / `.discloses` — state-level, not
|
|
345
|
+
* per-event). Absent → the state opts out of online close entirely;
|
|
346
|
+
* the cycle skips it and pays zero per-tick cost for it.
|
|
347
|
+
*
|
|
348
|
+
* Two forms:
|
|
349
|
+
*
|
|
350
|
+
* - **Declarative** — pass an {@link AutoclosePolicy} object literal
|
|
351
|
+
* covering the three operational pressure points (`after`, `is`,
|
|
352
|
+
* `reaches`). Top-level fields combine with AND; an optional
|
|
353
|
+
* `or: {...}` block opens an alternative OR path. Validated via
|
|
354
|
+
* Zod at build time; misconfiguration throws before `act().build()`
|
|
355
|
+
* completes. Covers the 90% case.
|
|
356
|
+
* - **Function** — pass a `(stream, head, count) => boolean`
|
|
357
|
+
* predicate. Drops out to the full power of JS for per-stream
|
|
358
|
+
* metadata predicates, multi-branch policies (different cooldowns
|
|
359
|
+
* per terminal event), or anything the declarative form doesn't
|
|
360
|
+
* cover. The predicate receives `head: Committed<TEvents, ...>`
|
|
361
|
+
* so reading `head.name` autocompletes to the state's declared
|
|
362
|
+
* event union.
|
|
363
|
+
*
|
|
364
|
+
* @param predicate_or_policy Function form: predicate as above.
|
|
365
|
+
* Object form: declarative {@link AutoclosePolicy} bag.
|
|
366
|
+
* @returns The ActionBuilder for chaining.
|
|
367
|
+
*
|
|
368
|
+
* @example Declarative — cooldown after terminal (a Ticket closes
|
|
369
|
+
* 90 days after resolution).
|
|
370
|
+
* ```typescript
|
|
371
|
+
* .autocloses({ is: "TicketResolved", after: { days: 90 } })
|
|
372
|
+
* ```
|
|
373
|
+
*
|
|
374
|
+
* @example Declarative — multi-terminal (an Order closes on any of
|
|
375
|
+
* three terminal events, no cooldown).
|
|
376
|
+
* ```typescript
|
|
377
|
+
* .autocloses({ is: ["Shipped", "Delivered", "Cancelled"] })
|
|
378
|
+
* ```
|
|
379
|
+
*
|
|
380
|
+
* @example Declarative — time-only retention (a Session closes
|
|
381
|
+
* after 24h regardless of head event).
|
|
382
|
+
* ```typescript
|
|
383
|
+
* .autocloses({ after: { days: 1 } })
|
|
384
|
+
* ```
|
|
385
|
+
*
|
|
386
|
+
* @example Declarative — pure cardinality cap.
|
|
387
|
+
* ```typescript
|
|
388
|
+
* .autocloses({ reaches: 10_000 })
|
|
389
|
+
* ```
|
|
390
|
+
*
|
|
391
|
+
* @example Declarative — primary cooldown + safety-net backstop.
|
|
392
|
+
* ```typescript
|
|
393
|
+
* .autocloses({
|
|
394
|
+
* is: "TicketResolved", // primary trigger
|
|
395
|
+
* after: { days: 90 }, // AND aged 90 days
|
|
396
|
+
* or: { reaches: 10_000 }, // OR cardinality safety net
|
|
397
|
+
* })
|
|
398
|
+
* ```
|
|
399
|
+
*
|
|
400
|
+
* @example Declarative — pure OR (only backstops, no primary
|
|
401
|
+
* cooldown).
|
|
402
|
+
* ```typescript
|
|
403
|
+
* .autocloses({ or: { is: "TicketResolved", reaches: 10_000 } })
|
|
404
|
+
* ```
|
|
405
|
+
*
|
|
406
|
+
* @example Function — custom predicate the declarative form can't
|
|
407
|
+
* express (per-stream metadata or per-terminal cooldown).
|
|
408
|
+
* ```typescript
|
|
409
|
+
* .autocloses((stream, head) => stream.startsWith("ephemeral:"))
|
|
410
|
+
* ```
|
|
411
|
+
*/
|
|
412
|
+
autocloses: (predicate_or_policy: AutoclosePredicate<TEvents> | AutoclosePolicy) => ActionBuilder<TState, TEvents, TActions, TName>;
|
|
413
|
+
/**
|
|
414
|
+
* Declares the archiver the online close cycle runs **before**
|
|
415
|
+
* truncating a stream this state's `.autocloses(...)` predicate
|
|
416
|
+
* accepted. Hosts use it to write events to durable storage (S3,
|
|
417
|
+
* an analytics warehouse, cold tier) before the tombstone lands,
|
|
418
|
+
* so the truncate doesn't lose history that the operator still
|
|
419
|
+
* needs.
|
|
420
|
+
*
|
|
421
|
+
* Threads into `CloseTarget.archive` via the same plumbing
|
|
422
|
+
* `app.close({ stream, archive })` already uses — the cycle holds
|
|
423
|
+
* the stream's guard while the archiver runs, and a thrown
|
|
424
|
+
* archiver leaves the stream guarded but un-truncated. No partial
|
|
425
|
+
* truncate state, no data loss; the cycle retries the candidate
|
|
426
|
+
* on the next tick.
|
|
427
|
+
*
|
|
428
|
+
* One archiver per state. A second `.archives(...)` call replaces
|
|
429
|
+
* the first (same shape as `.snap` / `.discloses` /
|
|
430
|
+
* `.autocloses`). Absent → the cycle truncates without an archive
|
|
431
|
+
* step.
|
|
432
|
+
*
|
|
433
|
+
* @param archive `(stream, head) => Promise<void>`. Runs while
|
|
434
|
+
* the stream is locked against new writes; the truncate runs
|
|
435
|
+
* immediately after a successful resolve.
|
|
436
|
+
* @returns The ActionBuilder for chaining.
|
|
437
|
+
*
|
|
438
|
+
* @example Archive to S3 before truncate.
|
|
439
|
+
* ```typescript
|
|
440
|
+
* state({ Ticket: ticketSchema })
|
|
441
|
+
* .emits({ TicketOpened, TicketResolved })
|
|
442
|
+
* // ...
|
|
443
|
+
* .autocloses((_stream, head) => head.name === "TicketResolved")
|
|
444
|
+
* .archives(async (stream) => {
|
|
445
|
+
* const events = await loadEvents(stream);
|
|
446
|
+
* await s3.upload(`tickets/${stream}.jsonl`, events);
|
|
447
|
+
* })
|
|
448
|
+
* ```
|
|
449
|
+
*/
|
|
450
|
+
archives: (archive: AutocloseArchiver<TEvents>) => ActionBuilder<TState, TEvents, TActions, TName>;
|
|
335
451
|
/**
|
|
336
452
|
* Finalizes and builds the state definition.
|
|
337
453
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-builder.d.ts","sourceRoot":"","sources":["../../../src/builders/state-builder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"state-builder.d.ts","sourceRoot":"","sources":["../../../src/builders/state-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module autoclose-config
|
|
3
|
+
* @category Internal
|
|
4
|
+
*
|
|
5
|
+
* Defaults, Zod schema, and resolver for the autoclose knobs on
|
|
6
|
+
* {@link ActOptions} (#837 / epic #802). Split out of `act.ts` so the
|
|
7
|
+
* orchestrator file stays focused on the `Act` class and the
|
|
8
|
+
* autoclose surface lives with the cycle + controller that consume
|
|
9
|
+
* it. The validation pattern matches the rest of the framework —
|
|
10
|
+
* Zod schema with `.min().max().default(...)` per field — so the
|
|
11
|
+
* upcoming policy-factory subs (#838 retention, #839 terminal,
|
|
12
|
+
* #840 cardinality) can `.extend(...)` it for their own
|
|
13
|
+
* per-policy options without reinventing range checks.
|
|
14
|
+
*
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
import { z } from "zod";
|
|
18
|
+
import type { ActOptions } from "../act.js";
|
|
19
|
+
/**
|
|
20
|
+
* Default {@link ActOptions.autocloseCycleMs}: 60 s. Sized for typical
|
|
21
|
+
* business-app close cadences (close-when-resolved on tickets,
|
|
22
|
+
* close-when-stale on sessions) where same-second response is not the
|
|
23
|
+
* goal. Operators with tighter requirements override; the floor is
|
|
24
|
+
* 10 s (any tighter is the wrong primitive).
|
|
25
|
+
*/
|
|
26
|
+
export declare const DEFAULT_AUTOCLOSE_CYCLE_MS = 60000;
|
|
27
|
+
/**
|
|
28
|
+
* Default {@link ActOptions.closeBatchSize}: 64. Bounds the
|
|
29
|
+
* `Store.query_streams` page size + the truncate fan-out per cycle
|
|
30
|
+
* tick so a "close everything" misconfiguration can't take down the
|
|
31
|
+
* writer.
|
|
32
|
+
*/
|
|
33
|
+
export declare const DEFAULT_CLOSE_BATCH_SIZE = 64;
|
|
34
|
+
/**
|
|
35
|
+
* Default {@link ActOptions.closeYieldMs}: 0. The cycle yields a
|
|
36
|
+
* microtask between truncates by default; SQLite operators set a
|
|
37
|
+
* positive value to release the writer lock.
|
|
38
|
+
*/
|
|
39
|
+
export declare const DEFAULT_CLOSE_YIELD_MS = 0;
|
|
40
|
+
/**
|
|
41
|
+
* Zod schema for the autoclose knobs on {@link ActOptions}. Same
|
|
42
|
+
* declarative-validation pattern the framework uses elsewhere
|
|
43
|
+
* (`libs/act/src/config.ts`, every event/action schema, every
|
|
44
|
+
* reaction-option shape). Defaults, ranges, and integer constraints
|
|
45
|
+
* live in one place — no parallel `DEFAULT_*` + `*_MIN` / `*_MAX`
|
|
46
|
+
* declarations to keep in sync. Out-of-range values throw `ZodError`
|
|
47
|
+
* at `act().build()` so misconfiguration surfaces at startup, not
|
|
48
|
+
* on the first cycle tick.
|
|
49
|
+
*
|
|
50
|
+
* @internal
|
|
51
|
+
*/
|
|
52
|
+
declare const AutocloseOptionsSchema: z.ZodObject<{
|
|
53
|
+
autocloseCycleMs: z.ZodDefault<z.ZodNumber>;
|
|
54
|
+
closeBatchSize: z.ZodDefault<z.ZodNumber>;
|
|
55
|
+
closeYieldMs: z.ZodDefault<z.ZodNumber>;
|
|
56
|
+
closeOnError: z.ZodDefault<z.ZodBoolean>;
|
|
57
|
+
}, z.core.$strip>;
|
|
58
|
+
/**
|
|
59
|
+
* Resolved autoclose configuration after validation and default
|
|
60
|
+
* expansion. Reachable through the public root (`@rotorsoft/act`) so
|
|
61
|
+
* fields follow the public-camelCase convention and mirror the
|
|
62
|
+
* `ActOptions` knob names directly — no per-resolver renaming layer.
|
|
63
|
+
*/
|
|
64
|
+
export type AutocloseConfig = z.infer<typeof AutocloseOptionsSchema>;
|
|
65
|
+
/**
|
|
66
|
+
* Validate and apply defaults for the autoclose knobs on
|
|
67
|
+
* {@link ActOptions}. Called from `act().build()`. Out-of-range
|
|
68
|
+
* values throw `ZodError` at startup, not on the first cycle tick.
|
|
69
|
+
*/
|
|
70
|
+
export declare function resolveAutocloseConfig(options: ActOptions | undefined): AutocloseConfig;
|
|
71
|
+
export {};
|
|
72
|
+
//# sourceMappingURL=autoclose-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autoclose-config.d.ts","sourceRoot":"","sources":["../../../src/internal/autoclose-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAEjD;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,sBAAsB;;;;;iBAc1B,CAAC;AAEH;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAErE;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,UAAU,GAAG,SAAS,GAC9B,eAAe,CAOjB"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module autoclose-cycle
|
|
3
|
+
* @category Internal
|
|
4
|
+
*
|
|
5
|
+
* The online close-the-books cycle (#837 / epic #802). Paginates the
|
|
6
|
+
* store's streams, applies each state's `.autocloses(predicate)` to
|
|
7
|
+
* the matching candidates, then hands the eligible streams to the
|
|
8
|
+
* existing {@link run_close_cycle} so the tombstone-guard +
|
|
9
|
+
* archive-while-guarded + atomic-truncate invariants carry over from
|
|
10
|
+
* the explicit `app.close(targets)` path.
|
|
11
|
+
*
|
|
12
|
+
* Pure orchestration. The caller (the app-level controller in slice
|
|
13
|
+
* 3) owns the cadence (`setInterval(...)`), the lifecycle events
|
|
14
|
+
* (`emit("closed", ...)`), and the per-tick correlation id.
|
|
15
|
+
*
|
|
16
|
+
* Zero-cost when no state declares `.autocloses(...)` — the caller
|
|
17
|
+
* never invokes this function in that case (the controller isn't
|
|
18
|
+
* constructed).
|
|
19
|
+
*
|
|
20
|
+
* @internal
|
|
21
|
+
*/
|
|
22
|
+
import type { AutocloseConfig } from "../act.js";
|
|
23
|
+
import type { Actor, CloseResult, Correlator, Logger, State } from "../types/index.js";
|
|
24
|
+
import type { EsOps } from "./event-sourcing.js";
|
|
25
|
+
/**
|
|
26
|
+
* Dependencies the autoclose cycle needs. Decoupled from `Act` so
|
|
27
|
+
* the cycle can be exercised from tests in isolation against an
|
|
28
|
+
* `InMemoryStore` without spinning a full Act.
|
|
29
|
+
*
|
|
30
|
+
* @internal
|
|
31
|
+
*/
|
|
32
|
+
export type AutocloseCycleDeps = {
|
|
33
|
+
/**
|
|
34
|
+
* Lookup of `.autocloses(predicate)` per state name. The cycle
|
|
35
|
+
* skips streams whose owning state returns `null` here, so opt-out
|
|
36
|
+
* states pay zero per-stream cost beyond the `event_to_state`
|
|
37
|
+
* lookup.
|
|
38
|
+
*/
|
|
39
|
+
readonly autoclose_policy: (state_name: string) => ((stream: string, head: any, count: number) => boolean) | null;
|
|
40
|
+
/**
|
|
41
|
+
* Lookup of `.archives(fn)` per state name. When present, the
|
|
42
|
+
* cycle threads it into the corresponding {@link CloseTarget.archive}
|
|
43
|
+
* so the existing close-cycle's archive-while-guarded invariant
|
|
44
|
+
* applies — a thrown archiver leaves the stream guarded but
|
|
45
|
+
* un-truncated, and the cycle re-evaluates the candidate next
|
|
46
|
+
* tick.
|
|
47
|
+
*/
|
|
48
|
+
readonly autoclose_archiver: (state_name: string) => ((stream: string, head: any) => Promise<void>) | null;
|
|
49
|
+
/** event-name → owning-state lookup (already computed at build). */
|
|
50
|
+
readonly event_to_state: ReadonlyMap<string, State<any, any, any>>;
|
|
51
|
+
/** Reactive-event count, forwarded to {@link run_close_cycle}. */
|
|
52
|
+
readonly reactive_events_size: number;
|
|
53
|
+
/** `EsOps.load`, forwarded to {@link run_close_cycle}. */
|
|
54
|
+
readonly load: EsOps["load"];
|
|
55
|
+
/** `EsOps.tombstone`, forwarded to {@link run_close_cycle}. */
|
|
56
|
+
readonly tombstone: EsOps["tombstone"];
|
|
57
|
+
readonly logger: Logger;
|
|
58
|
+
readonly config: AutocloseConfig;
|
|
59
|
+
/**
|
|
60
|
+
* Correlation id for this tick. The caller computes it via the
|
|
61
|
+
* configured {@link Correlator}; every truncate the cycle stages
|
|
62
|
+
* shares this id so close-cycle commits land under one correlation
|
|
63
|
+
* key (matching the existing `app.close(targets)` behavior).
|
|
64
|
+
*/
|
|
65
|
+
readonly correlation: string;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Aggregated result of one autoclose tick. The caller forwards
|
|
69
|
+
* `close_result` to the `closed` lifecycle event; `inspected` /
|
|
70
|
+
* `evaluated` / `predicate_errors` feed observability sidecars.
|
|
71
|
+
*
|
|
72
|
+
* @internal
|
|
73
|
+
*/
|
|
74
|
+
export type AutocloseCycleResult = {
|
|
75
|
+
/** Total streams the cycle paginated through this tick. */
|
|
76
|
+
readonly inspected: number;
|
|
77
|
+
/** Streams whose owning state had a policy and the predicate ran. */
|
|
78
|
+
readonly evaluated: number;
|
|
79
|
+
/** Predicate exceptions caught + classified per `closeOnError`. */
|
|
80
|
+
readonly predicate_errors: number;
|
|
81
|
+
/** Forwarded from {@link run_close_cycle} — truncated + skipped. */
|
|
82
|
+
readonly close_result: CloseResult;
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Run one autoclose tick against the configured store. Returns
|
|
86
|
+
* after every stream has been paginated through and every eligible
|
|
87
|
+
* batch handed to {@link run_close_cycle}.
|
|
88
|
+
*
|
|
89
|
+
* The cycle never throws — predicate exceptions are caught and
|
|
90
|
+
* logged (counted in `predicate_errors`; `closeOnError` controls
|
|
91
|
+
* whether they count as "close this stream"). Store errors during
|
|
92
|
+
* pagination propagate to the caller (the controller logs them and
|
|
93
|
+
* skips to the next tick).
|
|
94
|
+
*
|
|
95
|
+
* @internal
|
|
96
|
+
*/
|
|
97
|
+
export declare function run_autoclose_cycle(deps: AutocloseCycleDeps): Promise<AutocloseCycleResult>;
|
|
98
|
+
/**
|
|
99
|
+
* Dependencies the app-level autoclose controller needs. Same shape
|
|
100
|
+
* as {@link AutocloseCycleDeps} minus `correlation` (the controller
|
|
101
|
+
* computes one per tick from the supplied {@link Correlator}) and
|
|
102
|
+
* plus the lifecycle-event sink (`on_closed`) and the actor sentinel
|
|
103
|
+
* for the correlator (`close_actor`).
|
|
104
|
+
*
|
|
105
|
+
* @internal
|
|
106
|
+
*/
|
|
107
|
+
export type AutocloseControllerDeps = Omit<AutocloseCycleDeps, "correlation"> & {
|
|
108
|
+
/**
|
|
109
|
+
* Correlator the controller invokes per tick to stamp the cycle's
|
|
110
|
+
* truncate commits. Reuses the orchestrator's configured
|
|
111
|
+
* correlator so close commits share the app's id scheme — same as
|
|
112
|
+
* the existing `app.close(targets)` path.
|
|
113
|
+
*/
|
|
114
|
+
readonly correlator: Correlator;
|
|
115
|
+
/** Sentinel actor for the close correlation (matches `Act.close`). */
|
|
116
|
+
readonly close_actor: Actor;
|
|
117
|
+
/**
|
|
118
|
+
* Fan-out for the per-tick result. The controller calls this once
|
|
119
|
+
* per tick that closes at least one stream, with the cycle's
|
|
120
|
+
* {@link CloseResult}. The Act orchestrator wires this to
|
|
121
|
+
* `emit("closed", result)`.
|
|
122
|
+
*/
|
|
123
|
+
readonly on_closed: (result: CloseResult) => void;
|
|
124
|
+
};
|
|
125
|
+
/**
|
|
126
|
+
* App-level autoclose controller. Owns the ticker (`setInterval`),
|
|
127
|
+
* the per-tick reentrancy guard (a slow tick doesn't pile on the
|
|
128
|
+
* next interval), and the lifecycle-event fan-out. Tests invoke
|
|
129
|
+
* {@link run_once} directly; the orchestrator's
|
|
130
|
+
* `start_correlations()` / `stop_correlations()` lifecycle starts +
|
|
131
|
+
* stops the ticker.
|
|
132
|
+
*
|
|
133
|
+
* @internal
|
|
134
|
+
*/
|
|
135
|
+
export declare class AutocloseController {
|
|
136
|
+
readonly deps: AutocloseControllerDeps;
|
|
137
|
+
private _timer;
|
|
138
|
+
/**
|
|
139
|
+
* Reentrancy guard. The interval fires the next tick on cadence
|
|
140
|
+
* regardless of how long the previous one took; this flag drops
|
|
141
|
+
* overlapping ticks so the cycle stays sequential per controller.
|
|
142
|
+
*/
|
|
143
|
+
private _running;
|
|
144
|
+
constructor(deps: AutocloseControllerDeps);
|
|
145
|
+
/**
|
|
146
|
+
* Start the cycle ticker. Returns `false` if already running so
|
|
147
|
+
* accidental double-start doesn't stack timers (matches
|
|
148
|
+
* `_correlate.start_polling` semantics).
|
|
149
|
+
*/
|
|
150
|
+
start(): boolean;
|
|
151
|
+
/**
|
|
152
|
+
* Stop the cycle ticker. Idempotent.
|
|
153
|
+
*/
|
|
154
|
+
stop(): void;
|
|
155
|
+
/**
|
|
156
|
+
* Whether the ticker is currently running.
|
|
157
|
+
*/
|
|
158
|
+
get is_running(): boolean;
|
|
159
|
+
/**
|
|
160
|
+
* Run one cycle synchronously. The controller's interval callback
|
|
161
|
+
* delegates here; tests can invoke it directly to deterministically
|
|
162
|
+
* exercise the cycle without spinning real timers.
|
|
163
|
+
*
|
|
164
|
+
* Overlapping invocations short-circuit: if a previous tick is
|
|
165
|
+
* still running, this one drops and returns `null`. The orchestrator
|
|
166
|
+
* never sees a queue of pending ticks regardless of how slow the
|
|
167
|
+
* predicate / archive / truncate are.
|
|
168
|
+
*/
|
|
169
|
+
run_once(): Promise<AutocloseCycleResult | null>;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=autoclose-cycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autoclose-cycle.d.ts","sourceRoot":"","sources":["../../../src/internal/autoclose-cycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,OAAO,KAAK,EACV,KAAK,EACL,WAAW,EAEX,UAAU,EACV,MAAM,EACN,KAAK,EAEN,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,EAAE,CACzB,UAAU,EAAE,MAAM,KACf,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,IAAI,CAAC;IACpE;;;;;;;OAOG;IACH,QAAQ,CAAC,kBAAkB,EAAE,CAC3B,UAAU,EAAE,MAAM,KACf,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC3D,oEAAoE;IACpE,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACnE,kEAAkE;IAClE,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7B,+DAA+D;IAC/D,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,2DAA2D;IAC3D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,qEAAqE;IACrE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,mEAAmE;IACnE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,oEAAoE;IACpE,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC;CACpC,CAAC;AAgBF;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,oBAAoB,CAAC,CAkF/B;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,uBAAuB,GAAG,IAAI,CACxC,kBAAkB,EAClB,aAAa,CACd,GAAG;IACF;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,sEAAsE;IACtE,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;CACnD,CAAC;AAEF;;;;;;;;;GASG;AACH,qBAAa,mBAAmB;IAC9B,SAAgB,IAAI,EAAE,uBAAuB,CAAC;IAC9C,OAAO,CAAC,MAAM,CAA6C;IAC3D;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAS;gBAEb,IAAI,EAAE,uBAAuB;IAIzC;;;;OAIG;IACH,KAAK,IAAI,OAAO;IAoBhB;;OAEG;IACH,IAAI,IAAI,IAAI;IAOZ;;OAEG;IACH,IAAI,UAAU,IAAI,OAAO,CAExB;IAED;;;;;;;;;OASG;IACG,QAAQ,IAAI,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;CA2BvD"}
|