declare const window: any; type webEvent = 'downloadEvent' | 'openSafariViewEvent' | 'openWebviewEvent' | 'resumeSafariViewEvent'|'customEvent'; type rnEvent = 'backEvent' | 'chatViewEvent' | 'docViewEvent'; type webPayload = { event: webEvent, data: string } type rnPayload = { event: rnEvent, data: string } export function isIosWebview(): boolean { const userAgent = navigator.userAgent.toLowerCase(); return ( userAgent.indexOf(" mobile/") > 0 && userAgent.indexOf(" safari/") === -1 ); } export function isAndroidWebview(): boolean { const userAgent = navigator.userAgent.toLowerCase(); return ( userAgent.indexOf("mobile") > 0 && userAgent.indexOf("android") > 0 ); } export function isWebview(): boolean { const userAgent = navigator.userAgent.toLowerCase(); return ( userAgent.indexOf("mobile") > 0 ); } export function postMessage(payload: webPayload): void { window.ReactNativeWebView.postMessage(JSON.stringify(payload)); } let innerFunc: any = null; export function addEventListener(event: rnEvent, func: (payload: { event: rnEvent, data: string }) => void) { innerFunc = function (event: CustomEvent) { func(event.detail) } window.addEventListener(event, innerFunc); } export function removeEventListener(event: rnEvent) { window.removeEventListener(event, innerFunc); } export function dispatchEvent(eventName:string){ window.dispatchEvent(new CustomEvent(eventName)) } window.addEventListener('message', function (e: MessageEvent) { if (e && typeof e.data === 'string') { const message: string = e.data; const payload: rnPayload = JSON.parse(message); if (payload.event) { const event = new CustomEvent(payload.event, { detail: payload, }); window.dispatchEvent(event); } } }) export default { addEventListener: addEventListener, removeEventListener: removeEventListener, dispatchEvent:dispatchEvent, postMessage: postMessage, isIosWebview: isIosWebview, isAndroidWebview: isAndroidWebview, isWebview:isWebview }