@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 +12 -0
- package/dist/src/drivers/automerge/automerge_driver.d.ts +43 -2
- package/dist/src/drivers/automerge/automerge_driver.d.ts.map +1 -1
- package/dist/src/drivers/automerge/automerge_driver.js +225 -75
- package/dist/src/drivers/automerge/automerge_driver.js.map +1 -1
- package/dist/src/drivers/yjs/yjs_driver.d.ts.map +1 -1
- package/dist/src/drivers/yjs/yjs_driver.js +23 -4
- package/dist/src/drivers/yjs/yjs_driver.js.map +1 -1
- package/dist/src/services/presence_service.d.ts +18 -3
- package/dist/src/services/presence_service.d.ts.map +1 -1
- package/dist/src/services/presence_service.js +104 -11
- package/dist/src/services/presence_service.js.map +1 -1
- package/package.json +5 -4
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
|
|
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
|
-
|
|
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;
|
|
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:
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
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
|
-
/**
|
|
25
|
-
const
|
|
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
|
-
|
|
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 = {
|
|
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
|
-
|
|
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
|
|
121
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
227
|
-
|
|
228
|
-
|
|
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
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
//
|
|
236
|
-
|
|
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
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
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
|
-
|
|
264
|
-
return A.save(room.text);
|
|
398
|
+
return this.withRoom(docName, (room) => A.save(room.text));
|
|
265
399
|
}
|
|
266
400
|
async getDocumentText(docName) {
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
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
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
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
|
-
|
|
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,
|
|
314
|
-
|
|
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
|
-
|
|
336
|
-
|
|
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":"AAAA,OAAO,KAAK,CAAC,MAAM,sBAAsB,CAAC;AAC1C,OAAO,EAAE,IAAI,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAQ9F,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAExD;;;;;;;;;;;;;GAaG;AAEH,gFAAgF;AAChF,MAAM,eAAe,GAAG,IAAI,OAAO,EAAU,CAAC;AAE9C,2EAA2E;AAC3E,MAAM,WAAW,GAAG,IAAI,OAAO,EAAkB,CAAC;AAQlD,MAAM,OAAO,eAAe;IACjB,MAAM,GAAG,WAAW,CAAC;IAEtB,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;IAChC,GAAG,CAAmB;IACb,OAAO,CAA0B;IACjC,OAAO,CAAuB;IACvC,aAAa,GAAG,IAAI,GAAG,EAAyC,CAAC;IACzE;;;;;;;;OAQG;IACK,SAAS,GAAG,IAAI,GAAG,EAAyB,CAAC;IAErD,YAAY,OAAgC;QAC1C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;IAEO,QAAQ,CAAC,OAAe;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,IAAI;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEvC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;QAE5B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACrC,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/D,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,OAAe;QACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,GAAG,GAAG,MAAM;YAChB,CAAC,CAAC,CAAC,CAAC,IAAI,CAA0B,MAAM,CAAC,KAAK,CAAC;YAC/C,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAErC,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,GAAG,EAA0B,EAAE,CAAC;QACvE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;;OAUG;IACH,4FAA4F;IACpF,KAAK,CAAC,YAAY,CAAC,OAAe;QACxC,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAA6B,CAAC,CAAC;QACvE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY;YAAE,OAAO,KAAK,EAAE,CAAC;QAE/C,IAAI,IAA+E,CAAC;QACpF,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,mEAAmE;YACnE,iDAAiD;YACjD,wBAAwB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1F,OAAO,KAAK,EAAE,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC,IAAI,YAAY,UAAU,CAAC,EAAE,CAAC;YAClC,0BAA0B,CACxB,EAAE,OAAO,EAAE,EACX,aAAa,OAAO,oEAAoE;gBACtF,4EAA4E,CAC/E,CAAC;YACF,OAAO,KAAK,EAAE,CAAC;QACjB,CAAC;QAED,IAAI,GAAY,CAAC;QACjB,IAAI,CAAC;YACH,GAAG,GAAG,CAAC,CAAC,IAAI,CAA0B,IAAI,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wBAAwB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1F,OAAO,KAAK,EAAE,CAAC;QACjB,CAAC;QAED,0EAA0E;QAC1E,8DAA8D;QAC9D,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wBAAwB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5F,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,SAAS,CAAC,IAAU,EAAE,OAAmB,EAAE,MAA+B;QAChF,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;gBACjD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAkC;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,gBAAgB,CAAC;QACnD,MAAM,GAAG,GAAG,IAAI,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QAEf,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;YAC7C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC;YAC5D,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI;gBAAE,OAAO;YAElC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,MAAmC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;gBACjF,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBACtE,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;oBAC/B,OAAO;gBACT,CAAC;gBAED,kEAAkE;gBAClE,EAAE;gBACF,oEAAoE;gBACpE,iEAAiE;gBACjE,mEAAmE;gBACnE,sEAAsE;gBACtE,qEAAqE;gBACrE,wBAAwB;gBACxB,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;oBACpC,OAAO;gBACT,CAAC;gBAED,IAAI,GAAsD,CAAC;gBAC3D,IAAI,CAAC;oBACH,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBAC9E,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,mEAAmE;oBACnE,4DAA4D;oBAC5D,wBAAwB,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;oBACvF,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,4BAA4B,CAAC,CAAC;oBAC7C,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;oBACxC,OAAO;gBACT,CAAC;gBAED,mEAAmE;gBACnE,kEAAkE;gBAClE,4DAA4D;gBAC5D,IAAI,UAA4B,CAAC;gBACjC,IAAI,CAAC;oBACH,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBAC1D,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,wBAAwB,CAAC;wBACvB,KAAK,EAAE,WAAW;wBAClB,SAAS,EAAE,SAAS;wBACpB,OAAO;wBACP,KAAK;qBACN,CAAC,CAAC;oBACH,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,2BAA2B,CAAC,CAAC;oBAC5C,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;oBACxB,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;oBAC5B,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;oBAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACrB,IAAI,CAAC,UAAU,CAAC,QAAQ;wBAAE,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAElD,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE;wBACzC,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBACnD,CAAC,CAAC;oBAEH,0CAA0C;oBAC1C,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;oBAE3B,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;wBACxB,kEAAkE;wBAClE,iEAAiE;wBACjE,iDAAiD;wBACjD,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;4BAAE,OAAO;wBACpC,KAAK,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAkB,EAAE,EAAE,CAAC,CAAC;oBACjE,CAAC,CAAC,CAAC;oBAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;wBAClB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;wBACxB,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;wBAC3B,kEAAkE;wBAClE,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAC3C,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CACnD,CAAC;wBACF,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;wBACvB,IAAI,CAAC,cAAc,EAAE,CAAC;4BACpB,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;wBACzD,CAAC;oBACH,CAAC,CAAC,CAAC;oBACH,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;gBAClC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,wBAAwB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;oBAC1F,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,6BAA6B,CAAC,CAAC;gBAChD,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,4FAA4F;IACpF,KAAK,CAAC,mBAAmB,CAAC,OAAe,EAAE,IAAgB,EAAE,MAAW;QAC9E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE1C,IAAI,CAAC;YACH,qEAAqE;YACrE,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAA0B,IAAI,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC5C,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;YAEnB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAEnC,6CAA6C;YAC7C,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,+EAA+E;QACjF,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,OAAe,EAAE,IAAU;QAClD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACjD,IAAI,QAAQ;gBAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;YAErC,IAAI,CAAC,aAAa,CAAC,GAAG,CACpB,OAAO,EACP,UAAU,CAAC,GAAG,EAAE;gBACd,KAAK,IAAI,CAAC,OAAO;qBACd,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;qBACxC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;oBACxB,wBAAwB,CAAC;wBACvB,KAAK,EAAE,SAAS;wBAChB,SAAS,EAAE,cAAc;wBACzB,OAAO;wBACP,KAAK;qBACN,CAAC,CAAC;gBACL,CAAC,CAAC;qBACD,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9B,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,CAClC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAe;QACpC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAe;QACnC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAI,IAAI,CAAC,IAAwD,CAAC,OAAO,CAAC;QACvF,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3C,CAAC;IAED,+DAA+D;IAC/D,KAAK,CAAC,aAAa,CACjB,OAAe,EACf,SAAwB,EACxB,KAAoB;QAEpB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAE1D,MAAM,OAAO,GAAkB;YAC7B,GAAG,qBAAqB,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;YACjE,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;SACpB,CAAC;QAEF,4EAA4E;QAC5E,qEAAqE;QACrE,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACpE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAe,EAAE,IAAsB;QACxD,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAClB,OAAe,EACf,SAAiB,EACjB,UAAyB;QAEzB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC7D,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAA0B,KAAK,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE1C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QACpE,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAC5B,OAAO,EACP;YACE,GAAG,qBAAqB,CACtB,UAAU,EACV,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC,EACpC,WAAW,CAAC,QAAQ,CAAC,CACtB;YACD,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;SACxC,EACD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAClB,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC/C,oEAAoE;QACpE,kEAAkE;QAClE,MAAM,eAAe,GAAI,WAA+D;aACrF,OAAO,CAAC;QACX,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;YACvC,GAA2B,CAAC,OAAO,GAAG,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;QACrB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,6EAA6E;IAC7E,KAAK,CAAC,eAAe,CAAC,OAAe,EAAE,SAAiB;QACtD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC7E,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,WAAW,SAAS,YAAY,CAAC,CAAC;QAClE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAe,EAAE,GAAW,EAAE,GAAW;QAC1D,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACzC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC;YAClC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC;SACnC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,CAAC,KAAiB,EAAE,EAAE;YACnC,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAuC,KAAK,CAAC,CAAC;YAChE,OAAO,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACvC,CAAC,CAAC;QAEF,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,KAAK;QACT,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QACrE,uEAAuE;QACvE,qEAAqE;QACrE,iDAAiD;QACjD,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE,OAAO;QACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
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,
|
|
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 =
|
|
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
|
|
19
|
-
*
|
|
20
|
-
*
|
|
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;
|
|
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
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
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
|
-
|
|
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
|
-
.
|
|
20
|
-
.
|
|
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
|
|
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
|
-
|
|
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;
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
141
|
+
"vitest": "5.0.5"
|
|
141
142
|
},
|
|
142
143
|
"engines": {
|
|
143
144
|
"node": ">=24"
|