@adonis-agora/collaboration 0.19.0 → 0.19.1

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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @adonis-agora/collaboration
2
2
 
3
+ ## 0.19.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#135](https://github.com/DavideCarvalho/adonis-agora-collaboration/pull/135) [`718d1cc`](https://github.com/DavideCarvalho/adonis-agora-collaboration/commit/718d1cce9bfd30f2c1f3bc77603a9bd6d230915e) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - Automerge: clients and server exchange change chunks instead of whole documents. `useAutomergeDoc` asks for them with `?sync=changes`; the server acknowledges with a text frame and from then on both sides send only the changes the other lacks. Sockets that do not ask (older clients) keep sending and receiving whole documents, and a new client against an older server keeps sending whole documents, so mixed versions keep working in the same room. The server applies both shapes with `A.loadIncremental` and never forwards a payload that adds nothing.
8
+
9
+ Automerge rooms are now saved and dropped from memory when their last client leaves, `close()` writes pending saves instead of cancelling them (and no longer hangs while sockets are open), and a document edited without pause is saved at least every 10 seconds.
10
+
11
+ A socket whose presence join fails, or that closes while the join is in flight, is now taken out of its room (which can then be dropped) and its possibly half-written roster entry is removed, unless the user still has another tab on the document.
12
+
13
+ - [#135](https://github.com/DavideCarvalho/adonis-agora-collaboration/pull/135) [`718d1cc`](https://github.com/DavideCarvalho/adonis-agora-collaboration/commit/718d1cce9bfd30f2c1f3bc77603a9bd6d230915e) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - Presence: each roster entry now expires on its own 60-second TTL, and every live instance re-stamps the members it holds every 20 seconds, so the users of a crashed instance drop out even on a document other instances keep busy. The stored member format is unchanged. The Yjs driver no longer scans every open socket on each disconnect, and the Automerge driver no longer scans the room's sockets when one closes: both keep a socket count per user per document.
14
+
3
15
  ## 0.19.0
4
16
 
5
17
  ### Minor Changes
@@ -1,12 +1,16 @@
1
1
  import type { CollaborationDriver, SelfHostedDriverOptions } from '../../driver.js';
2
2
  import type { CollabDiffSummary, CollabVersion, ListPageOptions } from '../../types.js';
3
+ /** Text frame confirming that this socket exchanges change chunks. */
4
+ export declare const CHANGES_ACK = "automerge-sync:changes";
3
5
  export declare class AutomergeDriver implements CollaborationDriver {
4
6
  readonly engine = "automerge";
5
7
  private rooms;
6
8
  private wss?;
7
9
  private readonly options;
8
10
  private readonly storage;
9
- private persistTimers;
11
+ private pendingSaves;
12
+ /** Saves being written, by document name; a room is not dropped under one. */
13
+ private savesInFlight;
10
14
  /**
11
15
  * Rooms being opened, by document name.
12
16
  *
@@ -32,10 +36,46 @@ export declare class AutomergeDriver implements CollaborationDriver {
32
36
  * than a document worth guessing at.
33
37
  */
34
38
  private seedDocument;
39
+ /**
40
+ * Sends everything the room gained since `since` to every client but the
41
+ * sender: the change chunk to sockets that speak chunks, a whole document
42
+ * (`wholeDoc`, else `A.save` of the room) to the rest. Each shape is
43
+ * encoded at most once per call.
44
+ */
35
45
  private broadcast;
46
+ /** Runs `fn` on the room, dropping it afterwards if nobody else uses it. */
47
+ private withRoom;
48
+ /**
49
+ * Writes the room's pending save and drops it from memory once nothing
50
+ * uses it: no client, no driver call, no save waiting or being written.
51
+ * A client that joins meanwhile finds the same room in the map.
52
+ */
53
+ private releaseRoom;
36
54
  attach(server: import('node:http').Server): Promise<void>;
55
+ /**
56
+ * Takes `ws` out of the room — and, when `userId` is given, out of that
57
+ * user's socket count, leaving the roster with their last one. Safe to call
58
+ * twice for one socket.
59
+ */
60
+ private removeSocket;
61
+ /** Removes `userId` from the roster unless another of their sockets is still in the room. */
62
+ private leaveIfLast;
63
+ /**
64
+ * Applies a client's whole document or change chunk and forwards only what
65
+ * was new to the room. A payload that adds nothing — a duplicate, or bytes
66
+ * that are not Automerge at all — is neither forwarded nor saved.
67
+ */
37
68
  private handleClientMessage;
38
- private persistDebounced;
69
+ /**
70
+ * Debounced save: each edit postpones it by `debounce`, but never past
71
+ * {@link MAX_PERSIST_WAIT_MS} (or `debounce`, if longer) after the first
72
+ * unsaved edit, so a document edited without pause is still written.
73
+ */
74
+ private schedulePersist;
75
+ /** Writes the pending save of `docName` now, if there is one. */
76
+ private persistNow;
77
+ /** Saves `state`, tracked so the room is not dropped while it is written. */
78
+ private save;
39
79
  getDocumentState(docName: string): Promise<Uint8Array>;
40
80
  getDocumentText(docName: string): Promise<string>;
41
81
  /** Versions = markers over the native history (heads hash). */
@@ -48,6 +88,7 @@ export declare class AutomergeDriver implements CollaborationDriver {
48
88
  * that leaves no entry in it is a restore nobody can undo.
49
89
  */
50
90
  restoreVersion(docName: string, versionId: string, restoredBy: string | null): Promise<void>;
91
+ private restoreRoom;
51
92
  /** Binary state stored for a version (`A.save` of the doc at that point). */
52
93
  getVersionState(docName: string, versionId: string): Promise<Uint8Array>;
53
94
  diffVersions(docName: string, aId: string, bId: string): Promise<CollabDiffSummary>;
@@ -1 +1 @@
1
- {"version":3,"file":"automerge_driver.d.ts","sourceRoot":"","sources":["../../../../src/drivers/automerge/automerge_driver.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAEpF,OAAO,KAAK,EACV,iBAAiB,EAGjB,aAAa,EACb,eAAe,EAChB,MAAM,gBAAgB,CAAC;AA+BxB,qBAAa,eAAgB,YAAW,mBAAmB;IACzD,QAAQ,CAAC,MAAM,eAAe;IAE9B,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,GAAG,CAAC,CAAkB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAC/C,OAAO,CAAC,aAAa,CAAoD;IACzE;;;;;;;;OAQG;IACH,OAAO,CAAC,SAAS,CAAoC;IAErD,YAAY,OAAO,EAAE,uBAAuB,EAG3C;IAED,OAAO,CAAC,QAAQ;YAYF,QAAQ;IAWtB;;;;;;;;;;OAUG;YAEW,YAAY;IA0C1B,OAAO,CAAC,SAAS;IAQX,MAAM,CAAC,MAAM,EAAE,OAAO,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2G9D;YAGa,mBAAmB;IAkBjC,OAAO,CAAC,gBAAgB;IAwBlB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAG3D;IAEK,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAItD;IAED,+DAA+D;IACzD,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,KAAK,EAAE,MAAM,GAAG,IAAI,GACnB,OAAO,CAAC,aAAa,CAAC,CAcxB;IAEK,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAEpF;IAED;;;;;OAKG;IACG,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GAAG,IAAI,GACxB,OAAO,CAAC,IAAI,CAAC,CAgCf;IAED,6EAA6E;IACvE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAI7E;IAEK,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAYxF;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAS3B;CACF"}
1
+ {"version":3,"file":"automerge_driver.d.ts","sourceRoot":"","sources":["../../../../src/drivers/automerge/automerge_driver.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAEpF,OAAO,KAAK,EACV,iBAAiB,EAGjB,aAAa,EACb,eAAe,EAChB,MAAM,gBAAgB,CAAC;AA2BxB,sEAAsE;AACtE,eAAO,MAAM,WAAW,2BAA2B,CAAC;AAgCpD,qBAAa,eAAgB,YAAW,mBAAmB;IACzD,QAAQ,CAAC,MAAM,eAAe;IAE9B,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,GAAG,CAAC,CAAkB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAC/C,OAAO,CAAC,YAAY,CAAkC;IACtD,8EAA8E;IAC9E,OAAO,CAAC,aAAa,CAAoC;IACzD;;;;;;;;OAQG;IACH,OAAO,CAAC,SAAS,CAAoC;IAErD,YAAY,OAAO,EAAE,uBAAuB,EAG3C;IAED,OAAO,CAAC,QAAQ;YAYF,QAAQ;IAgBtB;;;;;;;;;;OAUG;YAEW,YAAY;IA0C1B;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAoBjB,4EAA4E;YAC9D,QAAQ;IAWtB;;;;OAIG;YACW,WAAW;IAQnB,MAAM,CAAC,MAAM,EAAE,OAAO,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsH9D;IAED;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAkBpB,6FAA6F;IAC7F,OAAO,CAAC,WAAW;IAOnB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAoB3B;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAcvB,iEAAiE;YACnD,UAAU;IAQxB,6EAA6E;YAC/D,IAAI;IAmBZ,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAE3D;IAEK,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKtD;IAED,+DAA+D;IACzD,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,KAAK,EAAE,MAAM,GAAG,IAAI,GACnB,OAAO,CAAC,aAAa,CAAC,CAexB;IAEK,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAEpF;IAED;;;;;OAKG;IACG,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GAAG,IAAI,GACxB,OAAO,CAAC,IAAI,CAAC,CAMf;YAEa,WAAW;IA0CzB,6EAA6E;IACvE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAI7E;IAEK,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAYxF;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAa3B;CACF"}
@@ -14,22 +14,39 @@ import { lineDiff, resolveStorage } from '../shared.js';
14
14
  * between versions is already in the doc. `restoreVersion` brings the doc
15
15
  * back to the version's heads via a compensating change (non-destructive).
16
16
  *
17
- * Transport: clients speak Automerge's binary protocol
18
- * (@automerge/automerge-repo-network-websocket on the client). On the server
19
- * we use an in-memory DocHandle + simple per-room broadcast; for horizontal
20
- * scaling, updates are re-broadcast via Redis pub/sub (same philosophy as transmit).
17
+ * Transport: one in-memory doc per room and a per-room broadcast. Every
18
+ * client gets the whole `A.save(doc)` on connect. After that, a socket opened
19
+ * with `?sync=changes` is answered with the {@link CHANGES_ACK} text frame and
20
+ * from then on exchanges change chunks (`A.saveSince`) both ways; any other
21
+ * socket sends and receives whole saved documents. The server applies both
22
+ * shapes with `A.loadIncremental`, so one room can hold both kinds of client.
23
+ *
24
+ * A room lives while it has clients: when the last one leaves, its pending
25
+ * save is written and the room is dropped from memory.
21
26
  */
27
+ /** Query parameter (and value) a client sets to ask for change chunks. */
28
+ const CHANGES_PARAM = 'sync';
29
+ const CHANGES_PARAM_VALUE = 'changes';
30
+ /** Text frame confirming that this socket exchanges change chunks. */
31
+ export const CHANGES_ACK = 'automerge-sync:changes';
32
+ /** Longest a burst of edits can keep postponing its save. */
33
+ const MAX_PERSIST_WAIT_MS = 10_000;
22
34
  /** Connections whose permission denied canWrite — their updates are dropped. */
23
35
  const readOnlyClients = new WeakSet();
24
- /** userId behind each open socket — feeds the presence roster on close. */
25
- const socketUsers = new WeakMap();
36
+ /** Sockets that exchange change chunks instead of whole documents. */
37
+ const changeClients = new WeakSet();
38
+ function sameHeads(a, b) {
39
+ return a.length === b.length && a.every((hash, index) => hash === b[index]);
40
+ }
26
41
  export class AutomergeDriver {
27
42
  engine = 'automerge';
28
43
  rooms = new Map();
29
44
  wss;
30
45
  options;
31
46
  storage;
32
- persistTimers = new Map();
47
+ pendingSaves = new Map();
48
+ /** Saves being written, by document name; a room is not dropped under one. */
49
+ savesInFlight = new Map();
33
50
  /**
34
51
  * Rooms being opened, by document name.
35
52
  *
@@ -60,7 +77,12 @@ export class AutomergeDriver {
60
77
  const doc = stored
61
78
  ? A.load(stored.state)
62
79
  : await this.seedDocument(docName);
63
- const room = { text: doc, clients: new Set() };
80
+ const room = {
81
+ text: doc,
82
+ clients: new Set(),
83
+ users: new Map(),
84
+ holds: 0,
85
+ };
64
86
  this.rooms.set(docName, room);
65
87
  return room;
66
88
  }
@@ -115,13 +137,53 @@ export class AutomergeDriver {
115
137
  }
116
138
  return doc;
117
139
  }
118
- broadcast(room, payload, sender) {
140
+ /**
141
+ * Sends everything the room gained since `since` to every client but the
142
+ * sender: the change chunk to sockets that speak chunks, a whole document
143
+ * (`wholeDoc`, else `A.save` of the room) to the rest. Each shape is
144
+ * encoded at most once per call.
145
+ */
146
+ broadcast(room, since, sender, wholeDoc) {
147
+ let changes;
148
+ let whole = wholeDoc;
119
149
  for (const client of room.clients) {
120
- if (client !== sender && client.readyState === 1) {
121
- client.send(payload);
150
+ if (client === sender || client.readyState !== 1)
151
+ continue;
152
+ if (changeClients.has(client)) {
153
+ changes ??= ANext.saveSince(room.text, since);
154
+ client.send(changes);
155
+ }
156
+ else {
157
+ whole ??= A.save(room.text);
158
+ client.send(whole);
122
159
  }
123
160
  }
124
161
  }
162
+ /** Runs `fn` on the room, dropping it afterwards if nobody else uses it. */
163
+ async withRoom(docName, fn) {
164
+ const room = await this.loadRoom(docName);
165
+ room.holds += 1;
166
+ try {
167
+ return await fn(room);
168
+ }
169
+ finally {
170
+ room.holds -= 1;
171
+ void this.releaseRoom(docName, room);
172
+ }
173
+ }
174
+ /**
175
+ * Writes the room's pending save and drops it from memory once nothing
176
+ * uses it: no client, no driver call, no save waiting or being written.
177
+ * A client that joins meanwhile finds the same room in the map.
178
+ */
179
+ async releaseRoom(docName, room) {
180
+ const idle = () => room.clients.size === 0 && room.holds === 0;
181
+ while (idle() && (this.pendingSaves.has(docName) || this.savesInFlight.has(docName))) {
182
+ await this.persistNow(docName);
183
+ }
184
+ if (idle() && this.rooms.get(docName) === room)
185
+ this.rooms.delete(docName);
186
+ }
125
187
  async attach(server) {
126
188
  const path = this.options.path ?? '/collaboration';
127
189
  const wss = new WebSocketServer({ noServer: true });
@@ -185,16 +247,37 @@ export class AutomergeDriver {
185
247
  ws.close(4003, 'no access');
186
248
  return;
187
249
  }
250
+ let room;
188
251
  try {
189
- const room = await this.loadRoom(docName);
252
+ room = await this.loadRoom(docName);
253
+ const joinedRoom = room;
190
254
  room.clients.add(ws);
191
255
  if (!permission.canWrite)
192
256
  readOnlyClients.add(ws);
257
+ const sendsChanges = url.searchParams.get(CHANGES_PARAM) === CHANGES_PARAM_VALUE;
258
+ if (sendsChanges)
259
+ changeClients.add(ws);
260
+ // Registered before the join, so a socket that closes while the join
261
+ // is in flight still leaves the room.
262
+ let joined = false;
263
+ ws.on('close', () => {
264
+ this.removeSocket(docName, joinedRoom, ws, joined ? ctx.userId : undefined);
265
+ });
193
266
  await this.options.presence?.join(docName, {
194
267
  userId: ctx.userId,
195
268
  ...(ctx.user?.name ? { name: ctx.user.name } : {}),
196
269
  });
197
- // Sends the full state to the new client.
270
+ if (ws.readyState !== ws.OPEN) {
271
+ // Closed during the join: the entry it wrote is owed a leave.
272
+ this.leaveIfLast(docName, joinedRoom, ctx.userId);
273
+ return;
274
+ }
275
+ joined = true;
276
+ room.users.set(ctx.userId, (room.users.get(ctx.userId) ?? 0) + 1);
277
+ // The acknowledgement goes before the state, so the client knows
278
+ // the shape of its first send before it makes it.
279
+ if (sendsChanges)
280
+ ws.send(CHANGES_ACK);
198
281
  ws.send(A.save(room.text));
199
282
  ws.on('message', (data) => {
200
283
  // A read-only connection still receives every update; its own are
@@ -202,85 +285,138 @@ export class AutomergeDriver {
202
285
  // respect a permission it was merely told about.
203
286
  if (readOnlyClients.has(ws))
204
287
  return;
205
- void this.handleClientMessage(docName, data, ws);
206
- });
207
- ws.on('close', () => {
208
- room.clients.delete(ws);
209
- readOnlyClients.delete(ws);
210
- // Only the user's LAST socket on this document leaves the roster.
211
- const stillConnected = [...room.clients].some((client) => socketUsers.get(client) === ctx.userId);
212
- socketUsers.delete(ws);
213
- if (!stillConnected) {
214
- void this.options.presence?.leave(docName, ctx.userId);
215
- }
288
+ this.handleClientMessage(docName, joinedRoom, data, ws);
216
289
  });
217
- socketUsers.set(ws, ctx.userId);
218
290
  }
219
291
  catch (error) {
292
+ if (room) {
293
+ // A join that failed may still have written the entry.
294
+ this.removeSocket(docName, room, ws, undefined);
295
+ this.leaveIfLast(docName, room, ctx.userId);
296
+ }
220
297
  reportCollaborationError({ scope: 'storage', operation: 'loadDocument', docName, error });
221
298
  ws.close(4500, 'could not open the document');
222
299
  }
223
300
  });
224
301
  });
225
302
  }
226
- // biome-ignore lint/suspicious/noExplicitAny: automerge's typing is unstable between minors
227
- async handleClientMessage(docName, data, sender) {
228
- const room = await this.loadRoom(docName);
303
+ /**
304
+ * Takes `ws` out of the room — and, when `userId` is given, out of that
305
+ * user's socket count, leaving the roster with their last one. Safe to call
306
+ * twice for one socket.
307
+ */
308
+ removeSocket(docName, room, ws, userId) {
309
+ if (!room.clients.delete(ws))
310
+ return;
311
+ readOnlyClients.delete(ws);
312
+ changeClients.delete(ws);
313
+ if (userId !== undefined) {
314
+ const count = (room.users.get(userId) ?? 1) - 1;
315
+ if (count > 0)
316
+ room.users.set(userId, count);
317
+ else
318
+ room.users.delete(userId);
319
+ this.leaveIfLast(docName, room, userId);
320
+ }
321
+ void this.releaseRoom(docName, room);
322
+ }
323
+ /** Removes `userId` from the roster unless another of their sockets is still in the room. */
324
+ leaveIfLast(docName, room, userId) {
325
+ if (room.users.has(userId))
326
+ return;
327
+ this.options.presence?.leave(docName, userId).catch((error) => {
328
+ reportCollaborationError({ scope: 'transport', operation: 'presence.leave', docName, error });
329
+ });
330
+ }
331
+ /**
332
+ * Applies a client's whole document or change chunk and forwards only what
333
+ * was new to the room. A payload that adds nothing — a duplicate, or bytes
334
+ * that are not Automerge at all — is neither forwarded nor saved.
335
+ */
336
+ handleClientMessage(docName, room, data, sender) {
229
337
  try {
230
- // Client sends an incremental binary doc; merge into the server doc.
231
- const incoming = A.load(data);
232
- const merged = A.merge(room.text, incoming);
233
- room.text = merged;
234
- this.broadcast(room, data, sender);
235
- // Persistence with simple per-room debounce.
236
- await this.persistDebounced(docName, room);
338
+ const before = ANext.getHeads(room.text);
339
+ room.text = A.loadIncremental(room.text, data);
340
+ if (sameHeads(before, ANext.getHeads(room.text)))
341
+ return;
342
+ // A whole document from a whole-document client is forwarded as it came
343
+ // to the other whole-document clients: it is already the payload they need.
344
+ this.broadcast(room, before, sender, changeClients.has(sender) ? undefined : data);
345
+ this.schedulePersist(docName, room);
237
346
  }
238
347
  catch {
239
348
  // Invalid payload: ignore (a badly-behaved client doesn't take down the room).
240
349
  }
241
350
  }
242
- persistDebounced(docName, room) {
243
- return new Promise((resolve) => {
244
- const existing = this.persistTimers.get(docName);
245
- if (existing)
246
- clearTimeout(existing);
247
- this.persistTimers.set(docName, setTimeout(() => {
248
- void this.storage
249
- .saveDocument(docName, A.save(room.text))
250
- .catch((error) => {
251
- reportCollaborationError({
252
- scope: 'storage',
253
- operation: 'saveDocument',
254
- docName,
255
- error,
256
- });
257
- })
258
- .finally(() => resolve());
259
- }, this.options.debounce ?? 2000));
260
- });
351
+ /**
352
+ * Debounced save: each edit postpones it by `debounce`, but never past
353
+ * {@link MAX_PERSIST_WAIT_MS} (or `debounce`, if longer) after the first
354
+ * unsaved edit, so a document edited without pause is still written.
355
+ */
356
+ schedulePersist(docName, room) {
357
+ const debounce = this.options.debounce ?? 2000;
358
+ const now = Date.now();
359
+ const pending = this.pendingSaves.get(docName);
360
+ if (pending)
361
+ clearTimeout(pending.timer);
362
+ const deadline = pending?.deadline ?? now + Math.max(MAX_PERSIST_WAIT_MS, debounce);
363
+ const timer = setTimeout(() => void this.persistNow(docName), Math.max(0, Math.min(debounce, deadline - now)));
364
+ this.pendingSaves.set(docName, { timer, deadline, room });
365
+ }
366
+ /** Writes the pending save of `docName` now, if there is one. */
367
+ async persistNow(docName) {
368
+ const pending = this.pendingSaves.get(docName);
369
+ if (!pending)
370
+ return this.savesInFlight.get(docName);
371
+ clearTimeout(pending.timer);
372
+ this.pendingSaves.delete(docName);
373
+ await this.save(docName, A.save(pending.room.text));
374
+ }
375
+ /** Saves `state`, tracked so the room is not dropped while it is written. */
376
+ async save(docName, state) {
377
+ const previous = this.savesInFlight.get(docName);
378
+ const write = (async () => {
379
+ // Writes of one document stay in order, so an older state never lands last.
380
+ await previous;
381
+ try {
382
+ await this.storage.saveDocument(docName, state);
383
+ }
384
+ catch (error) {
385
+ reportCollaborationError({ scope: 'storage', operation: 'saveDocument', docName, error });
386
+ }
387
+ })();
388
+ this.savesInFlight.set(docName, write);
389
+ try {
390
+ await write;
391
+ }
392
+ finally {
393
+ if (this.savesInFlight.get(docName) === write)
394
+ this.savesInFlight.delete(docName);
395
+ }
261
396
  }
262
397
  async getDocumentState(docName) {
263
- const room = await this.loadRoom(docName);
264
- return A.save(room.text);
398
+ return this.withRoom(docName, (room) => A.save(room.text));
265
399
  }
266
400
  async getDocumentText(docName) {
267
- const room = await this.loadRoom(docName);
268
- const content = room.text.content;
269
- return content ? content.toString() : '';
401
+ return this.withRoom(docName, (room) => {
402
+ const content = room.text.content;
403
+ return content ? content.toString() : '';
404
+ });
270
405
  }
271
406
  /** Versions = markers over the native history (heads hash). */
272
407
  async createVersion(docName, createdBy, label) {
273
- const room = await this.loadRoom(docName);
274
- const heads = ANext.getHeads(room.text);
275
- const existing = await this.storage.listVersions(docName);
276
- const version = {
277
- ...createVersionMetadata(createdBy, label, seqVersions(existing)),
278
- id: heads.join(','),
279
- };
280
- // Snapshot = binary save of the doc up to those heads (Automerge compresses
281
- // well; storing the whole doc as the "snapshot" keeps restore O(1)).
282
- await this.storage.saveVersion(docName, version, A.save(room.text));
283
- return version;
408
+ return this.withRoom(docName, async (room) => {
409
+ const heads = ANext.getHeads(room.text);
410
+ const existing = await this.storage.listVersions(docName);
411
+ const version = {
412
+ ...createVersionMetadata(createdBy, label, seqVersions(existing)),
413
+ id: heads.join(','),
414
+ };
415
+ // Snapshot = binary save of the doc up to those heads (Automerge compresses
416
+ // well; storing the whole doc as the "snapshot" keeps restore O(1)).
417
+ await this.storage.saveVersion(docName, version, A.save(room.text));
418
+ return version;
419
+ });
284
420
  }
285
421
  async listVersions(docName, page) {
286
422
  return this.storage.listVersions(docName, page);
@@ -294,13 +430,18 @@ export class AutomergeDriver {
294
430
  async restoreVersion(docName, versionId, restoredBy) {
295
431
  const bytes = await this.getVersionState(docName, versionId);
296
432
  const snapshotDoc = A.load(bytes);
297
- const room = await this.loadRoom(docName);
433
+ await this.withRoom(docName, (room) => this.restoreRoom(docName, room, versionId, snapshotDoc, restoredBy));
434
+ }
435
+ async restoreRoom(docName, room, versionId,
436
+ // biome-ignore lint/suspicious/noExplicitAny: automerge's typing is unstable between minors
437
+ snapshotDoc, restoredBy) {
298
438
  const existing = await this.storage.listVersions(docName);
299
439
  const target = existing.find((version) => version.id === versionId);
300
440
  await this.storage.saveVersion(docName, {
301
441
  ...createVersionMetadata(restoredBy, restoredFromLabel(target, versionId), seqVersions(existing)),
302
442
  id: ANext.getHeads(room.text).join(','),
303
443
  }, A.save(room.text));
444
+ const before = ANext.getHeads(room.text);
304
445
  const merged = A.merge(room.text, snapshotDoc);
305
446
  // Automerge merge converges to the most recent state; to "restore",
306
447
  // we overwrite the content field with the value from the version.
@@ -310,8 +451,13 @@ export class AutomergeDriver {
310
451
  doc.content = restoredContent?.toString() ?? '';
311
452
  });
312
453
  room.text = finalDoc;
313
- this.broadcast(room, A.save(finalDoc));
314
- await this.storage.saveDocument(docName, A.save(finalDoc));
454
+ this.broadcast(room, before);
455
+ // The restore supersedes any debounced save of the state it replaced.
456
+ const pending = this.pendingSaves.get(docName);
457
+ if (pending)
458
+ clearTimeout(pending.timer);
459
+ this.pendingSaves.delete(docName);
460
+ await this.save(docName, A.save(finalDoc));
315
461
  }
316
462
  /** Binary state stored for a version (`A.save` of the doc at that point). */
317
463
  async getVersionState(docName, versionId) {
@@ -332,13 +478,17 @@ export class AutomergeDriver {
332
478
  return lineDiff(textOf(aBytes), textOf(bBytes));
333
479
  }
334
480
  async close() {
335
- for (const timer of this.persistTimers.values())
336
- clearTimeout(timer);
481
+ // Edits still inside their debounce are written, not dropped.
482
+ await Promise.all([...this.pendingSaves.keys()].map((docName) => this.persistNow(docName)));
483
+ await Promise.all(this.savesInFlight.values());
337
484
  // `this.wss?.close(cb)` never runs cb when there is no server, so this
338
485
  // promise used to hang forever on a driver that was never attached —
339
486
  // which is every driver outside the web process.
340
487
  if (!this.wss)
341
488
  return;
489
+ // `wss.close` only calls back once every client is gone.
490
+ for (const client of this.wss.clients)
491
+ client.terminate();
342
492
  return new Promise((resolve) => {
343
493
  this.wss?.close(() => resolve());
344
494
  });
@@ -1 +1 @@
1
- {"version":3,"file":"automerge_driver.js","sourceRoot":"","sources":["../../../../src/drivers/automerge/automerge_driver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"automerge_driver.js","sourceRoot":"","sources":["../../../../src/drivers/automerge/automerge_driver.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"yjs_driver.d.ts","sourceRoot":"","sources":["../../../../src/drivers/yjs/yjs_driver.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAOzB,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAEV,iBAAiB,EAIjB,aAAa,EACb,eAAe,EAChB,MAAM,gBAAgB,CAAC;AAiBxB;;;;;;;;;;;GAWG;AAEH,qBAAa,SAAU,YAAW,mBAAmB,EAAE,kBAAkB;IACvE,QAAQ,CAAC,MAAM,SAAS;IAExB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,GAAG,CAAC,CAAkB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAC/C;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAuC;IAC1E,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA4C;IAEhF,YAAY,OAAO,EAAE,uBAAuB,EAgU3C;IAED;;;;;;;;;OASG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,SAAS,CAG5C;IAED,OAAO,CAAC,OAAO;YAQD,SAAS;IAQjB,MAAM,CAAC,MAAM,EAAE,OAAO,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8C9D;IAEK,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAO3D;IAEK,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAWtD;IAEK,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,KAAK,EAAE,MAAM,GAAG,IAAI,GACnB,OAAO,CAAC,aAAa,CAAC,CAUxB;IAEK,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAEpF;IAED;;;;;;;OAOG;IACG,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GAAG,IAAI,GACxB,OAAO,CAAC,IAAI,CAAC,CAgCf;IAED;;;;;;;;;;;;;;;;OAgBG;IACG,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAO,GACjC,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CA+C5C;IAEK,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAUxF;IAED,wEAAwE;IAClE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAI7E;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAgB3B;CACF"}
1
+ {"version":3,"file":"yjs_driver.d.ts","sourceRoot":"","sources":["../../../../src/drivers/yjs/yjs_driver.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAOzB,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAEV,iBAAiB,EAIjB,aAAa,EACb,eAAe,EAChB,MAAM,gBAAgB,CAAC;AAiBxB;;;;;;;;;;;GAWG;AAEH,qBAAa,SAAU,YAAW,mBAAmB,EAAE,kBAAkB;IACvE,QAAQ,CAAC,MAAM,SAAS;IAExB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,GAAG,CAAC,CAAkB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAC/C;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAuC;IAC1E,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA4C;IAEhF,YAAY,OAAO,EAAE,uBAAuB,EA6U3C;IAED;;;;;;;;;OASG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,SAAS,CAG5C;IAED,OAAO,CAAC,OAAO;YAQD,SAAS;IAQjB,MAAM,CAAC,MAAM,EAAE,OAAO,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8C9D;IAEK,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAO3D;IAEK,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAWtD;IAEK,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,KAAK,EAAE,MAAM,GAAG,IAAI,GACnB,OAAO,CAAC,aAAa,CAAC,CAUxB;IAEK,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAEpF;IAED;;;;;;;OAOG;IACG,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GAAG,IAAI,GACxB,OAAO,CAAC,IAAI,CAAC,CAgCf;IAED;;;;;;;;;;;;;;;;OAgBG;IACG,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAO,GACjC,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CA+C5C;IAEK,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAUxF;IAED,wEAAwE;IAClE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAI7E;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAgB3B;CACF"}
@@ -61,6 +61,23 @@ export class YjsDriver {
61
61
  * is many connections; the map has to be too.
62
62
  */
63
63
  const presenceBySocket = new Map();
64
+ /** Open sockets per user per document, so a disconnect never scans the others. */
65
+ const socketCounts = new Map();
66
+ const countSocket = (documentName, userId, delta) => {
67
+ let users = socketCounts.get(documentName);
68
+ if (!users) {
69
+ users = new Map();
70
+ socketCounts.set(documentName, users);
71
+ }
72
+ const count = (users.get(userId) ?? 0) + delta;
73
+ if (count > 0)
74
+ users.set(userId, count);
75
+ else
76
+ users.delete(userId);
77
+ if (users.size === 0)
78
+ socketCounts.delete(documentName);
79
+ return count;
80
+ };
64
81
  const admissionsBySocket = this.admissionsBySocket;
65
82
  const admissionsByRequest = this.admissionsByRequest;
66
83
  /** Removes the pending admission of `socketId` and returns it, so only one caller ends it. */
@@ -243,6 +260,7 @@ export class YjsDriver {
243
260
  try {
244
261
  if (options.presence && ctx?.userId) {
245
262
  presenceBySocket.set(socketId, { documentName, userId: ctx.userId });
263
+ countSocket(documentName, ctx.userId, 1);
246
264
  await options.presence.join(documentName, {
247
265
  userId: ctx.userId,
248
266
  ...(ctx.user ? { name: ctx.user.name } : {}),
@@ -251,6 +269,9 @@ export class YjsDriver {
251
269
  }
252
270
  catch (error) {
253
271
  // The join never succeeded: no `leave` is owed for it on disconnect.
272
+ const entry = presenceBySocket.get(socketId);
273
+ if (entry)
274
+ countSocket(entry.documentName, entry.userId, -1);
254
275
  presenceBySocket.delete(socketId);
255
276
  await pending?.admission.closed();
256
277
  throw error;
@@ -264,12 +285,10 @@ export class YjsDriver {
264
285
  if (!entry)
265
286
  return;
266
287
  presenceBySocket.delete(socketId);
267
- if (!options.presence)
268
- return;
269
288
  // One user, two tabs: the roster entry only goes away with the last
270
289
  // socket that user holds on that document.
271
- const stillConnected = [...presenceBySocket.values()].some((other) => other.documentName === entry.documentName && other.userId === entry.userId);
272
- if (stillConnected)
290
+ const stillConnected = countSocket(entry.documentName, entry.userId, -1) > 0;
291
+ if (!options.presence || stillConnected)
273
292
  return;
274
293
  await options.presence.leave(entry.documentName, entry.userId);
275
294
  },
@@ -1 +1 @@
1
- {"version":3,"file":"yjs_driver.js","sourceRoot":"","sources":["../../../../src/drivers/yjs/yjs_driver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"yjs_driver.js","sourceRoot":"","sources":["../../../../src/drivers/yjs/yjs_driver.ts"],"names":[],"mappings":"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"}
@@ -15,18 +15,33 @@ export interface PresenceMember {
15
15
  avatarUrl?: string | null;
16
16
  }
17
17
  /**
18
- * Redis-backed presence store. One hash per document; members expire via
19
- * TTL refresh on join (no heartbeat handled here — drivers refresh on
20
- * connect and we prune stale entries on read).
18
+ * Redis-backed presence store. One hash of members per document, plus a
19
+ * sorted set stamping when each member was last confirmed. A member whose
20
+ * stamp is older than the TTL is not listed (and is pruned on the read), so
21
+ * the users of an instance that died without running its disconnects drop
22
+ * out even while others keep the document busy. Every live instance
23
+ * re-stamps the members it holds on an interval, which keeps them listed
24
+ * for as long as they stay connected. A member with no stamp is governed by
25
+ * the TTL of the whole key alone.
21
26
  */
22
27
  export declare class RedisPresenceStore implements PresenceStore {
23
28
  private readonly redis;
29
+ /** Members joined through this instance, by document and user. */
30
+ private readonly local;
31
+ private refreshTimer;
24
32
  constructor(redis: Redis);
25
33
  private key;
34
+ private seenKey;
26
35
  join(docName: string, member: PresenceMember): Promise<void>;
27
36
  leave(docName: string, userId: string): Promise<void>;
28
37
  list(docName: string): Promise<PresenceMember[]>;
29
38
  close(): Promise<void>;
39
+ /** Writes `members` with a fresh stamp and extends both keys' TTL. */
40
+ private stamp;
41
+ private startRefreshing;
42
+ private stopRefreshing;
43
+ /** Re-stamps every member this instance holds, so they outlive the TTL while connected. */
44
+ private refresh;
30
45
  }
31
46
  /**
32
47
  * Server-side presence (cross-instance). Join/leave is fed by the WS
@@ -1 +1 @@
1
- {"version":3,"file":"presence_service.d.ts","sourceRoot":"","sources":["../../../src/services/presence_service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACjD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAID;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAlC,YAA6B,KAAK,EAAE,KAAK,EAAI;IAE7C,OAAO,CAAC,GAAG;IAIL,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAOjE;IAEK,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;IAEK,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAWrD;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;CACF;AAED;;;;;GAKG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAlC,YAA6B,KAAK,EAAE,aAAa,EAAI;IAE/C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjE;IAEK,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;IAEK,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAErD;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;CACF"}
1
+ {"version":3,"file":"presence_service.d.ts","sourceRoot":"","sources":["../../../src/services/presence_service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACjD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAwBD;;;;;;;;;GASG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IAK1C,OAAO,CAAC,QAAQ,CAAC,KAAK;IAJlC,kEAAkE;IAClE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkD;IACxE,OAAO,CAAC,YAAY,CAA6C;IAEjE,YAA6B,KAAK,EAAE,KAAK,EAAI;IAE7C,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,OAAO;IAIT,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CASjE;IAEK,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU1D;IAEK,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAiCrD;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAG3B;IAED,sEAAsE;YACxD,KAAK;IAYnB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,cAAc;IAKtB,2FAA2F;YAC7E,OAAO;CAStB;AAED;;;;;GAKG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAlC,YAA6B,KAAK,EAAE,aAAa,EAAI;IAE/C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjE;IAEK,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;IAEK,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAErD;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;CACF"}
@@ -1,32 +1,92 @@
1
1
  const TTL_SECONDS = 60;
2
+ /** How often a live instance re-stamps the members it holds. */
3
+ const REFRESH_INTERVAL_MS = (TTL_SECONDS * 1000) / 3;
2
4
  /**
3
- * Redis-backed presence store. One hash per document; members expire via
4
- * TTL refresh on join (no heartbeat handled here — drivers refresh on
5
- * connect and we prune stale entries on read).
5
+ * Drops the members whose stamp is older than the cutoff — read again inside
6
+ * the script, so a member re-stamped since the list read stays.
7
+ * KEYS: members hash, stamps zset. ARGV: cutoff, then the user ids.
8
+ */
9
+ const PRUNE_SCRIPT = `
10
+ local removed = 0
11
+ for i = 2, #ARGV do
12
+ local seen = redis.call('ZSCORE', KEYS[2], ARGV[i])
13
+ if seen and tonumber(seen) < tonumber(ARGV[1]) then
14
+ redis.call('HDEL', KEYS[1], ARGV[i])
15
+ redis.call('ZREM', KEYS[2], ARGV[i])
16
+ removed = removed + 1
17
+ end
18
+ end
19
+ return removed
20
+ `;
21
+ /**
22
+ * Redis-backed presence store. One hash of members per document, plus a
23
+ * sorted set stamping when each member was last confirmed. A member whose
24
+ * stamp is older than the TTL is not listed (and is pruned on the read), so
25
+ * the users of an instance that died without running its disconnects drop
26
+ * out even while others keep the document busy. Every live instance
27
+ * re-stamps the members it holds on an interval, which keeps them listed
28
+ * for as long as they stay connected. A member with no stamp is governed by
29
+ * the TTL of the whole key alone.
6
30
  */
7
31
  export class RedisPresenceStore {
8
32
  redis;
33
+ /** Members joined through this instance, by document and user. */
34
+ local = new Map();
35
+ refreshTimer;
9
36
  constructor(redis) {
10
37
  this.redis = redis;
11
38
  }
12
39
  key(docName) {
13
40
  return `collab:presence:${docName}`;
14
41
  }
42
+ seenKey(docName) {
43
+ return `collab:presence:${docName}:seen`;
44
+ }
15
45
  async join(docName, member) {
16
- const key = this.key(docName);
46
+ let members = this.local.get(docName);
47
+ if (!members) {
48
+ members = new Map();
49
+ this.local.set(docName, members);
50
+ }
51
+ members.set(member.userId, member);
52
+ this.startRefreshing();
53
+ await this.stamp(docName, [member]);
54
+ }
55
+ async leave(docName, userId) {
56
+ const members = this.local.get(docName);
57
+ members?.delete(userId);
58
+ if (members?.size === 0)
59
+ this.local.delete(docName);
60
+ if (this.local.size === 0)
61
+ this.stopRefreshing();
17
62
  await this.redis
18
63
  .multi()
19
- .hset(key, member.userId, JSON.stringify(member))
20
- .expire(key, TTL_SECONDS)
64
+ .hdel(this.key(docName), userId)
65
+ .zrem(this.seenKey(docName), userId)
21
66
  .exec();
22
67
  }
23
- async leave(docName, userId) {
24
- await this.redis.hdel(this.key(docName), userId);
25
- }
26
68
  async list(docName) {
27
- const entries = await this.redis.hgetall(this.key(docName));
69
+ const key = this.key(docName);
70
+ const seenKey = this.seenKey(docName);
71
+ const results = await this.redis
72
+ .multi()
73
+ .hgetall(key)
74
+ .zrange(seenKey, '0', '-1', 'WITHSCORES')
75
+ .exec();
76
+ const entries = (results?.[0]?.[1] ?? {});
77
+ const stamps = (results?.[1]?.[1] ?? []);
78
+ const seen = new Map();
79
+ for (let i = 0; i < stamps.length; i += 2)
80
+ seen.set(stamps[i], Number(stamps[i + 1]));
81
+ const cutoff = Date.now() - TTL_SECONDS * 1000;
28
82
  const members = [];
29
- for (const value of Object.values(entries)) {
83
+ const expired = [];
84
+ for (const [userId, value] of Object.entries(entries)) {
85
+ const stampedAt = seen.get(userId);
86
+ if (stampedAt !== undefined && stampedAt < cutoff) {
87
+ expired.push(userId);
88
+ continue;
89
+ }
30
90
  try {
31
91
  members.push(JSON.parse(value));
32
92
  }
@@ -34,11 +94,44 @@ export class RedisPresenceStore {
34
94
  // Entrada corrompida/parcial — ignora.
35
95
  }
36
96
  }
97
+ if (expired.length > 0) {
98
+ await this.redis.eval(PRUNE_SCRIPT, 2, key, seenKey, String(cutoff), ...expired);
99
+ }
37
100
  return members;
38
101
  }
39
102
  async close() {
103
+ this.stopRefreshing();
40
104
  await this.redis.quit();
41
105
  }
106
+ /** Writes `members` with a fresh stamp and extends both keys' TTL. */
107
+ async stamp(docName, members) {
108
+ const key = this.key(docName);
109
+ const seenKey = this.seenKey(docName);
110
+ const now = Date.now();
111
+ const pipeline = this.redis.multi();
112
+ for (const member of members) {
113
+ pipeline.hset(key, member.userId, JSON.stringify(member));
114
+ pipeline.zadd(seenKey, now, member.userId);
115
+ }
116
+ await pipeline.expire(key, TTL_SECONDS).expire(seenKey, TTL_SECONDS).exec();
117
+ }
118
+ startRefreshing() {
119
+ if (this.refreshTimer)
120
+ return;
121
+ this.refreshTimer = setInterval(() => void this.refresh(), REFRESH_INTERVAL_MS);
122
+ this.refreshTimer.unref?.();
123
+ }
124
+ stopRefreshing() {
125
+ if (this.refreshTimer)
126
+ clearInterval(this.refreshTimer);
127
+ this.refreshTimer = undefined;
128
+ }
129
+ /** Re-stamps every member this instance holds, so they outlive the TTL while connected. */
130
+ async refresh() {
131
+ await Promise.all([...this.local].map(([docName, members]) => this.stamp(docName, [...members.values()]).catch(() => {
132
+ // A failed refresh is retried on the next tick; expiry only needs one to land.
133
+ })));
134
+ }
42
135
  }
43
136
  /**
44
137
  * Server-side presence (cross-instance). Join/leave is fed by the WS
@@ -1 +1 @@
1
- {"version":3,"file":"presence_service.js","sourceRoot":"","sources":["../../../src/services/presence_service.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,GAAG,EAAE,CAAC;AAEvB;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IACA,KAAK;IAAlC,YAA6B,KAAY;qBAAZ,KAAK;IAAU,CAAC;IAErC,GAAG,CAAC,OAAe;QACzB,OAAO,mBAAmB,OAAO,EAAE,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAe,EAAE,MAAsB;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,IAAI,CAAC,KAAK;aACb,KAAK,EAAE;aACP,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;aAChD,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC;aACxB,IAAI,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAe,EAAE,MAAc;QACzC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAe;QACxB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAqB,EAAE,CAAC;QACrC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAe,CAAmB,CAAC,CAAC;YAC9D,CAAC;YAAC,MAAM,CAAC;gBACP,uCAAuC;YACzC,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,eAAe;IACG,KAAK;IAAlC,YAA6B,KAAoB;qBAApB,KAAK;IAAkB,CAAC;IAErD,KAAK,CAAC,IAAI,CAAC,OAAe,EAAE,MAAsB;QAChD,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAe,EAAE,MAAc;QACzC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAe;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;CACF"}
1
+ {"version":3,"file":"presence_service.js","sourceRoot":"","sources":["../../../src/services/presence_service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adonis-agora/collaboration",
3
- "version": "0.19.0",
3
+ "version": "0.19.1",
4
4
  "description": "Collaborative editing (CRDT) for AdonisJS 7 — Yjs (Hocuspocus) and Automerge drivers, Redis-backed presence, unified version control. Part of the Agora ecosystem.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -122,12 +122,12 @@
122
122
  }
123
123
  },
124
124
  "devDependencies": {
125
- "@adonisjs/assembler": "8.5.2",
125
+ "@adonisjs/assembler": "8.6.0",
126
126
  "@adonisjs/core": "7.6.0",
127
127
  "@adonisjs/lucid": "22.4.2",
128
128
  "@hocuspocus/provider": "4.7.1",
129
129
  "@mdx-js/mdx": "3.1.1",
130
- "@swc/core": "1.16.18",
130
+ "@swc/core": "1.16.20",
131
131
  "@testcontainers/postgresql": "12.2.1",
132
132
  "@types/luxon": "3.7.6",
133
133
  "@types/node": "26.6.5",
@@ -135,9 +135,10 @@
135
135
  "@types/ws": "8.18.2",
136
136
  "luxon": "3.7.2",
137
137
  "pg": "8.23.1",
138
+ "testcontainers": "12.2.1",
138
139
  "typescript": "7.0.2",
139
140
  "unplugin-swc": "2.0.0",
140
- "vitest": "5.0.4"
141
+ "vitest": "5.0.5"
141
142
  },
142
143
  "engines": {
143
144
  "node": ">=24"