@adonis-agora/collaboration 0.1.4 → 0.2.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 (110) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +172 -0
  3. package/dist/commands/collaboration_init.d.ts +26 -0
  4. package/dist/commands/collaboration_init.d.ts.map +1 -0
  5. package/dist/commands/collaboration_init.js +83 -0
  6. package/dist/commands/collaboration_init.js.map +1 -0
  7. package/dist/commands/commands.json +1 -0
  8. package/dist/commands/main.d.ts +16 -0
  9. package/dist/commands/main.d.ts.map +1 -0
  10. package/dist/commands/main.js +20 -0
  11. package/dist/commands/main.js.map +1 -0
  12. package/dist/commands/make_collab_document.d.ts +23 -0
  13. package/dist/commands/make_collab_document.d.ts.map +1 -0
  14. package/dist/commands/make_collab_document.js +75 -0
  15. package/dist/commands/make_collab_document.js.map +1 -0
  16. package/dist/configure.d.ts +3 -1
  17. package/dist/configure.d.ts.map +1 -1
  18. package/dist/configure.js +6 -1
  19. package/dist/configure.js.map +1 -1
  20. package/dist/providers/collaboration_provider.d.ts +6 -2
  21. package/dist/providers/collaboration_provider.d.ts.map +1 -1
  22. package/dist/providers/collaboration_provider.js +36 -17
  23. package/dist/providers/collaboration_provider.js.map +1 -1
  24. package/dist/src/auth/token.d.ts +59 -0
  25. package/dist/src/auth/token.d.ts.map +1 -0
  26. package/dist/src/auth/token.js +91 -0
  27. package/dist/src/auth/token.js.map +1 -0
  28. package/dist/src/codegen/documents_registry.d.ts +28 -0
  29. package/dist/src/codegen/documents_registry.d.ts.map +1 -0
  30. package/dist/src/codegen/documents_registry.js +50 -0
  31. package/dist/src/codegen/documents_registry.js.map +1 -0
  32. package/dist/src/codegen_init.d.ts +3 -0
  33. package/dist/src/codegen_init.d.ts.map +1 -0
  34. package/dist/src/codegen_init.js +45 -0
  35. package/dist/src/codegen_init.js.map +1 -0
  36. package/dist/src/collaboration_manager.d.ts +20 -11
  37. package/dist/src/collaboration_manager.d.ts.map +1 -1
  38. package/dist/src/collaboration_manager.js +46 -17
  39. package/dist/src/collaboration_manager.js.map +1 -1
  40. package/dist/src/define_config.d.ts +25 -6
  41. package/dist/src/define_config.d.ts.map +1 -1
  42. package/dist/src/define_config.js +2 -2
  43. package/dist/src/define_config.js.map +1 -1
  44. package/dist/src/driver.d.ts +26 -32
  45. package/dist/src/driver.d.ts.map +1 -1
  46. package/dist/src/drivers/automerge/automerge_driver.d.ts +7 -12
  47. package/dist/src/drivers/automerge/automerge_driver.d.ts.map +1 -1
  48. package/dist/src/drivers/automerge/automerge_driver.js +37 -75
  49. package/dist/src/drivers/automerge/automerge_driver.js.map +1 -1
  50. package/dist/src/drivers/partykit/partykit_driver.d.ts +54 -0
  51. package/dist/src/drivers/partykit/partykit_driver.d.ts.map +1 -0
  52. package/dist/src/drivers/partykit/partykit_driver.js +162 -0
  53. package/dist/src/drivers/partykit/partykit_driver.js.map +1 -0
  54. package/dist/src/drivers/shared.d.ts +17 -0
  55. package/dist/src/drivers/shared.d.ts.map +1 -0
  56. package/dist/src/drivers/shared.js +46 -0
  57. package/dist/src/drivers/shared.js.map +1 -0
  58. package/dist/src/drivers/yjs/yjs_driver.d.ts +18 -12
  59. package/dist/src/drivers/yjs/yjs_driver.d.ts.map +1 -1
  60. package/dist/src/drivers/yjs/yjs_driver.js +50 -94
  61. package/dist/src/drivers/yjs/yjs_driver.js.map +1 -1
  62. package/dist/src/http/types.d.ts +79 -0
  63. package/dist/src/http/types.d.ts.map +1 -0
  64. package/dist/src/http/types.js +8 -0
  65. package/dist/src/http/types.js.map +1 -0
  66. package/dist/src/index.d.ts +7 -3
  67. package/dist/src/index.d.ts.map +1 -1
  68. package/dist/src/index.js +7 -2
  69. package/dist/src/index.js.map +1 -1
  70. package/dist/src/routes.d.ts +29 -0
  71. package/dist/src/routes.d.ts.map +1 -0
  72. package/dist/src/routes.js +189 -0
  73. package/dist/src/routes.js.map +1 -0
  74. package/dist/src/services/booted_app.js +1 -1
  75. package/dist/src/services/booted_app.js.map +1 -1
  76. package/dist/src/services/comment_service.d.ts +5 -4
  77. package/dist/src/services/comment_service.d.ts.map +1 -1
  78. package/dist/src/services/comment_service.js +5 -4
  79. package/dist/src/services/comment_service.js.map +1 -1
  80. package/dist/src/services/main.js +2 -2
  81. package/dist/src/services/main.js.map +1 -1
  82. package/dist/src/storage/file_system_storage.d.ts +2 -2
  83. package/dist/src/storage/file_system_storage.js +2 -2
  84. package/dist/src/storage/in_memory_storage.d.ts +3 -3
  85. package/dist/src/storage/in_memory_storage.js +3 -3
  86. package/dist/src/storage/lucid_storage.d.ts +9 -8
  87. package/dist/src/storage/lucid_storage.d.ts.map +1 -1
  88. package/dist/src/storage/lucid_storage.js +13 -12
  89. package/dist/src/storage/lucid_storage.js.map +1 -1
  90. package/dist/src/types.d.ts +62 -35
  91. package/dist/src/types.d.ts.map +1 -1
  92. package/dist/src/types.js +5 -6
  93. package/dist/src/types.js.map +1 -1
  94. package/dist/src/versioning.d.ts +3 -3
  95. package/dist/src/versioning.d.ts.map +1 -1
  96. package/dist/src/versioning.js +3 -3
  97. package/dist/src/versioning.js.map +1 -1
  98. package/dist/stubs/collaboration/document_types.stub +41 -0
  99. package/dist/stubs/collaboration/documents_dir.stub +3 -0
  100. package/dist/stubs/collaboration/migrations/collab_comments.stub +29 -0
  101. package/dist/stubs/collaboration/migrations/collab_documents.stub +23 -0
  102. package/dist/stubs/collaboration/migrations/collab_versions.stub +26 -0
  103. package/dist/stubs/partykit/worker/package.json.stub +21 -0
  104. package/dist/stubs/partykit/worker/party.ts.stub +175 -0
  105. package/dist/stubs/partykit/worker/partykit.toml.stub +14 -0
  106. package/package.json +19 -4
  107. package/dist/src/services/presence_service.d.ts +0 -44
  108. package/dist/src/services/presence_service.d.ts.map +0 -1
  109. package/dist/src/services/presence_service.js +0 -103
  110. package/dist/src/services/presence_service.js.map +0 -1
@@ -0,0 +1,79 @@
1
+ import type { AuthorizeFn } from '../auth/token.js';
2
+ /**
3
+ * Minimal HttpContext contract consumed by the built-in route handlers.
4
+ * Intentionally structural — keeps the package decoupled from the full
5
+ * @adonisjs/core/http surface across versions.
6
+ */
7
+ export interface CollabHttpContext {
8
+ request: {
9
+ qs(): Record<string, unknown>;
10
+ params: Record<string, unknown>;
11
+ body<T = Record<string, unknown>>(): T;
12
+ raw(): ArrayBuffer | undefined;
13
+ header(name: string): string | undefined;
14
+ };
15
+ response: {
16
+ status(code: number): {
17
+ json(payload: unknown): unknown;
18
+ };
19
+ json(payload: unknown): unknown;
20
+ send(payload: unknown): unknown;
21
+ noContent(): unknown;
22
+ header(name: string, value: string): unknown;
23
+ };
24
+ /** Present when @adonisjs/auth is installed and its middleware ran. */
25
+ auth?: {
26
+ user?: unknown;
27
+ };
28
+ }
29
+ /** Authenticated user resolved by the token endpoint. */
30
+ export interface CollabRouteUser {
31
+ id: string;
32
+ name?: string | null;
33
+ }
34
+ /** User resolver — pluggable via config or manual route mode. */
35
+ export type ResolveUserFn = (ctx: CollabHttpContext) => Promise<CollabRouteUser | null> | CollabRouteUser | null;
36
+ /** Internal error signaling a 401 without leaking details. */
37
+ export declare class CollabUnauthorizedError extends Error {
38
+ constructor(message?: string);
39
+ }
40
+ /**
41
+ * CollaborationManager surface consumed by the built-in routes.
42
+ * Structural: accepts the real manager and test fakes alike.
43
+ */
44
+ export interface CollabManagerLike {
45
+ getDocumentState(docName: string): Promise<Uint8Array>;
46
+ createVersion(docName: string, createdBy: string | null, label: string | null): Promise<unknown>;
47
+ listVersions(docName: string): Promise<unknown[]>;
48
+ restoreVersion(docName: string, versionId: string, restoredBy: string | null): Promise<void>;
49
+ persistDocument?(docName: string, state: Uint8Array): Promise<void>;
50
+ comments: {
51
+ list(docName: string, space?: string): Promise<unknown[]>;
52
+ create(docName: string, comment: Record<string, unknown>): Promise<unknown>;
53
+ resolve(docName: string, commentId: string, resolved: boolean): Promise<unknown>;
54
+ remove(docName: string, commentId: string): Promise<boolean>;
55
+ };
56
+ }
57
+ /**
58
+ * Runtime pieces resolved once and captured by the route handlers.
59
+ * The provider fills these from config; manual mode may omit any and the
60
+ * lib falls back to reading `config/collaboration.ts` at request time.
61
+ */
62
+ export interface CollabRoutesRuntime {
63
+ prefix?: string;
64
+ middleware?: unknown[];
65
+ resolveUser?: ResolveUserFn;
66
+ /** Enforced on token issue — the permission seam must hold on REST too. */
67
+ authorize?: AuthorizeFn;
68
+ /** Manager accessor; defaults to the booted container singleton. */
69
+ manager?: CollabManagerLike | (() => Promise<CollabManagerLike> | CollabManagerLike);
70
+ engine?: string;
71
+ /** WS path of the embedded Hocuspocus server (default '/collaboration'). */
72
+ path?: string;
73
+ partykit?: {
74
+ roomHost?: string;
75
+ jwtSecret?: string;
76
+ party?: string;
77
+ };
78
+ }
79
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/http/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /** Internal error signaling a 401 without leaking details. */
2
+ export class CollabUnauthorizedError extends Error {
3
+ constructor(message = 'unauthenticated') {
4
+ super(message);
5
+ this.name = 'CollabUnauthorizedError';
6
+ }
7
+ }
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/http/types.ts"],"names":[],"mappings":"AAqCA,8DAA8D;AAC9D,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD,YAAY,OAAO,GAAG,iBAAiB;QACrC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF"}
@@ -1,11 +1,15 @@
1
1
  export { CollaborationManager } from './collaboration_manager.js';
2
2
  export { YjsDriver } from './drivers/yjs/yjs_driver.js';
3
3
  export { AutomergeDriver } from './drivers/automerge/automerge_driver.js';
4
- export { CommentService } from './services/comment_service.js';
5
- export { PresenceService, type PresenceMember } from './services/presence_service.js';
4
+ export { PartyKitDriver, PartyKitRoomError, } from './drivers/partykit/partykit_driver.js';
5
+ export { buildWsUrl, CollabForbiddenError, issueToken, parseLegacyToken, signPartyKitToken, verifyPartyKitToken, type AuthorizeFn, type IssuedToken, type TokenIssuerConfig, } from './auth/token.js';
6
6
  export { LucidStorage } from './storage/lucid_storage.js';
7
7
  export { InMemoryCollaborationStorage } from './storage/in_memory_storage.js';
8
8
  export { FileSystemStorage } from './storage/file_system_storage.js';
9
9
  export { defineConfig, type CollaborationAppConfig, } from './define_config.js';
10
- export type { CollabComment, CommentAnchor, CollaborationEngine, CollaborationConfig, CollaborationStorage, CollabConnectionContext, CollabPermission, CollabVersion, CollabDiffSummary, } from './types.js';
10
+ export { collaborationRoutes, defaultResolveUser, secretsMatch } from './routes.js';
11
+ export type { CollabHttpContext, CollabManagerLike, CollabRouteUser, CollabRoutesRuntime, ResolveUserFn, } from './http/types.js';
12
+ export { CollabUnauthorizedError } from './http/types.js';
13
+ export type { CollabComment, CommentAnchor, CollaborationEngine, CollaborationConfig, CollaborationStorage, CollabConnectionContext, CollabPermission, CollabVersion, CollabDiffSummary, PartyKitConfig, } from './types.js';
14
+ export { configure } from '../configure.js';
11
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EACL,YAAY,EACZ,KAAK,sBAAsB,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EACL,cAAc,EACd,iBAAiB,GAClB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,UAAU,EACV,oBAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EACL,YAAY,EACZ,KAAK,sBAAsB,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACpF,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,YAAY,EACV,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,cAAc,GACf,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/src/index.js CHANGED
@@ -1,10 +1,15 @@
1
1
  export { CollaborationManager } from './collaboration_manager.js';
2
2
  export { YjsDriver } from './drivers/yjs/yjs_driver.js';
3
3
  export { AutomergeDriver } from './drivers/automerge/automerge_driver.js';
4
- export { CommentService } from './services/comment_service.js';
5
- export { PresenceService } from './services/presence_service.js';
4
+ export { PartyKitDriver, PartyKitRoomError, } from './drivers/partykit/partykit_driver.js';
5
+ export { buildWsUrl, CollabForbiddenError, issueToken, parseLegacyToken, signPartyKitToken, verifyPartyKitToken, } from './auth/token.js';
6
6
  export { LucidStorage } from './storage/lucid_storage.js';
7
7
  export { InMemoryCollaborationStorage } from './storage/in_memory_storage.js';
8
8
  export { FileSystemStorage } from './storage/file_system_storage.js';
9
9
  export { defineConfig, } from './define_config.js';
10
+ export { collaborationRoutes, defaultResolveUser, secretsMatch } from './routes.js';
11
+ export { CollabUnauthorizedError } from './http/types.js';
12
+ // Root-level export so `node ace configure @adonis-agora/collaboration`
13
+ // finds the hook without hitting the ./configure subpath.
14
+ export { configure } from '../configure.js';
10
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAuB,MAAM,gCAAgC,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EACL,YAAY,GAEb,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EACL,cAAc,EACd,iBAAiB,GAClB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,UAAU,EACV,oBAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,GAIpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EACL,YAAY,GAEb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAc1D,wEAAwE;AACxE,0DAA0D;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { type CollabManagerLike, type CollabRoutesRuntime } from './http/types.js';
2
+ /** Timing-safe comparison for shared secrets. */
3
+ export declare function secretsMatch(received: string | undefined, expected: string | undefined): boolean;
4
+ /** Minimal structural contract satisfied by the Adonis Router. */
5
+ export interface CollabRouteGroupContract {
6
+ prefix(prefix: string): this;
7
+ middleware(middleware: unknown[]): this;
8
+ }
9
+ export interface CollaborationRouterContract {
10
+ group(callback: () => void): CollabRouteGroupContract;
11
+ get(pattern: string, handler: unknown): unknown;
12
+ post(pattern: string, handler: unknown): unknown;
13
+ patch(pattern: string, handler: unknown): unknown;
14
+ delete(pattern: string, handler: unknown): unknown;
15
+ }
16
+ /**
17
+ * Registers every collaboration REST endpoint under an optional prefix
18
+ * (default `/collaboration`).
19
+ */
20
+ export declare function collaborationRoutes(router: CollaborationRouterContract, options: CollabRoutesRuntime & {
21
+ managerFallback?: () => Promise<CollabManagerLike>;
22
+ }): Promise<void>;
23
+ /**
24
+ * Default auth resolution: read `ctx.auth.user` (populated by @adonisjs/auth
25
+ * when its middleware ran). Throws otherwise so unprotected deployments fail
26
+ * closed with a clear message.
27
+ */
28
+ export declare const defaultResolveUser: NonNullable<CollabRoutesRuntime['resolveUser']>;
29
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/routes.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,iBAAiB,EAEtB,KAAK,mBAAmB,EAEzB,MAAM,iBAAiB,CAAC;AA0FzB,iDAAiD;AACjD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAKhG;AAuID,kEAAkE;AAClE,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CACzC;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,wBAAwB,CAAC;IACtD,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;IACjD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;IAClD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;CACpD;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,2BAA2B,EACnC,OAAO,EAAE,mBAAmB,GAAG;IAAE,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,CAAA;CAAE,GACpF,OAAO,CAAC,IAAI,CAAC,CAyBf;AAcD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAQ9E,CAAC"}
@@ -0,0 +1,189 @@
1
+ import { createHmac, timingSafeEqual } from 'node:crypto';
2
+ import { CollabForbiddenError, issueToken } from './auth/token.js';
3
+ import { CollabUnauthorizedError, } from './http/types.js';
4
+ let cachedAppConfig;
5
+ async function readAppConfig() {
6
+ if (cachedAppConfig)
7
+ return cachedAppConfig;
8
+ try {
9
+ // Dynamic + optional: unavailable in plain unit tests.
10
+ const app = (await import('@adonisjs/core/services/app')).default;
11
+ cachedAppConfig = app.config.get('collaboration', {});
12
+ }
13
+ catch {
14
+ cachedAppConfig = {};
15
+ }
16
+ return cachedAppConfig;
17
+ }
18
+ async function resolveRuntime(options, managerFallback) {
19
+ const appConfig = (await readAppConfig());
20
+ const managerFn = () => {
21
+ const provided = options.manager;
22
+ if (provided) {
23
+ return typeof provided === 'function'
24
+ ? Promise.resolve(provided())
25
+ : Promise.resolve(provided);
26
+ }
27
+ if (managerFallback)
28
+ return managerFallback();
29
+ // Default: booted container singleton via services/main.
30
+ return import('./services/main.js').then((module) => module.default.current);
31
+ };
32
+ const appPartykit = appConfig.partykit;
33
+ return {
34
+ engine: options.engine ?? appConfig.engine ?? 'yjs',
35
+ path: options.path ?? appConfig.path ?? '/collaboration',
36
+ partykit: options.partykit ?? appPartykit ?? {},
37
+ manager: managerFn,
38
+ ...(options.authorize ? { authorize: options.authorize } : {}),
39
+ };
40
+ }
41
+ /** Timing-safe comparison for shared secrets. */
42
+ export function secretsMatch(received, expected) {
43
+ if (!received || !expected)
44
+ return false;
45
+ const digest = (value) => createHmac('sha256', 'collab-worker-secret').update(value).digest();
46
+ return timingSafeEqual(digest(received), digest(expected));
47
+ }
48
+ /* ───────────────────────────── handlers ───────────────────────────── */
49
+ async function handleToken(ctx, runtime, userResolver) {
50
+ const docName = ctx.request.qs().doc;
51
+ if (!docName || typeof docName !== 'string') {
52
+ return ctx.response.status(400).json({ error: 'query param "doc" is required' });
53
+ }
54
+ let user;
55
+ try {
56
+ user = await userResolver(ctx);
57
+ }
58
+ catch (error) {
59
+ if (error instanceof CollabUnauthorizedError) {
60
+ return ctx.response.status(401).json({ error: error.message });
61
+ }
62
+ throw error;
63
+ }
64
+ if (!user) {
65
+ return ctx.response.status(401).json({ error: 'unauthenticated' });
66
+ }
67
+ try {
68
+ return await issueToken({ engine: runtime.engine, path: runtime.path, partykit: runtime.partykit }, user, docName, runtime.authorize);
69
+ }
70
+ catch (error) {
71
+ if (error instanceof CollabForbiddenError) {
72
+ return ctx.response.status(403).json({ error: error.message });
73
+ }
74
+ throw error;
75
+ }
76
+ }
77
+ async function handleListComments(ctx, runtime) {
78
+ const { doc, space } = ctx.request.qs();
79
+ const manager = await runtime.manager();
80
+ return manager.comments.list(String(doc), space);
81
+ }
82
+ async function handleCreateComment(ctx, runtime) {
83
+ const body = ctx.request.body();
84
+ const manager = await runtime.manager();
85
+ return manager.comments.create(body.docName, {
86
+ space: body.space,
87
+ anchor: body.anchor,
88
+ body: body.body,
89
+ userId: body.userId,
90
+ authorName: body.authorName ?? null,
91
+ });
92
+ }
93
+ async function handleResolveComment(ctx, runtime) {
94
+ const doc = String(ctx.request.qs().doc ?? '');
95
+ const commentId = String(ctx.request.params?.id ?? '');
96
+ const resolved = Boolean(ctx.request.body().resolved ?? true);
97
+ const manager = await runtime.manager();
98
+ return manager.comments.resolve(doc, commentId, resolved);
99
+ }
100
+ async function handleDeleteComment(ctx, runtime) {
101
+ const doc = String(ctx.request.qs().doc ?? '');
102
+ const commentId = String(ctx.request.params?.id ?? '');
103
+ const manager = await runtime.manager();
104
+ return { deleted: await manager.comments.remove(doc, commentId) };
105
+ }
106
+ async function handleListVersions(ctx, runtime) {
107
+ const doc = String(ctx.request.qs().doc ?? '');
108
+ const manager = await runtime.manager();
109
+ return manager.listVersions(doc);
110
+ }
111
+ async function handleCreateVersion(ctx, runtime) {
112
+ const body = ctx.request.body();
113
+ const manager = await runtime.manager();
114
+ return manager.createVersion(body.docName, body.userId ?? null, body.label ?? null);
115
+ }
116
+ async function handleRestoreVersion(ctx, runtime) {
117
+ const body = ctx.request.body();
118
+ const manager = await runtime.manager();
119
+ await manager.restoreVersion(body.docName, body.versionId, null);
120
+ return ctx.response.noContent();
121
+ }
122
+ async function handleGetState(ctx, runtime) {
123
+ const doc = String(ctx.request.qs().doc ?? '');
124
+ if (!doc) {
125
+ return ctx.response.status(400).json({ error: 'query param "doc" is required' });
126
+ }
127
+ const manager = await runtime.manager();
128
+ const state = await manager.getDocumentState(doc);
129
+ ctx.response.header('content-type', 'application/octet-stream');
130
+ return ctx.response.send(Buffer.from(state));
131
+ }
132
+ async function handleSaveState(ctx, runtime) {
133
+ const doc = String(ctx.request.qs().doc ?? '');
134
+ if (!doc) {
135
+ return ctx.response.status(400).json({ error: 'query param "doc" is required' });
136
+ }
137
+ const expectedSecret = runtime.partykit.jwtSecret;
138
+ if (!secretsMatch(ctx.request.header('x-collab-worker-secret'), expectedSecret)) {
139
+ return ctx.response.status(403).json({ error: 'invalid worker secret' });
140
+ }
141
+ const manager = await runtime.manager();
142
+ if (!manager.persistDocument) {
143
+ return ctx.response.status(501).json({
144
+ error: 'persisting worker snapshots requires a configured storage backend',
145
+ });
146
+ }
147
+ const raw = ctx.request.raw();
148
+ await manager.persistDocument(doc, new Uint8Array(raw ?? new ArrayBuffer(0)));
149
+ return ctx.response.noContent();
150
+ }
151
+ /**
152
+ * Registers every collaboration REST endpoint under an optional prefix
153
+ * (default `/collaboration`).
154
+ */
155
+ export async function collaborationRoutes(router, options) {
156
+ const runtime = await resolveRuntime(options, options.managerFallback);
157
+ router
158
+ .group(() => {
159
+ registerRoute(router, 'get', '/token', (ctx) => handleToken(ctx, runtime, options.resolveUser ?? defaultResolveUser));
160
+ registerRoute(router, 'get', '/comments', (ctx) => handleListComments(ctx, runtime));
161
+ registerRoute(router, 'post', '/comments', (ctx) => handleCreateComment(ctx, runtime));
162
+ registerRoute(router, 'patch', '/comments/:id', (ctx) => handleResolveComment(ctx, runtime));
163
+ registerRoute(router, 'delete', '/comments/:id', (ctx) => handleDeleteComment(ctx, runtime));
164
+ registerRoute(router, 'get', '/versions', (ctx) => handleListVersions(ctx, runtime));
165
+ registerRoute(router, 'post', '/versions', (ctx) => handleCreateVersion(ctx, runtime));
166
+ registerRoute(router, 'post', '/versions/restore', (ctx) => handleRestoreVersion(ctx, runtime));
167
+ registerRoute(router, 'get', '/state', (ctx) => handleGetState(ctx, runtime));
168
+ registerRoute(router, 'post', '/state', (ctx) => handleSaveState(ctx, runtime));
169
+ })
170
+ .prefix(options.prefix ?? '/collaboration')
171
+ .middleware([...(options.middleware ?? [])]);
172
+ }
173
+ /** Minimal structural registration — keeps the Adonis Router out of our types. */
174
+ function registerRoute(router, method, pattern, handler) {
175
+ router[method](pattern, handler);
176
+ }
177
+ /**
178
+ * Default auth resolution: read `ctx.auth.user` (populated by @adonisjs/auth
179
+ * when its middleware ran). Throws otherwise so unprotected deployments fail
180
+ * closed with a clear message.
181
+ */
182
+ export const defaultResolveUser = (ctx) => {
183
+ const user = ctx.auth?.user;
184
+ if (!user || user.id === undefined || user.id === null) {
185
+ throw new CollabUnauthorizedError('no authenticated user on context — protect these routes with your auth middleware or provide routes.resolveUser in config/collaboration.ts');
186
+ }
187
+ return { id: String(user.id), name: user.name ?? null };
188
+ };
189
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/routes.ts"],"names":[],"mappings":"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"}
@@ -33,7 +33,7 @@ export function whenBootedApp(timeoutMs = DEFAULT_BOOTED_APP_TIMEOUT_MS) {
33
33
  setTimeout(() => {
34
34
  resolveBootedApp({
35
35
  get booted() {
36
- throw new Error('@adonis-agora/collaboration: services/main aguardando boot — instale o provider com `node ace configure @adonis-agora/collaboration`');
36
+ throw new Error('@adonis-agora/collaboration: services/main waiting for boot — install the provider with `node ace configure @adonis-agora/collaboration`');
37
37
  },
38
38
  });
39
39
  }, timeoutMs);
@@ -1 +1 @@
1
- {"version":3,"file":"booted_app.js","sourceRoot":"","sources":["../../../src/services/booted_app.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,IAAI,SAAyC,CAAC;AAC9C,IAAI,gBAAmD,CAAC;AACxD,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAqB,CAAC,OAAO,EAAE,EAAE;IACnE,gBAAgB,GAAG,OAAO,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,MAAM,UAAU,YAAY,CAAC,GAAuB;IAClD,IAAI,SAAS;QAAE,OAAO;IACtB,SAAS,GAAG,GAAG,CAAC;IAChB,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,8EAA8E;AAC9E,MAAM,6BAA6B,GAAG,KAAK,CAAC;AAE5C;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,SAAS,GAAG,6BAA6B;IAEzC,IAAI,SAAS;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEjD,UAAU,CAAC,GAAG,EAAE;QACd,gBAAgB,CAAC;YACf,IAAI,MAAM;gBACR,MAAM,IAAI,KAAK,CACb,sIAAsI,CACvI,CAAC;YACJ,CAAC;SAC+B,CAAC,CAAC;IACtC,CAAC,EAAE,SAAS,CAAC,CAAC;IAEd,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"booted_app.js","sourceRoot":"","sources":["../../../src/services/booted_app.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,IAAI,SAAyC,CAAC;AAC9C,IAAI,gBAAmD,CAAC;AACxD,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAqB,CAAC,OAAO,EAAE,EAAE;IACnE,gBAAgB,GAAG,OAAO,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,MAAM,UAAU,YAAY,CAAC,GAAuB;IAClD,IAAI,SAAS;QAAE,OAAO;IACtB,SAAS,GAAG,GAAG,CAAC;IAChB,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,8EAA8E;AAC9E,MAAM,6BAA6B,GAAG,KAAK,CAAC;AAE5C;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,SAAS,GAAG,6BAA6B;IAEzC,IAAI,SAAS;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEjD,UAAU,CAAC,GAAG,EAAE;QACd,gBAAgB,CAAC;YACf,IAAI,MAAM;gBACR,MAAM,IAAI,KAAK,CACb,0IAA0I,CAC3I,CAAC;YACJ,CAAC;SAC+B,CAAC,CAAC;IACtC,CAAC,EAAE,SAAS,CAAC,CAAC;IAEd,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
@@ -1,10 +1,11 @@
1
1
  import type { CollabComment, CollaborationStorage } from '../types.js';
2
2
  /**
3
- * Serviço de comentários ancorados — genérico por tipo de conteúdo.
3
+ * Anchored comments service — generic over content type.
4
4
  *
5
- * A lib é dona do lifecycle (criar, resolver/reabrir, remover) e da âncora
6
- * (CommentAnchor). Quem interpreta a âncora é o resolver do app — a lib não
7
- * sabe o que é um canvas tldraw nem offsets de texto; só persiste e ordena.
5
+ * The library owns the lifecycle (create, resolve/reopen, remove) and the
6
+ * anchor (CommentAnchor). Interpreting the anchor is up to the app's resolver —
7
+ * the library knows nothing about tldraw canvases or text offsets; it only
8
+ * persists and sorts.
8
9
  */
9
10
  export declare class CommentService {
10
11
  private storage;
@@ -1 +1 @@
1
- {"version":3,"file":"comment_service.d.ts","sourceRoot":"","sources":["../../../src/services/comment_service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEvE;;;;;;GAMG;AACH,qBAAa,cAAc;IACb,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,oBAAoB;IAE3C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAK/D,MAAM,CACV,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC,GAC5E,OAAO,CAAC,aAAa,CAAC;IAcnB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAc7F,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAOnE"}
1
+ {"version":3,"file":"comment_service.d.ts","sourceRoot":"","sources":["../../../src/services/comment_service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEvE;;;;;;;GAOG;AACH,qBAAa,cAAc;IACb,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,oBAAoB;IAE3C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAK/D,MAAM,CACV,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC,GAC5E,OAAO,CAAC,aAAa,CAAC;IAcnB,OAAO,CACX,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAc1B,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAOnE"}
@@ -1,10 +1,11 @@
1
1
  import { randomUUID } from 'node:crypto';
2
2
  /**
3
- * Serviço de comentários ancorados — genérico por tipo de conteúdo.
3
+ * Anchored comments service — generic over content type.
4
4
  *
5
- * A lib é dona do lifecycle (criar, resolver/reabrir, remover) e da âncora
6
- * (CommentAnchor). Quem interpreta a âncora é o resolver do app — a lib não
7
- * sabe o que é um canvas tldraw nem offsets de texto; só persiste e ordena.
5
+ * The library owns the lifecycle (create, resolve/reopen, remove) and the
6
+ * anchor (CommentAnchor). Interpreting the anchor is up to the app's resolver —
7
+ * the library knows nothing about tldraw canvases or text offsets; it only
8
+ * persists and sorts.
8
9
  */
9
10
  export class CommentService {
10
11
  storage;
@@ -1 +1 @@
1
- {"version":3,"file":"comment_service.js","sourceRoot":"","sources":["../../../src/services/comment_service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC;;;;;;GAMG;AACH,MAAM,OAAO,cAAc;IACL;IAApB,YAAoB,OAA6B;QAA7B,YAAO,GAAP,OAAO,CAAsB;IAAG,CAAC;IAErD,KAAK,CAAC,IAAI,CAAC,OAAe,EAAE,KAAc;QACxC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACjE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,MAAM,CACV,OAAe,EACf,OAA6E;QAE7E,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,OAAO,GAAkB;YAC7B,GAAG,OAAO;YACV,YAAY,EAAE,OAAO;YACrB,EAAE,EAAE,UAAU,EAAE;YAChB,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,IAAI;SAChB,CAAC;QACF,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAe,EAAE,SAAiB,EAAE,QAAiB;QACjE,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,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAEzB,MAAM,OAAO,GAAkB;YAC7B,GAAG,MAAM;YACT,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;YACtD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QACF,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,SAAiB;QAC7C,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,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC1B,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
1
+ {"version":3,"file":"comment_service.js","sourceRoot":"","sources":["../../../src/services/comment_service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC;;;;;;;GAOG;AACH,MAAM,OAAO,cAAc;IACL;IAApB,YAAoB,OAA6B;QAA7B,YAAO,GAAP,OAAO,CAAsB;IAAG,CAAC;IAErD,KAAK,CAAC,IAAI,CAAC,OAAe,EAAE,KAAc;QACxC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACjE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,MAAM,CACV,OAAe,EACf,OAA6E;QAE7E,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,OAAO,GAAkB;YAC7B,GAAG,OAAO;YACV,YAAY,EAAE,OAAO;YACrB,EAAE,EAAE,UAAU,EAAE;YAChB,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,IAAI;SAChB,CAAC;QACF,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,OAAO,CACX,OAAe,EACf,SAAiB,EACjB,QAAiB;QAEjB,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,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAEzB,MAAM,OAAO,GAAkB;YAC7B,GAAG,MAAM;YACT,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;YACtD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QACF,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,SAAiB;QAC7C,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,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC1B,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -8,7 +8,7 @@ import { whenBootedApp } from './booted_app.js';
8
8
  * import collaboration from '@adonis-agora/collaboration/services/main'
9
9
  *
10
10
  * const text = await collaboration.getDocumentText('researches/<id>/writing')
11
- * const version = await collaboration.createVersion(docName, userId, 'antes da revisão')
11
+ * const version = await collaboration.createVersion(docName, userId, 'before review')
12
12
  * ```
13
13
  */
14
14
  let manager;
@@ -21,7 +21,7 @@ await app.booted(async () => {
21
21
  export default {
22
22
  get current() {
23
23
  if (!manager) {
24
- throw new Error('CollaborationManager ainda não inicializou — aguarde o boot do app ou instale o provider');
24
+ throw new Error('CollaborationManager has not been initialized yet — wait for the app boot or install the provider');
25
25
  }
26
26
  return manager;
27
27
  },
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/services/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;;;;;;GAUG;AACH,IAAI,OAA6B,CAAC;AAElC,MAAM,GAAG,GAAG,MAAM,aAAa,EAAE,CAAC;AAClC,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;IAC1B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAyB,eAAe,EAAE,EAAW,CAAC,CAAC;IACpF,OAAO,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACzD,KAAK,MAAM,CAAC;AACd,CAAC,CAAC,CAAC;AAEH,eAAe;IACb,IAAI,OAAO;QACT,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,0FAA0F,CAC3F,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/services/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;;;;;;GAUG;AACH,IAAI,OAA6B,CAAC;AAElC,MAAM,GAAG,GAAG,MAAM,aAAa,EAAE,CAAC;AAClC,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;IAC1B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAyB,eAAe,EAAE,EAAW,CAAC,CAAC;IACpF,OAAO,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACzD,KAAK,MAAM,CAAC;AACd,CAAC,CAAC,CAAC;AAEH,eAAe;IACb,IAAI,OAAO;QACT,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,mGAAmG,CACpG,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type { CollabComment, CollabVersion, CollaborationStorage } from '../types.js';
2
2
  /**
3
- * Storage em disco pra desenvolvimento local da lib (um arquivo por doc +
4
- * um por versão). Em produção use o LucidStorage sobre Postgres.
3
+ * Disk storage for local development of the library (one file per doc +
4
+ * one per version). In production use LucidStorage on top of Postgres.
5
5
  */
6
6
  export declare class FileSystemStorage implements CollaborationStorage {
7
7
  private baseDir;
@@ -1,8 +1,8 @@
1
1
  import { mkdir, readFile, writeFile } from 'node:fs/promises';
2
2
  import { join } from 'node:path';
3
3
  /**
4
- * Storage em disco pra desenvolvimento local da lib (um arquivo por doc +
5
- * um por versão). Em produção use o LucidStorage sobre Postgres.
4
+ * Disk storage for local development of the library (one file per doc +
5
+ * one per version). In production use LucidStorage on top of Postgres.
6
6
  */
7
7
  export class FileSystemStorage {
8
8
  baseDir;
@@ -1,8 +1,8 @@
1
1
  import type { CollabComment, CollabVersion, CollaborationStorage } from '../types.js';
2
2
  /**
3
- * Storage em memória — fallback de desenvolvimento quando o app não configura
4
- * `storage` (nada sobrevive a um restart). Produção SEMPRE passa um storage
5
- * persistente (Postgres/S3).
3
+ * In-memory storage — development fallback when the app doesn't configure
4
+ * `storage` (nothing survives a restart). Production ALWAYS passes persistent
5
+ * storage (Postgres/S3).
6
6
  */
7
7
  export declare class InMemoryCollaborationStorage implements CollaborationStorage {
8
8
  private docs;
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Storage em memória — fallback de desenvolvimento quando o app não configura
3
- * `storage` (nada sobrevive a um restart). Produção SEMPRE passa um storage
4
- * persistente (Postgres/S3).
2
+ * In-memory storage — development fallback when the app doesn't configure
3
+ * `storage` (nothing survives a restart). Production ALWAYS passes persistent
4
+ * storage (Postgres/S3).
5
5
  */
6
6
  export class InMemoryCollaborationStorage {
7
7
  docs = new Map();
@@ -1,17 +1,18 @@
1
1
  import type { CollabComment, CollabVersion, CollaborationStorage } from '../types.js';
2
2
  /**
3
- * Contrato estrutural mínimo da conexão lucid — evita o dual-package do
4
- * @adonisjs/lucid (app e lib podem resolver cópias com TS diferentes).
3
+ * Minimal structural contract for the lucid connection — avoids the
4
+ * dual-package issue of @adonisjs/lucid (app and library may resolve copies
5
+ * with different TS versions).
5
6
  */
6
7
  export interface LucidConnectionLike {
7
8
  connection(name?: string): unknown;
8
9
  }
9
10
  /**
10
- * Storage Lucid oficial — persiste docs (estado binário), versões e
11
- * comentários ancorados em tabelas do banco do app.
11
+ * Official Lucid storage — persists docs (binary state), versions and
12
+ * anchored comments in tables of the app's database.
12
13
  *
13
- * As tabelas são criadas no primeiro uso (IF NOT EXISTS), então o app não
14
- * precisa de migration própria pra usar a lib em dev.
14
+ * Tables are created on first use (IF NOT EXISTS), so the app doesn't need
15
+ * its own migration to use the library in dev.
15
16
  *
16
17
  * @example
17
18
  * const storage = new LucidStorage(db)
@@ -22,9 +23,9 @@ export declare class LucidStorage implements CollaborationStorage {
22
23
  private connection;
23
24
  private ready;
24
25
  constructor(db: LucidConnectionLike, connection?: string);
25
- /** Garante as tabelas sob demanda (lazy) — o boot não toca no banco. */
26
+ /** Ensures the tables lazily on demand — boot doesn't touch the database. */
26
27
  private ensure;
27
- /** A conexão do lucid é um Knex (QueryClientContract estende o builder). */
28
+ /** The lucid connection is a Knex instance (QueryClientContract extends the builder). */
28
29
  private knex;
29
30
  private ensureSchema;
30
31
  loadDocument(docName: string): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"lucid_storage.d.ts","sourceRoot":"","sources":["../../../src/storage/lucid_storage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEtF;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACpC;AAED;;;;;;;;;;GAUG;AACH,qBAAa,YAAa,YAAW,oBAAoB;IAG3C,OAAO,CAAC,EAAE;IAAuB,OAAO,CAAC,UAAU;IAF/D,OAAO,CAAC,KAAK,CAA8B;gBAEvB,EAAE,EAAE,mBAAmB,EAAU,UAAU,GAAE,MAAsB;IAEvF,wEAAwE;IACxE,OAAO,CAAC,MAAM;IAOd,4EAA4E;IAC5E,OAAO,CAAC,IAAI;YAIE,YAAY;IAsCpB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI,CAAC;IAOpE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB/F,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAevD,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB1F,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAKpF,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAmBvE,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBnE,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAKvE"}
1
+ {"version":3,"file":"lucid_storage.d.ts","sourceRoot":"","sources":["../../../src/storage/lucid_storage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEtF;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACpC;AAED;;;;;;;;;;GAUG;AACH,qBAAa,YAAa,YAAW,oBAAoB;IAIrD,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,UAAU;IAJpB,OAAO,CAAC,KAAK,CAA8B;gBAGjC,EAAE,EAAE,mBAAmB,EACvB,UAAU,SAAgB;IAGpC,6EAA6E;IAC7E,OAAO,CAAC,MAAM;IAOd,yFAAyF;IACzF,OAAO,CAAC,IAAI;YAIE,YAAY;IAsCpB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI,CAAC;IAOpE,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,UAAU,EACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC;IAqBV,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAevD,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB1F,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAKpF,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAmBvE,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BnE,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAKvE"}