@syncular/relay 0.0.6-125 → 0.0.6-135

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.
@@ -36,11 +36,7 @@ export interface RelayWebSocketConnection {
36
36
  * efficient notification routing.
37
37
  */
38
38
  export declare class RelayRealtime {
39
- private connectionsByClientId;
40
- private scopeKeysByClientId;
41
- private connectionsByScopeKey;
42
- private heartbeatIntervalMs;
43
- private heartbeatTimer;
39
+ private readonly registry;
44
40
  constructor(options?: {
45
41
  heartbeatIntervalMs?: number;
46
42
  });
@@ -50,15 +46,9 @@ export declare class RelayRealtime {
50
46
  */
51
47
  register(connection: RelayWebSocketConnection, initialScopeKeys?: string[]): () => void;
52
48
  /**
53
- * Update the effective tables/scopes for an already-connected client.
54
- * In the new scope model, this is called with table names.
55
- */
56
- updateClientTables(clientId: string, tables: string[]): void;
57
- /**
58
- * Alias for backwards compatibility.
49
+ * Update the effective scopes for an already-connected client.
59
50
  */
60
51
  updateClientScopeKeys(clientId: string, scopeKeys: string[]): void;
61
- private _updateScopeKeys;
62
52
  /**
63
53
  * Notify clients that new data is available for the given scopes.
64
54
  */
@@ -81,9 +71,6 @@ export declare class RelayRealtime {
81
71
  * Close all connections.
82
72
  */
83
73
  closeAll(): void;
84
- private ensureHeartbeat;
85
- private sendHeartbeats;
86
- private unregister;
87
74
  }
88
75
  /**
89
76
  * Create a WebSocket connection wrapper.
@@ -1 +1 @@
1
- {"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC;IACtC,IAAI,EAAE;QACJ,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,IAAI,IAAI,CAAC;IACtB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,qBAAqB,CAGzB;IACJ,OAAO,CAAC,mBAAmB,CAAkC;IAC7D,OAAO,CAAC,qBAAqB,CAGzB;IAEJ,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,cAAc,CAA+C;IAErE,YAAY,OAAO,CAAC,EAAE;QAAE,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAE,EAErD;IAED;;;OAGG;IACH,QAAQ,CACN,UAAU,EAAE,wBAAwB,EACpC,gBAAgB,GAAE,MAAM,EAAO,GAC9B,MAAM,IAAI,CA8BZ;IAED;;;OAGG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAE3D;IAED;;OAEG;IACH,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAEjE;IAED,OAAO,CAAC,gBAAgB;IA0CxB;;OAEG;IACH,eAAe,CACb,SAAS,EAAE,MAAM,EAAE,EACnB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GACrC,IAAI,CAeN;IAED;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE3C;IAED;;OAEG;IACH,mBAAmB,IAAI,MAAM,CAM5B;IAED;;OAEG;IACH,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAmB7C;IAED;;OAEG;IACH,QAAQ,IAAI,IAAI,CAUf;IAED,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,cAAc;IAoBtB,OAAO,CAAC,UAAU;CAoBnB;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,EAAE,EAAE;IACF,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,UAAU,EAAE,MAAM,CAAC;CACpB,EACD,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC1C,wBAAwB,CA2D1B"}
1
+ {"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC;IACtC,IAAI,EAAE;QACJ,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,IAAI,IAAI,CAAC;IACtB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuD;IAEhF,YAAY,OAAO,CAAC,EAAE;QAAE,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAE,EAIrD;IAED;;;OAGG;IACH,QAAQ,CACN,UAAU,EAAE,wBAAwB,EACpC,gBAAgB,GAAE,MAAM,EAAO,GAC9B,MAAM,IAAI,CAEZ;IAED;;OAEG;IACH,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAEjE;IAED;;OAEG;IACH,eAAe,CACb,SAAS,EAAE,MAAM,EAAE,EACnB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GACrC,IAAI,CAQN;IAED;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE3C;IAED;;OAEG;IACH,mBAAmB,IAAI,MAAM,CAE5B;IAED;;OAEG;IACH,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAE7C;IAED;;OAEG;IACH,QAAQ,IAAI,IAAI,CAEf;CACF;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,EAAE,EAAE;IACF,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,UAAU,EAAE,MAAM,CAAC;CACpB,EACD,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC1C,wBAAwB,CA2D1B"}
package/dist/realtime.js CHANGED
@@ -6,6 +6,7 @@
6
6
  *
7
7
  * Adapted from @syncular/server-hono/ws.ts for relay use.
8
8
  */
9
+ import { RealtimeConnectionRegistry } from '@syncular/core';
9
10
  /**
10
11
  * Realtime manager for relay WebSocket connections.
11
12
  *
@@ -13,228 +14,56 @@
13
14
  * efficient notification routing.
14
15
  */
15
16
  export class RelayRealtime {
16
- connectionsByClientId = new Map();
17
- scopeKeysByClientId = new Map();
18
- connectionsByScopeKey = new Map();
19
- heartbeatIntervalMs;
20
- heartbeatTimer = null;
17
+ registry;
21
18
  constructor(options) {
22
- this.heartbeatIntervalMs = options?.heartbeatIntervalMs ?? 30_000;
19
+ this.registry = new RealtimeConnectionRegistry({
20
+ heartbeatIntervalMs: options?.heartbeatIntervalMs,
21
+ });
23
22
  }
24
23
  /**
25
24
  * Register a connection for a client.
26
25
  * Returns a cleanup function to unregister.
27
26
  */
28
27
  register(connection, initialScopeKeys = []) {
29
- const clientId = connection.clientId;
30
- let clientConns = this.connectionsByClientId.get(clientId);
31
- if (!clientConns) {
32
- clientConns = new Set();
33
- this.connectionsByClientId.set(clientId, clientConns);
34
- }
35
- clientConns.add(connection);
36
- if (!this.scopeKeysByClientId.has(clientId)) {
37
- this.scopeKeysByClientId.set(clientId, new Set(initialScopeKeys));
38
- }
39
- const scopeKeys = this.scopeKeysByClientId.get(clientId) ?? new Set();
40
- for (const k of scopeKeys) {
41
- let scopeConns = this.connectionsByScopeKey.get(k);
42
- if (!scopeConns) {
43
- scopeConns = new Set();
44
- this.connectionsByScopeKey.set(k, scopeConns);
45
- }
46
- scopeConns.add(connection);
47
- }
48
- this.ensureHeartbeat();
49
- return () => {
50
- this.unregister(connection);
51
- this.ensureHeartbeat();
52
- };
28
+ return this.registry.register(connection, initialScopeKeys);
53
29
  }
54
30
  /**
55
- * Update the effective tables/scopes for an already-connected client.
56
- * In the new scope model, this is called with table names.
57
- */
58
- updateClientTables(clientId, tables) {
59
- this._updateScopeKeys(clientId, tables);
60
- }
61
- /**
62
- * Alias for backwards compatibility.
31
+ * Update the effective scopes for an already-connected client.
63
32
  */
64
33
  updateClientScopeKeys(clientId, scopeKeys) {
65
- this._updateScopeKeys(clientId, scopeKeys);
66
- }
67
- _updateScopeKeys(clientId, keys) {
68
- const conns = this.connectionsByClientId.get(clientId);
69
- if (!conns || conns.size === 0)
70
- return;
71
- const next = new Set(keys);
72
- const prev = this.scopeKeysByClientId.get(clientId) ?? new Set();
73
- // No-op when unchanged
74
- if (prev.size === next.size) {
75
- let unchanged = true;
76
- for (const k of prev) {
77
- if (!next.has(k)) {
78
- unchanged = false;
79
- break;
80
- }
81
- }
82
- if (unchanged)
83
- return;
84
- }
85
- this.scopeKeysByClientId.set(clientId, next);
86
- // Remove from old scopes
87
- for (const k of prev) {
88
- if (next.has(k))
89
- continue;
90
- const set = this.connectionsByScopeKey.get(k);
91
- if (!set)
92
- continue;
93
- for (const conn of conns)
94
- set.delete(conn);
95
- if (set.size === 0)
96
- this.connectionsByScopeKey.delete(k);
97
- }
98
- // Add to new scopes
99
- for (const k of next) {
100
- if (prev.has(k))
101
- continue;
102
- let set = this.connectionsByScopeKey.get(k);
103
- if (!set) {
104
- set = new Set();
105
- this.connectionsByScopeKey.set(k, set);
106
- }
107
- for (const conn of conns)
108
- set.add(conn);
109
- }
34
+ this.registry.updateClientScopeKeys(clientId, scopeKeys);
110
35
  }
111
36
  /**
112
37
  * Notify clients that new data is available for the given scopes.
113
38
  */
114
39
  notifyScopeKeys(scopeKeys, cursor, opts) {
115
- const exclude = new Set(opts?.excludeClientIds ?? []);
116
- const targets = new Set();
117
- for (const k of scopeKeys) {
118
- const conns = this.connectionsByScopeKey.get(k);
119
- if (!conns)
120
- continue;
121
- for (const conn of conns)
122
- targets.add(conn);
123
- }
124
- for (const conn of targets) {
125
- if (!conn.isOpen)
126
- continue;
127
- if (exclude.has(conn.clientId))
128
- continue;
40
+ this.registry.forEachConnectionInScopeKeys(scopeKeys, (conn) => {
129
41
  conn.sendSync(cursor);
130
- }
42
+ }, { excludeClientIds: opts?.excludeClientIds });
131
43
  }
132
44
  /**
133
45
  * Get the number of active connections for a client.
134
46
  */
135
47
  getConnectionCount(clientId) {
136
- return this.connectionsByClientId.get(clientId)?.size ?? 0;
48
+ return this.registry.getConnectionCount(clientId);
137
49
  }
138
50
  /**
139
51
  * Get total number of active connections.
140
52
  */
141
53
  getTotalConnections() {
142
- let total = 0;
143
- for (const conns of this.connectionsByClientId.values()) {
144
- total += conns.size;
145
- }
146
- return total;
54
+ return this.registry.getTotalConnections();
147
55
  }
148
56
  /**
149
57
  * Close all connections for a client.
150
58
  */
151
59
  closeClientConnections(clientId) {
152
- const conns = this.connectionsByClientId.get(clientId);
153
- if (!conns)
154
- return;
155
- const scopeKeys = this.scopeKeysByClientId.get(clientId) ?? new Set();
156
- for (const k of scopeKeys) {
157
- const set = this.connectionsByScopeKey.get(k);
158
- if (!set)
159
- continue;
160
- for (const conn of conns)
161
- set.delete(conn);
162
- if (set.size === 0)
163
- this.connectionsByScopeKey.delete(k);
164
- }
165
- for (const conn of conns) {
166
- conn.close(1000, 'client closed');
167
- }
168
- this.connectionsByClientId.delete(clientId);
169
- this.scopeKeysByClientId.delete(clientId);
170
- this.ensureHeartbeat();
60
+ this.registry.closeClientConnections(clientId, 1000, 'client closed');
171
61
  }
172
62
  /**
173
63
  * Close all connections.
174
64
  */
175
65
  closeAll() {
176
- for (const conns of this.connectionsByClientId.values()) {
177
- for (const conn of conns) {
178
- conn.close(1000, 'server shutdown');
179
- }
180
- }
181
- this.connectionsByClientId.clear();
182
- this.scopeKeysByClientId.clear();
183
- this.connectionsByScopeKey.clear();
184
- this.ensureHeartbeat();
185
- }
186
- ensureHeartbeat() {
187
- if (this.heartbeatIntervalMs <= 0)
188
- return;
189
- const total = this.getTotalConnections();
190
- if (total === 0) {
191
- if (this.heartbeatTimer) {
192
- clearInterval(this.heartbeatTimer);
193
- this.heartbeatTimer = null;
194
- }
195
- return;
196
- }
197
- if (this.heartbeatTimer)
198
- return;
199
- this.heartbeatTimer = setInterval(() => {
200
- this.sendHeartbeats();
201
- }, this.heartbeatIntervalMs);
202
- }
203
- sendHeartbeats() {
204
- const closed = [];
205
- for (const conns of this.connectionsByClientId.values()) {
206
- for (const conn of conns) {
207
- if (!conn.isOpen) {
208
- closed.push(conn);
209
- continue;
210
- }
211
- conn.sendHeartbeat();
212
- }
213
- }
214
- for (const conn of closed) {
215
- this.unregister(conn);
216
- }
217
- this.ensureHeartbeat();
218
- }
219
- unregister(connection) {
220
- const clientId = connection.clientId;
221
- const scopeKeys = this.scopeKeysByClientId.get(clientId) ?? new Set();
222
- for (const k of scopeKeys) {
223
- const set = this.connectionsByScopeKey.get(k);
224
- if (!set)
225
- continue;
226
- set.delete(connection);
227
- if (set.size === 0)
228
- this.connectionsByScopeKey.delete(k);
229
- }
230
- const conns = this.connectionsByClientId.get(clientId);
231
- if (!conns)
232
- return;
233
- conns.delete(connection);
234
- if (conns.size > 0)
235
- return;
236
- this.connectionsByClientId.delete(clientId);
237
- this.scopeKeysByClientId.delete(clientId);
66
+ this.registry.closeAll(1000, 'server shutdown');
238
67
  }
239
68
  }
240
69
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"realtime.js","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"realtime.js","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server-role/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,KAAK,EACV,uBAAuB,EACvB,iBAAiB,EACjB,cAAc,EACf,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAI/C,KAAK,SAAS,GAAG,cAAc,CAAC;AAEhC;;GAEG;AACH,MAAM,WAAW,wBAAwB,CACvC,EAAE,SAAS,aAAa,GAAG,aAAa;IAExC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,EAAE,uBAAuB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IACjD,QAAQ,EAAE,aAAa,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,EAAE,CACT,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,EAAE,KACrB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACnE;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;OAEG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAMD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,aAAa,GAAG,aAAa,EACxE,OAAO,EAAE,wBAAwB,CAAC,EAAE,CAAC,GACpC,IAAI,CAqQN"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server-role/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,KAAK,EACV,uBAAuB,EACvB,iBAAiB,EACjB,cAAc,EACf,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAI/C,KAAK,SAAS,GAAG,cAAc,CAAC;AAEhC;;GAEG;AACH,MAAM,WAAW,wBAAwB,CACvC,EAAE,SAAS,aAAa,GAAG,aAAa;IAExC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,EAAE,uBAAuB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IACjD,QAAQ,EAAE,aAAa,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,EAAE,CACT,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,EAAE,KACrB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACnE;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;OAEG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAMD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,aAAa,GAAG,aAAa,EACxE,OAAO,EAAE,wBAAwB,CAAC,EAAE,CAAC,GACpC,IAAI,CAuQN"}
@@ -137,8 +137,7 @@ export function createRelayRoutes(options) {
137
137
  effectiveScopes: pullResult.effectiveScopes,
138
138
  });
139
139
  // Notify realtime about updated scope values
140
- const tables = Object.keys(pullResult.effectiveScopes);
141
- options.realtime.updateClientTables(request.clientId, tables);
140
+ options.realtime.updateClientScopeKeys(request.clientId, Object.keys(pullResult.effectiveScopes));
142
141
  logSyncEvent({
143
142
  event: 'relay.pull',
144
143
  userId: auth.actorId,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server-role/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server-role/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@syncular/relay",
3
- "version": "0.0.6-125",
3
+ "version": "0.0.6-135",
4
4
  "description": "Edge relay for Syncular distributed sync",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Benjamin Kniffler",
@@ -42,8 +42,8 @@
42
42
  "release": "bunx syncular-publish"
43
43
  },
44
44
  "dependencies": {
45
- "@syncular/core": "0.0.6-125",
46
- "@syncular/server": "0.0.6-125"
45
+ "@syncular/core": "0.0.6-135",
46
+ "@syncular/server": "0.0.6-135"
47
47
  },
48
48
  "peerDependencies": {
49
49
  "hono": "^4.0.0",
@@ -51,7 +51,7 @@
51
51
  },
52
52
  "devDependencies": {
53
53
  "@syncular/config": "0.0.0",
54
- "@syncular/server-dialect-sqlite": "0.0.6-125",
54
+ "@syncular/server-dialect-sqlite": "0.0.6-135",
55
55
  "kysely": "*"
56
56
  },
57
57
  "files": [
package/src/realtime.ts CHANGED
@@ -7,6 +7,8 @@
7
7
  * Adapted from @syncular/server-hono/ws.ts for relay use.
8
8
  */
9
9
 
10
+ import { RealtimeConnectionRegistry } from '@syncular/core';
11
+
10
12
  /**
11
13
  * WebSocket event data for sync notifications.
12
14
  */
@@ -39,21 +41,12 @@ export interface RelayWebSocketConnection {
39
41
  * efficient notification routing.
40
42
  */
41
43
  export class RelayRealtime {
42
- private connectionsByClientId = new Map<
43
- string,
44
- Set<RelayWebSocketConnection>
45
- >();
46
- private scopeKeysByClientId = new Map<string, Set<string>>();
47
- private connectionsByScopeKey = new Map<
48
- string,
49
- Set<RelayWebSocketConnection>
50
- >();
51
-
52
- private heartbeatIntervalMs: number;
53
- private heartbeatTimer: ReturnType<typeof setInterval> | null = null;
44
+ private readonly registry: RealtimeConnectionRegistry<RelayWebSocketConnection>;
54
45
 
55
46
  constructor(options?: { heartbeatIntervalMs?: number }) {
56
- this.heartbeatIntervalMs = options?.heartbeatIntervalMs ?? 30_000;
47
+ this.registry = new RealtimeConnectionRegistry({
48
+ heartbeatIntervalMs: options?.heartbeatIntervalMs,
49
+ });
57
50
  }
58
51
 
59
52
  /**
@@ -64,92 +57,14 @@ export class RelayRealtime {
64
57
  connection: RelayWebSocketConnection,
65
58
  initialScopeKeys: string[] = []
66
59
  ): () => void {
67
- const clientId = connection.clientId;
68
- let clientConns = this.connectionsByClientId.get(clientId);
69
- if (!clientConns) {
70
- clientConns = new Set();
71
- this.connectionsByClientId.set(clientId, clientConns);
72
- }
73
- clientConns.add(connection);
74
-
75
- if (!this.scopeKeysByClientId.has(clientId)) {
76
- this.scopeKeysByClientId.set(clientId, new Set(initialScopeKeys));
77
- }
78
-
79
- const scopeKeys =
80
- this.scopeKeysByClientId.get(clientId) ?? new Set<string>();
81
- for (const k of scopeKeys) {
82
- let scopeConns = this.connectionsByScopeKey.get(k);
83
- if (!scopeConns) {
84
- scopeConns = new Set();
85
- this.connectionsByScopeKey.set(k, scopeConns);
86
- }
87
- scopeConns.add(connection);
88
- }
89
-
90
- this.ensureHeartbeat();
91
-
92
- return () => {
93
- this.unregister(connection);
94
- this.ensureHeartbeat();
95
- };
60
+ return this.registry.register(connection, initialScopeKeys);
96
61
  }
97
62
 
98
63
  /**
99
- * Update the effective tables/scopes for an already-connected client.
100
- * In the new scope model, this is called with table names.
101
- */
102
- updateClientTables(clientId: string, tables: string[]): void {
103
- this._updateScopeKeys(clientId, tables);
104
- }
105
-
106
- /**
107
- * Alias for backwards compatibility.
64
+ * Update the effective scopes for an already-connected client.
108
65
  */
109
66
  updateClientScopeKeys(clientId: string, scopeKeys: string[]): void {
110
- this._updateScopeKeys(clientId, scopeKeys);
111
- }
112
-
113
- private _updateScopeKeys(clientId: string, keys: string[]): void {
114
- const conns = this.connectionsByClientId.get(clientId);
115
- if (!conns || conns.size === 0) return;
116
-
117
- const next = new Set<string>(keys);
118
- const prev = this.scopeKeysByClientId.get(clientId) ?? new Set<string>();
119
-
120
- // No-op when unchanged
121
- if (prev.size === next.size) {
122
- let unchanged = true;
123
- for (const k of prev) {
124
- if (!next.has(k)) {
125
- unchanged = false;
126
- break;
127
- }
128
- }
129
- if (unchanged) return;
130
- }
131
-
132
- this.scopeKeysByClientId.set(clientId, next);
133
-
134
- // Remove from old scopes
135
- for (const k of prev) {
136
- if (next.has(k)) continue;
137
- const set = this.connectionsByScopeKey.get(k);
138
- if (!set) continue;
139
- for (const conn of conns) set.delete(conn);
140
- if (set.size === 0) this.connectionsByScopeKey.delete(k);
141
- }
142
-
143
- // Add to new scopes
144
- for (const k of next) {
145
- if (prev.has(k)) continue;
146
- let set = this.connectionsByScopeKey.get(k);
147
- if (!set) {
148
- set = new Set();
149
- this.connectionsByScopeKey.set(k, set);
150
- }
151
- for (const conn of conns) set.add(conn);
152
- }
67
+ this.registry.updateClientScopeKeys(clientId, scopeKeys);
153
68
  }
154
69
 
155
70
  /**
@@ -160,138 +75,41 @@ export class RelayRealtime {
160
75
  cursor: number,
161
76
  opts?: { excludeClientIds?: string[] }
162
77
  ): void {
163
- const exclude = new Set(opts?.excludeClientIds ?? []);
164
- const targets = new Set<RelayWebSocketConnection>();
165
-
166
- for (const k of scopeKeys) {
167
- const conns = this.connectionsByScopeKey.get(k);
168
- if (!conns) continue;
169
- for (const conn of conns) targets.add(conn);
170
- }
171
-
172
- for (const conn of targets) {
173
- if (!conn.isOpen) continue;
174
- if (exclude.has(conn.clientId)) continue;
175
- conn.sendSync(cursor);
176
- }
78
+ this.registry.forEachConnectionInScopeKeys(
79
+ scopeKeys,
80
+ (conn) => {
81
+ conn.sendSync(cursor);
82
+ },
83
+ { excludeClientIds: opts?.excludeClientIds }
84
+ );
177
85
  }
178
86
 
179
87
  /**
180
88
  * Get the number of active connections for a client.
181
89
  */
182
90
  getConnectionCount(clientId: string): number {
183
- return this.connectionsByClientId.get(clientId)?.size ?? 0;
91
+ return this.registry.getConnectionCount(clientId);
184
92
  }
185
93
 
186
94
  /**
187
95
  * Get total number of active connections.
188
96
  */
189
97
  getTotalConnections(): number {
190
- let total = 0;
191
- for (const conns of this.connectionsByClientId.values()) {
192
- total += conns.size;
193
- }
194
- return total;
98
+ return this.registry.getTotalConnections();
195
99
  }
196
100
 
197
101
  /**
198
102
  * Close all connections for a client.
199
103
  */
200
104
  closeClientConnections(clientId: string): void {
201
- const conns = this.connectionsByClientId.get(clientId);
202
- if (!conns) return;
203
-
204
- const scopeKeys =
205
- this.scopeKeysByClientId.get(clientId) ?? new Set<string>();
206
- for (const k of scopeKeys) {
207
- const set = this.connectionsByScopeKey.get(k);
208
- if (!set) continue;
209
- for (const conn of conns) set.delete(conn);
210
- if (set.size === 0) this.connectionsByScopeKey.delete(k);
211
- }
212
-
213
- for (const conn of conns) {
214
- conn.close(1000, 'client closed');
215
- }
216
- this.connectionsByClientId.delete(clientId);
217
- this.scopeKeysByClientId.delete(clientId);
218
- this.ensureHeartbeat();
105
+ this.registry.closeClientConnections(clientId, 1000, 'client closed');
219
106
  }
220
107
 
221
108
  /**
222
109
  * Close all connections.
223
110
  */
224
111
  closeAll(): void {
225
- for (const conns of this.connectionsByClientId.values()) {
226
- for (const conn of conns) {
227
- conn.close(1000, 'server shutdown');
228
- }
229
- }
230
- this.connectionsByClientId.clear();
231
- this.scopeKeysByClientId.clear();
232
- this.connectionsByScopeKey.clear();
233
- this.ensureHeartbeat();
234
- }
235
-
236
- private ensureHeartbeat(): void {
237
- if (this.heartbeatIntervalMs <= 0) return;
238
-
239
- const total = this.getTotalConnections();
240
-
241
- if (total === 0) {
242
- if (this.heartbeatTimer) {
243
- clearInterval(this.heartbeatTimer);
244
- this.heartbeatTimer = null;
245
- }
246
- return;
247
- }
248
-
249
- if (this.heartbeatTimer) return;
250
-
251
- this.heartbeatTimer = setInterval(() => {
252
- this.sendHeartbeats();
253
- }, this.heartbeatIntervalMs);
254
- }
255
-
256
- private sendHeartbeats(): void {
257
- const closed: RelayWebSocketConnection[] = [];
258
-
259
- for (const conns of this.connectionsByClientId.values()) {
260
- for (const conn of conns) {
261
- if (!conn.isOpen) {
262
- closed.push(conn);
263
- continue;
264
- }
265
- conn.sendHeartbeat();
266
- }
267
- }
268
-
269
- for (const conn of closed) {
270
- this.unregister(conn);
271
- }
272
-
273
- this.ensureHeartbeat();
274
- }
275
-
276
- private unregister(connection: RelayWebSocketConnection): void {
277
- const clientId = connection.clientId;
278
-
279
- const scopeKeys =
280
- this.scopeKeysByClientId.get(clientId) ?? new Set<string>();
281
- for (const k of scopeKeys) {
282
- const set = this.connectionsByScopeKey.get(k);
283
- if (!set) continue;
284
- set.delete(connection);
285
- if (set.size === 0) this.connectionsByScopeKey.delete(k);
286
- }
287
-
288
- const conns = this.connectionsByClientId.get(clientId);
289
- if (!conns) return;
290
- conns.delete(connection);
291
- if (conns.size > 0) return;
292
-
293
- this.connectionsByClientId.delete(clientId);
294
- this.scopeKeysByClientId.delete(clientId);
112
+ this.registry.closeAll(1000, 'server shutdown');
295
113
  }
296
114
  }
297
115
 
@@ -266,8 +266,10 @@ export function createRelayRoutes<DB extends RelayDatabase = RelayDatabase>(
266
266
  });
267
267
 
268
268
  // Notify realtime about updated scope values
269
- const tables = Object.keys(pullResult.effectiveScopes);
270
- options.realtime.updateClientTables(request.clientId, tables);
269
+ options.realtime.updateClientScopeKeys(
270
+ request.clientId,
271
+ Object.keys(pullResult.effectiveScopes)
272
+ );
271
273
 
272
274
  logSyncEvent({
273
275
  event: 'relay.pull',