@syncular/server-hono 0.0.6-171 → 0.0.6-177

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.
@@ -0,0 +1,43 @@
1
+ function normalizeOrigin(origin) {
2
+ try {
3
+ return new URL(origin).origin;
4
+ }
5
+ catch {
6
+ return null;
7
+ }
8
+ }
9
+ export function isRequestOriginAllowed(args) {
10
+ if (args.allowedOrigins === '*') {
11
+ return true;
12
+ }
13
+ const origin = args.originHeader;
14
+ if (Array.isArray(args.allowedOrigins)) {
15
+ if (!origin)
16
+ return false;
17
+ const normalizedOrigin = normalizeOrigin(origin);
18
+ return normalizedOrigin
19
+ ? args.allowedOrigins.includes(normalizedOrigin)
20
+ : false;
21
+ }
22
+ if (!origin) {
23
+ return true;
24
+ }
25
+ const normalizedOrigin = normalizeOrigin(origin);
26
+ if (!normalizedOrigin) {
27
+ return false;
28
+ }
29
+ try {
30
+ return normalizedOrigin === new URL(args.requestUrl).origin;
31
+ }
32
+ catch {
33
+ return false;
34
+ }
35
+ }
36
+ export function isWebSocketOriginAllowed(c, allowedOrigins) {
37
+ return isRequestOriginAllowed({
38
+ requestUrl: c.req.url,
39
+ originHeader: c.req.header('origin'),
40
+ allowedOrigins,
41
+ });
42
+ }
43
+ //# sourceMappingURL=websocket-origin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-origin.js","sourceRoot":"","sources":["../src/websocket-origin.ts"],"names":[],"mappings":"AAEA,SAAS,eAAe,CAAC,MAAc,EAAiB;IACtD,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AAAA,CACF;AAED,MAAM,UAAU,sBAAsB,CAAC,IAItC,EAAW;IACV,IAAI,IAAI,CAAC,cAAc,KAAK,GAAG,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;IACjC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC1B,MAAM,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QACjD,OAAO,gBAAgB;YACrB,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAChD,CAAC,CAAC,KAAK,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,OAAO,gBAAgB,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AAAA,CACF;AAED,MAAM,UAAU,wBAAwB,CACtC,CAAU,EACV,cAA+B,EACtB;IACT,OAAO,sBAAsB,CAAC;QAC5B,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG;QACrB,YAAY,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;QACpC,cAAc;KACf,CAAC,CAAC;AAAA,CACJ"}
package/dist/ws.d.ts CHANGED
@@ -14,6 +14,11 @@ export interface PresenceEntry {
14
14
  joinedAt: number;
15
15
  metadata?: Record<string, unknown>;
16
16
  }
17
+ export declare function createWebSocketConnectionOwnerKey(args: {
18
+ partitionId: string;
19
+ actorId: string;
20
+ clientId: string;
21
+ }): string;
17
22
  /**
18
23
  * Push response data sent back to the client over WS
19
24
  */
@@ -48,6 +53,7 @@ export interface SyncWebSocketEvent {
48
53
  presence?: {
49
54
  action: 'join' | 'leave' | 'update' | 'snapshot';
50
55
  scopeKey: string;
56
+ ownerKey?: string;
51
57
  clientId?: string;
52
58
  actorId?: string;
53
59
  metadata?: Record<string, unknown>;
@@ -82,6 +88,7 @@ export interface WebSocketConnection {
82
88
  sendPresence(data: {
83
89
  action: 'join' | 'leave' | 'update' | 'snapshot';
84
90
  scopeKey: string;
91
+ ownerKey?: string;
85
92
  clientId?: string;
86
93
  actorId?: string;
87
94
  metadata?: Record<string, unknown>;
@@ -99,12 +106,15 @@ export interface WebSocketConnection {
99
106
  actorId: string;
100
107
  /** Client/device identifier for this connection */
101
108
  clientId: string;
109
+ /** Stable owner identity for this connection */
110
+ ownerKey: string;
102
111
  /** Transport path used by this connection. */
103
112
  transportPath: 'direct' | 'relay';
104
113
  }
105
114
  export declare function createWebSocketConnection(ws: WSContext, args: {
106
115
  actorId: string;
107
116
  clientId: string;
117
+ ownerKey: string;
108
118
  transportPath: 'direct' | 'relay';
109
119
  }): WebSocketConnection;
110
120
  /**
@@ -115,7 +125,7 @@ export declare class WebSocketConnectionManager {
115
125
  private readonly registry;
116
126
  /**
117
127
  * In-memory presence tracking by scope key.
118
- * Map<scopeKey, Map<clientId, PresenceEntry>>
128
+ * Map<scopeKey, Map<ownerKey, PresenceEntry>>
119
129
  */
120
130
  private presenceByScopeKey;
121
131
  /**
@@ -124,6 +134,7 @@ export declare class WebSocketConnectionManager {
124
134
  onPresenceChange?: (event: {
125
135
  action: 'join' | 'leave' | 'update';
126
136
  scopeKey: string;
137
+ ownerKey: string;
127
138
  clientId: string;
128
139
  actorId: string;
129
140
  metadata?: Record<string, unknown>;
@@ -141,26 +152,26 @@ export declare class WebSocketConnectionManager {
141
152
  * Update the effective scopes for an already-connected client.
142
153
  * If the client has no active connections, this is a no-op.
143
154
  */
144
- updateClientScopeKeys(clientId: string, scopeKeys: string[]): void;
155
+ updateConnectionScopeKeys(ownerKey: string, scopeKeys: string[]): void;
145
156
  /**
146
157
  * Check whether a client is currently authorized/subscribed for a scope key.
147
158
  */
148
- isClientSubscribedToScopeKey(clientId: string, scopeKey: string): boolean;
159
+ isConnectionSubscribedToScopeKey(ownerKey: string, scopeKey: string): boolean;
149
160
  /**
150
161
  * Join presence for a scope key.
151
162
  * Called when a client wants to be visible to others in a scope.
152
163
  */
153
- joinPresence(clientId: string, scopeKey: string, metadata?: Record<string, unknown>): boolean;
164
+ joinPresence(ownerKey: string, scopeKey: string, metadata?: Record<string, unknown>): boolean;
154
165
  /**
155
166
  * Leave presence for a scope key.
156
167
  * Called when a client no longer wants to be visible in a scope.
157
168
  */
158
- leavePresence(clientId: string, scopeKey: string): boolean;
169
+ leavePresence(ownerKey: string, scopeKey: string): boolean;
159
170
  /**
160
171
  * Update presence metadata for a client in a scope.
161
172
  * Used to update what entity a user is viewing/editing.
162
173
  */
163
- updatePresenceMetadata(clientId: string, scopeKey: string, metadata: Record<string, unknown>): boolean;
174
+ updatePresenceMetadata(ownerKey: string, scopeKey: string, metadata: Record<string, unknown>): boolean;
164
175
  /**
165
176
  * Get presence entries for a scope key.
166
177
  */
@@ -181,6 +192,7 @@ export declare class WebSocketConnectionManager {
181
192
  handleRemotePresenceEvent(event: {
182
193
  action: 'join' | 'leave' | 'update';
183
194
  scopeKey: string;
195
+ ownerKey?: string;
184
196
  clientId: string;
185
197
  actorId: string;
186
198
  metadata?: Record<string, unknown>;
@@ -190,9 +202,9 @@ export declare class WebSocketConnectionManager {
190
202
  */
191
203
  private broadcastPresenceEvent;
192
204
  /**
193
- * Clean up presence when a client fully disconnects (all connections closed).
205
+ * Clean up presence when an owner fully disconnects (all connections closed).
194
206
  */
195
- private cleanupClientPresence;
207
+ private cleanupOwnerPresence;
196
208
  /**
197
209
  * Maximum serialized size (bytes) for inline WS change delivery.
198
210
  * Larger payloads fall back to cursor-only notification.
@@ -217,6 +229,10 @@ export declare class WebSocketConnectionManager {
217
229
  * Get the number of active connections for a client.
218
230
  */
219
231
  getConnectionCount(clientId: string): number;
232
+ /**
233
+ * Get the number of active connections for one owner identity.
234
+ */
235
+ getScopedConnectionCount(ownerKey: string): number;
220
236
  /**
221
237
  * Get the current transport path for a client if connected.
222
238
  */
package/dist/ws.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../src/ws.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../src/ws.ts"],"names":[],"mappings":"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"}
package/dist/ws.js CHANGED
@@ -5,6 +5,9 @@
5
5
  * Also supports presence tracking for collaborative features.
6
6
  */
7
7
  import { RealtimeConnectionRegistry } from '@syncular/core';
8
+ export function createWebSocketConnectionOwnerKey(args) {
9
+ return JSON.stringify([args.partitionId, args.actorId, args.clientId]);
10
+ }
8
11
  function safeSend(ws, message) {
9
12
  try {
10
13
  ws.send(message);
@@ -24,6 +27,7 @@ export function createWebSocketConnection(ws, args) {
24
27
  },
25
28
  actorId: args.actorId,
26
29
  clientId: args.clientId,
30
+ ownerKey: args.ownerKey,
27
31
  transportPath: args.transportPath,
28
32
  sendSync(cursor, changes, metadata) {
29
33
  if (!connection.isOpen)
@@ -103,7 +107,7 @@ export class WebSocketConnectionManager {
103
107
  registry;
104
108
  /**
105
109
  * In-memory presence tracking by scope key.
106
- * Map<scopeKey, Map<clientId, PresenceEntry>>
110
+ * Map<scopeKey, Map<ownerKey, PresenceEntry>>
107
111
  */
108
112
  presenceByScopeKey = new Map();
109
113
  /**
@@ -114,8 +118,8 @@ export class WebSocketConnectionManager {
114
118
  this.onPresenceChange = options?.onPresenceChange;
115
119
  this.registry = new RealtimeConnectionRegistry({
116
120
  heartbeatIntervalMs: options?.heartbeatIntervalMs,
117
- onClientDisconnected: (clientId) => {
118
- this.cleanupClientPresence(clientId);
121
+ onOwnerDisconnected: (ownerKey) => {
122
+ this.cleanupOwnerPresence(ownerKey);
119
123
  },
120
124
  });
121
125
  }
@@ -130,14 +134,14 @@ export class WebSocketConnectionManager {
130
134
  * Update the effective scopes for an already-connected client.
131
135
  * If the client has no active connections, this is a no-op.
132
136
  */
133
- updateClientScopeKeys(clientId, scopeKeys) {
134
- this.registry.updateClientScopeKeys(clientId, scopeKeys);
137
+ updateConnectionScopeKeys(ownerKey, scopeKeys) {
138
+ this.registry.updateOwnerScopeKeys(ownerKey, scopeKeys);
135
139
  }
136
140
  /**
137
141
  * Check whether a client is currently authorized/subscribed for a scope key.
138
142
  */
139
- isClientSubscribedToScopeKey(clientId, scopeKey) {
140
- return this.registry.isClientSubscribedToScopeKey(clientId, scopeKey);
143
+ isConnectionSubscribedToScopeKey(ownerKey, scopeKey) {
144
+ return this.registry.isOwnerSubscribedToScopeKey(ownerKey, scopeKey);
141
145
  }
142
146
  // =========================================================================
143
147
  // Presence Tracking
@@ -146,18 +150,16 @@ export class WebSocketConnectionManager {
146
150
  * Join presence for a scope key.
147
151
  * Called when a client wants to be visible to others in a scope.
148
152
  */
149
- joinPresence(clientId, scopeKey, metadata) {
150
- const conns = this.registry.getConnectionsForClient(clientId);
153
+ joinPresence(ownerKey, scopeKey, metadata) {
154
+ const conns = this.registry.getConnectionsForOwner(ownerKey);
151
155
  if (!conns || conns.size === 0)
152
156
  return false;
153
- if (!this.isClientSubscribedToScopeKey(clientId, scopeKey))
157
+ if (!this.isConnectionSubscribedToScopeKey(ownerKey, scopeKey))
154
158
  return false;
155
- // Get actorId from first connection
156
159
  const conn = conns.values().next().value;
157
160
  if (!conn)
158
161
  return false;
159
- const actorId = conn.actorId;
160
- // Add to presence map
162
+ const { actorId, clientId } = conn;
161
163
  let scopePresence = this.presenceByScopeKey.get(scopeKey);
162
164
  if (!scopePresence) {
163
165
  scopePresence = new Map();
@@ -169,19 +171,19 @@ export class WebSocketConnectionManager {
169
171
  joinedAt: Date.now(),
170
172
  metadata,
171
173
  };
172
- scopePresence.set(clientId, entry);
173
- // Notify other clients in this scope
174
+ scopePresence.set(ownerKey, entry);
174
175
  this.broadcastPresenceEvent(scopeKey, {
175
176
  action: 'join',
176
177
  scopeKey,
178
+ ownerKey,
177
179
  clientId,
178
180
  actorId,
179
181
  metadata,
180
182
  });
181
- // Callback for cross-instance broadcasting
182
183
  this.onPresenceChange?.({
183
184
  action: 'join',
184
185
  scopeKey,
186
+ ownerKey,
185
187
  clientId,
186
188
  actorId,
187
189
  metadata,
@@ -192,29 +194,29 @@ export class WebSocketConnectionManager {
192
194
  * Leave presence for a scope key.
193
195
  * Called when a client no longer wants to be visible in a scope.
194
196
  */
195
- leavePresence(clientId, scopeKey) {
197
+ leavePresence(ownerKey, scopeKey) {
196
198
  const scopePresence = this.presenceByScopeKey.get(scopeKey);
197
199
  if (!scopePresence)
198
200
  return false;
199
- const entry = scopePresence.get(clientId);
201
+ const entry = scopePresence.get(ownerKey);
200
202
  if (!entry)
201
203
  return false;
202
- scopePresence.delete(clientId);
204
+ scopePresence.delete(ownerKey);
203
205
  if (scopePresence.size === 0) {
204
206
  this.presenceByScopeKey.delete(scopeKey);
205
207
  }
206
- // Notify other clients in this scope
207
208
  this.broadcastPresenceEvent(scopeKey, {
208
209
  action: 'leave',
209
210
  scopeKey,
210
- clientId,
211
+ ownerKey,
212
+ clientId: entry.clientId,
211
213
  actorId: entry.actorId,
212
214
  });
213
- // Callback for cross-instance broadcasting
214
215
  this.onPresenceChange?.({
215
216
  action: 'leave',
216
217
  scopeKey,
217
- clientId,
218
+ ownerKey,
219
+ clientId: entry.clientId,
218
220
  actorId: entry.actorId,
219
221
  });
220
222
  return true;
@@ -223,29 +225,29 @@ export class WebSocketConnectionManager {
223
225
  * Update presence metadata for a client in a scope.
224
226
  * Used to update what entity a user is viewing/editing.
225
227
  */
226
- updatePresenceMetadata(clientId, scopeKey, metadata) {
227
- if (!this.isClientSubscribedToScopeKey(clientId, scopeKey))
228
+ updatePresenceMetadata(ownerKey, scopeKey, metadata) {
229
+ if (!this.isConnectionSubscribedToScopeKey(ownerKey, scopeKey))
228
230
  return false;
229
231
  const scopePresence = this.presenceByScopeKey.get(scopeKey);
230
232
  if (!scopePresence)
231
233
  return false;
232
- const entry = scopePresence.get(clientId);
234
+ const entry = scopePresence.get(ownerKey);
233
235
  if (!entry)
234
236
  return false;
235
237
  entry.metadata = metadata;
236
- // Notify other clients in this scope
237
238
  this.broadcastPresenceEvent(scopeKey, {
238
239
  action: 'update',
239
240
  scopeKey,
240
- clientId,
241
+ ownerKey,
242
+ clientId: entry.clientId,
241
243
  actorId: entry.actorId,
242
244
  metadata,
243
245
  });
244
- // Callback for cross-instance broadcasting
245
246
  this.onPresenceChange?.({
246
247
  action: 'update',
247
248
  scopeKey,
248
- clientId,
249
+ ownerKey,
250
+ clientId: entry.clientId,
249
251
  actorId: entry.actorId,
250
252
  metadata,
251
253
  });
@@ -287,8 +289,11 @@ export class WebSocketConnectionManager {
287
289
  * Updates local state and notifies local clients.
288
290
  */
289
291
  handleRemotePresenceEvent(event) {
290
- const { action, scopeKey, clientId, actorId, metadata } = event;
291
- // Update local presence state
292
+ const { action, scopeKey, clientId, actorId, metadata, ownerKey = createWebSocketConnectionOwnerKey({
293
+ partitionId: scopeKey.split(':', 1)[0] ?? 'default',
294
+ actorId,
295
+ clientId,
296
+ }), } = event;
292
297
  let scopePresence = this.presenceByScopeKey.get(scopeKey);
293
298
  switch (action) {
294
299
  case 'join': {
@@ -296,7 +301,7 @@ export class WebSocketConnectionManager {
296
301
  scopePresence = new Map();
297
302
  this.presenceByScopeKey.set(scopeKey, scopePresence);
298
303
  }
299
- scopePresence.set(clientId, {
304
+ scopePresence.set(ownerKey, {
300
305
  clientId,
301
306
  actorId,
302
307
  joinedAt: Date.now(),
@@ -306,7 +311,7 @@ export class WebSocketConnectionManager {
306
311
  }
307
312
  case 'leave': {
308
313
  if (scopePresence) {
309
- scopePresence.delete(clientId);
314
+ scopePresence.delete(ownerKey);
310
315
  if (scopePresence.size === 0) {
311
316
  this.presenceByScopeKey.delete(scopeKey);
312
317
  }
@@ -315,7 +320,7 @@ export class WebSocketConnectionManager {
315
320
  }
316
321
  case 'update': {
317
322
  if (scopePresence) {
318
- const entry = scopePresence.get(clientId);
323
+ const entry = scopePresence.get(ownerKey);
319
324
  if (entry) {
320
325
  entry.metadata = metadata;
321
326
  }
@@ -337,30 +342,29 @@ export class WebSocketConnectionManager {
337
342
  });
338
343
  }
339
344
  /**
340
- * Clean up presence when a client fully disconnects (all connections closed).
345
+ * Clean up presence when an owner fully disconnects (all connections closed).
341
346
  */
342
- cleanupClientPresence(clientId) {
343
- // Find all scopes this client has presence in
347
+ cleanupOwnerPresence(ownerKey) {
344
348
  for (const [scopeKey, scopePresence] of this.presenceByScopeKey) {
345
- const entry = scopePresence.get(clientId);
349
+ const entry = scopePresence.get(ownerKey);
346
350
  if (!entry)
347
351
  continue;
348
- scopePresence.delete(clientId);
352
+ scopePresence.delete(ownerKey);
349
353
  if (scopePresence.size === 0) {
350
354
  this.presenceByScopeKey.delete(scopeKey);
351
355
  }
352
- // Notify other clients
353
356
  this.broadcastPresenceEvent(scopeKey, {
354
357
  action: 'leave',
355
358
  scopeKey,
356
- clientId,
359
+ ownerKey,
360
+ clientId: entry.clientId,
357
361
  actorId: entry.actorId,
358
362
  });
359
- // Callback for cross-instance broadcasting
360
363
  this.onPresenceChange?.({
361
364
  action: 'leave',
362
365
  scopeKey,
363
- clientId,
366
+ ownerKey,
367
+ clientId: entry.clientId,
364
368
  actorId: entry.actorId,
365
369
  });
366
370
  }
@@ -413,6 +417,12 @@ export class WebSocketConnectionManager {
413
417
  getConnectionCount(clientId) {
414
418
  return this.registry.getConnectionCount(clientId);
415
419
  }
420
+ /**
421
+ * Get the number of active connections for one owner identity.
422
+ */
423
+ getScopedConnectionCount(ownerKey) {
424
+ return this.registry.getScopedConnectionCount(ownerKey);
425
+ }
416
426
  /**
417
427
  * Get the current transport path for a client if connected.
418
428
  */
package/dist/ws.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ws.js","sourceRoot":"","sources":["../src/ws.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ws.js","sourceRoot":"","sources":["../src/ws.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@syncular/server-hono",
3
- "version": "0.0.6-171",
3
+ "version": "0.0.6-177",
4
4
  "description": "Hono adapter for the Syncular server with OpenAPI support",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Benjamin Kniffler",
@@ -63,17 +63,17 @@
63
63
  "@noble/hashes": "^2.0.1",
64
64
  "@standard-community/standard-json": "^0.3.5",
65
65
  "@standard-community/standard-openapi": "^0.2.9",
66
- "@syncular/console": "0.0.6-171",
67
- "@syncular/core": "0.0.6-171",
68
- "@syncular/server": "0.0.6-171",
66
+ "@syncular/console": "0.0.6-177",
67
+ "@syncular/core": "0.0.6-177",
68
+ "@syncular/server": "0.0.6-177",
69
69
  "@types/json-schema": "^7.0.15",
70
70
  "hono-openapi": "^1.2.0",
71
71
  "openapi-types": "^12.1.3"
72
72
  },
73
73
  "devDependencies": {
74
74
  "@syncular/config": "0.0.0",
75
- "@syncular/dialect-pglite": "0.0.6-171",
76
- "@syncular/server-dialect-postgres": "0.0.6-171",
75
+ "@syncular/dialect-pglite": "0.0.6-177",
76
+ "@syncular/server-dialect-postgres": "0.0.6-177",
77
77
  "kysely": "*",
78
78
  "zod": "*"
79
79
  },
@@ -320,6 +320,19 @@ describe('createConsoleGatewayRoutes live fan-in', () => {
320
320
  });
321
321
  });
322
322
 
323
+ it('allows same-origin websocket upgrades when allowedOrigins is unset', async () => {
324
+ const { app } = createGatewayLiveHarness();
325
+
326
+ const response = await app.request('http://localhost/console/events/live', {
327
+ headers: {
328
+ Authorization: `Bearer ${CONSOLE_TOKEN}`,
329
+ Origin: 'http://localhost',
330
+ },
331
+ });
332
+
333
+ expect(response.status).toBe(200);
334
+ });
335
+
323
336
  it('enforces inbound websocket message rate limits per upstream connection', async () => {
324
337
  const { app, getEvents } = createGatewayLiveHarness({
325
338
  websocket: {