@adonis-agora/collaboration 0.12.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +164 -0
- package/dist/providers/collaboration_provider.d.ts.map +1 -1
- package/dist/providers/collaboration_provider.js +4 -0
- package/dist/providers/collaboration_provider.js.map +1 -1
- package/dist/src/auth/secret.d.ts +48 -0
- package/dist/src/auth/secret.d.ts.map +1 -0
- package/dist/src/auth/secret.js +95 -0
- package/dist/src/auth/secret.js.map +1 -0
- package/dist/src/auth/token.d.ts +111 -14
- package/dist/src/auth/token.d.ts.map +1 -1
- package/dist/src/auth/token.js +95 -14
- package/dist/src/auth/token.js.map +1 -1
- package/dist/src/collaboration_manager.d.ts +75 -2
- package/dist/src/collaboration_manager.d.ts.map +1 -1
- package/dist/src/collaboration_manager.js +128 -2
- package/dist/src/collaboration_manager.js.map +1 -1
- package/dist/src/define_config.d.ts +5 -0
- package/dist/src/define_config.d.ts.map +1 -1
- package/dist/src/define_config.js.map +1 -1
- package/dist/src/documents.d.ts +59 -0
- package/dist/src/documents.d.ts.map +1 -1
- package/dist/src/documents.js.map +1 -1
- package/dist/src/driver.d.ts +56 -3
- package/dist/src/driver.d.ts.map +1 -1
- package/dist/src/driver.js +4 -1
- package/dist/src/driver.js.map +1 -1
- package/dist/src/drivers/automerge/automerge_driver.d.ts +27 -2
- package/dist/src/drivers/automerge/automerge_driver.d.ts.map +1 -1
- package/dist/src/drivers/automerge/automerge_driver.js +107 -18
- package/dist/src/drivers/automerge/automerge_driver.js.map +1 -1
- package/dist/src/drivers/partykit/partykit_driver.d.ts +7 -2
- package/dist/src/drivers/partykit/partykit_driver.d.ts.map +1 -1
- package/dist/src/drivers/partykit/partykit_driver.js +15 -9
- package/dist/src/drivers/partykit/partykit_driver.js.map +1 -1
- package/dist/src/drivers/yjs/yjs_driver.d.ts +18 -6
- package/dist/src/drivers/yjs/yjs_driver.d.ts.map +1 -1
- package/dist/src/drivers/yjs/yjs_driver.js +170 -19
- package/dist/src/drivers/yjs/yjs_driver.js.map +1 -1
- package/dist/src/http/types.d.ts +27 -4
- package/dist/src/http/types.d.ts.map +1 -1
- package/dist/src/http/types.js.map +1 -1
- package/dist/src/index.d.ts +7 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/routes.d.ts +74 -2
- package/dist/src/routes.d.ts.map +1 -1
- package/dist/src/routes.js +166 -14
- package/dist/src/routes.js.map +1 -1
- package/dist/src/services/comment_service.d.ts +2 -2
- package/dist/src/services/comment_service.d.ts.map +1 -1
- package/dist/src/services/comment_service.js +2 -2
- package/dist/src/services/comment_service.js.map +1 -1
- package/dist/src/storage/file_system_storage.d.ts +3 -3
- package/dist/src/storage/file_system_storage.d.ts.map +1 -1
- package/dist/src/storage/file_system_storage.js +13 -4
- package/dist/src/storage/file_system_storage.js.map +1 -1
- package/dist/src/storage/in_memory_storage.d.ts +3 -3
- package/dist/src/storage/in_memory_storage.d.ts.map +1 -1
- package/dist/src/storage/in_memory_storage.js +14 -5
- package/dist/src/storage/in_memory_storage.js.map +1 -1
- package/dist/src/storage/lucid_storage.d.ts +3 -3
- package/dist/src/storage/lucid_storage.d.ts.map +1 -1
- package/dist/src/storage/lucid_storage.js +48 -33
- package/dist/src/storage/lucid_storage.js.map +1 -1
- package/dist/src/storage/shared.d.ts +17 -0
- package/dist/src/storage/shared.d.ts.map +1 -1
- package/dist/src/storage/shared.js +29 -0
- package/dist/src/storage/shared.js.map +1 -1
- package/dist/src/types.d.ts +72 -3
- package/dist/src/types.d.ts.map +1 -1
- package/dist/stubs/config/collaboration.stub +8 -0
- package/dist/stubs/partykit/worker/party.ts.stub +35 -4
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { assertPruneKeep, versionsToPrune } from './shared.js';
|
|
1
|
+
import { assertPruneKeep, clampLimit, clampOffset, versionsToPrune } from './shared.js';
|
|
2
2
|
/** Ids deleted per statement by `pruneVersions` — keeps the IN (...) sane. */
|
|
3
3
|
const PRUNE_BATCH_SIZE = 500;
|
|
4
4
|
/**
|
|
@@ -99,30 +99,37 @@ export class LucidStorage {
|
|
|
99
99
|
async saveDocument(docName, state, meta) {
|
|
100
100
|
await this.ensure();
|
|
101
101
|
const knex = await this.knex();
|
|
102
|
-
const
|
|
103
|
-
|
|
102
|
+
const now = new Date();
|
|
103
|
+
// Single upsert instead of a SELECT to decide insert-vs-update: the old
|
|
104
|
+
// shape ran two round-trips per save, on every debounce flush of every
|
|
105
|
+
// actively-edited document. `doc_name` is the table's primary key (see
|
|
106
|
+
// `ensureSchema`/the published migration), so it is the only possible
|
|
107
|
+
// conflict target. `created_at` is deliberately left out of `.merge()` —
|
|
108
|
+
// an update must not look like the row was created just now.
|
|
109
|
+
await knex
|
|
110
|
+
.table('collab_documents')
|
|
111
|
+
.insert({
|
|
112
|
+
doc_name: docName,
|
|
104
113
|
state: Buffer.from(state),
|
|
105
114
|
meta: meta ?? null,
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
else {
|
|
112
|
-
await knex.table('collab_documents').insert({
|
|
113
|
-
doc_name: docName,
|
|
114
|
-
...payload,
|
|
115
|
-
created_at: new Date(),
|
|
116
|
-
});
|
|
117
|
-
}
|
|
115
|
+
created_at: now,
|
|
116
|
+
updated_at: now,
|
|
117
|
+
})
|
|
118
|
+
.onConflict('doc_name')
|
|
119
|
+
.merge(['state', 'meta', 'updated_at']);
|
|
118
120
|
}
|
|
119
|
-
async listVersions(docName) {
|
|
121
|
+
async listVersions(docName, page) {
|
|
120
122
|
await this.ensure();
|
|
121
123
|
const knex = await this.knex();
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
124
|
+
let query = knex.from('collab_versions').where('doc_name', docName).orderBy('seq', 'asc');
|
|
125
|
+
// `page` is opt-in: internal callers computing the next `seq` or a
|
|
126
|
+
// restore target need every version, and only pass none. The HTTP route
|
|
127
|
+
// always passes one, which is what keeps a long history from coming back
|
|
128
|
+
// as one ever-growing JSON array.
|
|
129
|
+
if (page) {
|
|
130
|
+
query = query.limit(clampLimit(page.limit)).offset(clampOffset(page.offset));
|
|
131
|
+
}
|
|
132
|
+
const rows = await query;
|
|
126
133
|
return rows.map((row) => ({
|
|
127
134
|
id: row.id,
|
|
128
135
|
createdBy: row.created_by ?? null,
|
|
@@ -194,12 +201,19 @@ export class LucidStorage {
|
|
|
194
201
|
}
|
|
195
202
|
return removed;
|
|
196
203
|
}
|
|
197
|
-
async listComments(docName, space) {
|
|
204
|
+
async listComments(docName, space, page) {
|
|
198
205
|
await this.ensure();
|
|
199
206
|
const knex = await this.knex();
|
|
200
|
-
let query = knex
|
|
207
|
+
let query = knex
|
|
208
|
+
.from('collab_comments')
|
|
209
|
+
.where('doc_name', docName)
|
|
210
|
+
.orderBy('created_at', 'asc');
|
|
201
211
|
if (space)
|
|
202
212
|
query = query.where('space', space);
|
|
213
|
+
// Same opt-in pagination as `listVersions` — see the comment there.
|
|
214
|
+
if (page) {
|
|
215
|
+
query = query.limit(clampLimit(page.limit)).offset(clampOffset(page.offset));
|
|
216
|
+
}
|
|
203
217
|
const rows = await query;
|
|
204
218
|
return rows.map((row) => this.toComment(row));
|
|
205
219
|
}
|
|
@@ -241,7 +255,6 @@ export class LucidStorage {
|
|
|
241
255
|
async saveComment(docName, comment) {
|
|
242
256
|
await this.ensure();
|
|
243
257
|
const knex = await this.knex();
|
|
244
|
-
const existing = await knex.from('collab_comments').where('id', comment.id).first();
|
|
245
258
|
const payload = {
|
|
246
259
|
doc_name: comment.documentName,
|
|
247
260
|
space: comment.space,
|
|
@@ -252,16 +265,18 @@ export class LucidStorage {
|
|
|
252
265
|
resolved_at: comment.resolvedAt ? new Date(comment.resolvedAt) : null,
|
|
253
266
|
updated_at: new Date(),
|
|
254
267
|
};
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
}
|
|
268
|
+
// Same single-upsert shape as `saveDocument` — `id` is the table's primary
|
|
269
|
+
// key, and `created_at` is excluded from `.merge()` so an edit does not
|
|
270
|
+
// reset when the comment was created.
|
|
271
|
+
await knex
|
|
272
|
+
.table('collab_comments')
|
|
273
|
+
.insert({
|
|
274
|
+
id: comment.id,
|
|
275
|
+
...payload,
|
|
276
|
+
created_at: new Date(comment.createdAt),
|
|
277
|
+
})
|
|
278
|
+
.onConflict('id')
|
|
279
|
+
.merge(Object.keys(payload));
|
|
265
280
|
void docName;
|
|
266
281
|
}
|
|
267
282
|
async deleteComment(docName, commentId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lucid_storage.js","sourceRoot":"","sources":["../../../src/storage/lucid_storage.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lucid_storage.js","sourceRoot":"","sources":["../../../src/storage/lucid_storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,4 +14,21 @@ export declare function assertPruneKeep(keep: number): void;
|
|
|
14
14
|
export declare function versionsToPrune<T extends {
|
|
15
15
|
seq: number;
|
|
16
16
|
}>(versions: T[], keep: number): T[];
|
|
17
|
+
/**
|
|
18
|
+
* Shared paging bounds for {@link import('../types.js').ListPageOptions}.
|
|
19
|
+
*
|
|
20
|
+
* Every storage implementation clamps through these rather than picking its
|
|
21
|
+
* own numbers — a page size that differs between `LucidStorage` and
|
|
22
|
+
* `InMemoryCollaborationStorage` turns "it works in the tests" into a claim
|
|
23
|
+
* about the wrong store. Mirrors the convention already used for billing
|
|
24
|
+
* lists in `@adonis-agora/payments` (`BILLING_LIST_DEFAULT_LIMIT`/`_MAX_LIMIT`).
|
|
25
|
+
*/
|
|
26
|
+
/** Rows returned when a page is requested with no particular size. */
|
|
27
|
+
export declare const COLLAB_LIST_DEFAULT_LIMIT = 50;
|
|
28
|
+
/** Hard ceiling — an unbounded `limit` from a query string must not be able to select the table. */
|
|
29
|
+
export declare const COLLAB_LIST_MAX_LIMIT = 200;
|
|
30
|
+
/** Clamp a requested page size into `1..COLLAB_LIST_MAX_LIMIT`, defaulting when absent/invalid. */
|
|
31
|
+
export declare function clampLimit(limit: number | undefined): number;
|
|
32
|
+
/** Clamp a requested offset to a non-negative integer, defaulting to `0`. */
|
|
33
|
+
export declare function clampOffset(offset: number | undefined): number;
|
|
17
34
|
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/storage/shared.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMlD;AAED,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,CAAC,SAAS;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE,CAE3F"}
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/storage/shared.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMlD;AAED,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,CAAC,SAAS;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE,CAE3F;AAED;;;;;;;;GAQG;AAEH,sEAAsE;AACtE,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAE5C,oGAAoG;AACpG,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,mGAAmG;AACnG,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAK5D;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAI9D"}
|
|
@@ -18,4 +18,33 @@ export function assertPruneKeep(keep) {
|
|
|
18
18
|
export function versionsToPrune(versions, keep) {
|
|
19
19
|
return [...versions].sort((a, b) => b.seq - a.seq).slice(keep);
|
|
20
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Shared paging bounds for {@link import('../types.js').ListPageOptions}.
|
|
23
|
+
*
|
|
24
|
+
* Every storage implementation clamps through these rather than picking its
|
|
25
|
+
* own numbers — a page size that differs between `LucidStorage` and
|
|
26
|
+
* `InMemoryCollaborationStorage` turns "it works in the tests" into a claim
|
|
27
|
+
* about the wrong store. Mirrors the convention already used for billing
|
|
28
|
+
* lists in `@adonis-agora/payments` (`BILLING_LIST_DEFAULT_LIMIT`/`_MAX_LIMIT`).
|
|
29
|
+
*/
|
|
30
|
+
/** Rows returned when a page is requested with no particular size. */
|
|
31
|
+
export const COLLAB_LIST_DEFAULT_LIMIT = 50;
|
|
32
|
+
/** Hard ceiling — an unbounded `limit` from a query string must not be able to select the table. */
|
|
33
|
+
export const COLLAB_LIST_MAX_LIMIT = 200;
|
|
34
|
+
/** Clamp a requested page size into `1..COLLAB_LIST_MAX_LIMIT`, defaulting when absent/invalid. */
|
|
35
|
+
export function clampLimit(limit) {
|
|
36
|
+
if (limit === undefined || !Number.isFinite(limit))
|
|
37
|
+
return COLLAB_LIST_DEFAULT_LIMIT;
|
|
38
|
+
const floored = Math.floor(limit);
|
|
39
|
+
if (floored < 1)
|
|
40
|
+
return COLLAB_LIST_DEFAULT_LIMIT;
|
|
41
|
+
return Math.min(floored, COLLAB_LIST_MAX_LIMIT);
|
|
42
|
+
}
|
|
43
|
+
/** Clamp a requested offset to a non-negative integer, defaulting to `0`. */
|
|
44
|
+
export function clampOffset(offset) {
|
|
45
|
+
if (offset === undefined || !Number.isFinite(offset))
|
|
46
|
+
return 0;
|
|
47
|
+
const floored = Math.floor(offset);
|
|
48
|
+
return floored < 0 ? 0 : floored;
|
|
49
|
+
}
|
|
21
50
|
//# sourceMappingURL=shared.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/storage/shared.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CACb,yGAAyG,MAAM,CAAC,IAAI,CAAC,EAAE,CACxH,CAAC;IACJ,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,eAAe,CAA4B,QAAa,EAAE,IAAY;IACpF,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACjE,CAAC"}
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/storage/shared.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CACb,yGAAyG,MAAM,CAAC,IAAI,CAAC,EAAE,CACxH,CAAC;IACJ,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,eAAe,CAA4B,QAAa,EAAE,IAAY;IACpF,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;;;GAQG;AAEH,sEAAsE;AACtE,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAE5C,oGAAoG;AACpG,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAEzC,mGAAmG;AACnG,MAAM,UAAU,UAAU,CAAC,KAAyB;IAClD,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,yBAAyB,CAAC;IACrF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,yBAAyB,CAAC;IAClD,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;AAClD,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,WAAW,CAAC,MAA0B;IACpD,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACnC,OAAO,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AACnC,CAAC"}
|
package/dist/src/types.d.ts
CHANGED
|
@@ -92,6 +92,37 @@ export interface LoadedCollabDocument {
|
|
|
92
92
|
/** State vector for differential sync (Yjs: state vector; Automerge: heads). */
|
|
93
93
|
vector: Uint8Array;
|
|
94
94
|
}
|
|
95
|
+
/**
|
|
96
|
+
* Why {@link CollaborationManager.withLiveDocument} had no document to run on.
|
|
97
|
+
*
|
|
98
|
+
* The two are different operational facts and a caller that cannot tell them
|
|
99
|
+
* apart writes the wrong fallback: `not-loaded` is normal and temporary (open
|
|
100
|
+
* the document, or fall back to `getDocumentState`), while
|
|
101
|
+
* `engine-has-no-live-document` never changes for that document and means the
|
|
102
|
+
* whole approach is wrong for it.
|
|
103
|
+
*/
|
|
104
|
+
export type LiveDocumentAbsence =
|
|
105
|
+
/** The engine keeps documents in this process, but nobody has this one open here. */
|
|
106
|
+
'not-loaded'
|
|
107
|
+
/** The engine syncs elsewhere (PartyKit, on the edge): there is no in-process instance. */
|
|
108
|
+
| 'engine-has-no-live-document';
|
|
109
|
+
/**
|
|
110
|
+
* Outcome of {@link CollaborationManager.withLiveDocument} — what the callback
|
|
111
|
+
* returned, or why it never ran.
|
|
112
|
+
*
|
|
113
|
+
* A result, not an exception and not a bare `undefined`: "there is no live
|
|
114
|
+
* document" is an ordinary answer here (nobody has the document open), and a
|
|
115
|
+
* `T | undefined` would collapse it into a callback that legitimately returned
|
|
116
|
+
* `undefined`.
|
|
117
|
+
*/
|
|
118
|
+
export type LiveDocumentResult<T> = {
|
|
119
|
+
live: true;
|
|
120
|
+
value: T;
|
|
121
|
+
} | {
|
|
122
|
+
live: false;
|
|
123
|
+
value?: undefined;
|
|
124
|
+
reason: LiveDocumentAbsence;
|
|
125
|
+
};
|
|
95
126
|
/** A version registered in the document history. */
|
|
96
127
|
export interface CollabVersion {
|
|
97
128
|
/** Opaque reference for the driver (Yjs snapshot / Automerge hash). */
|
|
@@ -119,6 +150,22 @@ export interface PruneVersionsOptions {
|
|
|
119
150
|
/** Count what would be removed without deleting anything. */
|
|
120
151
|
dryRun?: boolean;
|
|
121
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* Limit/offset pagination bounds accepted by the list-shaped storage reads
|
|
155
|
+
* ({@link CollaborationStorage.listVersions}, {@link CollaborationStorage.listComments}).
|
|
156
|
+
*
|
|
157
|
+
* Deliberately optional and separate from the required params: a caller that
|
|
158
|
+
* omits it (every internal driver call computing the next `seq` or resolving
|
|
159
|
+
* a restore target) gets the historical "every row" behaviour, while the HTTP
|
|
160
|
+
* routes — the only place an unbounded result becomes a client-facing
|
|
161
|
+
* problem — always pass one. Implementations should clamp the values
|
|
162
|
+
* themselves (see `clampLimit`/`clampOffset` in `storage/shared.js`) rather
|
|
163
|
+
* than trust the caller's numbers.
|
|
164
|
+
*/
|
|
165
|
+
export interface ListPageOptions {
|
|
166
|
+
limit?: number;
|
|
167
|
+
offset?: number;
|
|
168
|
+
}
|
|
122
169
|
/**
|
|
123
170
|
* Persistence of documents + versions + comments. The host app implements
|
|
124
171
|
* this (database, S3...) and the library only knows the interface.
|
|
@@ -128,7 +175,12 @@ export interface CollaborationStorage {
|
|
|
128
175
|
state: Uint8Array;
|
|
129
176
|
} | null>;
|
|
130
177
|
saveDocument(docName: string, state: Uint8Array, meta?: Record<string, unknown>): Promise<void>;
|
|
131
|
-
|
|
178
|
+
/**
|
|
179
|
+
* Versions of a document, oldest first. `page` bounds the result — omit it
|
|
180
|
+
* to get every version (what version-numbering and restore need
|
|
181
|
+
* internally); the HTTP route always supplies one.
|
|
182
|
+
*/
|
|
183
|
+
listVersions(docName: string, page?: ListPageOptions): Promise<CollabVersion[]>;
|
|
132
184
|
saveVersion(docName: string, version: CollabVersion, snapshot: Uint8Array): Promise<void>;
|
|
133
185
|
loadVersionSnapshot(docName: string, versionId: string): Promise<Uint8Array | null>;
|
|
134
186
|
/**
|
|
@@ -136,8 +188,11 @@ export interface CollaborationStorage {
|
|
|
136
188
|
* many versions were removed (or would be, with `dryRun`).
|
|
137
189
|
*/
|
|
138
190
|
pruneVersions(options: PruneVersionsOptions): Promise<number>;
|
|
139
|
-
/**
|
|
140
|
-
|
|
191
|
+
/**
|
|
192
|
+
* Comments of a document (by space), oldest first. `page` bounds the
|
|
193
|
+
* result the same way it does for {@link listVersions}.
|
|
194
|
+
*/
|
|
195
|
+
listComments(docName: string, space?: string, page?: ListPageOptions): Promise<CollabComment[]>;
|
|
141
196
|
/**
|
|
142
197
|
* One comment by id. Optional: a storage that cannot look one up directly is
|
|
143
198
|
* served by {@link CommentService.get} falling back to a filtered list — the
|
|
@@ -178,6 +233,20 @@ export interface CollaborationConfig {
|
|
|
178
233
|
* restart the document) — the rule alone will not do it.
|
|
179
234
|
*/
|
|
180
235
|
authorize?: (ctx: CollabConnectionContext, docName: string) => Promise<CollabPermission>;
|
|
236
|
+
/**
|
|
237
|
+
* Key that signs and verifies the self-hosted collaboration token.
|
|
238
|
+
*
|
|
239
|
+
* Optional because an AdonisJS app already has one: with nothing set here
|
|
240
|
+
* the library derives its key from the app's `appKey`, so the secure path
|
|
241
|
+
* is the path that requires no configuration. Set it to use a dedicated
|
|
242
|
+
* key, or when embedding the manager outside an Adonis app — a manager with
|
|
243
|
+
* neither refuses to issue or accept tokens rather than falling back to an
|
|
244
|
+
* unsigned format.
|
|
245
|
+
*
|
|
246
|
+
* Rotating it invalidates every outstanding token. Clients reconnect and
|
|
247
|
+
* fetch a new one, so the visible cost is one reconnect.
|
|
248
|
+
*/
|
|
249
|
+
tokenSecret?: string;
|
|
181
250
|
/** Redis for cross-instance presence (optional in single-instance dev). */
|
|
182
251
|
redis?: {
|
|
183
252
|
url: string;
|
package/dist/src/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,14 @@ export default defineConfig({
|
|
|
22
22
|
/** Persist debounce in ms (onStoreDocument). */
|
|
23
23
|
debounce: 2000,
|
|
24
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Signing key for the collaboration token (HS256, 5-minute TTL, bound to a
|
|
27
|
+
* single document). Omitted = derived from the app's appKey, which is what
|
|
28
|
+
* you want in almost every case. Set it only for a dedicated secret; with
|
|
29
|
+
* no key anywhere the library refuses to issue or accept tokens.
|
|
30
|
+
*/
|
|
31
|
+
// tokenSecret: env.get('COLLAB_TOKEN_SECRET'),
|
|
32
|
+
|
|
25
33
|
/**
|
|
26
34
|
* Authorization per document. Return canRead/canWrite/canComment; the
|
|
27
35
|
* driver drops the connection when canRead is false.
|
|
@@ -23,7 +23,20 @@ interface CollabToken {
|
|
|
23
23
|
exp: number;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Signature + expiry + **document binding**.
|
|
28
|
+
*
|
|
29
|
+
* `expectedDocName` is not optional decoration: the room IS the document, and
|
|
30
|
+
* a token is issued for one document only. Without this comparison a token
|
|
31
|
+
* legitimately obtained for a document the caller may read would open every
|
|
32
|
+
* other room on the worker — the client picks the room, the server only
|
|
33
|
+
* checked that the signature was ours.
|
|
34
|
+
*/
|
|
35
|
+
async function verifyToken(
|
|
36
|
+
token: string | null,
|
|
37
|
+
secret: string,
|
|
38
|
+
expectedDocName: string,
|
|
39
|
+
): Promise<CollabToken | null> {
|
|
27
40
|
if (!token) return null;
|
|
28
41
|
const parts = token.split('.');
|
|
29
42
|
if (parts.length !== 3) return null;
|
|
@@ -45,12 +58,25 @@ function verifyToken(token: string | null, secret: string): Promise<CollabToken
|
|
|
45
58
|
try {
|
|
46
59
|
const parsed = JSON.parse(Buffer.from(body, 'base64url').toString()) as CollabToken;
|
|
47
60
|
if (!parsed.userId || !parsed.docName || parsed.exp * 1000 < Date.now()) return null;
|
|
61
|
+
if (parsed.docName !== expectedDocName) return null;
|
|
48
62
|
return parsed;
|
|
49
63
|
} catch {
|
|
50
64
|
return null;
|
|
51
65
|
}
|
|
52
66
|
}
|
|
53
67
|
|
|
68
|
+
/**
|
|
69
|
+
* The room being addressed, read from the URL: `/parties/<party>/<room>`.
|
|
70
|
+
*
|
|
71
|
+
* Taken from the path rather than from the token, obviously — the whole point
|
|
72
|
+
* is to compare the two. Rejoined because a document name contains slashes
|
|
73
|
+
* (`researches/42/writing`) and travels percent-encoded in that last segment.
|
|
74
|
+
*/
|
|
75
|
+
function roomFromUrl(url: string): string {
|
|
76
|
+
const segments = new URL(url).pathname.split('/').slice(3).filter(Boolean);
|
|
77
|
+
return decodeURIComponent(segments.join('/'));
|
|
78
|
+
}
|
|
79
|
+
|
|
54
80
|
export default class CollabParty implements PartyServer {
|
|
55
81
|
/** Doc vivo do room — populado pelo primeiro ciclo load/callback. */
|
|
56
82
|
private liveDoc?: Y.Doc;
|
|
@@ -60,7 +86,7 @@ export default class CollabParty implements PartyServer {
|
|
|
60
86
|
static async onBeforeConnect(request: PartyRequest, lobby: { context: PartyConnectionContext }) {
|
|
61
87
|
const secret = lobby.context.party.env.COLLAB_JWT_SECRET as string | undefined;
|
|
62
88
|
const token = new URL(request.url).searchParams.get('token');
|
|
63
|
-
const claims = await verifyToken(token, secret ?? '');
|
|
89
|
+
const claims = await verifyToken(token, secret ?? '', roomFromUrl(request.url));
|
|
64
90
|
if (!claims) {
|
|
65
91
|
return new Response('invalid or expired token', { status: 401 });
|
|
66
92
|
}
|
|
@@ -109,9 +135,14 @@ export default class CollabParty implements PartyServer {
|
|
|
109
135
|
async onRequest(request: PartyRequest): Promise<Response> {
|
|
110
136
|
const secret = this.party.env.COLLAB_JWT_SECRET as string | undefined;
|
|
111
137
|
const url = new URL(request.url);
|
|
138
|
+
const room = this.docName;
|
|
112
139
|
const claims =
|
|
113
|
-
(await verifyToken(url.searchParams.get('token'), secret ?? '')) ??
|
|
114
|
-
(await verifyToken(
|
|
140
|
+
(await verifyToken(url.searchParams.get('token'), secret ?? '', room)) ??
|
|
141
|
+
(await verifyToken(
|
|
142
|
+
request.headers.get('authorization')?.replace(/^Bearer /, '') ?? '',
|
|
143
|
+
secret ?? '',
|
|
144
|
+
room,
|
|
145
|
+
));
|
|
115
146
|
if (!claims) {
|
|
116
147
|
return new Response('unauthenticated', { status: 401 });
|
|
117
148
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adonis-agora/collaboration",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
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": {
|