@beignet/core 0.0.54 → 0.0.56
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/CHANGELOG.md +19 -0
- package/README.md +59 -1
- package/dist/broadcasting/client.d.ts +9 -2
- package/dist/broadcasting/client.d.ts.map +1 -1
- package/dist/broadcasting/client.js +107 -27
- package/dist/broadcasting/client.js.map +1 -1
- package/dist/broadcasting/index.d.ts +4 -2
- package/dist/broadcasting/index.d.ts.map +1 -1
- package/dist/broadcasting/index.js +4 -2
- package/dist/broadcasting/index.js.map +1 -1
- package/dist/broadcasting/server.d.ts.map +1 -1
- package/dist/broadcasting/server.js +3 -3
- package/dist/broadcasting/server.js.map +1 -1
- package/package.json +1 -1
- package/skills/app-architecture/SKILL.md +28 -3
- package/src/broadcasting/client.ts +172 -30
- package/src/broadcasting/index.ts +4 -2
- package/src/broadcasting/server.ts +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# @beignet/core
|
|
2
2
|
|
|
3
|
+
## 0.0.56
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- b2bae46: Generate small features with named workflows in `use-cases.ts`, support both compact and split layouts in generators and diagnostics, and document when to split workflows into separate files.
|
|
8
|
+
|
|
9
|
+
## 0.0.55
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- a3085a6: Allow broadcast connections to configure lifetimes up to one hour while keeping
|
|
14
|
+
the 60-second default. Browser clients honor the server's advertised lifetime
|
|
15
|
+
with bounded watchdog grace, preserve heartbeat timeouts, and reconcile on
|
|
16
|
+
renewal. Align CLI diagnostics and hosting guidance with configurable lifetimes.
|
|
17
|
+
- a3085a6: Coordinate broadcast refreshes with matching pending mutations or custom write
|
|
18
|
+
gates. Add connection admission with automatic resource cleanup, and expose
|
|
19
|
+
connection/reconciliation reasons. Keep the 60-second default, require valid
|
|
20
|
+
lifetime metadata, and use explicit connection-wide renewal control frames.
|
|
21
|
+
|
|
3
22
|
## 0.0.54
|
|
4
23
|
|
|
5
24
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -14,6 +14,11 @@ idempotency, locks, outbox, mail, notifications, payments, search, webhooks,
|
|
|
14
14
|
feature flags, error reporting, encryption, broadcasting, schedules, uploads, entitlements, pagination
|
|
15
15
|
helpers, testing helpers, and OpenAPI generation.
|
|
16
16
|
|
|
17
|
+
Small features can keep named workflows in `features/<feature>/use-cases.ts`.
|
|
18
|
+
Use `use-cases/` with an `index.ts` when workflows need separate modules; retain
|
|
19
|
+
the same exports so route and test imports stay unchanged. See
|
|
20
|
+
[use-case organization](https://beignetjs.com/application#organize-use-cases).
|
|
21
|
+
|
|
17
22
|
## Installation
|
|
18
23
|
|
|
19
24
|
```bash
|
|
@@ -2800,11 +2805,64 @@ channels have no execution ordering guarantee.
|
|
|
2800
2805
|
|
|
2801
2806
|
The browser protocol has no replay IDs. Limits are 20 subscriptions, an 8 KiB
|
|
2802
2807
|
encoded request, 64 KiB event data, 1 MiB buffers, 25-second heartbeats,
|
|
2803
|
-
10-second readiness waits, and
|
|
2808
|
+
10-second readiness waits, and a default stream lifetime of 60 seconds.
|
|
2809
|
+
`createBroadcastRoute` in `@beignet/next` or `@beignet/web` accepts
|
|
2810
|
+
`maxLifetimeMs` as a positive safe integer up to `3_600_000` (one hour), including
|
|
2811
|
+
`240_000` for four-minute streams. Leave setup/cleanup headroom below your
|
|
2812
|
+
hosting request deadline. Longer streams reduce renewal/refetch frequency and
|
|
2813
|
+
increase the interval between authorization checks.
|
|
2814
|
+
|
|
2815
|
+
The client honors the lifetime advertised in the first readiness message,
|
|
2816
|
+
with five seconds of watchdog grace measured from streaming response receipt.
|
|
2817
|
+
Additional readiness messages and heartbeats never extend the connection
|
|
2818
|
+
deadline. Every readiness message must include a valid `maxLifetimeMs`;
|
|
2819
|
+
missing or invalid lifetimes block subscriptions. Heartbeat loss closes a stream
|
|
2820
|
+
after 55 seconds without data, independently of its lifetime. Planned renewals still invoke `onSync`
|
|
2821
|
+
because events can be missed during reconnection. Terminal 4xx
|
|
2804
2822
|
responses block until explicit resume; 429/5xx retry with jitter and respect
|
|
2805
2823
|
`Retry-After`. Retry deadlines survive subscription changes. See the
|
|
2806
2824
|
[broadcasting guide](https://beignetjs.com/broadcasting).
|
|
2807
2825
|
|
|
2826
|
+
### Diagnose connection changes
|
|
2827
|
+
|
|
2828
|
+
`onSync(info)` and `onStatusChange(status, info)` receive
|
|
2829
|
+
`BroadcastConnectionInfo` from `@beignet/core/broadcasting/client`. Callbacks
|
|
2830
|
+
may omit the metadata argument when they do not need it.
|
|
2831
|
+
`createBroadcastQuerySubscription` forwards status metadata and accepts an
|
|
2832
|
+
optional `onSync(info)` observer; its reconciliation is still scheduled even
|
|
2833
|
+
when that observer throws. This notification describes readiness, not completion
|
|
2834
|
+
of queued or gated query refreshes. Do not refetch from that observer to bypass
|
|
2835
|
+
the gate accidentally.
|
|
2836
|
+
|
|
2837
|
+
| `info.reason` | What Beignet knows |
|
|
2838
|
+
| --- | --- |
|
|
2839
|
+
| `initial` | The first physical connection attempt. |
|
|
2840
|
+
| `planned-renewal` | The server explicitly announced renewal and then ended the stream normally without further traffic. |
|
|
2841
|
+
| `subscription-change` | Adding or removing a distinct channel restarted the multiplexed connection. |
|
|
2842
|
+
| `interruption` | A timeout, transport/protocol failure, or retryable rejection interrupted the connection. |
|
|
2843
|
+
| `unknown` | An unexplained EOF, explicit resume, or browser wakeup has no more precise known cause. |
|
|
2844
|
+
|
|
2845
|
+
Readiness reports the reason for that physical connection; another observer
|
|
2846
|
+
joining an already-ready channel sees the same information. Reconnecting status
|
|
2847
|
+
reports the known reason for restarting. An elapsed lifetime alone never proves
|
|
2848
|
+
planned renewal. Servers send an explicit, connection-wide renewal control frame
|
|
2849
|
+
before closing normally. An unexplained EOF stays `unknown`. A renewal frame
|
|
2850
|
+
followed by a stall produces `interruption` when a watchdog fires. Further traffic
|
|
2851
|
+
after the frame makes a later EOF `unknown`, including an incomplete frame.
|
|
2852
|
+
Reconciliation continues after **every** renewal because events have no replay.
|
|
2853
|
+
Planned renewal is a lifecycle change, not an `onError` failure.
|
|
2854
|
+
|
|
2855
|
+
Routes use the existing `broadcast` instrumentation watcher for admission,
|
|
2856
|
+
connection, and cleanup events. Server closure details report `planned-renewal`,
|
|
2857
|
+
`provider-disconnect`, `buffer-overflow`, `setup-failure`, or `unknown` as known
|
|
2858
|
+
locally; the server cannot infer why a browser cancelled. An optional
|
|
2859
|
+
`instrumentation` sink on `createBroadcastClient` uses the existing
|
|
2860
|
+
`ProviderInstrumentationPort` to record `broadcast.connecting`, `broadcast.ready`,
|
|
2861
|
+
and `broadcast.closed` with browser reasons. These events contain safe counts,
|
|
2862
|
+
durations, and reasons, never headers, credentials, payloads, or channel params.
|
|
2863
|
+
Keep custom logging equally restrained.
|
|
2864
|
+
|
|
2865
|
+
|
|
2808
2866
|
## License
|
|
2809
2867
|
|
|
2810
2868
|
MIT
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
+
import { type ProviderInstrumentationPort } from "../providers/instrumentation.js";
|
|
1
2
|
import { type ChannelDefinition, type InferChannelEvent, type InferChannelParams } from "./index.js";
|
|
2
3
|
export type BroadcastClientStatus = "connecting" | "connected" | "reconnecting" | "blocked" | "closed";
|
|
4
|
+
/** Why this physical connection was opened, or why it is reconnecting. */
|
|
5
|
+
export interface BroadcastConnectionInfo {
|
|
6
|
+
readonly reason: "initial" | "planned-renewal" | "subscription-change" | "interruption" | "unknown";
|
|
7
|
+
}
|
|
3
8
|
/** Safe connection/protocol failure; application callback errors are reported separately. */
|
|
4
9
|
export declare class BroadcastClientError extends Error {
|
|
5
10
|
readonly retryable: boolean;
|
|
@@ -15,9 +20,9 @@ export interface BroadcastClient {
|
|
|
15
20
|
params: InferChannelParams<C>;
|
|
16
21
|
onEvent: (event: InferChannelEvent<C>) => void | Promise<void>;
|
|
17
22
|
/** Refetch authoritative state after initial readiness and every recovered connection. */
|
|
18
|
-
onSync: () => void | Promise<void>;
|
|
23
|
+
onSync: (info: BroadcastConnectionInfo) => void | Promise<void>;
|
|
19
24
|
onError?: (error: unknown) => void;
|
|
20
|
-
onStatusChange?: (status: BroadcastClientStatus) => void;
|
|
25
|
+
onStatusChange?: (status: BroadcastClientStatus, info: BroadcastConnectionInfo) => void;
|
|
21
26
|
}): BroadcastClientSubscription;
|
|
22
27
|
/** Merge these optional headers into the app's typed HTTP client to opt into exclusion. */
|
|
23
28
|
getRequestHeaders(): Record<string, string>;
|
|
@@ -28,6 +33,8 @@ export interface BroadcastClient {
|
|
|
28
33
|
}
|
|
29
34
|
export interface BroadcastClientOptions {
|
|
30
35
|
url: string;
|
|
36
|
+
/** Optional existing instrumentation sink; records causes and counts, never credentials or channel params. */
|
|
37
|
+
instrumentation?: ProviderInstrumentationPort;
|
|
31
38
|
/** Resolved afresh for every request. Never place credentials in the URL. */
|
|
32
39
|
headers?: HeadersInit | (() => HeadersInit | Promise<HeadersInit>);
|
|
33
40
|
credentials?: RequestCredentials;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/broadcasting/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,iBAAiB,EAEtB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EAGxB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,qBAAqB,GAC7B,YAAY,GACZ,WAAW,GACX,cAAc,GACd,SAAS,GACT,QAAQ,CAAC;AAEb,6FAA6F;AAC7F,qBAAa,oBAAqB,SAAQ,KAAK;IAG3C,QAAQ,CAAC,SAAS,EAAE,OAAO;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;gBAFxB,OAAO,EAAE,MAAM,EACN,SAAS,EAAE,OAAO,EAClB,MAAM,CAAC,EAAE,MAAM,YAAA;CAK3B;AAED,MAAM,WAAW,2BAA2B;IAC1C,WAAW,IAAI,IAAI,CAAC;IACpB,SAAS,IAAI,qBAAqB,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,CAAC,SAAS,iBAAiB,EACnC,OAAO,EAAE,CAAC,EACV,OAAO,EAAE;QACP,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAC9B,OAAO,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/D,0FAA0F;QAC1F,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/broadcasting/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAGL,KAAK,iBAAiB,EAEtB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EAGxB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,qBAAqB,GAC7B,YAAY,GACZ,WAAW,GACX,cAAc,GACd,SAAS,GACT,QAAQ,CAAC;AAEb,0EAA0E;AAC1E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EACX,SAAS,GACT,iBAAiB,GACjB,qBAAqB,GACrB,cAAc,GACd,SAAS,CAAC;CACf;AAED,6FAA6F;AAC7F,qBAAa,oBAAqB,SAAQ,KAAK;IAG3C,QAAQ,CAAC,SAAS,EAAE,OAAO;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;gBAFxB,OAAO,EAAE,MAAM,EACN,SAAS,EAAE,OAAO,EAClB,MAAM,CAAC,EAAE,MAAM,YAAA;CAK3B;AAED,MAAM,WAAW,2BAA2B;IAC1C,WAAW,IAAI,IAAI,CAAC;IACpB,SAAS,IAAI,qBAAqB,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,CAAC,SAAS,iBAAiB,EACnC,OAAO,EAAE,CAAC,EACV,OAAO,EAAE;QACP,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAC9B,OAAO,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/D,0FAA0F;QAC1F,MAAM,EAAE,CAAC,IAAI,EAAE,uBAAuB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAChE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;QACnC,cAAc,CAAC,EAAE,CACf,MAAM,EAAE,qBAAqB,EAC7B,IAAI,EAAE,uBAAuB,KAC1B,IAAI,CAAC;KACX,GACA,2BAA2B,CAAC;IAC/B,2FAA2F;IAC3F,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,SAAS,IAAI,qBAAqB,CAAC;IACnC,wGAAwG;IACxG,MAAM,IAAI,IAAI,CAAC;IACf,KAAK,IAAI,IAAI,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,8GAA8G;IAC9G,eAAe,CAAC,EAAE,2BAA2B,CAAC;IAC9C,6EAA6E;IAC7E,OAAO,CAAC,EAAE,WAAW,GAAG,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IACnE,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC7E;AA6DD,wGAAwG;AACxG,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,sBAAsB,GAC9B,eAAe,CAusBjB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createProviderInstrumentation, } from "../providers/instrumentation.js";
|
|
1
2
|
import { BroadcastValidationError, broadcastLimits, channelKey, parseChannelEvent, parseChannelParams, } from "./index.js";
|
|
2
3
|
/** Safe connection/protocol failure; application callback errors are reported separately. */
|
|
3
4
|
export class BroadcastClientError extends Error {
|
|
@@ -46,13 +47,21 @@ async function abortable(work, signal) {
|
|
|
46
47
|
/** One multiplexed streaming Fetch connection per instance. Create an instance per app auth session. */
|
|
47
48
|
export function createBroadcastClient(options) {
|
|
48
49
|
const fetcher = options.fetch ?? globalThis.fetch;
|
|
50
|
+
const instrumentation = createProviderInstrumentation(options.instrumentation, {
|
|
51
|
+
providerName: "broadcast-client",
|
|
52
|
+
watcher: "broadcast",
|
|
53
|
+
});
|
|
54
|
+
let connectionInfo = Object.freeze({
|
|
55
|
+
reason: "initial",
|
|
56
|
+
});
|
|
57
|
+
let retryReason = "unknown";
|
|
49
58
|
const clientId = crypto.randomUUID();
|
|
50
59
|
const entries = new Map();
|
|
51
60
|
const observers = new Set();
|
|
52
61
|
let nextId = 0;
|
|
53
62
|
let closed = false;
|
|
54
63
|
let generation = 0;
|
|
55
|
-
let
|
|
64
|
+
let interruptConnection;
|
|
56
65
|
let retryTimer;
|
|
57
66
|
let restartQueued = false;
|
|
58
67
|
let attempted = false;
|
|
@@ -91,18 +100,21 @@ export function createBroadcastClient(options) {
|
|
|
91
100
|
report(observer, error);
|
|
92
101
|
}
|
|
93
102
|
}
|
|
94
|
-
function notify(entry) {
|
|
103
|
+
function notify(entry, info = connectionInfo) {
|
|
104
|
+
entry.connectionInfo = info;
|
|
95
105
|
for (const observer of entry.observers)
|
|
96
|
-
invoke(observer, () => observer.onStatusChange?.(status(entry)));
|
|
106
|
+
invoke(observer, () => observer.onStatusChange?.(status(entry), info));
|
|
97
107
|
}
|
|
98
|
-
function fail(entry, error, minimum = 0) {
|
|
108
|
+
function fail(entry, error, minimum = 0, info = Object.freeze({ reason: "interruption" })) {
|
|
109
|
+
retryReason = info.reason;
|
|
99
110
|
entry.ready = false;
|
|
100
111
|
entry.blocked = !error.retryable;
|
|
101
112
|
if (error.retryable)
|
|
102
113
|
entry.nextAttemptAt = Date.now() + retryDelay(entry.failures++, minimum);
|
|
103
|
-
notify(entry);
|
|
104
|
-
|
|
105
|
-
|
|
114
|
+
notify(entry, info);
|
|
115
|
+
if (info.reason !== "planned-renewal")
|
|
116
|
+
for (const observer of entry.observers)
|
|
117
|
+
report(observer, error);
|
|
106
118
|
}
|
|
107
119
|
function clearRetry() {
|
|
108
120
|
if (retryTimer !== undefined)
|
|
@@ -118,17 +130,18 @@ export function createBroadcastClient(options) {
|
|
|
118
130
|
// Long Retry-After values retain their deadline across timer chunks and subscription changes.
|
|
119
131
|
retryTimer = setTimeout(() => {
|
|
120
132
|
if (waiting.some((entry) => !entry.blocked && entry.nextAttemptAt <= Date.now()))
|
|
121
|
-
restart();
|
|
133
|
+
restart(retryReason);
|
|
122
134
|
else
|
|
123
135
|
scheduleRetry();
|
|
124
136
|
}, Math.min(delay, 2_147_483_647));
|
|
125
137
|
}
|
|
126
|
-
function restart() {
|
|
138
|
+
function restart(reason = "unknown") {
|
|
127
139
|
if (closed)
|
|
128
140
|
return;
|
|
141
|
+
connectionInfo = Object.freeze({ reason: attempted ? reason : "initial" });
|
|
129
142
|
generation++;
|
|
130
|
-
|
|
131
|
-
|
|
143
|
+
interruptConnection?.(connectionInfo.reason);
|
|
144
|
+
interruptConnection = undefined;
|
|
132
145
|
clearRetry();
|
|
133
146
|
for (const entry of entries.values()) {
|
|
134
147
|
entry.ready = false;
|
|
@@ -154,8 +167,17 @@ export function createBroadcastClient(options) {
|
|
|
154
167
|
// Joining channels must not cancel deadlines for subscriptions still waiting to retry.
|
|
155
168
|
scheduleRetry();
|
|
156
169
|
attempted = true;
|
|
170
|
+
const info = connectionInfo;
|
|
171
|
+
let endReason = "unknown";
|
|
172
|
+
instrumentation.custom({
|
|
173
|
+
name: "broadcast.connecting",
|
|
174
|
+
details: { reason: info.reason, subscriptions: included.length },
|
|
175
|
+
});
|
|
157
176
|
const abort = new AbortController();
|
|
158
|
-
|
|
177
|
+
interruptConnection = (reason) => {
|
|
178
|
+
endReason = reason;
|
|
179
|
+
abort.abort();
|
|
180
|
+
};
|
|
159
181
|
const live = () => !closed && current === generation && !abort.signal.aborted;
|
|
160
182
|
let reader;
|
|
161
183
|
let timer;
|
|
@@ -164,7 +186,10 @@ export function createBroadcastClient(options) {
|
|
|
164
186
|
const arm = (ms) => {
|
|
165
187
|
if (timer !== undefined)
|
|
166
188
|
clearTimeout(timer);
|
|
167
|
-
timer = setTimeout(() =>
|
|
189
|
+
timer = setTimeout(() => {
|
|
190
|
+
endReason = "interruption";
|
|
191
|
+
abort.abort();
|
|
192
|
+
}, ms);
|
|
168
193
|
};
|
|
169
194
|
let terminal = false;
|
|
170
195
|
let reading = false;
|
|
@@ -210,6 +235,7 @@ export function createBroadcastClient(options) {
|
|
|
210
235
|
if (!live())
|
|
211
236
|
return;
|
|
212
237
|
if (!response.ok) {
|
|
238
|
+
endReason = "interruption";
|
|
213
239
|
terminal = true;
|
|
214
240
|
const retryable = response.status === 429 || response.status >= 500;
|
|
215
241
|
for (const entry of included)
|
|
@@ -224,14 +250,16 @@ export function createBroadcastClient(options) {
|
|
|
224
250
|
reader = response.body.getReader();
|
|
225
251
|
reading = true;
|
|
226
252
|
arm(broadcastLimits.heartbeatMs * 2 + 5_000);
|
|
227
|
-
|
|
253
|
+
const connectedAt = performance.now();
|
|
254
|
+
let receivedReadiness = false;
|
|
228
255
|
readiness = setTimeout(() => {
|
|
256
|
+
endReason = "interruption";
|
|
229
257
|
for (const entry of included)
|
|
230
258
|
if (!entry.ready &&
|
|
231
259
|
!entry.blocked &&
|
|
232
260
|
entry.nextAttemptAt <= Date.now())
|
|
233
261
|
fail(entry, new BroadcastClientError("Broadcast readiness timed out", true));
|
|
234
|
-
restart();
|
|
262
|
+
restart("interruption");
|
|
235
263
|
}, broadcastLimits.readyTimeoutMs);
|
|
236
264
|
const byId = new Map(included.map((entry) => [entry.id, entry]));
|
|
237
265
|
const decoder = new TextDecoder("utf-8", { fatal: true });
|
|
@@ -239,15 +267,26 @@ export function createBroadcastClient(options) {
|
|
|
239
267
|
let data = [];
|
|
240
268
|
let eventName = "";
|
|
241
269
|
let frameBytes = 0;
|
|
270
|
+
let renewalAnnounced = false;
|
|
242
271
|
async function line(value) {
|
|
243
272
|
if (!value) {
|
|
244
273
|
if (data.length) {
|
|
274
|
+
renewalAnnounced = false;
|
|
245
275
|
if (eventName !== "broadcast")
|
|
246
276
|
throw new BroadcastClientError("Unknown broadcast frame", false);
|
|
247
277
|
const frame = JSON.parse(data.join("\n"));
|
|
248
278
|
if (!frame || typeof frame !== "object")
|
|
249
279
|
throw new BroadcastClientError("Invalid broadcast frame", false);
|
|
250
280
|
const message = frame;
|
|
281
|
+
if (message.type === "renewal") {
|
|
282
|
+
if (Object.keys(message).length !== 1)
|
|
283
|
+
throw new BroadcastClientError("Invalid broadcast renewal", false);
|
|
284
|
+
renewalAnnounced = true;
|
|
285
|
+
data = [];
|
|
286
|
+
eventName = "";
|
|
287
|
+
frameBytes = 0;
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
251
290
|
const entry = typeof message.id === "string" ? byId.get(message.id) : undefined;
|
|
252
291
|
if (!entry || typeof message.type !== "string")
|
|
253
292
|
throw new BroadcastClientError("Invalid broadcast subscription frame", false);
|
|
@@ -260,12 +299,33 @@ export function createBroadcastClient(options) {
|
|
|
260
299
|
if (message.type === "ready") {
|
|
261
300
|
if (entry.ready)
|
|
262
301
|
throw new BroadcastClientError("Duplicate broadcast readiness", false);
|
|
302
|
+
const advertisedLifetime = message.maxLifetimeMs;
|
|
303
|
+
if (typeof advertisedLifetime !== "number" ||
|
|
304
|
+
!Number.isSafeInteger(advertisedLifetime) ||
|
|
305
|
+
advertisedLifetime < 1 ||
|
|
306
|
+
advertisedLifetime > broadcastLimits.maxLifetimeMs)
|
|
307
|
+
throw new BroadcastClientError("Invalid broadcast connection lifetime", false);
|
|
308
|
+
// Only the first readiness can configure this connection's deadline.
|
|
309
|
+
// Count from response arrival, never from a subscription or heartbeat.
|
|
310
|
+
if (!receivedReadiness) {
|
|
311
|
+
lifetime = setTimeout(() => {
|
|
312
|
+
endReason = "interruption";
|
|
313
|
+
abort.abort();
|
|
314
|
+
}, Math.max(0, advertisedLifetime +
|
|
315
|
+
broadcastLimits.lifetimeGraceMs -
|
|
316
|
+
(performance.now() - connectedAt)));
|
|
317
|
+
}
|
|
318
|
+
receivedReadiness = true;
|
|
263
319
|
entry.ready = true;
|
|
264
320
|
entry.failures = 0;
|
|
265
321
|
entry.nextAttemptAt = 0;
|
|
266
|
-
notify(entry);
|
|
322
|
+
notify(entry, info);
|
|
323
|
+
instrumentation.custom({
|
|
324
|
+
name: "broadcast.ready",
|
|
325
|
+
details: { reason: info.reason },
|
|
326
|
+
});
|
|
267
327
|
for (const observer of entry.observers)
|
|
268
|
-
invoke(observer, observer.onSync);
|
|
328
|
+
invoke(observer, () => observer.onSync(info));
|
|
269
329
|
}
|
|
270
330
|
else if (message.type === "event") {
|
|
271
331
|
if (!entry.ready || typeof message.event !== "string")
|
|
@@ -294,6 +354,7 @@ export function createBroadcastClient(options) {
|
|
|
294
354
|
!Number.isFinite(retryAfter) ||
|
|
295
355
|
retryAfter < 0))
|
|
296
356
|
throw new BroadcastClientError("Invalid broadcast retry delay", false);
|
|
357
|
+
endReason = "interruption";
|
|
297
358
|
fail(entry, new BroadcastClientError("Broadcast subscription is unavailable", retryable, message.status), typeof retryAfter === "number" ? retryAfter : 0);
|
|
298
359
|
scheduleRetry();
|
|
299
360
|
}
|
|
@@ -316,6 +377,8 @@ export function createBroadcastClient(options) {
|
|
|
316
377
|
frameBytes = 0;
|
|
317
378
|
return;
|
|
318
379
|
}
|
|
380
|
+
// Renewal is terminal: subsequent traffic makes the eventual EOF unexplained.
|
|
381
|
+
renewalAnnounced = false;
|
|
319
382
|
frameBytes += new TextEncoder().encode(value).byteLength;
|
|
320
383
|
if (frameBytes >
|
|
321
384
|
broadcastLimits.payloadBytes + broadcastLimits.requestBytes)
|
|
@@ -334,8 +397,15 @@ export function createBroadcastClient(options) {
|
|
|
334
397
|
}
|
|
335
398
|
while (live()) {
|
|
336
399
|
const chunk = await abortable(reader.read(), abort.signal);
|
|
337
|
-
if (!live()
|
|
400
|
+
if (!live())
|
|
338
401
|
break;
|
|
402
|
+
if (chunk.done) {
|
|
403
|
+
endReason =
|
|
404
|
+
renewalAnnounced && !buffer && frameBytes === 0
|
|
405
|
+
? "planned-renewal"
|
|
406
|
+
: "unknown";
|
|
407
|
+
break;
|
|
408
|
+
}
|
|
339
409
|
arm(broadcastLimits.heartbeatMs * 2 + 5_000);
|
|
340
410
|
if (chunk.value.byteLength > broadcastLimits.bufferedBytes)
|
|
341
411
|
throw new BroadcastClientError("Broadcast stream exceeds the buffer limit", false);
|
|
@@ -363,6 +433,8 @@ export function createBroadcastClient(options) {
|
|
|
363
433
|
}
|
|
364
434
|
}
|
|
365
435
|
catch (error) {
|
|
436
|
+
if (current === generation && !closed)
|
|
437
|
+
endReason = "interruption";
|
|
366
438
|
if (current === generation &&
|
|
367
439
|
!closed &&
|
|
368
440
|
error instanceof BroadcastClientError &&
|
|
@@ -389,12 +461,20 @@ export function createBroadcastClient(options) {
|
|
|
389
461
|
clearTimeout(readiness);
|
|
390
462
|
abort.abort();
|
|
391
463
|
void reader?.cancel().catch(() => undefined);
|
|
464
|
+
const ended = Object.freeze({ reason: endReason });
|
|
465
|
+
instrumentation.custom({
|
|
466
|
+
name: "broadcast.closed",
|
|
467
|
+
details: { reason: ended.reason },
|
|
468
|
+
});
|
|
392
469
|
if (current === generation && !closed) {
|
|
393
|
-
|
|
470
|
+
retryReason = endReason;
|
|
471
|
+
interruptConnection = undefined;
|
|
394
472
|
if (!terminal)
|
|
395
473
|
for (const entry of included) {
|
|
396
474
|
if (!entry.blocked && entry.nextAttemptAt <= Date.now())
|
|
397
|
-
fail(entry, new BroadcastClientError(
|
|
475
|
+
fail(entry, new BroadcastClientError(endReason === "planned-renewal"
|
|
476
|
+
? "Broadcast connection renewed"
|
|
477
|
+
: "Broadcast connection interrupted", true), 0, ended);
|
|
398
478
|
}
|
|
399
479
|
scheduleRetry();
|
|
400
480
|
}
|
|
@@ -446,21 +526,21 @@ export function createBroadcastClient(options) {
|
|
|
446
526
|
};
|
|
447
527
|
entries.set(key, entry);
|
|
448
528
|
entry.observers.add(observer);
|
|
449
|
-
restart();
|
|
529
|
+
restart("subscription-change");
|
|
450
530
|
}
|
|
451
531
|
else {
|
|
452
532
|
if (entry.channel !== channel)
|
|
453
533
|
throw new BroadcastClientError(`Conflicting definitions for channel ${channel.name}`, false);
|
|
454
534
|
entry.observers.add(observer);
|
|
455
|
-
invoke(observer, () => observer.onStatusChange?.(status(entry)));
|
|
535
|
+
invoke(observer, () => observer.onStatusChange?.(status(entry), entry?.connectionInfo ?? connectionInfo));
|
|
456
536
|
if (entry.ready)
|
|
457
|
-
invoke(observer, observer.onSync);
|
|
537
|
+
invoke(observer, () => observer.onSync(entry?.connectionInfo ?? connectionInfo));
|
|
458
538
|
}
|
|
459
539
|
})
|
|
460
540
|
.catch((error) => {
|
|
461
541
|
invalid = true;
|
|
462
542
|
report(observer, error);
|
|
463
|
-
invoke(observer, () => observer.onStatusChange?.("blocked"));
|
|
543
|
+
invoke(observer, () => observer.onStatusChange?.("blocked", connectionInfo));
|
|
464
544
|
})
|
|
465
545
|
.finally(() => clearTimeout(validationTimeout));
|
|
466
546
|
return {
|
|
@@ -480,7 +560,7 @@ export function createBroadcastClient(options) {
|
|
|
480
560
|
!entry.observers.size &&
|
|
481
561
|
entries.get(entry.key) === entry) {
|
|
482
562
|
entries.delete(entry.key);
|
|
483
|
-
restart();
|
|
563
|
+
restart("subscription-change");
|
|
484
564
|
}
|
|
485
565
|
},
|
|
486
566
|
};
|
|
@@ -500,14 +580,14 @@ export function createBroadcastClient(options) {
|
|
|
500
580
|
return;
|
|
501
581
|
closed = true;
|
|
502
582
|
generation++;
|
|
503
|
-
|
|
583
|
+
interruptConnection?.("unknown");
|
|
504
584
|
clearRetry();
|
|
505
585
|
if (typeof window !== "undefined")
|
|
506
586
|
window.removeEventListener("online", wake);
|
|
507
587
|
if (typeof document !== "undefined")
|
|
508
588
|
document.removeEventListener("visibilitychange", wake);
|
|
509
589
|
for (const observer of observers) {
|
|
510
|
-
invoke(observer, () => observer.onStatusChange?.("closed"));
|
|
590
|
+
invoke(observer, () => observer.onStatusChange?.("closed", Object.freeze({ reason: "unknown" })));
|
|
511
591
|
observer.active = false;
|
|
512
592
|
observer.validation.abort();
|
|
513
593
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/broadcasting/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/broadcasting/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,13 +13,15 @@ export type InferChannelEvent<C extends ChannelDefinition> = {
|
|
|
13
13
|
data: StandardSchemaV1.InferOutput<C["events"][Event]>;
|
|
14
14
|
};
|
|
15
15
|
}[keyof C["events"] & string];
|
|
16
|
-
/**
|
|
16
|
+
/** Protocol defaults and safety limits shared by clients, endpoints, and providers. */
|
|
17
17
|
export declare const broadcastLimits: Readonly<{
|
|
18
18
|
subscriptions: 20;
|
|
19
19
|
requestBytes: 8192;
|
|
20
20
|
payloadBytes: 65536;
|
|
21
21
|
bufferedBytes: 1048576;
|
|
22
|
-
|
|
22
|
+
defaultLifetimeMs: 60000;
|
|
23
|
+
maxLifetimeMs: 3600000;
|
|
24
|
+
lifetimeGraceMs: 5000;
|
|
23
25
|
heartbeatMs: 25000;
|
|
24
26
|
readyTimeoutMs: 10000;
|
|
25
27
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/broadcasting/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAM9D,mFAAmF;AACnF,MAAM,WAAW,iBAAiB,CAChC,IAAI,SAAS,MAAM,GAAG,MAAM,EAC5B,MAAM,SAAS,gBAAgB,CAC7B,OAAO,EACP,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CACvB,GAAG,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACrD,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,MAAM,CACtD,MAAM,EACN,gBAAgB,CACjB;IAED,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,iBAAiB,IACxD,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC5C,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,iBAAiB,IAAI;KAC1D,KAAK,IAAI,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,MAAM,GAAG;QACrC,KAAK,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;KACxD;CACF,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC;AAE9B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/broadcasting/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAM9D,mFAAmF;AACnF,MAAM,WAAW,iBAAiB,CAChC,IAAI,SAAS,MAAM,GAAG,MAAM,EAC5B,MAAM,SAAS,gBAAgB,CAC7B,OAAO,EACP,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CACvB,GAAG,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACrD,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,MAAM,CACtD,MAAM,EACN,gBAAgB,CACjB;IAED,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,iBAAiB,IACxD,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC5C,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,iBAAiB,IAAI;KAC1D,KAAK,IAAI,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,MAAM,GAAG;QACrC,KAAK,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;KACxD;CACF,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC;AAE9B,uFAAuF;AACvF,eAAO,MAAM,eAAe;;;;;;;;;;EAU1B,CAAC;AAEH,iEAAiE;AACjE,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAID,wBAAgB,aAAa,CAC3B,KAAK,CAAC,IAAI,SAAS,MAAM,EACzB,MAAM,SAAS,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAChE,KAAK,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAErD,IAAI,EAAE,IAAI,EACV,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC1C,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAezC;AA+BD,qFAAqF;AACrF,wBAAsB,kBAAkB,CAAC,CAAC,SAAS,iBAAiB,EAClE,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAyBhC;AAED,iFAAiF;AACjF,wBAAsB,iBAAiB,CAAC,CAAC,SAAS,iBAAiB,EACjE,OAAO,EAAE,CAAC,EACV,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GACtC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAmB/B;AAED,+FAA+F;AAC/F,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACvC,MAAM,CAKR"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { eventTransportValuesEqual, toEventTransportValue, } from "../events/transport.js";
|
|
2
|
-
/**
|
|
2
|
+
/** Protocol defaults and safety limits shared by clients, endpoints, and providers. */
|
|
3
3
|
export const broadcastLimits = Object.freeze({
|
|
4
4
|
subscriptions: 20,
|
|
5
5
|
requestBytes: 8_192,
|
|
6
6
|
payloadBytes: 65_536,
|
|
7
7
|
bufferedBytes: 1_048_576,
|
|
8
|
-
|
|
8
|
+
defaultLifetimeMs: 60_000,
|
|
9
|
+
maxLifetimeMs: 3_600_000,
|
|
10
|
+
lifetimeGraceMs: 5_000,
|
|
9
11
|
heartbeatMs: 25_000,
|
|
10
12
|
readyTimeoutMs: 10_000,
|
|
11
13
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/broadcasting/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AA6BhC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/broadcasting/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/broadcasting/server.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/broadcasting/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -203,11 +203,11 @@ export function createBroadcasting() {
|
|
|
203
203
|
return { defineChannelBinding, defineChannelRegistry };
|
|
204
204
|
}
|
|
205
205
|
/** Validate a configurable deadline without allowing an unbounded stream. */
|
|
206
|
-
export function broadcastLifetime(value = broadcastLimits.
|
|
207
|
-
if (!Number.
|
|
206
|
+
export function broadcastLifetime(value = broadcastLimits.defaultLifetimeMs) {
|
|
207
|
+
if (!Number.isSafeInteger(value) ||
|
|
208
208
|
value < 1 ||
|
|
209
209
|
value > broadcastLimits.maxLifetimeMs)
|
|
210
|
-
throw new BroadcastValidationError(
|
|
210
|
+
throw new BroadcastValidationError(`Broadcast maxLifetimeMs must be a safe integer between 1 and ${broadcastLimits.maxLifetimeMs} milliseconds`);
|
|
211
211
|
return value;
|
|
212
212
|
}
|
|
213
213
|
//# sourceMappingURL=server.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/broadcasting/server.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/broadcasting/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -26,7 +26,7 @@ features/<feature>/
|
|
|
26
26
|
schemas.ts
|
|
27
27
|
routes.ts
|
|
28
28
|
agent-capabilities.ts
|
|
29
|
-
use-cases
|
|
29
|
+
use-cases.ts
|
|
30
30
|
domain/
|
|
31
31
|
ports.ts
|
|
32
32
|
policy.ts
|
|
@@ -43,6 +43,11 @@ features/<feature>/
|
|
|
43
43
|
factories/
|
|
44
44
|
```
|
|
45
45
|
|
|
46
|
+
Keep small workflows together in `use-cases.ts`. Split them into `use-cases/`
|
|
47
|
+
when they have substantial independent logic or dependencies, and re-export the
|
|
48
|
+
same names through `index.ts` to preserve imports. Never keep both forms in one
|
|
49
|
+
feature. Contracts and shared schemas stay browser-safe in their own modules.
|
|
50
|
+
|
|
46
51
|
Small features do not need every file. The starter ships a lean subset;
|
|
47
52
|
workflow folders, `lib/` builders, and central registries appear when a
|
|
48
53
|
generator or deliberate feature change introduces that concern.
|
|
@@ -427,5 +432,25 @@ publish with `excludeOrigin`; never derive it from worker identity. Keep IDs and
|
|
|
427
432
|
payloads out of telemetry. Browser clients must refetch on initial readiness and
|
|
428
433
|
reconnect, close on user/workspace changes, and never import server bindings.
|
|
429
434
|
Memory connects one process only; Redis connects replicas/workers and has no
|
|
430
|
-
replay.
|
|
431
|
-
|
|
435
|
+
replay. SSE lifetime defaults to 60,000 ms; `maxLifetimeMs` accepts positive safe
|
|
436
|
+
integers up to 3,600,000 ms (one hour), including 240,000 for a four-minute
|
|
437
|
+
stream. Leave setup/cleanup headroom below the hosting request deadline.
|
|
438
|
+
Longer lifetimes reduce renewal/refetch frequency and increase the interval
|
|
439
|
+
between authorization checks. The browser honors the advertised lifetime with
|
|
440
|
+
five seconds of watchdog grace for the whole connection; later readiness and
|
|
441
|
+
heartbeats do not extend it. Missing or invalid lifetime metadata blocks
|
|
442
|
+
subscriptions. Heartbeat/readiness timeouts stay independent, and every renewal still needs
|
|
443
|
+
`onSync`. Do not start background worker loops in serverless providers.
|
|
444
|
+
|
|
445
|
+
|
|
446
|
+
Broadcast client callbacks also receive `BroadcastConnectionInfo`: `onSync(info)`
|
|
447
|
+
and `onStatusChange(status, info)`. Callbacks may omit the metadata argument.
|
|
448
|
+
Reasons are `initial`, `planned-renewal` (terminal renewal control frame followed
|
|
449
|
+
by EOF), `subscription-change`, `interruption`, or `unknown`. Never infer planned renewal
|
|
450
|
+
from elapsed time or an unexplained EOF. Reconcile even after planned renewal.
|
|
451
|
+
The browser accepts an optional existing instrumentation sink; do not log
|
|
452
|
+
credentials, payloads, or channel parameters. The Next/Web endpoint's optional
|
|
453
|
+
`admit` owns connection resource release; policies/expiring leases belong to the
|
|
454
|
+
application. React Query's optional `refreshGate` delays only broadcast-driven
|
|
455
|
+
refreshes. Consult the integration packages' broadcast-coordination references
|
|
456
|
+
for the mutation helper, custom mutation-plus-lock gate, and lease examples.
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createProviderInstrumentation,
|
|
3
|
+
type ProviderInstrumentationPort,
|
|
4
|
+
} from "../providers/instrumentation.js";
|
|
1
5
|
import {
|
|
2
6
|
BroadcastValidationError,
|
|
3
7
|
broadcastLimits,
|
|
@@ -16,6 +20,16 @@ export type BroadcastClientStatus =
|
|
|
16
20
|
| "blocked"
|
|
17
21
|
| "closed";
|
|
18
22
|
|
|
23
|
+
/** Why this physical connection was opened, or why it is reconnecting. */
|
|
24
|
+
export interface BroadcastConnectionInfo {
|
|
25
|
+
readonly reason:
|
|
26
|
+
| "initial"
|
|
27
|
+
| "planned-renewal"
|
|
28
|
+
| "subscription-change"
|
|
29
|
+
| "interruption"
|
|
30
|
+
| "unknown";
|
|
31
|
+
}
|
|
32
|
+
|
|
19
33
|
/** Safe connection/protocol failure; application callback errors are reported separately. */
|
|
20
34
|
export class BroadcastClientError extends Error {
|
|
21
35
|
constructor(
|
|
@@ -40,9 +54,12 @@ export interface BroadcastClient {
|
|
|
40
54
|
params: InferChannelParams<C>;
|
|
41
55
|
onEvent: (event: InferChannelEvent<C>) => void | Promise<void>;
|
|
42
56
|
/** Refetch authoritative state after initial readiness and every recovered connection. */
|
|
43
|
-
onSync: () => void | Promise<void>;
|
|
57
|
+
onSync: (info: BroadcastConnectionInfo) => void | Promise<void>;
|
|
44
58
|
onError?: (error: unknown) => void;
|
|
45
|
-
onStatusChange?: (
|
|
59
|
+
onStatusChange?: (
|
|
60
|
+
status: BroadcastClientStatus,
|
|
61
|
+
info: BroadcastConnectionInfo,
|
|
62
|
+
) => void;
|
|
46
63
|
},
|
|
47
64
|
): BroadcastClientSubscription;
|
|
48
65
|
/** Merge these optional headers into the app's typed HTTP client to opt into exclusion. */
|
|
@@ -55,6 +72,8 @@ export interface BroadcastClient {
|
|
|
55
72
|
|
|
56
73
|
export interface BroadcastClientOptions {
|
|
57
74
|
url: string;
|
|
75
|
+
/** Optional existing instrumentation sink; records causes and counts, never credentials or channel params. */
|
|
76
|
+
instrumentation?: ProviderInstrumentationPort;
|
|
58
77
|
/** Resolved afresh for every request. Never place credentials in the URL. */
|
|
59
78
|
headers?: HeadersInit | (() => HeadersInit | Promise<HeadersInit>);
|
|
60
79
|
credentials?: RequestCredentials;
|
|
@@ -65,9 +84,12 @@ interface Observer {
|
|
|
65
84
|
active: boolean;
|
|
66
85
|
validation: AbortController;
|
|
67
86
|
onEvent: (event: { event: string; data: unknown }) => void | Promise<void>;
|
|
68
|
-
onSync: () => void | Promise<void>;
|
|
87
|
+
onSync: (info: BroadcastConnectionInfo) => void | Promise<void>;
|
|
69
88
|
onError?: (error: unknown) => void;
|
|
70
|
-
onStatusChange?: (
|
|
89
|
+
onStatusChange?: (
|
|
90
|
+
status: BroadcastClientStatus,
|
|
91
|
+
info: BroadcastConnectionInfo,
|
|
92
|
+
) => void;
|
|
71
93
|
}
|
|
72
94
|
interface Entry {
|
|
73
95
|
id: string;
|
|
@@ -79,6 +101,7 @@ interface Entry {
|
|
|
79
101
|
ready: boolean;
|
|
80
102
|
failures: number;
|
|
81
103
|
nextAttemptAt: number;
|
|
104
|
+
connectionInfo?: BroadcastConnectionInfo;
|
|
82
105
|
}
|
|
83
106
|
|
|
84
107
|
function retryDelay(failures: number, minimum = 0): number {
|
|
@@ -121,13 +144,26 @@ export function createBroadcastClient(
|
|
|
121
144
|
options: BroadcastClientOptions,
|
|
122
145
|
): BroadcastClient {
|
|
123
146
|
const fetcher = options.fetch ?? globalThis.fetch;
|
|
147
|
+
const instrumentation = createProviderInstrumentation(
|
|
148
|
+
options.instrumentation,
|
|
149
|
+
{
|
|
150
|
+
providerName: "broadcast-client",
|
|
151
|
+
watcher: "broadcast",
|
|
152
|
+
},
|
|
153
|
+
);
|
|
154
|
+
let connectionInfo: BroadcastConnectionInfo = Object.freeze({
|
|
155
|
+
reason: "initial",
|
|
156
|
+
});
|
|
157
|
+
let retryReason: BroadcastConnectionInfo["reason"] = "unknown";
|
|
124
158
|
const clientId = crypto.randomUUID();
|
|
125
159
|
const entries = new Map<string, Entry>();
|
|
126
160
|
const observers = new Set<Observer>();
|
|
127
161
|
let nextId = 0;
|
|
128
162
|
let closed = false;
|
|
129
163
|
let generation = 0;
|
|
130
|
-
let
|
|
164
|
+
let interruptConnection:
|
|
165
|
+
| ((reason: BroadcastConnectionInfo["reason"]) => void)
|
|
166
|
+
| undefined;
|
|
131
167
|
let retryTimer: ReturnType<typeof setTimeout> | undefined;
|
|
132
168
|
let restartQueued = false;
|
|
133
169
|
let attempted = false;
|
|
@@ -165,17 +201,25 @@ export function createBroadcastClient(
|
|
|
165
201
|
report(observer, error);
|
|
166
202
|
}
|
|
167
203
|
}
|
|
168
|
-
function notify(entry: Entry) {
|
|
204
|
+
function notify(entry: Entry, info = connectionInfo) {
|
|
205
|
+
entry.connectionInfo = info;
|
|
169
206
|
for (const observer of entry.observers)
|
|
170
|
-
invoke(observer, () => observer.onStatusChange?.(status(entry)));
|
|
207
|
+
invoke(observer, () => observer.onStatusChange?.(status(entry), info));
|
|
171
208
|
}
|
|
172
|
-
function fail(
|
|
209
|
+
function fail(
|
|
210
|
+
entry: Entry,
|
|
211
|
+
error: BroadcastClientError,
|
|
212
|
+
minimum = 0,
|
|
213
|
+
info: BroadcastConnectionInfo = Object.freeze({ reason: "interruption" }),
|
|
214
|
+
) {
|
|
215
|
+
retryReason = info.reason;
|
|
173
216
|
entry.ready = false;
|
|
174
217
|
entry.blocked = !error.retryable;
|
|
175
218
|
if (error.retryable)
|
|
176
219
|
entry.nextAttemptAt = Date.now() + retryDelay(entry.failures++, minimum);
|
|
177
|
-
notify(entry);
|
|
178
|
-
|
|
220
|
+
notify(entry, info);
|
|
221
|
+
if (info.reason !== "planned-renewal")
|
|
222
|
+
for (const observer of entry.observers) report(observer, error);
|
|
179
223
|
}
|
|
180
224
|
|
|
181
225
|
function clearRetry() {
|
|
@@ -200,18 +244,19 @@ export function createBroadcastClient(
|
|
|
200
244
|
(entry) => !entry.blocked && entry.nextAttemptAt <= Date.now(),
|
|
201
245
|
)
|
|
202
246
|
)
|
|
203
|
-
restart();
|
|
247
|
+
restart(retryReason);
|
|
204
248
|
else scheduleRetry();
|
|
205
249
|
},
|
|
206
250
|
Math.min(delay, 2_147_483_647),
|
|
207
251
|
);
|
|
208
252
|
}
|
|
209
253
|
|
|
210
|
-
function restart() {
|
|
254
|
+
function restart(reason: BroadcastConnectionInfo["reason"] = "unknown") {
|
|
211
255
|
if (closed) return;
|
|
256
|
+
connectionInfo = Object.freeze({ reason: attempted ? reason : "initial" });
|
|
212
257
|
generation++;
|
|
213
|
-
|
|
214
|
-
|
|
258
|
+
interruptConnection?.(connectionInfo.reason);
|
|
259
|
+
interruptConnection = undefined;
|
|
215
260
|
clearRetry();
|
|
216
261
|
for (const entry of entries.values()) {
|
|
217
262
|
entry.ready = false;
|
|
@@ -237,8 +282,17 @@ export function createBroadcastClient(
|
|
|
237
282
|
// Joining channels must not cancel deadlines for subscriptions still waiting to retry.
|
|
238
283
|
scheduleRetry();
|
|
239
284
|
attempted = true;
|
|
285
|
+
const info = connectionInfo;
|
|
286
|
+
let endReason: BroadcastConnectionInfo["reason"] = "unknown";
|
|
287
|
+
instrumentation.custom({
|
|
288
|
+
name: "broadcast.connecting",
|
|
289
|
+
details: { reason: info.reason, subscriptions: included.length },
|
|
290
|
+
});
|
|
240
291
|
const abort = new AbortController();
|
|
241
|
-
|
|
292
|
+
interruptConnection = (reason) => {
|
|
293
|
+
endReason = reason;
|
|
294
|
+
abort.abort();
|
|
295
|
+
};
|
|
242
296
|
const live = () =>
|
|
243
297
|
!closed && current === generation && !abort.signal.aborted;
|
|
244
298
|
let reader: ReadableStreamDefaultReader<Uint8Array> | undefined;
|
|
@@ -247,7 +301,10 @@ export function createBroadcastClient(
|
|
|
247
301
|
let readiness: ReturnType<typeof setTimeout> | undefined;
|
|
248
302
|
const arm = (ms: number) => {
|
|
249
303
|
if (timer !== undefined) clearTimeout(timer);
|
|
250
|
-
timer = setTimeout(() =>
|
|
304
|
+
timer = setTimeout(() => {
|
|
305
|
+
endReason = "interruption";
|
|
306
|
+
abort.abort();
|
|
307
|
+
}, ms);
|
|
251
308
|
};
|
|
252
309
|
let terminal = false;
|
|
253
310
|
let reading = false;
|
|
@@ -311,6 +368,7 @@ export function createBroadcastClient(
|
|
|
311
368
|
const response = await abortable(fetching, abort.signal);
|
|
312
369
|
if (!live()) return;
|
|
313
370
|
if (!response.ok) {
|
|
371
|
+
endReason = "interruption";
|
|
314
372
|
terminal = true;
|
|
315
373
|
const retryable = response.status === 429 || response.status >= 500;
|
|
316
374
|
for (const entry of included)
|
|
@@ -335,8 +393,10 @@ export function createBroadcastClient(
|
|
|
335
393
|
reader = response.body.getReader();
|
|
336
394
|
reading = true;
|
|
337
395
|
arm(broadcastLimits.heartbeatMs * 2 + 5_000);
|
|
338
|
-
|
|
396
|
+
const connectedAt = performance.now();
|
|
397
|
+
let receivedReadiness = false;
|
|
339
398
|
readiness = setTimeout(() => {
|
|
399
|
+
endReason = "interruption";
|
|
340
400
|
for (const entry of included)
|
|
341
401
|
if (
|
|
342
402
|
!entry.ready &&
|
|
@@ -347,7 +407,7 @@ export function createBroadcastClient(
|
|
|
347
407
|
entry,
|
|
348
408
|
new BroadcastClientError("Broadcast readiness timed out", true),
|
|
349
409
|
);
|
|
350
|
-
restart();
|
|
410
|
+
restart("interruption");
|
|
351
411
|
}, broadcastLimits.readyTimeoutMs);
|
|
352
412
|
const byId = new Map(included.map((entry) => [entry.id, entry]));
|
|
353
413
|
const decoder = new TextDecoder("utf-8", { fatal: true });
|
|
@@ -355,15 +415,29 @@ export function createBroadcastClient(
|
|
|
355
415
|
let data: string[] = [];
|
|
356
416
|
let eventName = "";
|
|
357
417
|
let frameBytes = 0;
|
|
418
|
+
let renewalAnnounced = false;
|
|
358
419
|
async function line(value: string) {
|
|
359
420
|
if (!value) {
|
|
360
421
|
if (data.length) {
|
|
422
|
+
renewalAnnounced = false;
|
|
361
423
|
if (eventName !== "broadcast")
|
|
362
424
|
throw new BroadcastClientError("Unknown broadcast frame", false);
|
|
363
425
|
const frame: unknown = JSON.parse(data.join("\n"));
|
|
364
426
|
if (!frame || typeof frame !== "object")
|
|
365
427
|
throw new BroadcastClientError("Invalid broadcast frame", false);
|
|
366
428
|
const message = frame as Record<string, unknown>;
|
|
429
|
+
if (message.type === "renewal") {
|
|
430
|
+
if (Object.keys(message).length !== 1)
|
|
431
|
+
throw new BroadcastClientError(
|
|
432
|
+
"Invalid broadcast renewal",
|
|
433
|
+
false,
|
|
434
|
+
);
|
|
435
|
+
renewalAnnounced = true;
|
|
436
|
+
data = [];
|
|
437
|
+
eventName = "";
|
|
438
|
+
frameBytes = 0;
|
|
439
|
+
return;
|
|
440
|
+
}
|
|
367
441
|
const entry =
|
|
368
442
|
typeof message.id === "string" ? byId.get(message.id) : undefined;
|
|
369
443
|
if (!entry || typeof message.type !== "string")
|
|
@@ -383,12 +457,44 @@ export function createBroadcastClient(
|
|
|
383
457
|
"Duplicate broadcast readiness",
|
|
384
458
|
false,
|
|
385
459
|
);
|
|
460
|
+
const advertisedLifetime = message.maxLifetimeMs;
|
|
461
|
+
if (
|
|
462
|
+
typeof advertisedLifetime !== "number" ||
|
|
463
|
+
!Number.isSafeInteger(advertisedLifetime) ||
|
|
464
|
+
advertisedLifetime < 1 ||
|
|
465
|
+
advertisedLifetime > broadcastLimits.maxLifetimeMs
|
|
466
|
+
)
|
|
467
|
+
throw new BroadcastClientError(
|
|
468
|
+
"Invalid broadcast connection lifetime",
|
|
469
|
+
false,
|
|
470
|
+
);
|
|
471
|
+
// Only the first readiness can configure this connection's deadline.
|
|
472
|
+
// Count from response arrival, never from a subscription or heartbeat.
|
|
473
|
+
if (!receivedReadiness) {
|
|
474
|
+
lifetime = setTimeout(
|
|
475
|
+
() => {
|
|
476
|
+
endReason = "interruption";
|
|
477
|
+
abort.abort();
|
|
478
|
+
},
|
|
479
|
+
Math.max(
|
|
480
|
+
0,
|
|
481
|
+
advertisedLifetime +
|
|
482
|
+
broadcastLimits.lifetimeGraceMs -
|
|
483
|
+
(performance.now() - connectedAt),
|
|
484
|
+
),
|
|
485
|
+
);
|
|
486
|
+
}
|
|
487
|
+
receivedReadiness = true;
|
|
386
488
|
entry.ready = true;
|
|
387
489
|
entry.failures = 0;
|
|
388
490
|
entry.nextAttemptAt = 0;
|
|
389
|
-
notify(entry);
|
|
491
|
+
notify(entry, info);
|
|
492
|
+
instrumentation.custom({
|
|
493
|
+
name: "broadcast.ready",
|
|
494
|
+
details: { reason: info.reason },
|
|
495
|
+
});
|
|
390
496
|
for (const observer of entry.observers)
|
|
391
|
-
invoke(observer, observer.onSync);
|
|
497
|
+
invoke(observer, () => observer.onSync(info));
|
|
392
498
|
} else if (message.type === "event") {
|
|
393
499
|
if (!entry.ready || typeof message.event !== "string")
|
|
394
500
|
throw new BroadcastClientError(
|
|
@@ -438,6 +544,7 @@ export function createBroadcastClient(
|
|
|
438
544
|
"Invalid broadcast retry delay",
|
|
439
545
|
false,
|
|
440
546
|
);
|
|
547
|
+
endReason = "interruption";
|
|
441
548
|
fail(
|
|
442
549
|
entry,
|
|
443
550
|
new BroadcastClientError(
|
|
@@ -478,6 +585,8 @@ export function createBroadcastClient(
|
|
|
478
585
|
frameBytes = 0;
|
|
479
586
|
return;
|
|
480
587
|
}
|
|
588
|
+
// Renewal is terminal: subsequent traffic makes the eventual EOF unexplained.
|
|
589
|
+
renewalAnnounced = false;
|
|
481
590
|
frameBytes += new TextEncoder().encode(value).byteLength;
|
|
482
591
|
if (
|
|
483
592
|
frameBytes >
|
|
@@ -502,7 +611,14 @@ export function createBroadcastClient(
|
|
|
502
611
|
}
|
|
503
612
|
while (live()) {
|
|
504
613
|
const chunk = await abortable(reader.read(), abort.signal);
|
|
505
|
-
if (!live()
|
|
614
|
+
if (!live()) break;
|
|
615
|
+
if (chunk.done) {
|
|
616
|
+
endReason =
|
|
617
|
+
renewalAnnounced && !buffer && frameBytes === 0
|
|
618
|
+
? "planned-renewal"
|
|
619
|
+
: "unknown";
|
|
620
|
+
break;
|
|
621
|
+
}
|
|
506
622
|
arm(broadcastLimits.heartbeatMs * 2 + 5_000);
|
|
507
623
|
if (chunk.value.byteLength > broadcastLimits.bufferedBytes)
|
|
508
624
|
throw new BroadcastClientError(
|
|
@@ -536,6 +652,7 @@ export function createBroadcastClient(
|
|
|
536
652
|
}
|
|
537
653
|
}
|
|
538
654
|
} catch (error) {
|
|
655
|
+
if (current === generation && !closed) endReason = "interruption";
|
|
539
656
|
if (
|
|
540
657
|
current === generation &&
|
|
541
658
|
!closed &&
|
|
@@ -563,17 +680,27 @@ export function createBroadcastClient(
|
|
|
563
680
|
if (readiness !== undefined) clearTimeout(readiness);
|
|
564
681
|
abort.abort();
|
|
565
682
|
void reader?.cancel().catch(() => undefined);
|
|
683
|
+
const ended = Object.freeze({ reason: endReason });
|
|
684
|
+
instrumentation.custom({
|
|
685
|
+
name: "broadcast.closed",
|
|
686
|
+
details: { reason: ended.reason },
|
|
687
|
+
});
|
|
566
688
|
if (current === generation && !closed) {
|
|
567
|
-
|
|
689
|
+
retryReason = endReason;
|
|
690
|
+
interruptConnection = undefined;
|
|
568
691
|
if (!terminal)
|
|
569
692
|
for (const entry of included) {
|
|
570
693
|
if (!entry.blocked && entry.nextAttemptAt <= Date.now())
|
|
571
694
|
fail(
|
|
572
695
|
entry,
|
|
573
696
|
new BroadcastClientError(
|
|
574
|
-
|
|
697
|
+
endReason === "planned-renewal"
|
|
698
|
+
? "Broadcast connection renewed"
|
|
699
|
+
: "Broadcast connection interrupted",
|
|
575
700
|
true,
|
|
576
701
|
),
|
|
702
|
+
0,
|
|
703
|
+
ended,
|
|
577
704
|
);
|
|
578
705
|
}
|
|
579
706
|
scheduleRetry();
|
|
@@ -640,7 +767,7 @@ export function createBroadcastClient(
|
|
|
640
767
|
};
|
|
641
768
|
entries.set(key, entry);
|
|
642
769
|
entry.observers.add(observer);
|
|
643
|
-
restart();
|
|
770
|
+
restart("subscription-change");
|
|
644
771
|
} else {
|
|
645
772
|
if (entry.channel !== channel)
|
|
646
773
|
throw new BroadcastClientError(
|
|
@@ -648,14 +775,24 @@ export function createBroadcastClient(
|
|
|
648
775
|
false,
|
|
649
776
|
);
|
|
650
777
|
entry.observers.add(observer);
|
|
651
|
-
invoke(observer, () =>
|
|
652
|
-
|
|
778
|
+
invoke(observer, () =>
|
|
779
|
+
observer.onStatusChange?.(
|
|
780
|
+
status(entry),
|
|
781
|
+
entry?.connectionInfo ?? connectionInfo,
|
|
782
|
+
),
|
|
783
|
+
);
|
|
784
|
+
if (entry.ready)
|
|
785
|
+
invoke(observer, () =>
|
|
786
|
+
observer.onSync(entry?.connectionInfo ?? connectionInfo),
|
|
787
|
+
);
|
|
653
788
|
}
|
|
654
789
|
})
|
|
655
790
|
.catch((error) => {
|
|
656
791
|
invalid = true;
|
|
657
792
|
report(observer, error);
|
|
658
|
-
invoke(observer, () =>
|
|
793
|
+
invoke(observer, () =>
|
|
794
|
+
observer.onStatusChange?.("blocked", connectionInfo),
|
|
795
|
+
);
|
|
659
796
|
})
|
|
660
797
|
.finally(() => clearTimeout(validationTimeout));
|
|
661
798
|
return {
|
|
@@ -677,7 +814,7 @@ export function createBroadcastClient(
|
|
|
677
814
|
entries.get(entry.key) === entry
|
|
678
815
|
) {
|
|
679
816
|
entries.delete(entry.key);
|
|
680
|
-
restart();
|
|
817
|
+
restart("subscription-change");
|
|
681
818
|
}
|
|
682
819
|
},
|
|
683
820
|
};
|
|
@@ -696,14 +833,19 @@ export function createBroadcastClient(
|
|
|
696
833
|
if (closed) return;
|
|
697
834
|
closed = true;
|
|
698
835
|
generation++;
|
|
699
|
-
|
|
836
|
+
interruptConnection?.("unknown");
|
|
700
837
|
clearRetry();
|
|
701
838
|
if (typeof window !== "undefined")
|
|
702
839
|
window.removeEventListener("online", wake);
|
|
703
840
|
if (typeof document !== "undefined")
|
|
704
841
|
document.removeEventListener("visibilitychange", wake);
|
|
705
842
|
for (const observer of observers) {
|
|
706
|
-
invoke(observer, () =>
|
|
843
|
+
invoke(observer, () =>
|
|
844
|
+
observer.onStatusChange?.(
|
|
845
|
+
"closed",
|
|
846
|
+
Object.freeze({ reason: "unknown" }),
|
|
847
|
+
),
|
|
848
|
+
);
|
|
707
849
|
observer.active = false;
|
|
708
850
|
observer.validation.abort();
|
|
709
851
|
}
|
|
@@ -31,13 +31,15 @@ export type InferChannelEvent<C extends ChannelDefinition> = {
|
|
|
31
31
|
};
|
|
32
32
|
}[keyof C["events"] & string];
|
|
33
33
|
|
|
34
|
-
/**
|
|
34
|
+
/** Protocol defaults and safety limits shared by clients, endpoints, and providers. */
|
|
35
35
|
export const broadcastLimits = Object.freeze({
|
|
36
36
|
subscriptions: 20,
|
|
37
37
|
requestBytes: 8_192,
|
|
38
38
|
payloadBytes: 65_536,
|
|
39
39
|
bufferedBytes: 1_048_576,
|
|
40
|
-
|
|
40
|
+
defaultLifetimeMs: 60_000,
|
|
41
|
+
maxLifetimeMs: 3_600_000,
|
|
42
|
+
lifetimeGraceMs: 5_000,
|
|
41
43
|
heartbeatMs: 25_000,
|
|
42
44
|
readyTimeoutMs: 10_000,
|
|
43
45
|
});
|
|
@@ -338,15 +338,15 @@ export function createBroadcasting<Ctx>() {
|
|
|
338
338
|
|
|
339
339
|
/** Validate a configurable deadline without allowing an unbounded stream. */
|
|
340
340
|
export function broadcastLifetime(
|
|
341
|
-
value: number = broadcastLimits.
|
|
341
|
+
value: number = broadcastLimits.defaultLifetimeMs,
|
|
342
342
|
): number {
|
|
343
343
|
if (
|
|
344
|
-
!Number.
|
|
344
|
+
!Number.isSafeInteger(value) ||
|
|
345
345
|
value < 1 ||
|
|
346
346
|
value > broadcastLimits.maxLifetimeMs
|
|
347
347
|
)
|
|
348
348
|
throw new BroadcastValidationError(
|
|
349
|
-
|
|
349
|
+
`Broadcast maxLifetimeMs must be a safe integer between 1 and ${broadcastLimits.maxLifetimeMs} milliseconds`,
|
|
350
350
|
);
|
|
351
351
|
return value;
|
|
352
352
|
}
|