UNPKG

@zoom/rivet

Version:

Zoom Rivet is a comprehensive toolkit built to help developers quickly integrate and manage server-side applications within the Zoom ecosystem. This tool currently supports Node.js, offering core functionalities like authentication, API wrappers, and even

1,510 lines (1,494 loc) 455 kB
import { LambdaFunctionURLResult, LambdaFunctionURLHandler } from 'aws-lambda'; import { AxiosResponse } from 'axios'; import { Server } from 'node:http'; import { ServerOptions } from 'node:https'; type AllPropsOptional<T, True, False> = Exclude<{ [P in keyof T]: undefined extends T[P] ? True : False; }[keyof T], undefined> extends True ? True : False; type Constructor<T> = new (...args: any[]) => T; type MaybeArray<T> = T | T[]; type MaybePromise<T> = T | Promise<T>; type StringIndexed<V = any> = Record<string, V>; /** * {@link StateStore} defines methods for generating and verifying OAuth state. * * This interface is implemented internally for the default state store; however, * it can also be implemented and passed to an OAuth client as well. */ interface StateStore { /** * Generate a new state string, which is directly appended to the OAuth `state` parameter. */ generateState(): MaybePromise<string>; /** * Verify that the state received during OAuth callback is valid and not forged. * * If state verification fails, {@link OAuthStateVerificationFailedError} should be thrown. * * @param state The state parameter that was received during OAuth callback */ verifyState(state: string): MaybePromise<void>; } /** * Guard if an object implements the {@link StateStore} interface — most notably, * `generateState()` and `verifyState(state: string)`. */ declare const isStateStore: (obj: unknown) => obj is StateStore; interface TokenStore<Token> { getLatestToken(): MaybePromise<Token | null | undefined>; storeToken(token: Token): MaybePromise<void>; } interface RivetError<ErrorCode extends string = string> extends Error { readonly errorCode: ErrorCode; } declare const isCoreError: <K extends "ApiResponseError" | "AwsReceiverRequestError" | "ClientCredentialsRawResponseError" | "S2SRawResponseError" | "CommonHttpRequestError" | "ReceiverInconsistentStateError" | "ReceiverOAuthFlowError" | "HTTPReceiverConstructionError" | "HTTPReceiverPortNotNumberError" | "HTTPReceiverRequestError" | "OAuthInstallerNotInitializedError" | "OAuthTokenDoesNotExistError" | "OAuthTokenFetchFailedError" | "OAuthTokenRawResponseError" | "OAuthTokenRefreshFailedError" | "OAuthStateVerificationFailedError" | "ProductClientConstructionError">(obj: unknown, key?: K | undefined) => obj is RivetError<{ readonly ApiResponseError: "zoom_rivet_api_response_error"; readonly AwsReceiverRequestError: "zoom_rivet_aws_receiver_request_error"; readonly ClientCredentialsRawResponseError: "zoom_rivet_client_credentials_raw_response_error"; readonly S2SRawResponseError: "zoom_rivet_s2s_raw_response_error"; readonly CommonHttpRequestError: "zoom_rivet_common_http_request_error"; readonly ReceiverInconsistentStateError: "zoom_rivet_receiver_inconsistent_state_error"; readonly ReceiverOAuthFlowError: "zoom_rivet_receiver_oauth_flow_error"; readonly HTTPReceiverConstructionError: "zoom_rivet_http_receiver_construction_error"; readonly HTTPReceiverPortNotNumberError: "zoom_rivet_http_receiver_port_not_number_error"; readonly HTTPReceiverRequestError: "zoom_rivet_http_receiver_request_error"; readonly OAuthInstallerNotInitializedError: "zoom_rivet_oauth_installer_not_initialized_error"; readonly OAuthTokenDoesNotExistError: "zoom_rivet_oauth_does_not_exist_error"; readonly OAuthTokenFetchFailedError: "zoom_rivet_oauth_token_fetch_failed_error"; readonly OAuthTokenRawResponseError: "zoom_rivet_oauth_token_raw_response_error"; readonly OAuthTokenRefreshFailedError: "zoom_rivet_oauth_token_refresh_failed_error"; readonly OAuthStateVerificationFailedError: "zoom_rivet_oauth_state_verification_failed_error"; readonly ProductClientConstructionError: "zoom_rivet_product_client_construction_error"; }[K]>; declare const ApiResponseError: Constructor<Error>; declare const AwsReceiverRequestError: Constructor<Error>; declare const ClientCredentialsRawResponseError: Constructor<Error>; declare const S2SRawResponseError: Constructor<Error>; declare const CommonHttpRequestError: Constructor<Error>; declare const ReceiverInconsistentStateError: Constructor<Error>; declare const ReceiverOAuthFlowError: Constructor<Error>; declare const HTTPReceiverConstructionError: Constructor<Error>; declare const HTTPReceiverPortNotNumberError: Constructor<Error>; declare const HTTPReceiverRequestError: Constructor<Error>; declare const OAuthInstallerNotInitializedError: Constructor<Error>; declare const OAuthTokenDoesNotExistError: Constructor<Error>; declare const OAuthTokenFetchFailedError: Constructor<Error>; declare const OAuthTokenRawResponseError: Constructor<Error>; declare const OAuthTokenRefreshFailedError: Constructor<Error>; declare const OAuthStateVerificationFailedError: Constructor<Error>; declare const ProductClientConstructionError: Constructor<Error>; declare enum LogLevel { ERROR = "error", WARN = "warn", INFO = "info", DEBUG = "debug" } interface Logger { /** * Output debug message * @param msg any data to be logged */ debug(...msg: unknown[]): void; /** * Output info message * @param msg any data to be logged */ info(...msg: unknown[]): void; /** * Output warn message * @param msg any data to be logged */ warn(...msg: unknown[]): void; /** * Output error message * @param msg any data to be logged */ error(...msg: unknown[]): void; /** * Disables all logging below the given level * @param level as a string, 'error' | 'warn' | 'info' | 'debug' */ setLevel(level: LogLevel): void; /** * Return the current LogLevel. */ getLevel(): LogLevel; /** * Name the instance so that it can be filtered when many loggers are sending output * to the same destination. * @param name as a string */ setName(name: string): void; } declare class ConsoleLogger implements Logger { private level; private name; private static labels; private static severity; constructor(); getLevel(): LogLevel; setLevel(level: LogLevel): void; setName(name: string): void; debug(...msg: unknown[]): void; info(...msg: unknown[]): void; warn(...msg: unknown[]): void; error(...msg: unknown[]): void; private static isMoreOrEqualSevere; } interface AuthOptions<Token> { clientId: string; clientSecret: string; tokenStore?: TokenStore<Token> | undefined; logger?: Logger; } type OAuthGrantType = "authorization_code" | "client_credentials" | "refresh_token" | "account_credentials"; interface BaseOAuthRequest { grant_type: OAuthGrantType; } interface OAuthAuthorizationCodeRequest extends BaseOAuthRequest { code: string; grant_type: "authorization_code"; redirect_uri?: string; } interface OAuthRefreshTokenRequest extends BaseOAuthRequest { grant_type: "refresh_token"; refresh_token: string; } interface S2SAuthTokenRequest extends BaseOAuthRequest { grant_type: "account_credentials"; account_id: string; } type OAuthRequest = OAuthAuthorizationCodeRequest | OAuthRefreshTokenRequest | S2SAuthTokenRequest; /** * {@link Auth} is the base implementation of authentication for Zoom's APIs. * * It only requires a `clientId` and `tokenStore`, as these options are shared across * all authentication implementations, namely OAuth and server-to-server auth (client * credentials, JWT, and server-to-server OAuth.) */ declare abstract class Auth<Token = unknown> { protected readonly clientId: string; protected readonly clientSecret: string; protected readonly tokenStore: TokenStore<Token>; protected readonly logger: Logger | undefined; constructor({ clientId, clientSecret, tokenStore, logger }: AuthOptions<Token>); protected getBasicAuthorization(): string; abstract getToken(): MaybePromise<string>; protected isAlmostExpired(isoTime: string): boolean; protected makeOAuthTokenRequest<T extends OAuthGrantType>(grantType: T, payload?: Omit<Extract<OAuthRequest, { grant_type: T; }>, "grant_type">): Promise<AxiosResponse>; } interface S2SAuthToken { accessToken: string; expirationTimeIso: string; scopes: string[]; } interface S2SAuthOptions { accountId: string; } declare class S2SAuth extends Auth<S2SAuthToken> { private accountId; constructor({ accountId, ...restOptions }: AuthOptions<S2SAuthToken> & S2SAuthOptions); private assertRawToken; private fetchAccessToken; getToken(): Promise<string>; private mapAccessToken; } interface Event<Type extends string> { event: Type; } type EventKeys<T> = T extends Event<infer U> ? U : never; type EventPayload<T, K> = Extract<T, { event: K; }>; type EventListenerFn<Events, EventName extends EventKeys<Events>, ReturnType = MaybePromise<void>> = (payload: EventPayload<Events, EventName>) => ReturnType; type EventListenerPredicateFn<Events, EventName extends EventKeys<Events>> = EventListenerFn<Events, EventName, MaybePromise<boolean>>; type ContextListener<Events, EventName extends EventKeys<Events>, Context> = (_: EventPayload<Events, EventName> & Context) => MaybePromise<void>; type GenericEventManager = EventManager<any, any>; declare class EventManager<Endpoints, Events> { protected endpoints: Endpoints; constructor(endpoints: Endpoints); private appendListener; filteredEvent<EventName extends EventKeys<Events>>(eventName: EventName, predicate: EventListenerPredicateFn<Events, EventName>, listener: EventListenerFn<Events, EventName>): void; emit<EventName extends EventKeys<Events>>(eventName: EventName, payload: EventPayload<Events, EventName>): Promise<void>; event<EventName extends EventKeys<Events>>(eventName: EventName, listener: EventListenerFn<Events, EventName>): void; protected withContext<EventName extends EventKeys<Events>, Context>(): ContextListener<Events, EventName, Context>; } interface HttpReceiverOptions extends Partial<SecureServerOptions> { endpoints?: MaybeArray<string> | undefined; port?: number | string | undefined; webhooksSecretToken: string; logger?: Logger; logLevel?: LogLevel; } type SecureServerOptions = { [K in (typeof secureServerOptionKeys)[number]]: ServerOptions[K]; }; declare const secureServerOptionKeys: (keyof ServerOptions)[]; declare class HttpReceiver implements Receiver { private eventEmitter?; private interactiveAuth?; private server?; private logger; constructor(options: HttpReceiverOptions); canInstall(): true; private getServerCreator; private hasEndpoint; private hasSecureOptions; init({ eventEmitter, interactiveAuth }: ReceiverInitOptions): void; start(port?: number | string): Promise<Server>; stop(): Promise<void>; private writeTemporaryRedirect; private writeResponse; } interface BaseResponse<Data = unknown> { data?: Data | undefined; statusCode: number; trackingId?: string | undefined; } interface BuildEndpointOptions<PathSchema> { method: HttpMethod; baseUrlOverride?: string | undefined; urlPathBuilder: (params: PathSchema) => string; requestMimeType?: RequestMimeType; } interface WebEndpointOptions { auth: Auth; baseUrl?: string | undefined; doubleEncodeUrl?: boolean | undefined; timeout?: number | undefined; } type EndpointArguments<PathSchema extends StringIndexed | NoParams, BodySchema extends StringIndexed | NoParams, QuerySchema extends StringIndexed | NoParams> = (PathSchema extends NoParams ? object : AllPropsOptional<PathSchema, "t", "f"> extends "t" ? { path?: PathSchema; } : { path: PathSchema; }) & (BodySchema extends NoParams ? object : AllPropsOptional<BodySchema, "t", "f"> extends "t" ? { body?: BodySchema; } : { body: BodySchema; }) & (QuerySchema extends NoParams ? object : AllPropsOptional<QuerySchema, "t", "f"> extends "t" ? { query?: QuerySchema; } : { query: QuerySchema; }); type HttpMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE"; type NoParams = "_NO_PARAMS_"; type RequestMimeType = "application/json" | "multipart/form-data"; declare class WebEndpoints { constructor(options: WebEndpointOptions); protected buildEndpoint<PathSchema extends StringIndexed | NoParams, BodySchema extends StringIndexed | NoParams, QuerySchema extends StringIndexed | NoParams, ResponseData = unknown>({ method, baseUrlOverride, urlPathBuilder, requestMimeType }: BuildEndpointOptions<PathSchema>): (_: EndpointArguments<PathSchema, BodySchema, QuerySchema>) => Promise<BaseResponse<ResponseData>>; private buildUserAgent; private getHeaders; private getRequestBody; private isOk; private isZoomResponseError; private makeRequest; } type CommonClientOptions<A extends Auth, R extends Receiver> = GetAuthOptions<A> & ExtractInstallerOptions<A, R> & { disableReceiver?: boolean | undefined; logger?: Logger | undefined; logLevel?: LogLevel | undefined; }; interface ClientReceiverOptions<R extends Receiver> { receiver: R; } type ClientConstructorOptions<A extends Auth, O extends CommonClientOptions<A, R>, R extends Receiver> = IsReceiverDisabled<O> extends true ? O : O & (ClientReceiverOptions<R> | HttpReceiverOptions); type ExtractInstallerOptions<A extends Auth, R extends Receiver> = A extends InteractiveAuth ? [ ReturnType<R["canInstall"]> ] extends [true] ? WideInstallerOptions : object : object; type ExtractAuthTokenType<A> = A extends Auth<infer T> ? T : never; type GenericClientOptions = CommonClientOptions<any, any>; type GetAuthOptions<A extends Auth> = AuthOptions<ExtractAuthTokenType<A>> & (A extends S2SAuth ? S2SAuthOptions : object); type IsReceiverDisabled<O extends Pick<GenericClientOptions, "disableReceiver">> = [ O["disableReceiver"] ] extends [true] ? true : false; type WideInstallerOptions = { installerOptions: InstallerOptions; }; declare abstract class ProductClient<AuthType extends Auth, EndpointsType extends WebEndpoints, EventProcessorType extends GenericEventManager, OptionsType extends CommonClientOptions<AuthType, ReceiverType>, ReceiverType extends Receiver> { private readonly auth; readonly endpoints: EndpointsType; readonly webEventConsumer: EventProcessorType; private readonly receiver?; constructor(options: ClientConstructorOptions<AuthType, OptionsType, ReceiverType>); protected abstract initAuth(options: OptionsType): AuthType; protected abstract initEndpoints(auth: AuthType, options: OptionsType): EndpointsType; protected abstract initEventProcessor(endpoints: EndpointsType, options: OptionsType): EventProcessorType; private initDefaultReceiver; start(this: IsReceiverDisabled<OptionsType> extends true ? never : this): Promise<ReturnType<ReceiverType["start"]>>; } interface InstallerOptions { directInstall?: boolean | undefined; installPath?: string | undefined; redirectUri: string; redirectUriPath?: string | undefined; stateStore: StateStore | string; } /** * {@link InteractiveAuth}, an extension of {@link Auth}, is designed for use cases where authentication * is initiated server-side, but requires manual authorization from a user, by redirecting the user to Zoom. * * In addition to all required fields from {@link AuthOptions}, this class requires a `redirectUri`, as this * value is appended to the authorization URL when the user is redirected to Zoom and subsequently redirected * back to an endpoint on this server. * * @see {@link https://developers.zoom.us/docs/integrations/oauth/ | OAuth - Zoom Developers} */ declare abstract class InteractiveAuth<Token = unknown> extends Auth<Token> { installerOptions?: ReturnType<typeof this.setInstallerOptions>; getAuthorizationUrl(): Promise<string>; getFullRedirectUri(): string; setInstallerOptions({ directInstall, installPath, redirectUri, redirectUriPath, stateStore }: InstallerOptions): { directInstall: boolean; installPath: string; redirectUri: string; redirectUriPath: string; stateStore: StateStore; }; } declare enum StatusCode { OK = 200, TEMPORARY_REDIRECT = 302, BAD_REQUEST = 400, NOT_FOUND = 404, METHOD_NOT_ALLOWED = 405, INTERNAL_SERVER_ERROR = 500 } interface ReceiverInitOptions { eventEmitter: GenericEventManager; interactiveAuth?: InteractiveAuth | undefined; } interface Receiver { canInstall(): true | false; init(options: ReceiverInitOptions): void; start(...args: any[]): MaybePromise<unknown>; stop(...args: any[]): MaybePromise<unknown>; } interface AwsLambdaReceiverOptions { webhooksSecretToken: string; } declare class AwsLambdaReceiver implements Receiver { private eventEmitter?; private readonly webhooksSecretToken; constructor({ webhooksSecretToken }: AwsLambdaReceiverOptions); buildResponse(statusCode: StatusCode, body: object): LambdaFunctionURLResult; canInstall(): false; init({ eventEmitter }: ReceiverInitOptions): void; start(): LambdaFunctionURLHandler; stop(): Promise<void>; } type AccountsListAccountsZoomPhoneSettingsQueryParams = { setting_types?: string; }; type AccountsListAccountsZoomPhoneSettingsResponse = { call_live_transcription?: { enable?: boolean; locked?: boolean; locked_by?: string; } & { transcription_start_prompt?: { enable?: boolean; audio_id?: string; audio_name?: string; }; }; local_survivability_mode?: { enable?: boolean; locked?: boolean; locked_by?: string; }; external_calling_on_zoom_room_common_area?: { enable?: boolean; locked?: boolean; locked_by?: string; }; select_outbound_caller_id?: { enable?: boolean; locked?: boolean; locked_by?: string; } & { allow_hide_outbound_caller_id?: boolean; }; personal_audio_library?: { enable?: boolean; locked?: boolean; locked_by?: string; } & { allow_music_on_hold_customization?: boolean; allow_voicemail_and_message_greeting_customization?: boolean; }; voicemail?: { enable?: boolean; locked?: boolean; locked_by?: string; } & { allow_videomail?: boolean; allow_download?: boolean; allow_delete?: boolean; allow_share?: boolean; allow_virtual_background?: boolean; }; voicemail_transcription?: { enable?: boolean; locked?: boolean; locked_by?: string; }; voicemail_notification_by_email?: { enable?: boolean; locked?: boolean; locked_by?: string; } & { include_voicemail_file?: boolean; include_voicemail_transcription?: boolean; forward_voicemail_to_email?: boolean; }; shared_voicemail_notification_by_email?: { enable?: boolean; locked?: boolean; locked_by?: string; }; restricted_call_hours?: { enable?: boolean; locked?: boolean; locked_by?: string; } & { time_zone?: { id?: string; name?: string; }; restricted_hours_applied?: boolean; restricted_holiday_hours_applied?: boolean; allow_internal_calls?: boolean; }; allowed_call_locations?: { enable?: boolean; locked?: boolean; locked_by?: string; } & { locations_applied?: boolean; allow_internal_calls?: boolean; }; check_voicemails_over_phone?: { enable?: boolean; locked?: boolean; locked_by?: string; }; auto_call_recording?: { enable?: boolean; locked?: boolean; locked_by?: string; } & { recording_calls?: string; recording_transcription?: boolean; recording_start_prompt?: boolean; recording_start_prompt_audio_id?: string; recording_explicit_consent?: boolean; allow_stop_resume_recording?: boolean; disconnect_on_recording_failure?: boolean; play_recording_beep_tone?: { enable?: boolean; play_beep_member?: string; play_beep_volume?: number; play_beep_time_interval?: number; }; inbound_audio_notification?: { recording_start_prompt?: boolean; recording_start_prompt_audio_id?: string; recording_explicit_consent?: boolean; }; outbound_audio_notification?: { recording_start_prompt?: boolean; recording_start_prompt_audio_id?: string; recording_explicit_consent?: boolean; }; }; ad_hoc_call_recording?: { enable?: boolean; locked?: boolean; locked_by?: string; }; international_calling?: { enable?: boolean; locked?: boolean; locked_by?: string; }; outbound_calling?: { enable?: boolean; locked?: boolean; locked_by?: string; }; outbound_sms?: { enable?: boolean; locked?: boolean; locked_by?: string; }; sms?: { enable?: boolean; locked?: boolean; locked_by?: string; } & { international_sms?: boolean; }; sms_etiquette_tool?: { enable?: boolean; locked?: boolean; locked_by?: string; }; zoom_phone_on_mobile?: { enable?: boolean; locked?: boolean; locked_by?: string; } & { allow_calling_sms_mms?: boolean; }; zoom_phone_on_pwa?: { enable?: boolean; locked?: boolean; locked_by?: string; }; e2e_encryption?: { enable?: boolean; locked?: boolean; locked_by?: string; }; call_handling_forwarding_to_other_users?: { enable?: boolean; locked?: boolean; locked_by?: string; } & { call_forwarding_type?: number; }; call_overflow?: { enable?: boolean; locked?: boolean; locked_by?: string; } & { call_overflow_type?: number; }; call_transferring?: { enable?: boolean; locked?: boolean; locked_by?: string; } & { call_transferring_type?: number; }; elevate_to_meeting?: { enable?: boolean; locked?: boolean; locked_by?: string; }; call_park?: { enable?: boolean; locked?: boolean; locked_by?: string; }; hand_off_to_room?: { enable?: boolean; locked?: boolean; locked_by?: string; }; mobile_switch_to_carrier?: { enable?: boolean; locked?: boolean; locked_by?: string; }; delegation?: { enable?: boolean; locked?: boolean; locked_by?: string; }; audio_intercom?: { enable?: boolean; locked?: boolean; locked_by?: string; }; block_calls_without_caller_id?: { enable?: boolean; locked?: boolean; locked_by?: string; }; block_external_calls?: { enable?: boolean; locked?: boolean; locked_by?: string; }; call_queue_opt_out_reason?: { enable?: boolean; locked?: boolean; locked_by?: string; }; auto_delete_data_after_retention_duration?: { enable?: boolean; locked?: boolean; locked_by?: string; }; auto_call_from_third_party_apps?: { enable?: boolean; locked?: boolean; locked_by?: string; }; override_default_port?: { enable?: boolean; locked?: boolean; locked_by?: string; }; peer_to_peer_media?: { enable?: boolean; locked?: boolean; locked_by?: string; }; advanced_encryption?: { enable?: boolean; locked?: boolean; locked_by?: string; }; display_call_feedback_survey?: { enable?: boolean; locked?: boolean; locked_by?: string; }; block_list_for_inbound_calls_and_messaging?: { enable?: boolean; locked?: boolean; locked_by?: string; }; block_calls_as_threat?: { enable?: boolean; locked?: boolean; locked_by?: string; }; }; type AccountsListAccountsCustomizedOutboundCallerIDPhoneNumbersQueryParams = { selected?: boolean; site_id?: string; extension_type?: string; keyword?: string; page_size?: number; next_page_token?: string; }; type AccountsListAccountsCustomizedOutboundCallerIDPhoneNumbersResponse = { customize_numbers?: { customize_id?: string; phone_number_id?: string; phone_number?: string; display_name?: string; incoming?: boolean; outgoing?: boolean; extension_id?: string; extension_type?: string; extension_number?: string; extension_name?: string; site?: { id?: string; name?: string; }; }[]; next_page_token?: string; page_size?: number; total_records?: number; }; type AccountsAddPhoneNumbersForAccountsCustomizedOutboundCallerIDRequestBody = { phone_number_ids?: string[]; }; type AccountsDeletePhoneNumbersForAccountsCustomizedOutboundCallerIDQueryParams = { customize_ids?: string[]; }; type AlertsListAlertSettingsWithPagingQueryQueryParams = { page_size?: number; next_page_token?: string; module?: number; rule?: number; status?: number; }; type AlertsListAlertSettingsWithPagingQueryResponse = { next_page_token?: string; page_size?: number; alert_settings?: { alert_setting_id?: string; alert_setting_name?: string; module?: number; rule?: number; rule_conditions?: { rule_condition_type?: number; rule_condition_value?: string; }[]; targets?: { target_name?: string; }[]; time_frame_type?: string; time_frame_from?: string; time_frame_to?: string; frequency?: number; email_recipients?: string[]; chat_channels?: { chat_channel_name?: string; token?: string; end_point?: string; }[]; status?: number; }[]; }; type AlertsAddAlertSettingRequestBody = { alert_setting_name: string; module: number; rule: number; target_type: number; target_ids?: string[]; rule_conditions: { rule_condition_type?: number; rule_condition_value?: string; }[]; time_frame_type: string; time_frame_from: string; time_frame_to: string; frequency?: number; email_recipients?: string[]; chat_channels?: { chat_channel_name?: string; token?: string; end_point?: string; }[]; status?: number; }; type AlertsAddAlertSettingResponse = { alert_setting_id?: string; alert_setting_name?: string; }; type AlertsGetAlertSettingDetailsPathParams = { alertSettingId: string; }; type AlertsGetAlertSettingDetailsResponse = { alert_setting_id?: string; alert_setting_name?: string; module?: number; rule?: number; rule_conditions?: { rule_condition_type?: number; rule_condition_value?: string; }[]; targets?: { target_id?: string; target_name?: string; target_type?: number; target_extension_number?: number; site?: { id?: string; name?: string; }; assignees?: { extension_number?: number; name?: string; extension_type?: string; extension_id?: string; }[]; }[]; time_frame_type?: string; time_frame_from?: string; time_frame_to?: string; frequency?: number; email_recipients?: string[]; chat_channels?: { chat_channel_name?: string; token?: string; end_point?: string; }[]; status?: number; }; type AlertsDeleteAlertSettingPathParams = { alertSettingId: string; }; type AlertsUpdateAlertSettingPathParams = { alertSettingId: string; }; type AlertsUpdateAlertSettingRequestBody = { alert_setting_name?: string; rule_conditions?: { rule_condition_type?: number; rule_condition_value?: string; }[]; target_ids?: string[]; time_frame_type?: string; time_frame_from?: string; time_frame_to?: string; frequency?: number; email_recipients?: string[]; chat_channels?: { chat_channel_name?: string; token?: string; end_point?: string; }[]; status?: number; }; type AudioLibraryGetAudioItemPathParams = { audioId: string; }; type AudioLibraryGetAudioItemResponse = { audio_id?: string; name?: string; play_url?: string; text?: string; voice_language?: string; voice_accent?: string; }; type AudioLibraryDeleteAudioItemPathParams = { audioId: string; }; type AudioLibraryUpdateAudioItemPathParams = { audioId: string; }; type AudioLibraryUpdateAudioItemRequestBody = { name: string; }; type AudioLibraryListAudioItemsPathParams = { userId: string; }; type AudioLibraryListAudioItemsResponse = { audios?: { audio_id?: string; name?: string; }[]; }; type AudioLibraryAddAudioItemForTextToSpeechConversionPathParams = { userId: string; }; type AudioLibraryAddAudioItemForTextToSpeechConversionRequestBody = { audio_name?: string; text?: string; voice_language?: string; voice_accent?: string; }; type AudioLibraryAddAudioItemForTextToSpeechConversionResponse = { audio_id?: string; name?: string; }; type AudioLibraryAddAudioItemsPathParams = { userId: string; }; type AudioLibraryAddAudioItemsRequestBody = { attachments?: { audio_type?: string; base64_encoding?: string; name?: string; }[]; }; type AudioLibraryAddAudioItemsResponse = { audios?: { audio_id?: string; name?: string; }[]; }; type AutoReceptionistsListAutoReceptionistsQueryParams = { page_size?: number; next_page_token?: string; }; type AutoReceptionistsListAutoReceptionistsResponse = { auto_receptionists?: { cost_center?: string; department?: string; extension_id?: string; extension_number?: number; id?: string; name?: string; timezone?: string; audio_prompt_language?: string; holiday_hours?: { id?: string; name?: string; from?: string; to?: string; }[]; phone_numbers?: { id?: string; number?: string; }[]; site?: { id?: string; name?: string; }; }[]; next_page_token?: string; page_size?: number; total_records?: number; }; type AutoReceptionistsAddAutoReceptionistRequestBody = { name: string; site_id?: string; }; type AutoReceptionistsAddAutoReceptionistResponse = { extension_number?: number; id?: string; name?: string; }; type AutoReceptionistsGetAutoReceptionistPathParams = { autoReceptionistId: string; }; type AutoReceptionistsGetAutoReceptionistResponse = { cost_center?: string; department?: string; extension_id?: string; extension_number?: number; name?: string; timezone?: string; audio_prompt_language?: string; holiday_hours?: { id?: string; name?: string; from?: string; to?: string; }[]; phone_numbers?: { id?: string; number?: string; }[]; site?: { id?: string; name?: string; }; recording_storage_location?: string; own_storage_name?: string; }; type AutoReceptionistsDeleteNonPrimaryAutoReceptionistPathParams = { autoReceptionistId: string; }; type AutoReceptionistsUpdateAutoReceptionistPathParams = { autoReceptionistId: string; }; type AutoReceptionistsUpdateAutoReceptionistRequestBody = { cost_center?: string; department?: string; extension_number?: number; name?: string; audio_prompt_language?: string; timezone?: string; recording_storage_location?: string; }; type AutoReceptionistsAssignPhoneNumbersPathParams = { autoReceptionistId: string; }; type AutoReceptionistsAssignPhoneNumbersRequestBody = { phone_numbers?: { id?: string; number?: string; }[]; }; type AutoReceptionistsUnassignAllPhoneNumbersPathParams = { autoReceptionistId: string; }; type AutoReceptionistsUnassignPhoneNumberPathParams = { autoReceptionistId: string; phoneNumberId: string; }; type AutoReceptionistsGetAutoReceptionistPolicyPathParams = { autoReceptionistId: string; }; type AutoReceptionistsGetAutoReceptionistPolicyResponse = { voicemail_access_members?: { shared_id?: string; access_user_id?: string; delete?: boolean; download?: boolean; }[]; voicemail_transcription?: { enable?: boolean; locked?: boolean; locked_by?: string; modified?: boolean; }; voicemail_notification_by_email?: { include_voicemail_file?: boolean; include_voicemail_transcription?: boolean; forward_voicemail_to_email?: boolean; enable?: boolean; locked?: boolean; locked_by?: string; modified?: boolean; }; sms?: { enable?: boolean; international_sms?: boolean; international_sms_countries?: string[]; locked?: boolean; locked_by?: string; modified?: boolean; }; }; type AutoReceptionistsUpdateAutoReceptionistPolicyPathParams = { autoReceptionistId: string; }; type AutoReceptionistsUpdateAutoReceptionistPolicyRequestBody = { voicemail_transcription?: { enable?: boolean; reset?: boolean; }; voicemail_notification_by_email?: { include_voicemail_file?: boolean; include_voicemail_transcription?: boolean; forward_voicemail_to_email?: boolean; enable?: boolean; reset?: boolean; }; sms?: { enable?: boolean; reset?: boolean; international_sms?: boolean; international_sms_countries?: string[]; }; }; type AutoReceptionistsAddPolicySubsettingPathParams = { autoReceptionistId: string; policyType: string; }; type AutoReceptionistsAddPolicySubsettingRequestBody = { voicemail_access_member?: { access_user_id?: string; delete?: boolean; download?: boolean; }; }; type AutoReceptionistsAddPolicySubsettingResponse = { voicemail_access_member?: { shared_id?: string; access_user_id?: string; delete?: boolean; download?: boolean; }; }; type AutoReceptionistsDeletePolicySubsettingPathParams = { autoReceptionistId: string; policyType: string; }; type AutoReceptionistsDeletePolicySubsettingQueryParams = { shared_ids: string[]; }; type AutoReceptionistsUpdatePolicySubsettingPathParams = { autoReceptionistId: string; policyType: string; }; type AutoReceptionistsUpdatePolicySubsettingRequestBody = { voicemail_access_member?: { access_user_id?: string; delete?: boolean; download?: boolean; shared_id?: string; }; }; type BillingAccountListBillingAccountsQueryParams = { site_id?: string; }; type BillingAccountListBillingAccountsResponse = { billing_accounts?: { id?: string; name?: string; }[]; }; type BillingAccountGetBillingAccountDetailsPathParams = { billingAccountId: string; }; type BillingAccountGetBillingAccountDetailsResponse = { id?: string; name?: string; }; type BlockedListListBlockedListsQueryParams = { next_page_token?: string; page_size?: number; }; type BlockedListListBlockedListsResponse = { blocked_list?: { block_type?: string; comment?: string; id?: string; match_type?: string; phone_number?: string; status?: string; }[]; next_page_token?: string; page_size?: number; total_records?: number; }; type BlockedListCreateBlockedListRequestBody = { block_type?: string; comment?: string; country?: string; match_type?: string; phone_number?: string; status?: string; }; type BlockedListCreateBlockedListResponse = { id?: string; }; type BlockedListGetBlockedListDetailsPathParams = { blockedListId: string; }; type BlockedListGetBlockedListDetailsResponse = { block_type?: string; comment?: string; id?: string; match_type?: string; phone_number?: string; status?: string; }; type BlockedListDeleteBlockedListPathParams = { blockedListId: string; }; type BlockedListUpdateBlockedListPathParams = { blockedListId: string; }; type BlockedListUpdateBlockedListRequestBody = { block_type?: string; comment?: string; country?: string; match_type?: string; phone_number?: string; status?: string; }; type CallHandlingGetCallHandlingSettingsPathParams = { extensionId: string; }; type CallHandlingGetCallHandlingSettingsResponse = { business_hours?: { settings?: { allow_callers_check_voicemail?: boolean; allow_members_to_reset?: boolean; audio_while_connecting?: { id?: string; name?: string; }; call_distribution?: { handle_multiple_calls?: boolean; ring_duration?: number; ring_mode?: string; skip_offline_device_phone_number?: boolean; }; call_forwarding_settings?: { description?: string; enable?: boolean; id?: string; phone_number?: string; external_contact?: { name?: string; email?: string; external_contact_id?: string; phone_numbers?: string[]; }; }[]; call_not_answer_action?: number; connect_to_operator?: boolean; custom_hours_settings?: { from?: string; to?: string; type?: number; weekday?: number; }[]; greeting_prompt?: { id?: string; name?: string; }; max_call_in_queue?: number; max_wait_time?: number; music_on_hold?: { id?: string; name?: string; }; receive_call?: boolean; require_press_1_before_connecting?: boolean; ring_mode?: string; routing?: { action?: number; forward_to?: { display_name?: string; extension_id?: string; extension_number?: number; extension_type?: string; id?: string; phone_number?: string; description?: string; voicemail_greeting?: { id?: string; name?: string; }; zcc_phone_number?: string; zcc_phone_number_display_name?: string; partner_contact_center_id?: string; pcc_phone_number_display_name?: string; teams_app_id?: string; teams_voice_app_name?: string; }; operator?: { display_name?: string; extension_id?: string; extension_number?: number; extension_type?: string; id?: string; }; connect_to_operator?: boolean; allow_callers_check_voicemail?: boolean; voicemail_greeting?: { id?: string; name?: string; }; voicemail_leaving_instruction?: { id?: string; name?: string; }; message_greeting?: { id?: string; name?: string; }; require_press_1_before_connecting?: boolean; overflow_play_callee_voicemail_greeting?: boolean; play_callee_voicemail_greeting?: boolean; busy_play_callee_voicemail_greeting?: boolean; }; busy_routing?: { action?: number; forward_to?: { display_name?: string; extension_id?: string; extension_number?: number; extension_type?: string; id?: string; phone_number?: string; description?: string; voicemail_greeting?: { id?: string; name?: string; }; }; operator?: { display_name?: string; extension_id?: string; extension_number?: number; extension_type?: string; id?: string; }; connect_to_operator?: boolean; allow_callers_check_voicemail?: boolean; voicemail_greeting?: { id?: string; name?: string; }; voicemail_leaving_instruction?: { id?: string; name?: string; }; message_greeting?: { id?: string; name?: string; }; require_press_1_before_connecting?: boolean; overflow_play_callee_voicemail_greeting?: boolean; play_callee_voicemail_greeting?: boolean; busy_play_callee_voicemail_greeting?: boolean; }; type?: number; wrap_up_time?: number; }; sub_setting_type?: string; }[]; closed_hours?: { settings?: { allow_callers_check_voicemail?: boolean; call_forwarding_settings?: { description?: string; enable?: boolean; id?: string; phone_number?: string; external_contact?: { name?: string; email?: string; external_contact_id?: string; phone_numbers?: string[]; }; }[]; call_not_answer_action?: number; connect_to_operator?: boolean; max_wait_time?: number; require_press_1_before_connecting?: boolean; ring_mode?: string; routing?: { action?: number; forward_to?: { display_name?: string; extension_id?: string; extension_number?: number; extension_type?: string; id?: string; phone_number?: string; description?: string; voicemail_greeting?: { id?: string; name?: string; }; zcc_phone_number?: string; zcc_phone_number_display_name?: string; partner_contact_center_id?: string; pcc_phone_number_display_name?: string; teams_app_id?: string; teams_voice_app_name?: string; }; operator?: { display_name?: string; extension_id?: string; extension_number?: number; extension_type?: string; id?: string; }; connect_to_operator?: boolean; allow_callers_check_voicemail?: boolean; voicemail_greeting?: { id?: string; name?: string; }; voicemail_leaving_instruction?: { id?: string; name?: string; }; message_greeting?: { id?: string; name?: string; }; require_press_1_before_connecting?: boolean; overflow_play_callee_voicemail_greeting?: boolean; play_callee_voicemail_greeting?: boolean; busy_play_callee_voicemail_greeting?: boolean; }; busy_routing?: { action?: number; forward_to?: { display_name?: string; extension_id?: string; extension_number?: number; extension_type?: string; id?: string; phone_number?: string; description?: string; voicemail_greeting?: { id?: string; name?: string; }; }; operator?: { display_name?: string; extension_id?: string; extension_number?: number; extension_type?: string; id?: string; }; connect_to_operator?: boolean; allow_callers_check_voicemail?: boolean; voicemail_greeting?: { id?: string; name?: string; }; voicemail_leaving_instruction?: { id?: string; name?: string; }; message_greeting?: { id?: string; name?: string; }; require_press_1_before_connecting?: boolean; overflow_play_callee_voicemail_greeting?: boolean; play_callee_voicemail_greeting?: boolean; busy_play_callee_voicemail_greeting?: boolean; }; }; sub_setting_type?: string; }[]; holiday_hours?: { details?: { settings?: { allow_callers_check_voicemail?: boolean; call_forwarding_settings?: { description?: string; enable?: boolean; id?: string; phone_number?: string; external_contact?: { name?: string; email?: string; external_contact_id?: string; phone_numbers?: string[]; }; }[]; call_not_answer_action?: number; connect_to_operator?: boolean; from?: string; max_wait_time?: number; name?: string; require_press_1_before_connecting?: boolean; ring_mode?: string; routing?: { action?: number; forward_to?: { display_name?: string; extension_id?: string; extension_number?: number; extension_type?: string; id?: string; phone_number?: string; description?: string; voicemail_greeting?: object; }; operator?: { display_name?: string; extension_id?: string; extension_number?: number; extension_type?: string; id?: string; }; connect_to_operator?: boolean; allow_callers_check_voicemail?: boolean; voicemail_greeting?: { id?: string; name?: string; }; require_press_1_before_connecting?: boolean; overflow_play_callee_voicemail_greeting?: boolean; play_callee_voicemail_greeting?: boolean; busy_play_callee_voicemail_greeting?: boolean; }; to?: string; }; sub_setting_type?: string; }[]; holiday_id?: string; }[]; }; type CallHandlingAddCallHandlingSettingPathParams = { extensionId: string; settingType: string; }; type CallHandlingAddCallHandlingSettingRequestBody = { settings?: { holiday_id?: string; description?: string; phone_number?: string; }; sub_setting_type?: string; } | { settings?: { name?: string; from?: string; to?: string; }; sub_setting_type?: string; }; type CallHandlingAddCallHandlingSettingResponse = { call_forwarding_id?: string; } | { holiday_id?: string; }; type CallHandlingDeleteCallHandlingSettingPathParams = { extensionId: string; settingType: string; }; type CallHandlingDeleteCallHandlingSettingQueryParams = { call_forwarding_id?: string; holiday_id?: string; }; type CallHandlingUpdateCallHandlingSettingPathParams = { extensionId: string; setti