@edge-base/react-native 0.2.5 → 0.2.7

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
@@ -431,100 +431,6 @@ declare class DatabaseLiveClient implements IDatabaseLiveSubscriber {
431
431
  private handleContextChange;
432
432
  }
433
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
-
528
434
  /**
529
435
  * RoomClient v2 — Client-side room connection for real-time multiplayer state.
530
436
  *
@@ -547,6 +453,14 @@ interface RoomOptions {
547
453
  sendTimeout?: number;
548
454
  /** Timeout for WebSocket connection establishment in ms (default: 15000) */
549
455
  connectionTimeout?: number;
456
+ /** Heartbeat ping interval in ms (default: 8000) */
457
+ heartbeatIntervalMs?: number;
458
+ /** Consider the room socket stale if no pong is observed within this window. */
459
+ heartbeatStaleTimeoutMs?: number;
460
+ /** Grace period before reacting to browser network type changes. */
461
+ networkRecoveryGraceMs?: number;
462
+ /** Time to wait for recovery before surfacing a session reset recommendation. */
463
+ disconnectResetTimeoutMs?: number;
550
464
  }
551
465
 
552
466
  type SharedStateHandler = (state: Record<string, unknown>, changes: Record<string, unknown>) => void;
@@ -577,99 +491,37 @@ interface RoomMember {
577
491
  interface RoomReconnectInfo {
578
492
  attempt: number;
579
493
  }
580
- type RoomMediaKind = 'audio' | 'video' | 'screen';
581
- interface RoomMediaTrack {
582
- kind: RoomMediaKind;
583
- trackId?: string;
584
- deviceId?: string;
585
- muted: boolean;
586
- publishedAt?: number;
587
- adminDisabled?: boolean;
588
- providerSessionId?: string;
589
- }
590
- interface RoomMemberMediaKindState {
591
- published: boolean;
592
- muted: boolean;
593
- trackId?: string;
594
- deviceId?: string;
595
- publishedAt?: number;
596
- adminDisabled?: boolean;
597
- providerSessionId?: string;
598
- }
599
- interface RoomMemberMediaState {
600
- audio?: RoomMemberMediaKindState;
601
- video?: RoomMemberMediaKindState;
602
- screen?: RoomMemberMediaKindState;
603
- }
604
- interface RoomMediaMember {
605
- member: RoomMember;
606
- state: RoomMemberMediaState;
607
- tracks: RoomMediaTrack[];
494
+ interface RoomRecoveryFailureInfo {
495
+ state: RoomConnectionState;
496
+ timeoutMs: number;
608
497
  }
609
- interface RoomMediaDeviceChange {
610
- kind: RoomMediaKind;
611
- deviceId: string;
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;
498
+ interface RoomConnectDiagnostic {
499
+ ok: boolean;
500
+ type: string;
501
+ category: string;
502
+ message: string;
503
+ namespace?: string;
504
+ roomId?: string;
505
+ runtime?: string;
506
+ pendingCount?: number;
507
+ maxPending?: number;
508
+ }
509
+ interface RoomSummary {
510
+ namespace: string;
511
+ roomId: string;
512
+ metadata: Record<string, unknown>;
513
+ occupancy: {
514
+ activeMembers: number;
515
+ activeConnections: number;
516
+ };
517
+ updatedAt: string;
667
518
  }
668
- interface RoomP2PTransportFactoryOptions {
669
- provider: 'p2p';
670
- p2p?: RoomP2PMediaTransportOptions;
519
+ interface RoomSummaryCollection {
520
+ namespace: string;
521
+ items: RoomSummary[];
522
+ deniedIds: string[];
523
+ updatedAt: string;
671
524
  }
672
- type RoomMediaTransportOptions = RoomCloudflareRealtimeKitTransportFactoryOptions | RoomP2PTransportFactoryOptions;
673
525
  declare class RoomClient {
674
526
  private baseUrl;
675
527
  private tokenManager;
@@ -683,7 +535,7 @@ declare class RoomClient {
683
535
  private _playerState;
684
536
  private _playerVersion;
685
537
  private _members;
686
- private _mediaMembers;
538
+ private lastLocalMemberState;
687
539
  private ws;
688
540
  private reconnectAttempts;
689
541
  private connected;
@@ -695,15 +547,19 @@ declare class RoomClient {
695
547
  private reconnectInfo;
696
548
  private connectingPromise;
697
549
  private heartbeatTimer;
550
+ private lastHeartbeatAckAt;
551
+ private disconnectResetTimer;
698
552
  private intentionallyLeft;
699
553
  private waitingForAuth;
700
554
  private joinRequested;
701
555
  private unsubAuthState;
556
+ private browserNetworkListenersAttached;
557
+ private readonly browserOfflineHandler;
558
+ private readonly browserOnlineHandler;
702
559
  private pendingRequests;
703
560
  private pendingSignalRequests;
704
561
  private pendingAdminRequests;
705
562
  private pendingMemberStateRequests;
706
- private pendingMediaRequests;
707
563
  private sharedStateHandlers;
708
564
  private playerStateHandlers;
709
565
  private messageHandlers;
@@ -711,16 +567,14 @@ declare class RoomClient {
711
567
  private errorHandlers;
712
568
  private kickedHandlers;
713
569
  private memberSyncHandlers;
570
+ private memberSnapshotHandlers;
714
571
  private memberJoinHandlers;
715
572
  private memberLeaveHandlers;
716
573
  private memberStateHandlers;
717
574
  private signalHandlers;
718
575
  private anySignalHandlers;
719
- private mediaTrackHandlers;
720
- private mediaTrackRemovedHandlers;
721
- private mediaStateHandlers;
722
- private mediaDeviceHandlers;
723
576
  private reconnectHandlers;
577
+ private recoveryFailureHandlers;
724
578
  private connectionStateHandlers;
725
579
  readonly state: {
726
580
  getShared: () => Record<string, unknown>;
@@ -731,6 +585,7 @@ declare class RoomClient {
731
585
  };
732
586
  readonly meta: {
733
587
  get: () => Promise<Record<string, unknown>>;
588
+ summary: () => Promise<RoomSummary>;
734
589
  };
735
590
  readonly signals: {
736
591
  send: (event: string, payload?: unknown, options?: {
@@ -743,7 +598,9 @@ declare class RoomClient {
743
598
  readonly members: {
744
599
  list: () => RoomMember[];
745
600
  current: () => RoomMember | null;
601
+ awaitCurrent: (timeoutMs?: number) => Promise<RoomMember | null>;
746
602
  onSync: (handler: (members: RoomMember[]) => void) => Subscription;
603
+ onSnapshot: (handler: (members: RoomMember[]) => void) => Subscription;
747
604
  onJoin: (handler: (member: RoomMember) => void) => Subscription;
748
605
  onLeave: (handler: (member: RoomMember, reason: RoomMemberLeaveReason) => void) => Subscription;
749
606
  setState: (state: Record<string, unknown>) => Promise<void>;
@@ -752,81 +609,49 @@ declare class RoomClient {
752
609
  };
753
610
  readonly admin: {
754
611
  kick: (memberId: string) => Promise<void>;
755
- mute: (memberId: string) => Promise<void>;
756
612
  block: (memberId: string) => Promise<void>;
757
613
  setRole: (memberId: string, role: string) => Promise<void>;
758
- disableVideo: (memberId: string) => Promise<void>;
759
- stopScreenShare: (memberId: string) => Promise<void>;
760
- };
761
- readonly media: {
762
- list: () => RoomMediaMember[];
763
- audio: {
764
- enable: (payload?: {
765
- trackId?: string;
766
- deviceId?: string;
767
- }) => Promise<void>;
768
- disable: () => Promise<void>;
769
- setMuted: (muted: boolean) => Promise<void>;
770
- };
771
- video: {
772
- enable: (payload?: {
773
- trackId?: string;
774
- deviceId?: string;
775
- }) => Promise<void>;
776
- disable: () => Promise<void>;
777
- setMuted: (muted: boolean) => Promise<void>;
778
- };
779
- screen: {
780
- start: (payload?: {
781
- trackId?: string;
782
- deviceId?: string;
783
- }) => Promise<void>;
784
- stop: () => Promise<void>;
785
- };
786
- devices: {
787
- switch: (payload: {
788
- audioInputId?: string;
789
- videoInputId?: string;
790
- screenInputId?: string;
791
- }) => Promise<void>;
792
- };
793
- cloudflareRealtimeKit: {
794
- createSession: (payload?: RoomCloudflareRealtimeKitCreateSessionRequest) => Promise<RoomCloudflareRealtimeKitCreateSessionResponse>;
795
- };
796
- transport: (options?: RoomMediaTransportOptions) => RoomMediaTransport;
797
- onTrack: (handler: (track: RoomMediaTrack, member: RoomMember) => void) => Subscription;
798
- onTrackRemoved: (handler: (track: RoomMediaTrack, member: RoomMember) => void) => Subscription;
799
- onStateChange: (handler: (member: RoomMember, state: RoomMemberMediaState) => void) => Subscription;
800
- onDeviceChange: (handler: (member: RoomMember, change: RoomMediaDeviceChange) => void) => Subscription;
801
614
  };
802
615
  readonly session: {
803
616
  onError: (handler: ErrorHandler) => Subscription;
804
617
  onKicked: (handler: KickedHandler) => Subscription;
805
618
  onReconnect: (handler: (info: RoomReconnectInfo) => void) => Subscription;
806
619
  onConnectionStateChange: (handler: (state: RoomConnectionState) => void) => Subscription;
620
+ onRecoveryFailure: (handler: (info: RoomRecoveryFailureInfo) => void) => Subscription;
621
+ getDebugSnapshot: () => unknown;
807
622
  };
808
623
  constructor(baseUrl: string, namespace: string, roomId: string, tokenManager: TokenManager, options?: RoomOptions);
809
624
  /** Get current shared state (read-only snapshot) */
810
625
  getSharedState(): Record<string, unknown>;
811
626
  /** Get current player state (read-only snapshot) */
812
627
  getPlayerState(): Record<string, unknown>;
628
+ private waitForCurrentMember;
813
629
  /**
814
630
  * Get room metadata without joining (HTTP GET).
815
631
  * Returns developer-defined metadata set by room.setMetadata() on the server.
816
632
  */
817
633
  getMetadata(): Promise<Record<string, unknown>>;
818
- private requestCloudflareRealtimeKitMedia;
819
- private requestRoomMedia;
634
+ getSummary(): Promise<RoomSummary>;
635
+ checkConnection(): Promise<RoomConnectDiagnostic>;
820
636
  /**
821
637
  * Static: Get room metadata without creating a RoomClient instance.
822
638
  * Useful for lobby screens where you need room info before joining.
823
639
  */
824
640
  static getMetadata(baseUrl: string, namespace: string, roomId: string): Promise<Record<string, unknown>>;
641
+ static getSummary(baseUrl: string, namespace: string, roomId: string): Promise<RoomSummary>;
642
+ static getSummaries(baseUrl: string, namespace: string, roomIds: string[]): Promise<RoomSummaryCollection>;
643
+ static checkConnection(baseUrl: string, namespace: string, roomId: string): Promise<RoomConnectDiagnostic>;
644
+ private static requestPublicRoomResource;
825
645
  /** Connect to the room, authenticate, and join */
826
646
  join(): Promise<void>;
827
647
  /** Leave the room and disconnect. Cleans up all pending requests. */
828
648
  leave(): void;
829
- /** Destroy the room client, cleaning up all listeners and the auth subscription. */
649
+ private assertConnected;
650
+ /**
651
+ * Destroy the RoomClient and release all resources.
652
+ * Calls leave() if still connected, unsubscribes from auth state changes,
653
+ * and clears all handler arrays to allow garbage collection.
654
+ */
830
655
  destroy(): void;
831
656
  /**
832
657
  * Send an action to the server.
@@ -872,22 +697,18 @@ declare class RoomClient {
872
697
  private onSignal;
873
698
  private onAnySignal;
874
699
  private onMembersSync;
700
+ private onMemberSnapshot;
875
701
  private onMemberJoin;
876
702
  private onMemberLeave;
877
703
  private onMemberStateChange;
878
704
  private onReconnect;
705
+ private onRecoveryFailure;
879
706
  private onConnectionStateChange;
880
- private onMediaTrack;
881
- private onMediaTrackRemoved;
882
- private onMediaStateChange;
883
- private onMediaDeviceChange;
884
707
  private sendSignal;
885
708
  private sendMemberState;
886
709
  private clearMemberState;
887
710
  private sendMemberStateRequest;
888
711
  private sendAdmin;
889
- private sendMedia;
890
- private switchMediaDevices;
891
712
  private establishConnection;
892
713
  private ensureConnection;
893
714
  private authenticate;
@@ -903,17 +724,10 @@ declare class RoomClient {
903
724
  private handleSignalSent;
904
725
  private handleSignalError;
905
726
  private handleMembersSync;
906
- private handleMediaSync;
907
727
  private handleMemberJoinFrame;
908
728
  private handleMemberLeaveFrame;
909
729
  private handleMemberStateFrame;
910
730
  private handleMemberStateError;
911
- private handleMediaTrackFrame;
912
- private handleMediaTrackRemovedFrame;
913
- private handleMediaStateFrame;
914
- private handleMediaDeviceFrame;
915
- private handleMediaResult;
916
- private handleMediaError;
917
731
  private handleAdminResult;
918
732
  private handleAdminError;
919
733
  private handleKicked;
@@ -921,34 +735,32 @@ declare class RoomClient {
921
735
  private refreshAuth;
922
736
  private handleAuthStateChange;
923
737
  private handleAuthenticationFailure;
738
+ private shouldTreatErrorAsAuthLoss;
739
+ private hasPendingRequests;
740
+ private handleRoomAuthStateLoss;
924
741
  private normalizeMembers;
925
- private normalizeMediaMembers;
926
742
  private normalizeMember;
927
743
  private normalizeState;
928
- private normalizeMediaMember;
929
- private normalizeMediaState;
930
- private normalizeMediaKindState;
931
- private normalizeMediaTracks;
932
- private normalizeMediaTrack;
933
- private normalizeMediaKind;
934
744
  private normalizeSignalMeta;
935
745
  private normalizeLeaveReason;
746
+ private getDebugSnapshot;
936
747
  private upsertMember;
937
748
  private removeMember;
938
- private syncMediaMemberInfo;
939
- private ensureMediaMember;
940
- private removeMediaMember;
941
- private upsertMediaTrack;
942
- private removeMediaTrack;
943
- private mergeMediaState;
749
+ /** Reject all 5 pending request maps at once. */
944
750
  private rejectAllPendingRequests;
945
751
  private rejectPendingVoidRequests;
752
+ private shouldScheduleDisconnectReset;
753
+ private clearDisconnectResetTimer;
754
+ private scheduleDisconnectReset;
946
755
  private setConnectionState;
947
756
  private sendRaw;
948
757
  private buildWsUrl;
758
+ private attachBrowserNetworkListeners;
759
+ private detachBrowserNetworkListeners;
949
760
  private scheduleReconnect;
950
761
  private startHeartbeat;
951
762
  private stopHeartbeat;
763
+ private getReconnectMemberState;
952
764
  }
953
765
 
954
766
  /**
@@ -1410,4 +1222,4 @@ declare function useTurnstile({ baseUrl, action, }: UseTurnstileOptions): UseTur
1410
1222
  */
1411
1223
  declare function isPlatformWeb(): boolean;
1412
1224
 
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 };
1225
+ 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 RoomConnectDiagnostic, type RoomConnectionState, type RoomMember, type RoomMemberLeaveReason, type RoomOptions, type RoomReconnectInfo, type RoomRecoveryFailureInfo, type RoomSignalMeta, type RoomSummary, type RoomSummaryCollection, 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 };