///
import { LogLevel } from '../constants/log';
import { IResolve } from './common.interfaces';
import { IWebexAppsUserState } from './user.interfaces';
/**
* Type definition for {@link Application.application | app.application.state}
*
* @public
*/
export interface IWebexAppsApplicationState {
/**
* The given device form factor.
*
* One of "DESKTOP", "MOBILE", "BROWSER"
* @readonly
*/
deviceType: string | null;
/**
* Display context (frame) in which the 3rd party app is being rendered.
*
* One of the following strings "MEETING_SIDEBAR", "MEETING_STANDALONE_WINDOW", "MEETING_MAINVIEW", or "SPACETAB".
*
* Default is "MEETING_SIDEBAR".
* @readonly
*
*/
displayContext: string | null;
/**
* Indicates if real Ids are being used or derived ids are avaliable. This is based on the ControlHub setting for the given app.
* @readonly
*
*/
isPrivateDataAvailable: boolean | null;
/**
* Indicates the capabilities of the given device.
*
* > **Note** - Currently not in use and subject to change.
*
* An empty string array is returned.
*
* @readonly
*/
capabilities: string[] | null;
/**
* Indicates if the embedded app’s link (specified using the setShareUrl method) has been added to the meeting or space by the user.
* @readonly
*/
isShared: boolean | null;
/**
* Indicates the given theme of the given meetings client, either Theme.LIGHT, or Theme.DARK.
* @readonly
*/
theme: string | null;
/**
* Indicates the given language being used by the given meetings client.
*
* Example values: "en-US", "da-DK", etc.
* @readonly
*/
language: string | null;
/**
* Indicates the SDK version the given meetings client implements.
*
* Example values: "1.x" for 41.6 to 41.9.
* @readonly
*/
sdkVersion: string | null;
/**
* General information about the host. This format is subject to change and should only be used for diagnostic purposes.
* @readonly
*/
about: string | null;
/**
* Indicates the version of the embedded app sdk.
* @readonly
*/
embeddedSdkVersion: string | null;
/**
* Indicates the application's current view state, IN_FOCUS or OUT_OF_FOCUS.
* @readonly
*/
viewState: string | null;
/**
*
* This holds information about the user. The information obtained will be based on PII restrictions
*
* {@link IWebexAppsUserState}
*
* @readonly
*/
user: IWebexAppsUserState | null;
}
export type IOnReadyValidator = NodeJS.Timeout | null;
export interface IWebexAppsApplication {
isReady: boolean;
onReadyResolvers: IResolve[];
onReadyValidator: IOnReadyValidator;
states: IWebexAppsApplicationState;
initialze: () => void;
updateStates: (newStates: IWebexAppsApplicationState, eventName?: string) => void;
sendPerformanceReport: (report: object) => Promise;
setShareUrl: (internalUrl: string, externalUrl: string, title: string, optional?: object) => Promise;
clearShareUrl: () => Promise;
initiateSystemBrowserOAuth: (authenticateUrl: string) => Promise;
isSdkSupported: (version: string) => boolean;
onReady: () => Promise;
openUrlInSystemBrowser: (url: string) => Promise;
subscribeForEvent: (eventName: string) => Promise;
getSelectedAudioDevices: (audioDevices: string) => Promise