@telnyx/react-native-voice-sdk
Version:
Telnyx React Native Voice SDK - A complete WebRTC voice calling solution
109 lines (101 loc) • 2.47 kB
text/typescript
import uuid from 'uuid-random';
/**
* Stats event data structure matching the Android implementation
*/
export interface StatsEvent {
event: string;
tag: string;
peerId: string;
connectionId: string;
data?: Record<string, unknown> | string;
timestamp: string;
statsObject?: Record<string, unknown>;
}
/**
* WebRTC stats event types
*/
export enum WebRTCStatsEvent {
SIGNALING_CHANGE = 'onsignalingstatechange',
ICE_GATHER_CHANGE = 'onicegatheringstatechange',
ON_ICE_CANDIDATE = 'onicecandidate',
ON_ADD_TRACK = 'ontrack',
ON_RENEGOTIATION_NEEDED = 'onnegotiationneeded',
ON_DATA_CHANNEL = 'ondatachannel',
ON_ICE_CONNECTION_STATE_CHANGE = 'oniceconnectionstatechange',
ON_ICE_CANDIDATE_ERROR = 'onicecandidateerror',
ADD_CONNECTION = 'addConnection',
STATS = 'stats',
}
/**
* WebRTC stats tag types
*/
export enum WebRTCStatsTag {
PEER = 'peer',
STATS = 'stats',
CONNECTION = 'connection',
TRACK = 'track',
DATACHANNEL = 'datachannel',
GETUSERMEDIA = 'getUserMedia',
}
/**
* Create a debug report start message
* Matches Android SDK format: fields at root level with `type` instead of `method`
*/
export function createDebugReportStartMessage(debugReportId: string) {
return {
id: uuid(),
jsonrpc: '2.0',
type: 'debug_report_start',
debug_report_id: debugReportId,
debug_report_version: 1,
};
}
/**
* Create a debug report stop message
*/
export function createDebugReportStopMessage(debugReportId: string) {
return {
id: uuid(),
jsonrpc: '2.0',
type: 'debug_report_stop',
debug_report_id: debugReportId,
debug_report_version: 1,
};
}
/**
* Create a debug report data message
*/
export function createDebugReportDataMessage(
debugReportId: string,
reportData: StatsEvent
) {
return {
id: uuid(),
jsonrpc: '2.0',
type: 'debug_report_data',
debug_report_id: debugReportId,
debug_report_version: 1,
debug_report_data: reportData,
};
}
/**
* Create a stats event object
*/
export function createStatsEvent(params: {
event: string;
tag: string;
peerId: string;
connectionId: string;
data?: Record<string, unknown> | string;
statsObject?: Record<string, unknown>;
}): StatsEvent {
return {
event: params.event,
tag: params.tag,
peerId: params.peerId,
connectionId: params.connectionId,
data: params.data,
timestamp: new Date().toISOString(),
statsObject: params.statsObject,
};
}