@daily-co/daily-js
Version:
Please check our [our documentation site](https://docs.daily.co/) to get started. If you're building a web app with our `daily-js` front-end JavaScript library, you may be particularly interested in:
1,780 lines (1,603 loc) • 72.1 kB
TypeScript
// Type definitions for daily-js
// Project: https://github.com/daily-co/daily-js
// Definitions by: Paul Kompfner <https://github.com/kompfner>
/**
* --- BROWSER-SPECIFIC TYPES ---
*/
/// <reference lib="dom" />
/**
* --- DAILY-JS API ---
*/
export type DailyLanguage =
| 'da'
| 'de'
| 'en'
| 'es'
| 'fi'
| 'fr'
| 'it'
| 'jp'
| 'ka'
| 'nl'
| 'no'
| 'pl'
| 'pt'
| 'pt-BR'
| 'ru'
| 'sv'
| 'tr';
export type DailyLanguageSetting = DailyLanguage | 'user';
export type DailyEvent =
| 'loading'
| 'load-attempt-failed'
| 'loaded'
| 'started-camera'
| 'camera-error'
| 'joining-meeting'
| 'joined-meeting'
| 'left-meeting'
| 'call-instance-destroyed'
| 'participant-joined'
| 'participant-updated'
| 'participant-left'
| 'participant-counts-updated'
| 'track-started'
| 'track-stopped'
| 'recording-started'
| 'recording-stopped'
| 'recording-stats'
| 'recording-error'
| 'recording-upload-completed'
| 'recording-data'
| 'transcription-started'
| 'transcription-stopped'
| 'transcription-error'
| 'app-message'
| 'transcription-message'
| 'local-screen-share-started'
| 'local-screen-share-stopped'
| 'local-screen-share-canceled'
| 'active-speaker-change'
| 'active-speaker-mode-change'
| 'network-quality-change'
| 'network-connection'
| 'test-completed'
| 'cpu-load-change'
| 'face-counts-updated'
| 'fullscreen'
| 'exited-fullscreen'
| 'error'
| 'nonfatal-error'
| 'click'
| 'mousedown'
| 'mouseup'
| 'mouseover'
| 'mousemove'
| 'touchstart'
| 'touchmove'
| 'touchend'
| 'live-streaming-started'
| 'live-streaming-updated'
| 'live-streaming-stopped'
| 'live-streaming-error'
| 'lang-updated'
| 'remote-media-player-started'
| 'remote-media-player-stopped'
| 'remote-media-player-updated'
| 'access-state-updated'
| 'meeting-session-updated'
| 'meeting-session-summary-updated'
| 'meeting-session-state-updated'
| 'waiting-participant-added'
| 'waiting-participant-updated'
| 'waiting-participant-removed'
| 'theme-updated'
| 'available-devices-updated'
| 'receive-settings-updated'
| 'input-settings-updated'
| 'send-settings-updated'
| 'local-audio-level'
| 'remote-participants-audio-level'
| 'show-local-video-changed'
| 'selected-devices-updated'
| 'custom-button-click'
| 'sidebar-view-changed'
| 'dialin-connected'
| 'dialin-ready'
| 'dialin-error'
| 'dialin-stopped'
| 'dialin-warning'
| 'dialout-connected'
| 'dialout-answered'
| 'dialout-error'
| 'dialout-stopped'
| 'dialout-warning';
export type DailyMeetingState =
| 'new'
| 'loading'
| 'loaded'
| 'joining-meeting'
| 'joined-meeting'
| 'left-meeting'
| 'error';
export type DailyCameraErrorType =
| 'cam-in-use'
| 'mic-in-use'
| 'cam-mic-in-use'
| 'permissions'
| 'undefined-mediadevices'
| 'not-found'
| 'constraints'
| 'unknown';
export type DailyFatalErrorType =
| 'ejected'
| 'nbf-room'
| 'nbf-token'
| 'exp-room'
| 'exp-token'
| 'no-room'
| 'meeting-full'
| 'end-of-life'
| 'not-allowed'
| 'connection-error';
export type DailyNonFatalErrorType =
| 'input-settings-error'
| 'screen-share-error'
| 'local-audio-level-observer-error'
| 'video-processor-error'
| 'video-processor-warning'
| 'audio-processor-error'
| 'remote-media-player-error'
| 'live-streaming-warning'
| 'meeting-session-data-error';
export type DailyNetworkTopology = 'sfu' | 'peer';
export interface DailyParticipantsObject {
local: DailyParticipant;
[id: string]: DailyParticipant;
}
export interface DailyBrowserInfo {
supported: boolean;
mobile: boolean;
name: string;
version: string;
supportsFullscreen: boolean;
supportsScreenShare: boolean;
supportsSfu: boolean;
supportsVideoProcessing: boolean;
supportsAudioProcessing: boolean;
}
export interface DailyThemeColors {
/**
* Main theme color. Used for primary actions and keyboard focus.
*/
accent?: string;
/**
* Text color rendered on `accent`.
*/
accentText?: string;
/**
* Background color.
*/
background?: string;
/**
* Background color for highlighted elements.
*/
backgroundAccent?: string;
/**
* Default text color, as rendered on `background` or `backgroundAccent`.
*/
baseText?: string;
/**
* Default border color for bordered elements.
*/
border?: string;
/**
* Background color for the call main area.
*/
mainAreaBg?: string;
/**
* Background color for video tiles.
*/
mainAreaBgAccent?: string;
/**
* Text color for text rendered inside the call main area, e.g. names.
*/
mainAreaText?: string;
/**
* Text color for supportive, less emphasized, text.
*/
supportiveText?: string;
}
export type DailyTheme = {
colors: DailyThemeColors;
};
export type DailyThemeConfig =
| DailyTheme
| {
light: DailyTheme;
dark: DailyTheme;
};
export interface DailyGridLayoutConfig {
maxTilesPerPage?: number;
minTilesPerPage?: number;
}
export interface DailyLayoutConfig {
grid?: DailyGridLayoutConfig;
}
export type DailyCustomTrayButtonVisualState =
| 'default'
| 'sidebar-open'
| 'active';
export interface DailyCustomTrayButton {
iconPath: string;
iconPathDarkMode?: string;
label: string;
tooltip: string;
visualState?: DailyCustomTrayButtonVisualState;
}
export interface DailyCustomTrayButtons {
[id: string]: DailyCustomTrayButton;
}
export interface DailyCustomIntegration {
/**
* Specifies the feature policy for the iframe.
* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-allow
*/
allow?: HTMLIFrameElement['allow'];
/**
* Specifies who in the call is able to start and stop this integration.
* - '*' means all participants can start and stop this integration
* - 'owners' means only meeting owners can start and stop
* - string[] defines the list of participants identified by their session_id
* Default: '*'
*/
controlledBy?: '*' | 'owners' | string[];
/**
* Specifies the [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) for the iframe.
* Please check browser support before using this property.
* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-csp
* https://caniuse.com/mdn-api_htmliframeelement_csp
*/
csp?: string;
/**
* Specifies a publicly available URL to an icon image file associated with the integration.
*/
iconURL?: string;
/**
* Used to render the integration's name in Prebuilt.
*/
label: string;
/**
* By default integrations will be loaded lazily.
*/
loading?: 'eager' | 'lazy';
/**
* Daily supports two different types of custom integrations:
* - Main call area integrations
* - Sidebar integrations
*/
location: 'main' | 'sidebar';
/**
* A unique name for the iframe.
* For more info see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-name
*/
name?: HTMLIFrameElement['name'];
/**
* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-referrerpolicy
*/
referrerPolicy?: HTMLIFrameElement['referrerPolicy'];
/**
* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-sandbox
*/
sandbox?: string;
/**
* The iframe's source URL.
* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-src
*/
src?: HTMLIFrameElement['src'];
/**
* Allows to integrate inline HTML in an iframe.
* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-srcdoc
* https://caniuse.com/iframe-srcdoc
*/
srcdoc?: HTMLIFrameElement['srcdoc'];
/**
* When configured, shares the integration's state with other participants in the call:
* - true will share with all other participants
* - false won't share
* - 'owners' will share with owners only
* - string[] will share with participants with given list of session ids
*
* When the integration is started, it will be started for other participants, too.
* When it's stopped, it will stop for all participants.
*/
shared?: string[] | 'owners' | boolean;
}
export interface DailyCustomIntegrations {
[id: string]: DailyCustomIntegration;
}
export interface DailyCallOptions {
url?: string;
token?: string;
lang?: DailyLanguageSetting;
activeSpeakerMode?: boolean;
showLeaveButton?: boolean;
showParticipantsBar?: boolean;
showLocalVideo?: boolean;
showFullscreenButton?: boolean;
showUserNameChangeUI?: boolean;
iframeStyle?: Partial<CSSStyleDeclaration>;
customIntegrations?: DailyCustomIntegrations;
customLayout?: boolean;
customTrayButtons?: DailyCustomTrayButtons;
bodyClass?: string;
cssFile?: string;
cssText?: string;
dailyConfig?: DailyAdvancedConfig;
subscribeToTracksAutomatically?: boolean;
videoSource?: string | MediaStreamTrack | boolean;
audioSource?: string | MediaStreamTrack | boolean;
theme?: DailyThemeConfig;
layoutConfig?: DailyLayoutConfig;
receiveSettings?: DailyReceiveSettings;
sendSettings?: DailySendSettings;
inputSettings?: DailyInputSettings;
userName?: string;
userData?: unknown;
startVideoOff?: boolean;
startAudioOff?: boolean;
}
export interface StartCustomTrackOptions {
track: MediaStreamTrack;
mode?: 'music' | 'speech' | DailyMicAudioModeSettings | undefined;
trackName?: string;
}
export interface DailyLoadOptions extends DailyCallOptions {
baseUrl?: string;
}
export interface DailyFactoryOptions extends DailyCallOptions {
// only available at constructor time
allowMultipleCallInstances?: boolean;
strictMode?: boolean;
}
export interface DailyMicAudioModeSettings {
bitrate?: number;
stereo?: boolean;
}
export interface DailyIceConfig {
iceServers?: RTCIceServer[];
placement?: 'front' | 'back' | 'replace';
iceTransportPolicy?: RTCIceTransportPolicy;
}
export interface DailyAdvancedConfig {
/**
* @deprecated This property will be removed. Instead, use sendSettings, which is found in DailyCallOptions.
*/
camSimulcastEncodings?: any[];
/**
* @deprecated This property will be removed. Use the method updateSendSettings instead.
*/
disableSimulcast?: boolean;
keepCamIndicatorLightOn?: boolean;
/**
* @deprecated This property will be removed. All calls use v2CamAndMic.
*/
v2CamAndMic?: boolean;
/**
* @deprecated This property will be removed. It has no affect.
*/
fastConnect?: boolean;
h264Profile?: string;
micAudioMode?: 'music' | 'speech' | DailyMicAudioModeSettings;
noAutoDefaultDeviceChange?: boolean;
preferH264?: boolean;
preferH264ForCam?: boolean;
preferH264ForScreenSharing?: boolean;
/**
* @deprecated This property will be removed. Instead, use sendSettings, which
* is found in DailyCallOptions.
*/
screenSimulcastEncodings?: any[];
useDevicePreferenceCookies?: boolean;
/**
* @deprecated This property will be removed. Instead, use inputSettings,
* which is found in DailyCallOptions.
*/
userMediaAudioConstraints?: MediaTrackConstraints;
/**
* @deprecated This property will be removed. Instead, use inputSettings,
* which is found in DailyCallOptions.
*/
userMediaVideoConstraints?: MediaTrackConstraints;
avoidEval?: boolean;
callObjectBundleUrlOverride?: string;
alwaysIncludeMicInPermissionPrompt?: boolean;
alwaysIncludeCamInPermissionPrompt?: boolean;
enableIndependentDevicePermissionPrompts?: boolean;
proxyUrl?: string;
iceConfig?: DailyIceConfig;
useLegacyVideoProcessor?: boolean;
}
export interface DailyTrackState {
subscribed: DailyTrackSubscriptionState;
state:
| 'blocked'
| 'off'
| 'sendable'
| 'loading'
| 'interrupted'
| 'playable';
blocked?: {
byDeviceMissing?: boolean;
byDeviceInUse?: boolean;
byPermissions?: boolean;
};
off?: {
byUser?: boolean;
byRemoteRequest?: boolean;
byBandwidth?: boolean;
byCanSendPermission?: boolean;
byServerLimit?: boolean;
};
// guaranteed-playable reference to the track
// (it's only present when state === 'playable')
track?: MediaStreamTrack;
// not-guaranteed-playable reference to the track
// (it may be present when state !== 'playable')
// useful, for instance, for avoiding Safari's
// remote-track-unmute-in-background-tab bug
// (see https://github.com/daily-demos/call-object-react/blob/c81b21262dead2aacbd5a2f534d0fee8530acfe4/src/components/Tile/Tile.js#L53-L60)
persistentTrack?: MediaStreamTrack;
}
export type DailyParticipantPermissionsCanSendValues =
| 'video'
| 'audio'
| 'screenVideo'
| 'screenAudio'
| 'customVideo'
| 'customAudio';
export type DailyParticipantPermissionsCanAdminValues =
| 'participants'
| 'streaming'
| 'transcription';
export type DailyParticipantTypeValues =
| 'remote-media-player'
| 'sip-dial-in'
| 'sip-dial-out'
| 'pstn-dial-in'
| 'pstn-dial-out'
| 'unknown';
export interface DailyParticipantCanReceiveMediaPermissionFull {
video: boolean;
audio: boolean;
screenVideo: boolean;
screenAudio: boolean;
customVideo: { '*': boolean; [key: string]: boolean };
customAudio: { '*': boolean; [key: string]: boolean };
}
export interface DailyParticipantCanReceiveMediaPermissionPartial {
video?: boolean;
audio?: boolean;
screenVideo?: boolean;
screenAudio?: boolean;
customVideo?: { [key: string]: boolean };
customAudio?: { [key: string]: boolean };
}
export interface DailyParticipantCanReceivePermission {
base: DailyParticipantCanReceiveMediaPermissionFull | boolean;
byUserId?: {
[key: string]: DailyParticipantCanReceiveMediaPermissionPartial | boolean;
};
byParticipantId?: {
[key: string]: DailyParticipantCanReceiveMediaPermissionPartial | boolean;
};
}
export interface DailyParticipantPermissions {
hasPresence: boolean;
canSend: Set<DailyParticipantPermissionsCanSendValues> | boolean;
canReceive: DailyParticipantCanReceivePermission;
canAdmin: Set<DailyParticipantPermissionsCanAdminValues> | boolean;
}
export type DailyParticipantPermissionsUpdate = {
hasPresence?: boolean;
canSend?:
| Array<DailyParticipantPermissionsCanSendValues>
| Set<DailyParticipantPermissionsCanSendValues>
| boolean;
canReceive?: Partial<DailyParticipantCanReceivePermission>;
canAdmin?:
| Array<DailyParticipantPermissionsCanAdminValues>
| Set<DailyParticipantPermissionsCanAdminValues>
| boolean;
};
export interface DailyParticipantTracks {
audio: DailyTrackState;
video: DailyTrackState;
screenAudio: DailyTrackState;
screenVideo: DailyTrackState;
rmpAudio?: DailyTrackState;
rmpVideo?: DailyTrackState;
[customTrackKey: string]: DailyTrackState | undefined;
}
export interface DailyParticipant {
/**
* @deprecated
* This property will be removed. Use tracks.audio.persistentTrack instead.
*/
audioTrack?: MediaStreamTrack | false;
/**
* @deprecated
* This property will be removed. Use tracks.video.persistentTrack instead.
*/
videoTrack?: MediaStreamTrack | false;
/**
* @deprecated
* This property will be removed.
* Use tracks.screenVideo.persistentTrack instead.
*/
screenVideoTrack?: MediaStreamTrack | false;
/**
* @deprecated
* This property will be removed.
* Use tracks.screenAudio.persistentTrack instead.
*/
screenAudioTrack?: MediaStreamTrack | false;
/**
* @deprecated This property will be removed. Use tracks.audio.state instead.
*/
audio: boolean;
/**
* @deprecated This property will be removed. Use tracks.video.state instead.
*/
video: boolean;
/**
* @deprecated
* This property will be removed. Use tracks.screenVideo.state instead.
*/
screen: boolean;
// track state
tracks: DailyParticipantTracks;
// user/session info
user_id: string;
user_name: string;
userData?: unknown;
session_id: string;
joined_at?: Date;
networkQualityState?: 'good' | 'warning' | 'bad' | 'unknown';
/**
* @deprecated This property is being replaced by networkState.
*/
networkThreshold?: 'good' | 'low' | 'very-low';
will_eject_at: Date;
local: boolean;
owner: boolean;
permissions: DailyParticipantPermissions;
record: boolean;
participantType?: DailyParticipantTypeValues;
// video element info (iframe-based calls using standard UI only)
/**
* @deprecated
* This property will be removed. Refer to tracks.video instead.
*/
cam_info: {} | DailyVideoElementInfo;
/**
* @deprecated
* This property will be removed. Refer to tracks.screenVideo instead.
*/
screen_info: {} | DailyVideoElementInfo;
}
export interface DailyParticipantCounts {
present: number;
hidden: number;
}
export interface DailyWaitingParticipant {
id: string;
name: string;
awaitingAccess: SpecifiedDailyAccess;
}
export type DailyTrackSubscriptionState = 'staged' | boolean;
export type DailyCustomTrackSubscriptionState =
| DailyTrackSubscriptionState
| { [name: string]: DailyTrackSubscriptionState };
export type DailyTrackSubscriptionOptions =
| DailyTrackSubscriptionState
| 'avatar'
| {
audio?: DailyTrackSubscriptionState;
video?: DailyTrackSubscriptionState;
screenVideo?: DailyTrackSubscriptionState;
screenAudio?: DailyTrackSubscriptionState;
custom?: DailyCustomTrackSubscriptionState;
};
export interface DailyParticipantUpdateOptions {
setAudio?: boolean;
setVideo?: boolean;
setScreenShare?: false;
setSubscribedTracks?: DailyTrackSubscriptionOptions;
eject?: true;
updatePermissions?: DailyParticipantPermissionsUpdate;
styles?: DailyParticipantCss;
}
export interface DailyWaitingParticipantUpdateOptions {
grantRequestedAccess?: boolean;
}
export interface DailyParticipantCss {
cam?: DailyParticipantStreamCss;
screen?: DailyParticipantStreamCss;
}
export interface DailyParticipantStreamCss {
div?: Partial<CSSStyleDeclaration>;
overlay?: Partial<CSSStyleDeclaration>;
video?: Partial<CSSStyleDeclaration>;
}
/**
* @deprecated
* All properties will be removed as cam_info and screen_info are also
* deprecated. Use the participants() object's tracks property to retrieve track
* information instead.
* e.g. call.participants()['participant-id'].tracks.video.persistentTrack.getSettings()
*/
export interface DailyVideoElementInfo {
width: number;
height: number;
left: number;
top: number;
video_width: number;
video_height: number;
}
/**
* DailyDeviceInfos reports the device information for the camera, mic, and
* speaker currently in use or -- if device not accessed yet -- expected.
* If the given device has not been specified and has not yet been acquired,
* the object will be empty ({}). The object will also be empty if a custom
* track has been provided.
*/
export interface DailyDeviceInfos {
camera: {} | DailyMediaDeviceInfo;
mic: {} | MediaDeviceInfo;
speaker: {} | MediaDeviceInfo;
}
/**
* @deprecated
* Almost all the properties in this type were just used by Electron.
* And the mediaStream can be replaced to use custom tracks.
*/
export interface DailyScreenCaptureOptions {
/**
* @deprecated This property will be removed. It is only used for Electron.
*/
audio?: boolean;
/**
* @deprecated This property will be removed. It is only used for Electron.
*/
maxWidth?: number;
/**
* @deprecated This property will be removed. It is only used for Electron.
*/
maxHeight?: number;
/**
* @deprecated This property will be removed. It is only used for Electron.
*/
chromeMediaSourceId?: string;
/**
* @deprecated
* This property will be removed.
* It is recommended to use our custom tracks API.
*/
mediaStream?: MediaStream;
}
// More details about all the possible options
// https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia
export interface DailyDisplayMediaStreamOptions {
audio?: boolean | MediaTrackConstraints;
video?: boolean | MediaTrackConstraints;
selfBrowserSurface?: 'include' | 'exclude';
surfaceSwitching?: 'include' | 'exclude';
systemAudio?: 'include' | 'exclude';
}
export interface DailyDisplayMediaStreamOptionsElectron {
audio?: boolean;
video: {
maxWidth?: number;
maxHeight?: number;
};
chromeMediaSourceId?: string;
}
export interface DailyStartScreenShare {
displayMediaOptions?:
| DailyDisplayMediaStreamOptions
| DailyDisplayMediaStreamOptionsElectron;
screenVideoSendSettings?:
| DailyVideoSendSettings
| DailyScreenVideoSendSettingsPreset;
}
export interface DailyStartScreenShareFromStream {
mediaStream: MediaStream;
screenVideoSendSettings?:
| DailyVideoSendSettings
| DailyScreenVideoSendSettingsPreset;
}
export type DailyStartScreenShareOptions =
| DailyScreenCaptureOptions
| DailyStartScreenShare
| DailyStartScreenShareFromStream;
export type DailyQualityTestResult =
| 'good'
| 'bad'
| 'warning'
| 'aborted'
| 'failed';
export type DailyCallQualityTestResults =
| DailyCallQualityTestStats
| DailyCallQualityTestAborted
| DailyCallQualityTestFailure;
export type DailyP2PCallQualityTestResults =
| DailyP2PCallQualityTestStats
| DailyCallQualityTestAborted
| DailyCallQualityTestFailure;
export interface DailyCallQualityTestStats {
result: Extract<DailyQualityTestResult, 'good' | 'warning' | 'bad'>;
data: DailyCallQualityTestData;
secondsElapsed: number;
}
export interface DailyP2PCallQualityTestStats {
result: Extract<DailyQualityTestResult, 'good' | 'warning' | 'bad'>;
data: DailyP2PCallQualityTestData;
secondsElapsed: number;
}
export interface DailyCallQualityTestData {
maxRoundTripTime: number | null;
avgRoundTripTime: number | null;
avgSendPacketLoss: number | null;
avgAvailableOutgoingBitrate: number | null;
avgSendBitsPerSecond: number | null;
}
export interface DailyP2PCallQualityTestData {
maxRoundTripTime: number | null;
avgRoundTripTime: number | null;
avgRecvPacketLoss: number | null;
avgAvailableOutgoingBitrate: number | null;
avgSendBitsPerSecond: number | null;
avgRecvBitsPerSecond: number | null;
}
export interface DailyCallQualityTestAborted {
result: Extract<DailyQualityTestResult, 'aborted'>;
secondsElapsed: number;
}
export interface DailyCallQualityTestFailure {
result: Extract<DailyQualityTestResult, 'failed'>;
errorMsg: string;
error?: DailyFatalErrorObject<DailyFatalErrorType>;
secondsElapsed: number;
}
export interface DailyConnectionQualityTestData {
// TODO: New TestPeerToPeerCallQuality() should return DailyCallQualityTestData
maxRTT: number | null;
packetLoss: number | null;
}
export interface DailyConnectionQualityTestStats {
result: DailyQualityTestResult;
data: DailyConnectionQualityTestData;
secondsElapsed: number;
}
export interface DailyWebsocketConnectivityTestResults {
result: 'passed' | 'failed' | 'warning' | 'aborted';
abortedRegions: string[];
failedRegions: string[];
passedRegions: string[];
}
export interface DailyNetworkConnectivityTestStats {
result: 'passed' | 'failed' | 'aborted';
}
export type networkStateReasons =
| 'sendPacketLoss'
| 'recvPacketLoss'
| 'roundTripTime'
| 'availableOutgoingBitrate';
export interface DailyNetworkStatsData {
latest: {
timestamp: number;
recvBitsPerSecond: number | null;
sendBitsPerSecond: number | null;
availableOutgoingBitrate: number | null;
networkRoundTripTime: number | null;
videoRecvBitsPerSecond: number | null;
videoSendBitsPerSecond: number | null;
audioRecvBitsPerSecond: number | null;
audioSendBitsPerSecond: number | null;
videoRecvPacketLoss: number | null;
videoSendPacketLoss: number | null;
audioRecvPacketLoss: number | null;
audioSendPacketLoss: number | null;
totalSendPacketLoss: number | null;
totalRecvPacketLoss: number | null;
videoRecvJitter: number | null;
videoSendJitter: number | null;
audioRecvJitter: number | null;
audioSendJitter: number | null;
};
worstVideoRecvPacketLoss: number;
worstVideoSendPacketLoss: number;
worstAudioRecvPacketLoss: number;
worstAudioSendPacketLoss: number;
worstVideoRecvJitter: number;
worstVideoSendJitter: number;
worstAudioRecvJitter: number;
worstAudioSendJitter: number;
averageNetworkRoundTripTime: number;
}
export interface DailyNetworkStats {
networkState: 'good' | 'warning' | 'bad' | 'unknown';
networkStateReasons: networkStateReasons[];
stats: Record<string, never> | DailyNetworkStatsData;
/**
* @deprecated This property is being replaced by networkState.
*/
threshold: 'good' | 'low' | 'very-low';
/**
* @deprecated This property is being replaced by networkState.
*/
quality: number;
}
export interface DailyCpuLoadStats {
cpuLoadState: 'low' | 'high';
cpuLoadStateReason: 'encode' | 'decode' | 'scheduleDuration' | 'none'; // We are currently not using the Inter frame Delay to change the cpu load state
stats: {
latest: {
timestamp: number;
scheduleDuration: number;
frameEncodeTimeSec: number;
targetEncodeFrameRate: number;
targetDecodeFrameRate: number;
targetScheduleDuration: number;
cpuUsageBasedOnTargetEncode: number;
cpuUsageBasedOnGlobalDecode: number;
avgFrameDecodeTimeSec: number;
avgInterFrameDelayStandardDeviation: number;
totalReceivedVideoTracks: number;
cpuInboundVideoStats: {
trackId: string;
ssrc: number;
frameWidth: number;
frameHeight: number;
fps: number;
frameDecodeTimeSec: number;
interFrameDelayStandardDeviation: number;
cpuUsageBasedOnTargetDecode: number;
}[];
};
};
}
export interface DailySendSettings {
video?: DailyCamVideoSendSettings | DailyVideoSendSettingsPreset;
customVideoDefaults?: DailyVideoSendSettings | DailyVideoSendSettingsPreset;
screenVideo?: DailyVideoSendSettings | DailyScreenVideoSendSettingsPreset;
[customKey: string]:
| DailyVideoSendSettings
// TypeScript will prioritize the index signature over explicitly declared properties
// So unless I add it here, in order to use DailyCamVideoSendSettings I would need to
// use of a type assertion to inform TypeScript about the specific type of video.
// Like this:
// video: { allowAdaptiveLayers: true, } as DailyCamVideoSendSettings
| DailyCamVideoSendSettings
| DailyVideoSendSettingsPreset
| DailyScreenVideoSendSettingsPreset
| undefined;
}
export interface DailyParticipantsAudioLevel {
[participantId: string]: number;
}
export type DailyVideoSendSettingsPreset =
| 'default-video'
| 'bandwidth-optimized'
| 'bandwidth-and-quality-balanced'
| 'quality-optimized'
| 'adaptive-2-layers'
| 'adaptive-3-layers';
// Media Track Send Settings
export interface DailyVideoSendSettings {
maxQuality?: 'low' | 'medium' | 'high';
encodings?: {
low: RTCRtpEncodingParameters;
medium?: RTCRtpEncodingParameters;
high?: RTCRtpEncodingParameters;
};
}
export interface DailyCamVideoSendSettings extends DailyVideoSendSettings {
allowAdaptiveLayers?: boolean;
}
export type DailyScreenVideoSendSettingsPreset =
| 'default-screen-video'
| 'detail-optimized'
| 'motion-optimized'
| 'motion-and-detail-balanced';
export interface DailyPendingRoomInfo {
roomUrlPendingJoin: string;
}
export interface DailyRecordingsBucket {
allow_api_access: boolean;
allow_streaming_from_bucket: boolean;
assume_role_arn: string;
bucket_name: string;
bucket_region: string;
}
export interface DailyRoomInfo {
id: string;
name: string;
config: {
nbf?: number;
exp?: number;
max_participants?: number;
enable_screenshare?: boolean;
enable_advanced_chat?: boolean;
enable_breakout_rooms?: boolean;
enable_emoji_reactions?: boolean;
enable_chat?: boolean;
enable_shared_chat_history?: boolean;
enable_hand_raising?: boolean;
enable_knocking?: boolean;
enable_live_captions_ui?: boolean;
enable_network_ui?: boolean;
enable_noise_cancellation_ui?: boolean;
enable_people_ui?: boolean;
enable_pip_ui?: boolean;
enable_prejoin_ui?: boolean;
enable_video_processing_ui?: boolean;
experimental_optimize_large_calls?: boolean;
start_video_off?: boolean;
start_audio_off?: boolean;
owner_only_broadcast?: boolean;
audio_only?: boolean;
enable_recording?: string;
enable_dialin?: boolean;
enable_dialout?: boolean;
/**
* @deprecated This property will be removed.
* All calls are treated as autojoin.
*/
autojoin?: boolean;
eject_at_room_exp?: boolean;
eject_after_elapsed?: number;
lang?: '' | DailyLanguageSetting;
sfu_switchover?: number;
/**
* @deprecated This property will be removed.
* All calls use websocket signaling ('ws').
*/
signaling_impl?: string;
geo?: string;
recordings_bucket?: DailyRecordingsBucket | boolean;
};
domainConfig: {
hide_daily_branding?: boolean;
redirect_on_meeting_exit?: string;
hipaa?: boolean;
sfu_impl?: string;
signaling_impl?: string;
sfu_switchover?: number;
lang?: '' | DailyLanguageSetting;
max_api_rooms?: number;
webhook_meeting_end?: any;
max_live_streams?: number;
max_streaming_instances_per_room?: number;
enable_advanced_chat?: boolean;
enable_breakout_rooms?: boolean;
enable_emoji_reactions?: boolean;
enable_chat?: boolean;
enable_shared_chat_history?: boolean;
enable_hand_raising?: boolean;
enable_live_captions_ui?: boolean;
enable_network_ui?: boolean;
enable_noise_cancellation_ui?: boolean;
enable_people_ui?: boolean;
enable_pip_ui?: boolean;
enable_prejoin_ui?: boolean;
enable_transcription?: boolean;
enable_video_processing_ui?: boolean;
recordings_bucket?: DailyRecordingsBucket | boolean;
};
tokenConfig: {
eject_at_token_exp?: boolean;
eject_after_elapsed?: number;
nbf?: number;
exp?: number;
is_owner?: boolean;
user_name?: string;
user_id?: string;
enable_live_captions_ui?: boolean;
enable_prejoin_ui?: boolean;
enable_screenshare?: boolean;
start_video_off?: boolean;
start_audio_off?: boolean;
enable_recording?: string;
start_cloud_recording_opts?: DailyStreamingOptions<'recording', 'start'>;
enable_recording_ui?: boolean;
start_cloud_recording?: boolean;
close_tab_on_exit?: boolean;
redirect_on_meeting_exit?: string;
lang?: '' | DailyLanguageSetting;
};
dialInPIN?: string;
}
/**
* @deprecated
* This type will be removed. Use DailyMeetingSessionSummary instead.
*/
export interface DailyMeetingSession {
id: string;
}
export interface DailyMeetingSessionSummary {
id: string;
}
export interface DailyMeetingSessionState {
data: unknown;
topology: DailyNetworkTopology | 'none';
}
export type DailySessionDataMergeStrategy = 'replace' | 'shallow-merge';
export interface DailyVideoReceiveSettings {
layer?: number;
}
export interface DailySingleParticipantReceiveSettings {
video?: DailyVideoReceiveSettings;
screenVideo?: DailyVideoReceiveSettings;
[customKey: string]: DailyVideoReceiveSettings | undefined;
}
export interface DailyReceiveSettings {
[participantIdOrBase: string]: DailySingleParticipantReceiveSettings;
}
export interface DailyVideoReceiveSettingsUpdates {
layer?: number | 'inherit';
}
export interface DailySingleParticipantReceiveSettingsUpdates {
video?: DailyVideoReceiveSettingsUpdates | 'inherit';
screenVideo?: DailyVideoReceiveSettingsUpdates | 'inherit';
[customKey: string]: DailyVideoReceiveSettingsUpdates | 'inherit' | undefined;
}
export interface DailyReceiveSettingsUpdates {
[participantIdOrBaseOrStar: string]:
| DailySingleParticipantReceiveSettingsUpdates
| 'inherit';
}
export interface DailyInputSettings {
audio?: DailyInputAudioSettings;
video?: DailyInputVideoSettings;
}
export interface DailyCustomTrackSettings {
customTrack: MediaStreamTrack;
}
export interface DailyInputAudioSettings {
processor?: DailyInputAudioProcessorSettings;
settings?: MediaTrackConstraints | DailyCustomTrackSettings;
}
export interface DailyInputAudioProcessorSettings {
type: 'none' | 'noise-cancellation';
}
export interface DailyNoInputSettings {
type: 'none';
}
export interface DailyBackgroundBlurInputSettings {
type: 'background-blur';
config: {
strength?: number;
};
}
export interface DailyFaceDetectionInputSettings {
type: 'face-detection';
}
export interface DailyBackgroundImageInputSettings {
type: 'background-image';
config: {
url?: string;
source?: string | number | ArrayBuffer;
};
}
export type DailyInputVideoProcessorSettings =
| DailyNoInputSettings
| DailyBackgroundBlurInputSettings
| DailyBackgroundImageInputSettings
| DailyFaceDetectionInputSettings;
export interface DailyInputVideoSettings {
processor?: DailyInputVideoProcessorSettings;
settings?: MediaTrackConstraints | DailyCustomTrackSettings;
}
export type DailyEventObjectBase = {
action: DailyEvent;
callClientId: string;
};
export interface DailyEventObjectNoPayload extends DailyEventObjectBase {
action: Extract<
DailyEvent,
| 'loading'
| 'loaded'
| 'joining-meeting'
| 'left-meeting'
| 'call-instance-destroyed'
| 'recording-stats'
| 'recording-upload-completed'
| 'fullscreen'
| 'exited-fullscreen'
>;
}
export type DailyCameraError = {
msg: string;
};
export interface DailyCamPermissionsError extends DailyCameraError {
type: Extract<DailyCameraErrorType, 'permissions'>;
blockedBy: 'user' | 'browser';
blockedMedia: Array<'video' | 'audio'>;
}
export interface DailyCamDeviceNotFoundError extends DailyCameraError {
type: Extract<DailyCameraErrorType, 'not-found'>;
missingMedia: Array<'video' | 'audio'>;
}
export interface DailyCamConstraintsError extends DailyCameraError {
type: Extract<DailyCameraErrorType, 'constraints'>;
reason: 'invalid' | 'none-specified';
failedMedia: Array<'video' | 'audio'>;
}
export interface DailyCamInUseError extends DailyCameraError {
type: Extract<
DailyCameraErrorType,
'cam-in-use' | 'mic-in-use' | 'cam-mic-in-use'
>;
}
export interface DailyCamTypeError extends DailyCameraError {
type: Extract<DailyCameraErrorType, 'undefined-mediadevices'>;
}
export interface DailyCamUnknownError extends DailyCameraError {
type: Extract<DailyCameraErrorType, 'unknown'>;
}
export type DailyCameraErrorObject<T extends DailyCameraErrorType> =
T extends DailyCamPermissionsError['type']
? DailyCamPermissionsError
: T extends DailyCamDeviceNotFoundError['type']
? DailyCamDeviceNotFoundError
: T extends DailyCamConstraintsError['type']
? DailyCamConstraintsError
: T extends DailyCamInUseError['type']
? DailyCamInUseError
: T extends DailyCamTypeError['type']
? DailyCamTypeError
: T extends DailyCamUnknownError['type']
? DailyCamUnknownError
: any;
export interface DailyEventObjectCameraError extends DailyEventObjectBase {
action: Extract<DailyEvent, 'camera-error'>;
errorMsg: {
errorMsg: string;
audioOk?: boolean;
videoOk?: boolean;
};
error: DailyCameraErrorObject<DailyCameraErrorType>;
}
export type DailyFatalError = {
type: DailyFatalErrorType;
msg: string;
};
export interface DailyFatalConnectionError extends DailyFatalError {
type: Extract<DailyFatalErrorType, 'connection-error'>;
details: {
on:
| 'load'
| 'join'
| 'reconnect'
| 'move'
| 'rtc-connection'
| 'room-lookup';
sourceError: Record<string, any>;
uri?: string;
workerGroup?: string;
geoGroup?: string;
bundleUrl?: string;
};
}
export type DailyFatalErrorObject<T extends DailyFatalErrorType> =
T extends DailyFatalConnectionError['type'] ? DailyFatalConnectionError : any;
export interface DailyEventObjectFatalError extends DailyEventObjectBase {
action: Extract<DailyEvent, 'error'>;
errorMsg: string;
error?: DailyFatalErrorObject<DailyFatalErrorType>;
}
export interface DailyEventObjectNonFatalError extends DailyEventObjectBase {
action: Extract<DailyEvent, 'nonfatal-error'>;
type: DailyNonFatalErrorType;
errorMsg: string;
details?: any;
}
export interface DailyEventObjectGenericError extends DailyEventObjectBase {
action: Extract<DailyEvent, 'load-attempt-failed'>;
errorMsg: string;
}
export interface DailyEventObjectLiveStreamingError
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'live-streaming-error'>;
errorMsg: string;
instanceId?: string;
actionTraceId?: string;
}
export interface DailyEventObjectParticipants extends DailyEventObjectBase {
action: Extract<DailyEvent, 'joined-meeting'>;
participants: DailyParticipantsObject;
}
export interface DailyEventObjectParticipant extends DailyEventObjectBase {
action: Extract<DailyEvent, 'participant-joined' | 'participant-updated'>;
participant: DailyParticipant;
}
// only 1 reason reported for now. more to come.
export type DailyParticipantLeftReason = 'hidden';
export interface DailyEventObjectParticipantLeft extends DailyEventObjectBase {
action: Extract<DailyEvent, 'participant-left'>;
participant: DailyParticipant;
// reason undefined if participant left for any reason other than those listed
// in DailyParticipantLeftReason
reason?: DailyParticipantLeftReason;
}
export interface DailyEventObjectParticipantCounts
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'participant-counts-updated'>;
participantCounts: DailyParticipantCounts;
}
export interface DailyEventObjectWaitingParticipant
extends DailyEventObjectBase {
action: Extract<
DailyEvent,
| 'waiting-participant-added'
| 'waiting-participant-updated'
| 'waiting-participant-removed'
>;
participant: DailyWaitingParticipant;
}
export interface DailyEventObjectAccessState
extends DailyAccessState,
DailyEventObjectBase {
action: Extract<DailyEvent, 'access-state-updated'>;
}
export interface DailyEventObjectMeetingSessionSummaryUpdated
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'meeting-session-summary-updated'>;
meetingSession: DailyMeetingSessionSummary;
}
/**
* @deprecated
* This event will be removed. Use the
* DailyEventObjectMeetingSessionSummaryUpdated type instead.
*/
export interface DailyEventObjectMeetingSessionUpdated
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'meeting-session-updated'>;
meetingSession: DailyMeetingSession;
}
export interface DailyEventObjectMeetingSessionStateUpdated
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'meeting-session-state-updated'>;
meetingSessionState: DailyMeetingSessionState;
}
export interface DailyEventObjectTrack extends DailyEventObjectBase {
action: Extract<DailyEvent, 'track-started' | 'track-stopped'>;
participant: DailyParticipant | null; // null if participant left meeting
track: MediaStreamTrack;
type:
| 'video'
| 'audio'
| 'screenVideo'
| 'screenAudio'
| 'rmpVideo'
| 'rmpAudio'
| string; // string - for custom tracks
}
export interface DailyEventObjectRecordingStarted extends DailyEventObjectBase {
action: Extract<DailyEvent, 'recording-started'>;
local?: boolean;
recordingId?: string;
startedBy?: string;
type?: string;
layout?: DailyStreamingLayoutConfig<'start'>;
instanceId?: string;
}
export interface DailyEventObjectRecordingStopped extends DailyEventObjectBase {
action: Extract<DailyEvent, 'recording-stopped'>;
instanceId?: string;
}
export interface DailyEventObjectRecordingError extends DailyEventObjectBase {
action: Extract<DailyEvent, 'recording-error'>;
errorMsg: string;
instanceId?: string;
actionTraceId?: string;
}
export interface DailyEventObjectRecordingData extends DailyEventObjectBase {
action: Extract<DailyEvent, 'recording-data'>;
data: Uint8Array;
finished: boolean;
}
export interface DailyEventObjectMouseEvent extends DailyEventObjectBase {
action: Extract<
DailyEvent,
'click' | 'mousedown' | 'mouseup' | 'mouseover' | 'mousemove'
>;
event: {
type: string;
button: number;
x: number;
y: number;
pageX: number;
pageY: number;
screenX: number;
screenY: number;
offsetX: number;
offsetY: number;
altKey: boolean;
ctrlKey: boolean;
metaKey: boolean;
shiftKey: boolean;
};
participant: DailyParticipant;
}
export interface DailyEventObjectTouchEvent extends DailyEventObjectBase {
action: Extract<DailyEvent, 'touchstart' | 'touchmove' | 'touchend'>;
event: {
type: string;
altKey: boolean;
ctrlKey: boolean;
metaKey: boolean;
shiftKey: boolean;
};
participant: DailyParticipant;
}
export interface DailyEventObjectNetworkQualityEvent
extends DailyEventObjectBase,
DailyNetworkStats {
action: Extract<DailyEvent, 'network-quality-change'>;
}
export interface DailyEventObjectCpuLoadEvent extends DailyEventObjectBase {
action: Extract<DailyEvent, 'cpu-load-change'>;
cpuLoadState: 'low' | 'high';
cpuLoadStateReason: 'encode' | 'decode' | 'scheduleDuration' | 'none'; // We are currently not using the Inter frame Delay to change the cpu load state
}
export interface DailyEventObjectFaceCounts extends DailyEventObjectBase {
action: Extract<DailyEvent, 'face-counts-updated'>;
faceCounts: number;
}
export type NetworkConnectionType = 'signaling' | 'peer-to-peer' | 'sfu';
export interface DailyEventObjectNetworkConnectionEvent
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'network-connection'>;
type: NetworkConnectionType;
event: string;
session_id?: string;
sfu_id?: string;
}
export interface DailyEventObjectTestCompleted extends DailyEventObjectBase {
action: Extract<DailyEvent, 'test-completed'>;
test:
| 'call-quality'
| 'p2p-call-quality'
| 'network-connectivity'
| 'websocket-connectivity';
results:
| DailyCallQualityTestResults
| DailyP2PCallQualityTestResults
| DailyNetworkConnectivityTestStats
| DailyWebsocketConnectivityTestResults;
}
export interface DailyEventObjectActiveSpeakerChange
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'active-speaker-change'>;
activeSpeaker: {
peerId: string;
};
}
export interface DailyEventObjectActiveSpeakerModeChange
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'active-speaker-mode-change'>;
enabled: boolean;
}
export interface DailyEventObjectAppMessage<Data = any>
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'app-message'>;
data: Data;
fromId: string;
}
export interface DailyEventObjectTranscriptionMessage
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'transcription-message'>;
instanceId?: string;
trackType?: 'cam-audio' | 'screen-audio' | 'rmpAudio' | string;
participantId: string;
text: string;
timestamp: Date;
rawResponse: Record<string, any>;
}
export interface DailyEventObjectLangUpdated extends DailyEventObjectBase {
action: Extract<DailyEvent, 'lang-updated'>;
lang: DailyLanguage;
langSetting: DailyLanguageSetting;
}
export interface DailyEventObjectThemeUpdated extends DailyEventObjectBase {
action: Extract<DailyEvent, 'theme-updated'>;
theme: DailyThemeConfig;
}
export interface DailyEventObjectReceiveSettingsUpdated
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'receive-settings-updated'>;
receiveSettings: DailyReceiveSettings;
}
export interface DailyEventObjectAvailableDevicesUpdated
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'available-devices-updated'>;
availableDevices: MediaDeviceInfo[];
}
export interface DailyEventObjectShowLocalVideoChanged
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'show-local-video-changed'>;
show: boolean;
}
export interface DailyEventObjectInputSettingsUpdated
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'input-settings-updated'>;
inputSettings: DailyInputSettings;
}
export interface DailyEventObjectSendSettingsUpdated
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'send-settings-updated'>;
sendSettings: DailySendSettings;
}
export interface DailyEventObjectLocalAudioLevel extends DailyEventObjectBase {
action: Extract<DailyEvent, 'local-audio-level'>;
audioLevel: number;
}
export interface DailyEventObjectRemoteParticipantsAudioLevel
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'remote-participants-audio-level'>;
participantsAudioLevel: DailyParticipantsAudioLevel;
}
export interface DailyEventObjectLiveStreamingStarted
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'live-streaming-started'>;
layout?: DailyLiveStreamingLayoutConfig<'start'>;
instanceId?: string;
}
export interface DailyEventObjectLiveStreamingUpdated
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'live-streaming-updated'>;
endpoint?: DailyStreamingEndpoint;
state: DailyStreamingState;
instanceId?: string;
}
export interface DailyEventObjectLiveStreamingStopped
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'live-streaming-stopped'>;
instanceId?: string;
}
export interface DailyEventObjectTranscriptionStarted
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'transcription-started'>;
instanceId: string;
transcriptId?: string;
language: string;
model: string;
tier?: string;
profanity_filter?: boolean;
redact?: Array<string> | Array<boolean> | boolean;
endpointing?: number | boolean;
punctuate?: boolean;
extra?: Record<string, any>;
includeRawResponse?: boolean;
startedBy: string;
}
export interface DailyEventObjectTranscriptionStopped
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'transcription-stopped'>;
instanceId: string;
updatedBy: string;
}
export interface DailyEventObjectTranscriptionError
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'transcription-error'>;
instanceId: string;
errorMsg?: string;
}
export type DailyRemoteMediaPlayerStopReason =
| DailyRemoteMediaPlayerEOS
| DailyRemoteMediaPlayerPeerStopped;
export interface DailyEventObjectRemoteMediaPlayerUpdate
extends DailyEventObjectBase {
action: Extract<
DailyEvent,
'remote-media-player-started' | 'remote-media-player-updated'
>;
updatedBy: string;
session_id: string;
remoteMediaPlayerState: DailyRemoteMediaPlayerState;
}
export interface DailyEventObjectRemoteMediaPlayerStopped
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'remote-media-player-stopped'>;
session_id: string;
updatedBy: string;
reason: DailyRemoteMediaPlayerStopReason;
}
export interface DailyEventObjectCustomButtonClick
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'custom-button-click'>;
button_id: string;
}
export interface DailyEventObjectSelectedDevicesUpdated
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'selected-devices-updated'>;
devices: DailyDeviceInfos;
}
export interface DailyEventObjectSidebarViewChanged
extends DailyEventObjectBase {
action: Extract<DailyEvent, 'sidebar-view-changed'>;
view: SidebarView;
}
export interface DailyEventObjectDialinConnected extends DailyEventObjectBase {
action: Extract<DailyEvent, 'dialin-connected'>;
sipHeaders?: Record<string, any>;
sessionId: string;
sipFrom?: string;
actionTraceId?: string;
}
export interface DailyEventObjectDialinError extends DailyEventObjectBase {
action: Extract<DailyEvent, 'dialin-error'>;
errorMsg: string;
sessionId: string;
actionTraceId?: string;
}
export interface DailyEventObjectDialinStopped extends DailyEventObjectBase {
action: Extract<DailyEvent, 'dialin-stopped'>;
sipHeaders?: Record<string, any>;
sipFrom?: string;
sessionId: string;
actionTraceId?: string;
}
export interface DailyEventObjectDialinWarning extends DailyEventObjectBase {
action: Extract<DailyEvent, 'dialin-warning'>;
errorMsg: string;
sessionId: string;
actionTraceId?: string;
}
export interface DailyEventObjectDialOutConnected extends DailyEventObjectBase {
action: Extract<DailyEvent, 'dialout-connected'>;
sessionId?: string;
userId?: string;
actionTraceId?: string;
}
export interface DailyEventObjectDialOutAnswered extends DailyEventObjectBase {
action: Extract<DailyEvent, 'dialout-answered'>;
sessionId?: string;
userId?: string;
actionTraceId?: string;
}
export interface DailyEventObjectDialOutError extends DailyEventObjectBase {
action: Extract<DailyEvent, 'dialout-error'>;
errorMsg: string;
sessionId?: string;
userId?: string;
actionTraceId?: string;
}
export interface DailyEventObjectDialOutStopped extends DailyEventObjectBase {
action: Extract<DailyEvent, 'dialout-stopped'>;
sessionId?: string;
userId?: string;
actionTraceId?: string;
}
export interface DailyEventObjectDialOutWarning extends DailyEventObjectBase {
action: Extract<DailyEvent, 'dialout-warning'>;
errorMsg: string;
sessionId?: string;
actionTraceId?: string;
}
export type DailyEventObject<T extends DailyEvent = any> =
T extends DailyEventObjectAppMessage['action']
? DailyEventObjectAppMessage
: T extends DailyEventObjectNoPayload['action']
? DailyEventObjectNoPayload
: T extends DailyEventObjectCameraError['action']
? DailyEventObjectCameraError
: T extends DailyEventObjectFatalError['action']
? DailyEventObjectFatalError
: T extends DailyEventObjectNonFatalError['action']
? DailyEventObjectNonFatalError
: T extends DailyEventObjectGenericError['action']
? Dail