station-broadcast 1.0.2 → 1.0.4
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/adapters/index.d.ts +6 -1
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/memory.d.ts +8 -1
- package/dist/adapters/memory.d.ts.map +1 -1
- package/dist/adapters/memory.js +60 -0
- package/dist/adapters/memory.js.map +1 -1
- package/dist/broadcast-runner.d.ts +62 -5
- package/dist/broadcast-runner.d.ts.map +1 -1
- package/dist/broadcast-runner.js +255 -35
- package/dist/broadcast-runner.js.map +1 -1
- package/dist/broadcast.d.ts +17 -0
- package/dist/broadcast.d.ts.map +1 -1
- package/dist/broadcast.js +3 -0
- package/dist/broadcast.js.map +1 -1
- package/dist/dynamic.d.ts +43 -0
- package/dist/dynamic.d.ts.map +1 -0
- package/dist/dynamic.js +163 -0
- package/dist/dynamic.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +38 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/util.d.ts +7 -2
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +8 -2
- package/dist/util.js.map +1 -1
- package/package.json +8 -4
- package/src/adapters/index.ts +9 -0
- package/src/adapters/memory.ts +60 -0
- package/src/broadcast-runner.ts +305 -37
- package/src/broadcast.ts +23 -0
- package/src/dynamic.ts +245 -0
- package/src/index.ts +10 -0
- package/src/types.ts +43 -0
- package/src/util.ts +19 -6
package/dist/adapters/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BroadcastRun, BroadcastRunPatch, BroadcastRunStatus, BroadcastNodeRun, BroadcastNodeRunPatch } from "../types.js";
|
|
1
|
+
import type { BroadcastRun, BroadcastRunPatch, BroadcastRunStatus, BroadcastNodeRun, BroadcastNodeRunPatch, DynamicBroadcastSpec } from "../types.js";
|
|
2
2
|
export interface BroadcastQueueAdapter {
|
|
3
3
|
addBroadcastRun(run: BroadcastRun): Promise<void>;
|
|
4
4
|
getBroadcastRun(id: string): Promise<BroadcastRun | null>;
|
|
@@ -12,6 +12,11 @@ export interface BroadcastQueueAdapter {
|
|
|
12
12
|
getNodeRun(id: string): Promise<BroadcastNodeRun | null>;
|
|
13
13
|
updateNodeRun(id: string, patch: BroadcastNodeRunPatch): Promise<void>;
|
|
14
14
|
getNodeRuns(broadcastRunId: string): Promise<BroadcastNodeRun[]>;
|
|
15
|
+
saveDefinition?(spec: DynamicBroadcastSpec): Promise<DynamicBroadcastSpec>;
|
|
16
|
+
getDefinition?(name: string, version?: number): Promise<DynamicBroadcastSpec | null>;
|
|
17
|
+
listDefinitions?(): Promise<DynamicBroadcastSpec[]>;
|
|
18
|
+
listDefinitionVersions?(name: string): Promise<DynamicBroadcastSpec[]>;
|
|
19
|
+
deleteDefinition?(name: string): Promise<boolean>;
|
|
15
20
|
generateId(): string;
|
|
16
21
|
ping(): Promise<boolean>;
|
|
17
22
|
close?(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,qBAAqB;IAEpC,eAAe,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC1D,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,mBAAmB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC/C,uBAAuB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACnD,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAClE,yBAAyB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnG,kBAAkB,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAGrF,UAAU,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACzD,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAIjE,cAAc,CAAC,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC3E,aAAa,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;IACrF,eAAe,CAAC,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACpD,sBAAsB,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACvE,gBAAgB,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAGlD,UAAU,IAAI,MAAM,CAAC;IACrB,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAwCA,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { BroadcastQueueAdapter } from "./index.js";
|
|
2
|
-
import type { BroadcastRun, BroadcastRunPatch, BroadcastRunStatus, BroadcastNodeRun, BroadcastNodeRunPatch } from "../types.js";
|
|
2
|
+
import type { BroadcastRun, BroadcastRunPatch, BroadcastRunStatus, BroadcastNodeRun, BroadcastNodeRunPatch, DynamicBroadcastSpec } from "../types.js";
|
|
3
3
|
export declare class BroadcastMemoryAdapter implements BroadcastQueueAdapter {
|
|
4
4
|
private runs;
|
|
5
5
|
private nodeRuns;
|
|
6
|
+
/** name -> version -> spec (full version history retained). */
|
|
7
|
+
private definitions;
|
|
6
8
|
addBroadcastRun(run: BroadcastRun): Promise<void>;
|
|
7
9
|
getBroadcastRun(id: string): Promise<BroadcastRun | null>;
|
|
8
10
|
updateBroadcastRun(id: string, patch: BroadcastRunPatch): Promise<void>;
|
|
@@ -15,6 +17,11 @@ export declare class BroadcastMemoryAdapter implements BroadcastQueueAdapter {
|
|
|
15
17
|
getNodeRun(id: string): Promise<BroadcastNodeRun | null>;
|
|
16
18
|
updateNodeRun(id: string, patch: BroadcastNodeRunPatch): Promise<void>;
|
|
17
19
|
getNodeRuns(broadcastRunId: string): Promise<BroadcastNodeRun[]>;
|
|
20
|
+
saveDefinition(spec: DynamicBroadcastSpec): Promise<DynamicBroadcastSpec>;
|
|
21
|
+
getDefinition(name: string, version?: number): Promise<DynamicBroadcastSpec | null>;
|
|
22
|
+
listDefinitions(): Promise<DynamicBroadcastSpec[]>;
|
|
23
|
+
listDefinitionVersions(name: string): Promise<DynamicBroadcastSpec[]>;
|
|
24
|
+
deleteDefinition(name: string): Promise<boolean>;
|
|
18
25
|
generateId(): string;
|
|
19
26
|
ping(): Promise<boolean>;
|
|
20
27
|
close(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/adapters/memory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/adapters/memory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AAErB,qBAAa,sBAAuB,YAAW,qBAAqB;IAClE,OAAO,CAAC,IAAI,CAAmC;IAC/C,OAAO,CAAC,QAAQ,CAAuC;IACvD,+DAA+D;IAC/D,OAAO,CAAC,WAAW,CAAwD;IAErE,eAAe,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAIzD,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAcvE,mBAAmB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAW9C,uBAAuB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAMlD,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAMjE,yBAAyB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAQlG,kBAAkB,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBpF,UAAU,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAIxD,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IActE,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAQhE,cAAc,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAkBzE,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAQnF,eAAe,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAYlD,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAMrE,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUtD,UAAU,IAAI,MAAM;IAId,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAIxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAK7B"}
|
package/dist/adapters/memory.js
CHANGED
|
@@ -2,6 +2,8 @@ import { randomUUID } from "node:crypto";
|
|
|
2
2
|
export class BroadcastMemoryAdapter {
|
|
3
3
|
runs = new Map();
|
|
4
4
|
nodeRuns = new Map();
|
|
5
|
+
/** name -> version -> spec (full version history retained). */
|
|
6
|
+
definitions = new Map();
|
|
5
7
|
async addBroadcastRun(run) {
|
|
6
8
|
this.runs.set(run.id, run);
|
|
7
9
|
}
|
|
@@ -94,6 +96,63 @@ export class BroadcastMemoryAdapter {
|
|
|
94
96
|
async getNodeRuns(broadcastRunId) {
|
|
95
97
|
return Array.from(this.nodeRuns.values()).filter((nr) => nr.broadcastRunId === broadcastRunId);
|
|
96
98
|
}
|
|
99
|
+
// ─── Dynamic broadcast definitions ───────────────────────────────
|
|
100
|
+
async saveDefinition(spec) {
|
|
101
|
+
let versions = this.definitions.get(spec.name);
|
|
102
|
+
if (!versions) {
|
|
103
|
+
versions = new Map();
|
|
104
|
+
this.definitions.set(spec.name, versions);
|
|
105
|
+
}
|
|
106
|
+
const latestVersion = Math.max(0, ...Array.from(versions.keys()));
|
|
107
|
+
const next = {
|
|
108
|
+
...spec,
|
|
109
|
+
version: latestVersion + 1,
|
|
110
|
+
createdAt: spec.createdAt ?? new Date(),
|
|
111
|
+
updatedAt: new Date(),
|
|
112
|
+
deletedAt: undefined,
|
|
113
|
+
};
|
|
114
|
+
versions.set(next.version, next);
|
|
115
|
+
return next;
|
|
116
|
+
}
|
|
117
|
+
async getDefinition(name, version) {
|
|
118
|
+
const versions = this.definitions.get(name);
|
|
119
|
+
if (!versions || versions.size === 0)
|
|
120
|
+
return null;
|
|
121
|
+
if (version !== undefined)
|
|
122
|
+
return versions.get(version) ?? null;
|
|
123
|
+
const latest = Math.max(...versions.keys());
|
|
124
|
+
return versions.get(latest) ?? null;
|
|
125
|
+
}
|
|
126
|
+
async listDefinitions() {
|
|
127
|
+
const out = [];
|
|
128
|
+
for (const versions of this.definitions.values()) {
|
|
129
|
+
if (versions.size === 0)
|
|
130
|
+
continue;
|
|
131
|
+
const latest = Math.max(...versions.keys());
|
|
132
|
+
const spec = versions.get(latest);
|
|
133
|
+
if (spec.deletedAt)
|
|
134
|
+
continue;
|
|
135
|
+
out.push(spec);
|
|
136
|
+
}
|
|
137
|
+
return out.sort((a, b) => a.name.localeCompare(b.name));
|
|
138
|
+
}
|
|
139
|
+
async listDefinitionVersions(name) {
|
|
140
|
+
const versions = this.definitions.get(name);
|
|
141
|
+
if (!versions)
|
|
142
|
+
return [];
|
|
143
|
+
return Array.from(versions.values()).sort((a, b) => b.version - a.version);
|
|
144
|
+
}
|
|
145
|
+
async deleteDefinition(name) {
|
|
146
|
+
const versions = this.definitions.get(name);
|
|
147
|
+
if (!versions || versions.size === 0)
|
|
148
|
+
return false;
|
|
149
|
+
const latest = Math.max(...versions.keys());
|
|
150
|
+
const spec = versions.get(latest);
|
|
151
|
+
if (spec.deletedAt)
|
|
152
|
+
return false;
|
|
153
|
+
versions.set(latest, { ...spec, deletedAt: new Date() });
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
97
156
|
generateId() {
|
|
98
157
|
return randomUUID();
|
|
99
158
|
}
|
|
@@ -103,6 +162,7 @@ export class BroadcastMemoryAdapter {
|
|
|
103
162
|
async close() {
|
|
104
163
|
this.runs.clear();
|
|
105
164
|
this.nodeRuns.clear();
|
|
165
|
+
this.definitions.clear();
|
|
106
166
|
}
|
|
107
167
|
}
|
|
108
168
|
//# sourceMappingURL=memory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/adapters/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/adapters/memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,12 +3,26 @@ import type { BroadcastDefinition } from "./broadcast.js";
|
|
|
3
3
|
import type { BroadcastQueueAdapter } from "./adapters/index.js";
|
|
4
4
|
import type { BroadcastSubscriber } from "./subscribers/index.js";
|
|
5
5
|
import type { BroadcastRun, BroadcastNodeRun, FailurePolicy } from "./types.js";
|
|
6
|
+
/** Minimal interface a schedule reconciler needs from the runner. */
|
|
7
|
+
export interface BroadcastScheduleReconciler {
|
|
8
|
+
tick(): Promise<void>;
|
|
9
|
+
}
|
|
6
10
|
export interface BroadcastRunnerOptions {
|
|
7
11
|
signalRunner: SignalRunner;
|
|
8
12
|
broadcastsDir?: string;
|
|
9
13
|
adapter?: BroadcastQueueAdapter;
|
|
10
14
|
pollIntervalMs?: number;
|
|
11
15
|
subscribers?: BroadcastSubscriber[];
|
|
16
|
+
/**
|
|
17
|
+
* How often (in poll ticks) to refresh the dynamic broadcast registry from
|
|
18
|
+
* the adapter. Default: 5. Set to 0 to disable reconciliation.
|
|
19
|
+
*/
|
|
20
|
+
reconcileEveryNTicks?: number;
|
|
21
|
+
/**
|
|
22
|
+
* Optional dynamic schedule reconciler. When set, the runner ticks it on
|
|
23
|
+
* the same cadence as broadcast discovery. Wire `station-schedules` here.
|
|
24
|
+
*/
|
|
25
|
+
scheduleReconciler?: BroadcastScheduleReconciler;
|
|
12
26
|
}
|
|
13
27
|
export declare class BroadcastRunner {
|
|
14
28
|
private signalRunner;
|
|
@@ -17,23 +31,40 @@ export declare class BroadcastRunner {
|
|
|
17
31
|
private broadcastsDir?;
|
|
18
32
|
private pollIntervalMs;
|
|
19
33
|
private subscribers;
|
|
20
|
-
|
|
34
|
+
/** File-defined broadcasts (immutable, discovered at startup). */
|
|
35
|
+
private fileRegistry;
|
|
36
|
+
/**
|
|
37
|
+
* Dynamic broadcasts (loaded from the adapter, refreshed on a cadence).
|
|
38
|
+
* Lives in a separate namespace so names can collide harmlessly.
|
|
39
|
+
*/
|
|
40
|
+
private dynamicRegistry;
|
|
41
|
+
private signalRegistry;
|
|
21
42
|
private recurringSchedules;
|
|
43
|
+
private reconcileEveryNTicks;
|
|
44
|
+
private scheduleReconciler?;
|
|
45
|
+
private tickCount;
|
|
22
46
|
private running;
|
|
23
47
|
private stopping;
|
|
24
48
|
private ticking;
|
|
25
49
|
private pollTimer;
|
|
26
50
|
constructor(options: BroadcastRunnerOptions);
|
|
27
|
-
/**
|
|
51
|
+
/**
|
|
52
|
+
* List all registered broadcast definitions with metadata. Includes both
|
|
53
|
+
* file-defined and dynamic broadcasts; the `kind` field disambiguates.
|
|
54
|
+
*/
|
|
28
55
|
listRegistered(): Array<{
|
|
29
56
|
name: string;
|
|
57
|
+
kind: "file" | "dynamic";
|
|
30
58
|
nodeCount: number;
|
|
31
59
|
failurePolicy: FailurePolicy;
|
|
32
60
|
timeout?: number;
|
|
33
61
|
interval?: string;
|
|
62
|
+
version?: number;
|
|
34
63
|
}>;
|
|
35
|
-
/** Check whether a broadcast is registered by name. */
|
|
64
|
+
/** Check whether a broadcast is registered (file OR dynamic) by name. */
|
|
36
65
|
hasBroadcast(name: string): boolean;
|
|
66
|
+
/** Whether a dynamic broadcast with this name is currently registered. */
|
|
67
|
+
hasDynamicBroadcast(name: string): boolean;
|
|
37
68
|
/** Register a broadcast definition explicitly (alternative to auto-discovery). */
|
|
38
69
|
register(definition: BroadcastDefinition): this;
|
|
39
70
|
subscribe(subscriber: BroadcastSubscriber): this;
|
|
@@ -45,10 +76,36 @@ export declare class BroadcastRunner {
|
|
|
45
76
|
}): Promise<BroadcastRun | null>;
|
|
46
77
|
cancel(broadcastRunId: string): Promise<boolean>;
|
|
47
78
|
/**
|
|
48
|
-
* Trigger a broadcast by name.
|
|
49
|
-
*
|
|
79
|
+
* Trigger a broadcast by name. Resolves to the file-defined registry first,
|
|
80
|
+
* then falls back to dynamic broadcasts. For dynamic broadcasts, the current
|
|
81
|
+
* spec is snapshotted into the run record so spec edits don't mutate the run.
|
|
50
82
|
*/
|
|
51
83
|
trigger(broadcastName: string, input: unknown): Promise<string>;
|
|
84
|
+
/** Trigger a dynamic broadcast and snapshot its current spec into the run. */
|
|
85
|
+
triggerDynamic(name: string, input: unknown): Promise<string>;
|
|
86
|
+
/**
|
|
87
|
+
* Tracks specs that failed to materialize so each tick can retry them when
|
|
88
|
+
* the signal registry changes. Without this, a temporarily missing signal
|
|
89
|
+
* would wedge a broadcast permanently — even after the signal returns —
|
|
90
|
+
* because the spec's version wouldn't change.
|
|
91
|
+
*/
|
|
92
|
+
private failedMaterializations;
|
|
93
|
+
private lastSignalRegistrySize;
|
|
94
|
+
/** Force a refresh of the dynamic broadcast registry from the adapter. */
|
|
95
|
+
reconcileDynamicDefinitions(): Promise<void>;
|
|
96
|
+
private refreshSignalRegistry;
|
|
97
|
+
/**
|
|
98
|
+
* Whether any pending or running BroadcastRun exists for `broadcastName`.
|
|
99
|
+
* Used by the schedule reconciler to skip overlapping fires.
|
|
100
|
+
*/
|
|
101
|
+
hasPendingOrRunningForBroadcast(broadcastName: string): Promise<boolean>;
|
|
102
|
+
/**
|
|
103
|
+
* Resolve the BroadcastDefinition to use for a run. For runs with a
|
|
104
|
+
* `definitionSnapshot`, the snapshot is materialized fresh so spec edits
|
|
105
|
+
* after trigger time don't affect this run. Otherwise the file registry is
|
|
106
|
+
* consulted, then the live dynamic registry as a fallback.
|
|
107
|
+
*/
|
|
108
|
+
private resolveDefinitionForRun;
|
|
52
109
|
start(): Promise<void>;
|
|
53
110
|
stop(options?: {
|
|
54
111
|
graceful?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broadcast-runner.d.ts","sourceRoot":"","sources":["../src/broadcast-runner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"broadcast-runner.d.ts","sourceRoot":"","sources":["../src/broadcast-runner.ts"],"names":[],"mappings":"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"}
|