@rotorsoft/act 0.6.0 → 0.6.1
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 +2 -12
- package/dist/@types/act.d.ts.map +1 -1
- package/dist/@types/adapters/InMemoryStore.d.ts +2 -1
- package/dist/@types/adapters/InMemoryStore.d.ts.map +1 -1
- package/dist/@types/ports.d.ts +13 -1
- package/dist/@types/ports.d.ts.map +1 -1
- package/dist/@types/types/ports.d.ts +3 -2
- package/dist/@types/types/ports.d.ts.map +1 -1
- package/dist/@types/types/reaction.d.ts +5 -2
- package/dist/@types/types/reaction.d.ts.map +1 -1
- package/dist/index.cjs +82 -63
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +81 -63
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/ports.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/ports.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,KAAK,EACL,KAAK,EACL,QAAQ,EACR,OAAO,EACP,KAAK,EACN,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;;;;GAUG;AAEH;;GAEG;AACH,eAAO,MAAM,SAAS,4BAA6B,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAElD;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM,uCAajB,CAAC;AAEH;;;;;;;;;GASG;AACH,KAAK,QAAQ,CAAC,IAAI,SAAS,UAAU,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC;AAElE,wBAAgB,IAAI,CAAC,IAAI,SAAS,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,IACnD,UAAU,IAAI,KAAG,IAAI,CAQvC;AAGD,wBAAsB,cAAc,CAAC,IAAI,GAAE,QAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAa3E;AAED;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CACrB,QAAQ,CAAC,EAAE,QAAQ,GAClB,CAAC,IAAI,CAAC,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAGpC;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,iBAAiB,CAAC;AAEzC;;;;;;;;GAQG;AACH,eAAO,MAAM,KAAK,wCAEhB,CAAC;AAEH;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG;IAChD,OAAO,EAAE,CAAC,CAAC,SAAS,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACxD,UAAU,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;IACtC,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;IAClC,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;IACjC,OAAO,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;CAC7D,CAkDA"}
|
|
@@ -48,11 +48,12 @@ export interface Store extends Disposable {
|
|
|
48
48
|
*/
|
|
49
49
|
query: <E extends Schemas>(callback: (event: Committed<E, keyof E>) => void, query?: Query) => Promise<number>;
|
|
50
50
|
/**
|
|
51
|
-
* Polls the store for unblocked streams needing processing, ordered by lease watermark
|
|
51
|
+
* Polls the store for unblocked streams needing processing, ordered by lease watermark.
|
|
52
52
|
* @param limit - Maximum number of streams to poll.
|
|
53
|
+
* @param descending - Whether to poll streams in descending order (aka poll the most advanced first).
|
|
53
54
|
* @returns The polled streams.
|
|
54
55
|
*/
|
|
55
|
-
poll: (limit: number) => Promise<Poll[]>;
|
|
56
|
+
poll: (limit: number, descending?: boolean) => Promise<Poll[]>;
|
|
56
57
|
/**
|
|
57
58
|
* Lease streams for processing (e.g., for distributed consumers).
|
|
58
59
|
* @param leases - Lease requests for streams, including end-of-lease watermark, lease holder, and source stream.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../../src/types/ports.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,OAAO,EACP,KAAK,EACL,OAAO,EACR,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAEjD;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,KAAM,SAAQ,UAAU;IACvC;;OAEG;IACH,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B;;OAEG;IACH,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B;;;;;;;;OAQG;IACH,MAAM,EAAE,CAAC,CAAC,SAAS,OAAO,EACxB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,EAC3B,IAAI,EAAE,SAAS,EACf,eAAe,CAAC,EAAE,MAAM,KACrB,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAEtC;;;;;OAKG;IACH,KAAK,EAAE,CAAC,CAAC,SAAS,OAAO,EACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,IAAI,EAChD,KAAK,CAAC,EAAE,KAAK,KACV,OAAO,CAAC,MAAM,CAAC,CAAC;IAErB
|
|
1
|
+
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../../src/types/ports.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,OAAO,EACP,KAAK,EACL,OAAO,EACR,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAEjD;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,KAAM,SAAQ,UAAU;IACvC;;OAEG;IACH,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B;;OAEG;IACH,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B;;;;;;;;OAQG;IACH,MAAM,EAAE,CAAC,CAAC,SAAS,OAAO,EACxB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,EAC3B,IAAI,EAAE,SAAS,EACf,eAAe,CAAC,EAAE,MAAM,KACrB,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAEtC;;;;;OAKG;IACH,KAAK,EAAE,CAAC,CAAC,SAAS,OAAO,EACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,IAAI,EAChD,KAAK,CAAC,EAAE,KAAK,KACV,OAAO,CAAC,MAAM,CAAC,CAAC;IAErB;;;;;OAKG;IACH,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAE/D;;;;;OAKG;IACH,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAE7D;;;OAGG;IACH,GAAG,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAE3C;;;;OAIG;IACH,KAAK,EAAE,CACL,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,KACrC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CAChD"}
|
|
@@ -75,14 +75,17 @@ export type Poll = {
|
|
|
75
75
|
readonly at: number;
|
|
76
76
|
};
|
|
77
77
|
/**
|
|
78
|
-
* Options for
|
|
78
|
+
* Options for draining events from the store.
|
|
79
79
|
* @property streamLimit - Maximum number of streams to fetch.
|
|
80
80
|
* @property eventLimit - Maximum number of events to fetch per stream.
|
|
81
|
+
* @property leaseMillis - Maximum lease duration (in milliseconds).
|
|
82
|
+
* @property descending - Whether to fetch streams in descending order (aka fetch the most advanced first).
|
|
81
83
|
*/
|
|
82
|
-
export type
|
|
84
|
+
export type DrainOptions = {
|
|
83
85
|
readonly streamLimit?: number;
|
|
84
86
|
readonly eventLimit?: number;
|
|
85
87
|
readonly leaseMillis?: number;
|
|
88
|
+
readonly descending?: boolean;
|
|
86
89
|
};
|
|
87
90
|
/**
|
|
88
91
|
* Result of fetching events from the store for processing.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reaction.d.ts","sourceRoot":"","sources":["../../../src/types/reaction.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAExE;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,CAClE,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EACtB,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AAEzC;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,MAAM,CAAC,IAC7D;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACnC,CAAC,CACC,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KACnB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CAAC;AAE1D;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI;IACrE,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;CACnC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG;IAC7D,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,IAAI,GAAG;IACjB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"reaction.d.ts","sourceRoot":"","sources":["../../../src/types/reaction.ts"],"names":[],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -48,6 +48,7 @@ __export(index_exports, {
|
|
|
48
48
|
ValidationError: () => ValidationError,
|
|
49
49
|
ZodEmpty: () => ZodEmpty,
|
|
50
50
|
act: () => act,
|
|
51
|
+
build_tracer: () => build_tracer,
|
|
51
52
|
config: () => config,
|
|
52
53
|
dispose: () => dispose,
|
|
53
54
|
disposeAndExit: () => disposeAndExit,
|
|
@@ -431,11 +432,12 @@ var InMemoryStore = class {
|
|
|
431
432
|
/**
|
|
432
433
|
* Polls the store for unblocked streams needing processing, ordered by lease watermark ascending.
|
|
433
434
|
* @param limit - Maximum number of streams to poll.
|
|
435
|
+
* @param descending - Whether to poll streams in descending order (aka poll the most advanced first).
|
|
434
436
|
* @returns The polled streams.
|
|
435
437
|
*/
|
|
436
|
-
async poll(limit) {
|
|
438
|
+
async poll(limit, descending = false) {
|
|
437
439
|
await sleep();
|
|
438
|
-
return [...this._streams.values()].filter((s) => s.is_avaliable).sort((a, b) => a.at - b.at).slice(0, limit).map(({ stream, source, at }) => ({ stream, source, at }));
|
|
440
|
+
return [...this._streams.values()].filter((s) => s.is_avaliable).sort((a, b) => descending ? b.at - a.at : a.at - b.at).slice(0, limit).map(({ stream, source, at }) => ({ stream, source, at }));
|
|
439
441
|
}
|
|
440
442
|
/**
|
|
441
443
|
* Lease streams for processing (e.g., for distributed consumers).
|
|
@@ -519,6 +521,62 @@ var SNAP_EVENT = "__snapshot__";
|
|
|
519
521
|
var store = port(function store2(adapter) {
|
|
520
522
|
return adapter || new InMemoryStore();
|
|
521
523
|
});
|
|
524
|
+
function build_tracer(logLevel2) {
|
|
525
|
+
if (logLevel2 === "trace") {
|
|
526
|
+
return {
|
|
527
|
+
fetched: (fetched) => {
|
|
528
|
+
const data = Object.fromEntries(
|
|
529
|
+
fetched.map(({ stream, source, events }) => {
|
|
530
|
+
const key = source ? `${stream}<-${source}` : stream;
|
|
531
|
+
const value = Object.fromEntries(
|
|
532
|
+
events.map(({ id, stream: stream2, name }) => [id, { [stream2]: name }])
|
|
533
|
+
);
|
|
534
|
+
return [key, value];
|
|
535
|
+
})
|
|
536
|
+
);
|
|
537
|
+
logger.trace(data, "\u26A1\uFE0F fetch");
|
|
538
|
+
},
|
|
539
|
+
correlated: (leases) => {
|
|
540
|
+
const data = leases.map(({ stream }) => stream).join(" ");
|
|
541
|
+
logger.trace(`\u26A1\uFE0F correlate ${data}`);
|
|
542
|
+
},
|
|
543
|
+
leased: (leases) => {
|
|
544
|
+
const data = Object.fromEntries(
|
|
545
|
+
leases.map(({ stream, at, retry }) => [stream, { at, retry }])
|
|
546
|
+
);
|
|
547
|
+
logger.trace(data, "\u26A1\uFE0F lease");
|
|
548
|
+
},
|
|
549
|
+
acked: (leases) => {
|
|
550
|
+
const data = Object.fromEntries(
|
|
551
|
+
leases.map(({ stream, at, retry }) => [stream, { at, retry }])
|
|
552
|
+
);
|
|
553
|
+
logger.trace(data, "\u26A1\uFE0F ack");
|
|
554
|
+
},
|
|
555
|
+
blocked: (leases) => {
|
|
556
|
+
const data = Object.fromEntries(
|
|
557
|
+
leases.map(({ stream, at, retry, error }) => [
|
|
558
|
+
stream,
|
|
559
|
+
{ at, retry, error }
|
|
560
|
+
])
|
|
561
|
+
);
|
|
562
|
+
logger.trace(data, "\u26A1\uFE0F block");
|
|
563
|
+
}
|
|
564
|
+
};
|
|
565
|
+
} else {
|
|
566
|
+
return {
|
|
567
|
+
fetched: () => {
|
|
568
|
+
},
|
|
569
|
+
correlated: () => {
|
|
570
|
+
},
|
|
571
|
+
leased: () => {
|
|
572
|
+
},
|
|
573
|
+
acked: () => {
|
|
574
|
+
},
|
|
575
|
+
blocked: () => {
|
|
576
|
+
}
|
|
577
|
+
};
|
|
578
|
+
}
|
|
579
|
+
}
|
|
522
580
|
|
|
523
581
|
// src/signals.ts
|
|
524
582
|
process.once("SIGINT", async (arg) => {
|
|
@@ -657,40 +715,7 @@ async function action(me, action2, target, payload, reactingTo, skipValidation =
|
|
|
657
715
|
}
|
|
658
716
|
|
|
659
717
|
// src/act.ts
|
|
660
|
-
|
|
661
|
-
const data = Object.fromEntries(
|
|
662
|
-
fetch.map(({ stream, source, events }) => {
|
|
663
|
-
const key = source ? `${stream}<-${source}` : stream;
|
|
664
|
-
const value = Object.fromEntries(
|
|
665
|
-
events.map(({ id, stream: stream2, name }) => [id, { [stream2]: name }])
|
|
666
|
-
);
|
|
667
|
-
return [key, value];
|
|
668
|
-
})
|
|
669
|
-
);
|
|
670
|
-
logger.trace(data, "\u26A1\uFE0F fetch");
|
|
671
|
-
}
|
|
672
|
-
function traceCorrelated(leases) {
|
|
673
|
-
const data = leases.map(({ stream }) => stream).join(" ");
|
|
674
|
-
logger.trace(`\u26A1\uFE0F correlate ${data}`);
|
|
675
|
-
}
|
|
676
|
-
function traceLeased(leases) {
|
|
677
|
-
const data = Object.fromEntries(
|
|
678
|
-
leases.map(({ stream, at, retry }) => [stream, { at, retry }])
|
|
679
|
-
);
|
|
680
|
-
logger.trace(data, "\u26A1\uFE0F lease");
|
|
681
|
-
}
|
|
682
|
-
function traceAcked(leases) {
|
|
683
|
-
const data = Object.fromEntries(
|
|
684
|
-
leases.map(({ stream, at, retry }) => [stream, { at, retry }])
|
|
685
|
-
);
|
|
686
|
-
logger.trace(data, "\u26A1\uFE0F ack");
|
|
687
|
-
}
|
|
688
|
-
function traceBlocked(leases) {
|
|
689
|
-
const data = Object.fromEntries(
|
|
690
|
-
leases.map(({ stream, at, retry, error }) => [stream, { at, retry, error }])
|
|
691
|
-
);
|
|
692
|
-
logger.trace(data, "\u26A1\uFE0F block");
|
|
693
|
-
}
|
|
718
|
+
var tracer = build_tracer(config().logLevel);
|
|
694
719
|
var Act = class {
|
|
695
720
|
/**
|
|
696
721
|
* Create a new Act orchestrator.
|
|
@@ -834,24 +859,6 @@ var Act = class {
|
|
|
834
859
|
}
|
|
835
860
|
return { lease, at };
|
|
836
861
|
}
|
|
837
|
-
/**
|
|
838
|
-
* Fetches new events from store according to the fetch options.
|
|
839
|
-
* @param options - Fetch options.
|
|
840
|
-
* @returns Fetched streams with next events to process.
|
|
841
|
-
*/
|
|
842
|
-
async fetch({ streamLimit = 10, eventLimit = 10 }) {
|
|
843
|
-
const polled = await store().poll(streamLimit);
|
|
844
|
-
return Promise.all(
|
|
845
|
-
polled.map(async ({ stream, source, at }) => {
|
|
846
|
-
const events = await this.query_array({
|
|
847
|
-
stream: source,
|
|
848
|
-
after: at,
|
|
849
|
-
limit: eventLimit
|
|
850
|
-
});
|
|
851
|
-
return { stream, source, events };
|
|
852
|
-
})
|
|
853
|
-
);
|
|
854
|
-
}
|
|
855
862
|
/**
|
|
856
863
|
* Drains and processes events from the store, triggering reactions and updating state.
|
|
857
864
|
*
|
|
@@ -865,14 +872,25 @@ var Act = class {
|
|
|
865
872
|
async drain({
|
|
866
873
|
streamLimit = 10,
|
|
867
874
|
eventLimit = 10,
|
|
868
|
-
leaseMillis = 1e4
|
|
875
|
+
leaseMillis = 1e4,
|
|
876
|
+
descending = false
|
|
869
877
|
} = {}) {
|
|
870
878
|
if (!this._drain_locked) {
|
|
871
879
|
try {
|
|
872
880
|
this._drain_locked = true;
|
|
873
|
-
const
|
|
874
|
-
|
|
875
|
-
|
|
881
|
+
const polled = await store().poll(streamLimit, descending);
|
|
882
|
+
const fetched = await Promise.all(
|
|
883
|
+
polled.map(async ({ stream, source, at }) => {
|
|
884
|
+
const events = await this.query_array({
|
|
885
|
+
stream: source,
|
|
886
|
+
after: at,
|
|
887
|
+
limit: eventLimit
|
|
888
|
+
});
|
|
889
|
+
return { stream, source, events };
|
|
890
|
+
})
|
|
891
|
+
);
|
|
892
|
+
fetched.length && tracer.fetched(fetched);
|
|
893
|
+
const [last_at, count] = fetched.reduce(
|
|
876
894
|
([last_at2, count2], { events }) => [
|
|
877
895
|
Math.max(last_at2, events.at(-1)?.id || 0),
|
|
878
896
|
count2 + events.length
|
|
@@ -881,7 +899,7 @@ var Act = class {
|
|
|
881
899
|
);
|
|
882
900
|
if (count > 0) {
|
|
883
901
|
const leases = /* @__PURE__ */ new Map();
|
|
884
|
-
|
|
902
|
+
fetched.forEach(({ stream, events }) => {
|
|
885
903
|
const payloads = events.flatMap((event) => {
|
|
886
904
|
const register = this.registry.events[event.name];
|
|
887
905
|
if (!register) return [];
|
|
@@ -911,7 +929,7 @@ var Act = class {
|
|
|
911
929
|
leaseMillis
|
|
912
930
|
);
|
|
913
931
|
if (leased.length) {
|
|
914
|
-
|
|
932
|
+
tracer.leased(leased);
|
|
915
933
|
const handled = await Promise.all(
|
|
916
934
|
leased.map(
|
|
917
935
|
(lease) => this.handle(lease, leases.get(lease.stream).payloads)
|
|
@@ -921,14 +939,14 @@ var Act = class {
|
|
|
921
939
|
handled.filter(({ error }) => !error).map(({ at, lease }) => ({ ...lease, at }))
|
|
922
940
|
);
|
|
923
941
|
if (acked.length) {
|
|
924
|
-
|
|
942
|
+
tracer.acked(acked);
|
|
925
943
|
this.emit("acked", acked);
|
|
926
944
|
}
|
|
927
945
|
const blocked = await store().block(
|
|
928
946
|
handled.filter(({ block }) => block).map(({ lease, error }) => ({ ...lease, error }))
|
|
929
947
|
);
|
|
930
948
|
if (blocked.length) {
|
|
931
|
-
|
|
949
|
+
tracer.blocked(blocked);
|
|
932
950
|
this.emit("blocked", blocked);
|
|
933
951
|
}
|
|
934
952
|
return { leased, acked, blocked };
|
|
@@ -972,7 +990,7 @@ var Act = class {
|
|
|
972
990
|
payloads
|
|
973
991
|
}));
|
|
974
992
|
const leased = await store().lease(leases, 0);
|
|
975
|
-
leased.length &&
|
|
993
|
+
leased.length && tracer.correlated(leased);
|
|
976
994
|
return { leased, last_id };
|
|
977
995
|
}
|
|
978
996
|
return { leased: [], last_id };
|
|
@@ -1173,6 +1191,7 @@ function action_builder(state2) {
|
|
|
1173
1191
|
ValidationError,
|
|
1174
1192
|
ZodEmpty,
|
|
1175
1193
|
act,
|
|
1194
|
+
build_tracer,
|
|
1176
1195
|
config,
|
|
1177
1196
|
dispose,
|
|
1178
1197
|
disposeAndExit,
|