@pairlobby/local-server 0.31.0 → 0.33.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.
package/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # @pairlobby/local-server
2
2
 
3
- Part of [PairLobby](https://github.com/PairLobby/app), built from `packages/local-server` at version 0.31.0. See that repository for documentation.
3
+ Part of [PairLobby](https://github.com/PairLobby/app), built from `packages/local-server` at version 0.33.0. See that repository for documentation.
4
4
 
5
5
  Licensed under the [Elastic License 2.0](LICENSE): you may use, copy, modify and distribute it, but may not offer it to others as a hosted or managed service.
package/dist/schema.d.ts CHANGED
@@ -1,3 +1,2 @@
1
- export declare const SCHEMA_VERSION = 1;
2
- export declare const SCHEMA = "\nCREATE TABLE IF NOT EXISTS meta (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n) STRICT;\n\nCREATE TABLE IF NOT EXISTS rooms (\n room_id TEXT PRIMARY KEY,\n earliest_seq INTEGER NOT NULL DEFAULT 1,\n body TEXT NOT NULL\n) STRICT;\nCREATE INDEX IF NOT EXISTS rooms_by_auto_close ON rooms (json_extract(body, '$.autoCloseAt')) WHERE json_extract(body, '$.lifecycle') = 'open' AND json_extract(body, '$.autoCloseAt') IS NOT NULL;\n\nCREATE TABLE IF NOT EXISTS participants (\n participant_id TEXT PRIMARY KEY,\n room_id TEXT NOT NULL,\n credential_hash TEXT NOT NULL,\n body TEXT NOT NULL\n) STRICT;\nCREATE INDEX IF NOT EXISTS participants_by_room ON participants (room_id);\nCREATE UNIQUE INDEX IF NOT EXISTS participants_by_credential ON participants (room_id, credential_hash);\n\nCREATE TABLE IF NOT EXISTS events (\n room_id TEXT NOT NULL,\n seq INTEGER NOT NULL,\n body TEXT NOT NULL,\n PRIMARY KEY (room_id, seq)\n) STRICT;\n\nCREATE TABLE IF NOT EXISTS idempotency (\n room_id TEXT NOT NULL,\n key TEXT NOT NULL,\n request_digest TEXT NOT NULL,\n seq INTEGER NOT NULL,\n PRIMARY KEY (room_id, key)\n) STRICT;\n\nCREATE TABLE IF NOT EXISTS handovers (\n handover_id TEXT PRIMARY KEY,\n room_id TEXT NOT NULL,\n body TEXT NOT NULL\n) STRICT;\nCREATE INDEX IF NOT EXISTS handovers_by_room ON handovers (room_id);\n\nCREATE TABLE IF NOT EXISTS controls (\n room_id TEXT NOT NULL,\n target_participant_id TEXT NOT NULL,\n body TEXT NOT NULL,\n PRIMARY KEY (room_id, target_participant_id)\n) STRICT;\n\nCREATE TABLE IF NOT EXISTS invites (\n digest TEXT PRIMARY KEY,\n room_id TEXT NOT NULL,\n state TEXT NOT NULL,\n bound_attempt_id TEXT,\n body TEXT NOT NULL\n) STRICT;\nCREATE INDEX IF NOT EXISTS invites_by_room ON invites (room_id);\n\nCREATE TABLE IF NOT EXISTS message_requests (\n event_id TEXT PRIMARY KEY,\n room_id TEXT NOT NULL,\n seq INTEGER NOT NULL,\n received_at INTEGER,\n response_event_id TEXT,\n requires_reply INTEGER NOT NULL,\n body TEXT NOT NULL\n) STRICT;\nCREATE INDEX IF NOT EXISTS message_requests_pending ON message_requests(room_id,seq) WHERE requires_reply=1 AND response_event_id IS NULL;\nCREATE INDEX IF NOT EXISTS message_requests_group ON message_requests(room_id,json_extract(body,'$.conversationId'));\nCREATE INDEX IF NOT EXISTS message_requests_unreceived ON message_requests(room_id,seq) WHERE received_at IS NULL;\n\nCREATE TABLE IF NOT EXISTS files (\n file_id TEXT PRIMARY KEY,\n room_id TEXT NOT NULL,\n size INTEGER NOT NULL,\n created_at INTEGER NOT NULL,\n event_id TEXT,\n body TEXT NOT NULL\n) STRICT;\nCREATE INDEX IF NOT EXISTS files_by_room ON files (room_id, created_at);\n\nCREATE TABLE IF NOT EXISTS file_chunks (\n file_id TEXT NOT NULL,\n idx INTEGER NOT NULL,\n bytes BLOB NOT NULL,\n PRIMARY KEY (file_id, idx)\n) STRICT;\n\nCREATE INDEX IF NOT EXISTS events_message_id ON events(room_id,json_extract(body,'$.eventId'));\nCREATE INDEX IF NOT EXISTS events_reply_to ON events(room_id,json_extract(body,'$.replyTo')) WHERE json_extract(body,'$.type')='message';\nCREATE INDEX IF NOT EXISTS events_receipt_to ON events(room_id,json_extract(body,'$.payload.eventId')) WHERE json_extract(body,'$.type')='message.received';\nCREATE INDEX IF NOT EXISTS events_by_sender ON events(room_id,json_extract(body,'$.senderId'),seq) WHERE json_extract(body,'$.type')='message';\n\nCREATE TABLE IF NOT EXISTS listings (\n listing_id TEXT PRIMARY KEY,\n room_id TEXT NOT NULL,\n participant_id TEXT NOT NULL,\n owner TEXT NOT NULL,\n body TEXT NOT NULL\n) STRICT;\nCREATE UNIQUE INDEX IF NOT EXISTS listings_by_participant ON listings (room_id, participant_id);\nCREATE INDEX IF NOT EXISTS listings_by_owner ON listings (owner);\n\nCREATE TABLE IF NOT EXISTS member_defaults (\n handle TEXT PRIMARY KEY,\n body TEXT NOT NULL\n) STRICT;\n";
1
+ export { SCHEMA, SCHEMA_VERSION } from '@pairlobby/sqlite';
3
2
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC,eAAO,MAAM,MAAM,qkIA6GlB,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,cAAc,EAAC,MAAM,mBAAmB,CAAC"}
package/dist/schema.js CHANGED
@@ -1,115 +1,2 @@
1
- //! SQLite schema. Records are stored as JSON with only the columns lookups need
2
- //! indexed, so a protocol field added later is an additive change rather than a
3
- //! migration of every row.
4
- export const SCHEMA_VERSION = 1;
5
- export const SCHEMA = `
6
- CREATE TABLE IF NOT EXISTS meta (
7
- key TEXT PRIMARY KEY,
8
- value TEXT NOT NULL
9
- ) STRICT;
10
-
11
- CREATE TABLE IF NOT EXISTS rooms (
12
- room_id TEXT PRIMARY KEY,
13
- earliest_seq INTEGER NOT NULL DEFAULT 1,
14
- body TEXT NOT NULL
15
- ) STRICT;
16
- CREATE INDEX IF NOT EXISTS rooms_by_auto_close ON rooms (json_extract(body, '$.autoCloseAt')) WHERE json_extract(body, '$.lifecycle') = 'open' AND json_extract(body, '$.autoCloseAt') IS NOT NULL;
17
-
18
- CREATE TABLE IF NOT EXISTS participants (
19
- participant_id TEXT PRIMARY KEY,
20
- room_id TEXT NOT NULL,
21
- credential_hash TEXT NOT NULL,
22
- body TEXT NOT NULL
23
- ) STRICT;
24
- CREATE INDEX IF NOT EXISTS participants_by_room ON participants (room_id);
25
- CREATE UNIQUE INDEX IF NOT EXISTS participants_by_credential ON participants (room_id, credential_hash);
26
-
27
- CREATE TABLE IF NOT EXISTS events (
28
- room_id TEXT NOT NULL,
29
- seq INTEGER NOT NULL,
30
- body TEXT NOT NULL,
31
- PRIMARY KEY (room_id, seq)
32
- ) STRICT;
33
-
34
- CREATE TABLE IF NOT EXISTS idempotency (
35
- room_id TEXT NOT NULL,
36
- key TEXT NOT NULL,
37
- request_digest TEXT NOT NULL,
38
- seq INTEGER NOT NULL,
39
- PRIMARY KEY (room_id, key)
40
- ) STRICT;
41
-
42
- CREATE TABLE IF NOT EXISTS handovers (
43
- handover_id TEXT PRIMARY KEY,
44
- room_id TEXT NOT NULL,
45
- body TEXT NOT NULL
46
- ) STRICT;
47
- CREATE INDEX IF NOT EXISTS handovers_by_room ON handovers (room_id);
48
-
49
- CREATE TABLE IF NOT EXISTS controls (
50
- room_id TEXT NOT NULL,
51
- target_participant_id TEXT NOT NULL,
52
- body TEXT NOT NULL,
53
- PRIMARY KEY (room_id, target_participant_id)
54
- ) STRICT;
55
-
56
- CREATE TABLE IF NOT EXISTS invites (
57
- digest TEXT PRIMARY KEY,
58
- room_id TEXT NOT NULL,
59
- state TEXT NOT NULL,
60
- bound_attempt_id TEXT,
61
- body TEXT NOT NULL
62
- ) STRICT;
63
- CREATE INDEX IF NOT EXISTS invites_by_room ON invites (room_id);
64
-
65
- CREATE TABLE IF NOT EXISTS message_requests (
66
- event_id TEXT PRIMARY KEY,
67
- room_id TEXT NOT NULL,
68
- seq INTEGER NOT NULL,
69
- received_at INTEGER,
70
- response_event_id TEXT,
71
- requires_reply INTEGER NOT NULL,
72
- body TEXT NOT NULL
73
- ) STRICT;
74
- CREATE INDEX IF NOT EXISTS message_requests_pending ON message_requests(room_id,seq) WHERE requires_reply=1 AND response_event_id IS NULL;
75
- CREATE INDEX IF NOT EXISTS message_requests_group ON message_requests(room_id,json_extract(body,'$.conversationId'));
76
- CREATE INDEX IF NOT EXISTS message_requests_unreceived ON message_requests(room_id,seq) WHERE received_at IS NULL;
77
-
78
- CREATE TABLE IF NOT EXISTS files (
79
- file_id TEXT PRIMARY KEY,
80
- room_id TEXT NOT NULL,
81
- size INTEGER NOT NULL,
82
- created_at INTEGER NOT NULL,
83
- event_id TEXT,
84
- body TEXT NOT NULL
85
- ) STRICT;
86
- CREATE INDEX IF NOT EXISTS files_by_room ON files (room_id, created_at);
87
-
88
- CREATE TABLE IF NOT EXISTS file_chunks (
89
- file_id TEXT NOT NULL,
90
- idx INTEGER NOT NULL,
91
- bytes BLOB NOT NULL,
92
- PRIMARY KEY (file_id, idx)
93
- ) STRICT;
94
-
95
- CREATE INDEX IF NOT EXISTS events_message_id ON events(room_id,json_extract(body,'$.eventId'));
96
- CREATE INDEX IF NOT EXISTS events_reply_to ON events(room_id,json_extract(body,'$.replyTo')) WHERE json_extract(body,'$.type')='message';
97
- CREATE INDEX IF NOT EXISTS events_receipt_to ON events(room_id,json_extract(body,'$.payload.eventId')) WHERE json_extract(body,'$.type')='message.received';
98
- CREATE INDEX IF NOT EXISTS events_by_sender ON events(room_id,json_extract(body,'$.senderId'),seq) WHERE json_extract(body,'$.type')='message';
99
-
100
- CREATE TABLE IF NOT EXISTS listings (
101
- listing_id TEXT PRIMARY KEY,
102
- room_id TEXT NOT NULL,
103
- participant_id TEXT NOT NULL,
104
- owner TEXT NOT NULL,
105
- body TEXT NOT NULL
106
- ) STRICT;
107
- CREATE UNIQUE INDEX IF NOT EXISTS listings_by_participant ON listings (room_id, participant_id);
108
- CREATE INDEX IF NOT EXISTS listings_by_owner ON listings (owner);
109
-
110
- CREATE TABLE IF NOT EXISTS member_defaults (
111
- handle TEXT PRIMARY KEY,
112
- body TEXT NOT NULL
113
- ) STRICT;
114
- `;
1
+ export { SCHEMA, SCHEMA_VERSION } from '@pairlobby/sqlite';
115
2
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,gFAAgF;AAChF,2BAA2B;AAE3B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEhC,MAAM,CAAC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6GrB,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,cAAc,EAAC,MAAM,mBAAmB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAC,eAAe,EAAsE,MAAM,wBAAwB,CAAC;AAEjI,OAAO,KAAK,EAAC,WAAW,EAAE,UAAU,EAAC,MAAM,qBAAqB,CAAC;AAKjE,OAAO,KAAK,EAAiB,qBAAqB,EAAE,aAAa,EAAC,MAAM,aAAa,CAAC;AACtF,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,eAAe,CAAC;AAIlD,MAAM,WAAW,YAAY;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,gGAAgG;IAChG,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kGAAkG;IAClG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gHAAgH;IAChH,KAAK,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC;IAC5B,iHAAiH;IACjH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,8GAA8G;IAC9G,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,wGAAwG;IACxG,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sFAAsF;IACtF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yIAAyI;IACzI,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,OAAO,CAAC,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC;IAC1E,oFAAoF;IACpF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iIAAiI;IACjI,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAClC,4GAA4G;IAC5G,UAAU,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACjC;;;OAGG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,kHAAkH;IAClH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,0EAA0E;IAC1E,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,yJAAyJ;IACzJ,MAAM,CAAC,EAAE,qBAAqB,GAAG;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAC,CAAC;CACxD;AAED,MAAM,WAAW,aAAa;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,mGAAmG;IACnG,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,+FAA+F;IAC/F,YAAY,EAAE,OAAO,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,gFAAgF;IAChF,aAAa,IAAI,IAAI,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AA2BD,iHAAiH;AACjH,eAAO,MAAM,YAAY,OAAO,CAAC;AAEjC,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAQ/E;AAgJD,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAEhF"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAC,eAAe,EAAsE,MAAM,wBAAwB,CAAC;AAEjI,OAAO,KAAK,EAAC,WAAW,EAAE,UAAU,EAAC,MAAM,qBAAqB,CAAC;AAKjE,OAAO,KAAK,EAAiB,qBAAqB,EAAE,aAAa,EAAC,MAAM,aAAa,CAAC;AACtF,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,eAAe,CAAC;AAIlD,MAAM,WAAW,YAAY;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,gGAAgG;IAChG,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kGAAkG;IAClG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gHAAgH;IAChH,KAAK,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC;IAC5B,iHAAiH;IACjH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,8GAA8G;IAC9G,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,wGAAwG;IACxG,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sFAAsF;IACtF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yIAAyI;IACzI,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,OAAO,CAAC,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC;IAC1E,oFAAoF;IACpF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iIAAiI;IACjI,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAClC,4GAA4G;IAC5G,UAAU,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACjC;;;OAGG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,kHAAkH;IAClH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,0EAA0E;IAC1E,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,yJAAyJ;IACzJ,MAAM,CAAC,EAAE,qBAAqB,GAAG;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAC,CAAC;CACxD;AAED,MAAM,WAAW,aAAa;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,mGAAmG;IACnG,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,+FAA+F;IAC/F,YAAY,EAAE,OAAO,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,gFAAgF;IAChF,aAAa,IAAI,IAAI,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAgCD,iHAAiH;AACjH,eAAO,MAAM,YAAY,OAAO,CAAC;AAEjC,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAQ/E;AAgJD,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAEhF"}
package/dist/server.js CHANGED
@@ -1,12 +1,14 @@
1
1
  //! The Node relay: an adapter between `node:http` and the shared kernel (`createRelay`).
2
- //! It supplies one write queue for its one store, a timer for auto-close, and what the
2
+ //! It supplies short per-room queues for its one store, a timer for auto-close, and what the
3
3
  //! socket says about each caller; every protocol rule stays in the kernel.
4
4
  import { createServer as createHttpServer } from 'node:http';
5
5
  import { mkdirSync } from 'node:fs';
6
6
  import { hostname, networkInterfaces } from 'node:os';
7
7
  import { dirname } from 'node:path';
8
+ import { Readable } from 'node:stream';
9
+ import { pipeline } from 'node:stream/promises';
8
10
  import { ChangeNotifier, NotifyingStore, RoomService, createAdmission, createRelay, memoryRateLimiter, queueExecutor, timerScheduler } from '@pairlobby/server-core';
9
- import { ABSOLUTE_MAX_FILE_BYTES, DEFAULT_ROOM_POLICY } from '@pairlobby/protocol';
11
+ import { ABSOLUTE_MAX_FILE_BYTES, DEFAULT_ROOM_POLICY, ProtocolError } from '@pairlobby/protocol';
10
12
  import { advertiseRelay, isLocalNetworkAddress, isLoopbackAddress, isTailscaleAddress } from './network.js';
11
13
  import { REQUEST_ID_HEADER, requestIdFor, requestLogLine, shouldLog } from './request-log.js';
12
14
  import { restoreLatest, startBackups } from './backup.js';
@@ -14,7 +16,10 @@ import { MembersFile } from './members.js';
14
16
  import { SqliteRoomStore } from './sqlite-store.js';
15
17
  /** Non-file endpoints retain the smaller bound; the file-upload route may use the explicit file ceiling. */
16
18
  const DEFAULT_MAX_REQUEST_BYTES = 32 * 1024 * 1024;
17
- class RequestBodyTooLarge extends Error {
19
+ class RequestBodyTooLarge extends ProtocolError {
20
+ constructor() {
21
+ super('payload_too_large', 'this request is larger than the relay accepts');
22
+ }
18
23
  }
19
24
  function requestBodyLimit(incoming) {
20
25
  const path = (incoming.url ?? '').split('?', 1)[0];
@@ -99,7 +104,7 @@ function listen(options, restore) {
99
104
  const account = { email: null, name: options.discovery?.name ?? null, server: options.publicUrl ?? new URL(request.url).origin };
100
105
  return member ? { ...account, userId: `member:${member.handle}`, handle: member.handle } : { ...account, userId: 'team', handle: null };
101
106
  } : undefined;
102
- // One store behind one process: one queue keeps two writes from choosing the same next event sequence.
107
+ // Short per-room queues preserve local order; atomic state revisions guard independent writers as well.
103
108
  const executor = queueExecutor();
104
109
  // One timer for the whole relay, aimed at the earliest auto-close deadline; every write plans it again.
105
110
  const scheduler = timerScheduler(() => void relay.tick('auto-close'));
@@ -219,6 +224,13 @@ async function respond(relay, incoming, outgoing, origin, log) {
219
224
  const started = Date.now();
220
225
  const requestId = requestIdFor(typeof incoming.headers[REQUEST_ID_HEADER] === 'string' ? incoming.headers[REQUEST_ID_HEADER] : null);
221
226
  const bodyLimit = requestBodyLimit(incoming);
227
+ const disconnected = new AbortController();
228
+ incoming.once('aborted', () => disconnected.abort());
229
+ outgoing.once('close', () => {
230
+ if (!outgoing.writableEnded) {
231
+ disconnected.abort();
232
+ }
233
+ });
222
234
  const finish = (status, headers, body) => {
223
235
  outgoing.writeHead(status, { ...headers, [REQUEST_ID_HEADER]: requestId });
224
236
  outgoing.end(body);
@@ -233,12 +245,32 @@ async function respond(relay, incoming, outgoing, origin, log) {
233
245
  tooLarge();
234
246
  return;
235
247
  }
236
- const request = await toRequest(incoming, origin, bodyLimit);
248
+ const request = await toRequest(incoming, origin, bodyLimit, disconnected.signal);
237
249
  // Read off the socket: no header can claim where the connection came from.
238
250
  const response = await relay.handle(request, { peerAddress: incoming.socket.remoteAddress ?? '' });
239
- finish(response.status, Object.fromEntries(response.headers), response.body ? Buffer.from(await response.arrayBuffer()) : undefined);
251
+ if (disconnected.signal.aborted) {
252
+ return;
253
+ }
254
+ outgoing.writeHead(response.status, { ...Object.fromEntries(response.headers), [REQUEST_ID_HEADER]: requestId });
255
+ if (response.body) {
256
+ await pipeline(Readable.fromWeb(response.body), outgoing, { signal: disconnected.signal });
257
+ }
258
+ else {
259
+ outgoing.end();
260
+ }
261
+ const method = incoming.method ?? 'GET';
262
+ if (log && shouldLog(log.mode, method, response.status)) {
263
+ log.write(requestLogLine({ requestId, method, path: (incoming.url ?? '/').split('?', 1)[0], status: response.status, ms: Date.now() - started, at: new Date(started) }));
264
+ }
240
265
  }
241
266
  catch (error) {
267
+ if (disconnected.signal.aborted) {
268
+ return;
269
+ }
270
+ if (outgoing.headersSent) {
271
+ outgoing.destroy(error instanceof Error ? error : undefined);
272
+ return;
273
+ }
242
274
  if (error instanceof RequestBodyTooLarge) {
243
275
  tooLarge();
244
276
  return;
@@ -246,7 +278,29 @@ async function respond(relay, incoming, outgoing, origin, log) {
246
278
  finish(503, { 'content-type': 'application/json' }, JSON.stringify({ error: { code: 'server_unavailable', message: 'the server could not complete this request' } }));
247
279
  }
248
280
  }
249
- async function toRequest(incoming, origin, bodyLimit) {
281
+ async function toRequest(incoming, origin, bodyLimit, signal) {
282
+ const method = incoming.method ?? 'GET';
283
+ const headers = new Headers();
284
+ for (const [name, value] of Object.entries(incoming.headers)) {
285
+ if (value !== undefined) {
286
+ headers.set(name, Array.isArray(value) ? value.join(', ') : value);
287
+ }
288
+ }
289
+ if (method === 'POST' && new URL(incoming.url ?? '/', origin).pathname.endsWith('/files')) {
290
+ let received = 0;
291
+ const source = Readable.toWeb(incoming);
292
+ const body = source.pipeThrough(new TransformStream({
293
+ transform(chunk, controller) {
294
+ received += chunk.byteLength;
295
+ if (received > bodyLimit) {
296
+ throw new RequestBodyTooLarge();
297
+ }
298
+ controller.enqueue(chunk);
299
+ }
300
+ }));
301
+ const init = { method, headers, signal, body, duplex: 'half' };
302
+ return new Request(new URL(incoming.url ?? '/', origin), init);
303
+ }
250
304
  const chunks = [];
251
305
  let received = 0;
252
306
  for await (const chunk of incoming) {
@@ -256,16 +310,8 @@ async function toRequest(incoming, origin, bodyLimit) {
256
310
  }
257
311
  chunks.push(chunk);
258
312
  }
259
- const method = incoming.method ?? 'GET';
260
- const headers = new Headers();
261
- for (const [name, value] of Object.entries(incoming.headers)) {
262
- if (value === undefined) {
263
- continue;
264
- }
265
- headers.set(name, Array.isArray(value) ? value.join(', ') : value);
266
- }
267
313
  const hasBody = method !== 'GET' && method !== 'HEAD' && chunks.length > 0;
268
- return new Request(new URL(incoming.url ?? '/', origin), { method, headers, ...(hasBody ? { body: Buffer.concat(chunks) } : {}) });
314
+ return new Request(new URL(incoming.url ?? '/', origin), { method, headers, signal, ...(hasBody ? { body: Buffer.concat(chunks) } : {}) });
269
315
  }
270
316
  /** Stops taking requests, takes the last backup, then closes the database. */
271
317
  function shutdown(server, store, backups) {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,uFAAuF;AACvF,2EAA2E;AAE3E,OAAO,EAAC,YAAY,IAAI,gBAAgB,EAAyD,MAAM,WAAW,CAAC;AACnH,OAAO,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC;AAClC,OAAO,EAAC,QAAQ,EAAE,iBAAiB,EAAC,MAAM,SAAS,CAAC;AACpD,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAElC,OAAO,EAAC,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAC,MAAM,wBAAwB,CAAC;AAEnK,OAAO,EAAC,uBAAuB,EAAE,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AAGjF,OAAO,EAAC,cAAc,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,kBAAkB,EAAC,MAAM,cAAc,CAAC;AAC1G,OAAO,EAAC,iBAAiB,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAC,aAAa,EAAE,YAAY,EAAC,MAAM,aAAa,CAAC;AAIxD,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AACzC,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAyElD,4GAA4G;AAC5G,MAAM,yBAAyB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAEnD,MAAM,mBAAoB,SAAQ,KAAK;CAAG;AAE1C,SAAS,gBAAgB,CAAC,QAAyB;IAC/C,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,OAAO,QAAQ,CAAC,MAAM,KAAK,MAAM,IAAI,6BAA6B,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,yBAAyB,CAAC;AAC9I,CAAC;AAED,sHAAsH;AACtH,SAAS,iBAAiB,CAAC,QAAwB,EAAE,SAA6B,EAAE,KAAc,EAAE,OAAgB;IAChH,OAAO;QACH,OAAO,EAAE,CAAC;QACV,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,KAAK,EAAE,QAAQ,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC;QAC5M,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;QACpC,QAAQ,EAAE,CAAC,gBAAgB,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACzD,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACjE,CAAC;AACN,CAAC;AAED,mGAAmG;AACnG,MAAM,kBAAkB,GAAG,EAAE,GAAG,MAAM,CAAC;AAEvC,iHAAiH;AACjH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAqB;IACnD,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,gGAAgG;IAChG,MAAM,OAAO,GAAG,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,EAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QAC7L,MAAM,IAAI,KAAK,CAAC,oCAAoC,MAAM,CAAC,MAAM,CAAC,WAAW,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;IAC9M,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACf,OAAO,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,MAAM,CAAC,OAAqB,EAAE,OAAkC;IACrE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;IACzC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpD,yFAAyF;IACzF,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,IAAI,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,EAAC,GAAG,mBAAmB,EAAE,GAAG,OAAO,CAAC,UAAU,EAAC,EAAE,EAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAC,WAAW,EAAE,OAAO,CAAC,WAAW,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,aAAa,EAAC,CAAC,CAAC;IAE/P,iFAAiF;IACjF,+EAA+E;IAC/E,2EAA2E;IAC3E,8EAA8E;IAC9E,MAAM,YAAY,GAAa,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC;IACjE,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACpB,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,KAAK,WAAW,CAAC;IACpD,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/E,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IACrI,iHAAiH;IACjH,0FAA0F;IAC1F,+DAA+D;IAC/D,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC7E,IAAI,OAAO,CAAC,iBAAiB,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,sIAAsI,CAAC,CAAC;IAC5J,CAAC;IACD,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,CAAC,WAAW,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC,SAAS,KAAK,YAAY,IAAI,CAAC,QAAQ,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACvK,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,CAAC,EAAC,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC;IAC3L,MAAM,WAAW,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAClF,MAAM,WAAW,GAAG,CAAC,QAAiB,EAAE,OAAuB,EAAE,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IACrH,oFAAoF;IACpF,MAAM,UAAU,GAAG,KAAK,EAAE,IAAa,EAAE,MAA2B,EAAE,EAAE;QACpE,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACpD,MAAM,MAAM,GAAG,CAAC,MAAM,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC;YACzD,OAAO,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC,CAAC;QACJ,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,QAAiB,EAAE,OAAuB,EAAE,EAAE,CAAC,CAAC,WAAW,IAAI,iBAAiB,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IAC5H,IAAI,OAAO,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACvF,MAAM,IAAI,KAAK,CAAC,iGAAiG,CAAC,CAAC;IACvH,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;IAC5G,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,EAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9N,MAAM,SAAS,GAAG,eAAe,CAAC,EAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAC,WAAW,EAAE,OAAO,CAAC,WAAW,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,EAAC,cAAc,EAAE,KAAK,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAC,CAAC,CAAC;IACjZ,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvJ,2FAA2F;IAC3F,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,OAAgB,EAAE,MAA0B,EAAgB,EAAE;QAC3H,MAAM,OAAO,GAAG,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,IAAI,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAC,CAAC;QAC/H,OAAO,MAAM,CAAC,CAAC,CAAC,EAAC,GAAG,OAAO,EAAE,MAAM,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAC,CAAC,CAAC,CAAC,EAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC;IACxI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACd,uGAAuG;IACvG,MAAM,QAAQ,GAAG,aAAa,EAAE,CAAC;IACjC,wGAAwG;IACxG,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACtE,MAAM,KAAK,GAAU,WAAW,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAC,iBAAiB,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,cAAc,EAAE,OAAO,CAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAC,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAC,YAAY,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC;IAC9c,KAAK,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9H,KAAK,EAAE,KAAK,EAAE,CAAC;IAEf,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,EAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC;IACjI,MAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;QACnD,0HAA0H;QAC1H,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YACnF,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,EAAC,cAAc,EAAE,kBAAkB,EAAE,eAAe,EAAE,UAAU,EAAC,CAAC,CAAC;YAC3F,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACrB,OAAO;QACX,CAAC;QACD,KAAK,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACxH,CAAC,CAAC,CAAC;IACH,iFAAiF;IACjF,oFAAoF;IACpF,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;QAC/B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,EAAE,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC,EAAE,CAAC;YACnE,MAAM,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC;IACL,CAAC,CAAC,CAAC;IACH,IAAI,eAAe,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;IAC/B,IAAI,OAAO,GAA0B,IAAI,CAAC;IAE1C,OAAO,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAClD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;YAC3B,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACvC,sFAAsF;YACtF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,SAAS,GAAG,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAClF,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,SAAS,EAAE,EAAE,aAAa,SAAS,EAAE,EAAE,aAAa,SAAS,EAAE,CAAC,CAAC;YAC9F,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,eAAe,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;YAChD,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,EAAC,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC/G,OAAO,EAAE,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC;gBACJ,GAAG,EAAE,OAAO,CAAC,SAAS,IAAI,UAAU,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,EAAE;gBAChF,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC;gBACvE,YAAY,EAAE,YAAY,EAAE;gBAC5B,IAAI;gBACJ,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,OAAO,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7B,aAAa,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;gBAC1C,KAAK,EAAE,GAAG,EAAE;oBACR,OAAO,EAAE,IAAI,EAAE,CAAC;oBAChB,aAAa,CAAC,KAAK,CAAC,CAAC;oBACrB,SAAS,CAAC,IAAI,EAAE,CAAC;oBACjB,OAAO,CAAC,KAAK,EAAE,CAAC;oBAChB,eAAe,EAAE,CAAC;oBAClB,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;gBACxE,CAAC;aACJ,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC5B,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,CAAC;AAC/C,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC5B,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED,6GAA6G;AAC7G,SAAS,YAAY;IACjB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC;QACzD,KAAK,MAAM,OAAO,IAAI,SAAS,IAAI,EAAE,EAAE,CAAC;YACpC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAClG,CAAC;IACL,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC;IACzC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACnB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,QAAQ,CAAC,CAAC;IAChG,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,WAAW,CAAC,KAA0B,EAAE,OAAe;IACnE,OAAO,KAAK,KAAK,KAAK,IAAI,iBAAiB,CAAC,OAAO,CAAC,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,SAAS,CAAC,KAAa,EAAE,IAAY,EAAE,UAAoB;IAChE,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACD,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC3C,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/H,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,IAAY,EAAE,SAA6B,EAAE,aAAsB;IAChG,IAAI,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACd,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,wFAAwF;IACxF,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC;QACzD,KAAK,MAAM,OAAO,IAAI,SAAS,IAAI,EAAE,EAAE,CAAC;YACpC,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,aAAa,IAAI,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;gBAC5G,IAAI,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC,CAAC;YACnD,CAAC;QACL,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,KAAY,EAAE,QAAyB,EAAE,QAAwB,EAAE,MAAc,EAAE,GAAkC;IACxI,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrI,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,OAA+B,EAAE,IAAsB,EAAE,EAAE;QACvF,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,EAAC,GAAG,OAAO,EAAE,CAAC,iBAAiB,CAAC,EAAE,SAAS,EAAC,CAAC,CAAC;QACzE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,KAAK,CAAC;QACxC,IAAI,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;YAC7C,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,EAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,EAAC,CAAC,CAAC,CAAC;QAC3J,CAAC;IACL,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAC,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,OAAO,EAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC,KAAK,EAAE,EAAC,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,+CAA+C,EAAC,EAAC,CAAC,CAAC,CAAC;IAC9M,IAAI,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC;YAC9D,QAAQ,EAAE,CAAC;YACX,OAAO;QACX,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QAC7D,2EAA2E;QAC3E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,EAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,EAAC,CAAC,CAAC;QACjG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACzI,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,KAAK,YAAY,mBAAmB,EAAE,CAAC;YACvC,QAAQ,EAAE,CAAC;YACX,OAAO;QACX,CAAC;QACD,MAAM,CAAC,GAAG,EAAE,EAAC,cAAc,EAAE,kBAAkB,EAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC,KAAK,EAAE,EAAC,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,4CAA4C,EAAC,EAAC,CAAC,CAAC,CAAC;IACpK,CAAC;AACL,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,QAAyB,EAAE,MAAc,EAAE,SAAiB;IACjF,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QACjC,QAAQ,IAAK,KAAgB,CAAC,UAAU,CAAC;QACzC,IAAI,QAAQ,GAAG,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,mBAAmB,EAAE,CAAC;QACpC,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,KAAK,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,SAAS;QACb,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3E,OAAO,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,EAAE,MAAM,CAAC,EAAE,EAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC;AACnI,CAAC;AAED,8EAA8E;AAC9E,SAAS,QAAQ,CAAC,MAAc,EAAE,KAAsB,EAAE,OAA8B;IACpF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;YACd,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;gBACrD,KAAK,CAAC,KAAK,EAAE,CAAC;gBACd,OAAO,EAAE,CAAC;YACd,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,mBAAmB,EAAE,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,8 @@
1
- import type { ReceiptMode, RoomPolicy } from '@pairlobby/protocol';
2
- import type { AdmissionLimits } from '@pairlobby/server-core';
1
+ import type { ReceiptMode } from '@pairlobby/protocol';
2
+ import type { AdmissionLimits, RoomLimits } from '@pairlobby/server-core';
3
3
  import type { RequestLogMode } from './request-log.js';
4
- /** A setting the relay cannot start with; the message names the flag or variable that holds it. */
5
- export declare class RelaySettingsError extends Error {
6
- constructor(message: string);
7
- }
4
+ export { RelaySettingsError } from '@pairlobby/server-core';
5
+ export type { RoomLimits } from '@pairlobby/server-core';
8
6
  export type RelayFlags = {
9
7
  host?: string;
10
8
  port?: string;
@@ -62,8 +60,6 @@ export type BackupLocation = {
62
60
  bucket: string;
63
61
  prefix: string;
64
62
  };
65
- /** The per-room caps a relay operator may set. */
66
- export type RoomLimits = Pick<RoomPolicy, 'maxParticipants' | 'maxRetainedEvents' | 'maxRetainedEventBytes' | 'maxEventPayloadBytes' | 'maxFileBytes' | 'maxRetainedFileBytes'>;
67
63
  type Source = {
68
64
  flag?: string;
69
65
  variable: string;
@@ -74,5 +70,4 @@ export declare function parsePublicUrl(value: string, source?: Source): string;
74
70
  export declare function relaySettings(flags: RelayFlags, environment: RelayEnvironment): RelaySettings;
75
71
  /** `s3://bucket/prefix` or an absolute folder path (`file://` allowed); null for anything else. */
76
72
  export declare function parseBackupLocation(value: string): BackupLocation | null;
77
- export {};
78
73
  //# sourceMappingURL=settings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAC,eAAe,EAAE,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAExE,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAC,kBAAkB,EAAC,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAEvD,MAAM,MAAM,UAAU,GAAG;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAC,CAAC;AAEjM,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAElE,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,2GAA2G;IAC3G,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2FAA2F;IAC3F,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wFAAwF;IACxF,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IACjC,uEAAuE;IACvE,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAChC,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,4EAA4E;IAC5E,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,kGAAkG;IAClG,SAAS,EAAE,cAAc,CAAC;CAC7B,CAAC;AAEF,uHAAuH;AACvH,MAAM,MAAM,cAAc,GAAG;IAAC,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC;AAEnH,gDAAgD;AAChD,MAAM,MAAM,mBAAmB,GAAG;IAAC,QAAQ,EAAE,cAAc,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAC,CAAC;AAEjH,MAAM,MAAM,cAAc,GAAG;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,GAAG;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAAC;AAE3G,KAAK,MAAM,GAAG;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,CAAC;AAIhD,qEAAqE;AACrE,eAAO,MAAM,eAAe,UAAohB,CAAC;AAWjjB,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,MAA+D,GAAG,MAAM,CAW7H;AA4BD,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,GAAG,aAAa,CAyD7F;AAyED,mGAAmG;AACnG,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAQxE"}
package/dist/settings.js CHANGED
@@ -3,34 +3,8 @@
3
3
  //! PAIRLOBBY_* variables; a flag wins over its variable. Nothing here opens a database,
4
4
  //! so a command can check its settings without loading the relay.
5
5
  import { readFileSync, statSync } from 'node:fs';
6
- import { ABSOLUTE_MAX_FILE_BYTES, RECEIPT_MODES } from '@pairlobby/protocol';
7
- /** A setting the relay cannot start with; the message names the flag or variable that holds it. */
8
- export class RelaySettingsError extends Error {
9
- constructor(message) {
10
- super(message);
11
- this.name = 'RelaySettingsError';
12
- }
13
- }
14
- const KIB = 1024;
15
- const MIB = 1024 * KIB;
16
- /** Sizes are whole KiB or MiB so a typo cannot turn into a byte count. */
17
- const ROOM_LIMIT_VARIABLES = [
18
- { key: 'maxParticipants', variable: 'PAIRLOBBY_ROOM_MAX_PARTICIPANTS', minimum: 2, maximum: 1000, unitBytes: 1 },
19
- { key: 'maxRetainedEvents', variable: 'PAIRLOBBY_ROOM_MAX_EVENTS', minimum: 100, maximum: 10_000_000, unitBytes: 1 },
20
- { key: 'maxRetainedEventBytes', variable: 'PAIRLOBBY_ROOM_MAX_HISTORY_MB', minimum: 1, maximum: 10_240, unitBytes: MIB },
21
- { key: 'maxEventPayloadBytes', variable: 'PAIRLOBBY_ROOM_MAX_MESSAGE_KB', minimum: 1, maximum: 4096, unitBytes: KIB },
22
- { key: 'maxFileBytes', variable: 'PAIRLOBBY_ROOM_MAX_FILE_MB', minimum: 0, maximum: ABSOLUTE_MAX_FILE_BYTES / MIB, unitBytes: MIB },
23
- { key: 'maxRetainedFileBytes', variable: 'PAIRLOBBY_ROOM_MAX_FILES_MB', minimum: 0, maximum: 102_400, unitBytes: MIB }
24
- ];
25
- const LIMIT_VARIABLES = {
26
- createPerMinutePerAddress: 'PAIRLOBBY_LIMIT_CREATE_PER_MIN_IP',
27
- redeemPerMinutePerAddress: 'PAIRLOBBY_LIMIT_REDEEM_PER_MIN_IP',
28
- redeemPerMinuteGlobal: 'PAIRLOBBY_LIMIT_REDEEM_PER_MIN_GLOBAL',
29
- accountCheckPerMinutePerAddress: 'PAIRLOBBY_LIMIT_ACCOUNT_CHECK_PER_MIN_IP',
30
- directoryPerMinutePerMember: 'PAIRLOBBY_LIMIT_DIRECTORY_PER_MIN_MEMBER',
31
- contactPerMinutePerMember: 'PAIRLOBBY_LIMIT_CONTACT_PER_MIN_MEMBER',
32
- contactPerHourPerListing: 'PAIRLOBBY_LIMIT_CONTACT_PER_HOUR_LISTING'
33
- };
6
+ import { LIMIT_VARIABLES, ROOM_LIMIT_VARIABLES, RelaySettingsError, relayPolicySettings, wholeSettingNumber as wholeNumber } from '@pairlobby/server-core';
7
+ export { RelaySettingsError } from '@pairlobby/server-core';
34
8
  const DISCOVERY_VARIABLES = ['PAIRLOBBY_DISCOVERY_NAME', 'PAIRLOBBY_LOGIN_MODE', 'PAIRLOBBY_LOGIN_HELP', 'PAIRLOBBY_SUPPORT_URL', 'PAIRLOBBY_MEMBERS_FILE', 'PAIRLOBBY_TEAM_TOKEN_LOGIN'];
35
9
  /** Every variable `serve` reads, for help text and documentation. */
36
10
  export const RELAY_VARIABLES = ['PAIRLOBBY_HOST', 'PAIRLOBBY_PORT', 'PAIRLOBBY_DATA_DIR', 'PAIRLOBBY_PUBLIC_URL', 'PAIRLOBBY_TRUSTED_PROXY_HEADER', 'PAIRLOBBY_PROXY_IS_ACCESS_GATE', 'PAIRLOBBY_ALLOWED_HOSTS', 'PAIRLOBBY_CREATE_TOKEN', 'PAIRLOBBY_CREATE_TOKEN_FILE', 'PAIRLOBBY_REQUEST_LOG', 'PAIRLOBBY_RECEIPT_MODE', 'PAIRLOBBY_BACKUP', 'PAIRLOBBY_BACKUP_INTERVAL', 'PAIRLOBBY_BACKUP_KEEP', 'PAIRLOBBY_BACKUP_S3_ENDPOINT', 'PAIRLOBBY_NO_RESTORE', ...DISCOVERY_VARIABLES, ...Object.values(LIMIT_VARIABLES), ...ROOM_LIMIT_VARIABLES.map(({ variable }) => variable)];
@@ -54,13 +28,6 @@ export function parsePublicUrl(value, source = { flag: 'public-url', variable: '
54
28
  }
55
29
  return url.origin;
56
30
  }
57
- function wholeNumber(value, source, minimum, maximum) {
58
- const parsed = Number(value);
59
- if (!/^\d+$/.test(value) || parsed < minimum || parsed > maximum) {
60
- throw new RelaySettingsError(`${described(source)} must be a whole number from ${minimum} to ${maximum}, not "${value}"`);
61
- }
62
- return parsed;
63
- }
64
31
  /** The token from the variable, or from a file only its owner can read; never both, never from a flag. */
65
32
  function createToken(environment) {
66
33
  const inline = environment['PAIRLOBBY_CREATE_TOKEN'] || undefined;
@@ -101,28 +68,11 @@ export function relaySettings(flags, environment) {
101
68
  throw new RelaySettingsError(`PAIRLOBBY_ALLOWED_HOSTS takes Host values such as relay.internal or relay.internal:8790, not "${value}"`);
102
69
  }
103
70
  }
104
- const limits = {};
105
- for (const [key, variable] of Object.entries(LIMIT_VARIABLES)) {
106
- const value = environment[variable]?.trim();
107
- if (value) {
108
- limits[key] = wholeNumber(value, { variable }, 1, 1_000_000);
109
- }
110
- }
111
- const roomLimits = {};
112
- for (const { key, variable, minimum, maximum, unitBytes } of ROOM_LIMIT_VARIABLES) {
113
- const value = environment[variable]?.trim();
114
- if (value) {
115
- roomLimits[key] = wholeNumber(value, { variable }, minimum, maximum) * unitBytes;
116
- }
117
- }
71
+ const { limits, roomLimits, receiptMode } = relayPolicySettings(environment);
118
72
  const requestLog = pick(flags.requestLog, environment, 'PAIRLOBBY_REQUEST_LOG');
119
73
  if (requestLog !== undefined && !['all', 'writes', 'off'].includes(requestLog)) {
120
74
  throw new RelaySettingsError(`${described({ flag: 'request-log', variable: 'PAIRLOBBY_REQUEST_LOG' })} must be all, writes or off, not "${requestLog}"`);
121
75
  }
122
- const receiptMode = environment['PAIRLOBBY_RECEIPT_MODE']?.trim() || undefined;
123
- if (receiptMode !== undefined && !RECEIPT_MODES.includes(receiptMode)) {
124
- throw new RelaySettingsError(`PAIRLOBBY_RECEIPT_MODE must be events, both or watermark, not "${receiptMode}"`);
125
- }
126
76
  const token = createToken(environment);
127
77
  const backup = backupSettings(flags, environment);
128
78
  const membersFile = environment['PAIRLOBBY_MEMBERS_FILE']?.trim() || undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
@@ -1,60 +1,11 @@
1
- import type { HandoverRecord, InviteRecord, LocalRoom, MessageRequest, ParticipantRecord, RequestPage, RoomEvent, RoomRecord } from '@pairlobby/protocol';
2
- import type { Mutation, RoomView } from '@pairlobby/room-core';
3
- import type { DirectoryStore, EventPage, FileStore, IdempotencyRecord, RoomStore } from '@pairlobby/server-core';
4
- type IdempotencyKey = {
5
- key: string;
6
- requestDigest: string;
7
- } | null;
8
- export declare class SqliteRoomStore implements RoomStore {
9
- private readonly db;
10
- readonly files: FileStore;
11
- /** The agent directory, in the same database as the rooms its listings point into. */
12
- readonly directory: DirectoryStore;
13
- constructor(location: string);
1
+ import { SqliteStore } from '@pairlobby/sqlite';
2
+ import type { SqliteStoreOptions } from '@pairlobby/sqlite';
3
+ /** The Node adapter owns its connection, transaction lifetime and online backup. SQL behavior is shared with Durable Objects. */
4
+ export declare class SqliteRoomStore extends SqliteStore {
5
+ private readonly database;
6
+ constructor(location: string, options?: SqliteStoreOptions);
14
7
  close(): void;
15
- /** Rows this store has changed since it opened, so a backup can tell nothing happened. */
16
8
  changeCount(): number;
17
- /** A consistent copy at `destination`, taken a few pages at a time so requests keep being served. */
18
9
  snapshot(destination: string): Promise<void>;
19
- private transaction;
20
- createRoom(room: RoomRecord, participant: ParticipantRecord, event: RoomEvent): Promise<void>;
21
- loadRoom(roomId: string): Promise<RoomView | null>;
22
- apply(mutation: Mutation, idempotency: IdempotencyKey): Promise<void>;
23
- readEvents(roomId: string, after: number, limit: number): Promise<EventPage>;
24
- eventBySeq(roomId: string, seq: number): Promise<RoomEvent | null>;
25
- eventById(roomId: string, eventId: string): Promise<RoomEvent | null>;
26
- idempotencyRecord(roomId: string, key: string): Promise<IdempotencyRecord | null>;
27
- putInvite(invite: InviteRecord): Promise<void>;
28
- inviteByDigest(digest: string): Promise<InviteRecord | null>;
29
- /** Open, unexpired rooms that can be joined by name, public or protected: those named `name`, ignoring case, or without a name the newest 50. */
30
- localJoinRooms(name?: string, now?: number): LocalRoom[];
31
- /** Whether any invite digest starts with this lowercase hex prefix; a range over the primary key, not a scan. */
32
- hasInviteDigestPrefix(prefix: string): boolean;
33
- /**
34
- * The conditional UPDATE is the whole point: a second attempt matches no row
35
- * and gets null, rather than racing the first into membership creation.
36
- */
37
- reserveInvite(digest: string, attemptId: string, credentialHash: string, expectedOccupantId: string | null): Promise<InviteRecord | null>;
38
- completeInvite(digest: string, participantId: string): Promise<void>;
39
- participantByCredential(roomId: string, credentialHash: string): Promise<ParticipantRecord | null>;
40
- handovers(roomId: string): Promise<HandoverRecord[]>;
41
- messageRequest(roomId: string, eventId: string): Promise<MessageRequest | null>;
42
- groupRequests(roomId: string, conversationId: string): Promise<MessageRequest[]>;
43
- private checkTurnRevision;
44
- updateTurns(room: RoomRecord, requests: MessageRequest[], expectedRevision: number): Promise<void>;
45
- messageRequests(roomId: string, after: number, limit: number, recipientId?: string): Promise<RequestPage>;
46
- unreceivedRequests(roomId: string, recipientId: string, after: number, limit: number): Promise<RequestPage>;
47
- private writeRequest;
48
- setLifecycle(roomId: string, lifecycle: RoomRecord['lifecycle']): Promise<void>;
49
- /** Physical cleanup. Access was already denied by the lifecycle change. */
50
- deleteRoom(roomId: string): Promise<void>;
51
- dueAutoCloses(now: number, limit: number): Promise<string[]>;
52
- nextAutoCloseAt(): Promise<number | null>;
53
- /** Simulates retention dropping the front of the log without touching room state. */
54
- dropHistoryBefore(roomId: string, seq: number): void;
55
- private writeParticipant;
56
- private writeEvent;
57
- private rows;
58
10
  }
59
- export {};
60
11
  //# sourceMappingURL=sqlite-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite-store.d.ts","sourceRoot":"","sources":["../src/sqlite-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sqlite-store.d.ts","sourceRoot":"","sources":["../src/sqlite-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,EAAwB,kBAAkB,EAAC,MAAM,mBAAmB,CAAC;AAqBjF,iIAAiI;AACjI,qBAAa,eAAgB,SAAQ,WAAW;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;gBAE5B,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB;IAmB9D,KAAK,IAAI,IAAI;IAIb,WAAW,IAAI,MAAM;IAIf,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAOrD"}
@@ -1,367 +1,57 @@
1
- //! A `RoomStore` on `node:sqlite`. Every mutation lands inside one immediate
2
- //! transaction: the JavaScript event loop is not a substitute for SQL isolation
3
- //! once two requests interleave around an await.
4
- import { ProtocolError, mergeMessageRequest } from '@pairlobby/protocol';
5
1
  import * as sqlite from 'node:sqlite';
6
2
  import { DatabaseSync } from 'node:sqlite';
7
- import { REQUEST_BACKFILL_SQL } from '@pairlobby/server-core';
8
- import { SCHEMA, SCHEMA_VERSION } from './schema.js';
9
- /** Small enough for any SQLite-backed store, including ones that cap a single value. */
10
- const FILE_CHUNK_BYTES = 1024 * 1024;
11
- export class SqliteRoomStore {
12
- db;
13
- files = {
14
- putFile: async (file, bytes, limitBytes) => this.transaction(() => {
15
- const held = this.db.prepare('SELECT coalesce(sum(size), 0) AS total FROM files WHERE room_id = ?').get(file.roomId);
16
- if (Number(held.total) + file.size > limitBytes) {
17
- return false;
18
- }
19
- this.db.prepare('INSERT INTO files (file_id, room_id, size, created_at, event_id, body) VALUES (?, ?, ?, ?, ?, ?)').run(file.fileId, file.roomId, file.size, file.createdAt, file.eventId, JSON.stringify(file));
20
- const insert = this.db.prepare('INSERT INTO file_chunks (file_id, idx, bytes) VALUES (?, ?, ?)');
21
- for (let offset = 0, index = 0; offset < bytes.byteLength; offset += FILE_CHUNK_BYTES, index++) {
22
- insert.run(file.fileId, index, bytes.subarray(offset, offset + FILE_CHUNK_BYTES));
23
- }
24
- return true;
25
- }),
26
- file: async (roomId, fileId) => {
27
- const row = this.db.prepare('SELECT body FROM files WHERE room_id = ? AND file_id = ?').get(roomId, fileId);
28
- return row ? JSON.parse(row.body) : null;
29
- },
30
- fileBytes: async (roomId, fileId) => {
31
- const file = this.db.prepare('SELECT size FROM files WHERE room_id = ? AND file_id = ?').get(roomId, fileId);
32
- if (!file) {
33
- return null;
34
- }
35
- const bytes = new Uint8Array(Number(file.size));
36
- let offset = 0;
37
- for (const chunk of this.db.prepare('SELECT bytes FROM file_chunks WHERE file_id = ? ORDER BY idx').all(fileId)) {
38
- bytes.set(chunk.bytes, offset);
39
- offset += chunk.bytes.byteLength;
40
- }
41
- return offset === bytes.byteLength ? bytes : null;
42
- },
43
- attachedFiles: async (roomId) => this.db.prepare('SELECT body FROM files WHERE room_id = ? AND event_id IS NOT NULL ORDER BY created_at, file_id').all(roomId).map((row) => JSON.parse(row.body)),
44
- usedBytes: async (roomId) => Number(this.db.prepare('SELECT coalesce(sum(size), 0) AS total FROM files WHERE room_id = ?').get(roomId).total),
45
- deleteUnattachedFiles: async (roomId, before) => this.transaction(() => {
46
- this.db.prepare('DELETE FROM file_chunks WHERE file_id IN (SELECT file_id FROM files WHERE room_id = ? AND event_id IS NULL AND created_at < ?)').run(roomId, before);
47
- this.db.prepare('DELETE FROM files WHERE room_id = ? AND event_id IS NULL AND created_at < ?').run(roomId, before);
48
- }),
49
- };
50
- /** The agent directory, in the same database as the rooms its listings point into. */
51
- directory = {
52
- putListing: async (listing) => {
53
- this.db.prepare('INSERT INTO listings (listing_id, room_id, participant_id, owner, body) VALUES (?, ?, ?, ?, ?) ON CONFLICT (listing_id) DO UPDATE SET owner = excluded.owner, body = excluded.body').run(listing.listingId, listing.roomId, listing.participantId, listing.owner, JSON.stringify(listing));
54
- },
55
- listing: async (listingId) => {
56
- const row = this.db.prepare('SELECT body FROM listings WHERE listing_id = ?').get(listingId);
57
- return row ? JSON.parse(row.body) : null;
58
- },
59
- listingFor: async (roomId, participantId) => {
60
- const row = this.db.prepare('SELECT body FROM listings WHERE room_id = ? AND participant_id = ?').get(roomId, participantId);
61
- return row ? JSON.parse(row.body) : null;
62
- },
63
- deleteListing: async (listingId) => {
64
- this.db.prepare('DELETE FROM listings WHERE listing_id = ?').run(listingId);
65
- },
66
- ownerListings: async (owner) => this.db.prepare('SELECT body FROM listings WHERE owner = ? ORDER BY listing_id').all(owner).map((row) => JSON.parse(row.body)),
67
- listings: async (after, limit) => this.db.prepare('SELECT body FROM listings WHERE listing_id > ? ORDER BY listing_id LIMIT ?').all(after, limit).map((row) => JSON.parse(row.body)),
68
- lastMessageAt: async (roomId, participantId) => {
69
- const row = this.db.prepare("SELECT json_extract(body, '$.at') AS at FROM events WHERE room_id = ? AND json_extract(body, '$.senderId') = ? AND json_extract(body, '$.type') = 'message' ORDER BY seq DESC LIMIT 1").get(roomId, participantId);
70
- return row ? Number(row.at) : null;
71
- },
72
- memberDefault: async (handle) => {
73
- const row = this.db.prepare('SELECT body FROM member_defaults WHERE handle = ?').get(handle);
74
- return row ? JSON.parse(row.body) : null;
75
- },
76
- setMemberDefault: async (handle, visibility) => {
77
- this.db.prepare('INSERT INTO member_defaults (handle, body) VALUES (?, ?) ON CONFLICT (handle) DO UPDATE SET body = excluded.body').run(handle, JSON.stringify(visibility));
78
- },
79
- };
80
- constructor(location) {
81
- this.db = new DatabaseSync(location);
82
- this.db.exec('PRAGMA journal_mode = WAL');
83
- this.db.exec('PRAGMA foreign_keys = ON');
84
- this.db.exec('PRAGMA busy_timeout = 5000');
85
- this.db.exec(SCHEMA);
86
- if (!this.db.prepare("SELECT value FROM meta WHERE key='message_requests_v1'").get()) {
87
- this.transaction(() => this.db.exec(REQUEST_BACKFILL_SQL));
3
+ import { SqliteStore } from '@pairlobby/sqlite';
4
+ function bind(value) {
5
+ return value instanceof ArrayBuffer ? new Uint8Array(value) : value;
6
+ }
7
+ function driver(database) {
8
+ return {
9
+ exec: (query) => database.exec(query),
10
+ prepare(query) {
11
+ const statement = database.prepare(query);
12
+ return {
13
+ run: (...values) => statement.run(...values.map(bind)),
14
+ get: (...values) => statement.get(...values.map(bind)),
15
+ all: (...values) => statement.all(...values.map(bind)),
16
+ iterate: (...values) => statement.iterate(...values.map(bind))
17
+ };
88
18
  }
89
- this.db.prepare('INSERT INTO meta (key, value) VALUES (?, ?) ON CONFLICT (key) DO NOTHING').run('schema_version', String(SCHEMA_VERSION));
19
+ };
20
+ }
21
+ /** The Node adapter owns its connection, transaction lifetime and online backup. SQL behavior is shared with Durable Objects. */
22
+ export class SqliteRoomStore extends SqliteStore {
23
+ database;
24
+ constructor(location, options = {}) {
25
+ const database = new DatabaseSync(location);
26
+ database.exec('PRAGMA journal_mode = WAL');
27
+ database.exec('PRAGMA foreign_keys = ON');
28
+ database.exec('PRAGMA busy_timeout = 5000');
29
+ super(driver(database), (action) => {
30
+ database.exec('BEGIN IMMEDIATE');
31
+ try {
32
+ const result = action();
33
+ database.exec('COMMIT');
34
+ return result;
35
+ }
36
+ catch (error) {
37
+ database.exec('ROLLBACK');
38
+ throw error;
39
+ }
40
+ }, options);
41
+ this.database = database;
90
42
  }
91
43
  close() {
92
- this.db.close();
44
+ this.database.close();
93
45
  }
94
- /** Rows this store has changed since it opened, so a backup can tell nothing happened. */
95
46
  changeCount() {
96
- return Number(this.db.prepare('SELECT total_changes() AS changes').get().changes);
47
+ return Number(this.database.prepare('SELECT total_changes() AS changes').get()['changes']);
97
48
  }
98
- /** A consistent copy at `destination`, taken a few pages at a time so requests keep being served. */
99
49
  async snapshot(destination) {
100
- // `backup` arrived in Node 22.16; older 22s block for the whole copy instead.
101
50
  if (typeof sqlite.backup === 'function') {
102
- await sqlite.backup(this.db, destination, { rate: 100 });
51
+ await sqlite.backup(this.database, destination, { rate: 100 });
103
52
  return;
104
53
  }
105
- this.db.prepare('VACUUM INTO ?').run(destination);
106
- }
107
- transaction(run) {
108
- this.db.exec('BEGIN IMMEDIATE');
109
- try {
110
- const result = run();
111
- this.db.exec('COMMIT');
112
- return result;
113
- }
114
- catch (error) {
115
- this.db.exec('ROLLBACK');
116
- throw error;
117
- }
118
- }
119
- async createRoom(room, participant, event) {
120
- this.transaction(() => {
121
- this.db.prepare('INSERT INTO rooms (room_id, earliest_seq, body) VALUES (?, 1, ?)').run(room.roomId, JSON.stringify(room));
122
- this.writeParticipant(participant);
123
- this.writeEvent(event);
124
- });
125
- }
126
- async loadRoom(roomId) {
127
- const row = this.db.prepare('SELECT earliest_seq, body FROM rooms WHERE room_id = ?').get(roomId);
128
- if (!row) {
129
- return null;
130
- }
131
- return {
132
- room: JSON.parse(row.body),
133
- participants: this.rows('SELECT body FROM participants WHERE room_id = ? ORDER BY participant_id', roomId),
134
- handovers: this.rows('SELECT body FROM handovers WHERE room_id = ? ORDER BY handover_id', roomId),
135
- controls: this.rows('SELECT body FROM controls WHERE room_id = ? ORDER BY target_participant_id', roomId),
136
- earliestSeq: row.earliest_seq
137
- };
138
- }
139
- async apply(mutation, idempotency) {
140
- this.transaction(() => {
141
- if (mutation.expectedTurnRevision !== undefined) {
142
- this.checkTurnRevision(mutation.room, mutation.expectedTurnRevision);
143
- }
144
- const current = this.db.prepare('SELECT body FROM rooms WHERE room_id=?').get(mutation.room.roomId);
145
- if (!current || JSON.parse(current.body).nextSeq !== mutation.appendEvent.seq) {
146
- throw new ProtocolError(mutation.expectedTurnRevision === undefined ? 'server_unavailable' : 'turn_conflict', 'concurrent room mutation; retry with the same idempotency key');
147
- }
148
- this.db.prepare('UPDATE rooms SET body = ? WHERE room_id = ?').run(JSON.stringify(mutation.room), mutation.room.roomId);
149
- for (const participant of mutation.upsertParticipants)
150
- this.writeParticipant(participant);
151
- for (const handover of mutation.upsertHandovers) {
152
- this.db
153
- .prepare('INSERT INTO handovers (handover_id, room_id, body) VALUES (?, ?, ?) ON CONFLICT (handover_id) DO UPDATE SET body = excluded.body')
154
- .run(handover.handoverId, handover.roomId, JSON.stringify(handover));
155
- }
156
- for (const control of mutation.upsertControls) {
157
- this.db
158
- .prepare('INSERT INTO controls (room_id, target_participant_id, body) VALUES (?, ?, ?) ON CONFLICT (room_id, target_participant_id) DO UPDATE SET body = excluded.body')
159
- .run(control.roomId, control.targetParticipantId, JSON.stringify(control));
160
- }
161
- for (const request of mutation.upsertRequests ?? [])
162
- this.writeRequest(request);
163
- for (const fileId of mutation.attachFiles ?? []) {
164
- const row = this.db.prepare('SELECT body FROM files WHERE room_id = ? AND file_id = ? AND event_id IS NULL').get(mutation.room.roomId, fileId);
165
- if (!row) {
166
- throw new ProtocolError('invalid_request', 'an attached file is no longer available; upload it again');
167
- }
168
- const file = { ...JSON.parse(row.body), eventId: mutation.appendEvent.eventId };
169
- this.db.prepare('UPDATE files SET event_id = ?, body = ? WHERE file_id = ?').run(file.eventId, JSON.stringify(file), fileId);
170
- }
171
- this.writeEvent(mutation.appendEvent);
172
- if (idempotency) {
173
- this.db
174
- .prepare('INSERT INTO idempotency (room_id, key, request_digest, seq) VALUES (?, ?, ?, ?)')
175
- .run(mutation.room.roomId, idempotency.key, idempotency.requestDigest, mutation.appendEvent.seq);
176
- }
177
- });
178
- }
179
- async readEvents(roomId, after, limit) {
180
- const rows = this.db.prepare('SELECT body FROM events WHERE room_id = ? AND seq > ? ORDER BY seq LIMIT ?').all(roomId, after, limit + 1);
181
- const events = rows.slice(0, limit).map((row) => JSON.parse(row.body));
182
- return { events, hasMore: rows.length > limit };
183
- }
184
- async eventBySeq(roomId, seq) {
185
- const row = this.db.prepare('SELECT body FROM events WHERE room_id = ? AND seq = ?').get(roomId, seq);
186
- return row ? JSON.parse(row.body) : null;
187
- }
188
- async eventById(roomId, eventId) {
189
- const row = this.db.prepare("SELECT body FROM events WHERE room_id = ? AND json_extract(body, '$.eventId') = ?").get(roomId, eventId);
190
- return row ? JSON.parse(row.body) : null;
191
- }
192
- async idempotencyRecord(roomId, key) {
193
- const row = this.db.prepare('SELECT request_digest, seq FROM idempotency WHERE room_id = ? AND key = ?').get(roomId, key);
194
- return row ? { requestDigest: row.request_digest, seq: row.seq } : null;
195
- }
196
- async putInvite(invite) {
197
- this.db
198
- .prepare('INSERT INTO invites (digest, room_id, state, bound_attempt_id, body) VALUES (?, ?, ?, ?, ?)')
199
- .run(invite.digest, invite.roomId, invite.state, invite.boundAttemptId, JSON.stringify(invite));
200
- }
201
- async inviteByDigest(digest) {
202
- const row = this.db.prepare('SELECT body FROM invites WHERE digest = ?').get(digest);
203
- return row ? JSON.parse(row.body) : null;
204
- }
205
- /** Open, unexpired rooms that can be joined by name, public or protected: those named `name`, ignoring case, or without a name the newest 50. */
206
- localJoinRooms(name, now = Date.now()) {
207
- const open = "SELECT room_id, body FROM rooms WHERE (json_extract(body, '$.policy.localJoin') = 1 OR json_extract(body, '$.policy.type') = 'protected') AND json_extract(body, '$.lifecycle') = 'open'";
208
- const rows = (name === undefined
209
- ? this.db.prepare(`${open} ORDER BY json_extract(body, '$.createdAt') DESC LIMIT 50`).all()
210
- : this.db.prepare(`${open} AND lower(json_extract(body, '$.name')) = lower(?)`).all(name));
211
- const count = this.db.prepare("SELECT count(*) AS active FROM participants WHERE room_id = ? AND json_extract(body, '$.revokedAt') IS NULL AND json_extract(body, '$.leftAt') IS NULL");
212
- return rows.map((row) => JSON.parse(row.body)).filter((room) => room.expiresAt === null || room.expiresAt > now).map((room) => ({ roomId: room.roomId, name: room.name, createdAt: room.createdAt, participantCount: Number(count.get(room.roomId).active), type: room.policy.localJoin ? 'public' : 'protected' }));
213
- }
214
- /** Whether any invite digest starts with this lowercase hex prefix; a range over the primary key, not a scan. */
215
- hasInviteDigestPrefix(prefix) {
216
- return this.db.prepare('SELECT 1 FROM invites WHERE digest >= ? AND digest < ? LIMIT 1').get(prefix, `${prefix}g`) !== undefined;
217
- }
218
- /**
219
- * The conditional UPDATE is the whole point: a second attempt matches no row
220
- * and gets null, rather than racing the first into membership creation.
221
- */
222
- async reserveInvite(digest, attemptId, credentialHash, expectedOccupantId) {
223
- return this.transaction(() => {
224
- const row = this.db.prepare('SELECT body FROM invites WHERE digest = ?').get(digest);
225
- if (!row) {
226
- return null;
227
- }
228
- const invite = JSON.parse(row.body);
229
- if (invite.boundAttemptId === attemptId) {
230
- return invite;
231
- }
232
- if (invite.state === 'reserved') {
233
- return null;
234
- }
235
- if (invite.state === 'redeemed') {
236
- if (!invite.reusable) {
237
- return null;
238
- }
239
- if (invite.redeemedParticipantId !== expectedOccupantId) {
240
- return null;
241
- }
242
- }
243
- else if (expectedOccupantId !== null) {
244
- return null;
245
- }
246
- const reserved = { ...invite, state: 'reserved', boundAttemptId: attemptId, boundCredentialHash: credentialHash };
247
- // The WHERE clause repeats the precondition so a concurrent writer that
248
- // slipped in between the read and this update loses rather than overwrites.
249
- const previous = invite.state === 'redeemed' ? invite.redeemedParticipantId : null;
250
- const result = previous === null ? this.db.prepare("UPDATE invites SET state = 'reserved', bound_attempt_id = ?, body = ? WHERE digest = ? AND state = 'unused'").run(attemptId, JSON.stringify(reserved), digest) : this.db.prepare("UPDATE invites SET state = 'reserved', bound_attempt_id = ?, body = ? WHERE digest = ? AND state = 'redeemed' AND json_extract(body, '$.redeemedParticipantId') = ?").run(attemptId, JSON.stringify(reserved), digest, previous);
251
- return result.changes === 1 ? reserved : null;
252
- });
253
- }
254
- async completeInvite(digest, participantId) {
255
- this.transaction(() => {
256
- const row = this.db.prepare('SELECT body FROM invites WHERE digest = ?').get(digest);
257
- if (!row) {
258
- return;
259
- }
260
- const invite = { ...JSON.parse(row.body), state: 'redeemed', redeemedParticipantId: participantId };
261
- this.db.prepare("UPDATE invites SET state = 'redeemed', body = ? WHERE digest = ?").run(JSON.stringify(invite), digest);
262
- });
263
- }
264
- async participantByCredential(roomId, credentialHash) {
265
- const row = this.db.prepare('SELECT body FROM participants WHERE room_id = ? AND credential_hash = ?').get(roomId, credentialHash);
266
- return row ? JSON.parse(row.body) : null;
267
- }
268
- async handovers(roomId) {
269
- return this.rows('SELECT body FROM handovers WHERE room_id = ? ORDER BY handover_id', roomId);
270
- }
271
- async messageRequest(roomId, eventId) {
272
- const row = this.db.prepare('SELECT body FROM message_requests WHERE room_id=? AND event_id=?').get(roomId, eventId);
273
- return row ? JSON.parse(row.body) : null;
274
- }
275
- async groupRequests(roomId, conversationId) {
276
- const rows = this.db.prepare("SELECT body FROM message_requests WHERE room_id=? AND json_extract(body,'$.conversationId')=? ORDER BY seq").all(roomId, conversationId);
277
- return rows.map((row) => JSON.parse(row.body));
278
- }
279
- checkTurnRevision(room, expected) {
280
- const row = this.db.prepare('SELECT body FROM rooms WHERE room_id=?').get(room.roomId);
281
- if (!row || (JSON.parse(row.body).turnRevision ?? 0) !== expected) {
282
- throw new ProtocolError('turn_conflict', 'the room turn changed; retry');
283
- }
284
- }
285
- async updateTurns(room, requests, expectedRevision) {
286
- this.transaction(() => {
287
- this.checkTurnRevision(room, expectedRevision);
288
- const current = this.db.prepare('SELECT body FROM rooms WHERE room_id=?').get(room.roomId);
289
- if (!current || JSON.parse(current.body).nextSeq !== room.nextSeq) {
290
- throw new ProtocolError('turn_conflict', 'the room changed while renewing the turn');
291
- }
292
- this.db.prepare('UPDATE rooms SET body=? WHERE room_id=?').run(JSON.stringify(room), room.roomId);
293
- for (const request of requests) {
294
- this.writeRequest(request);
295
- }
296
- });
297
- }
298
- async messageRequests(roomId, after, limit, recipientId) {
299
- const rows = this.db
300
- .prepare("SELECT body FROM message_requests WHERE room_id=? AND seq>? AND requires_reply=1 AND response_event_id IS NULL AND (? IS NULL OR json_extract(body,'$.to')=?) ORDER BY seq LIMIT ?")
301
- .all(roomId, after, recipientId ?? null, recipientId ?? null, limit + 1);
302
- return { requests: rows.slice(0, limit).map((row) => JSON.parse(row.body)), hasMore: rows.length > limit };
303
- }
304
- async unreceivedRequests(roomId, recipientId, after, limit) {
305
- const rows = this.db
306
- .prepare("SELECT body FROM message_requests WHERE room_id=? AND seq>? AND received_at IS NULL AND json_extract(body,'$.to')=? ORDER BY seq LIMIT ?")
307
- .all(roomId, after, recipientId, limit + 1);
308
- return { requests: rows.slice(0, limit).map((row) => JSON.parse(row.body)), hasMore: rows.length > limit };
309
- }
310
- writeRequest(request) {
311
- // Keep concurrent receipt/progress writes from erasing an accepted reply.
312
- const old = this.db.prepare('SELECT body FROM message_requests WHERE event_id=?').get(request.eventId);
313
- const previous = old ? JSON.parse(old.body) : null;
314
- const merged = mergeMessageRequest(previous, request);
315
- this.db
316
- .prepare('INSERT INTO message_requests(event_id,room_id,seq,received_at,response_event_id,requires_reply,body) VALUES(?,?,?,?,?,?,?) ON CONFLICT(event_id) DO UPDATE SET received_at=excluded.received_at,response_event_id=excluded.response_event_id,requires_reply=excluded.requires_reply,body=excluded.body')
317
- .run(merged.eventId, merged.roomId, merged.seq, merged.receivedAt, merged.responseEventId, merged.requiresReply ? 1 : 0, JSON.stringify(merged));
318
- }
319
- async setLifecycle(roomId, lifecycle) {
320
- this.transaction(() => {
321
- const row = this.db.prepare('SELECT body FROM rooms WHERE room_id = ?').get(roomId);
322
- if (!row) {
323
- return;
324
- }
325
- const room = { ...JSON.parse(row.body), lifecycle };
326
- this.db.prepare('UPDATE rooms SET body = ? WHERE room_id = ?').run(JSON.stringify(room), roomId);
327
- });
328
- }
329
- /** Physical cleanup. Access was already denied by the lifecycle change. */
330
- async deleteRoom(roomId) {
331
- this.transaction(() => {
332
- this.db.prepare('DELETE FROM file_chunks WHERE file_id IN (SELECT file_id FROM files WHERE room_id = ?)').run(roomId);
333
- for (const table of ['files', 'message_requests', 'events', 'idempotency', 'handovers', 'controls', 'invites', 'participants', 'listings']) {
334
- this.db.prepare(`DELETE FROM ${table} WHERE room_id = ?`).run(roomId);
335
- }
336
- });
337
- }
338
- async dueAutoCloses(now, limit) {
339
- const rows = this.db
340
- .prepare("SELECT room_id FROM rooms WHERE json_extract(body, '$.lifecycle') = 'open' AND json_extract(body, '$.autoCloseAt') IS NOT NULL AND json_extract(body, '$.autoCloseAt') <= ? ORDER BY json_extract(body, '$.autoCloseAt') LIMIT ?")
341
- .all(now, limit);
342
- return rows.map((row) => row.room_id);
343
- }
344
- async nextAutoCloseAt() {
345
- const row = this.db.prepare("SELECT min(json_extract(body, '$.autoCloseAt')) AS at FROM rooms WHERE json_extract(body, '$.lifecycle') = 'open' AND json_extract(body, '$.autoCloseAt') IS NOT NULL").get();
346
- return row.at;
347
- }
348
- /** Simulates retention dropping the front of the log without touching room state. */
349
- dropHistoryBefore(roomId, seq) {
350
- this.transaction(() => {
351
- this.db.prepare('DELETE FROM events WHERE room_id = ? AND seq < ?').run(roomId, seq);
352
- this.db.prepare('UPDATE rooms SET earliest_seq = ? WHERE room_id = ?').run(seq, roomId);
353
- });
354
- }
355
- writeParticipant(participant) {
356
- this.db
357
- .prepare('INSERT INTO participants (participant_id, room_id, credential_hash, body) VALUES (?, ?, ?, ?) ON CONFLICT (participant_id) DO UPDATE SET body = excluded.body')
358
- .run(participant.participantId, participant.roomId, participant.credentialHash, JSON.stringify(participant));
359
- }
360
- writeEvent(event) {
361
- this.db.prepare('INSERT INTO events (room_id, seq, body) VALUES (?, ?, ?)').run(event.roomId, event.seq, JSON.stringify(event));
362
- }
363
- rows(sql, roomId) {
364
- return this.db.prepare(sql).all(roomId).map((row) => JSON.parse(row.body));
54
+ this.database.prepare('VACUUM INTO ?').run(destination);
365
55
  }
366
56
  }
367
57
  //# sourceMappingURL=sqlite-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite-store.js","sourceRoot":"","sources":["../src/sqlite-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sqlite-store.js","sourceRoot":"","sources":["../src/sqlite-store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pairlobby/local-server",
3
- "version": "0.31.0",
3
+ "version": "0.33.0",
4
4
  "description": "PairLobby local-server: part of the PairLobby room protocol and relay",
5
5
  "license": "Elastic-2.0",
6
6
  "type": "module",
@@ -37,9 +37,10 @@
37
37
  "access": "public"
38
38
  },
39
39
  "dependencies": {
40
- "@pairlobby/protocol": "0.31.0",
41
- "@pairlobby/room-core": "0.31.0",
42
- "@pairlobby/server-core": "0.31.0",
43
- "multicast-dns": "7.2.5"
40
+ "@pairlobby/protocol": "0.33.0",
41
+ "@pairlobby/room-core": "0.33.0",
42
+ "@pairlobby/server-core": "0.33.0",
43
+ "multicast-dns": "7.2.5",
44
+ "@pairlobby/sqlite": "0.33.0"
44
45
  }
45
46
  }