@rotorsoft/act-http 1.10.0 → 1.10.2

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.
Files changed (36) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/@types/api/sse-wiring.d.ts +15 -8
  3. package/dist/@types/api/sse-wiring.d.ts.map +1 -1
  4. package/dist/@types/sse/broadcast.d.ts +19 -1
  5. package/dist/@types/sse/broadcast.d.ts.map +1 -1
  6. package/dist/@types/sse/state-cache.d.ts +8 -1
  7. package/dist/@types/sse/state-cache.d.ts.map +1 -1
  8. package/dist/@types/sse/types.d.ts +19 -0
  9. package/dist/@types/sse/types.d.ts.map +1 -1
  10. package/dist/api/index.cjs +6100 -1729
  11. package/dist/api/index.cjs.map +1 -1
  12. package/dist/api/index.js +3 -2
  13. package/dist/{chunk-BNEUODIM.js → chunk-EQDDWLTJ.js} +23 -4
  14. package/dist/chunk-EQDDWLTJ.js.map +1 -0
  15. package/dist/{chunk-WGFX4G27.js → chunk-IXMRQX4Y.js} +6078 -1726
  16. package/dist/chunk-IXMRQX4Y.js.map +1 -0
  17. package/dist/chunk-MKD3SM3N.js +9 -0
  18. package/dist/chunk-MKD3SM3N.js.map +1 -0
  19. package/dist/hono/index.cjs +6104 -1736
  20. package/dist/hono/index.cjs.map +1 -1
  21. package/dist/hono/index.js +6 -8
  22. package/dist/hono/index.js.map +1 -1
  23. package/dist/openapi/index.cjs +6106 -1754
  24. package/dist/openapi/index.cjs.map +1 -1
  25. package/dist/openapi/index.js +1 -1
  26. package/dist/sse/index.cjs +63 -20
  27. package/dist/sse/index.cjs.map +1 -1
  28. package/dist/sse/index.js +63 -20
  29. package/dist/sse/index.js.map +1 -1
  30. package/dist/trpc/index.cjs +6100 -1729
  31. package/dist/trpc/index.cjs.map +1 -1
  32. package/dist/trpc/index.js +3 -2
  33. package/dist/trpc/index.js.map +1 -1
  34. package/package.json +5 -5
  35. package/dist/chunk-BNEUODIM.js.map +0 -1
  36. package/dist/chunk-WGFX4G27.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import type { BroadcastChannel } from "../sse/broadcast.js";
2
- import type { BroadcastState } from "../sse/types.js";
2
+ import { type BroadcastState } from "../sse/types.js";
3
3
  /**
4
4
  * SSE wiring options shared by the auto-generated `trpc` and `hono`
5
5
  * transports. When supplied, each transport emits one streaming
@@ -53,10 +53,15 @@ export type SseOptions = {
53
53
  * broadcast frames. A consumer that stalls (slow client, paused
54
54
  * tab) can't drain frames as fast as a busy stream publishes them;
55
55
  * without a bound the backlog grows until the process runs out of
56
- * memory. When the backlog is full the **oldest** frame is dropped
57
- * to make room for the newest — the consumer always converges on
58
- * current state (each frame carries a full version-keyed patch),
59
- * it just skips intermediate versions it was too slow to see.
56
+ * memory. When the backlog is full the oldest **version-keyed** frame
57
+ * is dropped to make room for the newest: the consumer sees the
58
+ * version gap, reports `behind`, and refetches, so it still converges
59
+ * on current state having skipped intermediate versions it was too
60
+ * slow to see.
61
+ *
62
+ * Version-neutral frames (`_overlay`, `_resync`) are never dropped
63
+ * silently — they create no gap to notice, so a backlog made only of
64
+ * them collapses into a single `_resync` instead (#1649).
60
65
  *
61
66
  * Default `256`. Validated range `[1, 100_000]`.
62
67
  */
@@ -92,9 +97,11 @@ export declare const DEFAULT_SSE_HEARTBEAT_MS = 30000;
92
97
  * Default cap on the per-connection undelivered-frame backlog. Sized
93
98
  * so a briefly-stalled consumer on a busy stream keeps recent history
94
99
  * without letting a permanently-wedged client pin unbounded memory.
95
- * At overflow the oldest frame is dropped (drop-oldest) — each frame
96
- * is a full version-keyed patch, so the consumer converges on current
97
- * state regardless of which intermediate versions it missed.
100
+ * At overflow the oldest version-keyed frame is dropped: it is a full
101
+ * version-keyed patch, so the consumer sees the gap and converges on
102
+ * current state regardless of which intermediate versions it missed.
103
+ * Version-neutral frames create no gap, so they collapse into a
104
+ * `_resync` rather than being dropped silently (#1649).
98
105
  */
99
106
  export declare const DEFAULT_SSE_MAX_PENDING_PER_CONNECTION = 256;
100
107
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"sse-wiring.d.ts","sourceRoot":"","sources":["../../../src/api/sse-wiring.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB;;;;;OAKG;IAEH,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACxC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAC3C,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC;IACnD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;CAC1C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAE/C;;;GAGG;AACH,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAE/C;;;;;;;GAOG;AACH,eAAO,MAAM,sCAAsC,MAAM,CAAC;AA+B1D;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,CAY/D;AAED;;;;;;;;;GASG;AACH,qBAAa,oBAAoB;IAC/B,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,KAAK,CAAK;IAElB,YAAY,KAAK,EAAE,MAAM,EAExB;IAED;;;;OAIG;IACH,OAAO,IAAI,OAAO,CAIjB;IAED;;;;OAIG;IACH,OAAO,IAAI,IAAI,CAEd;IAED,qDAAqD;IACrD,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAE7E;AAED;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAC9B;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAC5C;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAEvD;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,IAAI,OAAO,CAAC;IACnB,OAAO,IAAI,IAAI,CAAC;CACjB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,KAAK,CAAC;IACvC;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF;;;;;;;;;;GAUG;AAEH,wBAAuB,kBAAkB,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,GAAG,EACtE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC5B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,aAAa,GAAG,SAAS,EACrC,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,OAAO,CAAC,EAAE,aAAa,GACtB,cAAc,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAgDzC"}
1
+ {"version":3,"file":"sse-wiring.d.ts","sourceRoot":"","sources":["../../../src/api/sse-wiring.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EACL,KAAK,cAAc,EAIpB,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB;;;;;OAKG;IAEH,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACxC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAC3C,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC;IACnD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;CAC1C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAE/C;;;GAGG;AACH,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAE/C;;;;;;;;;GASG;AACH,eAAO,MAAM,sCAAsC,MAAM,CAAC;AA+B1D;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,CAY/D;AAED;;;;;;;;;GASG;AACH,qBAAa,oBAAoB;IAC/B,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,KAAK,CAAK;IAElB,YAAY,KAAK,EAAE,MAAM,EAExB;IAED;;;;OAIG;IACH,OAAO,IAAI,OAAO,CAIjB;IAED;;;;OAIG;IACH,OAAO,IAAI,IAAI,CAEd;IAED,qDAAqD;IACrD,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAE7E;AAED;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAC9B;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAC5C;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAEvD;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,IAAI,OAAO,CAAC;IACnB,OAAO,IAAI,IAAI,CAAC;CACjB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,KAAK,CAAC;IACvC;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF;;;;;;;;;;GAUG;AAEH,wBAAuB,kBAAkB,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,GAAG,EACtE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC5B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,aAAa,GAAG,SAAS,EACrC,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,OAAO,CAAC,EAAE,aAAa,GACtB,cAAc,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CA4EzC"}
@@ -1,5 +1,5 @@
1
1
  import { StateCache } from "./state-cache.js";
2
- import type { BroadcastState, PatchMessage, Subscriber } from "./types.js";
2
+ import { type BroadcastState, type PatchMessage, type Subscriber } from "./types.js";
3
3
  export declare class BroadcastChannel<S extends BroadcastState = BroadcastState> {
4
4
  private channels;
5
5
  private state_cache;
@@ -34,6 +34,24 @@ export declare class BroadcastChannel<S extends BroadcastState = BroadcastState>
34
34
  */
35
35
  cache_size?: number;
36
36
  });
37
+ /**
38
+ * Fan a resync out to a stream's live subscribers. `applyPatchMessage`
39
+ * always reports `behind` for it, so they refetch.
40
+ */
41
+ private broadcast_resync;
42
+ /**
43
+ * The LRU dropped an entry. If it carried overlay-contributed keys, that
44
+ * data existed only in the cache and is now gone: a later `publish()` has
45
+ * no baseline to carry it from, and the reseed a reconnecting client gets
46
+ * would silently lack presence a live client is still showing (#1648).
47
+ *
48
+ * `overlay()` was hardened for the same loss on its own path (#1423);
49
+ * catching it here covers `publish()` too, and does it at the moment the
50
+ * data is lost rather than at a later commit that may never come. Reading
51
+ * the marker off the entry being evicted is what avoids the parallel
52
+ * bookkeeping structure the `OVERLAY_KEYS` design explicitly rejected.
53
+ */
54
+ private on_cache_evict;
37
55
  /**
38
56
  * Publish domain patches from a commit.
39
57
  * patches[i] corresponds to version baseV + i + 1.
@@ -1 +1 @@
1
- {"version":3,"file":"broadcast.d.ts","sourceRoot":"","sources":["../../../src/sse/broadcast.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA4J3E,qBAAa,gBAAgB,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc;IACrE,OAAO,CAAC,QAAQ,CAAyC;IACzD,OAAO,CAAC,WAAW,CAAgB;IAEnC;;;OAGG;IACH,OAAO,CAAC,mBAAmB,CAA6C;IACxE,OAAO,CAAC,eAAe,CAA6B;IAEpD,YAAY,OAAO,CAAC,EAAE;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB;;;;;;WAMG;QACH,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;QAC3C;;;;;;WAMG;QACH,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;QAC/D;;;;WAIG;QACH,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,EAOA;IAED;;;;;;;OAOG;IACH,OAAO,CACL,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,CAAC,EACR,OAAO,GAAE,OAAO,CAAC,CAAC,CAAC,EAAO,GACzB,YAAY,CAAC,CAAC,CAAC,CAkCjB;IAED;;;;OAIG;IACH,OAAO,CACL,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,GACxB,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAiD7B;IAED;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CASzD;IAED,kDAAkD;IAClD,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAExC;IAED,8EAA8E;IAC9E,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAErC;IAED,4DAA4D;IAC5D,eAAe,CACb,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,GACxB,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAE7B;IAED,oEAAoE;IACpE,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE7C;IAED,0DAA0D;IAC1D,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAEzC;IAED,+EAA+E;IAC/E,IAAI,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC,CAEzB;CACF"}
1
+ {"version":3,"file":"broadcast.d.ts","sourceRoot":"","sources":["../../../src/sse/broadcast.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,YAAY,EAEjB,KAAK,UAAU,EAChB,MAAM,YAAY,CAAC;AAoLpB,qBAAa,gBAAgB,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc;IACrE,OAAO,CAAC,QAAQ,CAAyC;IACzD,OAAO,CAAC,WAAW,CAAgB;IAEnC;;;OAGG;IACH,OAAO,CAAC,mBAAmB,CAA6C;IACxE,OAAO,CAAC,eAAe,CAA6B;IAEpD,YAAY,OAAO,CAAC,EAAE;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB;;;;;;WAMG;QACH,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;QAC3C;;;;;;WAMG;QACH,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;QAC/D;;;;WAIG;QACH,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,EAQA;IAED;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,cAAc;IAMtB;;;;;;;OAOG;IACH,OAAO,CACL,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,CAAC,EACR,OAAO,GAAE,OAAO,CAAC,CAAC,CAAC,EAAO,GACzB,YAAY,CAAC,CAAC,CAAC,CAwCjB;IAED;;;;OAIG;IACH,OAAO,CACL,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,GACxB,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CA8C7B;IAED;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CASzD;IAED,kDAAkD;IAClD,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAExC;IAED,8EAA8E;IAC9E,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAErC;IAED,4DAA4D;IAC5D,eAAe,CACb,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,GACxB,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAE7B;IAED,oEAAoE;IACpE,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE7C;IAED,0DAA0D;IAC1D,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAEzC;IAED,+EAA+E;IAC/E,IAAI,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC,CAEzB;CACF"}
@@ -12,7 +12,14 @@ import type { BroadcastState } from "./types.js";
12
12
  export declare class StateCache<S extends BroadcastState = BroadcastState> {
13
13
  private cache;
14
14
  private maxSize;
15
- constructor(maxSize?: number);
15
+ private on_evict;
16
+ /**
17
+ * @param maxSize - Max entries before the LRU drops its oldest.
18
+ * @param onEvict - Called with the entry the LRU just dropped. Eviction is
19
+ * the moment cached-only data is lost, so it is the only place a caller
20
+ * can still see what went (#1648).
21
+ */
22
+ constructor(maxSize?: number, onEvict?: (key: string, state: S) => void);
16
23
  /** Get a cached state, promoting it to MRU position. */
17
24
  get(key: string): S | undefined;
18
25
  /** Set a cached state, evicting the LRU entry if at capacity. */
@@ -1 +1 @@
1
- {"version":3,"file":"state-cache.d.ts","sourceRoot":"","sources":["../../../src/sse/state-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;;;;;;GASG;AACH,qBAAa,UAAU,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc;IAC/D,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,OAAO,CAAS;IAExB,YAAY,OAAO,SAAK,EAEvB;IAED,wDAAwD;IACxD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAO9B;IAED,iEAAiE;IACjE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAM/B;IAED,6BAA6B;IAC7B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAExB;IAED,0CAA0C;IAC1C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAExB;IAED,wCAAwC;IACxC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,2DAA2D;IAC3D,OAAO,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAEvC;CACF"}
1
+ {"version":3,"file":"state-cache.d.ts","sourceRoot":"","sources":["../../../src/sse/state-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;;;;;;GASG;AACH,qBAAa,UAAU,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc;IAC/D,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAkC;IAElD;;;;;OAKG;IACH,YACE,OAAO,SAAK,EACZ,OAAO,GAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,IAAe,EAIpD;IAED,wDAAwD;IACxD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAO9B;IAED,iEAAiE;IACjE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAS/B;IAED,6BAA6B;IAC7B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAExB;IAED,0CAA0C;IAC1C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAExB;IAED,wCAAwC;IACxC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,2DAA2D;IAC3D,OAAO,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAEvC;CACF"}
@@ -34,4 +34,23 @@ export type PatchMessage<S extends BroadcastState = BroadcastState> = Record<num
34
34
  * Subscriber callback — receives version-keyed patch messages.
35
35
  */
36
36
  export type Subscriber<S extends BroadcastState = BroadcastState> = (msg: PatchMessage<S>) => void;
37
+ /**
38
+ * The frame that tells a client to refetch: no versions, so
39
+ * `applyPatchMessage` always reports `behind`.
40
+ *
41
+ * Every producer of a resync uses this — `overlay()` on a missing baseline,
42
+ * the cache on evicting overlay state, and the SSE backlog when it cannot
43
+ * drop a frame without losing it silently. One factory so the shape cannot
44
+ * drift between them.
45
+ */
46
+ export declare const resync_frame: <S extends BroadcastState>() => PatchMessage<S>;
47
+ /**
48
+ * Whether a frame carries no versions, so `applyPatchMessage` can never
49
+ * classify it as a gap.
50
+ *
51
+ * A version-keyed patch that goes missing is self-announcing: the next frame
52
+ * skips a version and the client refetches. An `_overlay` or `_resync` frame
53
+ * is not, which is why anything that drops frames has to tell them apart.
54
+ */
55
+ export declare const is_version_neutral: <S extends BroadcastState>(msg: PatchMessage<S>) => boolean;
37
56
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/sse/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACrD,sFAAsF;IACtF,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,IAAI,MAAM,CAC1E,MAAM,EACN,WAAW,CAAC,CAAC,CAAC,CACf,GAAG;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAE1D;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,IAAI,CAClE,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,KACjB,IAAI,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/sse/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACrD,sFAAsF;IACtF,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,IAAI,MAAM,CAC1E,MAAM,EACN,WAAW,CAAC,CAAC,CAAC,CACf,GAAG;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAE1D;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,IAAI,CAClE,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,KACjB,IAAI,CAAC;AAEV;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,cAAc,OAAK,YAAY,CAAC,CAAC,CAChC,CAAC;AAEzC;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,GAAI,CAAC,SAAS,cAAc,OACpD,YAAY,CAAC,CAAC,CAAC,KACnB,OAAwD,CAAC"}