@adonis-agora/collaboration 0.1.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.
Files changed (75) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/configure.d.ts +10 -0
  3. package/dist/configure.d.ts.map +1 -0
  4. package/dist/configure.js +16 -0
  5. package/dist/configure.js.map +1 -0
  6. package/dist/providers/collaboration_provider.d.ts +18 -0
  7. package/dist/providers/collaboration_provider.d.ts.map +1 -0
  8. package/dist/providers/collaboration_provider.js +65 -0
  9. package/dist/providers/collaboration_provider.js.map +1 -0
  10. package/dist/src/collaboration_manager.d.ts +34 -0
  11. package/dist/src/collaboration_manager.d.ts.map +1 -0
  12. package/dist/src/collaboration_manager.js +59 -0
  13. package/dist/src/collaboration_manager.js.map +1 -0
  14. package/dist/src/define_config.d.ts +20 -0
  15. package/dist/src/define_config.d.ts.map +1 -0
  16. package/dist/src/define_config.js +8 -0
  17. package/dist/src/define_config.js.map +1 -0
  18. package/dist/src/driver.d.ts +49 -0
  19. package/dist/src/driver.d.ts.map +1 -0
  20. package/dist/src/driver.js +2 -0
  21. package/dist/src/driver.js.map +1 -0
  22. package/dist/src/drivers/automerge/automerge_driver.d.ts +30 -0
  23. package/dist/src/drivers/automerge/automerge_driver.d.ts.map +1 -0
  24. package/dist/src/drivers/automerge/automerge_driver.js +209 -0
  25. package/dist/src/drivers/automerge/automerge_driver.js.map +1 -0
  26. package/dist/src/drivers/yjs/yjs_driver.d.ts +30 -0
  27. package/dist/src/drivers/yjs/yjs_driver.d.ts.map +1 -0
  28. package/dist/src/drivers/yjs/yjs_driver.js +232 -0
  29. package/dist/src/drivers/yjs/yjs_driver.js.map +1 -0
  30. package/dist/src/index.d.ts +9 -0
  31. package/dist/src/index.d.ts.map +1 -0
  32. package/dist/src/index.js +8 -0
  33. package/dist/src/index.js.map +1 -0
  34. package/dist/src/services/booted_app.d.ts +10 -0
  35. package/dist/src/services/booted_app.d.ts.map +1 -0
  36. package/dist/src/services/booted_app.js +42 -0
  37. package/dist/src/services/booted_app.js.map +1 -0
  38. package/dist/src/services/comment_service.d.ts +17 -0
  39. package/dist/src/services/comment_service.d.ts.map +1 -0
  40. package/dist/src/services/comment_service.js +53 -0
  41. package/dist/src/services/comment_service.js.map +1 -0
  42. package/dist/src/services/main.d.ts +6 -0
  43. package/dist/src/services/main.d.ts.map +1 -0
  44. package/dist/src/services/main.js +29 -0
  45. package/dist/src/services/main.js.map +1 -0
  46. package/dist/src/services/presence_service.d.ts +44 -0
  47. package/dist/src/services/presence_service.d.ts.map +1 -0
  48. package/dist/src/services/presence_service.js +103 -0
  49. package/dist/src/services/presence_service.js.map +1 -0
  50. package/dist/src/storage/file_system_storage.d.ts +24 -0
  51. package/dist/src/storage/file_system_storage.d.ts.map +1 -0
  52. package/dist/src/storage/file_system_storage.js +83 -0
  53. package/dist/src/storage/file_system_storage.js.map +1 -0
  54. package/dist/src/storage/in_memory_storage.d.ts +22 -0
  55. package/dist/src/storage/in_memory_storage.d.ts.map +1 -0
  56. package/dist/src/storage/in_memory_storage.js +50 -0
  57. package/dist/src/storage/in_memory_storage.js.map +1 -0
  58. package/dist/src/storage/lucid_storage.d.ts +41 -0
  59. package/dist/src/storage/lucid_storage.d.ts.map +1 -0
  60. package/dist/src/storage/lucid_storage.js +176 -0
  61. package/dist/src/storage/lucid_storage.js.map +1 -0
  62. package/dist/src/types.d.ts +121 -0
  63. package/dist/src/types.d.ts.map +1 -0
  64. package/dist/src/types.js +11 -0
  65. package/dist/src/types.js.map +1 -0
  66. package/dist/src/versioning.d.ts +9 -0
  67. package/dist/src/versioning.d.ts.map +1 -0
  68. package/dist/src/versioning.js +19 -0
  69. package/dist/src/versioning.js.map +1 -0
  70. package/dist/stubs/config/collaboration.stub +39 -0
  71. package/dist/stubs/main.d.ts +3 -0
  72. package/dist/stubs/main.d.ts.map +1 -0
  73. package/dist/stubs/main.js +4 -0
  74. package/dist/stubs/main.js.map +1 -0
  75. package/package.json +124 -0
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Tipos centrais da lib de colaboração.
3
+ *
4
+ * A abstração é document-first: um `CollabDocument` é identificado por nome
5
+ * (`researches/<id>/writing`, por exemplo) e o driver escolhido decide como
6
+ * sincronizar (Yjs/Hocuspocus ou Automerge). Tudo que depende do motor fica
7
+ * atrás das interfaces — o app consome apenas `CollaborationManager`.
8
+ */
9
+ /** Motor CRDT subjacente. */
10
+ export type CollaborationEngine = 'yjs' | 'automerge';
11
+ /**
12
+ * Âncora de um comentário — genérica por tipo de conteúdo.
13
+ * A lib persiste a âncora + lifecycle; quem sabe interpretá-la é o resolver
14
+ * registrado pelo app (texto → offsets, canvas → shapeId, mídia → timestamp).
15
+ */
16
+ export type CommentAnchor = {
17
+ kind: 'text-range';
18
+ start: number;
19
+ end: number;
20
+ selectedText: string;
21
+ } | {
22
+ kind: 'canvas-object';
23
+ shapeId: string;
24
+ relativeX: number;
25
+ relativeY: number;
26
+ } | {
27
+ kind: 'timestamp';
28
+ at: number;
29
+ end?: number;
30
+ };
31
+ /** Comentário persistido pela lib (thread + resolved + autor). */
32
+ export interface CollabComment {
33
+ id: string;
34
+ documentName: string;
35
+ /** Espaço do documento onde a âncora vive ('text', 'canvas', ...). */
36
+ space: string;
37
+ anchor: CommentAnchor;
38
+ body: string;
39
+ userId: string;
40
+ authorName?: string | null;
41
+ resolvedAt: string | null;
42
+ createdAt: string;
43
+ updatedAt: string | null;
44
+ }
45
+ /** Payload de autenticação anexado à conexão WebSocket. */
46
+ export interface CollabConnectionContext {
47
+ /** Id do usuário autenticado (o provider valida antes do handshake). */
48
+ userId: string;
49
+ /** Metadados livres (nome, avatar) pra presença. */
50
+ user?: {
51
+ name?: string;
52
+ avatarUrl?: string | null;
53
+ };
54
+ }
55
+ /** Resultado da autorização de leitura/escrita de um documento. */
56
+ export interface CollabPermission {
57
+ canRead: boolean;
58
+ /** Escrever no conteúdo do documento (editor central). */
59
+ canWrite: boolean;
60
+ /** Comentar (annotations laterais — não muda o texto). */
61
+ canComment: boolean;
62
+ }
63
+ /** Documento colaborativo carregado pelo driver. */
64
+ export interface LoadedCollabDocument {
65
+ /** Estado binário completo pra enviar a um cliente novo (update merge). */
66
+ state: Uint8Array;
67
+ /** Vetor de estado pra sync diferencial (Yjs: state vector; Automerge: heads). */
68
+ vector: Uint8Array;
69
+ }
70
+ /** Uma versão registrada no histórico do documento. */
71
+ export interface CollabVersion {
72
+ /** Referência opaca pro driver (snapshot Yjs / hash Automerge). */
73
+ id: string;
74
+ createdAt: string;
75
+ createdBy: string | null;
76
+ label: string | null;
77
+ /** Número sequencial amigável (1, 2, 3…). */
78
+ seq: number;
79
+ }
80
+ /** Estatísticas de diff entre duas versões. */
81
+ export interface CollabDiffSummary {
82
+ added: number;
83
+ removed: number;
84
+ }
85
+ /**
86
+ * Persistência de documentos + versões + comentários. O app hospedeiro
87
+ * implementa isso (banco, S3…) e a lib só conhece a interface.
88
+ */
89
+ export interface CollaborationStorage {
90
+ loadDocument(docName: string): Promise<{
91
+ state: Uint8Array;
92
+ } | null>;
93
+ saveDocument(docName: string, state: Uint8Array, meta?: Record<string, unknown>): Promise<void>;
94
+ listVersions(docName: string): Promise<CollabVersion[]>;
95
+ saveVersion(docName: string, version: CollabVersion, snapshot: Uint8Array): Promise<void>;
96
+ loadVersionSnapshot(docName: string, versionId: string): Promise<Uint8Array | null>;
97
+ /** Comentários de um documento (por espaço). */
98
+ listComments(docName: string, space?: string): Promise<CollabComment[]>;
99
+ saveComment(docName: string, comment: CollabComment): Promise<void>;
100
+ deleteComment(docName: string, commentId: string): Promise<void>;
101
+ }
102
+ /** Configuração do manager. */
103
+ export interface CollaborationConfig {
104
+ engine: CollaborationEngine;
105
+ /** Omitido = in-memory (só dev). O stub de config publica um default. */
106
+ storage?: CollaborationStorage;
107
+ /**
108
+ * Autorização por documento. Chamada no handshake (onAuthenticate) e a cada
109
+ * mudança de permissão relevante — retorna false pra derrubar a conexão.
110
+ */
111
+ authorize: (ctx: CollabConnectionContext, docName: string) => Promise<CollabPermission>;
112
+ /** Redis pra presença cross-instance (opcional em dev single-instance). */
113
+ redis?: {
114
+ url: string;
115
+ };
116
+ /** Porta/path do WS quando embutido no server HTTP do Adonis. */
117
+ path?: string;
118
+ /** Debounce de persistência em ms (default 2000). */
119
+ debounce?: number;
120
+ }
121
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Tipos centrais da lib de colaboração.
3
+ *
4
+ * A abstração é document-first: um `CollabDocument` é identificado por nome
5
+ * (`researches/<id>/writing`, por exemplo) e o driver escolhido decide como
6
+ * sincronizar (Yjs/Hocuspocus ou Automerge). Tudo que depende do motor fica
7
+ * atrás das interfaces — o app consome apenas `CollaborationManager`.
8
+ */
9
+ ;
10
+ export {};
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA4BF,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Metadados de versões compartilhados entre drivers — mesma semântica de
3
+ * histórico pro Automerge (nativo) e pro Yjs (snapshots).
4
+ */
5
+ import type { CollabVersion } from './types.js';
6
+ /** Próximo número sequencial a partir das versões existentes. */
7
+ export declare function seqVersions(existing: CollabVersion[]): number;
8
+ export declare function createVersionMetadata(createdBy: string | null, label: string | null, seq: number): CollabVersion;
9
+ //# sourceMappingURL=versioning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versioning.d.ts","sourceRoot":"","sources":["../../src/versioning.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,CAE7D;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,GAAG,EAAE,MAAM,GACV,aAAa,CAQf"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Metadados de versões compartilhados entre drivers — mesma semântica de
3
+ * histórico pro Automerge (nativo) e pro Yjs (snapshots).
4
+ */
5
+ import { randomUUID } from 'node:crypto';
6
+ /** Próximo número sequencial a partir das versões existentes. */
7
+ export function seqVersions(existing) {
8
+ return existing.reduce((max, version) => Math.max(max, version.seq), 0) + 1;
9
+ }
10
+ export function createVersionMetadata(createdBy, label, seq) {
11
+ return {
12
+ id: randomUUID(),
13
+ createdAt: new Date().toISOString(),
14
+ createdBy,
15
+ label,
16
+ seq,
17
+ };
18
+ }
19
+ //# sourceMappingURL=versioning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versioning.js","sourceRoot":"","sources":["../../src/versioning.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,iEAAiE;AACjE,MAAM,UAAU,WAAW,CAAC,QAAyB;IACnD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,SAAwB,EACxB,KAAoB,EACpB,GAAW;IAEX,OAAO;QACL,EAAE,EAAE,UAAU,EAAE;QAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,SAAS;QACT,KAAK;QACL,GAAG;KACJ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,39 @@
1
+ {{{
2
+ exports({ to: app.configPath('collaboration.ts') })
3
+ }}}
4
+ import { defineConfig } from '@adonis-agora/collaboration'
5
+
6
+ /**
7
+ * Configuration for @adonis-agora/collaboration.
8
+ *
9
+ * The engine picks the CRDT backend: 'yjs' (Hocuspocus sync server, default)
10
+ * or 'automerge' (native history). Documents are identified by name — e.g.
11
+ * `researches/<id>/writing` — and resolved by your `authorize` callback.
12
+ */
13
+ export default defineConfig({
14
+ engine: 'yjs',
15
+
16
+ /** WebSocket upgrade path on the Adonis HTTP server. */
17
+ path: '/collaboration',
18
+
19
+ /** Redis connection for cross-instance presence (omit for single-instance dev). */
20
+ // redisUrl: env.get('REDIS_URL'),
21
+
22
+ /** Persist debounce in ms (onStoreDocument). */
23
+ debounce: 2000,
24
+
25
+ /**
26
+ * Authorization per document. Return canRead/canWrite/canComment; the
27
+ * driver drops the connection when canRead is false.
28
+ */
29
+ async authorize(_ctx, _docName) {
30
+ throw new Error('Configure authorize() in config/collaboration.ts')
31
+ },
32
+
33
+ /**
34
+ * Storage backend for document states and versions. The default persists
35
+ * to disk (.collab-data) — swap for a Lucid/S3-backed implementation in
36
+ * production.
37
+ */
38
+ storage: undefined,
39
+ })
@@ -0,0 +1,3 @@
1
+ /** Absolute path to the published stubs directory (`dist/stubs/main.js`). */
2
+ export declare const stubsRoot: string;
3
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../stubs/main.ts"],"names":[],"mappings":"AAEA,6EAA6E;AAC7E,eAAO,MAAM,SAAS,QAAgD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { fileURLToPath } from 'node:url';
2
+
3
+ /** Absolute path to the published stubs directory (`dist/stubs/main.js`). */
4
+ export const stubsRoot = fileURLToPath(new URL('./', import.meta.url));
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../stubs/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,6EAA6E;AAC7E,MAAM,CAAC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,124 @@
1
+ {
2
+ "name": "@adonis-agora/collaboration",
3
+ "version": "0.1.1",
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
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/DavideCarvalho/adonis-agora-collaboration.git",
9
+ "directory": "packages/adonis"
10
+ },
11
+ "author": "Davi Carvalho <davi@goflip.ai>",
12
+ "type": "module",
13
+ "main": "./dist/src/index.js",
14
+ "types": "./dist/src/index.d.ts",
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/src/index.d.ts",
18
+ "import": "./dist/src/index.js",
19
+ "default": "./dist/src/index.js"
20
+ },
21
+ "./types": {
22
+ "types": "./dist/src/types.d.ts",
23
+ "import": "./dist/src/types.js",
24
+ "default": "./dist/src/types.js"
25
+ },
26
+ "./drivers/yjs": {
27
+ "types": "./dist/src/drivers/yjs/yjs_driver.d.ts",
28
+ "import": "./dist/src/drivers/yjs/yjs_driver.js",
29
+ "default": "./dist/src/drivers/yjs/yjs_driver.js"
30
+ },
31
+ "./drivers/automerge": {
32
+ "types": "./dist/src/drivers/automerge/automerge_driver.d.ts",
33
+ "import": "./dist/src/drivers/automerge/automerge_driver.js",
34
+ "default": "./dist/src/drivers/automerge/automerge_driver.js"
35
+ },
36
+ "./storage/file_system": {
37
+ "types": "./dist/src/storage/file_system_storage.d.ts",
38
+ "import": "./dist/src/storage/file_system_storage.js",
39
+ "default": "./dist/src/storage/file_system_storage.js"
40
+ },
41
+ "./storage/lucid": {
42
+ "types": "./dist/src/storage/lucid_storage.d.ts",
43
+ "import": "./dist/src/storage/lucid_storage.js",
44
+ "default": "./dist/src/storage/lucid_storage.js"
45
+ },
46
+ "./services/main": {
47
+ "types": "./dist/src/services/main.d.ts",
48
+ "import": "./dist/src/services/main.js",
49
+ "default": "./dist/src/services/main.js"
50
+ },
51
+ "./collaboration_provider": {
52
+ "types": "./dist/providers/collaboration_provider.d.ts",
53
+ "import": "./dist/providers/collaboration_provider.js",
54
+ "default": "./dist/providers/collaboration_provider.js"
55
+ },
56
+ "./configure": {
57
+ "types": "./dist/configure.d.ts",
58
+ "import": "./dist/configure.js",
59
+ "default": "./dist/configure.js"
60
+ }
61
+ },
62
+ "files": [
63
+ "dist/",
64
+ "README.md",
65
+ "CHANGELOG.md"
66
+ ],
67
+ "sideEffects": false,
68
+ "scripts": {
69
+ "build": "pnpm run clean && tsc -p tsconfig.build.json && pnpm run copy:stubs",
70
+ "check:dist": "node ../../scripts/assert-build-output.mjs dist src/index.js",
71
+ "clean": "rm -rf dist",
72
+ "copy:stubs": "mkdir -p dist/stubs/config && cp stubs/main.ts dist/stubs/main.js && cp stubs/config/collaboration.stub dist/stubs/config/collaboration.stub",
73
+ "prepack": "pnpm run check:dist",
74
+ "test": "vitest run --passWithNoTests",
75
+ "test:watch": "vitest",
76
+ "typecheck": "tsc -p tsconfig.json --noEmit"
77
+ },
78
+ "dependencies": {
79
+ "@automerge/automerge": "^3.4.1",
80
+ "@hocuspocus/server": "^4.6.0",
81
+ "@hocuspocus/transformer": "^4.6.0",
82
+ "ioredis": "^5.11.1",
83
+ "ws": "^8.18.0",
84
+ "y-protocols": "^1.0.7",
85
+ "yjs": "^13.6.27"
86
+ },
87
+ "peerDependencies": {
88
+ "@adonisjs/core": "^7.3.0",
89
+ "@adonisjs/lucid": "^22.4.0"
90
+ },
91
+ "peerDependenciesMeta": {
92
+ "@adonisjs/core": {
93
+ "optional": true
94
+ },
95
+ "@adonisjs/lucid": {
96
+ "optional": true
97
+ }
98
+ },
99
+ "devDependencies": {
100
+ "@adonisjs/assembler": "8.5.0",
101
+ "@adonisjs/core": "7.5.0",
102
+ "@adonisjs/lucid": "22.4.2",
103
+ "@swc/core": "1.15.47",
104
+ "@types/node": "22.20.1",
105
+ "@types/ws": "8.18.1",
106
+ "typescript": "5.9.3",
107
+ "unplugin-swc": "1.5.11",
108
+ "vitest": "3.2.7"
109
+ },
110
+ "engines": {
111
+ "node": ">=20.6.0"
112
+ },
113
+ "keywords": [
114
+ "adonisjs",
115
+ "adonis",
116
+ "crdt",
117
+ "yjs",
118
+ "automerge",
119
+ "collaboration",
120
+ "websocket",
121
+ "realtime",
122
+ "agora"
123
+ ]
124
+ }