@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/README.md +51 -0
- package/dist/index.cjs +1326 -131
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +178 -11
- package/dist/index.d.ts +178 -11
- package/dist/index.js +1327 -132
- package/dist/index.js.map +1 -1
- package/package.json +12 -4
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):
|
|
409
|
-
onError(handler: ErrorHandler$1):
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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):
|
|
409
|
-
onError(handler: ErrorHandler$1):
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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 };
|