@telnyx/react-native-voice-sdk
Version:
Telnyx React Native Voice SDK - A complete WebRTC voice calling solution
137 lines (120 loc) • 3.57 kB
text/typescript
import uuid from 'uuid-random';
import { SDK_VERSION } from '../env';
function userAgent(enableMissedCallNotifications: boolean = false) {
return `ReactNative${enableMissedCallNotifications ? '-mpn' : ''}-${SDK_VERSION}`;
}
export type LoginWithPasswordParams = {
login: string;
password: string;
reconnection?: boolean;
attachCall?: boolean;
fromPush?: boolean;
enableMissedCallNotifications?: boolean;
userVariables?: {
push_device_token?: string;
push_notification_provider?: string;
};
sessid?: string;
};
export type LoginWithTokenParams = {
login_token: string;
reconnection?: boolean;
attachCall?: boolean;
fromPush?: boolean;
enableMissedCallNotifications?: boolean;
userVariables?: {
push_device_token?: string;
push_notification_provider?: string;
};
sessid?: string;
};
export type LoginSuccessResponse = {
id: string;
result: {
message: string;
sessid: string;
};
voice_sdk_id: string;
};
export function createPasswordLoginMessage({
login,
password,
reconnection = false,
attachCall = false,
fromPush = false,
enableMissedCallNotifications = false,
userVariables,
sessid,
}: LoginWithPasswordParams) {
const params: any = {
userVariables,
login,
passwd: password,
reconnection,
'User-Agent': userAgent(enableMissedCallNotifications),
};
// Add from_push flag if this is a push-initiated connection (matching iOS SDK behavior)
if (fromPush) {
params.from_push = true; // Boolean value as shown in iOS SDK example
console.log('[Login] Adding from_push parameter to login message');
}
// Always create loginParams since we always include attach_call
params.loginParams = {
attach_call: 'true', // iOS SDK uses true.description which converts to string
};
console.log('[Login] Adding attach_call parameter to login message');
// Include existing session id when provided (useful for reconnection scenarios)
if (sessid) {
params.sessid = sessid;
console.log('[Login] Including existing sessid in params:', sessid);
}
return {
id: uuid(),
jsonrpc: '2.0',
method: 'login',
params,
};
}
export function createTokenLoginMessage({
login_token,
userVariables,
reconnection = false,
attachCall = false,
fromPush = false,
enableMissedCallNotifications = false,
sessid,
}: LoginWithTokenParams) {
const params: any = {
userVariables,
login_token,
reconnection,
'User-Agent': userAgent(enableMissedCallNotifications),
};
// Add from_push flag if this is a push-initiated connection (matching iOS SDK behavior)
if (fromPush) {
params.from_push = true; // Boolean value as shown in iOS SDK example
console.log('[Login] Adding from_push parameter to token login message');
}
// Always create loginParams since we always include attach_call
params.loginParams = {
attach_call: 'true', // iOS SDK uses true.description which converts to string
};
console.log('[Login] Adding attach_call parameter to token login message');
if (sessid) {
params.sessid = sessid;
console.log('[Login] Including existing sessid in token login params:', sessid);
}
return {
id: uuid(),
jsonrpc: '2.0',
method: 'login',
params,
};
}
export function isLoginSuccessResponse(response: unknown): response is LoginSuccessResponse {
if (!response) {
return false;
}
const temp = response as Partial<LoginSuccessResponse>;
return !!temp.result?.message && !!temp.result?.sessid && temp.result.message === 'logged in';
}