@rgby/collab-core 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,60 @@
1
+ # @collab/client
2
+
3
+ A powerful real-time collaboration SDK for building modern web applications. Built on top of [Yjs](https://github.com/yjs/yjs) and [Hocuspocus](https://github.com/ueberdosis/hocuspocus), providing a seamless experience for shared editing, comments, presence, and file uploads.
4
+
5
+ ## Features
6
+
7
+ - 🔄 **Real-time Sync**: Effortless data synchronization across clients using Yjs.
8
+ - 🔌 **Offline Support**: Built-in IndexedDB persistence for offline editing.
9
+ - 💬 **Comments**: Integrated commenting system with threads and resolving.
10
+ - 👥 **Presence**: Real-time user awareness (cursors, selections).
11
+ - 📂 **File Uploads**: Resumable file uploads with offline queue support.
12
+ - 🌳 **Document Management**: Hierarchical document structure (spaces, folders).
13
+ - âš¡ **Framework Agnostic**: Core logic works with any framework.
14
+ - 💚 **Vue Composables**: First-class support for Vue 3.
15
+
16
+ ## Installation
17
+
18
+ ```bash
19
+ npm install @collab/client
20
+ ```
21
+
22
+ ## Quick Start
23
+
24
+ ### 1. Initialize the Client
25
+
26
+ ```typescript
27
+ import { CollabClient } from '@collab/client';
28
+
29
+ const client = new CollabClient({
30
+ baseUrl: 'https://api.your-collab-server.com',
31
+ authClient: {
32
+ // Implement your auth logic here if using custom auth
33
+ },
34
+ managedAuth: {
35
+ // Or use the built-in managed auth
36
+ autoRefresh: true
37
+ }
38
+ });
39
+ ```
40
+
41
+ ### 2. Connect to a Document
42
+
43
+ ```typescript
44
+ // Connect to a specific document within a space
45
+ const provider = await client.getProvider('space-id', 'document-id');
46
+
47
+ // Access the Yjs document
48
+ const yDoc = provider.document;
49
+ const yText = yDoc.getText('content');
50
+
51
+ // Observe changes
52
+ yText.observe(() => {
53
+ console.log('Content updated:', yText.toString());
54
+ });
55
+ ```
56
+
57
+ ## Documentation
58
+
59
+ - [**Vanilla JS Guide**](./VANILLA.md): Detailed guide for using the SDK in any JavaScript environment.
60
+ - [**Vue.js Guide**](./VUE.md): Learn how to use the provided Vue composables for reactive collaborative state.
@@ -0,0 +1,561 @@
1
+ import { HocuspocusProvider, HocuspocusProviderWebsocket } from "@hocuspocus/provider";
2
+ import * as Yjs from "yjs";
3
+ import { type PendingUpload } from "./upload-queue.js";
4
+ export declare const Y: typeof Yjs;
5
+ type HocuspocusProviderConfiguration = ConstructorParameters<typeof HocuspocusProvider>[0];
6
+ type HocuspocusProviderWebsocketConfiguration = ConstructorParameters<typeof HocuspocusProviderWebsocket>[0];
7
+ export interface AuthClient {
8
+ getSession: () => Promise<{
9
+ session: {
10
+ token: string;
11
+ } | null;
12
+ } | null>;
13
+ subscribe: (callback: (session: {
14
+ session: {
15
+ token: string;
16
+ } | null;
17
+ } | null) => void) => () => void;
18
+ }
19
+ export interface StorageAdapter {
20
+ getItem(key: string): Promise<string | null> | string | null;
21
+ setItem(key: string, value: string): Promise<void> | void;
22
+ removeItem(key: string): Promise<void> | void;
23
+ }
24
+ export declare class LocalStorageAdapter implements StorageAdapter {
25
+ getItem(key: string): string | null;
26
+ setItem(key: string, value: string): void;
27
+ removeItem(key: string): void;
28
+ }
29
+ export declare class SessionStorageAdapter implements StorageAdapter {
30
+ getItem(key: string): string | null;
31
+ setItem(key: string, value: string): void;
32
+ removeItem(key: string): void;
33
+ }
34
+ export declare class MemoryStorageAdapter implements StorageAdapter {
35
+ private store;
36
+ getItem(key: string): string | null;
37
+ setItem(key: string, value: string): void;
38
+ removeItem(key: string): void;
39
+ }
40
+ export interface SessionData {
41
+ token: string;
42
+ user: {
43
+ id: string;
44
+ name: string;
45
+ email: string;
46
+ image?: string;
47
+ };
48
+ expiresAt: number;
49
+ }
50
+ export interface AuthManagerOptions {
51
+ baseUrl: string;
52
+ storage?: StorageAdapter;
53
+ storageKey?: string;
54
+ autoRefresh?: boolean;
55
+ refreshBuffer?: number;
56
+ }
57
+ export declare class AuthManager {
58
+ private baseUrl;
59
+ private storage;
60
+ private storageKey;
61
+ private autoRefresh;
62
+ private refreshBuffer;
63
+ private session;
64
+ private subscribers;
65
+ private refreshTimer;
66
+ constructor(options: AuthManagerOptions);
67
+ private restoreSession;
68
+ private persistSession;
69
+ private scheduleRefresh;
70
+ private refreshSession;
71
+ private notifySubscribers;
72
+ login(email: string, password: string): Promise<SessionData>;
73
+ signup(email: string, password: string, name: string): Promise<SessionData>;
74
+ logout(): Promise<void>;
75
+ getSession(): SessionData | null;
76
+ getToken(): string | null;
77
+ subscribe(callback: (session: SessionData | null) => void): () => void;
78
+ getSessionCompat(): Promise<{
79
+ session: {
80
+ token: string;
81
+ } | null;
82
+ } | null>;
83
+ subscribeCompat(callback: (session: {
84
+ session: {
85
+ token: string;
86
+ } | null;
87
+ } | null) => void): () => void;
88
+ }
89
+ export interface ManagedAuthOptions {
90
+ storage?: StorageAdapter;
91
+ autoRefresh?: boolean;
92
+ refreshBuffer?: number;
93
+ }
94
+ export interface OfflineOptions {
95
+ enablePersistence?: boolean;
96
+ enableImageCache?: boolean;
97
+ enableUploadQueue?: boolean;
98
+ persistenceDbName?: string;
99
+ maxCacheSize?: number;
100
+ maxDocuments?: number;
101
+ autoCleanup?: boolean;
102
+ cleanupThreshold?: number;
103
+ }
104
+ export interface CollabClientOptions {
105
+ baseUrl: string;
106
+ authClient?: AuthClient;
107
+ managedAuth?: ManagedAuthOptions;
108
+ offline?: OfflineOptions;
109
+ }
110
+ export interface ClientExtensionDefinition {
111
+ name: string;
112
+ options?: Record<string, any>;
113
+ scriptUrl?: string;
114
+ }
115
+ export interface Document {
116
+ id: string;
117
+ name: string;
118
+ spaceId: string;
119
+ parentId: string | null;
120
+ position: number;
121
+ createdBy: string;
122
+ createdAt?: string;
123
+ updatedAt?: string;
124
+ childrenCount?: number;
125
+ }
126
+ export interface DocumentTreeNode extends Document {
127
+ children: DocumentTreeNode[];
128
+ depth: number;
129
+ }
130
+ export interface Space {
131
+ id: string;
132
+ name: string;
133
+ slug: string;
134
+ logo?: string | null;
135
+ createdAt: string;
136
+ role: string;
137
+ memberCount?: number;
138
+ documentCount?: number;
139
+ }
140
+ export interface SpaceMember {
141
+ id: string;
142
+ userId: string;
143
+ role: string;
144
+ user: {
145
+ name: string;
146
+ email: string;
147
+ image?: string;
148
+ };
149
+ }
150
+ export interface FileUpload {
151
+ id: string;
152
+ url: string;
153
+ filename: string;
154
+ mimeType: string;
155
+ size: number;
156
+ }
157
+ export interface DocumentSnapshot {
158
+ id: string;
159
+ createdAt: string;
160
+ createdBy: string;
161
+ size: number;
162
+ }
163
+ export interface PaginationInfo {
164
+ total: number;
165
+ limit: number;
166
+ offset: number;
167
+ hasMore: boolean;
168
+ }
169
+ export interface CommentAnchor {
170
+ from: number;
171
+ to: number;
172
+ text: string;
173
+ }
174
+ export interface Comment {
175
+ id: string;
176
+ documentId: string;
177
+ spaceId: string;
178
+ parentId: string | null;
179
+ authorId: string;
180
+ authorName: string;
181
+ content: string;
182
+ anchor: CommentAnchor | null;
183
+ resolved: boolean;
184
+ resolvedBy: string | null;
185
+ resolvedAt: string | null;
186
+ createdAt: string;
187
+ updatedAt: string;
188
+ }
189
+ export interface CommentThread extends Comment {
190
+ replies: Comment[];
191
+ }
192
+ export interface CommentEvent {
193
+ type: "comment" | "comment_error";
194
+ action: string;
195
+ data?: any;
196
+ error?: string;
197
+ userId: string;
198
+ timestamp?: number;
199
+ }
200
+ export interface PersistenceManagerOptions {
201
+ documentName: string;
202
+ document: Yjs.Doc;
203
+ enablePersistence?: boolean;
204
+ persistenceDbName?: string;
205
+ }
206
+ export declare class PersistenceManager {
207
+ private persistence;
208
+ private isReady;
209
+ private readyPromise;
210
+ private listeners;
211
+ constructor(options: PersistenceManagerOptions);
212
+ waitForReady(): Promise<void>;
213
+ isReadySync(): boolean;
214
+ onReady(callback: () => void): () => void;
215
+ private notifyListeners;
216
+ clearData(): Promise<void>;
217
+ destroy(): void;
218
+ }
219
+ export interface CollabProviderWebsocketOptions extends Omit<HocuspocusProviderWebsocketConfiguration, "url"> {
220
+ baseUrl: string;
221
+ spaceId: string;
222
+ auth?: AuthClient;
223
+ token?: string;
224
+ }
225
+ export declare class CollabProviderWebsocket extends HocuspocusProviderWebsocket {
226
+ private _authUnsubscribe;
227
+ readonly spaceId: string;
228
+ private _token;
229
+ private _readyPromise;
230
+ private _readyResolve;
231
+ private _spaceDoc;
232
+ constructor(options: CollabProviderWebsocketOptions);
233
+ /**
234
+ * Wait for the websocket to be connected and ready
235
+ */
236
+ waitForReady(): Promise<void>;
237
+ private setupAuth;
238
+ private updateToken;
239
+ getToken(): string | undefined;
240
+ getSpaceDoc(): any;
241
+ destroy(): void;
242
+ }
243
+ export interface CollabProviderOptions {
244
+ websocketProvider?: HocuspocusProviderWebsocket | CollabProviderWebsocket;
245
+ baseUrl?: string;
246
+ spaceId?: string;
247
+ documentId: string;
248
+ auth?: AuthClient;
249
+ token?: string | null | (() => string) | (() => Promise<string>);
250
+ enablePersistence?: boolean;
251
+ persistenceDbName?: string;
252
+ document?: any;
253
+ awareness?: any;
254
+ onConnect?: () => void;
255
+ onSynced?: (data: any) => void;
256
+ onStatus?: (data: any) => void;
257
+ onAuthenticated?: (data: any) => void;
258
+ onAuthenticationFailed?: (data: any) => void;
259
+ onOpen?: (data: any) => void;
260
+ onMessage?: (data: any) => void;
261
+ onOutgoingMessage?: (data: any) => void;
262
+ onDisconnect?: (data: any) => void;
263
+ onClose?: (data: any) => void;
264
+ onDestroy?: () => void;
265
+ onAwarenessUpdate?: (data: any) => void;
266
+ onAwarenessChange?: (data: any) => void;
267
+ onStateless?: (data: any) => void;
268
+ forceSyncInterval?: number | false;
269
+ }
270
+ /**
271
+ * HocuspocusProvider wrapper that handles constructing the correct name/url
272
+ * based on our platform's conventions.
273
+ */
274
+ export declare class CollabProvider extends HocuspocusProvider {
275
+ private _authUnsubscribe;
276
+ readonly documentId: string;
277
+ private persistenceManager;
278
+ constructor(options: CollabProviderOptions);
279
+ private setupAuth;
280
+ setToken(token: string): void;
281
+ destroy(): void;
282
+ /**
283
+ * Wait for persistence to be ready
284
+ */
285
+ waitForPersistence(): Promise<void>;
286
+ /**
287
+ * Check if persistence is ready
288
+ */
289
+ isPersistenceReady(): boolean;
290
+ /**
291
+ * Clear local persistence data
292
+ */
293
+ clearLocalData(): Promise<void>;
294
+ /**
295
+ * Send a comment action via stateless message
296
+ */
297
+ sendComment(action: "create" | "update" | "delete" | "resolve", data: any): void;
298
+ /**
299
+ * Listen for real-time comment events
300
+ */
301
+ onComment(callback: (event: CommentEvent) => void): () => void;
302
+ }
303
+ export declare class CollabClient {
304
+ readonly baseUrl: string;
305
+ readonly auth: AuthClient;
306
+ private readonly authManager;
307
+ private readonly offlineOptions;
308
+ private _sockets;
309
+ private _token;
310
+ private uploadQueue;
311
+ constructor(options: CollabClientOptions);
312
+ login(email: string, password: string): Promise<SessionData>;
313
+ signup(email: string, password: string, name: string): Promise<SessionData>;
314
+ logout(): Promise<void>;
315
+ getSession(): SessionData | null;
316
+ private getToken;
317
+ private fetch;
318
+ getExtensions(deps?: Record<string, any>): Promise<any[]>;
319
+ getWebsocketProvider(spaceId: string): Promise<CollabProviderWebsocket>;
320
+ /**
321
+ * Get a CollabProvider for a specific document.
322
+ * Uses a shared WebSocket for the space if possible.
323
+ */
324
+ getProvider(spaceId: string, documentId: string, options?: Partial<HocuspocusProviderConfiguration>): Promise<CollabProvider>;
325
+ readonly documents: {
326
+ /**
327
+ * List documents in a space
328
+ * @param parentId - null for root only, undefined for all, string for specific parent
329
+ */
330
+ list: (spaceId: string, params?: {
331
+ parentId?: string | null;
332
+ limit?: number;
333
+ offset?: number;
334
+ }) => Promise<{
335
+ items: Document[];
336
+ pagination: PaginationInfo;
337
+ }>;
338
+ get: (spaceId: string, docId: string) => Promise<Document>;
339
+ create: (spaceId: string, options?: {
340
+ name?: string;
341
+ parentId?: string | null;
342
+ }) => Promise<Document & {
343
+ wsUrl: string;
344
+ }>;
345
+ update: (spaceId: string, docId: string, data: {
346
+ name: string;
347
+ }) => Promise<{
348
+ success: true;
349
+ }>;
350
+ delete: (spaceId: string, docId: string) => Promise<{
351
+ success: true;
352
+ }>;
353
+ getContent: (spaceId: string, docId: string) => Promise<Record<string, unknown>>;
354
+ /**
355
+ * Update document content via patch (merge or replace strategy)
356
+ */
357
+ patch: (spaceId: string, docId: string, content: any, options?: {
358
+ merge?: boolean;
359
+ strategy?: "replace" | "merge" | "append" | "prepend";
360
+ path?: number[];
361
+ }) => Promise<Document>;
362
+ /**
363
+ * Apply transformation operations to document
364
+ */
365
+ transform: (spaceId: string, docId: string, operations: any[]) => Promise<Document>;
366
+ tree: (spaceId: string) => Promise<DocumentTreeNode[]>;
367
+ children: (spaceId: string, docId: string, params?: {
368
+ limit?: number;
369
+ offset?: number;
370
+ }) => Promise<{
371
+ items: Document[];
372
+ pagination: PaginationInfo;
373
+ }>;
374
+ ancestors: (spaceId: string, docId: string) => Promise<Document[]>;
375
+ move: (spaceId: string, docId: string, parentId: string | null, position?: number) => Promise<{
376
+ success: true;
377
+ }>;
378
+ getSnapshots: (spaceId: string, docId: string) => Promise<DocumentSnapshot[]>;
379
+ restoreSnapshot: (spaceId: string, docId: string, snapshotId: string) => Promise<{
380
+ success: true;
381
+ message: string;
382
+ }>;
383
+ listDeleted: (spaceId: string, params?: {
384
+ limit?: number;
385
+ offset?: number;
386
+ }) => Promise<{
387
+ items: Document[];
388
+ pagination: PaginationInfo;
389
+ }>;
390
+ restore: (spaceId: string, docId: string) => Promise<{
391
+ success: true;
392
+ }>;
393
+ deletePermanent: (spaceId: string, docId: string) => Promise<{
394
+ success: true;
395
+ }>;
396
+ export: (spaceId: string, docId: string, format?: "html" | "json") => Promise<any>;
397
+ };
398
+ readonly spaces: {
399
+ list: () => Promise<Space[]>;
400
+ get: (spaceId: string) => Promise<Space>;
401
+ getMembers: (spaceId: string) => Promise<SpaceMember[]>;
402
+ create: (data: {
403
+ name: string;
404
+ slug?: string;
405
+ }) => Promise<Space>;
406
+ /**
407
+ * Add a member to a space/organization
408
+ */
409
+ addMember: (spaceId: string, email: string, role: string) => Promise<{
410
+ success: true;
411
+ memberId: string;
412
+ }>;
413
+ /**
414
+ * Update a member's role
415
+ */
416
+ updateRole: (spaceId: string, userId: string, role: string) => Promise<{
417
+ success: true;
418
+ }>;
419
+ /**
420
+ * Remove a member from a space/organization
421
+ */
422
+ removeMember: (spaceId: string, userId: string) => Promise<{
423
+ success: true;
424
+ }>;
425
+ };
426
+ readonly uploads: {
427
+ list: (spaceId: string, documentId?: string, params?: {
428
+ limit?: number;
429
+ offset?: number;
430
+ }) => Promise<{
431
+ items: FileUpload[];
432
+ pagination: PaginationInfo;
433
+ }>;
434
+ upload: (spaceId: string, file: File, documentId?: string) => Promise<FileUpload>;
435
+ delete: (spaceId: string, fileId: string) => Promise<{
436
+ success: true;
437
+ }>;
438
+ deletePermanent: (spaceId: string, fileId: string) => Promise<{
439
+ success: true;
440
+ }>;
441
+ };
442
+ readonly comments: {
443
+ /**
444
+ * List comments for a document (threaded)
445
+ */
446
+ list: (spaceId: string, docId: string) => Promise<{
447
+ threads: CommentThread[];
448
+ meta: {
449
+ total: number;
450
+ resolved: number;
451
+ };
452
+ }>;
453
+ /**
454
+ * Get a single comment
455
+ */
456
+ get: (spaceId: string, docId: string, commentId: string) => Promise<Comment>;
457
+ /**
458
+ * Create a new comment
459
+ */
460
+ create: (spaceId: string, docId: string, data: {
461
+ content: string;
462
+ anchor?: CommentAnchor;
463
+ parentId?: string;
464
+ }) => Promise<Comment>;
465
+ /**
466
+ * Update a comment's content
467
+ */
468
+ update: (spaceId: string, docId: string, commentId: string, content: string) => Promise<Comment>;
469
+ /**
470
+ * Delete a comment
471
+ */
472
+ delete: (spaceId: string, docId: string, commentId: string) => Promise<{
473
+ success: true;
474
+ }>;
475
+ /**
476
+ * Resolve or unresolve a comment thread
477
+ */
478
+ resolve: (spaceId: string, docId: string, commentId: string, resolved: boolean) => Promise<Comment>;
479
+ };
480
+ readonly share: {
481
+ /**
482
+ * Get share status for a document
483
+ */
484
+ get: (spaceId: string, docId: string) => Promise<{
485
+ success: boolean;
486
+ data: {
487
+ enabled: boolean;
488
+ token?: string;
489
+ access?: string;
490
+ url?: string;
491
+ };
492
+ }>;
493
+ /**
494
+ * Enable sharing for a document
495
+ */
496
+ enable: (spaceId: string, docId: string) => Promise<{
497
+ success: boolean;
498
+ data: {
499
+ token: string;
500
+ access: string;
501
+ url: string;
502
+ };
503
+ }>;
504
+ /**
505
+ * Disable sharing for a document
506
+ */
507
+ disable: (spaceId: string, docId: string) => Promise<{
508
+ success: boolean;
509
+ }>;
510
+ };
511
+ /**
512
+ * Process the upload queue
513
+ */
514
+ private processUploadQueue;
515
+ /**
516
+ * Get pending uploads count
517
+ */
518
+ getPendingUploadsCount(): Promise<number>;
519
+ /**
520
+ * Get all pending uploads
521
+ */
522
+ getPendingUploads(): Promise<PendingUpload[]>;
523
+ /**
524
+ * Subscribe to upload queue events
525
+ */
526
+ onUploadQueue(event: 'queue-changed' | 'upload-complete' | 'upload-failed', callback: (data: any) => void): () => void;
527
+ /**
528
+ * Get storage quota information
529
+ */
530
+ getStorageInfo(): Promise<{
531
+ usage: number;
532
+ quota: number;
533
+ percentUsed: number;
534
+ }>;
535
+ /**
536
+ * Clear all local data (IndexedDB and caches)
537
+ */
538
+ clearAllLocalData(): Promise<void>;
539
+ /**
540
+ * Clear specific document cache
541
+ */
542
+ clearDocumentCache(spaceId: string, docId: string): Promise<void>;
543
+ /**
544
+ * Perform cleanup when storage quota is exceeded
545
+ */
546
+ private performCleanup;
547
+ /**
548
+ * Check storage quota and perform cleanup if needed
549
+ */
550
+ checkStorageQuota(): Promise<void>;
551
+ /**
552
+ * Get document content using a share token (public access)
553
+ */
554
+ getPublicContent(spaceId: string, docId: string, shareToken: string): Promise<{
555
+ id: string;
556
+ spaceId: string;
557
+ content: Record<string, unknown>;
558
+ }>;
559
+ }
560
+ export {};
561
+ //# sourceMappingURL=collab-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collab-provider.d.ts","sourceRoot":"","sources":["../src/collab-provider.ts"],"names":[],"mappings":"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"}