@rool-dev/sdk 0.8.1 → 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.
- package/README.md +465 -1005
- package/dist/channel.d.ts +93 -248
- package/dist/channel.d.ts.map +1 -1
- package/dist/channel.js +410 -577
- package/dist/channel.js.map +1 -1
- package/dist/client.d.ts +14 -40
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +31 -116
- package/dist/client.js.map +1 -1
- package/dist/graphql.d.ts +11 -35
- package/dist/graphql.d.ts.map +1 -1
- package/dist/graphql.js +72 -298
- package/dist/graphql.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/path.d.ts +6 -0
- package/dist/path.d.ts.map +1 -0
- package/dist/path.js +47 -0
- package/dist/path.js.map +1 -0
- package/dist/reroute.d.ts +22 -0
- package/dist/reroute.d.ts.map +1 -0
- package/dist/reroute.js +61 -0
- package/dist/reroute.js.map +1 -0
- package/dist/rest.d.ts +27 -0
- package/dist/rest.d.ts.map +1 -0
- package/dist/rest.js +78 -0
- package/dist/rest.js.map +1 -0
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +25 -10
- package/dist/router.js.map +1 -1
- package/dist/space.d.ts +23 -16
- package/dist/space.d.ts.map +1 -1
- package/dist/space.js +115 -67
- package/dist/space.js.map +1 -1
- package/dist/subscription.d.ts.map +1 -1
- package/dist/subscription.js +47 -36
- package/dist/subscription.js.map +1 -1
- package/dist/types.d.ts +86 -203
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -4
- package/dist/types.js.map +1 -1
- package/dist/webdav.d.ts +176 -0
- package/dist/webdav.d.ts.map +1 -0
- package/dist/webdav.js +495 -0
- package/dist/webdav.js.map +1 -0
- package/package.json +2 -1
- package/dist/apps.d.ts +0 -30
- package/dist/apps.d.ts.map +0 -1
- package/dist/apps.js +0 -81
- package/dist/apps.js.map +0 -1
- package/dist/media.d.ts +0 -76
- package/dist/media.d.ts.map +0 -1
- package/dist/media.js +0 -249
- 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
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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,6 +334,14 @@ export class RoolSpace extends EventEmitter {
|
|
|
322
334
|
this.handleResync();
|
|
323
335
|
return;
|
|
324
336
|
}
|
|
337
|
+
if (event.type === 'space_files_changed') {
|
|
338
|
+
this.emit('filesChanged', { spaceId: event.spaceId, source: event.source, timestamp: event.timestamp });
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
if (event.type === 'space_files_reset') {
|
|
342
|
+
this.emit('filesReset', { spaceId: event.spaceId, source: event.source, timestamp: event.timestamp });
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
325
345
|
// Channel lifecycle events: derive channelCreated/channelUpdated/channelDeleted
|
|
326
346
|
if (event.type === 'channel_updated' && event.channelId && event.channel) {
|
|
327
347
|
const info = channelToInfo(event.channelId, event.channel);
|
|
@@ -338,7 +358,7 @@ export class RoolSpace extends EventEmitter {
|
|
|
338
358
|
this._channels = [...this._channels, info];
|
|
339
359
|
this.emit('channelCreated', info);
|
|
340
360
|
}
|
|
341
|
-
// Also route to the open channel
|
|
361
|
+
// Also route to the open channel for channel-internal handling.
|
|
342
362
|
const channel = this.openChannels.get(event.channelId);
|
|
343
363
|
if (channel)
|
|
344
364
|
channel._handleEvent(event);
|
|
@@ -362,37 +382,66 @@ export class RoolSpace extends EventEmitter {
|
|
|
362
382
|
channel._handleEvent(event);
|
|
363
383
|
return;
|
|
364
384
|
}
|
|
365
|
-
// Space-wide events (
|
|
366
|
-
// broadcast to all channels on this space
|
|
385
|
+
// Space-wide non-file events (schema, metadata): broadcast to all channels on this space
|
|
367
386
|
for (const channel of this.openChannels.values()) {
|
|
368
387
|
channel._handleEvent(event);
|
|
369
388
|
}
|
|
370
389
|
}
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
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.
|
|
374
394
|
handleResync() {
|
|
375
|
-
this.
|
|
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
|
+
}
|
|
376
408
|
void this.graphqlClient.openSpaceFull(this._id).then((result) => {
|
|
409
|
+
if (this._closed) {
|
|
410
|
+
this._resyncing = false;
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
377
413
|
this.applyFullData(result);
|
|
378
|
-
// Distribute to all open channels
|
|
379
414
|
for (const [channelId, channel] of this.openChannels) {
|
|
380
415
|
const channelData = result.channels[channelId];
|
|
381
416
|
if (!channelData)
|
|
382
|
-
continue; // Channel
|
|
417
|
+
continue; // Channel deleted between fetch and distribution
|
|
383
418
|
channel._applyResyncData({
|
|
384
419
|
meta: result.meta,
|
|
385
420
|
schema: result.schema,
|
|
386
|
-
objectIds: result.objectIds,
|
|
387
421
|
objectStats: result.objectStats,
|
|
388
422
|
channel: channelData,
|
|
389
423
|
});
|
|
390
424
|
}
|
|
391
|
-
this.logger.info(`[RoolSpace] Space ${this._id} resync complete
|
|
425
|
+
this.logger.info(`[RoolSpace] Space ${this._id} resync complete`);
|
|
426
|
+
this._finishResync();
|
|
392
427
|
}).catch((error) => {
|
|
393
|
-
this.
|
|
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);
|
|
394
435
|
});
|
|
395
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
|
+
}
|
|
396
445
|
/**
|
|
397
446
|
* Apply full space data from server (initial load or resync).
|
|
398
447
|
*/
|
|
@@ -401,7 +450,6 @@ export class RoolSpace extends EventEmitter {
|
|
|
401
450
|
this._role = data.role;
|
|
402
451
|
this._linkAccess = data.linkAccess;
|
|
403
452
|
this._memberCount = data.memberCount;
|
|
404
|
-
this._objectIds = data.objectIds;
|
|
405
453
|
this._objectStats = data.objectStats;
|
|
406
454
|
this._schema = data.schema;
|
|
407
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":"AAAA,gFAAgF;AAChF,uDAAuD;AACvD,gFAAgF;AAEhF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAoC3C,8DAA8D;AAC9D,SAAS,aAAa,CAAC,EAAU,EAAE,EAAW;IAC5C,OAAO;QACL,EAAE;QACF,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI;QACrB,SAAS,EAAE,EAAE,CAAC,SAAS;QACvB,SAAS,EAAE,EAAE,CAAC,SAAS;QACvB,aAAa,EAAE,EAAE,CAAC,aAAa,IAAI,IAAI;QACvC,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,MAAM,CAC5D,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CACxF;QACD,YAAY,EAAE,EAAE,CAAC,YAAY,IAAI,IAAI;QACrC,WAAW,EAAE,EAAE,CAAC,WAAW,IAAI,IAAI;QACnC,QAAQ,EAAE,EAAE,CAAC,QAAQ,IAAI,IAAI;KAC9B,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,SAAU,SAAQ,YAA6B;IAClD,GAAG,CAAS;IACZ,KAAK,CAAS;IACd,KAAK,CAAe;IACpB,OAAO,CAAS;IAChB,WAAW,CAAa;IACxB,YAAY,CAAS;IACrB,SAAS,CAAgB;IACzB,gBAAgB,CAAc;IAC9B,aAAa,CAAgB;IAC7B,WAAW,CAAc;IACzB,WAAW,CAAc;IACzB,MAAM,CAAc;IACpB,MAAM,CAAY;IAClB,MAAM,CAAS;IACf,eAAe,CAAa;IAEpC,eAAe;IACP,mBAAmB,GAAoC,IAAI,CAAC;IAC5D,kBAAkB,GAAyB,IAAI,CAAC;IAExD,8BAA8B;IACtB,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEtD,yCAAyC;IACjC,UAAU,CAAW;IACrB,YAAY,CAAiC;IAC7C,OAAO,CAAc;IACrB,KAAK,CAA0B;IAC/B,YAAY,CAA0B;IAE9C,YAAY,MAAmB;QAC7B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;QACpC,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC1C,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC;QAEtC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAEtD,wBAAwB;QACxB,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,SAAS,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,WAAW,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,QAAQ,CAAC;QAEhC,oCAAoC;QACpC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACtF,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE/D,qBAAqB;QACrB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED,8EAA8E;IAC9E,aAAa;IACb,8EAA8E;IAE9E,IAAI,EAAE,KAAa,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrC,IAAI,IAAI,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,IAAI,IAAI,KAAmB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,IAAI,UAAU,KAAiB,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACzD,IAAI,WAAW,KAAa,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAEvD,IAAI,KAAK,KAAgB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAE9C;;;OAGG;IACH,IAAI,QAAQ,KAAoB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAExD,8EAA8E;IAC9E,eAAe;IACf,8EAA8E;IAEtE,iBAAiB;QACvB,IAAI,UAAU,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,mBAAmB,GAAG,IAAI,wBAAwB,CAAC;YACtD,aAAa,EAAE,KAAK,IAAI,EAAE;gBACxB,IAAI,UAAU,EAAE,CAAC;oBACf,UAAU,GAAG,KAAK,CAAC;oBACnB,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;gBACvC,CAAC;gBACD,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;YACxB,CAAC;YACD,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,GAAG;YACjB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YAChD,wBAAwB,EAAE,CAAC,KAAsB,EAAE,EAAE;gBACnD,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;YAC7C,CAAC;YACD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,IAAI,CAAC,GAAG,sBAAsB,EAAE,KAAK,CAAC,CAAC;YAChF,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAAC;QAC/D,mFAAmF;QACnF,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAEO,KAAK,CAAC,OAAO;QACnB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC;QAC1D,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACtC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,iDAAiD;IACzC,gBAAgB;QACtB,OAAO,IAAI,CAAC,kBAAkB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IACtD,CAAC;IAED,8EAA8E;IAC9E,oBAAoB;IACpB,8EAA8E;IAE9E;;;OAGG;IACH,KAAK,CAAC,WAAW,CAAC,SAAiB;QACjC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/E,MAAM,IAAI,KAAK,CAAC,qGAAqG,CAAC,CAAC;QACzH,CAAC;QAED,4CAA4C;QAC5C,IAAI,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBAC1E,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC;YAC7C,CAAC;YAAC,MAAM,CAAC;gBACP,sDAAsD;gBACtD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACnE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;gBAC9B,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBAC3C,IAAI,CAAC,WAAW;oBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,SAAS,GAAG,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC;YAC9B,EAAE,EAAE,IAAI,CAAC,GAAG;YACZ,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,WAAW,EAAE,IAAI,CAAC,YAAY;YAC9B,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,OAAO,EAAE,WAAW;YACpB,SAAS;YACT,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC;SACjD,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAE1C,oDAAoD;QACpD,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE9B,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,iBAAiB,CAAC,SAAiB;QACzC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,8EAA8E;IAC9E,cAAc;IACd,8EAA8E;IAE9E;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,OAAe;QAC1B,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACxD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC;IAED,8EAA8E;IAC9E,kBAAkB;IAClB,8EAA8E;IAE9E;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,OAAO,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,IAAkB;QAC9C,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,MAAc;QAC7B,OAAO,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC9D,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa,CAAC,UAAsB;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;YAC5B,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,qBAAqB;IACrB,8EAA8E;IAE9E;;;;OAIG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,SAAiB,EAAE,IAAY;QACjD,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,SAAiB;QACnC,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC5D,+DAA+D;QAC/D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QAChE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,8EAA8E;IAC9E,SAAS;IACT,8EAA8E;IAE9E;;OAEG;IACH,KAAK,CAAC,aAAa;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,8EAA8E;IAC9E,UAAU;IACV,8EAA8E;IAE9E;;;OAGG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,8EAA8E;IAC9E,UAAU;IACV,8EAA8E;IAE9E;;OAEG;IACH,KAAK;QACH,0BAA0B;QAC1B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAE1B,oBAAoB;QACpB,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;YACnC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAChC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,8EAA8E;IAC9E,2BAA2B;IAC3B,8EAA8E;IAE9E;;;OAGG;IACK,gBAAgB,CAAC,KAAmB;QAC1C,2EAA2E;QAC3E,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YACjE,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,gFAAgF;QAChF,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACzE,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAE3D,+BAA+B;YAC/B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;YAEnD,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/C,iCAAiC;gBACjC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9E,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,cAAc;gBACd,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC3C,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBAC3C,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;YACpC,CAAC;YAED,6FAA6F;YAC7F,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACvD,IAAI,OAAO;gBAAE,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACxD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;YACtE,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YAE7C,iDAAiD;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACvD,IAAI,OAAO;gBAAE,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QAED,qFAAqF;QACrF,IAAI,WAAW,IAAI,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACvD,IAAI,OAAO;gBAAE,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QAED,iDAAiD;QACjD,0CAA0C;QAC1C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,YAAY;QAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,GAAG,4BAA4B,CAAC,CAAC;QAE5E,KAAK,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YAC9D,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAE3B,kCAAkC;YAClC,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACrD,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAC/C,IAAI,CAAC,WAAW;oBAAE,SAAS,CAAC,qDAAqD;gBACjF,OAAO,CAAC,gBAAgB,CAAC;oBACvB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,OAAO,EAAE,WAAW;iBACrB,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,GAAG,qBAAqB,MAAM,CAAC,SAAS,CAAC,MAAM,WAAW,CAAC,CAAC;QACzG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,IAAI,CAAC,GAAG,iBAAiB,EAAE,KAAK,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,IAAyB;QAC7C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAoB,CAAC;QACvC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;QAClC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC;CACF"}
|
|
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,
|
|
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"}
|
package/dist/subscription.js
CHANGED
|
@@ -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 (
|
|
178
|
+
if (!isRecord(data))
|
|
168
179
|
return;
|
|
169
|
-
|
|
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,34 +402,37 @@ export class SpaceSubscriptionManager {
|
|
|
394
402
|
function parseSpaceEvent(raw, logger) {
|
|
395
403
|
if (raw.type === 'heartbeat')
|
|
396
404
|
return null;
|
|
397
|
-
const
|
|
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 (!
|
|
409
|
+
if (!rawType || !spaceId)
|
|
402
410
|
return null;
|
|
403
|
-
|
|
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 };
|
|
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 };
|
|
423
434
|
default:
|
|
424
|
-
logger.warn('[RoolChannel] Unknown space event type:',
|
|
435
|
+
logger.warn('[RoolChannel] Unknown space event type:', rawType);
|
|
425
436
|
return null;
|
|
426
437
|
}
|
|
427
438
|
}
|