@livechat/widget-core
Version:
LiveChat Chat Widget adapters implementation core
159 lines (150 loc) • 6.67 kB
TypeScript
declare type ExtendedWindow = Window & {
__lc: {
license: number;
organizationId: string;
group?: number;
params?: Array<{
name: string;
value: string;
}>;
chat_between_groups?: boolean;
integration_name?: string;
product_name?: string;
custom_identity_provider?: CustomIdentityProvider;
};
LiveChatWidget: {
on: typeof on;
off: typeof on;
once: typeof on;
get: typeof get;
call: typeof call;
init: VoidFunction;
};
LC_API?: {
on_after_load?: VoidFunction;
};
};
declare function on(name: 'ready', handler: EventHandlers['onReady']): void;
declare function on(name: 'new_event', handler: EventHandlers['onNewEvent']): void;
declare function on(name: 'form_submitted', handler: EventHandlers['onFormSubmitted']): void;
declare function on(name: 'greeting_hidden', handler: EventHandlers['onGreetingHidden']): void;
declare function on(name: 'rating_submitted', handler: EventHandlers['onRatingSubmitted']): void;
declare function on(name: 'visibility_changed', handler: EventHandlers['onVisibilityChanged']): void;
declare function on(name: 'greeting_displayed', handler: EventHandlers['onGreetingDisplayed']): void;
declare function on(name: 'availability_changed', handler: EventHandlers['onAvailabilityChanged']): void;
declare function on(name: 'customer_status_changed', handler: EventHandlers['onCustomerStatusChanged']): void;
declare function on(name: 'rich_message_button_clicked', handler: EventHandlers['onRichMessageButtonClicked']): void;
declare function get(name: 'state'): WidgetState;
declare function get(name: 'chat_data'): ChatData;
declare function get(name: 'customer_data'): CustomerData;
declare function call(name: 'hide'): void;
declare function call(name: 'maximize'): void;
declare function call(name: 'minimize'): void;
declare function call(name: 'destroy'): void;
declare function call(name: 'hide_greeting'): void;
declare function call(name: 'set_customer_name', payload: CustomerData['name']): void;
declare function call(name: 'set_customer_email', payload: CustomerData['email']): void;
declare function call(name: 'set_session_variables', payload: CustomerData['sessionVariables']): void;
declare function call(name: 'update_session_variables', payload: CustomerData['sessionVariables']): void;
declare type MutableCustomerData = {
name: string;
email: string;
};
declare type CustomerData = MutableCustomerData & {
id: string;
isReturning: boolean;
status: 'queued' | 'chatting' | 'browsing' | 'invited';
sessionVariables: Record<string, string>;
};
declare type ConfigurationOptions = {
license?: string;
organizationId?: string;
group?: string;
chatBetweenGroups?: boolean;
sessionVariables?: CustomerData['sessionVariables'];
customIdentityProvider?: CustomIdentityProvider;
};
declare type ChatData = {
chatId: string;
threadId: string;
};
declare type Greeting = {
id: number;
uniqueId: string;
};
declare type ChatEvent = {
timestamp: number;
type: 'message' | 'rich_message' | 'file';
author: {
id: string;
type: 'customer' | 'agent';
};
greeting?: Greeting;
};
declare type RichMessageButton = {
eventId: string;
postbackId: string;
greeting?: Greeting;
};
declare type WidgetState = {
availability: 'online' | 'offline';
visibility: 'maximized' | 'minimized' | 'hidden';
};
declare type EventHandlers = {
onReady?: (data: {
state: WidgetState;
customerData: CustomerData;
}) => void;
onAvailabilityChanged?: (data: Pick<WidgetState, 'availability'>) => void;
onVisibilityChanged?: (data: Pick<WidgetState, 'visibility'>) => void;
onCustomerStatusChanged?: (data: Pick<CustomerData, 'status'>) => void;
onNewEvent?: (event: ChatEvent) => void;
onFormSubmitted?: (data: {
type: 'prechat' | 'postchat' | 'ticket';
}) => void;
onRatingSubmitted?: (rating: 'good' | 'bad' | 'none') => void;
onGreetingDisplayed?: (greeting: Greeting) => void;
onGreetingHidden?: (greeting: Greeting) => void;
onRichMessageButtonClicked?: (button: RichMessageButton) => void;
};
declare type EventHandlerPayload<T extends keyof EventHandlers, E = Required<EventHandlers>[T]> = E extends (...args: any) => void ? Parameters<E>['0'] : never;
declare type Token = {
accessToken: string;
entityId: string;
expiresIn: number;
tokenType: 'Bearer';
creationDate: number;
licenseId: number;
};
declare type CustomIdentityProvider = () => {
getToken: () => Promise<Token>;
getFreshToken: () => Promise<Token>;
hasToken: () => Promise<boolean>;
invalidate: () => Promise<void>;
};
declare type ProductName = 'livechat' | 'textapp';
declare function getData(entity: 'state'): WidgetState;
declare function getData(entity: 'chat'): ChatData;
declare function getData(entity: 'customer'): CustomerData;
declare type WidgetConfig = ConfigurationOptions & EventHandlers & {
visibility?: WidgetState['visibility'];
customerName?: CustomerData['name'];
customerEmail?: CustomerData['email'];
};
declare type WidgetInstance = {
init: VoidFunction;
destroy: VoidFunction;
hideGreeting: VoidFunction;
updateVisibility: (visibility?: WidgetState['visibility']) => void;
updateEventHandlers: (eventHandlers: EventHandlers) => void;
updateSessionVariables: (sessionVariables: WidgetConfig['sessionVariables']) => void;
updateCustomerData: (customerData: Partial<MutableCustomerData>) => void;
};
declare function createWidget(config: WidgetConfig): WidgetInstance;
declare function assignConfiguration({ license, organizationId, group, chatBetweenGroups, sessionVariables, customIdentityProvider, }: ConfigurationOptions): void;
declare function assignCustomerData(customerData: Partial<MutableCustomerData>): void;
declare function assignEventHandlers(method: 'on' | 'off' | 'once', eventHandlers: EventHandlers): void;
declare function assignVisibility(visibility?: WidgetState['visibility']): void;
declare function lcOnInit(callback: VoidFunction): VoidFunction;
declare function lcOnDestroy(callback: VoidFunction): VoidFunction;
export { ChatData, ChatEvent, ConfigurationOptions, CustomIdentityProvider, CustomerData, EventHandlerPayload, EventHandlers, ExtendedWindow, Greeting, MutableCustomerData, ProductName, RichMessageButton, Token, WidgetConfig, WidgetInstance, WidgetState, assignConfiguration, assignCustomerData, assignEventHandlers, assignVisibility, createWidget, getData, lcOnDestroy, lcOnInit };