@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 +3 -34
- package/dist/client.d.ts +1 -1
- package/dist/client.js +1 -1
- package/dist/database-live.js +2 -2
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/room-collab-core.d.ts +124 -0
- package/dist/room-collab-core.d.ts.map +1 -0
- package/dist/room-collab-core.js +675 -0
- package/dist/room-collab-core.js.map +1 -0
- package/dist/room-p2p-media.d.ts +60 -0
- package/dist/room-p2p-media.d.ts.map +1 -1
- package/dist/room-p2p-media.js +640 -49
- package/dist/room-p2p-media.js.map +1 -1
- package/dist/room.d.ts +28 -295
- package/dist/room.d.ts.map +1 -1
- package/dist/room.js +153 -463
- package/dist/room.js.map +1 -1
- package/llms.txt +0 -55
- package/package.json +2 -3
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,
|
|
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,
|
|
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
|
-
-
|
|
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()
|
|
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()
|
|
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);
|
package/dist/database-live.js
CHANGED
|
@@ -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.
|
|
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.
|
|
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
|
|
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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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,
|
|
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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"}
|