Hiyve Components - v1.0.0
    Preparing search index...

    Module @hiyve/rn-core

    @hiyve/rn-core -- Framework-agnostic state store for React Native.

    This package provides the core state management layer for building real-time communication apps with Hiyve on React Native. It mirrors the @hiyve/core API surface with adaptations for the React Native environment (e.g., react-native-webrtc MediaStreams, AsyncStorage persistence, simplified audio processing).

    import { HiyveStoreRN, createAsyncStorageAdapter, debug } from '@hiyve/rn-core';
    import AsyncStorage from '@react-native-async-storage/async-storage';

    // Enable debug logging in development
    if (__DEV__) debug.enable();

    // Create storage adapter
    const storage = createAsyncStorageAdapter(AsyncStorage);
    await storage.init(['hiyve:audioDevice', 'hiyve:videoDevice']);

    // Create the store
    const store = new HiyveStoreRN(rtcClient, { storage });

    @hiyve/rn-core

    Framework-agnostic state store for Hiyve React Native WebRTC applications.

    Mirrors the @hiyve/core API for React Native, with platform-appropriate media handling, async lifecycle methods, and camera switching.

    npm install @hiyve/rn-core @hiyve/rtc-client-rn react-native-webrtc
    
    import { HiyveStoreRN } from '@hiyve/rn-core';

    const store = new HiyveStoreRN({
    generateRoomToken: async () => {
    const res = await fetch('https://your-api.com/token', { method: 'POST' });
    return res.json(); // { roomToken, serverRegionUrl, serverRegion }
    },
    onError: (err) => console.error('Hiyve error:', err),
    });

    // Create a room
    await store.createRoom('my-room', 'user123');

    // Subscribe to state changes
    const unsub = store.subscribeToSlice('localMedia', () => {
    const media = store.getSlice('localMedia');
    console.log('Local stream:', media.localStream);
    console.log('Audio muted:', media.isAudioMuted);
    });

    // Toggle controls
    await store.toggleAudio();
    await store.toggleVideo();
    await store.switchCamera(); // RN-only: flip front/back camera

    // Leave and clean up
    await store.leaveRoom();
    unsub();

    The main class. Created with HiyveStoreRNOptions:

    Option Type Description
    generateRoomToken () => Promise<TokenData> Required. Returns { roomToken, serverRegionUrl, serverRegion?, regions? }
    storageAdapter StorageAdapter Optional adapter for persisting device preferences
    onError (error: Error) => void Optional error callback
    Method Returns Description
    subscribe(listener) () => void Subscribe to all state changes. Returns unsubscribe function.
    subscribeToSlice(slice, listener) () => void Subscribe to a specific slice. Returns unsubscribe function.
    getState() HiyveStoreRNState Get the full current state snapshot.
    getSlice(slice) Slice type Get a specific state slice.
    getClient() Client | null Get the raw RN Client instance.
    Method Returns Description
    createRoom(roomName, userId, options?) Promise<void> Create a new room as host
    joinRoom(roomName, userId) Promise<void> Join an existing room
    joinRoomWithToken(options) Promise<void> Join a room using a join token from an invite link. Options: { joinToken, roomRegion, userId, password? }
    getRoomInfoFromToken(options) Promise<RoomInfoFromToken> Query room name and active status from a join token without joining. Options: { joinToken, roomRegion, password? }. Returns { roomName, isActive }
    leaveRoom() Promise<void> Leave the room and disconnect
    Method Returns Description
    toggleAudio() Promise<void> Toggle microphone mute/unmute
    toggleVideo() Promise<void> Toggle camera on/off
    switchCamera() Promise<void> Switch between front and back camera (RN-only)
    Method Returns Description
    sendMessage(content) void Send a text chat message
    sendDataMessage(data) void Send arbitrary JSON data
    clearUnread() void Reset unread message counter
    loadChatHistory(cursor?) Promise<{ hasMore }> Load older messages
    Method Returns Description
    startRecording(options?) Promise<boolean> Start cloud recording
    stopRecording() Promise<void> Stop recording
    startStreaming(options?) Promise<void> Start live streaming
    stopStreaming() Promise<void> Stop streaming
    startTranscription() Promise<boolean> Start real-time transcription
    stopTranscription() Promise<void> Stop transcription
    Method Returns Description
    admitUser(userId) Promise<void> Admit a waiting user (host only)
    rejectUser(userId) Promise<void> Reject a waiting user (host only)
    Method Returns Description
    toggleHandRaised() Promise<void> Toggle local user's hand raised state
    lowerAllHands() Promise<void> Lower all hands (host only)
    setDominant(userId) void Set dominant speaker for layout (host only)
    Method Returns Description
    destroy() Promise<void> Destroy the store and release all resources

    The store manages 14 state slices, each subscribable independently:

    Slice Key Fields
    connection isConnected, isConnecting, error
    room room, isOwner, isInRoom
    participants participants (Map), localUserId
    localMedia isAudioMuted, isVideoMuted, localStream
    recording isRecording, isRecordingStarting, recordingId
    streaming isStreaming, streamingId, streamingUrl
    transcription isTranscribing, transcriptions[]
    chat messages[], unreadCount
    waitingRoom waitingUsers[], isWaitingForAdmission
    waitForHost isWaiting, roomName, elapsedTime
    audioProcessing feedbackDetected
    layout dominantSpeaker
    handRaise raisedHands (Map)
    aiChat messages[]

    For persisting device preferences across app restarts:

    import AsyncStorage from '@react-native-async-storage/async-storage';
    import { createAsyncStorageAdapter } from '@hiyve/rn-core';

    const storage = createAsyncStorageAdapter(AsyncStorage);
    await storage.init(['hiyve-selected-devices']);

    const store = new HiyveStoreRN({
    generateRoomToken: fetchToken,
    storageAdapter: storage,
    });
    Feature Web (@hiyve/core) React Native (@hiyve/rn-core)
    Camera selection setVideoDevice(deviceId) switchCamera() (front/back toggle)
    Screen sharing Supported Not available
    Local video Renders to a DOM element via localVideoElementId Available as localStream in localMedia state
    leaveRoom() Synchronous Async (Promise<void>)
    destroy() Synchronous Async (Promise<void>)
    Audio processing gainNode, audioInputMonitor, feedbackDetected feedbackDetected only

    The package exports a debug utility for troubleshooting. Debug logging is disabled by default; error() calls always print regardless.

    import { debug } from '@hiyve/rn-core';

    if (__DEV__) {
    debug.enable();
    }

    debug.log('Store initialized'); // Only when enabled
    debug.warn('Slow connection'); // Only when enabled
    debug.error('Connection failed'); // Always printed
    debug.disable();
    Method Description
    debug.enable() Enable debug logging at runtime
    debug.disable() Disable debug logging at runtime
    debug.log(...args) Log info (only when enabled)
    debug.warn(...args) Log warning (only when enabled)
    debug.error(...args) Log error (always printed)
    debug.isEnabled() Check if debug mode is active
    • React Native 0.70+
    • react-native-webrtc >= 118.0.0
    • @hiyve/rtc-client-rn

    Connection

    CreateRoomOptions
    GetRoomInfoFromTokenOptions
    JoinRoomWithTokenOptions
    RoomInfoFromToken

    Core Types

    AiChatMessage
    ChatMessage
    Participant
    RecordingOptions
    RoomInfo
    StreamingOptions
    TranscriptionEntry
    TranscriptionMoodData
    WaitingRoomUser

    Debug

    debug

    Other

    HiyveStoreRN
    HiyveStoreRNOptions
    HiyveStoreRNState
    SliceName

    State Types

    AudioProcessingState
    ChatState
    ConnectionState
    HandRaiseState
    LayoutState
    LocalMediaState
    ParticipantsState
    RecordingState
    RoomState
    StreamingState
    TranscriptionState
    WaitForHostState
    WaitingRoomState

    Storage

    StorageAdapter
    createAsyncStorageAdapter