import { ElementTransformer } from '../client/dom/ElementTransformer'; import { ApplicationConfig } from '../config/ApplicationConfig'; import { EnvironmentReader } from '../client/environment/EnvironmentReader'; import { BrowserEventListener } from '../client/browser/BrowserEventListener'; import { MessageHandlerChain } from './message/MessageHandlerChain'; import { EventType } from '@rrweb/types'; export class AgentInitiator { public static readonly CHAT_WIDGET_IFRAME_ID: string = 'chat-widget-iframe'; constructor(private readonly elementTransformer: ElementTransformer, private readonly environmentReader: EnvironmentReader, private readonly eventListener: BrowserEventListener, private readonly messageChain: MessageHandlerChain) {} public initiateAgent(): void { this.eventListener.addDOMContentLoadListener(async () => { await this.initiateAgentCallback(); }) } private async initiateAgentCallback(): Promise { const serviceId = await this.environmentReader.getServiceId(); this.elementTransformer.addStyleSheetToHead(`${ApplicationConfig.chatWidgetUrl}/addon/addon.css`); this.elementTransformer.addIframeToBody(`${ApplicationConfig.chatWidgetUrl}?serviceId=${serviceId}`, AgentInitiator.CHAT_WIDGET_IFRAME_ID); await this.messageChain.handleMessage({ data: {show: false}, origin: ApplicationConfig.chatWidgetUrl } as any); EventType.Custom this.eventListener.addIframeMessageListener(async (message) => { await this.messageChain.handleMessage(message); }); } }