/// import type { RequestTransportCallback } from '@yandex-int/messenger.channels'; import { ClientApi } from '@yandex-int/messenger.sdk'; 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'; /** * https://wiki.yandex-team.ru/messenger/doc/lokalizacija/ */ export declare type Lang = 'ru' | 'en' | 'tr' | 'kk' | 'uz' | 'hy' | 'sr' | 'fr' | 'he' | 'ar' | 'pt' | 'es-la' | 'es' | 'az' | 'ka' | 'ky' | 'ro' | 'zh-Hans' | 'ur' | 'am' | 'ne'; export declare type IframeOpenData = ClientApi.BaseIframeOpenParams; export interface IframeUrlParams { clipboardApi: Maybe<0 | 1>; utm_source?: 'widget'; utm_medium?: 'iframe' | 'window'; } /** * @doctitle Настройки виджета (Options) * @doctemplate members_annotation */ export interface Options { /** * [Идентификатор сервиса](./cookbook.md#serviceid) */ serviceId: number; /** * Идентификатор воркспейса */ workspaceId?: string; /** * TLD который будет использован для открытия Мессенджера * Eсли не указать, TLD будет взят из текущего домена */ tld?: typeof YANDEX_TLD[number]; /** * Язык Мессенджера/виджета */ lang?: Lang; /** * Авторизационный токен Мессенджера * Формат ` ` * @doc -scope=internal * Поддерживаются следующие типы токенов OAuth, OAuthTeam, YambAuth * "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; /** * Внешний parentOrigin, который будет передан в мессенджер как grandParentOrigin * Если не указан, будет предпринята попытка определить автоматически через window.parent */ grandParentOrigin?: string; /** * ChatId чата, у которого будет запрашиваться кол-во непрочитанных сообщений * при изменении значений счетчика непрочитанных будут заполнены следующие поля: * - valueForChat - количество непрочитанных сообщений для указанного чата * - seqnoForChat - номер последнего сообщения в указанном чате */ unreadCounterChatId?: string; /** * GUID второго пользователя, от приватного чата с которым будет запрашиваться кол-во непрочитанных сообщений * Первый юзер - текущий пользователь * при изменении значений счетчика непрочитанных будут заполнены следующие поля: * - value - количество непрочитанных сообщений для этого чата, если он найден, иначе 0 * - chatsCount - количество чатов между ними, если чат существует и в нём есть непрочитанные, значение 1, иначе 0 */ unreadCounterOtherGuid?: string; /** * Namespaces, у которых будет запрашиваться кол-во непрочитанных сообщений * при изменении значений счетчика непрочитанных будут заполнены следующие поля: * - value - общее количество непрочитанных сообщений в указанных неймспейсах * - chatsCount - общее количество чатов с непрочитанными сообщениями в указанных неймспейсах * @knob string */ unreadCounterNsFilter?: number[]; /** * Включает в счетчике количество непрочитанных чатов */ unreadWithCountChats?: boolean; /** * Включение перехвата клика по ссылкам хоста в Мессенджере. Придет событие `catchUrlClick` */ catchUrlClick?: boolean; /** * Идентификатор организации */ orgId?: number; /** * Включает информацию по воркспейсам и ботам в запросах непрочитанных сообщений * при изменении значений счетчика непрочитанных будет заполнено поле details вида: * {ns: Record, bots: Record} * где каждое значение это количество непрочитанных для конкретной сущности (неймспейс или бот) */ unreadCountDetailedWorkspace?: boolean; /** * Ожидаемый логин (при использовании selectedUid). * Пользователю будет предложено перелогиниться под ним. */ selectedLogin?: string; /** * Паспортный uid желаемого пользователя: * - если пользователь залогинен под выбранным uid, но активен отличный от выбраннного, * автоматически переключимся на нужного * - если пользователь не залогинен под выбранным uid, попросим сменить аккаунт */ selectedUid?: string; /** * Параметр подменяет Origin для транспорта Метрики */ metrikaOrigin?: string; } 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; /** * Вызван метод `widget.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: RequestTransportCallback): void; } 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 {};