import Observable from 'core-js/features/observable'; import { ACSDirectLineActivity, ACSAdapterState } from '..'; import { EgressMiddleware } from '../libs/applyEgressMiddleware'; import { IMessagePollingHandle } from './MessagePollingTypes'; interface AdapterOptions { enableAdaptiveCards?: boolean; // Whether to enable adaptive card payload in adapter(which will convert content payload into a json string) enableThreadMemberUpdateNotification?: boolean; // Whether to enable chat thread member join/leave notification enableLeaveThreadOnWindowClosed?: boolean; // Whether to remove user on browser close event enableSenderDisplayNameInTypingNotification?: boolean; // Whether to send sender display name in typing notification enableMessageErrorHandler?: boolean; // Whether to enable error handler to handle failed messages. historyPageSizeLimit?: number | undefined; // History messages's size limit per page. Off by default if no size limit provided serverPageSizeLimit?: number | undefined; // Message limit to request to server at once. webChatInitTimeout?: number; // Timeout to let WebChat subscribe to connection status changes. Default will be 2000 shouldFileAttachmentDownloadTimeout?: boolean; // Whether file attachment should wait for default fetch timeout or configured timeout fileAttachmentDownloadTimeout?: number; // Timeout value for file attachment download. If previous boolean is set to true then default value will be 90000 ms egressMiddleware?: EgressMiddleware[]; ingressMiddleware?: EgressMiddleware[]; messagePollingHandle?: IMessagePollingHandle; } enum ReadyState { CONNECTING = 0, OPEN = 1, CLOSED = 2 } type IterateActivitiesOptions = { signal?: AbortSignal; }; type AdapterState = { [key: string]: any }; type SealedAdapter = { activities: (options?: IterateActivitiesOptions) => AsyncIterable; close: () => void; egress: EgressFunction; ingress: IngressFunction; readyState: ReadyState; subscribe: SubscribeFunction; } & EventTarget & TAdapterState; interface Adapter extends EventTarget { activities: (options?: IterateActivitiesOptions) => AsyncIterable; close: () => void; egress: EgressFunction; getState: GetStateFunction; getReadyState: () => ReadyState; ingress: IngressFunction; setReadyState: (readyState: ReadyState) => void; setState: SetStateFunction; subscribe: SubscribeFunction; } interface MiddlewareAPI { close: () => void; egress: EgressFunction; getReadyState: () => ReadyState; getState: GetStateFunction; ingress: IngressFunction; setReadyState: (readyState: ReadyState) => void; setState: SetStateFunction; subscribe: SubscribeFunction; } type EgressOptions = { progress: (activity: TActivity) => void; }; type EgressFunction = (activity: TActivity, options?: EgressOptions) => Promise | void; type GetStateFunction = (key: keyof TAdapterState) => any; type IngressFunction = (activity: TActivity) => void; type SetStateFunction = (key: keyof TAdapterState, value: any) => void; type SubscribeFunction = (observable: Observable | false) => void; type AdapterCreator = ( options?: AdapterOptions | any ) => Adapter; type AdapterEnhancer = ( next: AdapterCreator ) => AdapterCreator; type ChatEqualityFields = { createdOn: Date; updatedOn?: Date; deletedOn?: Date; content: string; fileIds?: string[]; }; export type { Adapter, AdapterCreator, AdapterEnhancer, AdapterOptions, AdapterState, ChatEqualityFields, EgressFunction, EgressOptions, GetStateFunction, IngressFunction, IterateActivitiesOptions, MiddlewareAPI, SealedAdapter, SetStateFunction, SubscribeFunction }; export { ReadyState };