@rool-dev/sdk 0.8.2-dev.02b70e5 → 0.8.2-dev.d82ea25

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 (56) hide show
  1. package/README.md +465 -1005
  2. package/dist/channel.d.ts +93 -248
  3. package/dist/channel.d.ts.map +1 -1
  4. package/dist/channel.js +410 -577
  5. package/dist/channel.js.map +1 -1
  6. package/dist/client.d.ts +14 -46
  7. package/dist/client.d.ts.map +1 -1
  8. package/dist/client.js +31 -124
  9. package/dist/client.js.map +1 -1
  10. package/dist/graphql.d.ts +11 -36
  11. package/dist/graphql.d.ts.map +1 -1
  12. package/dist/graphql.js +72 -311
  13. package/dist/graphql.js.map +1 -1
  14. package/dist/index.d.ts +4 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +4 -4
  17. package/dist/index.js.map +1 -1
  18. package/dist/path.d.ts +6 -0
  19. package/dist/path.d.ts.map +1 -0
  20. package/dist/path.js +47 -0
  21. package/dist/path.js.map +1 -0
  22. package/dist/reroute.d.ts +22 -0
  23. package/dist/reroute.d.ts.map +1 -0
  24. package/dist/reroute.js +61 -0
  25. package/dist/reroute.js.map +1 -0
  26. package/dist/rest.d.ts +27 -0
  27. package/dist/rest.d.ts.map +1 -0
  28. package/dist/rest.js +78 -0
  29. package/dist/rest.js.map +1 -0
  30. package/dist/router.d.ts.map +1 -1
  31. package/dist/router.js +25 -10
  32. package/dist/router.js.map +1 -1
  33. package/dist/space.d.ts +23 -16
  34. package/dist/space.d.ts.map +1 -1
  35. package/dist/space.js +111 -78
  36. package/dist/space.js.map +1 -1
  37. package/dist/subscription.d.ts.map +1 -1
  38. package/dist/subscription.js +47 -40
  39. package/dist/subscription.js.map +1 -1
  40. package/dist/types.d.ts +85 -224
  41. package/dist/types.d.ts.map +1 -1
  42. package/dist/types.js +0 -4
  43. package/dist/types.js.map +1 -1
  44. package/dist/webdav.d.ts +176 -0
  45. package/dist/webdav.d.ts.map +1 -0
  46. package/dist/webdav.js +495 -0
  47. package/dist/webdav.js.map +1 -0
  48. package/package.json +2 -1
  49. package/dist/apps.d.ts +0 -30
  50. package/dist/apps.d.ts.map +0 -1
  51. package/dist/apps.js +0 -81
  52. package/dist/apps.js.map +0 -1
  53. package/dist/media.d.ts +0 -76
  54. package/dist/media.d.ts.map +0 -1
  55. package/dist/media.js +0 -249
  56. package/dist/media.js.map +0 -1
package/dist/space.js CHANGED
@@ -1,9 +1,8 @@
1
- // =============================================================================
2
- // RoolSpace — Space handle with real-time subscription
3
- // =============================================================================
4
1
  import { EventEmitter } from './event-emitter.js';
5
2
  import { SpaceSubscriptionManager } from './subscription.js';
6
3
  import { RoolChannel } from './channel.js';
4
+ import { RoolWebDAV } from './webdav.js';
5
+ import { machinePath } from './path.js';
7
6
  /** Convert a full Channel object to a ChannelInfo summary. */
8
7
  function channelToInfo(id, ch) {
9
8
  return {
@@ -13,9 +12,6 @@ function channelToInfo(id, ch) {
13
12
  createdBy: ch.createdBy,
14
13
  createdByName: ch.createdByName ?? null,
15
14
  interactionCount: Object.values(ch.conversations ?? {}).reduce((sum, conv) => sum + (conv.interactions ? Object.keys(conv.interactions).length : 0), 0),
16
- extensionUrl: ch.extensionUrl ?? null,
17
- extensionId: ch.extensionId ?? null,
18
- manifest: ch.manifest ?? null,
19
15
  };
20
16
  }
21
17
  /**
@@ -37,19 +33,23 @@ export class RoolSpace extends EventEmitter {
37
33
  _channels;
38
34
  _knownChannelIds;
39
35
  graphqlClient;
40
- mediaClient;
36
+ restClient;
41
37
  authManager;
42
38
  router;
43
39
  _route;
40
+ _webdav;
44
41
  logger;
45
42
  onCloseCallback;
46
43
  // Subscription
47
44
  subscriptionManager = null;
45
+ _closed = false;
46
+ _resyncing = false;
47
+ _resyncPending = false;
48
+ _resyncTimer = null;
48
49
  _subscriptionReady = null;
49
50
  // Open channels on this space
50
51
  openChannels = new Map();
51
52
  // Full space data (for channel creation)
52
- _objectIds;
53
53
  _objectStats;
54
54
  _schema;
55
55
  _meta;
@@ -64,16 +64,28 @@ export class RoolSpace extends EventEmitter {
64
64
  this._linkAccess = config.linkAccess;
65
65
  this._memberCount = config.memberCount;
66
66
  this.graphqlClient = config.graphqlClient;
67
- this.mediaClient = config.mediaClient;
67
+ this.restClient = config.restClient;
68
68
  this.authManager = config.authManager;
69
69
  this.router = config.router;
70
70
  this._route = config.initialRoute;
71
+ this._webdav = new RoolWebDAV({
72
+ webdavUrl: this._route.server,
73
+ spaceId: this._id,
74
+ authManager: this.authManager,
75
+ onRefused: async () => {
76
+ await this.reroute();
77
+ return this._route.server;
78
+ },
79
+ });
71
80
  this.logger = config.logger;
72
81
  this.onCloseCallback = config.onClose;
73
82
  this.graphqlClient.setOnRefused(() => this.reroute());
83
+ this.restClient.setOnRefused(async () => {
84
+ await this.reroute();
85
+ return this._route.server;
86
+ });
74
87
  // Store full space data
75
88
  const fd = config.fullData;
76
- this._objectIds = fd.objectIds;
77
89
  this._objectStats = fd.objectStats;
78
90
  this._schema = fd.schema;
79
91
  this._meta = fd.meta;
@@ -84,23 +96,32 @@ export class RoolSpace extends EventEmitter {
84
96
  // Start subscription
85
97
  this.startSubscription();
86
98
  }
87
- // ===========================================================================
88
- // Properties
89
- // ===========================================================================
90
99
  get id() { return this._id; }
91
100
  get name() { return this._name; }
92
101
  get role() { return this._role; }
93
102
  get linkAccess() { return this._linkAccess; }
94
103
  get memberCount() { return this._memberCount; }
95
104
  get route() { return this._route; }
105
+ /** WebDAV client for this space's user-visible files and object filesystem. */
106
+ get webdav() {
107
+ return this._webdav;
108
+ }
109
+ /** Return file-storage quota usage for this space. */
110
+ async getStorageUsage() {
111
+ return this.webdav.getStorageUsage();
112
+ }
113
+ /** Fetch a user-visible file path through the current space. */
114
+ async fetchPath(path, options) {
115
+ const canonical = machinePath(path);
116
+ if (!canonical.startsWith('/rool-drive/'))
117
+ throw new Error('Path is not a fetchable file');
118
+ return this.webdav.get(canonical, options);
119
+ }
96
120
  /**
97
121
  * Live list of channels in this space.
98
122
  * Auto-updates via SSE when channels are created, updated, or deleted.
99
123
  */
100
124
  get channels() { return this._channels; }
101
- // ===========================================================================
102
- // Subscription
103
- // ===========================================================================
104
125
  startSubscription() {
105
126
  let firstProbe = true;
106
127
  this.subscriptionManager = new SpaceSubscriptionManager({
@@ -129,6 +150,8 @@ export class RoolSpace extends EventEmitter {
129
150
  async reroute() {
130
151
  const route = await this.router.resolve(this._id);
131
152
  this._route = route;
153
+ this._webdav.setWebDAVUrl(route.server);
154
+ this.restClient.setApiUrl(route.server);
132
155
  const url = `${route.server.replace(/\/+$/, '')}/graphql`;
133
156
  this.graphqlClient.setGraphqlUrl(url);
134
157
  return url;
@@ -137,9 +160,6 @@ export class RoolSpace extends EventEmitter {
137
160
  ensureSubscribed() {
138
161
  return this._subscriptionReady ?? Promise.resolve();
139
162
  }
140
- // ===========================================================================
141
- // Channel Lifecycle
142
- // ===========================================================================
143
163
  /**
144
164
  * Open a channel on this space.
145
165
  * If the channel doesn't exist, the server creates it.
@@ -170,14 +190,14 @@ export class RoolSpace extends EventEmitter {
170
190
  role: this._role,
171
191
  linkAccess: this._linkAccess,
172
192
  userId: this._userId,
173
- objectIds: this._objectIds,
174
193
  objectStats: this._objectStats,
175
194
  schema: this._schema,
176
195
  meta: this._meta,
177
196
  channel: channelData,
178
197
  channelId,
179
198
  graphqlClient: this.graphqlClient,
180
- mediaClient: this.mediaClient,
199
+ restClient: this.restClient,
200
+ webdav: this.webdav,
181
201
  logger: this.logger,
182
202
  onClose: () => this.unregisterChannel(channelId),
183
203
  });
@@ -189,9 +209,6 @@ export class RoolSpace extends EventEmitter {
189
209
  unregisterChannel(channelId) {
190
210
  this.openChannels.delete(channelId);
191
211
  }
192
- // ===========================================================================
193
- // Space Admin
194
- // ===========================================================================
195
212
  /**
196
213
  * Rename this space.
197
214
  */
@@ -205,9 +222,6 @@ export class RoolSpace extends EventEmitter {
205
222
  async delete() {
206
223
  await this.graphqlClient.deleteSpace(this._id);
207
224
  }
208
- // ===========================================================================
209
- // User Management
210
- // ===========================================================================
211
225
  /**
212
226
  * List users with access to this space.
213
227
  */
@@ -241,17 +255,6 @@ export class RoolSpace extends EventEmitter {
241
255
  throw error;
242
256
  }
243
257
  }
244
- // ===========================================================================
245
- // Channel Management
246
- // ===========================================================================
247
- /**
248
- * List channels in this space.
249
- * Returns the live channel list (kept current via SSE).
250
- * @deprecated Use the `channels` property instead.
251
- */
252
- getChannels() {
253
- return this._channels;
254
- }
255
258
  /**
256
259
  * Rename a channel in this space.
257
260
  */
@@ -268,18 +271,28 @@ export class RoolSpace extends EventEmitter {
268
271
  this._knownChannelIds.delete(channelId);
269
272
  delete this._channelData[channelId];
270
273
  }
271
- // ===========================================================================
272
- // Export
273
- // ===========================================================================
274
- /**
275
- * Export space data and media as a zip archive.
276
- */
274
+ // Targets the owning shard
277
275
  async exportArchive() {
278
- return this.mediaClient.exportArchive(this._id);
276
+ const tokens = await this.authManager.getTokens();
277
+ if (!tokens)
278
+ throw new Error('Not authenticated');
279
+ const headers = {
280
+ Authorization: `Bearer ${tokens.accessToken}`,
281
+ 'X-Rool-Token': tokens.roolToken,
282
+ };
283
+ const path = `/spaces/${encodeURIComponent(this._id)}/export`;
284
+ const buildUrl = () => `${this._route.server.replace(/\/+$/, '')}${path}`;
285
+ let response = await fetch(buildUrl(), { method: 'GET', headers });
286
+ if (response.status === 421) {
287
+ await this.reroute();
288
+ response = await fetch(buildUrl(), { method: 'GET', headers });
289
+ }
290
+ if (!response.ok) {
291
+ const errorText = await response.text().catch(() => response.statusText);
292
+ throw new Error(`Failed to export space: ${response.status} ${errorText}`);
293
+ }
294
+ return response.blob();
279
295
  }
280
- // ===========================================================================
281
- // Refresh
282
- // ===========================================================================
283
296
  /**
284
297
  * Refresh space data from the server.
285
298
  * Updates name, role, linkAccess, channel list, and all cached data.
@@ -288,13 +301,15 @@ export class RoolSpace extends EventEmitter {
288
301
  const data = await this.graphqlClient.openSpaceFull(this._id);
289
302
  this.applyFullData(data);
290
303
  }
291
- // ===========================================================================
292
- // Cleanup
293
- // ===========================================================================
294
304
  /**
295
305
  * Close the space subscription and all open channels.
296
306
  */
297
307
  close() {
308
+ this._closed = true;
309
+ if (this._resyncTimer) {
310
+ clearTimeout(this._resyncTimer);
311
+ this._resyncTimer = null;
312
+ }
298
313
  // Close all open channels
299
314
  for (const channel of this.openChannels.values()) {
300
315
  channel.close();
@@ -309,9 +324,6 @@ export class RoolSpace extends EventEmitter {
309
324
  this.removeAllListeners();
310
325
  this.onCloseCallback();
311
326
  }
312
- // ===========================================================================
313
- // Event Routing (internal)
314
- // ===========================================================================
315
327
  /**
316
328
  * Handle a space event from the SSE subscription.
317
329
  * Routes to channels and emits channel lifecycle events.
@@ -322,19 +334,12 @@ export class RoolSpace extends EventEmitter {
322
334
  this.handleResync();
323
335
  return;
324
336
  }
325
- // Probe request: emit to space listeners (client runs the probe via the iframe bridge)
326
- if (event.type === 'probe_request' && event.requestId && event.channelId && event.method) {
327
- this.emit('probe', {
328
- requestId: event.requestId,
329
- channelId: event.channelId,
330
- method: event.method,
331
- args: event.args ?? {},
332
- });
337
+ if (event.type === 'space_files_changed') {
338
+ this.emit('filesChanged', { spaceId: event.spaceId, source: event.source, timestamp: event.timestamp });
333
339
  return;
334
340
  }
335
- // Open extension: emit to space listeners (client opens split view)
336
- if (event.type === 'open_extension' && event.channelId) {
337
- this.emit('openExtension', { channelId: event.channelId });
341
+ if (event.type === 'space_files_reset') {
342
+ this.emit('filesReset', { spaceId: event.spaceId, source: event.source, timestamp: event.timestamp });
338
343
  return;
339
344
  }
340
345
  // Channel lifecycle events: derive channelCreated/channelUpdated/channelDeleted
@@ -353,7 +358,7 @@ export class RoolSpace extends EventEmitter {
353
358
  this._channels = [...this._channels, info];
354
359
  this.emit('channelCreated', info);
355
360
  }
356
- // Also route to the open channel (for channel-internal handling like name/extension updates)
361
+ // Also route to the open channel for channel-internal handling.
357
362
  const channel = this.openChannels.get(event.channelId);
358
363
  if (channel)
359
364
  channel._handleEvent(event);
@@ -377,37 +382,66 @@ export class RoolSpace extends EventEmitter {
377
382
  channel._handleEvent(event);
378
383
  return;
379
384
  }
380
- // Space-wide events (objects, schema, metadata):
381
- // broadcast to all channels on this space
385
+ // Space-wide non-file events (schema, metadata): broadcast to all channels on this space
382
386
  for (const channel of this.openChannels.values()) {
383
387
  channel._handleEvent(event);
384
388
  }
385
389
  }
386
- /**
387
- * Handle reconnection: fetch full state once, distribute to all channels.
388
- */
390
+ // Reconnect resync: fetch full state and distribute. Retries until it lands —
391
+ // a single failure used to leave the client empty until reload. Single-flight:
392
+ // an event arriving mid-resync sets _resyncPending so we re-run once afterward,
393
+ // ensuring the final state reflects the latest space_changed.
389
394
  handleResync() {
390
- this.logger.info(`[RoolSpace] Space ${this._id} reconnected, resyncing...`);
395
+ if (this._resyncing) {
396
+ this._resyncPending = true;
397
+ return;
398
+ }
399
+ this._resyncing = true;
400
+ this._resyncWithRetry(0);
401
+ }
402
+ _resyncWithRetry(attempt) {
403
+ this._resyncTimer = null;
404
+ if (this._closed) {
405
+ this._resyncing = false;
406
+ return;
407
+ }
391
408
  void this.graphqlClient.openSpaceFull(this._id).then((result) => {
409
+ if (this._closed) {
410
+ this._resyncing = false;
411
+ return;
412
+ }
392
413
  this.applyFullData(result);
393
- // Distribute to all open channels
394
414
  for (const [channelId, channel] of this.openChannels) {
395
415
  const channelData = result.channels[channelId];
396
416
  if (!channelData)
397
- continue; // Channel was deleted between fetch and distribution
417
+ continue; // Channel deleted between fetch and distribution
398
418
  channel._applyResyncData({
399
419
  meta: result.meta,
400
420
  schema: result.schema,
401
- objectIds: result.objectIds,
402
421
  objectStats: result.objectStats,
403
422
  channel: channelData,
404
423
  });
405
424
  }
406
- this.logger.info(`[RoolSpace] Space ${this._id} resync complete (${result.objectIds.length} objects)`);
425
+ this.logger.info(`[RoolSpace] Space ${this._id} resync complete`);
426
+ this._finishResync();
407
427
  }).catch((error) => {
408
- this.logger.error(`[RoolSpace] Space ${this._id} resync failed:`, error);
428
+ if (this._closed) {
429
+ this._resyncing = false;
430
+ return;
431
+ }
432
+ const ms = Math.min(1000 * 2 ** attempt, 30000);
433
+ this.logger.error(`[RoolSpace] Space ${this._id} resync failed (attempt ${attempt + 1}), retrying in ${ms}ms:`, error);
434
+ this._resyncTimer = setTimeout(() => this._resyncWithRetry(attempt + 1), ms);
409
435
  });
410
436
  }
437
+ // Clear in-flight flag; if an event arrived mid-resync, run one more pass.
438
+ _finishResync() {
439
+ this._resyncing = false;
440
+ if (this._resyncPending && !this._closed) {
441
+ this._resyncPending = false;
442
+ this.handleResync();
443
+ }
444
+ }
411
445
  /**
412
446
  * Apply full space data from server (initial load or resync).
413
447
  */
@@ -416,7 +450,6 @@ export class RoolSpace extends EventEmitter {
416
450
  this._role = data.role;
417
451
  this._linkAccess = data.linkAccess;
418
452
  this._memberCount = data.memberCount;
419
- this._objectIds = data.objectIds;
420
453
  this._objectStats = data.objectStats;
421
454
  this._schema = data.schema;
422
455
  this._meta = data.meta;
package/dist/space.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"space.js","sourceRoot":"","sources":["../src/space.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"space.js","sourceRoot":"","sources":["../src/space.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../src/subscription.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAsG,MAAM,YAAY,CAAC;AACjL,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAuW1C,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACtC,wBAAwB,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3D,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAED,qBAAa,yBAAyB;IACpC,OAAO,CAAC,YAAY,CAA4B;gBAEpC,MAAM,EAAE,wBAAwB;IAoBtC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,OAAO,IAAI,IAAI;CAGhB;AA4DD,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACvC,wBAAwB,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3D,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAED,qBAAa,wBAAwB;IACnC,OAAO,CAAC,YAAY,CAA6B;gBAErC,MAAM,EAAE,uBAAuB;IAqBrC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,OAAO,IAAI,IAAI;CAGhB"}
1
+ {"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../src/subscription.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAuD,MAAM,YAAY,CAAC;AAClI,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAoX1C,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACtC,wBAAwB,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3D,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAED,qBAAa,yBAAyB;IACpC,OAAO,CAAC,YAAY,CAA4B;gBAEpC,MAAM,EAAE,wBAAwB;IAoBtC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,OAAO,IAAI,IAAI;CAGhB;AA2DD,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACvC,wBAAwB,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3D,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAED,qBAAa,wBAAwB;IACnC,OAAO,CAAC,YAAY,CAA6B;gBAErC,MAAM,EAAE,uBAAuB;IAqBrC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,OAAO,IAAI,IAAI;CAGhB"}
@@ -15,6 +15,9 @@ function makeDeferred() {
15
15
  const promise = new Promise((res, rej) => { resolve = res; reject = rej; });
16
16
  return { promise, resolve, reject };
17
17
  }
18
+ function isRecord(value) {
19
+ return !!value && typeof value === 'object' && !Array.isArray(value);
20
+ }
18
21
  class Subscription {
19
22
  config;
20
23
  state = { kind: 'idle' };
@@ -73,20 +76,29 @@ class Subscription {
73
76
  return;
74
77
  this.config.onError(input.error);
75
78
  this.rejectInitIfPending(input.error);
76
- this.enterBackoff();
79
+ this.enterBackoff('auth failed');
77
80
  return;
78
81
  case 'message_received':
79
82
  if (state.kind !== 'probing' && state.kind !== 'live')
80
83
  return;
81
84
  this.handleMessage(input.raw);
82
85
  return;
86
+ case 'stream_closing':
87
+ if (state.kind !== 'probing' && state.kind !== 'live')
88
+ return;
89
+ // The server is ending this stream (shutdown/handoff/recycle), so
90
+ // re-resolve and reconnect at once — no backoff wait, this isn't a failure.
91
+ this.backoffDelay = INITIAL_RECONNECT_DELAY;
92
+ this.config.onConnectionStateChanged('disconnected');
93
+ this.tearDown(state);
94
+ this.enterAwaitingAuth();
95
+ return;
83
96
  case 'watchdog_stale':
84
97
  if (state.kind !== 'probing' && state.kind !== 'live')
85
98
  return;
86
- this.config.logger.info(`${this.config.logPrefix} heartbeat timeout`);
87
99
  this.rejectInitIfPending(new Error('Heartbeat timeout'));
88
100
  this.backoffDelay = INITIAL_RECONNECT_DELAY;
89
- this.enterBackoff();
101
+ this.enterBackoff('heartbeat timeout');
90
102
  return;
91
103
  case 'backoff_fired':
92
104
  if (state.kind !== 'backoff')
@@ -145,7 +157,7 @@ class Subscription {
145
157
  this.config.logger.error(`${this.config.logPrefix} failed to create client:`, err);
146
158
  this.config.onError(err);
147
159
  this.rejectInitIfPending(err);
148
- this.enterBackoff();
160
+ this.enterBackoff('client error');
149
161
  return;
150
162
  }
151
163
  this.lastMessageAt = Date.now();
@@ -160,35 +172,26 @@ class Subscription {
160
172
  let realUnsubscribe = () => { };
161
173
  const unsubscribe = () => realUnsubscribe();
162
174
  this.state = { kind: 'probing', client, unsubscribe, watchdog };
163
- this.config.logger.info(`${this.config.logPrefix} connecting...`);
164
175
  realUnsubscribe = client.subscribe({ query: this.config.query, variables: this.config.variables }, {
165
176
  next: (result) => {
166
177
  const data = result.data?.[this.config.dataField];
167
- if (typeof data !== 'string')
178
+ if (!isRecord(data))
168
179
  return;
169
- let raw;
170
- try {
171
- raw = JSON.parse(data);
172
- }
173
- catch (e) {
174
- this.config.logger.error(`${this.config.logPrefix} failed to parse event:`, e);
175
- return;
176
- }
177
- this.handle({ kind: 'message_received', raw });
180
+ this.handle({ kind: 'message_received', raw: data });
178
181
  },
179
182
  // error/complete intentionally not observed.
180
183
  error: () => { },
181
184
  complete: () => { },
182
185
  });
183
186
  }
184
- enterBackoff() {
187
+ enterBackoff(reason) {
185
188
  // From awaiting_auth (after auth_failed) or probing/live (after watchdog_stale).
186
189
  const prev = this.state;
187
190
  const delay = this.backoffDelay;
188
191
  const timer = setTimeout(() => this.handle({ kind: 'backoff_fired' }), delay);
189
192
  this.state = { kind: 'backoff', timer };
190
193
  this.backoffDelay = Math.min(this.backoffDelay * RECONNECT_MULTIPLIER, MAX_RECONNECT_DELAY);
191
- this.config.logger.info(`${this.config.logPrefix} reconnecting in ${delay}ms...`);
194
+ this.config.logger.info(`${this.config.logPrefix} ${reason}, reconnecting in ${delay}ms`);
192
195
  if (prev.kind === 'probing' || prev.kind === 'live') {
193
196
  this.config.onConnectionStateChanged('disconnected');
194
197
  this.tearDown(prev);
@@ -227,6 +230,12 @@ class Subscription {
227
230
  // Every message (including heartbeats) counts for liveness and backoff reset.
228
231
  this.lastMessageAt = Date.now();
229
232
  this.backoffDelay = INITIAL_RECONNECT_DELAY;
233
+ // Control event: the server is ending this stream; re-resolve and reconnect now.
234
+ if (raw.type === 'stream_closing') {
235
+ this.config.logger.info(`${this.config.logPrefix} server closing stream (reason: ${raw.reason ?? 'unknown'}), reconnecting`);
236
+ this.handle({ kind: 'stream_closing' });
237
+ return;
238
+ }
230
239
  const event = this.config.parseEvent(raw);
231
240
  if (!event)
232
241
  return;
@@ -324,6 +333,7 @@ function parseClientEvent(raw, logger) {
324
333
  case 'space_created':
325
334
  return {
326
335
  type, timestamp, spaceId: raw.spaceId, name: raw.name,
336
+ inboundEmailAddress: raw.inboundEmailAddress,
327
337
  ownerId: raw.ownerId, size: raw.size,
328
338
  createdAt: raw.createdAt, updatedAt: raw.updatedAt,
329
339
  role: raw.role,
@@ -335,6 +345,7 @@ function parseClientEvent(raw, logger) {
335
345
  case 'space_access_changed':
336
346
  return {
337
347
  type, timestamp, spaceId: raw.spaceId, name: raw.name,
348
+ inboundEmailAddress: raw.inboundEmailAddress,
338
349
  ownerId: raw.ownerId, size: raw.size,
339
350
  createdAt: raw.createdAt, updatedAt: raw.updatedAt,
340
351
  role: raw.role, linkAccess: raw.linkAccess,
@@ -349,9 +360,6 @@ function parseClientEvent(raw, logger) {
349
360
  channelCreatedAt: raw.createdAt,
350
361
  channelCreatedBy: raw.createdBy,
351
362
  channelCreatedByName: raw.createdByName,
352
- channelExtensionUrl: raw.extensionUrl,
353
- channelExtensionId: raw.extensionId,
354
- channelManifest: raw.manifest,
355
363
  };
356
364
  case 'channel_renamed':
357
365
  return { type, timestamp, spaceId: raw.spaceId, channelId: raw.channelId, name: raw.name };
@@ -394,38 +402,37 @@ export class SpaceSubscriptionManager {
394
402
  function parseSpaceEvent(raw, logger) {
395
403
  if (raw.type === 'heartbeat')
396
404
  return null;
397
- const type = raw.type;
405
+ const rawType = raw.type;
398
406
  const spaceId = raw.spaceId;
399
407
  const timestamp = raw.timestamp;
400
408
  const source = raw.source ?? 'user';
401
- if (!type || !spaceId)
409
+ if (!rawType || !spaceId)
402
410
  return null;
403
- switch (type) {
411
+ // Object/file reactivity is WebDAV sync based. Ignore old object
412
+ // notifications if an older server still emits them.
413
+ if (rawType.startsWith('object_'))
414
+ return null;
415
+ switch (rawType) {
404
416
  case 'connected':
405
- return { type, spaceId, timestamp, source, serverVersion: raw.serverVersion };
417
+ return { type: 'connected', spaceId, timestamp, source, serverVersion: raw.serverVersion };
406
418
  case 'space_changed':
407
- return { type, spaceId, timestamp, source };
408
- case 'object_created':
409
- case 'object_updated':
410
- return { type, spaceId, timestamp, source, objectId: raw.objectId, object: raw.object, objectStat: raw.objectStat };
411
- case 'object_deleted':
412
- return { type, spaceId, timestamp, source, objectId: raw.objectId };
419
+ return { type: 'space_changed', spaceId, timestamp, source };
413
420
  case 'schema_updated':
414
- return { type, spaceId, timestamp, source, schema: raw.schema };
421
+ return { type: 'schema_updated', spaceId, timestamp, source, schema: raw.schema };
415
422
  case 'metadata_updated':
416
- return { type, spaceId, timestamp, source, metadata: raw.metadata };
423
+ return { type: 'metadata_updated', spaceId, timestamp, source, metadata: raw.metadata };
417
424
  case 'channel_updated':
418
- return { type, spaceId, timestamp, source, channelId: raw.channelId, channel: raw.channel };
425
+ return { type: 'channel_updated', spaceId, timestamp, source, channelId: raw.channelId, channel: raw.channel };
419
426
  case 'conversation_updated':
420
- return { type, spaceId, timestamp, source, channelId: raw.channelId, conversationId: raw.conversationId, conversation: raw.conversation };
427
+ return { type: 'conversation_updated', spaceId, timestamp, source, channelId: raw.channelId, conversationId: raw.conversationId, conversation: raw.conversation };
421
428
  case 'channel_deleted':
422
- return { type, spaceId, timestamp, source, channelId: raw.channelId };
423
- case 'probe_request':
424
- return { type, spaceId, timestamp, source, requestId: raw.requestId, channelId: raw.channelId, method: raw.method, args: raw.args ?? {} };
425
- case 'open_extension':
426
- return { type, spaceId, timestamp, source, channelId: raw.channelId };
429
+ return { type: 'channel_deleted', spaceId, timestamp, source, channelId: raw.channelId };
430
+ case 'space_files_changed':
431
+ return { type: 'space_files_changed', spaceId, timestamp, source };
432
+ case 'space_files_reset':
433
+ return { type: 'space_files_reset', spaceId, timestamp, source };
427
434
  default:
428
- logger.warn('[RoolChannel] Unknown space event type:', type);
435
+ logger.warn('[RoolChannel] Unknown space event type:', rawType);
429
436
  return null;
430
437
  }
431
438
  }