forked from VapiAI/client-sdk-web
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdaily-guards.ts
More file actions
81 lines (66 loc) · 2.41 KB
/
daily-guards.ts
File metadata and controls
81 lines (66 loc) · 2.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import type {
DailyCall,
DailyAdvancedConfig,
DailyFactoryOptions,
} from '@daily-co/daily-js';
export interface SafeDailyAdvancedConfig extends Omit<DailyAdvancedConfig, 'alwaysIncludeMicInPermissionPrompt'> {
alwaysIncludeMicInPermissionPrompt?: true; // Only allow true
}
export interface SafeDailyFactoryOptions extends Omit<DailyFactoryOptions, 'audioSource'> {
audioSource?: string | boolean | MediaStreamTrack;
}
export function createSafeDailyConfig(
config?: Pick<DailyAdvancedConfig, 'avoidEval' | 'alwaysIncludeMicInPermissionPrompt'>
): SafeDailyAdvancedConfig {
if (!config) return {};
const { alwaysIncludeMicInPermissionPrompt, ...rest } = config;
// Force true or remove the property entirely. This can cause Chrome 140+ issues
if (alwaysIncludeMicInPermissionPrompt === false) {
console.warn(
'[Vapi] alwaysIncludeMicInPermissionPrompt:false detected. ' +
'This can cause Chrome 140+ issues. Removing the property.'
);
return rest;
}
return config as SafeDailyAdvancedConfig;
}
export function safeSetLocalAudio(call: DailyCall | null, enabled: boolean): void {
if (!call) {
throw new Error('Call object is not available.');
}
// Never use forceDiscardTrack. This can cause Chrome 140+ issues
call.setLocalAudio(enabled);
}
export async function safeSetInputDevicesAsync(
call: DailyCall | null,
options: Parameters<DailyCall['setInputDevicesAsync']>[0]
): Promise<void> {
if (!call) {
throw new Error('Call object is not available.');
}
// Validate audioSource
if ('audioSource' in options && options.audioSource === false) {
console.warn(
'[Vapi] setInputDevicesAsync with audioSource:false detected. ' +
'This can cause Chrome 140+ issues. Using default device instead.'
);
const { audioSource, ...safeOptions } = options;
await call.setInputDevicesAsync(safeOptions);
return;
}
await call.setInputDevicesAsync(options);
}
export function createSafeDailyFactoryOptions(
options?: Pick<DailyFactoryOptions, 'audioSource' | 'startAudioOff'>
): SafeDailyFactoryOptions {
if (!options) return {};
// Ensure audioSource is never false
if (options.audioSource === false) {
console.warn(
'[Vapi] audioSource:false detected in factory options. ' +
'This can cause Chrome 140+ issues. Defaulting to true.'
);
return { ...options, audioSource: true };
}
return options;
}