statewire 0.21.0 → 0.22.0

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 (134) hide show
  1. package/dist/client/changes.d.ts +3 -6
  2. package/dist/client/changes.d.ts.map +1 -1
  3. package/dist/client/changes.js +1 -2
  4. package/dist/client/connection.d.ts +80 -83
  5. package/dist/client/connection.d.ts.map +1 -1
  6. package/dist/client/connection.js +2 -3
  7. package/dist/client/connection.js.map +1 -1
  8. package/dist/client/core.d.ts +39 -41
  9. package/dist/client/core.d.ts.map +1 -1
  10. package/dist/client/core.js +2 -3
  11. package/dist/client/session.d.ts +93 -95
  12. package/dist/client/session.d.ts.map +1 -1
  13. package/dist/client/session.js +6 -7
  14. package/dist/client/session.js.map +1 -1
  15. package/dist/client/sessionStore.d.ts +11 -14
  16. package/dist/client/sessionStore.d.ts.map +1 -1
  17. package/dist/client/sessionStore.js +1 -2
  18. package/dist/client/storageError.d.ts +2 -5
  19. package/dist/client/storageError.d.ts.map +1 -1
  20. package/dist/client/storageError.js +1 -2
  21. package/dist/client/timing.d.ts +11 -14
  22. package/dist/client/timing.d.ts.map +1 -1
  23. package/dist/client/timing.js +1 -2
  24. package/dist/document.d.ts +17 -20
  25. package/dist/document.d.ts.map +1 -1
  26. package/dist/document.js +1 -2
  27. package/dist/host/adapter.d.ts +4 -7
  28. package/dist/host/adapter.d.ts.map +1 -1
  29. package/dist/host/adapter.js +1 -2
  30. package/dist/host/draft.d.ts +13 -16
  31. package/dist/host/draft.d.ts.map +1 -1
  32. package/dist/host/draft.js +1 -2
  33. package/dist/host/engine.d.ts +7 -10
  34. package/dist/host/engine.d.ts.map +1 -1
  35. package/dist/host/engine.js +1 -2
  36. package/dist/host/host.d.ts +42 -45
  37. package/dist/host/host.d.ts.map +1 -1
  38. package/dist/host/host.js +1 -2
  39. package/dist/host/http.d.ts +4 -7
  40. package/dist/host/http.d.ts.map +1 -1
  41. package/dist/host/http.js +2 -3
  42. package/dist/host/socket.d.ts +144 -145
  43. package/dist/host/socket.d.ts.map +1 -1
  44. package/dist/host/socket.js +19 -9
  45. package/dist/host/socket.js.map +1 -1
  46. package/dist/host/synced.d.ts +3 -6
  47. package/dist/host/synced.d.ts.map +1 -1
  48. package/dist/host/synced.js +1 -2
  49. package/dist/host/work.d.ts +2 -5
  50. package/dist/host/work.d.ts.map +1 -1
  51. package/dist/host/work.js +1 -2
  52. package/dist/host-internal.d.ts +99 -93
  53. package/dist/host-internal.d.ts.map +1 -1
  54. package/dist/host.d.ts +90 -91
  55. package/dist/host.d.ts.map +1 -1
  56. package/dist/index.d.ts +11 -8
  57. package/dist/index.d.ts.map +1 -0
  58. package/dist/index.js +1 -1
  59. package/dist/statewire.d.ts +265 -268
  60. package/dist/statewire.d.ts.map +1 -1
  61. package/dist/statewire.js +1 -2
  62. package/dist/storage.d.ts +23 -26
  63. package/dist/storage.d.ts.map +1 -1
  64. package/dist/storage.js +1 -2
  65. package/dist/transports/fake-sse.d.ts +7 -10
  66. package/dist/transports/fake-sse.d.ts.map +1 -1
  67. package/dist/transports/fake-sse.js +1 -2
  68. package/dist/transports/fixtures.d.ts +19 -25
  69. package/dist/transports/fixtures.d.ts.map +1 -1
  70. package/dist/transports/fixtures.js +1 -2
  71. package/dist/transports/remote.d.ts +8 -11
  72. package/dist/transports/remote.d.ts.map +1 -1
  73. package/dist/transports/remote.js +1 -2
  74. package/dist/transports/sse-parser.d.ts +1 -4
  75. package/dist/transports/sse-parser.d.ts.map +1 -1
  76. package/dist/transports/sse-parser.js +1 -2
  77. package/dist/transports/sse.d.ts +50 -53
  78. package/dist/transports/sse.d.ts.map +1 -1
  79. package/dist/transports/sse.js +2 -3
  80. package/dist/transports/testing.d.ts +31 -34
  81. package/dist/transports/testing.d.ts.map +1 -1
  82. package/dist/transports/testing.js +1 -2
  83. package/dist/transports/ws.d.ts +5 -7
  84. package/dist/transports/ws.d.ts.map +1 -1
  85. package/dist/transports/ws.js +3 -4
  86. package/dist/transports/ws.js.map +1 -1
  87. package/dist/types.d.ts +81 -78
  88. package/dist/types.d.ts.map +1 -1
  89. package/dist/types.js +1 -2
  90. package/dist/util/draftTraps.d.ts +2 -4
  91. package/dist/util/draftTraps.d.ts.map +1 -1
  92. package/dist/util/draftTraps.js +1 -2
  93. package/dist/util/macrotask.d.ts +1 -4
  94. package/dist/util/macrotask.d.ts.map +1 -1
  95. package/dist/util/macrotask.js +1 -2
  96. package/dist/util/methodProxy.d.ts +1 -4
  97. package/dist/util/methodProxy.d.ts.map +1 -1
  98. package/dist/util/methodProxy.js +1 -2
  99. package/dist/util/randomId.d.ts +1 -4
  100. package/dist/util/randomId.d.ts.map +1 -1
  101. package/dist/util/randomId.js +1 -2
  102. package/dist/util/recordMutations.d.ts +5 -7
  103. package/dist/util/recordMutations.d.ts.map +1 -1
  104. package/dist/util/recordMutations.js +1 -2
  105. package/dist/util/statePath.d.ts +9 -12
  106. package/dist/util/statePath.d.ts.map +1 -1
  107. package/dist/util/statePath.js +1 -2
  108. package/dist/wire/context.d.ts +7 -12
  109. package/dist/wire/context.d.ts.map +1 -1
  110. package/dist/wire/context.js +2 -3
  111. package/dist/wire/documents.d.ts +36 -39
  112. package/dist/wire/documents.d.ts.map +1 -1
  113. package/dist/wire/documents.js +2 -3
  114. package/dist/wire/documents.js.map +1 -1
  115. package/dist/wire/limits.d.ts +7 -10
  116. package/dist/wire/limits.d.ts.map +1 -1
  117. package/dist/wire/limits.js +1 -2
  118. package/dist/wire/meta.d.ts +9 -11
  119. package/dist/wire/meta.d.ts.map +1 -1
  120. package/dist/wire/meta.js +1 -2
  121. package/dist/wire/meta.js.map +1 -1
  122. package/dist/wire/ops.d.ts +9 -12
  123. package/dist/wire/ops.d.ts.map +1 -1
  124. package/dist/wire/ops.js +1 -2
  125. package/dist/wire/protocol.d.ts +53 -56
  126. package/dist/wire/protocol.d.ts.map +1 -1
  127. package/dist/wire/protocol.js +1 -2
  128. package/dist/wire/version.d.ts +1 -4
  129. package/dist/wire/version.d.ts.map +1 -1
  130. package/dist/wire/version.js +1 -2
  131. package/package.json +6 -6
  132. package/src/client/connection.ts +13 -15
  133. package/src/host/socket.ts +47 -3
  134. package/src/host-internal.ts +10 -0
@@ -1,174 +1,174 @@
1
- import { CommandsHost } from "./host.js";
2
- import { StatewireHost } from "../host.js";
3
- import { StatewireProtocol } from "../wire/protocol.js";
4
- import { StatewireDocument } from "../document.js";
5
- import { Statewire } from "../types.js";
6
- import { StatewirePath } from "../wire/ops.js";
7
- import { StatewireHostInternal } from "../host-internal.js";
8
- import { ResourceElement } from "@assistant-ui/tap";
9
- //#region src/host/socket.d.ts
10
- declare const CLIENT_ID_RE: RegExp;
11
- declare const PRINCIPAL_MISMATCH_MESSAGE = "client id is bound to another principal";
1
+ import type { StatewireProtocol } from "../wire/protocol.js";
2
+ import type { ResourceElement } from "@assistant-ui/tap";
3
+ import type { CommandsHost } from "./host.js";
4
+ import type { Statewire } from "../types.js";
5
+ import type { StatewireHost } from "../host.js";
6
+ import type { StatewireHostInternal } from "../host-internal.js";
7
+ import type { StatewireDocument } from "../document.js";
8
+ import type { StatewirePath } from "../wire/ops.js";
9
+ export declare const CLIENT_ID_RE: RegExp;
10
+ export declare const PRINCIPAL_MISMATCH_MESSAGE = "client id is bound to another principal";
12
11
  /** Structural equality over auth values: primitives, Dates, arrays, and plain
13
12
  * objects compare by value; anything else by identity. */
14
- declare const authEquals: (a: unknown, b: unknown) => boolean;
15
- declare const SUBSCRIBER_LIMIT_MESSAGE = "stream subscriber limit reached";
13
+ export declare const authEquals: (a: unknown, b: unknown) => boolean;
14
+ export declare const SUBSCRIBER_LIMIT_MESSAGE = "stream subscriber limit reached";
16
15
  type Cmd = StatewireHostInternal.Cmd;
17
16
  type WireOp = {
18
- op: string;
19
- doc?: number;
20
- path?: StatewirePath;
21
- value?: unknown;
22
- meta?: StatewireDocument.MetaEntry[];
23
- protocol?: string;
24
- key?: readonly string[];
25
- main?: boolean;
17
+ op: string;
18
+ doc?: number;
19
+ path?: StatewirePath;
20
+ value?: unknown;
21
+ meta?: StatewireDocument.MetaEntry[];
22
+ protocol?: string;
23
+ key?: readonly string[];
24
+ main?: boolean;
26
25
  };
27
26
  type Admission = {
28
- protocol: string;
29
- seq: number;
30
- method: string;
31
- applied: boolean;
32
- appliedSent: boolean;
33
- settled: boolean;
27
+ protocol: string;
28
+ seq: number;
29
+ method: string;
30
+ applied: boolean;
31
+ appliedSent: boolean;
32
+ settled: boolean;
34
33
  };
35
34
  /** One statement lane: durable lanes live on the client record, ephemeral lanes on the attach. */
36
35
  type Lane = {
37
- protocol: string;
38
- clientId: string;
39
- conn: Conn | null;
40
- lastSeq: number;
41
- results: Map<number, {
42
- ts: number;
43
- cmd: Cmd;
44
- }>;
45
- inflight: Map<number, Admission>;
36
+ protocol: string;
37
+ clientId: string;
38
+ conn: Conn | null;
39
+ lastSeq: number;
40
+ results: Map<number, {
41
+ ts: number;
42
+ cmd: Cmd;
43
+ }>;
44
+ inflight: Map<number, Admission>;
46
45
  };
47
- type ClientRec = {
48
- id: string;
49
- touched: number;
50
- lanes: Map<string, Lane>;
51
- /** The auth captured at the record's first attach; later attaches must match. */
52
- principal: unknown;
46
+ export type ClientRec = {
47
+ id: string;
48
+ touched: number;
49
+ lanes: Map<string, Lane>;
50
+ /** The auth captured at the record's first attach; later attaches must match. */
51
+ principal: unknown;
53
52
  };
54
- type Conn = {
55
- selection: StatewireProtocol.Selection;
56
- clientId: string;
57
- socket: StatewireHostInternal.Socket;
58
- open: boolean;
59
- ready: boolean;
60
- sawFrame: boolean;
61
- lastSentAt: number;
62
- lease: string | null;
63
- /** The awaited `authorize` return captured at this attach's authorization. */
64
- auth: unknown;
65
- authorizedAt: number | undefined;
66
- leaseTimer: ReturnType<typeof setTimeout> | null;
67
- lanes: Map<string, Lane>;
68
- contexts: Map<string, Statewire.Context>;
69
- documents: Map<string, StatewireHost.Document>;
70
- included: Set<string>;
71
- view: Map<string, {
72
- doc: number;
73
- value: unknown;
74
- }>;
75
- nextDoc: number;
76
- pendingApplied: Cmd[];
77
- pendingCmds: Cmd[];
78
- attach: StatewireHost.Attach;
53
+ export type Conn = {
54
+ selection: StatewireProtocol.Selection;
55
+ clientId: string;
56
+ socket: StatewireHostInternal.Socket;
57
+ open: boolean;
58
+ ready: boolean;
59
+ sawFrame: boolean;
60
+ lastSentAt: number;
61
+ lease: string | null;
62
+ /** The awaited `authorize` return captured at this attach's authorization. */
63
+ auth: unknown;
64
+ authorizedAt: number | undefined;
65
+ leaseTimer: ReturnType<typeof setTimeout> | null;
66
+ lanes: Map<string, Lane>;
67
+ contexts: Map<string, Statewire.Context>;
68
+ documents: Map<string, StatewireHost.Document>;
69
+ included: Set<string>;
70
+ onIncludedChange: ((included: readonly StatewireHostInternal.IncludedDocument[]) => void) | undefined;
71
+ view: Map<string, {
72
+ doc: number;
73
+ value: unknown;
74
+ }>;
75
+ nextDoc: number;
76
+ pendingApplied: Cmd[];
77
+ pendingCmds: Cmd[];
78
+ attach: StatewireHost.Attach;
79
79
  };
80
80
  type PendingConn = {
81
- socket: StatewireHostInternal.Socket;
82
- open: boolean;
83
- authorizing: boolean;
84
- queued: string[];
85
- timer: ReturnType<typeof setTimeout> | null;
86
- connection: StatewireHostInternal.SocketConnection | null;
81
+ socket: StatewireHostInternal.Socket;
82
+ open: boolean;
83
+ authorizing: boolean;
84
+ queued: string[];
85
+ timer: ReturnType<typeof setTimeout> | null;
86
+ connection: StatewireHostInternal.SocketConnection | null;
87
87
  };
88
88
  type CmdStatement = {
89
- protocol: string;
90
- seq: number;
91
- method: string;
92
- params: unknown;
93
- meta?: unknown;
94
- };
95
- type ParsedFrame = {
96
- cmd: CmdStatement[];
97
- ctx?: {
98
89
  protocol: string;
99
- value: Statewire.Context;
100
- }[];
90
+ seq: number;
91
+ method: string;
92
+ params: unknown;
93
+ meta?: unknown;
94
+ };
95
+ export type ParsedFrame = {
96
+ cmd: CmdStatement[];
97
+ ctx?: {
98
+ protocol: string;
99
+ value: Statewire.Context;
100
+ }[];
101
101
  };
102
- declare const parseFrameValue: (frame: unknown) => ParsedFrame;
103
- declare const parseFrame: (raw: string) => ParsedFrame;
104
- type SocketHostState = {
105
- protocol: StatewireProtocol.Definition;
106
- key: readonly string[] | undefined;
107
- wireVersion: StatewireProtocol.Range;
108
- heartbeatMs: number;
109
- maxLeaseLifetimeMs: number | null;
110
- wsInitTimeoutMs: number;
111
- maxSubscribers: number;
112
- maxInflightCommands: number;
113
- streamQueueSize: number;
114
- clientRecordLimit: number;
115
- finOnIdle: boolean;
116
- pushback: (() => number | null) | undefined;
117
- authorize: StatewireHostInternal.SocketHostOptions["authorize"];
118
- clients: Map<string, ClientRec>;
119
- conns: Set<Conn>;
120
- pendingConns: Set<PendingConn>;
121
- pendingOps: WireOp[];
122
- pendingApplied: Map<string, Cmd[]>;
123
- pendingCmds: Map<string, Cmd[]>;
124
- viewsDirty: boolean;
125
- idleWire: boolean;
126
- finished: StatewireHost.Fin | null;
127
- disposed: boolean;
128
- flushScheduled: boolean;
129
- heartbeatTimer: ReturnType<typeof setInterval> | null;
130
- stateHost: StatewireHost.StateHost | null;
131
- commandsHost: CommandsHost | null;
132
- current: Statewire<unknown> | null;
133
- persistence: StatewireHostInternal.SocketHostPersistence | undefined;
134
- post: () => void;
135
- connect: (clientId: string, socket: StatewireHostInternal.Socket, options?: StatewireHostInternal.SocketConnectOptions) => StatewireHostInternal.SocketConnection | null;
136
- finish: (fin: StatewireHost.Fin) => void;
137
- stream: (request: Request) => Promise<Response>;
138
- frames: (request: Request) => Promise<Response>;
102
+ export declare const parseFrameValue: (frame: unknown) => ParsedFrame;
103
+ export declare const parseFrame: (raw: string) => ParsedFrame;
104
+ export type SocketHostState = {
105
+ protocol: StatewireProtocol.Definition;
106
+ key: readonly string[] | undefined;
107
+ wireVersion: StatewireProtocol.Range;
108
+ heartbeatMs: number;
109
+ maxLeaseLifetimeMs: number | null;
110
+ wsInitTimeoutMs: number;
111
+ maxSubscribers: number;
112
+ maxInflightCommands: number;
113
+ streamQueueSize: number;
114
+ clientRecordLimit: number;
115
+ finOnIdle: boolean;
116
+ pushback: (() => number | null) | undefined;
117
+ authorize: StatewireHostInternal.SocketHostOptions["authorize"];
118
+ clients: Map<string, ClientRec>;
119
+ conns: Set<Conn>;
120
+ pendingConns: Set<PendingConn>;
121
+ pendingOps: WireOp[];
122
+ pendingApplied: Map<string, Cmd[]>;
123
+ pendingCmds: Map<string, Cmd[]>;
124
+ viewsDirty: boolean;
125
+ idleWire: boolean;
126
+ finished: StatewireHost.Fin | null;
127
+ disposed: boolean;
128
+ flushScheduled: boolean;
129
+ heartbeatTimer: ReturnType<typeof setInterval> | null;
130
+ stateHost: StatewireHost.StateHost | null;
131
+ commandsHost: CommandsHost | null;
132
+ current: Statewire<unknown> | null;
133
+ persistence: StatewireHostInternal.SocketHostPersistence | undefined;
134
+ post: () => void;
135
+ connect: (clientId: string, socket: StatewireHostInternal.Socket, options?: StatewireHostInternal.SocketConnectOptions) => StatewireHostInternal.SocketConnection | null;
136
+ finish: (fin: StatewireHost.Fin) => void;
137
+ stream: (request: Request) => Promise<Response>;
138
+ frames: (request: Request) => Promise<Response>;
139
139
  };
140
- declare const closeConn: (h: SocketHostState, conn: Conn, code?: number, reason?: string) => void;
141
- declare const sendTo: (h: SocketHostState, conn: Conn, data: string) => void;
142
- declare const expireLease: (h: SocketHostState, conn: Conn) => boolean;
143
- declare const atSubscriberLimit: (h: SocketHostState) => boolean;
144
- declare const flush: (h: SocketHostState, fin?: StatewireHost.Fin) => void;
145
- type FrameAdmission = {
146
- type: "ok";
140
+ export declare const closeConn: (h: SocketHostState, conn: Conn, code?: number, reason?: string) => void;
141
+ export declare const sendTo: (h: SocketHostState, conn: Conn, data: string) => void;
142
+ export declare const expireLease: (h: SocketHostState, conn: Conn) => boolean;
143
+ export declare const atSubscriberLimit: (h: SocketHostState) => boolean;
144
+ export declare const flush: (h: SocketHostState, fin?: StatewireHost.Fin) => void;
145
+ export type FrameAdmission = {
146
+ type: "ok";
147
147
  } | {
148
- type: "expired";
148
+ type: "expired";
149
149
  } | {
150
- type: "refused";
151
- syn: {
150
+ type: "refused";
152
151
  syn: {
153
- protocols: {
154
- name: string;
155
- seq: number;
156
- }[];
157
- retry?: number;
152
+ syn: {
153
+ protocols: {
154
+ name: string;
155
+ seq: number;
156
+ }[];
157
+ retry?: number;
158
+ };
158
159
  };
159
- };
160
160
  };
161
- declare const admitFrame: (h: SocketHostState, conn: Conn, frame: ParsedFrame) => FrameAdmission;
162
- type Registration = {
163
- conn: Conn;
164
- connection: StatewireHostInternal.SocketConnection;
161
+ export declare const admitFrame: (h: SocketHostState, conn: Conn, frame: ParsedFrame) => FrameAdmission;
162
+ export type Registration = {
163
+ conn: Conn;
164
+ connection: StatewireHostInternal.SocketConnection;
165
165
  };
166
166
  /**
167
167
  * Attach a socket: ephemeral-lane statements of the attach frame are admitted
168
168
  * before the snapshot (their documents and answers ride the hello), durable
169
169
  * ones after it. A violation in the attach frame closes the attach and throws.
170
170
  */
171
- declare const register: (h: SocketHostState, clientId: string, socket: StatewireHostInternal.Socket, sawFrame?: boolean, auth?: unknown, selection?: StatewireProtocol.Selection, frame?: ParsedFrame, authorizedAt?: number) => Registration | null;
171
+ export declare const register: (h: SocketHostState, clientId: string, socket: StatewireHostInternal.Socket, sawFrame?: boolean, auth?: unknown, selection?: StatewireProtocol.Selection, frame?: ParsedFrame, authorizedAt?: number, included?: Pick<StatewireHostInternal.SocketConnectOptions, "included" | "onIncludedChange">) => Registration | null;
172
172
  /**
173
173
  * Transport-agnostic WS binding over a statewire/host transport:
174
174
  * feed it sockets (anything with `send`/`close`) and raw text frames, and it
@@ -178,7 +178,6 @@ declare const register: (h: SocketHostState, clientId: string, socket: Statewire
178
178
  * admitting attach (ephemeral lanes), per-attach document views, idle edges,
179
179
  * and `fin` on finish.
180
180
  */
181
- declare const StatewireSocketHost: (transport: ResourceElement<Statewire>, options?: StatewireHostInternal.SocketHostOptions, persistence?: StatewireHostInternal.SocketHostPersistence) => StatewireHostInternal.SocketHost;
182
- //#endregion
183
- export { CLIENT_ID_RE, ClientRec, Conn, FrameAdmission, PRINCIPAL_MISMATCH_MESSAGE, ParsedFrame, Registration, SUBSCRIBER_LIMIT_MESSAGE, SocketHostState, StatewireSocketHost, admitFrame, atSubscriberLimit, authEquals, closeConn, expireLease, flush, parseFrame, parseFrameValue, register, sendTo };
181
+ export declare const StatewireSocketHost: (transport: ResourceElement<Statewire>, options?: StatewireHostInternal.SocketHostOptions, persistence?: StatewireHostInternal.SocketHostPersistence) => StatewireHostInternal.SocketHost;
182
+ export {};
184
183
  //# sourceMappingURL=socket.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"socket.d.ts","names":[],"sources":["../../src/host/socket.ts"],"mappings":";;;;;;;;;cAiCa,cAAY;cACZ;;;cAKA,aAAc,YAAY;cAoC1B;KAGR,MAAM,sBAAsB;KAE5B;EACH;EACA;EACA,OAAO;EACP;EACA,OAAO,kBAAkB;EACzB;EACA;EACA;;KAGG;EACH;EACA;EACA;EACA;EACA;EACA;;;KAIG;EACH;EACA;EACA,MAAM;EACN;EACA,SAAS;IAAc;IAAY,KAAK;;EACxC,UAAU,YAAY;;KAGZ;EACV;EACA;EACA,OAAO,YAAY;;EAEnB;;KAIU;EACV,WAAW,kBAAkB;EAC7B;EACA,QAAQ,sBAAsB;EAC9B;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA,YAAY,kBAAkB;EAC9B,OAAO,YAAY;EACnB,UAAU,YAAY,UAAU;EAChC,WAAW,YAAY,cAAc;EACrC,UAAU;EACV,MAAM;IAAc;IAAa;;EACjC;EACA,gBAAgB;EAChB,aAAa;EACb,QAAQ,cAAc;;KAGnB;EACH,QAAQ,sBAAsB;EAC9B;EACA;EACA;EACA,OAAO,kBAAkB;EACzB,YAAY,sBAAsB;;KAc/B;EACH;EACA;EACA;EACA;EACA;;KAGU;EACV,KAAK;EACL;IAAQ;IAAkB,OAAO,UAAU;;;cAQhC,kBAAmB,mBAAiB;cAqFpC,aAAc,gBAAc;KAuF7B;EACV,UAAU,kBAAkB;EAC5B;EACA,aAAa,kBAAkB;EAC/B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WAAW,sBAAsB;EACjC,SAAS,YAAY;EACrB,OAAO,IAAI;EACX,cAAc,IAAI;EAClB,YAAY;EACZ,gBAAgB,YAAY;EAC5B,aAAa,YAAY;EACzB;EACA;EACA,UAAU,cAAc;EACxB;EACA;EACA,gBAAgB,kBAAkB;EAClC,WAAW,cAAc;EACzB,cAAc;EACd,SAAS;EACT,aAAa,sBAAsB;EACnC;EACA,UACE,kBACA,QAAQ,sBAAsB,QAC9B,UAAU,sBAAsB,yBAC7B,sBAAsB;EAC3B,SAAS,KAAK,cAAc;EAC5B,SAAS,SAAS,YAAY,QAAQ;EACtC,SAAS,SAAS,YAAY,QAAQ;;cAsD3B,YACX,GAAG,iBACH,MAAM,MACN,eACA;cAqBW,SAAU,GAAG,iBAAiB,MAAM,MAAM;cA0B1C,cAAe,GAAG,iBAAiB,MAAM;cAoCzC,oBAAqB,GAAG;cAsLxB,QAAS,GAAG,iBAAiB,MAAM,cAAc;KAoUlD;EACN;;EACA;;EAEA;EACA;IACE;MAAO;QAAa;QAAc;;MAAiB;;;;cAyE9C,aACX,GAAG,iBACH,MAAM,MACN,OAAO,gBACN;KAkaS;EACV,MAAM;EACN,YAAY,sBAAsB;;;;;;;cAQvB,WACX,GAAG,iBACH,kBACA,QAAQ,sBAAsB,QAC9B,oBACA,gBACA,YAAW,kBAAkB,WAI7B,QAAO,aACP,0BACC;;;;;;;;;;cA6WU,sBACX,WAAW,gBAAgB,YAC3B,UAAU,sBAAsB,mBAChC,cAAc,sBAAsB,0BACnC,sBAAsB"}
1
+ {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/host/socket.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
+ import { DEFAULT_PROTOCOL, WIRE_VERSION, negotiateProtocols } from "../wire/protocol.js";
1
2
  import { encodeDocument, reviveDocumentValue } from "../document.js";
2
3
  import { COMMAND_CAPACITY_RETRY_MS, MAX_INFLIGHT_COMMANDS_PER_HOST } from "../wire/limits.js";
3
- import { DEFAULT_PROTOCOL, WIRE_VERSION, negotiateProtocols } from "../wire/protocol.js";
4
4
  import { captureContext, contextValue } from "../wire/context.js";
5
5
  import { sanitizeValue } from "../wire/ops.js";
6
6
  import { StatewireSendError } from "../types.js";
@@ -9,7 +9,7 @@ import { createMacrotaskPoster } from "../util/macrotask.js";
9
9
  import { frames, stream } from "./http.js";
10
10
  import { useEffect, useState } from "@assistant-ui/tap/react-shim";
11
11
  import { createTapRoot, flushTapSync, useResource } from "@assistant-ui/tap";
12
- //#region src/host/socket.ts
12
+ // src/host/socket.ts
13
13
  const CLIENT_ID_RE = /^[A-Za-z0-9._~-]{1,256}$/;
14
14
  const PRINCIPAL_MISMATCH_MESSAGE = "client id is bound to another principal";
15
15
  /** Structural equality over auth values: primitives, Dates, arrays, and plain
@@ -354,6 +354,11 @@ const diffView = (h, conn) => {
354
354
  }
355
355
  return ops;
356
356
  };
357
+ const notifyIncluded = (conn) => conn.onIncludedChange?.([...conn.included].map((id) => JSON.parse(id)));
358
+ const restoredIncluded = (included) => new Set(included.map((entry) => {
359
+ if (!Array.isArray(entry) || entry.length !== 2 || typeof entry[0] !== "string" || !(entry[1] === null || Array.isArray(entry[1]) && entry[1].every((part) => typeof part === "string"))) throw new TypeError("statewire: invalid restored include");
360
+ return documentIdentity(entry[0], entry[1] ?? void 0);
361
+ }));
357
362
  const attachOf = (h, conn) => {
358
363
  const requireSelected = (protocol) => {
359
364
  const entry = conn.selection.protocols.find((p) => p.name === protocol);
@@ -396,11 +401,15 @@ const attachOf = (h, conn) => {
396
401
  },
397
402
  include: (protocol, key) => {
398
403
  if (requireSelected(protocol).record !== void 0) throw new Error(`statewire: protocol ${protocol} is not durable`);
399
- conn.included.add(documentIdentity(protocol, key));
404
+ const id = documentIdentity(protocol, key);
405
+ if (conn.included.has(id)) return;
406
+ conn.included.add(id);
407
+ notifyIncluded(conn);
400
408
  markViews(h);
401
409
  },
402
410
  exclude: (protocol, key) => {
403
- conn.included.delete(documentIdentity(protocol, key));
411
+ if (!conn.included.delete(documentIdentity(protocol, key))) return;
412
+ notifyIncluded(conn);
404
413
  markViews(h);
405
414
  }
406
415
  };
@@ -802,7 +811,7 @@ const connectAuthorized = (h, clientId, socket, options) => {
802
811
  } catch {}
803
812
  return null;
804
813
  }
805
- return register(h, clientId, socket, options.authorized === true, options.auth, options.selection, void 0, options.authorizedAt)?.connection ?? null;
814
+ return register(h, clientId, socket, options.authorized === true, options.auth, options.selection, void 0, options.authorizedAt, options)?.connection ?? null;
806
815
  }
807
816
  const refuse = (code, reason) => {
808
817
  try {
@@ -907,7 +916,7 @@ const connectAuthorized = (h, clientId, socket, options) => {
907
916
  if (pending.timer !== null) clearTimeout(pending.timer);
908
917
  let registration;
909
918
  try {
910
- registration = register(h, clientId, socket, true, auth, selection, frame, authorizedAt);
919
+ registration = register(h, clientId, socket, true, auth, selection, frame, authorizedAt, options.onIncludedChange === void 0 ? {} : { onIncludedChange: options.onIncludedChange });
911
920
  } catch (error) {
912
921
  if (violationReason(error) === null) throw error;
913
922
  return;
@@ -951,7 +960,8 @@ const register = (h, clientId, socket, sawFrame = false, auth = void 0, selectio
951
960
  name: h.protocol.name,
952
961
  version: h.protocol.version
953
962
  }]
954
- }, frame = { cmd: [] }, authorizedAt) => {
963
+ }, frame = { cmd: [] }, authorizedAt, included = {}) => {
964
+ const restored = restoredIncluded(included.included ?? []);
955
965
  const refuse = (code, reason) => {
956
966
  try {
957
967
  socket.close(code, reason);
@@ -1012,7 +1022,8 @@ const register = (h, clientId, socket, sawFrame = false, auth = void 0, selectio
1012
1022
  lanes: /* @__PURE__ */ new Map(),
1013
1023
  contexts: /* @__PURE__ */ new Map(),
1014
1024
  documents: /* @__PURE__ */ new Map(),
1015
- included: /* @__PURE__ */ new Set(),
1025
+ included: restored,
1026
+ onIncludedChange: included.onIncludedChange,
1016
1027
  view: /* @__PURE__ */ new Map(),
1017
1028
  nextDoc: 1,
1018
1029
  pendingApplied: [],
@@ -1258,7 +1269,6 @@ const StatewireSocketHost = (transport, options, persistence) => {
1258
1269
  }
1259
1270
  };
1260
1271
  };
1261
- //#endregion
1262
1272
  export { CLIENT_ID_RE, PRINCIPAL_MISMATCH_MESSAGE, SUBSCRIBER_LIMIT_MESSAGE, StatewireSocketHost, admitFrame, atSubscriberLimit, authEquals, closeConn, expireLease, flush, parseFrame, parseFrameValue, register, sendTo };
1263
1273
 
1264
1274
  //# sourceMappingURL=socket.js.map