Skip to main content

Overview

Complete TypeScript type reference for @navai/voice-mobile.

Hook Types

UseMobileVoiceAgentOptions

Options for useMobileVoiceAgent hook.
type UseMobileVoiceAgentOptions = {
  runtime: ResolveNavaiMobileApplicationRuntimeConfigResult | null;
  runtimeLoading: boolean;
  runtimeError: string | null;
  navigate: (path: string) => void;
};
runtime
ResolveNavaiMobileApplicationRuntimeConfigResult | null
required
Runtime configuration or null if not loaded
runtimeLoading
boolean
required
Whether runtime is loading
runtimeError
string | null
required
Runtime loading error
navigate
(path: string) => void
required
Navigation function

UseMobileVoiceAgentResult

Return type of useMobileVoiceAgent hook.
type UseMobileVoiceAgentResult = {
  status: 'idle' | 'connecting' | 'connected' | 'error';
  error: string | null;
  isConnecting: boolean;
  isConnected: boolean;
  start: () => Promise<void>;
  stop: () => Promise<void>;
};
status
'idle' | 'connecting' | 'connected' | 'error'
Current session status
error
string | null
Error message if status is error
isConnecting
boolean
Convenience flag for connecting state
isConnected
boolean
Convenience flag for connected state
start
() => Promise<void>
Start voice session
stop
() => Promise<void>
Stop voice session

Agent Runtime Types

CreateNavaiMobileAgentRuntimeOptions

type CreateNavaiMobileAgentRuntimeOptions = {
  navigate: (path: string) => void;
  routes: NavaiRoute[];
  functionsRegistry: NavaiFunctionsRegistry;
  backendFunctions?: NavaiBackendFunctionDefinition[];
  executeBackendFunction?: ExecuteNavaiMobileBackendFunction;
  baseInstructions?: string;
};
type NavaiMobileAgentRuntime = {
  session: NavaiMobileAgentRuntimeSession;
  warnings: string[];
  availableFunctionNames: string[];
  executeToolCall: (input: NavaiMobileToolCallInput) => Promise<unknown>;
};
type NavaiMobileAgentRuntimeSession = {
  instructions: string;
  tools: NavaiRealtimeToolDefinition[];
};
type NavaiRealtimeToolDefinition = {
  type: 'function';
  name: string;
  description: string;
  parameters: Record<string, unknown>;
};
type NavaiMobileToolCallInput = {
  name: string;
  payload: Record<string, unknown> | null;
};
type NavaiRealtimeToolCall = {
  callId: string;
  name?: string;
  payload: Record<string, unknown> | null;
};

BuildNavaiRealtimeToolResultEventsInput

type BuildNavaiRealtimeToolResultEventsInput = {
  callId: string;
  output: unknown;
};

ExecuteNavaiMobileBackendFunction

type ExecuteNavaiMobileBackendFunction = (
  input: ExecuteNavaiBackendFunctionInput
) => Promise<unknown> | unknown;

Backend Client Types

CreateNavaiMobileBackendClientOptions

type CreateNavaiMobileBackendClientOptions = {
  apiBaseUrl?: string;
  env?: NavaiMobileEnv;
  fetchImpl?: typeof fetch;
  clientSecretPath?: string;
  functionsListPath?: string;
  functionsExecutePath?: string;
};
type NavaiMobileBackendClient = {
  createClientSecret: (
    input?: CreateRealtimeClientSecretInput
  ) => Promise<CreateRealtimeClientSecretResult>;
  listFunctions: () => Promise<BackendFunctionsResult>;
  executeFunction: (
    input: ExecuteNavaiBackendFunctionInput
  ) => Promise<unknown>;
};

CreateRealtimeClientSecretInput

type CreateRealtimeClientSecretInput = {
  model?: string;
  voice?: string;
  instructions?: string;
  language?: string;
  voiceAccent?: string;
  voiceTone?: string;
  apiKey?: string;
};

CreateRealtimeClientSecretResult

type CreateRealtimeClientSecretResult = {
  value: string;
  expires_at?: number;
};
type NavaiBackendFunctionDefinition = {
  name: string;
  description?: string;
  source?: string;
};

ExecuteNavaiBackendFunctionInput

type ExecuteNavaiBackendFunctionInput = {
  functionName: string;
  payload: Record<string, unknown> | null;
};

BackendFunctionsResult

type BackendFunctionsResult = {
  functions: NavaiBackendFunctionDefinition[];
  warnings: string[];
};
type NavaiMobileEnv = Record<string, string | undefined>;

WebRTC Transport Types

CreateReactNativeWebRtcTransportOptions

type CreateReactNativeWebRtcTransportOptions = {
  globals: NavaiReactNativeWebRtcGlobals;
  fetchImpl?: typeof fetch;
  model?: string;
  rtcConfiguration?: unknown;
  audioConstraints?: unknown;
  realtimeUrl?: string;
  remoteAudioTrackVolume?: number;
};
type NavaiReactNativeWebRtcGlobals = {
  RTCPeerConnection: new (...args: any[]) => NavaiPeerConnectionLike;
  mediaDevices: {
    getUserMedia: (...args: any[]) => Promise<NavaiMediaStreamLike>;
  };
};
type NavaiRealtimeTransport = {
  connect: (options: NavaiRealtimeTransportConnectOptions) => Promise<void>;
  disconnect: () => Promise<void> | void;
  sendEvent?: (event: unknown) => Promise<void> | void;
  getState?: () => NavaiRealtimeTransportState;
};
type NavaiRealtimeTransportConnectOptions = {
  clientSecret: string;
  model?: string;
  onEvent?: (event: unknown) => void;
  onError?: (error: unknown) => void;
};
type NavaiRealtimeTransportState = 
  | 'idle' 
  | 'connecting' 
  | 'connected' 
  | 'error' 
  | 'closed';

WebRTC Interface Types

type NavaiPeerConnectionLike = {
  connectionState?: string;
  createDataChannel: (...args: any[]) => NavaiDataChannelLike;
  addTrack: (...args: any[]) => unknown;
  getReceivers?: () => NavaiRtpReceiverLike[];
  createOffer: (...args: any[]) => Promise<NavaiSessionDescriptionLike>;
  setLocalDescription: (...args: any[]) => Promise<void>;
  setRemoteDescription: (...args: any[]) => Promise<void>;
  close: (...args: any[]) => void;
  onconnectionstatechange?: (() => void) | null;
  oniceconnectionstatechange?: (() => void) | null;
  ontrack?: ((event: NavaiTrackEventLike) => void) | null;
};

type NavaiDataChannelLike = {
  readyState?: string;
  send: (data: string) => void;
  close?: () => void;
  onmessage?: ((event: { data?: unknown }) => void) | null;
  onerror?: ((error: unknown) => void) | null;
  onopen?: (() => void) | null;
  onclose?: (() => void) | null;
};

type NavaiMediaStreamLike = {
  getTracks?: () => NavaiMediaTrackLike[];
  getAudioTracks?: () => NavaiMediaTrackLike[];
};

type NavaiMediaTrackLike = {
  stop?: () => void;
  kind?: string;
  _setVolume?: (volume: number) => void;
};

type NavaiSessionDescriptionLike = {
  type: string;
  sdp?: string;
};

type NavaiTrackEventLike = {
  track?: NavaiMediaTrackLike | null;
  streams?: NavaiMediaStreamLike[];
};

type NavaiRtpReceiverLike = {
  track?: NavaiMediaTrackLike | null;
};

Function Types

type NavaiFunctionDefinition = {
  name: string;
  description: string;
  source: string;
  run: (
    payload: NavaiFunctionPayload,
    context: NavaiFunctionContext
  ) => Promise<unknown> | unknown;
};
type NavaiFunctionPayload = Record<string, unknown>;
type NavaiFunctionContext = {
  navigate: (path: string) => void;
};
type NavaiFunctionsRegistry = {
  byName: Map<string, NavaiFunctionDefinition>;
  ordered: NavaiFunctionDefinition[];
  warnings: string[];
};
type NavaiFunctionModuleLoaders = Record<string, () => Promise<unknown>>;

Route Types

type NavaiRoute = {
  name: string;
  path: string;
  description: string;
  synonyms?: string[];
};

Session Types

CreateNavaiMobileVoiceSessionOptions

type CreateNavaiMobileVoiceSessionOptions = {
  transport: NavaiRealtimeTransport;
  backendClient?: NavaiMobileBackendClient;
  backendClientOptions?: CreateNavaiMobileBackendClientOptions;
  onRealtimeEvent?: (event: unknown) => void;
  onRealtimeError?: (error: unknown) => void;
};
type NavaiMobileVoiceSession = {
  start: (
    input?: StartNavaiMobileVoiceSessionInput
  ) => Promise<StartNavaiMobileVoiceSessionResult>;
  stop: () => Promise<void>;
  listBackendFunctions: (forceReload?: boolean) => Promise<BackendFunctionsResult>;
  executeBackendFunction: (
    input: ExecuteNavaiBackendFunctionInput
  ) => Promise<unknown>;
  sendRealtimeEvent: (event: unknown) => Promise<void>;
  getSnapshot: () => NavaiMobileVoiceSessionSnapshot;
};

StartNavaiMobileVoiceSessionInput

type StartNavaiMobileVoiceSessionInput = CreateRealtimeClientSecretInput & {
  preloadBackendFunctions?: boolean;
};

StartNavaiMobileVoiceSessionResult

type StartNavaiMobileVoiceSessionResult = {
  clientSecret: string;
  backendFunctions: NavaiBackendFunctionDefinition[];
  warnings: string[];
};
type NavaiMobileVoiceSessionSnapshot = {
  state: NavaiMobileVoiceSessionState;
  transportState: NavaiRealtimeTransportState | 'unknown';
  backendFunctions: NavaiBackendFunctionDefinition[];
  warnings: string[];
};
type NavaiMobileVoiceSessionState = 
  | 'idle' 
  | 'connecting' 
  | 'connected' 
  | 'error';

Runtime Configuration Types

type NavaiMobileRuntimeEnv = Record<string, string | undefined> & {
  NAVAI_API_URL?: string;
  NAVAI_FUNCTIONS_FOLDERS?: string;
  NAVAI_ROUTES_FILE?: string;
  NAVAI_REALTIME_MODEL?: string;
};

ResolveNavaiMobileEnvOptions

type ResolveNavaiMobileEnvOptions = {
  sources?: Array<Record<string, unknown> | undefined>;
};

ResolveNavaiMobileRuntimeConfigOptions

type ResolveNavaiMobileRuntimeConfigOptions = {
  moduleLoaders: NavaiFunctionModuleLoaders;
  defaultRoutes: NavaiRoute[];
  env?: Record<string, unknown>;
  routesFile?: string;
  functionsFolders?: string;
  modelOverride?: string;
  defaultRoutesFile?: string;
  defaultFunctionsFolder?: string;
};

ResolveNavaiMobileRuntimeConfigResult

type ResolveNavaiMobileRuntimeConfigResult = {
  routes: NavaiRoute[];
  functionModuleLoaders: NavaiFunctionModuleLoaders;
  modelOverride?: string;
  warnings: string[];
};

ResolveNavaiMobileApplicationRuntimeConfigOptions

type ResolveNavaiMobileApplicationRuntimeConfigOptions = 
  ResolveNavaiMobileRuntimeConfigOptions & {
  env?: NavaiMobileRuntimeEnv;
  apiBaseUrl?: string;
  defaultApiBaseUrl?: string;
  emptyModuleLoadersWarning?: string;
};

ResolveNavaiMobileApplicationRuntimeConfigResult

type ResolveNavaiMobileApplicationRuntimeConfigResult = 
  ResolveNavaiMobileRuntimeConfigResult & {
  apiBaseUrl: string;
  env: NavaiMobileRuntimeEnv;
};

Type Guards and Utilities

These are internal utilities, but useful for reference:
// Check if value is a record
function isRecord(value: unknown): value is Record<string, unknown>;

// Check if value is a class constructor
function isClassConstructor(value: unknown): value is new (...args: any[]) => any;

// Check if value is callable
function isCallable(value: unknown): value is (...args: any[]) => any;

// Normalize function name
function normalizeName(value: string): string;

// Format error to string
function toErrorMessage(error: unknown): string;

Import Patterns

Import All Types

import type {
  UseMobileVoiceAgentOptions,
  UseMobileVoiceAgentResult,
  NavaiMobileAgentRuntime,
  NavaiRealtimeTransport,
  NavaiRoute,
  NavaiFunctionDefinition
} from '@navai/voice-mobile';

Import with Functions

import {
  useMobileVoiceAgent,
  createNavaiMobileAgentRuntime,
  type UseMobileVoiceAgentOptions,
  type NavaiRoute
} from '@navai/voice-mobile';

See Also

Build docs developers (and LLMs) love