@edge-base/web 0.2.6 → 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.
package/README.md CHANGED
@@ -62,7 +62,7 @@ Use this README for the fast overview, then jump into the docs when you need dep
62
62
  - [Authentication](https://edgebase.fun/docs/authentication)
63
63
  Email/password, OAuth, MFA, sessions, passkeys
64
64
  - [Room Client SDK](https://edgebase.fun/docs/room/client-sdk)
65
- Presence, state, members, signals, and media
65
+ Presence, state, members, and signals
66
66
  - [Functions Client SDK](https://edgebase.fun/docs/functions/client-sdk)
67
67
  Calling EdgeBase functions from the browser
68
68
  - [Analytics Client SDK](https://edgebase.fun/docs/analytics/client-sdk)
@@ -99,7 +99,7 @@ Most browser SDKs stop at auth + CRUD.
99
99
  | Auth | Email/password, OAuth, sessions, auth state |
100
100
  | Database | Query, insert, update, delete |
101
101
  | Database Live | `onSnapshot()` subscriptions |
102
- | Rooms | Presence, room state, signals, media-ready client surface |
102
+ | Rooms | Presence, room state, signals, and room summaries |
103
103
  | Storage | Uploads, bucket access, file URLs |
104
104
  | Functions | Call EdgeBase functions from the browser |
105
105
  | Analytics | Client-side analytics helpers |
@@ -342,38 +342,7 @@ Use rooms when you need:
342
342
  - room state
343
343
  - peer signals
344
344
  - multiplayer coordination
345
- - media/session-style realtime flows
346
-
347
- ### Room Media Transports
348
-
349
- `room.media.transport()` is the high-level browser transport entry point.
350
-
351
- ```ts
352
- const transport = room.media.transport({
353
- provider: 'cloudflare_realtimekit',
354
- });
355
-
356
- const capabilities = await room.media.checkReadiness({
357
- provider: 'cloudflare_realtimekit',
358
- });
359
- console.log(capabilities.issues);
360
-
361
- await transport.connect();
362
- await transport.enableAudio();
363
- await transport.enableVideo();
364
- ```
365
-
366
- Available providers:
367
-
368
- - `cloudflare_realtimekit`
369
- Default managed media path backed by the Room Media control plane
370
- - `p2p`
371
- STUN-only best-effort mesh for lightweight direct calls
372
-
373
- The lower-level `room.media.realtime.*` HTTP wrappers and `RoomRealtimeMediaTransport`
374
- export still exist for raw WebRTC/SFU flows, but `room.media.transport()` is the
375
- recommended browser entry point for new room media integrations.
376
-
345
+ - session-style realtime flows
377
346
  Read more: [Room Client SDK](https://edgebase.fun/docs/room/client-sdk)
378
347
 
379
348
  ## Which EdgeBase Package Should You Use?
package/dist/client.d.ts CHANGED
@@ -134,7 +134,7 @@ export declare class ClientEdgeBase<Schema extends EdgeBaseTableMap = EdgeBaseTa
134
134
  getRoomSummaries(namespace: string, roomIds: string[]): Promise<RoomSummaryCollection>;
135
135
  /**
136
136
  * Run the room connect-check preflight without opening a WebSocket connection.
137
- * Useful for showing setup/readiness hints before calling room.join() or media transport connect().
137
+ * Useful for showing setup/readiness hints before calling room.join().
138
138
  */
139
139
  checkRoomConnection(namespace: string, roomId: string): Promise<RoomConnectDiagnostic>;
140
140
  /**
package/dist/client.js CHANGED
@@ -292,7 +292,7 @@ export class ClientEdgeBase {
292
292
  }
293
293
  /**
294
294
  * Run the room connect-check preflight without opening a WebSocket connection.
295
- * Useful for showing setup/readiness hints before calling room.join() or media transport connect().
295
+ * Useful for showing setup/readiness hints before calling room.join().
296
296
  */
297
297
  async checkRoomConnection(namespace, roomId) {
298
298
  return RoomClient.checkConnection(this.baseUrl, namespace, roomId);
@@ -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.6' });
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.6' });
358
+ this.sendRaw({ type: 'auth', token, sdkVersion: '0.2.8' });
359
359
  }
360
360
  handleAuthStateChange(user) {
361
361
  if (user) {
package/dist/index.d.ts CHANGED
@@ -14,8 +14,7 @@ export { TokenManager, type TokenPair, type TokenUser, type AuthStateChangeHandl
14
14
  export { DatabaseLiveClient, type DatabaseLiveOptions } from './database-live.js';
15
15
  export { matchesFilter, type FilterOperator, type FilterEntry } from './match-filter.js';
16
16
  export { getCaptchaToken, fetchSiteKey, resolveCaptchaToken } from './turnstile.js';
17
- export { RoomClient, type RoomOptions, type Subscription, type RoomConnectionState, type RoomMemberLeaveReason, type RoomSignalMeta, type RoomMember, type RoomReconnectInfo, type RoomMediaKind, type RoomMediaTrack, type RoomMemberMediaKindState, type RoomMemberMediaState, type RoomMediaMember, type RoomMediaDeviceChange, type RoomRealtimeSessionDescription, type RoomRealtimeTrackObject, type RoomRealtimeCreateSessionRequest, type RoomRealtimeCreateSessionResponse, type RoomConnectDiagnostic, type RoomSummary, type RoomMediaTransportCapabilityCategory, type RoomMediaTransportCapabilityIssue, type RoomMediaTransportCapabilities, type RoomRealtimeIceServer, type RoomRealtimeIceServersRequest, type RoomRealtimeIceServersResponse, type RoomRealtimeTracksRequest, type RoomRealtimeTracksResponse, type RoomRealtimeRenegotiateRequest, type RoomRealtimeCloseTracksRequest, } from './room.js';
18
- export { RoomRealtimeMediaTransport, type RoomRealtimeMediaTransportOptions, type RoomRealtimeRemoteTrackEvent, } from './room-realtime-media.js';
17
+ export { RoomClient, type RoomOptions, type Subscription, type RoomConnectionState, type RoomMemberLeaveReason, type RoomSignalMeta, type RoomMember, type RoomReconnectInfo, type RoomConnectDiagnostic, type RoomSummary, } from './room.js';
19
18
  export { ClientAnalytics } from './analytics.js';
20
19
  export { EdgeBaseError, ResumableUploadError } from '@edge-base/core';
21
20
  export type { EdgeBaseTableMap, EdgeBaseTableRecord } from '@edge-base/core';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGnF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AACtM,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,sBAAsB,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzI,OAAO,EAAE,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGzF,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAGpF,OAAO,EACL,UAAU,EACV,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,8BAA8B,EACnC,KAAK,uBAAuB,EAC5B,KAAK,gCAAgC,EACrC,KAAK,iCAAiC,EACtC,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EAChB,KAAK,oCAAoC,EACzC,KAAK,iCAAiC,EACtC,KAAK,8BAA8B,EACnC,KAAK,qBAAqB,EAC1B,KAAK,6BAA6B,EAClC,KAAK,8BAA8B,EACnC,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,GACpC,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,0BAA0B,EAC1B,KAAK,iCAAiC,EACtC,KAAK,4BAA4B,GAClC,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACtE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGnF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AACtM,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,sBAAsB,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzI,OAAO,EAAE,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGzF,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAGpF,OAAO,EACL,UAAU,EACV,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,WAAW,GACjB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACtE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -20,7 +20,6 @@ export { matchesFilter } from './match-filter.js';
20
20
  export { getCaptchaToken, fetchSiteKey, resolveCaptchaToken } from './turnstile.js';
21
21
  // Room
22
22
  export { RoomClient, } from './room.js';
23
- export { RoomRealtimeMediaTransport, } from './room-realtime-media.js';
24
23
  // Analytics
25
24
  export { ClientAnalytics } from './analytics.js';
26
25
  // Errors (re-exported for convenience)
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,qBAAqB;AACrB,OAAO,EAAE,cAAc,EAAE,YAAY,EAA0B,MAAM,aAAa,CAAC;AAEnF,OAAO;AACP,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAoI,MAAM,WAAW,CAAC;AACtM,OAAO,EAAE,YAAY,EAAyF,MAAM,oBAAoB,CAAC;AAEzI,gBAAgB;AAChB,OAAO,EAAE,kBAAkB,EAA4B,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,aAAa,EAAyC,MAAM,mBAAmB,CAAC;AAEzF,UAAU;AACV,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAEpF,OAAO;AACP,OAAO,EACL,UAAU,GA8BX,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,0BAA0B,GAG3B,MAAM,0BAA0B,CAAC;AAElC,YAAY;AACZ,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,uCAAuC;AACvC,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,qBAAqB;AACrB,OAAO,EAAE,cAAc,EAAE,YAAY,EAA0B,MAAM,aAAa,CAAC;AAEnF,OAAO;AACP,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAoI,MAAM,WAAW,CAAC;AACtM,OAAO,EAAE,YAAY,EAAyF,MAAM,oBAAoB,CAAC;AAEzI,gBAAgB;AAChB,OAAO,EAAE,kBAAkB,EAA4B,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,aAAa,EAAyC,MAAM,mBAAmB,CAAC;AAEzF,UAAU;AACV,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAEpF,OAAO;AACP,OAAO,EACL,UAAU,GAUX,MAAM,WAAW,CAAC;AAEnB,YAAY;AACZ,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,uCAAuC;AACvC,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -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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"}