@edge-base/react-native 0.1.5 → 0.2.1

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/dist/index.d.cts CHANGED
@@ -1,4 +1,5 @@
1
- import { HttpClient, GeneratedDbApi, IDatabaseLiveSubscriber, ContextManager, StorageClient, FunctionsClient, DbRef, ContextValue } from '@edge-base/core';
1
+ import { HttpClient, GeneratedDbApi, IDatabaseLiveSubscriber, ContextManager, Subscription, StorageClient, FunctionsClient, DbRef, ContextValue } from '@edge-base/core';
2
+ export { Subscription } from '@edge-base/core';
2
3
  import React from 'react';
3
4
 
4
5
  /**
@@ -405,8 +406,8 @@ declare class DatabaseLiveClient implements IDatabaseLiveSubscriber {
405
406
  private unsubAuthState;
406
407
  private options;
407
408
  constructor(baseUrl: string, tokenManager: TokenManager, options?: DatabaseLiveOptions, contextManager?: ContextManager);
408
- onSnapshot<T>(channel: string, callback: (change: DbChange<T>) => void, clientFilters?: unknown, serverFilters?: unknown, serverOrFilters?: unknown): () => void;
409
- onError(handler: ErrorHandler$1): () => void;
409
+ onSnapshot<T>(channel: string, callback: (change: DbChange<T>) => void, clientFilters?: unknown, serverFilters?: unknown, serverOrFilters?: unknown): Subscription;
410
+ onError(handler: ErrorHandler$1): Subscription;
410
411
  connect(channel: string): Promise<void>;
411
412
  reconnect(): void;
412
413
  disconnect(): void;
@@ -430,6 +431,100 @@ declare class DatabaseLiveClient implements IDatabaseLiveSubscriber {
430
431
  private handleContextChange;
431
432
  }
432
433
 
434
+ interface ParticipantMapLike<TParticipant> extends Iterable<TParticipant> {
435
+ values(): IterableIterator<TParticipant>;
436
+ on(event: 'participantJoined', handler: (participant: TParticipant) => void): void;
437
+ on(event: 'participantLeft', handler: (participant: TParticipant) => void): void;
438
+ on(event: 'participantsCleared', handler: () => void): void;
439
+ on(event: 'participantsUpdate', handler: () => void): void;
440
+ off(event: 'participantJoined', handler: (participant: TParticipant) => void): void;
441
+ off(event: 'participantLeft', handler: (participant: TParticipant) => void): void;
442
+ off(event: 'participantsCleared', handler: () => void): void;
443
+ off(event: 'participantsUpdate', handler: () => void): void;
444
+ }
445
+ type ParticipantEventHandlers = {
446
+ audioUpdate: (payload: {
447
+ audioEnabled: boolean;
448
+ audioTrack: MediaStreamTrack;
449
+ }) => void;
450
+ videoUpdate: (payload: {
451
+ videoEnabled: boolean;
452
+ videoTrack: MediaStreamTrack;
453
+ }) => void;
454
+ screenShareUpdate: (payload: {
455
+ screenShareEnabled: boolean;
456
+ screenShareTracks: {
457
+ audio?: MediaStreamTrack;
458
+ video?: MediaStreamTrack;
459
+ };
460
+ }) => void;
461
+ };
462
+ interface RoomCloudflareKitParticipant {
463
+ id: string;
464
+ customParticipantId?: string;
465
+ userId?: string;
466
+ audioTrack?: MediaStreamTrack;
467
+ audioEnabled?: boolean;
468
+ videoTrack?: MediaStreamTrack;
469
+ videoEnabled?: boolean;
470
+ screenShareTracks?: {
471
+ audio?: MediaStreamTrack;
472
+ video?: MediaStreamTrack;
473
+ };
474
+ screenShareEnabled?: boolean;
475
+ on<TEvent extends keyof ParticipantEventHandlers>(event: TEvent, handler: ParticipantEventHandlers[TEvent]): void;
476
+ off<TEvent extends keyof ParticipantEventHandlers>(event: TEvent, handler: ParticipantEventHandlers[TEvent]): void;
477
+ }
478
+ interface RoomCloudflareKitSelf {
479
+ id: string;
480
+ audioTrack?: MediaStreamTrack;
481
+ videoTrack?: MediaStreamTrack;
482
+ screenShareTracks?: {
483
+ audio?: MediaStreamTrack;
484
+ video?: MediaStreamTrack;
485
+ };
486
+ enableAudio(customTrack?: MediaStreamTrack): Promise<void>;
487
+ enableVideo(customTrack?: MediaStreamTrack): Promise<void>;
488
+ enableScreenShare(): Promise<void>;
489
+ disableAudio(): Promise<void>;
490
+ disableVideo(): Promise<void>;
491
+ disableScreenShare(): Promise<void>;
492
+ getDeviceById(deviceId: string, kind: string): Promise<unknown>;
493
+ setDevice(device: unknown): Promise<void>;
494
+ }
495
+ interface RoomCloudflareKitClient {
496
+ join?(): Promise<void>;
497
+ leave?(state?: unknown): Promise<void>;
498
+ joinRoom?(): Promise<void>;
499
+ leaveRoom?(state?: unknown): Promise<void>;
500
+ readonly participants: {
501
+ active?: ParticipantMapLike<RoomCloudflareKitParticipant>;
502
+ joined?: ParticipantMapLike<RoomCloudflareKitParticipant>;
503
+ };
504
+ readonly self: RoomCloudflareKitSelf;
505
+ }
506
+ interface RoomCloudflareKitClientFactory {
507
+ init(options: {
508
+ authToken: string;
509
+ defaults: {
510
+ audio: boolean;
511
+ video: boolean;
512
+ };
513
+ }): Promise<RoomCloudflareKitClient>;
514
+ }
515
+ interface RoomCloudflareMediaTransportOptions {
516
+ autoSubscribe?: boolean;
517
+ mediaDevices?: Pick<MediaDevices, 'getUserMedia' | 'getDisplayMedia' | 'enumerateDevices'>;
518
+ clientFactory?: RoomCloudflareKitClientFactory;
519
+ }
520
+
521
+ interface RoomP2PMediaTransportOptions {
522
+ rtcConfiguration?: RTCConfiguration;
523
+ peerConnectionFactory?: (configuration: RTCConfiguration) => RTCPeerConnection;
524
+ mediaDevices?: Pick<MediaDevices, 'getUserMedia' | 'getDisplayMedia'>;
525
+ signalPrefix?: string;
526
+ }
527
+
433
528
  /**
434
529
  * RoomClient v2 — Client-side room connection for real-time multiplayer state.
435
530
  *
@@ -450,10 +545,10 @@ interface RoomOptions {
450
545
  reconnectBaseDelay?: number;
451
546
  /** Timeout for send() requests in ms (default: 10000) */
452
547
  sendTimeout?: number;
548
+ /** Timeout for WebSocket connection establishment in ms (default: 15000) */
549
+ connectionTimeout?: number;
453
550
  }
454
- interface Subscription {
455
- unsubscribe(): void;
456
- }
551
+
457
552
  type SharedStateHandler = (state: Record<string, unknown>, changes: Record<string, unknown>) => void;
458
553
  type PlayerStateHandler = (state: Record<string, unknown>, changes: Record<string, unknown>) => void;
459
554
  type MessageHandler = (data: unknown) => void;
@@ -490,6 +585,7 @@ interface RoomMediaTrack {
490
585
  muted: boolean;
491
586
  publishedAt?: number;
492
587
  adminDisabled?: boolean;
588
+ providerSessionId?: string;
493
589
  }
494
590
  interface RoomMemberMediaKindState {
495
591
  published: boolean;
@@ -498,6 +594,7 @@ interface RoomMemberMediaKindState {
498
594
  deviceId?: string;
499
595
  publishedAt?: number;
500
596
  adminDisabled?: boolean;
597
+ providerSessionId?: string;
501
598
  }
502
599
  interface RoomMemberMediaState {
503
600
  audio?: RoomMemberMediaKindState;
@@ -513,6 +610,66 @@ interface RoomMediaDeviceChange {
513
610
  kind: RoomMediaKind;
514
611
  deviceId: string;
515
612
  }
613
+ interface RoomCloudflareRealtimeKitCreateSessionRequest {
614
+ connectionId?: string;
615
+ customParticipantId?: string;
616
+ name?: string;
617
+ picture?: string;
618
+ }
619
+ interface RoomCloudflareRealtimeKitCreateSessionResponse {
620
+ sessionId: string;
621
+ meetingId: string;
622
+ participantId: string;
623
+ authToken: string;
624
+ presetName: string;
625
+ connectionId?: string;
626
+ reused?: boolean;
627
+ }
628
+ interface RoomMediaTransportConnectPayload {
629
+ connectionId?: string;
630
+ customParticipantId?: string;
631
+ name?: string;
632
+ picture?: string;
633
+ }
634
+ interface RoomMediaRemoteTrackEvent {
635
+ kind: RoomMediaKind;
636
+ track: MediaStreamTrack;
637
+ stream?: MediaStream;
638
+ trackName?: string;
639
+ providerSessionId?: string;
640
+ participantId?: string;
641
+ customParticipantId?: string;
642
+ userId?: string;
643
+ }
644
+ interface RoomMediaTransport {
645
+ connect(payload?: RoomMediaTransportConnectPayload): Promise<string>;
646
+ enableAudio(constraints?: MediaTrackConstraints | boolean): Promise<MediaStreamTrack>;
647
+ enableVideo(constraints?: MediaTrackConstraints | boolean): Promise<MediaStreamTrack>;
648
+ startScreenShare(constraints?: unknown): Promise<MediaStreamTrack>;
649
+ disableAudio(): Promise<void>;
650
+ disableVideo(): Promise<void>;
651
+ stopScreenShare(): Promise<void>;
652
+ setMuted(kind: Extract<RoomMediaKind, 'audio' | 'video'>, muted: boolean): Promise<void>;
653
+ switchDevices(payload: {
654
+ audioInputId?: string;
655
+ videoInputId?: string;
656
+ screenInputId?: string;
657
+ }): Promise<void>;
658
+ onRemoteTrack(handler: (event: RoomMediaRemoteTrackEvent) => void): Subscription;
659
+ getSessionId(): string | null;
660
+ getPeerConnection(): RTCPeerConnection | null;
661
+ destroy(): void;
662
+ }
663
+ type RoomMediaTransportProvider = 'cloudflare_realtimekit' | 'p2p';
664
+ interface RoomCloudflareRealtimeKitTransportFactoryOptions {
665
+ provider?: 'cloudflare_realtimekit';
666
+ cloudflareRealtimeKit?: RoomCloudflareMediaTransportOptions;
667
+ }
668
+ interface RoomP2PTransportFactoryOptions {
669
+ provider: 'p2p';
670
+ p2p?: RoomP2PMediaTransportOptions;
671
+ }
672
+ type RoomMediaTransportOptions = RoomCloudflareRealtimeKitTransportFactoryOptions | RoomP2PTransportFactoryOptions;
516
673
  declare class RoomClient {
517
674
  private baseUrl;
518
675
  private tokenManager;
@@ -585,6 +742,7 @@ declare class RoomClient {
585
742
  };
586
743
  readonly members: {
587
744
  list: () => RoomMember[];
745
+ current: () => RoomMember | null;
588
746
  onSync: (handler: (members: RoomMember[]) => void) => Subscription;
589
747
  onJoin: (handler: (member: RoomMember) => void) => Subscription;
590
748
  onLeave: (handler: (member: RoomMember, reason: RoomMemberLeaveReason) => void) => Subscription;
@@ -632,6 +790,10 @@ declare class RoomClient {
632
790
  screenInputId?: string;
633
791
  }) => Promise<void>;
634
792
  };
793
+ cloudflareRealtimeKit: {
794
+ createSession: (payload?: RoomCloudflareRealtimeKitCreateSessionRequest) => Promise<RoomCloudflareRealtimeKitCreateSessionResponse>;
795
+ };
796
+ transport: (options?: RoomMediaTransportOptions) => RoomMediaTransport;
635
797
  onTrack: (handler: (track: RoomMediaTrack, member: RoomMember) => void) => Subscription;
636
798
  onTrackRemoved: (handler: (track: RoomMediaTrack, member: RoomMember) => void) => Subscription;
637
799
  onStateChange: (handler: (member: RoomMember, state: RoomMemberMediaState) => void) => Subscription;
@@ -653,6 +815,8 @@ declare class RoomClient {
653
815
  * Returns developer-defined metadata set by room.setMetadata() on the server.
654
816
  */
655
817
  getMetadata(): Promise<Record<string, unknown>>;
818
+ private requestCloudflareRealtimeKitMedia;
819
+ private requestRoomMedia;
656
820
  /**
657
821
  * Static: Get room metadata without creating a RoomClient instance.
658
822
  * Useful for lobby screens where you need room info before joining.
@@ -662,6 +826,8 @@ declare class RoomClient {
662
826
  join(): Promise<void>;
663
827
  /** Leave the room and disconnect. Cleans up all pending requests. */
664
828
  leave(): void;
829
+ /** Destroy the room client, cleaning up all listeners and the auth subscription. */
830
+ destroy(): void;
665
831
  /**
666
832
  * Send an action to the server.
667
833
  * Returns a Promise that resolves with the action result from the server.
@@ -674,14 +840,14 @@ declare class RoomClient {
674
840
  * Subscribe to shared state changes.
675
841
  * Called on full sync and on each shared_delta.
676
842
  *
677
- * @returns Subscription with unsubscribe()
843
+ * @returns Subscription (callable & .unsubscribe())
678
844
  */
679
845
  onSharedState(handler: SharedStateHandler): Subscription;
680
846
  /**
681
847
  * Subscribe to player state changes.
682
848
  * Called on full sync and on each player_delta.
683
849
  *
684
- * @returns Subscription with unsubscribe()
850
+ * @returns Subscription (callable & .unsubscribe())
685
851
  */
686
852
  onPlayerState(handler: PlayerStateHandler): Subscription;
687
853
  /**
@@ -690,13 +856,13 @@ declare class RoomClient {
690
856
  * @example
691
857
  * room.onMessage('game_over', (data) => { console.log(data.winner); });
692
858
  *
693
- * @returns Subscription with unsubscribe()
859
+ * @returns Subscription (callable & .unsubscribe())
694
860
  */
695
861
  onMessage(messageType: string, handler: MessageHandler): Subscription;
696
862
  /**
697
863
  * Subscribe to ALL messages regardless of type.
698
864
  *
699
- * @returns Subscription with unsubscribe()
865
+ * @returns Subscription (callable & .unsubscribe())
700
866
  */
701
867
  onAnyMessage(handler: (messageType: string, data: unknown) => void): Subscription;
702
868
  /** Subscribe to errors */
@@ -775,6 +941,7 @@ declare class RoomClient {
775
941
  private upsertMediaTrack;
776
942
  private removeMediaTrack;
777
943
  private mergeMediaState;
944
+ private rejectAllPendingRequests;
778
945
  private rejectPendingVoidRequests;
779
946
  private setConnectionState;
780
947
  private sendRaw;
@@ -1243,4 +1410,4 @@ declare function useTurnstile({ baseUrl, action, }: UseTurnstileOptions): UseTur
1243
1410
  */
1244
1411
  declare function isPlatformWeb(): boolean;
1245
1412
 
1246
- export { type AppStateAdapter, type AsyncStorageAdapter, AuthClient, type AuthResult, type AuthStateChangeHandler, ClientAnalytics, ClientEdgeBase, DatabaseLiveClient, type DatabaseLiveClientAdapter, type DatabaseLiveOptions, type FilterEntry, type FilterOperator, type JuneClientOptions, LifecycleManager, type LinkingAdapter, type PasskeysAuthOptions, PushClient, type PushMessage, type PushMessageHandler, type PushPermissionProvider, type PushPermissionStatus, type PushPlatform, type PushTokenProvider, RoomClient, type RoomConnectionState, type RoomMediaDeviceChange, type RoomMediaKind, type RoomMediaMember, type RoomMediaTrack, type RoomMember, type RoomMemberLeaveReason, type RoomMemberMediaKindState, type RoomMemberMediaState, type RoomOptions, type RoomReconnectInfo, type RoomSignalMeta, type Session, type SignInOptions, type SignUpOptions, type Subscription, TokenManager, type TokenPair, type TokenUser, TurnstileWebView, type TurnstileWebViewProps, type UpdateProfileOptions, type UseLifecycleOptions, type UseTurnstileOptions, type UseTurnstileResult, createClient, isPlatformWeb, matchesFilter, useLifecycle, useTurnstile };
1413
+ export { type AppStateAdapter, type AsyncStorageAdapter, AuthClient, type AuthResult, type AuthStateChangeHandler, ClientAnalytics, ClientEdgeBase, DatabaseLiveClient, type DatabaseLiveClientAdapter, type DatabaseLiveOptions, type FilterEntry, type FilterOperator, type JuneClientOptions, LifecycleManager, type LinkingAdapter, type PasskeysAuthOptions, PushClient, type PushMessage, type PushMessageHandler, type PushPermissionProvider, type PushPermissionStatus, type PushPlatform, type PushTokenProvider, RoomClient, type RoomCloudflareRealtimeKitCreateSessionRequest, type RoomCloudflareRealtimeKitCreateSessionResponse, type RoomCloudflareRealtimeKitTransportFactoryOptions, type RoomConnectionState, type RoomMediaDeviceChange, type RoomMediaKind, type RoomMediaMember, type RoomMediaRemoteTrackEvent, type RoomMediaTrack, type RoomMediaTransport, type RoomMediaTransportConnectPayload, type RoomMediaTransportOptions, type RoomMediaTransportProvider, type RoomMember, type RoomMemberLeaveReason, type RoomMemberMediaKindState, type RoomMemberMediaState, type RoomOptions, type RoomP2PTransportFactoryOptions, type RoomReconnectInfo, type RoomSignalMeta, type Session, type SignInOptions, type SignUpOptions, TokenManager, type TokenPair, type TokenUser, TurnstileWebView, type TurnstileWebViewProps, type UpdateProfileOptions, type UseLifecycleOptions, type UseTurnstileOptions, type UseTurnstileResult, createClient, isPlatformWeb, matchesFilter, useLifecycle, useTurnstile };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- import { HttpClient, GeneratedDbApi, IDatabaseLiveSubscriber, ContextManager, StorageClient, FunctionsClient, DbRef, ContextValue } from '@edge-base/core';
1
+ import { HttpClient, GeneratedDbApi, IDatabaseLiveSubscriber, ContextManager, Subscription, StorageClient, FunctionsClient, DbRef, ContextValue } from '@edge-base/core';
2
+ export { Subscription } from '@edge-base/core';
2
3
  import React from 'react';
3
4
 
4
5
  /**
@@ -405,8 +406,8 @@ declare class DatabaseLiveClient implements IDatabaseLiveSubscriber {
405
406
  private unsubAuthState;
406
407
  private options;
407
408
  constructor(baseUrl: string, tokenManager: TokenManager, options?: DatabaseLiveOptions, contextManager?: ContextManager);
408
- onSnapshot<T>(channel: string, callback: (change: DbChange<T>) => void, clientFilters?: unknown, serverFilters?: unknown, serverOrFilters?: unknown): () => void;
409
- onError(handler: ErrorHandler$1): () => void;
409
+ onSnapshot<T>(channel: string, callback: (change: DbChange<T>) => void, clientFilters?: unknown, serverFilters?: unknown, serverOrFilters?: unknown): Subscription;
410
+ onError(handler: ErrorHandler$1): Subscription;
410
411
  connect(channel: string): Promise<void>;
411
412
  reconnect(): void;
412
413
  disconnect(): void;
@@ -430,6 +431,100 @@ declare class DatabaseLiveClient implements IDatabaseLiveSubscriber {
430
431
  private handleContextChange;
431
432
  }
432
433
 
434
+ interface ParticipantMapLike<TParticipant> extends Iterable<TParticipant> {
435
+ values(): IterableIterator<TParticipant>;
436
+ on(event: 'participantJoined', handler: (participant: TParticipant) => void): void;
437
+ on(event: 'participantLeft', handler: (participant: TParticipant) => void): void;
438
+ on(event: 'participantsCleared', handler: () => void): void;
439
+ on(event: 'participantsUpdate', handler: () => void): void;
440
+ off(event: 'participantJoined', handler: (participant: TParticipant) => void): void;
441
+ off(event: 'participantLeft', handler: (participant: TParticipant) => void): void;
442
+ off(event: 'participantsCleared', handler: () => void): void;
443
+ off(event: 'participantsUpdate', handler: () => void): void;
444
+ }
445
+ type ParticipantEventHandlers = {
446
+ audioUpdate: (payload: {
447
+ audioEnabled: boolean;
448
+ audioTrack: MediaStreamTrack;
449
+ }) => void;
450
+ videoUpdate: (payload: {
451
+ videoEnabled: boolean;
452
+ videoTrack: MediaStreamTrack;
453
+ }) => void;
454
+ screenShareUpdate: (payload: {
455
+ screenShareEnabled: boolean;
456
+ screenShareTracks: {
457
+ audio?: MediaStreamTrack;
458
+ video?: MediaStreamTrack;
459
+ };
460
+ }) => void;
461
+ };
462
+ interface RoomCloudflareKitParticipant {
463
+ id: string;
464
+ customParticipantId?: string;
465
+ userId?: string;
466
+ audioTrack?: MediaStreamTrack;
467
+ audioEnabled?: boolean;
468
+ videoTrack?: MediaStreamTrack;
469
+ videoEnabled?: boolean;
470
+ screenShareTracks?: {
471
+ audio?: MediaStreamTrack;
472
+ video?: MediaStreamTrack;
473
+ };
474
+ screenShareEnabled?: boolean;
475
+ on<TEvent extends keyof ParticipantEventHandlers>(event: TEvent, handler: ParticipantEventHandlers[TEvent]): void;
476
+ off<TEvent extends keyof ParticipantEventHandlers>(event: TEvent, handler: ParticipantEventHandlers[TEvent]): void;
477
+ }
478
+ interface RoomCloudflareKitSelf {
479
+ id: string;
480
+ audioTrack?: MediaStreamTrack;
481
+ videoTrack?: MediaStreamTrack;
482
+ screenShareTracks?: {
483
+ audio?: MediaStreamTrack;
484
+ video?: MediaStreamTrack;
485
+ };
486
+ enableAudio(customTrack?: MediaStreamTrack): Promise<void>;
487
+ enableVideo(customTrack?: MediaStreamTrack): Promise<void>;
488
+ enableScreenShare(): Promise<void>;
489
+ disableAudio(): Promise<void>;
490
+ disableVideo(): Promise<void>;
491
+ disableScreenShare(): Promise<void>;
492
+ getDeviceById(deviceId: string, kind: string): Promise<unknown>;
493
+ setDevice(device: unknown): Promise<void>;
494
+ }
495
+ interface RoomCloudflareKitClient {
496
+ join?(): Promise<void>;
497
+ leave?(state?: unknown): Promise<void>;
498
+ joinRoom?(): Promise<void>;
499
+ leaveRoom?(state?: unknown): Promise<void>;
500
+ readonly participants: {
501
+ active?: ParticipantMapLike<RoomCloudflareKitParticipant>;
502
+ joined?: ParticipantMapLike<RoomCloudflareKitParticipant>;
503
+ };
504
+ readonly self: RoomCloudflareKitSelf;
505
+ }
506
+ interface RoomCloudflareKitClientFactory {
507
+ init(options: {
508
+ authToken: string;
509
+ defaults: {
510
+ audio: boolean;
511
+ video: boolean;
512
+ };
513
+ }): Promise<RoomCloudflareKitClient>;
514
+ }
515
+ interface RoomCloudflareMediaTransportOptions {
516
+ autoSubscribe?: boolean;
517
+ mediaDevices?: Pick<MediaDevices, 'getUserMedia' | 'getDisplayMedia' | 'enumerateDevices'>;
518
+ clientFactory?: RoomCloudflareKitClientFactory;
519
+ }
520
+
521
+ interface RoomP2PMediaTransportOptions {
522
+ rtcConfiguration?: RTCConfiguration;
523
+ peerConnectionFactory?: (configuration: RTCConfiguration) => RTCPeerConnection;
524
+ mediaDevices?: Pick<MediaDevices, 'getUserMedia' | 'getDisplayMedia'>;
525
+ signalPrefix?: string;
526
+ }
527
+
433
528
  /**
434
529
  * RoomClient v2 — Client-side room connection for real-time multiplayer state.
435
530
  *
@@ -450,10 +545,10 @@ interface RoomOptions {
450
545
  reconnectBaseDelay?: number;
451
546
  /** Timeout for send() requests in ms (default: 10000) */
452
547
  sendTimeout?: number;
548
+ /** Timeout for WebSocket connection establishment in ms (default: 15000) */
549
+ connectionTimeout?: number;
453
550
  }
454
- interface Subscription {
455
- unsubscribe(): void;
456
- }
551
+
457
552
  type SharedStateHandler = (state: Record<string, unknown>, changes: Record<string, unknown>) => void;
458
553
  type PlayerStateHandler = (state: Record<string, unknown>, changes: Record<string, unknown>) => void;
459
554
  type MessageHandler = (data: unknown) => void;
@@ -490,6 +585,7 @@ interface RoomMediaTrack {
490
585
  muted: boolean;
491
586
  publishedAt?: number;
492
587
  adminDisabled?: boolean;
588
+ providerSessionId?: string;
493
589
  }
494
590
  interface RoomMemberMediaKindState {
495
591
  published: boolean;
@@ -498,6 +594,7 @@ interface RoomMemberMediaKindState {
498
594
  deviceId?: string;
499
595
  publishedAt?: number;
500
596
  adminDisabled?: boolean;
597
+ providerSessionId?: string;
501
598
  }
502
599
  interface RoomMemberMediaState {
503
600
  audio?: RoomMemberMediaKindState;
@@ -513,6 +610,66 @@ interface RoomMediaDeviceChange {
513
610
  kind: RoomMediaKind;
514
611
  deviceId: string;
515
612
  }
613
+ interface RoomCloudflareRealtimeKitCreateSessionRequest {
614
+ connectionId?: string;
615
+ customParticipantId?: string;
616
+ name?: string;
617
+ picture?: string;
618
+ }
619
+ interface RoomCloudflareRealtimeKitCreateSessionResponse {
620
+ sessionId: string;
621
+ meetingId: string;
622
+ participantId: string;
623
+ authToken: string;
624
+ presetName: string;
625
+ connectionId?: string;
626
+ reused?: boolean;
627
+ }
628
+ interface RoomMediaTransportConnectPayload {
629
+ connectionId?: string;
630
+ customParticipantId?: string;
631
+ name?: string;
632
+ picture?: string;
633
+ }
634
+ interface RoomMediaRemoteTrackEvent {
635
+ kind: RoomMediaKind;
636
+ track: MediaStreamTrack;
637
+ stream?: MediaStream;
638
+ trackName?: string;
639
+ providerSessionId?: string;
640
+ participantId?: string;
641
+ customParticipantId?: string;
642
+ userId?: string;
643
+ }
644
+ interface RoomMediaTransport {
645
+ connect(payload?: RoomMediaTransportConnectPayload): Promise<string>;
646
+ enableAudio(constraints?: MediaTrackConstraints | boolean): Promise<MediaStreamTrack>;
647
+ enableVideo(constraints?: MediaTrackConstraints | boolean): Promise<MediaStreamTrack>;
648
+ startScreenShare(constraints?: unknown): Promise<MediaStreamTrack>;
649
+ disableAudio(): Promise<void>;
650
+ disableVideo(): Promise<void>;
651
+ stopScreenShare(): Promise<void>;
652
+ setMuted(kind: Extract<RoomMediaKind, 'audio' | 'video'>, muted: boolean): Promise<void>;
653
+ switchDevices(payload: {
654
+ audioInputId?: string;
655
+ videoInputId?: string;
656
+ screenInputId?: string;
657
+ }): Promise<void>;
658
+ onRemoteTrack(handler: (event: RoomMediaRemoteTrackEvent) => void): Subscription;
659
+ getSessionId(): string | null;
660
+ getPeerConnection(): RTCPeerConnection | null;
661
+ destroy(): void;
662
+ }
663
+ type RoomMediaTransportProvider = 'cloudflare_realtimekit' | 'p2p';
664
+ interface RoomCloudflareRealtimeKitTransportFactoryOptions {
665
+ provider?: 'cloudflare_realtimekit';
666
+ cloudflareRealtimeKit?: RoomCloudflareMediaTransportOptions;
667
+ }
668
+ interface RoomP2PTransportFactoryOptions {
669
+ provider: 'p2p';
670
+ p2p?: RoomP2PMediaTransportOptions;
671
+ }
672
+ type RoomMediaTransportOptions = RoomCloudflareRealtimeKitTransportFactoryOptions | RoomP2PTransportFactoryOptions;
516
673
  declare class RoomClient {
517
674
  private baseUrl;
518
675
  private tokenManager;
@@ -585,6 +742,7 @@ declare class RoomClient {
585
742
  };
586
743
  readonly members: {
587
744
  list: () => RoomMember[];
745
+ current: () => RoomMember | null;
588
746
  onSync: (handler: (members: RoomMember[]) => void) => Subscription;
589
747
  onJoin: (handler: (member: RoomMember) => void) => Subscription;
590
748
  onLeave: (handler: (member: RoomMember, reason: RoomMemberLeaveReason) => void) => Subscription;
@@ -632,6 +790,10 @@ declare class RoomClient {
632
790
  screenInputId?: string;
633
791
  }) => Promise<void>;
634
792
  };
793
+ cloudflareRealtimeKit: {
794
+ createSession: (payload?: RoomCloudflareRealtimeKitCreateSessionRequest) => Promise<RoomCloudflareRealtimeKitCreateSessionResponse>;
795
+ };
796
+ transport: (options?: RoomMediaTransportOptions) => RoomMediaTransport;
635
797
  onTrack: (handler: (track: RoomMediaTrack, member: RoomMember) => void) => Subscription;
636
798
  onTrackRemoved: (handler: (track: RoomMediaTrack, member: RoomMember) => void) => Subscription;
637
799
  onStateChange: (handler: (member: RoomMember, state: RoomMemberMediaState) => void) => Subscription;
@@ -653,6 +815,8 @@ declare class RoomClient {
653
815
  * Returns developer-defined metadata set by room.setMetadata() on the server.
654
816
  */
655
817
  getMetadata(): Promise<Record<string, unknown>>;
818
+ private requestCloudflareRealtimeKitMedia;
819
+ private requestRoomMedia;
656
820
  /**
657
821
  * Static: Get room metadata without creating a RoomClient instance.
658
822
  * Useful for lobby screens where you need room info before joining.
@@ -662,6 +826,8 @@ declare class RoomClient {
662
826
  join(): Promise<void>;
663
827
  /** Leave the room and disconnect. Cleans up all pending requests. */
664
828
  leave(): void;
829
+ /** Destroy the room client, cleaning up all listeners and the auth subscription. */
830
+ destroy(): void;
665
831
  /**
666
832
  * Send an action to the server.
667
833
  * Returns a Promise that resolves with the action result from the server.
@@ -674,14 +840,14 @@ declare class RoomClient {
674
840
  * Subscribe to shared state changes.
675
841
  * Called on full sync and on each shared_delta.
676
842
  *
677
- * @returns Subscription with unsubscribe()
843
+ * @returns Subscription (callable & .unsubscribe())
678
844
  */
679
845
  onSharedState(handler: SharedStateHandler): Subscription;
680
846
  /**
681
847
  * Subscribe to player state changes.
682
848
  * Called on full sync and on each player_delta.
683
849
  *
684
- * @returns Subscription with unsubscribe()
850
+ * @returns Subscription (callable & .unsubscribe())
685
851
  */
686
852
  onPlayerState(handler: PlayerStateHandler): Subscription;
687
853
  /**
@@ -690,13 +856,13 @@ declare class RoomClient {
690
856
  * @example
691
857
  * room.onMessage('game_over', (data) => { console.log(data.winner); });
692
858
  *
693
- * @returns Subscription with unsubscribe()
859
+ * @returns Subscription (callable & .unsubscribe())
694
860
  */
695
861
  onMessage(messageType: string, handler: MessageHandler): Subscription;
696
862
  /**
697
863
  * Subscribe to ALL messages regardless of type.
698
864
  *
699
- * @returns Subscription with unsubscribe()
865
+ * @returns Subscription (callable & .unsubscribe())
700
866
  */
701
867
  onAnyMessage(handler: (messageType: string, data: unknown) => void): Subscription;
702
868
  /** Subscribe to errors */
@@ -775,6 +941,7 @@ declare class RoomClient {
775
941
  private upsertMediaTrack;
776
942
  private removeMediaTrack;
777
943
  private mergeMediaState;
944
+ private rejectAllPendingRequests;
778
945
  private rejectPendingVoidRequests;
779
946
  private setConnectionState;
780
947
  private sendRaw;
@@ -1243,4 +1410,4 @@ declare function useTurnstile({ baseUrl, action, }: UseTurnstileOptions): UseTur
1243
1410
  */
1244
1411
  declare function isPlatformWeb(): boolean;
1245
1412
 
1246
- export { type AppStateAdapter, type AsyncStorageAdapter, AuthClient, type AuthResult, type AuthStateChangeHandler, ClientAnalytics, ClientEdgeBase, DatabaseLiveClient, type DatabaseLiveClientAdapter, type DatabaseLiveOptions, type FilterEntry, type FilterOperator, type JuneClientOptions, LifecycleManager, type LinkingAdapter, type PasskeysAuthOptions, PushClient, type PushMessage, type PushMessageHandler, type PushPermissionProvider, type PushPermissionStatus, type PushPlatform, type PushTokenProvider, RoomClient, type RoomConnectionState, type RoomMediaDeviceChange, type RoomMediaKind, type RoomMediaMember, type RoomMediaTrack, type RoomMember, type RoomMemberLeaveReason, type RoomMemberMediaKindState, type RoomMemberMediaState, type RoomOptions, type RoomReconnectInfo, type RoomSignalMeta, type Session, type SignInOptions, type SignUpOptions, type Subscription, TokenManager, type TokenPair, type TokenUser, TurnstileWebView, type TurnstileWebViewProps, type UpdateProfileOptions, type UseLifecycleOptions, type UseTurnstileOptions, type UseTurnstileResult, createClient, isPlatformWeb, matchesFilter, useLifecycle, useTurnstile };
1413
+ export { type AppStateAdapter, type AsyncStorageAdapter, AuthClient, type AuthResult, type AuthStateChangeHandler, ClientAnalytics, ClientEdgeBase, DatabaseLiveClient, type DatabaseLiveClientAdapter, type DatabaseLiveOptions, type FilterEntry, type FilterOperator, type JuneClientOptions, LifecycleManager, type LinkingAdapter, type PasskeysAuthOptions, PushClient, type PushMessage, type PushMessageHandler, type PushPermissionProvider, type PushPermissionStatus, type PushPlatform, type PushTokenProvider, RoomClient, type RoomCloudflareRealtimeKitCreateSessionRequest, type RoomCloudflareRealtimeKitCreateSessionResponse, type RoomCloudflareRealtimeKitTransportFactoryOptions, type RoomConnectionState, type RoomMediaDeviceChange, type RoomMediaKind, type RoomMediaMember, type RoomMediaRemoteTrackEvent, type RoomMediaTrack, type RoomMediaTransport, type RoomMediaTransportConnectPayload, type RoomMediaTransportOptions, type RoomMediaTransportProvider, type RoomMember, type RoomMemberLeaveReason, type RoomMemberMediaKindState, type RoomMemberMediaState, type RoomOptions, type RoomP2PTransportFactoryOptions, type RoomReconnectInfo, type RoomSignalMeta, type Session, type SignInOptions, type SignUpOptions, TokenManager, type TokenPair, type TokenUser, TurnstileWebView, type TurnstileWebViewProps, type UpdateProfileOptions, type UseLifecycleOptions, type UseTurnstileOptions, type UseTurnstileResult, createClient, isPlatformWeb, matchesFilter, useLifecycle, useTurnstile };