@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 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 streams renewed within 60 seconds. Terminal 4xx
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,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;QACnC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;KAC1D,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,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;AAyDD,wGAAwG;AACxG,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,sBAAsB,GAC9B,eAAe,CAglBjB"}
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 controller;
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
- for (const observer of entry.observers)
105
- report(observer, error);
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
- controller?.abort();
131
- controller = undefined;
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
- controller = abort;
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(() => abort.abort(), ms);
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
- lifetime = setTimeout(() => abort.abort(), broadcastLimits.maxLifetimeMs);
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() || chunk.done)
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
- controller = undefined;
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("Broadcast connection interrupted", true));
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
- controller?.abort();
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":"AAAA,OAAO,EACL,6BAA6B,GAE9B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,wBAAwB,EACxB,eAAe,EAEf,UAAU,EAGV,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAmBpB,6FAA6F;AAC7F,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAGlC;IACA;IAHX,YACE,OAAe,EACN,SAAkB,EAClB,MAAe;QAExB,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,cAAS,GAAT,SAAS,CAAS;QAClB,WAAM,GAAN,MAAM,CAAS;QAGxB,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAgED,SAAS,UAAU,CAAC,QAAgB,EAAE,OAAO,GAAG,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IACrE,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAkB;IAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,CAAC;IACrB,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QACpC,CAAC,CAAC,OAAO,GAAG,KAAK;QACjB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACnC,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,uFAAuF;AACvF,KAAK,UAAU,SAAS,CAAI,IAAgB,EAAE,MAAmB;IAC/D,IAAI,MAAM,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;YACxB,IAAI;YACJ,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBAC/B,MAAM,GAAG,GAAG,EAAE,CACZ,MAAM,CACJ,IAAI,oBAAoB,CAAC,iCAAiC,EAAE,IAAI,CAAC,CAClE,CAAC;gBACJ,IAAI,MAAM,CAAC,OAAO;oBAAE,MAAM,EAAE,CAAC;;oBACxB,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAChE,CAAC,CAAC;SACH,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,wGAAwG;AACxG,MAAM,UAAU,qBAAqB,CACnC,OAA+B;IAE/B,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;IAClD,MAAM,eAAe,GAAG,6BAA6B,CACnD,OAAO,CAAC,eAAe,EACvB;QACE,YAAY,EAAE,kBAAkB;QAChC,OAAO,EAAE,WAAW;KACrB,CACF,CAAC;IACF,IAAI,cAAc,GAA4B,MAAM,CAAC,MAAM,CAAC;QAC1D,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;IACH,IAAI,WAAW,GAAsC,SAAS,CAAC;IAC/D,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiB,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAY,CAAC;IACtC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,mBAES,CAAC;IACd,IAAI,UAAqD,CAAC;IAC1D,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,SAAS,MAAM,CAAC,KAAa;QAC3B,IAAI,MAAM;YAAE,OAAO,QAAQ,CAAC;QAC5B,IAAI,KAAK,EAAE,OAAO;YAAE,OAAO,SAAS,CAAC;QACrC,IAAI,KAAK,EAAE,KAAK;YAAE,OAAO,WAAW,CAAC;QACrC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;YAC9D,OAAO,WAAW,CAAC;QACrB,IACE,CAAC,KAAK;YACN,OAAO,CAAC,IAAI,GAAG,CAAC;YAChB,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;YAErD,OAAO,SAAS,CAAC;QACnB,OAAO,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC;IACnD,CAAC;IAED,SAAS,MAAM,CAAC,QAAkB,EAAE,KAAc;QAChD,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE,OAAO;QAC7B,IAAI,CAAC;YACH,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,oDAAoD;QACtD,CAAC;IACH,CAAC;IACD,SAAS,MAAM,CAAC,QAAkB,EAAE,QAAoC;QACtE,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE,OAAO;QAC7B,IAAI,CAAC;YACH,KAAK,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAC/C,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CACxB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,SAAS,MAAM,CAAC,KAAY,EAAE,IAAI,GAAG,cAAc;QACjD,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QAC5B,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS;YACpC,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3E,CAAC;IACD,SAAS,IAAI,CACX,KAAY,EACZ,KAA2B,EAC3B,OAAO,GAAG,CAAC,EACX,OAAgC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QAEzE,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QACpB,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;QACjC,IAAI,KAAK,CAAC,SAAS;YACjB,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;QAC3E,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACpB,IAAI,IAAI,CAAC,MAAM,KAAK,iBAAiB;YACnC,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS;gBAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACpE,CAAC;IAED,SAAS,UAAU;QACjB,IAAI,UAAU,KAAK,SAAS;YAAE,YAAY,CAAC,UAAU,CAAC,CAAC;QACvD,UAAU,GAAG,SAAS,CAAC;IACzB,CAAC;IACD,SAAS,aAAa;QACpB,UAAU,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAC1C,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,aAAa,GAAG,CAAC,CACrE,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM;YAAE,OAAO;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CACtE,CAAC;QACF,8FAA8F;QAC9F,UAAU,GAAG,UAAU,CACrB,GAAG,EAAE;YACH,IACE,OAAO,CAAC,IAAI,CACV,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,GAAG,EAAE,CAC/D;gBAED,OAAO,CAAC,WAAW,CAAC,CAAC;;gBAClB,aAAa,EAAE,CAAC;QACvB,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,CAC/B,CAAC;IACJ,CAAC;IAED,SAAS,OAAO,CAAC,SAA4C,SAAS;QACpE,IAAI,MAAM;YAAE,OAAO;QACnB,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QAC3E,UAAU,EAAE,CAAC;QACb,mBAAmB,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC7C,mBAAmB,GAAG,SAAS,CAAC;QAChC,UAAU,EAAE,CAAC;QACb,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACrC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,aAAa;YAAE,OAAO;QAC1B,aAAa,GAAG,IAAI,CAAC;QACrB,cAAc,CAAC,GAAG,EAAE;YAClB,aAAa,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,MAAM;gBAAE,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,OAAO,CAAC,OAAe;QACpC,MAAM,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAC3C,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,GAAG,EAAE,CAC/D,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACrB,aAAa,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,QAAQ;YAAE,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC;QACtD,uFAAuF;QACvF,aAAa,EAAE,CAAC;QAChB,SAAS,GAAG,IAAI,CAAC;QACjB,MAAM,IAAI,GAAG,cAAc,CAAC;QAC5B,IAAI,SAAS,GAAsC,SAAS,CAAC;QAC7D,eAAe,CAAC,MAAM,CAAC;YACrB,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,MAAM,EAAE;SACjE,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;QACpC,mBAAmB,GAAG,CAAC,MAAM,EAAE,EAAE;YAC/B,SAAS,GAAG,MAAM,CAAC;YACnB,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC,CAAC;QACF,MAAM,IAAI,GAAG,GAAG,EAAE,CAChB,CAAC,MAAM,IAAI,OAAO,KAAK,UAAU,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;QAC7D,IAAI,MAA2D,CAAC;QAChE,IAAI,KAAgD,CAAC;QACrD,IAAI,QAAmD,CAAC;QACxD,IAAI,SAAoD,CAAC;QACzD,MAAM,GAAG,GAAG,CAAC,EAAU,EAAE,EAAE;YACzB,IAAI,KAAK,KAAK,SAAS;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAC7C,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBACtB,SAAS,GAAG,cAAc,CAAC;gBAC3B,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,CAAC,EAAE,EAAE,CAAC,CAAC;QACT,CAAC,CAAC;QACF,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC;YACH,GAAG,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;YACpC,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,OAAO,CAAC,GAAG,EACX,OAAO,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CACrE,CAAC;YACF,IACE,GAAG,CAAC,QAAQ;gBACZ,GAAG,CAAC,QAAQ;gBACZ,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAE3C,MAAM,IAAI,oBAAoB,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YAC1E,GAAG,CAAC,YAAY,CAAC,GAAG,CAClB,eAAe,EACf,IAAI,CAAC,SAAS,CAAC;gBACb,OAAO,EAAE,CAAC;gBACV,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBACjC,EAAE,EAAE,KAAK,CAAC,EAAE;oBACZ,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;oBACxB,MAAM,EAAE,KAAK,CAAC,MAAM;iBACrB,CAAC,CAAC;aACJ,CAAC,CACH,CAAC;YACF,IACE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,UAAU;gBAC/C,eAAe,CAAC,YAAY;gBAE5B,MAAM,IAAI,oBAAoB,CAC5B,uDAAuD,EACvD,KAAK,CACN,CAAC;YACJ,MAAM,OAAO,GAAG,IAAI,OAAO,CACzB,OAAO,OAAO,CAAC,OAAO,KAAK,UAAU;gBACnC,CAAC,CAAC,MAAM,SAAS,CACb,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EACvC,KAAK,CAAC,MAAM,CACb;gBACH,CAAC,CAAC,OAAO,CAAC,OAAO,CACpB,CAAC;YACF,IAAI,CAAC,IAAI,EAAE;gBAAE,OAAO;YACpB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,QAAQ,CAAC,CAAC;YACpD,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;YAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE;gBAC5B,MAAM,EAAE,KAAK;gBACb,OAAO;gBACP,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,aAAa;gBACjD,KAAK,EAAE,UAAU;gBACjB,QAAQ,EAAE,OAAO;gBACjB,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC,CAAC;YACH,KAAK,QAAQ,CAAC,IAAI,CAChB,CAAC,QAAQ,EAAE,EAAE;gBACX,IAAI,CAAC,IAAI,EAAE;oBAAE,KAAK,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACnE,CAAC,EACD,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;YACF,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YACzD,IAAI,CAAC,IAAI,EAAE;gBAAE,OAAO;YACpB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,SAAS,GAAG,cAAc,CAAC;gBAC3B,QAAQ,GAAG,IAAI,CAAC;gBAChB,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC;gBACpE,KAAK,MAAM,KAAK,IAAI,QAAQ;oBAC1B,IAAI,CACF,KAAK,EACL,IAAI,oBAAoB,CACtB,mCAAmC,EACnC,SAAS,EACT,QAAQ,CAAC,MAAM,CAChB,EACD,kBAAkB,CAAC,QAAQ,CAAC,CAC7B,CAAC;gBACJ,KAAK,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBACpD,OAAO;YACT,CAAC;YACD,IACE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;gBAC5D,mBAAmB;gBACrB,CAAC,QAAQ,CAAC,IAAI;gBAEd,MAAM,IAAI,oBAAoB,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;YACtE,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACnC,OAAO,GAAG,IAAI,CAAC;YACf,GAAG,CAAC,eAAe,CAAC,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;YAC7C,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YACtC,IAAI,iBAAiB,GAAG,KAAK,CAAC;YAC9B,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC1B,SAAS,GAAG,cAAc,CAAC;gBAC3B,KAAK,MAAM,KAAK,IAAI,QAAQ;oBAC1B,IACE,CAAC,KAAK,CAAC,KAAK;wBACZ,CAAC,KAAK,CAAC,OAAO;wBACd,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,GAAG,EAAE;wBAEjC,IAAI,CACF,KAAK,EACL,IAAI,oBAAoB,CAAC,+BAA+B,EAAE,IAAI,CAAC,CAChE,CAAC;gBACN,OAAO,CAAC,cAAc,CAAC,CAAC;YAC1B,CAAC,EAAE,eAAe,CAAC,cAAc,CAAC,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YACjE,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,IAAI,GAAa,EAAE,CAAC;YACxB,IAAI,SAAS,GAAG,EAAE,CAAC;YACnB,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,IAAI,gBAAgB,GAAG,KAAK,CAAC;YAC7B,KAAK,UAAU,IAAI,CAAC,KAAa;gBAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;wBAChB,gBAAgB,GAAG,KAAK,CAAC;wBACzB,IAAI,SAAS,KAAK,WAAW;4BAC3B,MAAM,IAAI,oBAAoB,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;wBACnE,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;wBACnD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;4BACrC,MAAM,IAAI,oBAAoB,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;wBACnE,MAAM,OAAO,GAAG,KAAgC,CAAC;wBACjD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;4BAC/B,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC;gCACnC,MAAM,IAAI,oBAAoB,CAC5B,2BAA2B,EAC3B,KAAK,CACN,CAAC;4BACJ,gBAAgB,GAAG,IAAI,CAAC;4BACxB,IAAI,GAAG,EAAE,CAAC;4BACV,SAAS,GAAG,EAAE,CAAC;4BACf,UAAU,GAAG,CAAC,CAAC;4BACf,OAAO;wBACT,CAAC;wBACD,MAAM,KAAK,GACT,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;wBACpE,IAAI,CAAC,KAAK,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;4BAC5C,MAAM,IAAI,oBAAoB,CAC5B,sCAAsC,EACtC,KAAK,CACN,CAAC;wBACJ,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;4BACtD,IAAI,GAAG,EAAE,CAAC;4BACV,SAAS,GAAG,EAAE,CAAC;4BACf,UAAU,GAAG,CAAC,CAAC;4BACf,OAAO;wBACT,CAAC;wBACD,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;4BAC7B,IAAI,KAAK,CAAC,KAAK;gCACb,MAAM,IAAI,oBAAoB,CAC5B,+BAA+B,EAC/B,KAAK,CACN,CAAC;4BACJ,MAAM,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC;4BACjD,IACE,OAAO,kBAAkB,KAAK,QAAQ;gCACtC,CAAC,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC;gCACzC,kBAAkB,GAAG,CAAC;gCACtB,kBAAkB,GAAG,eAAe,CAAC,aAAa;gCAElD,MAAM,IAAI,oBAAoB,CAC5B,uCAAuC,EACvC,KAAK,CACN,CAAC;4BACJ,qEAAqE;4BACrE,uEAAuE;4BACvE,IAAI,CAAC,iBAAiB,EAAE,CAAC;gCACvB,QAAQ,GAAG,UAAU,CACnB,GAAG,EAAE;oCACH,SAAS,GAAG,cAAc,CAAC;oCAC3B,KAAK,CAAC,KAAK,EAAE,CAAC;gCAChB,CAAC,EACD,IAAI,CAAC,GAAG,CACN,CAAC,EACD,kBAAkB;oCAChB,eAAe,CAAC,eAAe;oCAC/B,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,CACpC,CACF,CAAC;4BACJ,CAAC;4BACD,iBAAiB,GAAG,IAAI,CAAC;4BACzB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;4BACnB,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;4BACnB,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC;4BACxB,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;4BACpB,eAAe,CAAC,MAAM,CAAC;gCACrB,IAAI,EAAE,iBAAiB;gCACvB,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;6BACjC,CAAC,CAAC;4BACH,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS;gCACpC,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;wBAClD,CAAC;6BAAM,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;4BACpC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ;gCACnD,MAAM,IAAI,oBAAoB,CAC5B,kCAAkC,EAClC,KAAK,CACN,CAAC;4BACJ,MAAM,KAAK,GAAG,MAAM,SAAS,CAC3B,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE;gCAC/B,KAAK,EAAE,OAAO,CAAC,KAAK;gCACpB,IAAI,EAAE,OAAO,CAAC,IAAI;6BACnB,CAAC,EACF,KAAK,CAAC,MAAM,CACb,CAAC;4BACF,IAAI,IAAI,EAAE;gCACR,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS;oCACpC,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;wBACtD,CAAC;6BAAM,IACL,OAAO,CAAC,IAAI,KAAK,UAAU;4BAC3B,OAAO,CAAC,IAAI,KAAK,aAAa,EAC9B,CAAC;4BACD,IACE,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ;gCAClC,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;gCACjC,OAAO,CAAC,MAAM,GAAG,GAAG;gCACpB,OAAO,CAAC,MAAM,GAAG,GAAG;gCAEpB,MAAM,IAAI,oBAAoB,CAC5B,2BAA2B,EAC3B,KAAK,CACN,CAAC;4BACJ,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,KAAK,aAAa,CAAC;4BACjD,IACE,SAAS,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC;gCAE/D,MAAM,IAAI,oBAAoB,CAC5B,0CAA0C,EAC1C,KAAK,CACN,CAAC;4BACJ,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;4BACxC,IACE,UAAU,KAAK,SAAS;gCACxB,CAAC,OAAO,UAAU,KAAK,QAAQ;oCAC7B,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;oCAC5B,UAAU,GAAG,CAAC,CAAC;gCAEjB,MAAM,IAAI,oBAAoB,CAC5B,+BAA+B,EAC/B,KAAK,CACN,CAAC;4BACJ,SAAS,GAAG,cAAc,CAAC;4BAC3B,IAAI,CACF,KAAK,EACL,IAAI,oBAAoB,CACtB,uCAAuC,EACvC,SAAS,EACT,OAAO,CAAC,MAAM,CACf,EACD,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAChD,CAAC;4BACF,aAAa,EAAE,CAAC;wBAClB,CAAC;;4BACC,MAAM,IAAI,oBAAoB,CAC5B,iCAAiC,EACjC,KAAK,CACN,CAAC;wBACJ,IACE,QAAQ,CAAC,KAAK,CACZ,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,KAAK;4BACX,KAAK,CAAC,OAAO;4BACb,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CACnC,EACD,CAAC;4BACD,IAAI,SAAS,KAAK,SAAS;gCAAE,YAAY,CAAC,SAAS,CAAC,CAAC;4BACrD,SAAS,GAAG,SAAS,CAAC;wBACxB,CAAC;wBACD,IACE,QAAQ,CAAC,KAAK,CACZ,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAC7D,EACD,CAAC;4BACD,QAAQ,GAAG,IAAI,CAAC;4BAChB,KAAK,CAAC,KAAK,EAAE,CAAC;wBAChB,CAAC;oBACH,CAAC;oBACD,IAAI,GAAG,EAAE,CAAC;oBACV,SAAS,GAAG,EAAE,CAAC;oBACf,UAAU,GAAG,CAAC,CAAC;oBACf,OAAO;gBACT,CAAC;gBACD,8EAA8E;gBAC9E,gBAAgB,GAAG,KAAK,CAAC;gBACzB,UAAU,IAAI,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC;gBACzD,IACE,UAAU;oBACV,eAAe,CAAC,YAAY,GAAG,eAAe,CAAC,YAAY;oBAE3D,MAAM,IAAI,oBAAoB,CAC5B,wCAAwC,EACxC,KAAK,CACN,CAAC;gBACJ,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,OAAO;gBAClC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACjC,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACxD,MAAM,OAAO,GACX,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC5D,IAAI,KAAK,KAAK,MAAM;oBAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;qBACpC,IAAI,KAAK,KAAK,OAAO;oBAAE,SAAS,GAAG,OAAO,CAAC;qBAC3C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,OAAO;oBAC1C,MAAM,IAAI,oBAAoB,CAC5B,2CAA2C,EAC3C,KAAK,CACN,CAAC;YACN,CAAC;YACD,OAAO,IAAI,EAAE,EAAE,CAAC;gBACd,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC3D,IAAI,CAAC,IAAI,EAAE;oBAAE,MAAM;gBACnB,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBACf,SAAS;wBACP,gBAAgB,IAAI,CAAC,MAAM,IAAI,UAAU,KAAK,CAAC;4BAC7C,CAAC,CAAC,iBAAiB;4BACnB,CAAC,CAAC,SAAS,CAAC;oBAChB,MAAM;gBACR,CAAC;gBACD,GAAG,CAAC,eAAe,CAAC,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;gBAC7C,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,eAAe,CAAC,aAAa;oBACxD,MAAM,IAAI,oBAAoB,CAC5B,2CAA2C,EAC3C,KAAK,CACN,CAAC;gBACJ,IAAI,CAAC;oBACH,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1D,CAAC;gBAAC,MAAM,CAAC;oBACP,MAAM,IAAI,oBAAoB,CAC5B,iCAAiC,EACjC,KAAK,CACN,CAAC;gBACJ,CAAC;gBACD,IACE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU;oBAC3C,eAAe,CAAC,aAAa;oBAE7B,MAAM,IAAI,oBAAoB,CAC5B,2CAA2C,EAC3C,KAAK,CACN,CAAC;gBACJ,SAAS,CAAC;oBACR,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACxC,IAAI,CAAC,KAAK;wBAAE,MAAM;oBAClB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC;wBAAE,MAAM;oBAClE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;oBAC3C,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;oBACrD,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;oBAClB,IAAI,CAAC,IAAI,EAAE;wBAAE,MAAM;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,OAAO,KAAK,UAAU,IAAI,CAAC,MAAM;gBAAE,SAAS,GAAG,cAAc,CAAC;YAClE,IACE,OAAO,KAAK,UAAU;gBACtB,CAAC,MAAM;gBACP,KAAK,YAAY,oBAAoB;gBACrC,CAAC,KAAK,CAAC,SAAS,EAChB,CAAC;gBACD,QAAQ,GAAG,IAAI,CAAC;gBAChB,KAAK,MAAM,KAAK,IAAI,QAAQ;oBAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACnD,CAAC;iBAAM,IACL,OAAO,KAAK,UAAU;gBACtB,CAAC,MAAM;gBACP,CAAC,KAAK,YAAY,wBAAwB;oBACxC,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,YAAY,WAAW,CAAC,CAAC,EACrE,CAAC;gBACD,QAAQ,GAAG,IAAI,CAAC;gBAChB,KAAK,MAAM,KAAK,IAAI,QAAQ;oBAC1B,IAAI,CACF,KAAK,EACL,IAAI,oBAAoB,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAC7D,CAAC;YACN,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,KAAK,KAAK,SAAS;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,QAAQ,KAAK,SAAS;gBAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,SAAS,KAAK,SAAS;gBAAE,YAAY,CAAC,SAAS,CAAC,CAAC;YACrD,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,KAAK,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YACnD,eAAe,CAAC,MAAM,CAAC;gBACrB,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;aAClC,CAAC,CAAC;YACH,IAAI,OAAO,KAAK,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC;gBACtC,WAAW,GAAG,SAAS,CAAC;gBACxB,mBAAmB,GAAG,SAAS,CAAC;gBAChC,IAAI,CAAC,QAAQ;oBACX,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;wBAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,GAAG,EAAE;4BACrD,IAAI,CACF,KAAK,EACL,IAAI,oBAAoB,CACtB,SAAS,KAAK,iBAAiB;gCAC7B,CAAC,CAAC,8BAA8B;gCAChC,CAAC,CAAC,kCAAkC,EACtC,IAAI,CACL,EACD,CAAC,EACD,KAAK,CACN,CAAC;oBACN,CAAC;gBACH,aAAa,EAAE,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,SAAS,IAAI;QACX,IACE,OAAO,QAAQ,KAAK,WAAW;YAC/B,QAAQ,CAAC,eAAe,KAAK,QAAQ;YAErC,OAAO;QACT,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC3E,IAAI,OAAO,QAAQ,KAAK,WAAW;QACjC,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;IAEtD,OAAO;QACL,SAAS,CAAC,OAAO,EAAE,mBAAmB;YACpC,IAAI,MAAM;gBACR,MAAM,IAAI,oBAAoB,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;YACtE,IAAI,KAAwB,CAAC;YAC7B,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,MAAM,QAAQ,GAAa;gBACzB,GAAG,mBAAmB;gBACtB,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAI,eAAe,EAAE;gBACjC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,mBAAmB,CAAC,OAAO,CACzB,KAA0C,CAC3C;aACJ,CAAC;YACF,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,MAAM,iBAAiB,GAAG,UAAU,CAClC,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,EACjC,eAAe,CAAC,cAAc,CAC/B,CAAC;YACF,KAAK,SAAS,CACZ,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,CAAC,MAAM,CAAC,EACvD,QAAQ,CAAC,UAAU,CAAC,MAAM,CAC3B;iBACE,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;gBACf,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,MAAM;oBAAE,OAAO;gBACvC,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC7C,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACzB,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,IAAI,OAAO,CAAC,IAAI,IAAI,eAAe,CAAC,aAAa;wBAC/C,MAAM,IAAI,oBAAoB,CAC5B,6DAA6D,EAC7D,KAAK,CACN,CAAC;oBACJ,KAAK,GAAG;wBACN,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC;wBACpB,GAAG;wBACH,OAAO;wBACP,MAAM;wBACN,SAAS,EAAE,IAAI,GAAG,EAAE;wBACpB,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,KAAK;wBACZ,QAAQ,EAAE,CAAC;wBACX,aAAa,EAAE,CAAC;qBACjB,CAAC;oBACF,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBACxB,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBAC9B,OAAO,CAAC,qBAAqB,CAAC,CAAC;gBACjC,CAAC;qBAAM,CAAC;oBACN,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO;wBAC3B,MAAM,IAAI,oBAAoB,CAC5B,uCAAuC,OAAO,CAAC,IAAI,EAAE,EACrD,KAAK,CACN,CAAC;oBACJ,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBAC9B,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,CACpB,QAAQ,CAAC,cAAc,EAAE,CACvB,MAAM,CAAC,KAAK,CAAC,EACb,KAAK,EAAE,cAAc,IAAI,cAAc,CACxC,CACF,CAAC;oBACF,IAAI,KAAK,CAAC,KAAK;wBACb,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,CACpB,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,IAAI,cAAc,CAAC,CACzD,CAAC;gBACN,CAAC;YACH,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACxB,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,CACpB,QAAQ,CAAC,cAAc,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,CACrD,CAAC;YACJ,CAAC,CAAC;iBACD,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAClD,OAAO;gBACL,SAAS,EAAE,GAAG,EAAE,CACd,CAAC,QAAQ,CAAC,MAAM,IAAI,MAAM;oBACxB,CAAC,CAAC,QAAQ;oBACV,CAAC,CAAC,OAAO;wBACP,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBACrB,WAAW;oBACT,IAAI,CAAC,QAAQ,CAAC,MAAM;wBAAE,OAAO;oBAC7B,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC;oBACxB,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;oBAC5B,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAC3B,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAClC,IACE,KAAK;wBACL,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI;wBACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,EAChC,CAAC;wBACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBAC1B,OAAO,CAAC,qBAAqB,CAAC,CAAC;oBACjC,CAAC;gBACH,CAAC;aACF,CAAC;QACJ,CAAC;QACD,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,4BAA4B,EAAE,QAAQ,EAAE,CAAC;QACrE,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE;QACzB,MAAM;YACJ,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;gBACrC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;gBACtB,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC;gBACxB,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,KAAK;YACH,IAAI,MAAM;gBAAE,OAAO;YACnB,MAAM,GAAG,IAAI,CAAC;YACd,UAAU,EAAE,CAAC;YACb,mBAAmB,EAAE,CAAC,SAAS,CAAC,CAAC;YACjC,UAAU,EAAE,CAAC;YACb,IAAI,OAAO,MAAM,KAAK,WAAW;gBAC/B,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC7C,IAAI,OAAO,QAAQ,KAAK,WAAW;gBACjC,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;YACzD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,CACpB,QAAQ,CAAC,cAAc,EAAE,CACvB,QAAQ,EACR,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CACrC,CACF,CAAC;gBACF,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC;gBACxB,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAC9B,CAAC;YACD,SAAS,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -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
- /** Fixed protocol limits shared by clients, endpoints, and providers. */
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
- maxLifetimeMs: 60000;
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,yEAAyE;AACzE,eAAO,MAAM,eAAe;;;;;;;;EAQ1B,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
+ {"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
- /** Fixed protocol limits shared by clients, endpoints, and providers. */
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
- maxLifetimeMs: 60_000,
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":"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"}
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.maxLifetimeMs) {
207
- if (!Number.isInteger(value) ||
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("Broadcast maxLifetimeMs must be between 1 and 60000");
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@beignet/core",
3
- "version": "0.0.54",
3
+ "version": "0.0.56",
4
4
  "type": "module",
5
5
  "description": "Core framework primitives for Beignet",
6
6
  "exports": {
@@ -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. Keep SSE lifetime at or below 60 seconds and below host duration with
431
- headroom. Do not start background worker loops in serverless providers.
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?: (status: BroadcastClientStatus) => void;
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?: (status: BroadcastClientStatus) => void;
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 controller: AbortController | undefined;
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(entry: Entry, error: BroadcastClientError, minimum = 0) {
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
- for (const observer of entry.observers) report(observer, error);
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
- controller?.abort();
214
- controller = undefined;
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
- controller = abort;
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(() => abort.abort(), ms);
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
- lifetime = setTimeout(() => abort.abort(), broadcastLimits.maxLifetimeMs);
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() || chunk.done) break;
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
- controller = undefined;
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
- "Broadcast connection interrupted",
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, () => observer.onStatusChange?.(status(entry)));
652
- if (entry.ready) invoke(observer, observer.onSync);
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, () => observer.onStatusChange?.("blocked"));
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
- controller?.abort();
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, () => observer.onStatusChange?.("closed"));
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
- /** Fixed protocol limits shared by clients, endpoints, and providers. */
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
- maxLifetimeMs: 60_000,
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.maxLifetimeMs,
341
+ value: number = broadcastLimits.defaultLifetimeMs,
342
342
  ): number {
343
343
  if (
344
- !Number.isInteger(value) ||
344
+ !Number.isSafeInteger(value) ||
345
345
  value < 1 ||
346
346
  value > broadcastLimits.maxLifetimeMs
347
347
  )
348
348
  throw new BroadcastValidationError(
349
- "Broadcast maxLifetimeMs must be between 1 and 60000",
349
+ `Broadcast maxLifetimeMs must be a safe integer between 1 and ${broadcastLimits.maxLifetimeMs} milliseconds`,
350
350
  );
351
351
  return value;
352
352
  }