y-openrtc 2.0.1 → 2.2.0

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
@@ -13,7 +13,7 @@ pnpm add y-openrtc yjs
13
13
  ```ts
14
14
  import * as Y from 'yjs';
15
15
  import { OpenRTC } from 'openrtc';
16
- import { OpenrtcProvider } from 'y-openrtc';
16
+ import { YProvider } from 'y-openrtc';
17
17
 
18
18
  const rtc = OpenRTC({ apiKey: '<your public OpenRTC API key>' });
19
19
  const room = await rtc.rooms.join('my-room', {
@@ -21,7 +21,7 @@ const room = await rtc.rooms.join('my-room', {
21
21
  membership: 'ephemeral',
22
22
  });
23
23
  const doc = new Y.Doc();
24
- const provider = new OpenrtcProvider('my-room', doc, {
24
+ const provider = new YProvider('my-room', doc, {
25
25
  room,
26
26
  });
27
27
  ```
@@ -31,7 +31,7 @@ const provider = new OpenrtcProvider('my-room', doc, {
31
31
  ```ts
32
32
  import * as Y from 'yjs';
33
33
  import { OpenRTC } from 'openrtc';
34
- import { OpenrtcProvider } from 'y-openrtc';
34
+ import { YProvider } from 'y-openrtc';
35
35
 
36
36
  const room = await rtc.rooms.join('private-room', {
37
37
  access: 'authenticated',
@@ -39,7 +39,7 @@ const room = await rtc.rooms.join('private-room', {
39
39
  });
40
40
 
41
41
  const doc = new Y.Doc();
42
- const provider = new OpenrtcProvider('my-room', doc, {
42
+ const provider = new YProvider('my-room', doc, {
43
43
  room,
44
44
  });
45
45
  ```
@@ -58,7 +58,7 @@ const rtc = OpenRTC({
58
58
  },
59
59
  });
60
60
  const room = await rtc.rooms.join('private-room', { access: 'capability' });
61
- const provider = new OpenrtcProvider('private-room', doc, { room });
61
+ const provider = new YProvider('private-room', doc, { room });
62
62
  ```
63
63
 
64
64
  Keep TURN credentials server-generated and short lived. Do not commit `.env` files or long-lived secrets.
@@ -74,7 +74,7 @@ Keep TURN credentials server-generated and short lived. Do not commit `.env` fil
74
74
 
75
75
  ## Live test env
76
76
 
77
- The live test at `tests/OpenrtcProvider.live.test.ts` reads package-local env values.
77
+ The live test at `tests/YProvider.live.test.ts` reads package-local env values.
78
78
 
79
79
  Create `openrtc/packages/y-openrtc/.env.local` with:
80
80
 
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { OpenrtcProvider, } from './provider.js';
2
- export { roomNameToOpenrtcRoomId } from './roomName.js';
3
- export type { OpenrtcProviderEvents, OpenrtcProviderOptions, OpenrtcTransports, PeersEventPayload, StatusEventPayload, SyncedEventPayload, } from './types.js';
1
+ export { YProvider, } from './provider.js';
2
+ export { roomIdFromName } from './roomName.js';
3
+ export type { ProviderEvents, YProviderOptions, Transports, PeersEventPayload, StatusEventPayload, SyncedEventPayload, } from './types.js';
4
4
  export { runtimeFromRoom } from './roomRuntime.js';
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export { OpenrtcProvider, } from './provider.js';
2
- export { roomNameToOpenrtcRoomId } from './roomName.js';
1
+ export { YProvider, } from './provider.js';
2
+ export { roomIdFromName } from './roomName.js';
3
3
  export { runtimeFromRoom } from './roomRuntime.js';
@@ -1,9 +1,9 @@
1
1
  import * as awarenessProtocol from 'y-protocols/awareness';
2
2
  import type * as Y from 'yjs';
3
- import type { OpenrtcProviderEvents, OpenrtcProviderOptions } from './types.js';
4
- type EventName = keyof OpenrtcProviderEvents;
5
- type EventListener<K extends EventName> = (payload: OpenrtcProviderEvents[K]) => void;
6
- export declare class OpenrtcProvider {
3
+ import type { ProviderEvents, YProviderOptions } from './types.js';
4
+ type EventName = keyof ProviderEvents;
5
+ type EventListener<K extends EventName> = (payload: ProviderEvents[K]) => void;
6
+ export declare class YProvider {
7
7
  readonly roomName: string;
8
8
  readonly doc: Y.Doc;
9
9
  readonly awareness: awarenessProtocol.Awareness;
@@ -35,12 +35,12 @@ export declare class OpenrtcProvider {
35
35
  private connectPromise;
36
36
  private reconcileTimer;
37
37
  private readonly diagnostics;
38
- constructor(roomName: string, doc: Y.Doc, options?: OpenrtcProviderOptions);
38
+ constructor(roomName: string, doc: Y.Doc, options?: YProviderOptions);
39
39
  get connected(): boolean;
40
40
  on<K extends EventName>(name: K, listener: EventListener<K>): EventListener<K>;
41
41
  off<K extends EventName>(name: K, listener: EventListener<K>): void;
42
42
  once<K extends EventName>(name: K, listener: EventListener<K>): void;
43
- emit<K extends EventName>(name: K, payload: OpenrtcProviderEvents[K]): void;
43
+ emit<K extends EventName>(name: K, payload: ProviderEvents[K]): void;
44
44
  connect(): void;
45
45
  disconnect(): void;
46
46
  destroy(): void;
package/dist/provider.js CHANGED
@@ -2,7 +2,7 @@ import * as awarenessProtocol from 'y-protocols/awareness';
2
2
  import { BroadcastMeshTransport } from './broadcast.js';
3
3
  import { applyProviderMessage, encodeAwarenessQuery, encodeAwarenessUpdate, encodeDocUpdate, encodeSyncStep1, encodeSyncStep2, } from './codec.js';
4
4
  import { decryptFrame, deriveRoomKey, encryptFrame } from './crypto.js';
5
- import { roomNameToOpenrtcRoomId } from './roomName.js';
5
+ import { roomIdFromName } from './roomName.js';
6
6
  import { acquireRuntimeLease } from './runtimePool.js';
7
7
  const warnedCompatibilityOptions = new Set();
8
8
  function createProviderId() {
@@ -33,7 +33,7 @@ function hasActiveMember(member) {
33
33
  const lastSeenAt = member.lastSeenAt ?? member.joinedAt ?? 0;
34
34
  return now - lastSeenAt <= 5 * 60 * 1000;
35
35
  }
36
- function shouldInitiateConnection(localNodeId, remoteNodeId) {
36
+ function shouldInitiate(localNodeId, remoteNodeId) {
37
37
  return localNodeId.localeCompare(remoteNodeId) < 0;
38
38
  }
39
39
  function normalizeOpenrtcRoomId(roomId) {
@@ -74,7 +74,7 @@ function isClosedConnectionSendError(error) {
74
74
  function sleep(ms) {
75
75
  return new Promise((resolve) => setTimeout(resolve, ms));
76
76
  }
77
- export class OpenrtcProvider {
77
+ export class YProvider {
78
78
  constructor(roomName, doc, options = {}) {
79
79
  this.providerId = createProviderId();
80
80
  this.listeners = new Map();
@@ -273,7 +273,7 @@ export class OpenrtcProvider {
273
273
  }
274
274
  this.runtime = runtime;
275
275
  this.localNodeId = await runtime.getNodeId();
276
- const preferredRoomId = normalizeOpenrtcRoomId(this.options.roomIdOverride ?? await roomNameToOpenrtcRoomId(this.roomName));
276
+ const preferredRoomId = normalizeOpenrtcRoomId(this.options.roomIdOverride ?? await roomIdFromName(this.roomName));
277
277
  const roomCandidates = this.resolveRoomCandidates(preferredRoomId);
278
278
  this.attachLocalObservers();
279
279
  this.stopRuntimeConnections = runtime.onConnection((connection) => {
@@ -282,8 +282,8 @@ export class OpenrtcProvider {
282
282
  }
283
283
  this.attachConnection(connection);
284
284
  });
285
- if (typeof runtime.onConnectionStateChange === 'function') {
286
- const stopRuntimeConnectionStates = runtime.onConnectionStateChange((state) => {
285
+ if (typeof runtime.onStateChange === 'function') {
286
+ const stopRuntimeConnectionStates = runtime.onStateChange((state) => {
287
287
  if (!this.shouldConnect || state.state !== 'connected') {
288
288
  return;
289
289
  }
@@ -489,7 +489,7 @@ export class OpenrtcProvider {
489
489
  }
490
490
  }
491
491
  const connectableMembers = candidates.filter((member) => desiredNodeIds.has(member.nodeId) &&
492
- shouldInitiateConnection(localNodeId, member.nodeId) &&
492
+ shouldInitiate(localNodeId, member.nodeId) &&
493
493
  !this.openrtcConnections.has(member.nodeId) &&
494
494
  !this.pendingNodeIds.has(member.nodeId));
495
495
  await Promise.allSettled(connectableMembers.map(async (member) => {
@@ -1 +1 @@
1
- export declare function roomNameToOpenrtcRoomId(roomName: string): Promise<string>;
1
+ export declare function roomIdFromName(roomName: string): Promise<string>;
package/dist/roomName.js CHANGED
@@ -24,7 +24,7 @@ async function sha256Hex(text) {
24
24
  const digest = await subtle.digest('SHA-256', encoder.encode(text));
25
25
  return toHex(new Uint8Array(digest));
26
26
  }
27
- export async function roomNameToOpenrtcRoomId(roomName) {
27
+ export async function roomIdFromName(roomName) {
28
28
  const normalized = roomName.trim();
29
29
  if (!normalized) {
30
30
  throw new Error('roomName must be a non-empty string.');
@@ -1,4 +1,4 @@
1
- import type { OpenRTCRoomHandle } from 'openrtc';
1
+ import type { Room } from 'openrtc';
2
2
  import type { RuntimeClient } from 'openrtc/runtime';
3
3
  /** One-handle adapter; cast is isolated here so provider code cannot see legacy construction. */
4
- export declare function runtimeFromRoom(room: OpenRTCRoomHandle): RuntimeClient;
4
+ export declare function runtimeFromRoom(room: Room): RuntimeClient;
@@ -55,7 +55,7 @@ export function runtimeFromRoom(room) {
55
55
  publish();
56
56
  return room.peers.watch(publish);
57
57
  },
58
- onConnectionStateChange: room.diagnostics.onConnectionStateChange,
58
+ onStateChange: room.diagnostics.onStateChange,
59
59
  getConnections: connections,
60
60
  connectByTicket: ({ ticket, timeoutMs }) => room.peers.connect({ ticket, timeoutMs }),
61
61
  };
@@ -1,9 +1,9 @@
1
1
  import type { RuntimeClient } from 'openrtc/runtime';
2
- import type { OpenrtcProviderOptions } from './types.js';
2
+ import type { YProviderOptions } from './types.js';
3
3
  export interface RuntimeLease {
4
4
  runtime: RuntimeClient;
5
5
  owned: boolean;
6
6
  ensureReady(): Promise<RuntimeClient>;
7
7
  release(): Promise<void>;
8
8
  }
9
- export declare function acquireRuntimeLease(options: OpenrtcProviderOptions): RuntimeLease;
9
+ export declare function acquireRuntimeLease(options: YProviderOptions): RuntimeLease;
package/dist/types.d.ts CHANGED
@@ -1,11 +1,11 @@
1
- import type { OpenRTCOptions, OpenRTCRoomHandle } from 'openrtc';
1
+ import type { Options, Room } from 'openrtc';
2
2
  import type { RuntimeClient } from 'openrtc/runtime';
3
3
  import type { Awareness } from 'y-protocols/awareness';
4
- export type OpenrtcTransports = OpenRTCOptions['transports'];
5
- export interface OpenrtcProviderOptions {
4
+ export type Transports = Options['transports'];
5
+ export interface YProviderOptions {
6
6
  runtime?: RuntimeClient;
7
7
  /** Preferred 2.0 path: one already-activated collaborative room. */
8
- room?: OpenRTCRoomHandle;
8
+ room?: Room;
9
9
  awareness?: Awareness;
10
10
  password?: string | null;
11
11
  maxConns?: number;
@@ -45,7 +45,7 @@ export interface PeersEventPayload {
45
45
  */
46
46
  awarenessPeers: number[];
47
47
  }
48
- export interface OpenrtcProviderEvents {
48
+ export interface ProviderEvents {
49
49
  status: StatusEventPayload;
50
50
  synced: SyncedEventPayload;
51
51
  peers: PeersEventPayload;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "y-openrtc",
3
- "version": "2.0.1",
3
+ "version": "2.2.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -37,13 +37,13 @@
37
37
  "build": "rm -rf dist && tsc",
38
38
  "prepublishOnly": "pnpm run build",
39
39
  "test": "vitest run tests",
40
- "test:deterministic": "vitest run tests/TetrisSync.test.ts tests/TetrisPeerDiagnostic.test.ts tests/OpenrtcProvider.test.ts tests/RoomRuntime.test.ts tests/PublicPackageGuard.test.ts tests/crypto.test.ts",
40
+ "test:deterministic": "vitest run tests/TetrisSync.test.ts tests/TetrisPeerDiagnostic.test.ts tests/YProvider.test.ts tests/RoomRuntime.test.ts tests/PublicPackageGuard.test.ts tests/crypto.test.ts",
41
41
  "test:watch": "vitest",
42
- "test:live": "vitest run tests/OpenrtcProvider.live.test.ts"
42
+ "test:live": "vitest run tests/YProvider.live.test.ts"
43
43
  },
44
44
  "dependencies": {
45
45
  "lib0": "^0.2.114",
46
- "openrtc": "^2.0.1",
46
+ "openrtc": "^2.2.0",
47
47
  "y-protocols": "^1.0.6"
48
48
  },
49
49
  "peerDependencies": {