y-openrtc 0.1.1 → 0.1.2
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 +0 -1
- package/dist/provider.d.ts +2 -0
- package/dist/provider.js +30 -3
- package/dist/types.d.ts +6 -0
- package/package.json +6 -4
package/README.md
CHANGED
package/dist/provider.d.ts
CHANGED
|
@@ -49,7 +49,9 @@ export declare class OpenrtcProvider {
|
|
|
49
49
|
private warnCompatibilityOptions;
|
|
50
50
|
private emitStatus;
|
|
51
51
|
private emitSynced;
|
|
52
|
+
private currentPeersPayload;
|
|
52
53
|
private emitPeers;
|
|
54
|
+
private replayEvent;
|
|
53
55
|
private attachLocalObservers;
|
|
54
56
|
private detachLocalObservers;
|
|
55
57
|
private connectInternal;
|
package/dist/provider.js
CHANGED
|
@@ -129,6 +129,9 @@ export class OpenrtcProvider {
|
|
|
129
129
|
}
|
|
130
130
|
const clients = added.concat(updated, removed);
|
|
131
131
|
void this.broadcastProviderPayload(encodeAwarenessUpdate(this.awareness, clients));
|
|
132
|
+
if (added.concat(removed).some((clientId) => clientId !== this.doc.clientID)) {
|
|
133
|
+
this.emitPeers([], []);
|
|
134
|
+
}
|
|
132
135
|
};
|
|
133
136
|
this.destroyHandler = () => {
|
|
134
137
|
void this.destroyInternal();
|
|
@@ -144,6 +147,7 @@ export class OpenrtcProvider {
|
|
|
144
147
|
const listeners = this.listeners.get(name) ?? new Set();
|
|
145
148
|
listeners.add(listener);
|
|
146
149
|
this.listeners.set(name, listeners);
|
|
150
|
+
this.replayEvent(name, listener);
|
|
147
151
|
return listener;
|
|
148
152
|
}
|
|
149
153
|
off(name, listener) {
|
|
@@ -154,7 +158,9 @@ export class OpenrtcProvider {
|
|
|
154
158
|
this.off(name, wrapped);
|
|
155
159
|
listener(payload);
|
|
156
160
|
});
|
|
157
|
-
this.
|
|
161
|
+
const listeners = this.listeners.get(name) ?? new Set();
|
|
162
|
+
listeners.add(wrapped);
|
|
163
|
+
this.listeners.set(name, listeners);
|
|
158
164
|
}
|
|
159
165
|
emit(name, payload) {
|
|
160
166
|
for (const listener of this.listeners.get(name) ?? []) {
|
|
@@ -206,16 +212,37 @@ export class OpenrtcProvider {
|
|
|
206
212
|
this.synced = nextSynced;
|
|
207
213
|
this.emit('synced', { synced: nextSynced });
|
|
208
214
|
}
|
|
209
|
-
|
|
210
|
-
|
|
215
|
+
currentPeersPayload(added = [], removed = []) {
|
|
216
|
+
return {
|
|
211
217
|
added,
|
|
212
218
|
removed,
|
|
213
219
|
openrtcPeers: Array.from(this.openrtcConnections.keys()),
|
|
214
220
|
webrtcPeers: Array.from(this.openrtcConnections.keys()),
|
|
215
221
|
bcPeers: Array.from(this.bcPeers.keys()),
|
|
222
|
+
awarenessPeers: Array.from(this.awareness.getStates().keys())
|
|
223
|
+
.filter((clientId) => clientId !== this.doc.clientID),
|
|
216
224
|
};
|
|
225
|
+
}
|
|
226
|
+
emitPeers(added, removed) {
|
|
227
|
+
const payload = this.currentPeersPayload(added, removed);
|
|
217
228
|
this.emit('peers', payload);
|
|
218
229
|
}
|
|
230
|
+
replayEvent(name, listener) {
|
|
231
|
+
queueMicrotask(() => {
|
|
232
|
+
if (this.destroyed || !this.listeners.get(name)?.has(listener)) {
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
if (name === 'status') {
|
|
236
|
+
listener({ connected: this.connected });
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
if (name === 'synced') {
|
|
240
|
+
listener({ synced: this.synced });
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
listener(this.currentPeersPayload());
|
|
244
|
+
});
|
|
245
|
+
}
|
|
219
246
|
attachLocalObservers() {
|
|
220
247
|
if (this.localObserversAttached) {
|
|
221
248
|
return;
|
package/dist/types.d.ts
CHANGED
|
@@ -52,6 +52,12 @@ export interface PeersEventPayload {
|
|
|
52
52
|
openrtcPeers: string[];
|
|
53
53
|
webrtcPeers: string[];
|
|
54
54
|
bcPeers: string[];
|
|
55
|
+
/**
|
|
56
|
+
* Remote Yjs awareness client ids currently visible to this provider.
|
|
57
|
+
* This is the best source for participant counts in collaborative UIs,
|
|
58
|
+
* because OpenRTC may use a mesh subset or BroadcastChannel for transport.
|
|
59
|
+
*/
|
|
60
|
+
awarenessPeers: number[];
|
|
55
61
|
}
|
|
56
62
|
export interface OpenrtcProviderEvents {
|
|
57
63
|
status: StatusEventPayload;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "y-openrtc",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -34,14 +34,16 @@
|
|
|
34
34
|
"./package.json": "./package.json"
|
|
35
35
|
},
|
|
36
36
|
"scripts": {
|
|
37
|
-
"build": "tsc",
|
|
37
|
+
"build": "rm -rf dist && tsc",
|
|
38
|
+
"prepublishOnly": "pnpm run build",
|
|
38
39
|
"test": "vitest run tests",
|
|
40
|
+
"test:deterministic": "vitest run tests/TetrisSync.test.ts tests/TetrisPeerDiagnostic.test.ts tests/OpenrtcProvider.test.ts tests/PublicPackageGuard.test.ts tests/crypto.test.ts",
|
|
39
41
|
"test:watch": "vitest",
|
|
40
|
-
"test:live": "
|
|
42
|
+
"test:live": "vitest run tests/OpenrtcProvider.live.test.ts"
|
|
41
43
|
},
|
|
42
44
|
"dependencies": {
|
|
43
45
|
"lib0": "^0.2.114",
|
|
44
|
-
"openrtc": "
|
|
46
|
+
"openrtc": "^0.2.0",
|
|
45
47
|
"y-protocols": "^1.0.6"
|
|
46
48
|
},
|
|
47
49
|
"peerDependencies": {
|