import type { ChannelTransport } from '@yandex-int/messenger.channels'; import { ClientApi } from '@yandex-int/messenger.sdk/private'; import { YANDEX_TLD } from '@yandex-int/messenger.utils'; import { WidgetEvent } from './libs/WidgetEvent/WidgetEvent'; import { WidgetEvents } from './__codegen__/external/WidgetEvents'; import { Preset } from './config/presets/types'; export declare type Lang = 'ru' | 'en' | 'tr' | 'kk' | 'uz' | 'hy' | 'sr' | 'fr' | 'he'; export declare type IframeOpenData = ClientApi.BaseIframeOpenParams; export interface IframeUrlParams { utm_source?: 'widget'; utm_medium?: 'iframe' | 'window'; } /** * @doctitle Настройки виджета (Options) * @doctemplate members_annotation */ export interface Options { /** * [Идентификатор сервиса](/doc/cookbook.md#serviceid) */ serviceId: number; /** * Идентификатор воркспейса */ workspaceId?: string; /** * TLD который будет использован для открытия мессенджера * если не указать TLD будет взят из текущего домена */ tld?: typeof YANDEX_TLD[number]; /** * Язык мессенджера/виджета */ lang?: Lang; /** * Авторизационный токен мессенджера * "OAuth \" | "YambAuth \" | "TeamAuth \" * @example authToken: "OAuth y1_AQAD-qJSLndBAAAPigAAAAAALe2fiQxxxxxxxxxxxxxxxxxxxxxxxxx" */ authToken?: string; /** * Авторизационная партиция */ authPartition?: string; /** * Флаги позволяющие настроить интерфейс и поведение мессенджера */ flags?: Partial; /** * Объект который будет передан в параметры метрики мессенджера */ stat?: object; /** * Настройки цветовой схемы мессенджера [подробнее](./themes.md) */ themeVariables?: object; /** * Включить открытие изображений на весь экран */ fullscreen?: boolean; /** * Параметры отрытия мессенджера */ iframeOpenData?: IframeOpenData; /** * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-allow */ allow?: string[]; /** * Способ авторизации в мессенджере, по умолчанию мессенджер будет открывать паспорт. * `own` - при необходимости авторизовать пользователя, мессенджер вместо открытия паспорта, * будет вызывать событие `authRequest`. * @knob select own */ authType?: 'own'; /** * Включение debug режима мессенджера * В консоли будут отображены все события и отладочная информация мессенджера * В качестве значения можно указать фильтр по названию события, поддерживается * */ debug?: string; /** * ChatId чата у которого будут полится кол-во непрочитанных сообщений */ unreadCounterChatId?: string; /** * Guid пользователя от которого будут полится кол-во непрочитанных сообщений */ unreadCounterOtherGuid?: string; /** * Namespaces у которых будет полится кол-во непрочитанных сообщений * @knob string */ unreadCounterNsFilter?: number[]; /** * Включает в счетчике количество непрочитанных чатов */ unreadWithCountChats?: boolean; /** * Включение перехвата клика по ссылкам хоста в мессенджере. Придет событие catchUrlClick */ catchUrlClick?: boolean; /** * Идентификатор организации */ orgId?: number; } export declare type TargetPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'; export declare type TargetBehaviour = 'sticky' | 'static'; export declare type ButtonCollapsed = 'always' | 'never' | 'hover'; export declare type ButtonSize = 'normal' | 'large'; export declare type BadgeType = 'dot' | 'num'; export interface LCEventResponse { stopPropagation: boolean; defaultPrevented: boolean; } export declare type LCErrorCriticalParams = { error: Error; }; export declare type LCBeforeIframeOpenParams = IframeOpenData; export declare type BeforeRequestEventMap = { [K in keyof ClientApi.ClientHandlers]: { type: K; params: Parameters[0]; }; }; export declare type BeforeShowEvent = WidgetEvent, void>; export declare type BeforeRequestEvent = WidgetEvent>; export interface Lifecycle { /** * Мессенджер готов к отображению * * @param event */ LCReady?(event: WidgetEvent): void; /** * Вызван метод @see destroy * * @param event */ LCClose?(event: WidgetEvent): void; /** * Вызывается в начале вызова widget.hide * * @param event */ LCBeforeHide?(event: WidgetEvent): void; /** * Вызывается в конце вызова widget.hide * * @param event */ LCHidden?(event: WidgetEvent): void; /** * Вызывается в конце вызова widget.show * * @param event */ LCShown?(event: WidgetEvent): void; /** * @preventable * Вызывается в начале вызова widget.show * * @param event */ LCBeforeShow?(event: BeforeShowEvent): void; /** * Мессенджер не может открыться (не загрузился iframe или не пришло событие ready) * * @param event */ LCErrorCritical?(event: WidgetEvent<{ error: Error; }>): void; /** * Вызывается перед тем как отправить api запрос в мессенджер * Вызов event.preventDefault предотвращает отправку запроса * * @param event preventable */ LCBeforeRequest?(event: BeforeRequestEvent): void; } export interface LCDispatcher { dispatchLC(name: N, event: Parameters[N]>[0]): Parameters[N]>[0]; } declare type LifecycleRequire = Required; declare type ExtractWidgetEventType = T extends WidgetEvent ? never : T extends WidgetEvent ? WType : never; /** * @nodoc */ export declare type LifecycleBoss = { [K in keyof LifecycleRequire]: ExtractWidgetEventType[0]> extends never ? () => WidgetEvent : (type: ExtractWidgetEventType[0]>) => WidgetEvent[0]>>; }; /** * @nodoc */ export declare type EssentialEvents = Pick; /** * @nodoc */ export interface WidgetProxy { events: EssentialEvents; options: Preset; reload: () => void; show: (params?: IframeOpenData, callback?: (error?: Error | void) => void) => void; hide: () => void; } export interface Plugin extends Lifecycle { /** * @nodoc */ init(options: Options, widgetProxy: WidgetProxy): void; } export interface UTMQueryParams { utm_medium: 'new_tab' | 'iframe'; } export interface GetChildWindowTransportParams { urlProvider: (params: UTMQueryParams) => string; allow: Maybe; } export interface UIPlugin extends Plugin { getChildWindowTransport(params: GetChildWindowTransportParams, callback: (transport: ChannelTransport) => void): any; } export interface ErrorPayload { code: string; message?: string; clickId?: string; visitId?: string; } declare global { namespace YandexApplications { interface FeatureInfo { isAvailable: boolean; params?: Record; } interface FeatureAvailability { getFeatureInfo(name: string): FeatureInfo | string; } } interface Window { YandexApplicationsFeatureAvailability?: YandexApplications.FeatureAvailability; } } export {};