@edge-base/web 0.2.7 → 0.2.8

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.
@@ -172,7 +172,7 @@ export class DatabaseLiveClient {
172
172
  if (!token) {
173
173
  throw new EdgeBaseError(401, 'Database live subscriptions require a signed-in session. Sign in before opening live subscriptions.');
174
174
  }
175
- this.sendRaw({ type: 'auth', token, sdkVersion: '0.2.7' });
175
+ this.sendRaw({ type: 'auth', token, sdkVersion: '0.2.8' });
176
176
  return new Promise((resolve, reject) => {
177
177
  const timeout = setTimeout(() => {
178
178
  if (this.ws)
@@ -355,7 +355,7 @@ export class DatabaseLiveClient {
355
355
  const token = this.tokenManager.currentAccessToken;
356
356
  if (!token || !this.ws || !this.connected)
357
357
  return;
358
- this.sendRaw({ type: 'auth', token, sdkVersion: '0.2.7' });
358
+ this.sendRaw({ type: 'auth', token, sdkVersion: '0.2.8' });
359
359
  }
360
360
  handleAuthStateChange(user) {
361
361
  if (user) {
@@ -0,0 +1,124 @@
1
+ import { type Subscription } from '@edge-base/core';
2
+ import type { RoomConnectionState, RoomMember, RoomReconnectInfo, RoomRecoveryFailureInfo, RoomSignalMeta } from './room.js';
3
+ export type RoomCollabStatus = 'idle' | 'connecting' | 'syncing' | 'ready' | 'reconnecting' | 'degraded';
4
+ export type RoomCollabMode = 'editable' | 'read_only';
5
+ export interface RoomCollabOptions {
6
+ format: string;
7
+ key: string;
8
+ initialMode?: RoomCollabMode;
9
+ /** @deprecated Prefer initialMode. This remains as a compatibility fallback. */
10
+ mode?: RoomCollabMode;
11
+ syncTimeoutMs?: number;
12
+ }
13
+ export interface RoomCollabPeer {
14
+ memberId: string;
15
+ userId: string;
16
+ connectionId?: string;
17
+ role?: string;
18
+ state: Record<string, unknown>;
19
+ isSelf: boolean;
20
+ }
21
+ export interface RoomCollabYDocLike {
22
+ on(event: 'update', handler: (update: Uint8Array, origin: unknown) => void): void;
23
+ off(event: 'update', handler: (update: Uint8Array, origin: unknown) => void): void;
24
+ }
25
+ interface RoomCollabRoomLike {
26
+ join(): Promise<void>;
27
+ leave(): void;
28
+ getConnectionState(): RoomConnectionState;
29
+ members: {
30
+ list(): RoomMember[];
31
+ current(): RoomMember | null;
32
+ awaitCurrent(timeoutMs?: number): Promise<RoomMember | null>;
33
+ setState(state: Record<string, unknown>): Promise<void>;
34
+ clearState(): Promise<void>;
35
+ onSync(handler: (members: RoomMember[]) => void): Subscription;
36
+ onJoin(handler: (member: RoomMember) => void): Subscription;
37
+ onLeave(handler: (member: RoomMember, reason: string) => void): Subscription;
38
+ onStateChange(handler: (member: RoomMember, state: Record<string, unknown>) => void): Subscription;
39
+ };
40
+ signals: {
41
+ send(event: string, payload?: unknown, options?: {
42
+ includeSelf?: boolean;
43
+ }): Promise<void>;
44
+ sendTo(memberId: string, event: string, payload?: unknown): Promise<void>;
45
+ on(event: string, handler: (payload: unknown, meta: RoomSignalMeta) => void): Subscription;
46
+ };
47
+ session: {
48
+ onReconnect(handler: (info: RoomReconnectInfo) => void): Subscription;
49
+ onConnectionStateChange(handler: (state: RoomConnectionState) => void): Subscription;
50
+ onRecoveryFailure(handler: (info: RoomRecoveryFailureInfo) => void): Subscription;
51
+ };
52
+ }
53
+ export declare class RoomCollabClient {
54
+ private readonly room;
55
+ private readonly options;
56
+ private readonly collabKey;
57
+ private readonly remoteOriginToken;
58
+ private readonly subscriptions;
59
+ private readonly statusHandlers;
60
+ private readonly modeHandlers;
61
+ private readonly capabilityFingerprintHandlers;
62
+ private readonly awarenessHandlers;
63
+ private readonly reconnectHandlers;
64
+ private readonly recoveryFailureHandlers;
65
+ private status;
66
+ private mode;
67
+ private capabilityFingerprint;
68
+ private doc;
69
+ private docUpdateHandler;
70
+ private pendingSyncRequestId;
71
+ private syncTimeout;
72
+ private pendingSyncPromise;
73
+ private pendingSyncResolve;
74
+ private pendingSyncReject;
75
+ private localAwarenessOverride;
76
+ private serverSyncEnabled;
77
+ readonly awareness: {
78
+ setLocalState: (state: Record<string, unknown>) => Promise<void>;
79
+ clearLocalState: () => Promise<void>;
80
+ onChange: (handler: (peers: RoomCollabPeer[]) => void) => Subscription;
81
+ getPeers: () => RoomCollabPeer[];
82
+ getSelf: () => RoomCollabPeer | null;
83
+ };
84
+ constructor(room: RoomCollabRoomLike, options: RoomCollabOptions);
85
+ getStatus(): RoomCollabStatus;
86
+ getMode(): RoomCollabMode;
87
+ getCapabilityFingerprint(): string | null;
88
+ onStatusChange(handler: (status: RoomCollabStatus) => void): Subscription;
89
+ onModeChange(handler: (mode: RoomCollabMode) => void): Subscription;
90
+ onCapabilityFingerprintChange(handler: (fingerprint: string | null) => void): Subscription;
91
+ onReconnect(handler: (info: RoomReconnectInfo) => void): Subscription;
92
+ onRecoveryFailure(handler: (info: RoomRecoveryFailureInfo) => void): Subscription;
93
+ join(): Promise<void>;
94
+ bind(doc: RoomCollabYDocLike): void;
95
+ unbind(): void;
96
+ sync(): Promise<void>;
97
+ leave(): Promise<void>;
98
+ destroy(): Promise<void>;
99
+ private waitForRoomConnection;
100
+ private setLocalAwarenessState;
101
+ private clearLocalAwarenessState;
102
+ private getSelf;
103
+ private getSyncPeerCount;
104
+ private getPeers;
105
+ private toPeer;
106
+ private emitAwarenessChange;
107
+ private requestSyncIfNeeded;
108
+ private handleIncomingUpdate;
109
+ private handleControlSignal;
110
+ private handleSyncRequest;
111
+ private handleSyncResponse;
112
+ private parsePayload;
113
+ private clearSyncState;
114
+ private resolvePendingSync;
115
+ private rejectPendingSync;
116
+ private unsubscribeAll;
117
+ private setStatus;
118
+ private setMode;
119
+ private setCapabilityFingerprint;
120
+ private refreshCapabilityState;
121
+ }
122
+ export declare function createRoomCollab(room: RoomCollabRoomLike, options: RoomCollabOptions): RoomCollabClient;
123
+ export {};
124
+ //# sourceMappingURL=room-collab-core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room-collab-core.d.ts","sourceRoot":"","sources":["../src/room-collab-core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,675 @@
1
+ import { EdgeBaseError, createSubscription } from '@edge-base/core';
2
+ const ROOM_COLLAB_MEMBER_STATE_KEY = '__collab';
3
+ const ROOM_COLLAB_MEMBER_META_KEY = '__collab_meta';
4
+ const ROOM_COLLAB_CONTROL_EVENT = 'collab.control';
5
+ const ROOM_COLLAB_UPDATE_EVENT = 'collab.update';
6
+ const ROOM_COLLAB_SYNC_REQUEST_EVENT = 'collab.sync_request';
7
+ const ROOM_COLLAB_SYNC_RESPONSE_EVENT = 'collab.sync_response';
8
+ const DEFAULT_SYNC_TIMEOUT_MS = 1500;
9
+ const ROOM_COLLAB_SYNC_SOURCE_SERVER = 'server_durable';
10
+ const ROOM_COLLAB_SYNC_SOURCE_PEER = 'peer_live';
11
+ let yjsRuntimePromise = null;
12
+ function isRecord(value) {
13
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
14
+ }
15
+ function cloneRecord(value) {
16
+ if (typeof structuredClone === 'function') {
17
+ return structuredClone(value);
18
+ }
19
+ return JSON.parse(JSON.stringify(value ?? {}));
20
+ }
21
+ function scopedCollabKey(format, key) {
22
+ return `${format}:${key}`;
23
+ }
24
+ function encodeBytesToBase64(bytes) {
25
+ let binary = '';
26
+ for (const byte of bytes) {
27
+ binary += String.fromCharCode(byte);
28
+ }
29
+ if (typeof btoa === 'function') {
30
+ return btoa(binary);
31
+ }
32
+ const globalBuffer = globalThis.Buffer;
33
+ if (globalBuffer) {
34
+ return globalBuffer.from(binary, 'binary').toString('base64');
35
+ }
36
+ throw new EdgeBaseError(0, 'Base64 encoding is unavailable in this runtime.');
37
+ }
38
+ function decodeBase64ToBytes(value) {
39
+ let binary = '';
40
+ if (typeof atob === 'function') {
41
+ binary = atob(value);
42
+ }
43
+ else {
44
+ const globalBuffer = globalThis.Buffer;
45
+ if (!globalBuffer) {
46
+ throw new EdgeBaseError(0, 'Base64 decoding is unavailable in this runtime.');
47
+ }
48
+ binary = globalBuffer.from(value, 'base64').toString('binary');
49
+ }
50
+ const bytes = new Uint8Array(binary.length);
51
+ for (let index = 0; index < binary.length; index += 1) {
52
+ bytes[index] = binary.charCodeAt(index);
53
+ }
54
+ return bytes;
55
+ }
56
+ function extractAwarenessRoot(memberState) {
57
+ const root = memberState[ROOM_COLLAB_MEMBER_STATE_KEY];
58
+ return isRecord(root) ? root : {};
59
+ }
60
+ function extractMetaRoot(memberState) {
61
+ const root = memberState[ROOM_COLLAB_MEMBER_META_KEY];
62
+ return isRecord(root) ? root : {};
63
+ }
64
+ function extractScopedAwarenessState(memberState, collabKey) {
65
+ const awarenessRoot = extractAwarenessRoot(memberState);
66
+ const scopedState = awarenessRoot[collabKey];
67
+ if (!isRecord(scopedState)) {
68
+ return null;
69
+ }
70
+ return cloneRecord(scopedState);
71
+ }
72
+ function isMode(value) {
73
+ return value === 'editable' || value === 'read_only';
74
+ }
75
+ function extractScopedMeta(memberState, collabKey) {
76
+ const metaRoot = extractMetaRoot(memberState);
77
+ const scopedMeta = metaRoot[collabKey];
78
+ if (!isRecord(scopedMeta)) {
79
+ return null;
80
+ }
81
+ return {
82
+ mode: isMode(scopedMeta.mode) ? scopedMeta.mode : undefined,
83
+ capabilityFingerprint: typeof scopedMeta.capabilityFingerprint === 'string'
84
+ || scopedMeta.capabilityFingerprint === null
85
+ ? scopedMeta.capabilityFingerprint
86
+ : undefined,
87
+ };
88
+ }
89
+ function mapConnectionStateToCollabStatus(state, hasSyncPending) {
90
+ switch (state) {
91
+ case 'connecting':
92
+ return 'connecting';
93
+ case 'reconnecting':
94
+ return 'reconnecting';
95
+ case 'connected':
96
+ return hasSyncPending ? 'syncing' : 'ready';
97
+ case 'auth_lost':
98
+ case 'kicked':
99
+ return 'degraded';
100
+ case 'idle':
101
+ return 'idle';
102
+ case 'disconnected':
103
+ return 'degraded';
104
+ default:
105
+ return 'idle';
106
+ }
107
+ }
108
+ async function loadYjsRuntime() {
109
+ if (!yjsRuntimePromise) {
110
+ yjsRuntimePromise = import('yjs')
111
+ .then((module) => ({
112
+ applyUpdate: module.applyUpdate,
113
+ encodeStateAsUpdate: module.encodeStateAsUpdate,
114
+ }))
115
+ .catch((error) => {
116
+ yjsRuntimePromise = null;
117
+ const message = error instanceof Error ? error.message : 'Unknown Yjs import error';
118
+ throw new EdgeBaseError(0, `room.collab({ format: 'yjs', ... }) requires the 'yjs' package in the application runtime. ${message}`);
119
+ });
120
+ }
121
+ return yjsRuntimePromise;
122
+ }
123
+ export class RoomCollabClient {
124
+ room;
125
+ options;
126
+ collabKey;
127
+ remoteOriginToken = Symbol('edgebase.room.collab.remote');
128
+ subscriptions = [];
129
+ statusHandlers = [];
130
+ modeHandlers = [];
131
+ capabilityFingerprintHandlers = [];
132
+ awarenessHandlers = [];
133
+ reconnectHandlers = [];
134
+ recoveryFailureHandlers = [];
135
+ status = 'idle';
136
+ mode;
137
+ capabilityFingerprint = null;
138
+ doc = null;
139
+ docUpdateHandler = null;
140
+ pendingSyncRequestId = null;
141
+ syncTimeout = null;
142
+ pendingSyncPromise = null;
143
+ pendingSyncResolve = null;
144
+ pendingSyncReject = null;
145
+ localAwarenessOverride = null;
146
+ serverSyncEnabled = false;
147
+ awareness = {
148
+ setLocalState: (state) => this.setLocalAwarenessState(state),
149
+ clearLocalState: () => this.clearLocalAwarenessState(),
150
+ onChange: (handler) => {
151
+ this.awarenessHandlers.push(handler);
152
+ return createSubscription(() => {
153
+ const index = this.awarenessHandlers.indexOf(handler);
154
+ if (index >= 0)
155
+ this.awarenessHandlers.splice(index, 1);
156
+ });
157
+ },
158
+ getPeers: () => this.getPeers(),
159
+ getSelf: () => this.getSelf(),
160
+ };
161
+ constructor(room, options) {
162
+ this.room = room;
163
+ this.options = {
164
+ format: options.format,
165
+ key: options.key,
166
+ initialMode: options.initialMode ?? options.mode ?? 'editable',
167
+ mode: options.mode ?? options.initialMode ?? 'editable',
168
+ syncTimeoutMs: options.syncTimeoutMs ?? DEFAULT_SYNC_TIMEOUT_MS,
169
+ };
170
+ this.collabKey = scopedCollabKey(this.options.format, this.options.key);
171
+ this.mode = this.options.initialMode;
172
+ this.status = mapConnectionStateToCollabStatus(this.room.getConnectionState(), false);
173
+ this.subscriptions.push(this.room.session.onReconnect((info) => {
174
+ for (const handler of this.reconnectHandlers) {
175
+ handler(info);
176
+ }
177
+ }));
178
+ this.subscriptions.push(this.room.session.onConnectionStateChange((state) => {
179
+ this.setStatus(mapConnectionStateToCollabStatus(state, this.pendingSyncRequestId !== null));
180
+ this.refreshCapabilityState();
181
+ if ((state === 'auth_lost' || state === 'kicked') && this.pendingSyncReject) {
182
+ this.rejectPendingSync(new EdgeBaseError(401, 'Room collab lost authorization while syncing.'));
183
+ }
184
+ if (state === 'connected' && this.doc) {
185
+ void this.sync();
186
+ }
187
+ }));
188
+ this.subscriptions.push(this.room.session.onRecoveryFailure((info) => {
189
+ for (const handler of this.recoveryFailureHandlers) {
190
+ handler(info);
191
+ }
192
+ }));
193
+ this.subscriptions.push(this.room.members.onSync(() => {
194
+ this.refreshCapabilityState();
195
+ this.emitAwarenessChange();
196
+ }));
197
+ this.subscriptions.push(this.room.members.onJoin(() => {
198
+ this.refreshCapabilityState();
199
+ this.emitAwarenessChange();
200
+ }));
201
+ this.subscriptions.push(this.room.members.onLeave(() => {
202
+ this.refreshCapabilityState();
203
+ this.emitAwarenessChange();
204
+ }));
205
+ this.subscriptions.push(this.room.members.onStateChange(() => {
206
+ this.refreshCapabilityState();
207
+ this.emitAwarenessChange();
208
+ }));
209
+ this.subscriptions.push(this.room.signals.on(ROOM_COLLAB_CONTROL_EVENT, (payload, meta) => {
210
+ this.handleControlSignal(payload, meta);
211
+ }));
212
+ this.subscriptions.push(this.room.signals.on(ROOM_COLLAB_UPDATE_EVENT, (payload) => {
213
+ void this.handleIncomingUpdate(payload);
214
+ }));
215
+ this.subscriptions.push(this.room.signals.on(ROOM_COLLAB_SYNC_REQUEST_EVENT, (payload, meta) => {
216
+ void this.handleSyncRequest(payload, meta);
217
+ }));
218
+ this.subscriptions.push(this.room.signals.on(ROOM_COLLAB_SYNC_RESPONSE_EVENT, (payload) => {
219
+ void this.handleSyncResponse(payload);
220
+ }));
221
+ }
222
+ getStatus() {
223
+ return this.status;
224
+ }
225
+ getMode() {
226
+ return this.mode;
227
+ }
228
+ getCapabilityFingerprint() {
229
+ return this.capabilityFingerprint;
230
+ }
231
+ onStatusChange(handler) {
232
+ this.statusHandlers.push(handler);
233
+ return createSubscription(() => {
234
+ const index = this.statusHandlers.indexOf(handler);
235
+ if (index >= 0)
236
+ this.statusHandlers.splice(index, 1);
237
+ });
238
+ }
239
+ onModeChange(handler) {
240
+ this.modeHandlers.push(handler);
241
+ return createSubscription(() => {
242
+ const index = this.modeHandlers.indexOf(handler);
243
+ if (index >= 0)
244
+ this.modeHandlers.splice(index, 1);
245
+ });
246
+ }
247
+ onCapabilityFingerprintChange(handler) {
248
+ this.capabilityFingerprintHandlers.push(handler);
249
+ return createSubscription(() => {
250
+ const index = this.capabilityFingerprintHandlers.indexOf(handler);
251
+ if (index >= 0)
252
+ this.capabilityFingerprintHandlers.splice(index, 1);
253
+ });
254
+ }
255
+ onReconnect(handler) {
256
+ this.reconnectHandlers.push(handler);
257
+ return createSubscription(() => {
258
+ const index = this.reconnectHandlers.indexOf(handler);
259
+ if (index >= 0)
260
+ this.reconnectHandlers.splice(index, 1);
261
+ });
262
+ }
263
+ onRecoveryFailure(handler) {
264
+ this.recoveryFailureHandlers.push(handler);
265
+ return createSubscription(() => {
266
+ const index = this.recoveryFailureHandlers.indexOf(handler);
267
+ if (index >= 0)
268
+ this.recoveryFailureHandlers.splice(index, 1);
269
+ });
270
+ }
271
+ async join() {
272
+ this.setStatus('connecting');
273
+ await this.room.join();
274
+ await this.waitForRoomConnection();
275
+ this.refreshCapabilityState();
276
+ if (this.doc) {
277
+ await this.sync();
278
+ return;
279
+ }
280
+ this.setStatus('ready');
281
+ }
282
+ bind(doc) {
283
+ if (this.doc === doc) {
284
+ if (this.room.getConnectionState() === 'connected') {
285
+ void this.sync();
286
+ }
287
+ return;
288
+ }
289
+ this.unbind();
290
+ this.doc = doc;
291
+ this.docUpdateHandler = (update, origin) => {
292
+ if (origin === this.remoteOriginToken || this.mode === 'read_only') {
293
+ return;
294
+ }
295
+ if (this.room.getConnectionState() !== 'connected') {
296
+ return;
297
+ }
298
+ void this.room.signals
299
+ .send(ROOM_COLLAB_UPDATE_EVENT, {
300
+ format: this.options.format,
301
+ key: this.options.key,
302
+ update: encodeBytesToBase64(update),
303
+ })
304
+ .catch(() => {
305
+ this.setStatus('degraded');
306
+ });
307
+ };
308
+ doc.on('update', this.docUpdateHandler);
309
+ if (this.room.getConnectionState() === 'connected') {
310
+ void this.room.members.awaitCurrent(1000).then((localMember) => {
311
+ if (localMember) {
312
+ this.refreshCapabilityState();
313
+ this.emitAwarenessChange();
314
+ }
315
+ });
316
+ void this.requestSyncIfNeeded();
317
+ }
318
+ }
319
+ unbind() {
320
+ this.resolvePendingSync();
321
+ if (this.doc && this.docUpdateHandler) {
322
+ this.doc.off('update', this.docUpdateHandler);
323
+ }
324
+ this.doc = null;
325
+ this.docUpdateHandler = null;
326
+ if (this.room.getConnectionState() === 'connected') {
327
+ this.setStatus('ready');
328
+ }
329
+ else {
330
+ this.setStatus(mapConnectionStateToCollabStatus(this.room.getConnectionState(), false));
331
+ }
332
+ }
333
+ async sync() {
334
+ if (!this.doc) {
335
+ if (this.room.getConnectionState() === 'connected') {
336
+ this.setStatus('ready');
337
+ }
338
+ return;
339
+ }
340
+ const connectionState = this.room.getConnectionState();
341
+ if (connectionState !== 'connected') {
342
+ await this.waitForRoomConnection();
343
+ }
344
+ await this.requestSyncIfNeeded();
345
+ }
346
+ async leave() {
347
+ this.unbind();
348
+ this.unsubscribeAll();
349
+ this.room.leave();
350
+ this.setStatus('idle');
351
+ }
352
+ async destroy() {
353
+ await this.leave();
354
+ }
355
+ async waitForRoomConnection() {
356
+ const currentState = this.room.getConnectionState();
357
+ if (currentState === 'connected') {
358
+ return;
359
+ }
360
+ if (currentState === 'auth_lost' || currentState === 'kicked') {
361
+ throw new EdgeBaseError(401, 'Room collab could not join because the room session is unavailable.');
362
+ }
363
+ await new Promise((resolve, reject) => {
364
+ const subscription = this.room.session.onConnectionStateChange((state) => {
365
+ if (state === 'connected') {
366
+ subscription.unsubscribe();
367
+ resolve();
368
+ return;
369
+ }
370
+ if (state === 'auth_lost' || state === 'kicked') {
371
+ subscription.unsubscribe();
372
+ reject(new EdgeBaseError(401, 'Room collab lost authorization while connecting.'));
373
+ }
374
+ });
375
+ });
376
+ }
377
+ async setLocalAwarenessState(state) {
378
+ const nextState = cloneRecord(state);
379
+ const currentMemberState = this.room.members.current()?.state ?? {};
380
+ const awarenessRoot = extractAwarenessRoot(currentMemberState);
381
+ await this.room.members.setState({
382
+ [ROOM_COLLAB_MEMBER_STATE_KEY]: {
383
+ ...awarenessRoot,
384
+ [this.collabKey]: nextState,
385
+ },
386
+ });
387
+ this.localAwarenessOverride = nextState;
388
+ this.emitAwarenessChange();
389
+ }
390
+ async clearLocalAwarenessState() {
391
+ const currentMemberState = this.room.members.current()?.state ?? {};
392
+ const awarenessRoot = extractAwarenessRoot(currentMemberState);
393
+ if (!(this.collabKey in awarenessRoot)) {
394
+ this.localAwarenessOverride = null;
395
+ this.emitAwarenessChange();
396
+ return;
397
+ }
398
+ const nextAwarenessRoot = { ...awarenessRoot };
399
+ delete nextAwarenessRoot[this.collabKey];
400
+ await this.room.members.setState({
401
+ [ROOM_COLLAB_MEMBER_STATE_KEY]: nextAwarenessRoot,
402
+ });
403
+ this.localAwarenessOverride = null;
404
+ this.emitAwarenessChange();
405
+ }
406
+ getSelf() {
407
+ const current = this.room.members.current();
408
+ if (!current) {
409
+ return null;
410
+ }
411
+ return this.toPeer(current, true);
412
+ }
413
+ getSyncPeerCount() {
414
+ const currentMember = this.room.members.current();
415
+ const currentMemberId = currentMember?.memberId ?? null;
416
+ const currentConnectionId = currentMember?.connectionId ?? null;
417
+ return this.room.members
418
+ .list()
419
+ .filter((member) => {
420
+ if (currentConnectionId && member.connectionId === currentConnectionId) {
421
+ return false;
422
+ }
423
+ if (currentMemberId && member.memberId === currentMemberId) {
424
+ return false;
425
+ }
426
+ return true;
427
+ })
428
+ .length;
429
+ }
430
+ getPeers() {
431
+ const currentMemberId = this.room.members.current()?.memberId ?? null;
432
+ return this.room.members
433
+ .list()
434
+ .filter((member) => member.memberId !== currentMemberId)
435
+ .map((member) => this.toPeer(member, false))
436
+ .filter((peer) => peer !== null);
437
+ }
438
+ toPeer(member, isSelf) {
439
+ const scopedState = isSelf && this.localAwarenessOverride
440
+ ? cloneRecord(this.localAwarenessOverride)
441
+ : extractScopedAwarenessState(member.state, this.collabKey);
442
+ if (!scopedState) {
443
+ return null;
444
+ }
445
+ return {
446
+ memberId: member.memberId,
447
+ userId: member.userId,
448
+ connectionId: member.connectionId,
449
+ role: member.role,
450
+ state: scopedState,
451
+ isSelf,
452
+ };
453
+ }
454
+ emitAwarenessChange() {
455
+ const peers = this.getPeers();
456
+ for (const handler of this.awarenessHandlers) {
457
+ handler(peers.map((peer) => ({
458
+ ...peer,
459
+ state: cloneRecord(peer.state),
460
+ })));
461
+ }
462
+ }
463
+ async requestSyncIfNeeded() {
464
+ if (this.pendingSyncPromise) {
465
+ return this.pendingSyncPromise;
466
+ }
467
+ if (!this.doc) {
468
+ this.setStatus('ready');
469
+ return Promise.resolve();
470
+ }
471
+ const syncPeerCount = this.getSyncPeerCount();
472
+ if (syncPeerCount === 0 && !this.serverSyncEnabled) {
473
+ this.resolvePendingSync();
474
+ this.setStatus('ready');
475
+ return Promise.resolve();
476
+ }
477
+ this.resolvePendingSync();
478
+ const requestId = `collab-sync-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
479
+ this.pendingSyncPromise = new Promise((resolve, reject) => {
480
+ this.pendingSyncResolve = resolve;
481
+ this.pendingSyncReject = reject;
482
+ });
483
+ this.pendingSyncRequestId = requestId;
484
+ this.setStatus('syncing');
485
+ this.syncTimeout = setTimeout(() => {
486
+ if (this.pendingSyncRequestId === requestId) {
487
+ this.resolvePendingSync();
488
+ this.setStatus('ready');
489
+ }
490
+ }, this.options.syncTimeoutMs);
491
+ void this.room.signals
492
+ .send(ROOM_COLLAB_SYNC_REQUEST_EVENT, {
493
+ format: this.options.format,
494
+ key: this.options.key,
495
+ requestId,
496
+ })
497
+ .catch(() => {
498
+ this.rejectPendingSync(new EdgeBaseError(0, 'Room collab sync request failed.'));
499
+ this.setStatus('degraded');
500
+ });
501
+ return this.pendingSyncPromise;
502
+ }
503
+ async handleIncomingUpdate(payload) {
504
+ if (!this.doc) {
505
+ return;
506
+ }
507
+ const parsed = this.parsePayload(payload);
508
+ if (!parsed || typeof parsed.update !== 'string') {
509
+ return;
510
+ }
511
+ try {
512
+ const yjs = await loadYjsRuntime();
513
+ yjs.applyUpdate(this.doc, decodeBase64ToBytes(parsed.update), this.remoteOriginToken);
514
+ }
515
+ catch {
516
+ this.setStatus('degraded');
517
+ }
518
+ }
519
+ handleControlSignal(payload, meta) {
520
+ if (meta.serverSent !== true || !isRecord(payload)) {
521
+ return;
522
+ }
523
+ const typed = payload;
524
+ if (typed.format !== this.options.format || typed.key !== this.options.key) {
525
+ return;
526
+ }
527
+ if (isMode(typed.mode)) {
528
+ this.setMode(typed.mode);
529
+ }
530
+ if (typeof typed.capabilityFingerprint === 'string' || typed.capabilityFingerprint === null) {
531
+ this.setCapabilityFingerprint(typed.capabilityFingerprint);
532
+ }
533
+ if (typeof typed.serverSync === 'boolean') {
534
+ const previous = this.serverSyncEnabled;
535
+ this.serverSyncEnabled = typed.serverSync;
536
+ if (typed.serverSync &&
537
+ !previous &&
538
+ this.doc &&
539
+ this.room.getConnectionState() === 'connected' &&
540
+ this.pendingSyncRequestId === null) {
541
+ void this.requestSyncIfNeeded();
542
+ }
543
+ }
544
+ }
545
+ async handleSyncRequest(payload, meta) {
546
+ if (!this.doc || !meta.memberId) {
547
+ return;
548
+ }
549
+ const parsed = this.parsePayload(payload);
550
+ if (!parsed || typeof parsed.requestId !== 'string') {
551
+ return;
552
+ }
553
+ try {
554
+ const yjs = await loadYjsRuntime();
555
+ const snapshot = yjs.encodeStateAsUpdate(this.doc);
556
+ await this.room.signals.sendTo(meta.memberId, ROOM_COLLAB_SYNC_RESPONSE_EVENT, {
557
+ format: this.options.format,
558
+ key: this.options.key,
559
+ requestId: parsed.requestId,
560
+ update: encodeBytesToBase64(snapshot),
561
+ syncSource: ROOM_COLLAB_SYNC_SOURCE_PEER,
562
+ });
563
+ }
564
+ catch {
565
+ this.setStatus('degraded');
566
+ }
567
+ }
568
+ async handleSyncResponse(payload) {
569
+ if (!this.doc || !this.pendingSyncRequestId) {
570
+ return;
571
+ }
572
+ const parsed = this.parsePayload(payload);
573
+ if (!parsed
574
+ || typeof parsed.requestId !== 'string'
575
+ || parsed.requestId !== this.pendingSyncRequestId
576
+ || typeof parsed.update !== 'string') {
577
+ return;
578
+ }
579
+ try {
580
+ const yjs = await loadYjsRuntime();
581
+ yjs.applyUpdate(this.doc, decodeBase64ToBytes(parsed.update), this.remoteOriginToken);
582
+ const syncSource = parsed.syncSource ?? ROOM_COLLAB_SYNC_SOURCE_PEER;
583
+ if (syncSource === ROOM_COLLAB_SYNC_SOURCE_SERVER && this.getSyncPeerCount() > 0) {
584
+ return;
585
+ }
586
+ this.resolvePendingSync();
587
+ this.setStatus('ready');
588
+ }
589
+ catch (error) {
590
+ const message = error instanceof Error ? error.message : 'Unknown sync apply error';
591
+ this.rejectPendingSync(new EdgeBaseError(0, `Room collab sync response failed to apply. ${message}`));
592
+ this.setStatus('degraded');
593
+ }
594
+ }
595
+ parsePayload(payload) {
596
+ if (!isRecord(payload)) {
597
+ return null;
598
+ }
599
+ const typed = payload;
600
+ if (typed.format !== this.options.format || typed.key !== this.options.key) {
601
+ return null;
602
+ }
603
+ return {
604
+ requestId: typeof typed.requestId === 'string' ? typed.requestId : undefined,
605
+ update: typeof typed.update === 'string' ? typed.update : undefined,
606
+ syncSource: typed.syncSource === ROOM_COLLAB_SYNC_SOURCE_SERVER ||
607
+ typed.syncSource === ROOM_COLLAB_SYNC_SOURCE_PEER
608
+ ? typed.syncSource
609
+ : undefined,
610
+ };
611
+ }
612
+ clearSyncState() {
613
+ this.pendingSyncRequestId = null;
614
+ if (this.syncTimeout) {
615
+ clearTimeout(this.syncTimeout);
616
+ this.syncTimeout = null;
617
+ }
618
+ this.pendingSyncPromise = null;
619
+ this.pendingSyncResolve = null;
620
+ this.pendingSyncReject = null;
621
+ }
622
+ resolvePendingSync() {
623
+ const resolve = this.pendingSyncResolve;
624
+ this.clearSyncState();
625
+ resolve?.();
626
+ }
627
+ rejectPendingSync(error) {
628
+ const reject = this.pendingSyncReject;
629
+ this.clearSyncState();
630
+ reject?.(error);
631
+ }
632
+ unsubscribeAll() {
633
+ while (this.subscriptions.length > 0) {
634
+ const subscription = this.subscriptions.pop();
635
+ subscription?.unsubscribe();
636
+ }
637
+ }
638
+ setStatus(next) {
639
+ if (this.status === next) {
640
+ return;
641
+ }
642
+ this.status = next;
643
+ for (const handler of this.statusHandlers) {
644
+ handler(next);
645
+ }
646
+ }
647
+ setMode(next) {
648
+ if (this.mode === next) {
649
+ return;
650
+ }
651
+ this.mode = next;
652
+ for (const handler of this.modeHandlers) {
653
+ handler(next);
654
+ }
655
+ }
656
+ setCapabilityFingerprint(next) {
657
+ if (this.capabilityFingerprint === next) {
658
+ return;
659
+ }
660
+ this.capabilityFingerprint = next;
661
+ for (const handler of this.capabilityFingerprintHandlers) {
662
+ handler(next);
663
+ }
664
+ }
665
+ refreshCapabilityState() {
666
+ const currentMember = this.room.members.current();
667
+ const scopedMeta = currentMember ? extractScopedMeta(currentMember.state, this.collabKey) : null;
668
+ this.setMode(scopedMeta?.mode ?? this.options.initialMode);
669
+ this.setCapabilityFingerprint(scopedMeta?.capabilityFingerprint ?? null);
670
+ }
671
+ }
672
+ export function createRoomCollab(room, options) {
673
+ return new RoomCollabClient(room, options);
674
+ }
675
+ //# sourceMappingURL=room-collab-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room-collab-core.js","sourceRoot":"","sources":["../src/room-collab-core.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edge-base/web",
3
- "version": "0.2.7",
3
+ "version": "0.2.8",
4
4
  "description": "EdgeBase web SDK — browser client with database-live subscriptions, room, and auth persistence",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -35,7 +35,7 @@
35
35
  "access": "public"
36
36
  },
37
37
  "dependencies": {
38
- "@edge-base/core": "0.2.7"
38
+ "@edge-base/core": "0.2.8"
39
39
  },
40
40
  "devDependencies": {
41
41
  "typescript": "^5.7.0",