studiograph 1.3.3-next.21 → 1.3.3-next.22

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 (73) hide show
  1. package/dist/server/chrome/chrome.js +23 -252
  2. package/dist/server/collab.d.ts +27 -0
  3. package/dist/server/collab.js +117 -0
  4. package/dist/server/collab.js.map +1 -0
  5. package/dist/server/index.js +11 -6
  6. package/dist/server/index.js.map +1 -1
  7. package/dist/server/routes/collab.d.ts +6 -0
  8. package/dist/server/routes/collab.js +10 -0
  9. package/dist/server/routes/collab.js.map +1 -0
  10. package/dist/server/routes/graph-api.d.ts +2 -2
  11. package/dist/server/routes/graph-api.js +25 -6
  12. package/dist/server/routes/graph-api.js.map +1 -1
  13. package/dist/server/routes/sync-api.d.ts +2 -1
  14. package/dist/server/routes/sync-api.js +13 -1
  15. package/dist/server/routes/sync-api.js.map +1 -1
  16. package/dist/server/routes/ws.js +38 -0
  17. package/dist/server/routes/ws.js.map +1 -1
  18. package/dist/server/session-manager.d.ts +40 -0
  19. package/dist/server/session-manager.js +130 -0
  20. package/dist/server/session-manager.js.map +1 -0
  21. package/dist/server/ws-hub.d.ts +60 -1
  22. package/dist/server/ws-hub.js +113 -2
  23. package/dist/server/ws-hub.js.map +1 -1
  24. package/dist/web/_app/immutable/assets/AppShell.EyPUoNrB.css +1 -0
  25. package/dist/web/_app/immutable/assets/{editor.CaaAjbLg.css → entity.Bjlko8oW.css} +1 -1
  26. package/dist/web/_app/immutable/chunks/{DRChbfXz.js → 38MyG-mV.js} +1 -1
  27. package/dist/web/_app/immutable/chunks/{DFSquWcI.js → BV_9Nfp2.js} +1 -1
  28. package/dist/web/_app/immutable/chunks/Bk7i2AGK.js +5 -0
  29. package/dist/web/_app/immutable/chunks/ByFfmBEu.js +2 -0
  30. package/dist/web/_app/immutable/chunks/Bz2vmWce.js +2 -0
  31. package/dist/web/_app/immutable/chunks/C6jTKM_R.js +1 -0
  32. package/dist/web/_app/immutable/chunks/CaITTL5o.js +2 -0
  33. package/dist/web/_app/immutable/chunks/Cc7CYb94.js +1 -0
  34. package/dist/web/_app/immutable/chunks/{BDskUnFZ.js → CiTQ_W2r.js} +10 -10
  35. package/dist/web/_app/immutable/chunks/{BfTJ6NzK.js → CjKjQEMp.js} +1 -1
  36. package/dist/web/_app/immutable/chunks/{GRkK54yd.js → D-tW7Byc.js} +1 -1
  37. package/dist/web/_app/immutable/chunks/{Ddy4RvyP.js → DCWeodCf.js} +1 -1
  38. package/dist/web/_app/immutable/chunks/DWSjaG46.js +1 -0
  39. package/dist/web/_app/immutable/chunks/DkM5hMeY.js +1 -0
  40. package/dist/web/_app/immutable/chunks/{BbLYZVsw.js → Dpn7ZAUg.js} +1 -1
  41. package/dist/web/_app/immutable/chunks/EhE2EcYu.js +1 -0
  42. package/dist/web/_app/immutable/chunks/JFkcr2-N.js +1 -0
  43. package/dist/web/_app/immutable/chunks/Mxe2MMs2.js +27 -0
  44. package/dist/web/_app/immutable/chunks/{BjnErSlK.js → eEhMI0BQ.js} +1 -1
  45. package/dist/web/_app/immutable/entry/app.DLneBeWX.js +2 -0
  46. package/dist/web/_app/immutable/entry/start.BYwqba4F.js +1 -0
  47. package/dist/web/_app/immutable/nodes/0.DtQFMo5Z.js +2 -0
  48. package/dist/web/_app/immutable/nodes/{1.gy-UNDF3.js → 1.DJ2AQD2m.js} +1 -1
  49. package/dist/web/_app/immutable/nodes/{2.CFmJZos9.js → 2.DWr3ykuO.js} +1 -1
  50. package/dist/web/_app/immutable/nodes/3.qGcB9YWB.js +1 -0
  51. package/dist/web/_app/immutable/nodes/4.DU5ubOPD.js +17 -0
  52. package/dist/web/_app/immutable/nodes/{5.C7yLiq2I.js → 5.CD_z4c5g.js} +1 -1
  53. package/dist/web/_app/immutable/nodes/{6.DKaTmAiw.js → 6.Bd2482PN.js} +1 -1
  54. package/dist/web/_app/immutable/nodes/{7.CA3sQ74A.js → 7.BTx2RBdr.js} +1 -1
  55. package/dist/web/_app/immutable/nodes/8.I6vnVY2_.js +2 -0
  56. package/dist/web/_app/immutable/nodes/{9.BVVyKTae.js → 9.u8QBhCns.js} +1 -1
  57. package/dist/web/_app/version.json +1 -1
  58. package/dist/web/index.html +10 -10
  59. package/package.json +2 -1
  60. package/dist/web/_app/immutable/assets/AppShell.C00jH_aT.css +0 -1
  61. package/dist/web/_app/immutable/chunks/B3v6bkHV.js +0 -27
  62. package/dist/web/_app/immutable/chunks/BQlTvYWB.js +0 -1
  63. package/dist/web/_app/immutable/chunks/BzhnXU6Q.js +0 -1
  64. package/dist/web/_app/immutable/chunks/CRcLi9EQ.js +0 -1
  65. package/dist/web/_app/immutable/chunks/DL7u7dQi.js +0 -2
  66. package/dist/web/_app/immutable/chunks/m74CvwCG.js +0 -2
  67. package/dist/web/_app/immutable/chunks/trveDs8t.js +0 -1
  68. package/dist/web/_app/immutable/entry/app.3j3I-9SC.js +0 -2
  69. package/dist/web/_app/immutable/entry/start.CYScsHkx.js +0 -1
  70. package/dist/web/_app/immutable/nodes/0.CxCm4CPW.js +0 -2
  71. package/dist/web/_app/immutable/nodes/3.D1yvWsPv.js +0 -1
  72. package/dist/web/_app/immutable/nodes/4.LKUIo9Zg.js +0 -16
  73. package/dist/web/_app/immutable/nodes/8.DEuJARDO.js +0 -2
@@ -48,30 +48,6 @@
48
48
  return str.replace(/-/g, ' ').replace(/\b\w/g, function (c) { return c.toUpperCase(); });
49
49
  }
50
50
 
51
- function friendlyParts(repo, path, entityName) {
52
- var cleaned = path.replace(/\/$/, '').replace(/\/main\.md$/, '').replace(/\.md$/, '');
53
- var segments = cleaned.split('/').filter(Boolean);
54
- var entity = entityName || titleCase(segments[segments.length - 1]);
55
- var type = segments.length > 1 ? titleCase(segments[0]) : (entityName ? titleCase(segments[0]) : null);
56
- return { repo: repo, type: type, entity: entity };
57
- }
58
-
59
- function renderPathHtml(parts) {
60
- var sep = '<span class="sg-path-sep">/</span>';
61
- var html = '<span class="sg-path-repo">' + esc(parts.repo) + '</span>';
62
- if (parts.type) html += sep + '<span class="sg-path-type">' + esc(parts.type) + '</span>';
63
- html += sep + '<span class="sg-path-entity">' + esc(parts.entity) + '</span>';
64
- return html;
65
- }
66
-
67
- function statusClass(status) {
68
- switch (status) {
69
- case 'D': return 'sg-chrome-status-deleted';
70
- case 'A': case '?': return 'sg-chrome-status-added';
71
- default: return 'sg-chrome-status-modified';
72
- }
73
- }
74
-
75
51
  // ── Theme ───────────────────────────────────────────────
76
52
  function getTheme() {
77
53
  return document.documentElement.dataset.theme || localStorage.getItem('theme') || 'dark';
@@ -172,7 +148,7 @@
172
148
  if (e.key === 'Escape') overflowMenu.classList.remove('open');
173
149
  });
174
150
 
175
- // ── Build Footer (matches StatusBar.svelte) ────────────
151
+ // ── Build Footer ────────────────────────────────────────
176
152
  var footer = el('footer', 'sg-chrome-footer');
177
153
 
178
154
  // Left: theme toggle + workspace stats
@@ -188,111 +164,6 @@
188
164
  footerLeft.appendChild(statsEl);
189
165
  footer.appendChild(footerLeft);
190
166
 
191
- // Center: Revert + Commit
192
- var footerCenter = el('div', 'sg-chrome-footer-center');
193
-
194
- var revertBtn = el('button', 'sg-chrome-revert-btn', 'Revert');
195
- revertBtn.title = 'Discard all unpublished changes';
196
- revertBtn.hidden = true;
197
-
198
- var commitBtn = el('button', 'sg-chrome-commit-btn', '<span>Commit</span>');
199
- commitBtn.title = 'Commit changes';
200
- commitBtn.hidden = true;
201
-
202
- footerCenter.appendChild(revertBtn);
203
- footerCenter.appendChild(commitBtn);
204
- footer.appendChild(footerCenter);
205
-
206
- // ── Commit Confirmation Modal ─────────────────────────
207
- var commitModal = el('div', 'sg-chrome-modal-overlay');
208
- commitModal.innerHTML =
209
- '<div class="sg-chrome-modal">' +
210
- '<div class="sg-chrome-modal-header">' +
211
- '<span class="sg-chrome-modal-title">Commit changes</span>' +
212
- '<button class="sg-chrome-modal-close">&times;</button>' +
213
- '</div>' +
214
- '<div class="sg-chrome-modal-body"></div>' +
215
- '<div class="sg-chrome-modal-footer">' +
216
- '<button class="sg-chrome-revert-btn">Cancel</button>' +
217
- '<button class="sg-chrome-commit-btn">Commit</button>' +
218
- '</div>' +
219
- '</div>';
220
- document.body.appendChild(commitModal);
221
-
222
- var modalBody = commitModal.querySelector('.sg-chrome-modal-body');
223
- var modalConfirmBtn = commitModal.querySelector('.sg-chrome-modal-footer .sg-chrome-commit-btn');
224
- var modalCancelBtn = commitModal.querySelector('.sg-chrome-modal-footer .sg-chrome-revert-btn');
225
- var modalCloseBtn = commitModal.querySelector('.sg-chrome-modal-close');
226
-
227
- function openCommitModal() {
228
- // Build file list
229
- var html = '';
230
- gitState.repoStatuses.forEach(function (rs) {
231
- rs.changes.forEach(function (change) {
232
- var parts = friendlyParts(rs.repo, change.path, change.entityName);
233
- html +=
234
- '<div class="sg-chrome-tooltip-file">' +
235
- '<span class="sg-chrome-tooltip-dot ' + statusClass(change.status) + '"></span>' +
236
- renderPathHtml(parts) +
237
- '</div>';
238
- });
239
- });
240
- modalBody.innerHTML = html;
241
- commitModal.classList.add('open');
242
- }
243
-
244
- function closeCommitModal() {
245
- commitModal.classList.remove('open');
246
- }
247
-
248
- modalCancelBtn.addEventListener('click', closeCommitModal);
249
- modalCloseBtn.addEventListener('click', closeCommitModal);
250
- commitModal.addEventListener('click', function (e) {
251
- if (e.target === commitModal) closeCommitModal();
252
- });
253
- document.addEventListener('keydown', function (e) {
254
- if (e.key === 'Escape' && commitModal.classList.contains('open')) closeCommitModal();
255
- });
256
-
257
- // ── Revert Confirmation Modal ──────────────────────────
258
- var revertModal = el('div', 'sg-chrome-modal-overlay');
259
- revertModal.innerHTML =
260
- '<div class="sg-chrome-modal sg-chrome-modal-sm">' +
261
- '<div class="sg-chrome-modal-header">' +
262
- '<span class="sg-chrome-modal-title">Discard changes</span>' +
263
- '<button class="sg-chrome-modal-close">&times;</button>' +
264
- '</div>' +
265
- '<div class="sg-chrome-modal-body">' +
266
- '<p class="sg-chrome-modal-message">Discard all uncommitted changes? This cannot be undone.</p>' +
267
- '</div>' +
268
- '<div class="sg-chrome-modal-footer">' +
269
- '<button class="sg-chrome-revert-btn">Cancel</button>' +
270
- '<button class="sg-chrome-btn-destructive">Discard</button>' +
271
- '</div>' +
272
- '</div>';
273
- document.body.appendChild(revertModal);
274
-
275
- var revertConfirmBtn = revertModal.querySelector('.sg-chrome-btn-destructive');
276
- var revertCancelBtn = revertModal.querySelector('.sg-chrome-modal-footer .sg-chrome-revert-btn');
277
- var revertCloseBtn = revertModal.querySelector('.sg-chrome-modal-close');
278
-
279
- function openRevertModal() {
280
- revertModal.classList.add('open');
281
- }
282
-
283
- function closeRevertModal() {
284
- revertModal.classList.remove('open');
285
- }
286
-
287
- revertCancelBtn.addEventListener('click', closeRevertModal);
288
- revertCloseBtn.addEventListener('click', closeRevertModal);
289
- revertModal.addEventListener('click', function (e) {
290
- if (e.target === revertModal) closeRevertModal();
291
- });
292
- document.addEventListener('keydown', function (e) {
293
- if (e.key === 'Escape' && revertModal.classList.contains('open')) closeRevertModal();
294
- });
295
-
296
167
  // ── Inject into DOM ─────────────────────────────────────
297
168
  if (!workspaceMode) {
298
169
  body.insertBefore(header, body.firstChild);
@@ -314,134 +185,23 @@
314
185
  body.appendChild(footer);
315
186
  }
316
187
 
317
- // ── Git State ───────────────────────────────────────────
318
- var gitState = {
319
- repoStatuses: [],
320
- totalChanges: 0,
321
- stats: { entities: 0, links: 0 }
322
- };
323
-
324
- function updateFooterUI() {
325
- // Stats
326
- if (gitState.stats.entities > 0) {
327
- var e = gitState.stats.entities;
328
- var l = gitState.stats.links;
329
- statsEl.innerHTML =
330
- '<span class="sg-chrome-stat">' + e.toLocaleString() + (e === 1 ? ' entity' : ' entities') + '</span>' +
331
- '<span class="sg-chrome-stat-sep">|</span>' +
332
- '<span class="sg-chrome-stat">' + l.toLocaleString() + (l === 1 ? ' link' : ' links') + '</span>';
333
- }
334
-
335
- // Commit / Revert
336
- if (gitState.totalChanges > 0) {
337
- revertBtn.hidden = false;
338
- commitBtn.hidden = false;
339
- commitBtn.innerHTML =
340
- '<span>Commit</span><span class="sg-chrome-sync-count">' + gitState.totalChanges + '</span>';
341
- } else {
342
- revertBtn.hidden = true;
343
- commitBtn.hidden = true;
344
- closeCommitModal();
345
- }
346
- }
347
-
348
- // ── Git Polling ─────────────────────────────────────────
349
- function fetchGitStatus() {
350
- fetch('/api/status').then(function (r) { return r.json(); }).catch(function () { return []; })
351
- .then(function (data) {
352
- gitState.repoStatuses = data;
353
- gitState.totalChanges = data.reduce(function (sum, r) { return sum + r.changes.length; }, 0);
354
- updateFooterUI();
355
- });
356
- }
357
-
188
+ // ── Stats ────────────────────────────────────────────────
358
189
  function fetchStats() {
359
190
  fetch('/api/stats').then(function (r) { return r.json(); }).then(function (data) {
360
- gitState.stats = data;
361
- updateFooterUI();
191
+ if (data.entities > 0) {
192
+ var e = data.entities;
193
+ var l = data.links;
194
+ statsEl.innerHTML =
195
+ '<span class="sg-chrome-stat">' + e.toLocaleString() + (e === 1 ? ' entity' : ' entities') + '</span>' +
196
+ '<span class="sg-chrome-stat-sep">|</span>' +
197
+ '<span class="sg-chrome-stat">' + l.toLocaleString() + (l === 1 ? ' link' : ' links') + '</span>';
198
+ }
362
199
  }).catch(function () { /* silently fail */ });
363
200
  }
364
201
 
365
- // Initial fetch
366
- fetchGitStatus();
367
202
  fetchStats();
368
-
369
- // Poll git status every 15s, stats every 60s
370
- setInterval(fetchGitStatus, 15000);
371
203
  setInterval(fetchStats, 60000);
372
204
 
373
- // Sync with Svelte git store
374
- window.addEventListener('studiograph:git-refresh', function () {
375
- fetchGitStatus();
376
- fetchStats();
377
- });
378
-
379
- // ── Git Operations ──────────────────────────────────────
380
- commitBtn.addEventListener('click', function () {
381
- if (commitBtn.disabled) return;
382
- if (listeners['commit'] && listeners['commit'].length > 0) {
383
- emitEvent('commit');
384
- return;
385
- }
386
- openCommitModal();
387
- });
388
-
389
- modalConfirmBtn.addEventListener('click', function () {
390
- if (modalConfirmBtn.disabled) return;
391
- modalConfirmBtn.disabled = true;
392
- fetch('/api/commit', {
393
- method: 'POST',
394
- headers: { 'Content-Type': 'application/json' },
395
- body: JSON.stringify({ message: 'Update from editor' })
396
- })
397
- .then(function (res) { return res.json(); })
398
- .then(function () {
399
- modalConfirmBtn.disabled = false;
400
- closeCommitModal();
401
- fetchGitStatus();
402
- fetchStats();
403
- window.dispatchEvent(new CustomEvent('studiograph:chrome-mutated'));
404
- })
405
- .catch(function () {
406
- modalConfirmBtn.disabled = false;
407
- closeCommitModal();
408
- alert('Commit failed: network error');
409
- fetchGitStatus();
410
- });
411
- });
412
-
413
- revertBtn.addEventListener('click', function () {
414
- if (listeners['revert:open'] && listeners['revert:open'].length > 0) {
415
- emitEvent('revert:open');
416
- return;
417
- }
418
- openRevertModal();
419
- });
420
-
421
- revertConfirmBtn.addEventListener('click', function () {
422
- if (revertConfirmBtn.disabled) return;
423
- revertConfirmBtn.disabled = true;
424
- fetch('/api/revert', {
425
- method: 'POST',
426
- headers: { 'Content-Type': 'application/json' },
427
- body: '{}'
428
- })
429
- .then(function (res) { return res.json(); })
430
- .then(function () {
431
- revertConfirmBtn.disabled = false;
432
- closeRevertModal();
433
- fetchGitStatus();
434
- fetchStats();
435
- window.dispatchEvent(new CustomEvent('studiograph:chrome-mutated'));
436
- })
437
- .catch(function () {
438
- revertConfirmBtn.disabled = false;
439
- closeRevertModal();
440
- alert('Revert failed: network error');
441
- fetchGitStatus();
442
- });
443
- });
444
-
445
205
  // ── Event System ────────────────────────────────────────
446
206
  var listeners = {};
447
207
 
@@ -451,6 +211,9 @@
451
211
  });
452
212
  }
453
213
 
214
+ // ── Save Status Auto-clear ───────────────────────────────
215
+ var saveStatusTimer = null;
216
+
454
217
  // ── Public API ──────────────────────────────────────────
455
218
  window.StudioChrome = {
456
219
  on: function (event, fn) {
@@ -484,15 +247,23 @@
484
247
  * Set save status indicator.
485
248
  * @param {string} text - Status text to display
486
249
  * @param {string} [type] - 'saving'|'saved'|'error'|'' — controls styling
250
+ * @param {number} [clearAfterMs] - auto-clear after this many ms (default 2000 for 'saved')
487
251
  */
488
- setSaveStatus: function (text, type) {
252
+ setSaveStatus: function (text, type, clearAfterMs) {
489
253
  type = type || '';
490
254
  saveStatusEl.textContent = text || '';
491
255
  saveStatusEl.className = 'sg-chrome-save-status' + (type === 'error' ? ' sg-chrome-save-error' : '');
256
+ if (saveStatusTimer) clearTimeout(saveStatusTimer);
257
+ var ms = clearAfterMs != null ? clearAfterMs : (type === 'saved' ? 2000 : 0);
258
+ if (ms > 0) {
259
+ saveStatusTimer = setTimeout(function () {
260
+ saveStatusEl.textContent = '';
261
+ saveStatusEl.className = 'sg-chrome-save-status';
262
+ }, ms);
263
+ }
492
264
  },
493
265
 
494
266
  refreshStatus: function () {
495
- fetchGitStatus();
496
267
  fetchStats();
497
268
  },
498
269
 
@@ -0,0 +1,27 @@
1
+ /**
2
+ * CollabServer — real-time co-editing via Hocuspocus (Yjs CRDT).
3
+ *
4
+ * Each entity body is a shared Y.Text document named "{repo}/{entityType}/{entityId}".
5
+ * Frontmatter is NOT part of the shared document (edited via property inputs separately).
6
+ *
7
+ * - onAuthenticate: verifies __sg_token cookie or Hocuspocus token param
8
+ * - onLoadDocument: seeds Y.Text from the entity's body on disk (first connect only)
9
+ * - onStoreDocument: persists the merged body back to disk after debounce (2s idle)
10
+ */
11
+ import type { IncomingMessage } from 'node:http';
12
+ import type { WebSocket } from 'ws';
13
+ import type { WorkspaceManager } from '../core/workspace-manager.js';
14
+ import type { SessionManager } from './session-manager.js';
15
+ import type { AuthService } from '../services/auth-service.js';
16
+ export declare class CollabServer {
17
+ private workspaceManager;
18
+ private sessionManager;
19
+ private authService;
20
+ private hocus;
21
+ constructor(workspaceManager: WorkspaceManager, sessionManager: SessionManager, authService: AuthService);
22
+ private onAuthenticate;
23
+ private onLoadDocument;
24
+ private onStoreDocument;
25
+ handleConnection(socket: WebSocket, req: IncomingMessage): void;
26
+ destroy(): void;
27
+ }
@@ -0,0 +1,117 @@
1
+ /**
2
+ * CollabServer — real-time co-editing via Hocuspocus (Yjs CRDT).
3
+ *
4
+ * Each entity body is a shared Y.Text document named "{repo}/{entityType}/{entityId}".
5
+ * Frontmatter is NOT part of the shared document (edited via property inputs separately).
6
+ *
7
+ * - onAuthenticate: verifies __sg_token cookie or Hocuspocus token param
8
+ * - onLoadDocument: seeds Y.Text from the entity's body on disk (first connect only)
9
+ * - onStoreDocument: persists the merged body back to disk after debounce (2s idle)
10
+ */
11
+ import { Hocuspocus } from '@hocuspocus/server';
12
+ export class CollabServer {
13
+ workspaceManager;
14
+ sessionManager;
15
+ authService;
16
+ hocus;
17
+ constructor(workspaceManager, sessionManager, authService) {
18
+ this.workspaceManager = workspaceManager;
19
+ this.sessionManager = sessionManager;
20
+ this.authService = authService;
21
+ this.hocus = new Hocuspocus({
22
+ debounce: 2000,
23
+ maxDebounce: 10000,
24
+ quiet: true,
25
+ onAuthenticate: this.onAuthenticate.bind(this),
26
+ onLoadDocument: this.onLoadDocument.bind(this),
27
+ onStoreDocument: this.onStoreDocument.bind(this),
28
+ });
29
+ }
30
+ async onAuthenticate(payload) {
31
+ const { token, requestHeaders, documentName } = payload;
32
+ // Browsers automatically send cookies with the WS upgrade request.
33
+ // Fall back to the Hocuspocus token param for non-browser clients.
34
+ const cookieToken = parseCookie(requestHeaders.cookie ?? '', '__sg_token');
35
+ const resolvedToken = cookieToken || token || '';
36
+ const [repo] = documentName.split('/');
37
+ if (!this.authService.hasUsers()) {
38
+ return { userId: 'anon', userName: 'Anonymous', userEmail: 'anon@local' };
39
+ }
40
+ if (!resolvedToken)
41
+ throw new Error('Unauthorized');
42
+ const user = this.authService.verifyToken(resolvedToken);
43
+ if (!user)
44
+ throw new Error('Invalid token');
45
+ // Check collection-level access
46
+ if (user.role !== 'admin' && repo) {
47
+ const collections = this.authService.getUserCollections(user.id);
48
+ if (!collections.includes(repo))
49
+ throw new Error('Forbidden');
50
+ }
51
+ return {
52
+ userId: String(user.id),
53
+ userName: user.displayName,
54
+ userEmail: user.email,
55
+ };
56
+ }
57
+ async onLoadDocument(payload) {
58
+ const { document, documentName } = payload;
59
+ const [repo, entityType, entityId] = documentName.split('/');
60
+ if (!repo || !entityType || !entityId)
61
+ return;
62
+ try {
63
+ const graph = this.workspaceManager.getGraph(repo);
64
+ const entity = graph.get(entityType, entityId);
65
+ const body = entity?.document?.content ?? '';
66
+ // Only seed if the doc is empty (i.e. first load — no persisted Y state)
67
+ if (body && document.getText('content').length === 0) {
68
+ document.getText('content').insert(0, body);
69
+ }
70
+ }
71
+ catch {
72
+ // Entity not found or unreadable — leave the doc empty, client will handle it
73
+ }
74
+ }
75
+ async onStoreDocument(payload) {
76
+ const { document, documentName, context } = payload;
77
+ const [repo, entityType, entityId] = documentName.split('/');
78
+ if (!repo || !entityType || !entityId)
79
+ return;
80
+ const ctx = context;
81
+ const gitUser = {
82
+ id: ctx?.userId ?? 'collab',
83
+ name: ctx?.userName ?? 'Collab',
84
+ email: ctx?.userEmail ?? 'collab@studiograph',
85
+ };
86
+ try {
87
+ const graph = this.workspaceManager.getGraph(repo);
88
+ const body = document.getText('content').toString();
89
+ // Update body only — frontmatter is preserved because we don't pass `data`
90
+ const updated = await graph.update({
91
+ entityType: entityType,
92
+ entityId,
93
+ content: body,
94
+ skipCommit: true,
95
+ });
96
+ this.sessionManager.markDirty(repo, gitUser, entityType, entityId, updated.path);
97
+ }
98
+ catch (err) {
99
+ console.warn(`[collab] Failed to persist ${documentName}:`, err.message);
100
+ }
101
+ }
102
+ handleConnection(socket, req) {
103
+ this.hocus.handleConnection(socket, req);
104
+ }
105
+ destroy() {
106
+ this.hocus.closeConnections();
107
+ }
108
+ }
109
+ function parseCookie(cookieHeader, name) {
110
+ for (const part of cookieHeader.split(';')) {
111
+ const [k, ...rest] = part.trim().split('=');
112
+ if (k === name)
113
+ return rest.join('=');
114
+ }
115
+ return undefined;
116
+ }
117
+ //# sourceMappingURL=collab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collab.js","sourceRoot":"","sources":["../../src/server/collab.ts"],"names":[],"mappings":"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"}
@@ -29,7 +29,9 @@ import { AuthService } from '../services/auth-service.js';
29
29
  import { MemoryService } from '../services/memory-service.js';
30
30
  import { WsHub } from './ws-hub.js';
31
31
  import { registerWsRoute } from './routes/ws.js';
32
- import { CommitScheduler } from './commit-scheduler.js';
32
+ import { SessionManager } from './session-manager.js';
33
+ import { CollabServer } from './collab.js';
34
+ import { registerCollabRoute } from './routes/collab.js';
33
35
  /**
34
36
  * Auth middleware — validates JWT cookie or Authorization: Bearer <key> header.
35
37
  * When users exist in the auth database, all routes require authentication
@@ -48,7 +50,7 @@ function createAuthHook(apiKeys, authService) {
48
50
  if (req.url.startsWith('/git/'))
49
51
  return;
50
52
  // WebSocket route handles its own auth
51
- if (req.url.startsWith('/ws'))
53
+ if (req.url.startsWith('/ws') || req.url.startsWith('/collab'))
52
54
  return;
53
55
  // Allow static assets (JS, CSS, fonts, images) — needed for login page
54
56
  if (req.url.startsWith('/_app/') || req.url.startsWith('/api/chrome/'))
@@ -138,10 +140,11 @@ export async function createServer(config) {
138
140
  done(null); // Don't consume the body — the route handler pipes req.raw directly
139
141
  });
140
142
  }
141
- // Initialize auth service, WebSocket hub, and commit scheduler
143
+ // Initialize auth service, WebSocket hub, session manager, and collab server
142
144
  const authService = new AuthService(config.workspacePath);
143
145
  const wsHub = new WsHub();
144
- const commitScheduler = new CommitScheduler(config.workspaceManager);
146
+ const sessionManager = new SessionManager(config.workspaceManager, wsHub);
147
+ const collabServer = new CollabServer(config.workspaceManager, sessionManager, authService);
145
148
  // Register auth API routes (before the auth hook so they are always accessible)
146
149
  await registerAuthApiRoutes(fastify, authService);
147
150
  // Auth hook — applied to all routes
@@ -149,8 +152,10 @@ export async function createServer(config) {
149
152
  fastify.addHook('preHandler', authHook);
150
153
  // Register WebSocket route (real-time change notifications)
151
154
  await registerWsRoute(fastify, wsHub, authService);
155
+ // Register collaborative editing WebSocket route (Yjs/Hocuspocus)
156
+ await registerCollabRoute(fastify, collabServer);
152
157
  // Register graph API routes (with per-collection access filtering)
153
- await registerGraphApiRoutes(fastify, config.workspaceManager, authService, wsHub, commitScheduler);
158
+ await registerGraphApiRoutes(fastify, config.workspaceManager, authService, wsHub, sessionManager);
154
159
  // Register workspace API routes (git operations)
155
160
  await registerWorkspaceApiRoutes(fastify, config.workspaceManager, config.gitUser);
156
161
  // Register permissions API routes (self-hosted collection access)
@@ -158,7 +163,7 @@ export async function createServer(config) {
158
163
  // Register git Smart HTTP routes (clone/fetch/push with Basic Auth)
159
164
  await registerGitHttpRoutes(fastify, config.workspaceManager, authService, config.workspacePath, wsHub);
160
165
  // Register sync API routes (collection-scoped sync)
161
- await registerSyncApiRoutes(fastify, config.workspaceManager, authService, config.workspacePath);
166
+ await registerSyncApiRoutes(fastify, config.workspaceManager, authService, config.workspacePath, wsHub);
162
167
  // Register MCP Streamable HTTP endpoint
163
168
  await registerMcpRoutes(fastify, config.workspaceManager);
164
169
  // Serve chrome assets (shared header/footer for app editors)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Collaborative editing WebSocket endpoint — delegates to Hocuspocus via CollabServer.
3
+ */
4
+ import type { FastifyInstance } from 'fastify';
5
+ import type { CollabServer } from '../collab.js';
6
+ export declare function registerCollabRoute(fastify: FastifyInstance, collabServer: CollabServer): Promise<void>;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Collaborative editing WebSocket endpoint — delegates to Hocuspocus via CollabServer.
3
+ */
4
+ export async function registerCollabRoute(fastify, collabServer) {
5
+ fastify.get('/collab', { websocket: true }, (socket, req) => {
6
+ // socket is a ws.WebSocket instance; req.raw is the raw IncomingMessage
7
+ collabServer.handleConnection(socket, req.raw);
8
+ });
9
+ }
10
+ //# sourceMappingURL=collab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collab.js","sourceRoot":"","sources":["../../../src/server/routes/collab.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAwB,EACxB,YAA0B;IAE1B,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QAC1D,wEAAwE;QACxE,YAAY,CAAC,gBAAgB,CAAC,MAAa,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -9,5 +9,5 @@ import type { FastifyInstance } from 'fastify';
9
9
  import { WorkspaceManager } from '../../core/workspace-manager.js';
10
10
  import { AuthService } from '../../services/auth-service.js';
11
11
  import type { WsHub } from '../ws-hub.js';
12
- import type { CommitScheduler } from '../commit-scheduler.js';
13
- export declare function registerGraphApiRoutes(fastify: FastifyInstance, workspaceManager: WorkspaceManager, authService: AuthService, wsHub?: WsHub, commitScheduler?: CommitScheduler): Promise<void>;
12
+ import type { SessionManager } from '../session-manager.js';
13
+ export declare function registerGraphApiRoutes(fastify: FastifyInstance, workspaceManager: WorkspaceManager, authService: AuthService, wsHub?: WsHub, sessionManager?: SessionManager): Promise<void>;