///
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 {};