@adonis-agora/collaboration-client 0.9.2 → 0.10.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.
|
@@ -7,11 +7,14 @@ import type { CollabStatus } from '../types.js';
|
|
|
7
7
|
* of forcing both worlds behind one interface.
|
|
8
8
|
*
|
|
9
9
|
* Wire protocol mirrors the server's AutomergeDriver:
|
|
10
|
-
* 1. ws `${wsUrl}?doc=<name>&token=<token
|
|
11
|
-
* 2. server
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
10
|
+
* 1. ws `${wsUrl}?doc=<name>&token=<token>&sync=changes` (token via fetchToken)
|
|
11
|
+
* 2. a server that exchanges change chunks answers with the
|
|
12
|
+
* {@link CHANGES_ACK} text frame; then every server sends the full
|
|
13
|
+
* `A.save(doc)` binary
|
|
14
|
+
* 3. after local changes (debounced) the client sends the changes the server
|
|
15
|
+
* lacks (`A.saveSince`) once acknowledged, else its whole saved doc
|
|
16
|
+
* 4. incoming binaries — change chunks or whole docs — are applied with
|
|
17
|
+
* `A.loadIncremental`; the server forwards what was new to the other peers
|
|
15
18
|
*
|
|
16
19
|
* ## Reconnection
|
|
17
20
|
*
|
|
@@ -27,7 +30,8 @@ import type { CollabStatus } from '../types.js';
|
|
|
27
30
|
* Local changes made while the socket is down are **not lost**. Automerge's
|
|
28
31
|
* full-document exchange makes the local doc its own outbox: the change is
|
|
29
32
|
* applied locally, {@link UseAutomergeDocResult.pendingChanges} counts it, and
|
|
30
|
-
* the
|
|
33
|
+
* whatever the server's state lacks is written as soon as a reconnected socket
|
|
34
|
+
* has delivered that state. The
|
|
31
35
|
* count is exposed so a UI can say "3 unsaved changes" instead of pretending
|
|
32
36
|
* everything is fine.
|
|
33
37
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_automerge_doc.d.ts","sourceRoot":"","sources":["../../../src/hooks/use_automerge_doc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,sBAAsB,CAAC;AAU1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD
|
|
1
|
+
{"version":3,"file":"use_automerge_doc.d.ts","sourceRoot":"","sources":["../../../src/hooks/use_automerge_doc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,sBAAsB,CAAC;AAU1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtE,yEAAyE;IACzE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB;;;;;OAKG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,OAAO,SAAS,CAAC;CAClC;AAsBD,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzF,OAAO,EAAE,sBAAsB,GAC9B,qBAAqB,CAAC,CAAC,CAAC,CAoO1B"}
|
|
@@ -4,6 +4,11 @@ import { useCollaborationContext } from '../context.js';
|
|
|
4
4
|
import { fetchToken, resolveBaseUrl } from '../rest_client.js';
|
|
5
5
|
import { isPermanentFailure, MAX_RECONNECT_ATTEMPTS, MAX_RECONNECT_DELAY_MS, reconnectExhausted, } from '../session.js';
|
|
6
6
|
const SEND_DEBOUNCE_MS = 200;
|
|
7
|
+
/** Text frame a server sends when this socket may exchange change chunks. */
|
|
8
|
+
const CHANGES_ACK = 'automerge-sync:changes';
|
|
9
|
+
function sameHeads(a, b) {
|
|
10
|
+
return a.length === b.length && a.every((hash, index) => hash === b[index]);
|
|
11
|
+
}
|
|
7
12
|
/**
|
|
8
13
|
* Close codes the AutomergeDriver uses for an answer, not an outage.
|
|
9
14
|
*
|
|
@@ -44,15 +49,36 @@ export function useAutomergeDoc(options) {
|
|
|
44
49
|
let generation = 0;
|
|
45
50
|
/** The last real failure, kept so an exhausted budget can name it. */
|
|
46
51
|
let lastFailure = null;
|
|
52
|
+
/** The current socket's server acknowledged change chunks. */
|
|
53
|
+
let sendsChanges = false;
|
|
54
|
+
/** The current socket has delivered the server's state. */
|
|
55
|
+
let stateReceived = false;
|
|
56
|
+
/** Heads the server is known to hold on the current socket. */
|
|
57
|
+
let serverHeads = [];
|
|
47
58
|
const fail = (failure) => {
|
|
48
59
|
lastFailure = failure;
|
|
49
60
|
setStatus('error');
|
|
50
61
|
setError(failure);
|
|
51
62
|
};
|
|
63
|
+
/**
|
|
64
|
+
* Sends what the server lacks: the changes since {@link serverHeads} to a
|
|
65
|
+
* server that acknowledged chunks, the whole saved doc to any other. Waits
|
|
66
|
+
* for the server's state, which is where a reconnect catches up.
|
|
67
|
+
*/
|
|
52
68
|
const flush = () => {
|
|
53
|
-
|
|
69
|
+
const local = localDocRef.current;
|
|
70
|
+
if (socket?.readyState !== Impl.OPEN || !local || !stateReceived)
|
|
54
71
|
return;
|
|
55
|
-
|
|
72
|
+
if (sendsChanges) {
|
|
73
|
+
const heads = A.getHeads(local);
|
|
74
|
+
if (!sameHeads(heads, serverHeads)) {
|
|
75
|
+
socket.send(A.saveSince(local, serverHeads));
|
|
76
|
+
serverHeads = heads;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
socket.send(A.save(local));
|
|
81
|
+
}
|
|
56
82
|
pendingRef.current = 0;
|
|
57
83
|
setPendingChanges(0);
|
|
58
84
|
};
|
|
@@ -79,6 +105,9 @@ export function useAutomergeDoc(options) {
|
|
|
79
105
|
generation += 1;
|
|
80
106
|
const mine = generation;
|
|
81
107
|
const stale = () => disposed || mine !== generation;
|
|
108
|
+
sendsChanges = false;
|
|
109
|
+
stateReceived = false;
|
|
110
|
+
serverHeads = [];
|
|
82
111
|
try {
|
|
83
112
|
const info = await fetchToken(config, docName);
|
|
84
113
|
if (stale())
|
|
@@ -87,7 +116,7 @@ export function useAutomergeDoc(options) {
|
|
|
87
116
|
throw new Error(`useAutomergeDoc requires engine=automerge (got ${info.engine})`);
|
|
88
117
|
}
|
|
89
118
|
const base = resolveBaseUrl(config);
|
|
90
|
-
const query = `?doc=${encodeURIComponent(docName)}&token=${encodeURIComponent(info.token)}`;
|
|
119
|
+
const query = `?doc=${encodeURIComponent(docName)}&token=${encodeURIComponent(info.token)}&sync=changes`;
|
|
91
120
|
const wsUrl = info.wsUrl.startsWith('ws')
|
|
92
121
|
? `${info.wsUrl}${query}`
|
|
93
122
|
: `${base.replace(/^http/, 'ws')}${info.wsUrl}${query}`;
|
|
@@ -103,18 +132,42 @@ export function useAutomergeDoc(options) {
|
|
|
103
132
|
lastFailure = null;
|
|
104
133
|
setStatus('connected');
|
|
105
134
|
setError(null);
|
|
106
|
-
// Everything typed while the socket was down goes out now. The local
|
|
107
|
-
// doc IS the outbox: this protocol sends whole documents.
|
|
108
|
-
if (pendingRef.current > 0)
|
|
109
|
-
flush();
|
|
110
135
|
};
|
|
111
136
|
ws.onmessage = (event) => {
|
|
112
137
|
if (stale())
|
|
113
138
|
return;
|
|
139
|
+
if (typeof event.data === 'string') {
|
|
140
|
+
if (event.data === CHANGES_ACK)
|
|
141
|
+
sendsChanges = true;
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
114
144
|
const bytes = new Uint8Array(event.data);
|
|
115
|
-
const
|
|
116
|
-
|
|
145
|
+
const current = localDocRef.current;
|
|
146
|
+
if (!stateReceived) {
|
|
147
|
+
// The server's whole state. Whatever the local doc holds beyond it
|
|
148
|
+
// — typed while disconnected, or sent on a socket that dropped —
|
|
149
|
+
// goes out now: the local doc is the outbox.
|
|
150
|
+
const incoming = A.load(bytes);
|
|
151
|
+
const next = current ? A.merge(current, incoming) : incoming;
|
|
152
|
+
localDocRef.current = next;
|
|
153
|
+
stateReceived = true;
|
|
154
|
+
serverHeads = A.getHeads(incoming);
|
|
155
|
+
setDoc(next);
|
|
156
|
+
setSynced(true);
|
|
157
|
+
if (sameHeads(A.getHeads(next), serverHeads)) {
|
|
158
|
+
pendingRef.current = 0;
|
|
159
|
+
setPendingChanges(0);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
flush();
|
|
163
|
+
}
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const next = current ? A.loadIncremental(current, bytes) : A.load(bytes);
|
|
117
167
|
localDocRef.current = next;
|
|
168
|
+
// With nothing left unsent, the server holds everything this doc holds.
|
|
169
|
+
if (pendingRef.current === 0)
|
|
170
|
+
serverHeads = A.getHeads(next);
|
|
118
171
|
setDoc(next);
|
|
119
172
|
setSynced(true);
|
|
120
173
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_automerge_doc.js","sourceRoot":"","sources":["../../../src/hooks/use_automerge_doc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,sBAAsB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"use_automerge_doc.js","sourceRoot":"","sources":["../../../src/hooks/use_automerge_doc.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adonis-agora/collaboration-client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.1",
|
|
4
4
|
"description": "Client-side React hooks for @adonis-agora/collaboration — collaborative docs, presence, comments and versions. Part of the Agora ecosystem.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -63,20 +63,20 @@
|
|
|
63
63
|
}
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|
|
66
|
-
"@swc/core": "1.16.
|
|
66
|
+
"@swc/core": "1.16.20",
|
|
67
67
|
"@testing-library/react": "16.3.3",
|
|
68
68
|
"@types/node": "26.6.5",
|
|
69
69
|
"@types/react": "19.3.0",
|
|
70
70
|
"@types/react-dom": "19.3.0",
|
|
71
|
-
"jsdom": "30.1.
|
|
72
|
-
"react": "19.3.
|
|
73
|
-
"react-dom": "19.3.
|
|
71
|
+
"jsdom": "30.1.3",
|
|
72
|
+
"react": "19.3.1",
|
|
73
|
+
"react-dom": "19.3.1",
|
|
74
74
|
"typescript": "7.0.2",
|
|
75
|
-
"unplugin-swc": "
|
|
76
|
-
"vitest": "5.0.
|
|
75
|
+
"unplugin-swc": "2.0.0",
|
|
76
|
+
"vitest": "5.0.5"
|
|
77
77
|
},
|
|
78
78
|
"engines": {
|
|
79
|
-
"node": ">=
|
|
79
|
+
"node": ">=24"
|
|
80
80
|
},
|
|
81
81
|
"scripts": {
|
|
82
82
|
"build": "pnpm run clean && tsc -p tsconfig.build.json",
|