{"version":3,"file":"3572.0177e4027d7f325769dd.js","mappings":"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","sources":["webpack://mattermost-webapp/./src/components/async_load.tsx","webpack://mattermost-webapp/./src/utils/browser_history.tsx","webpack://mattermost-webapp/./src/utils/desktop_api.ts","webpack://mattermost-webapp/./src/utils/server_version.tsx","webpack://mattermost-webapp/./src/utils/user_agent.tsx"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React, {type ComponentType} from 'react';\n\nexport function makeAsyncComponent(displayName: string, LazyComponent: React.ComponentType, fallback: React.ReactNode = null) {\n const Component: ComponentType = (props) => (\n \n \n \n );\n Component.displayName = displayName;\n return Component;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {createBrowserHistory} from 'history';\nimport type {History} from 'history';\n\nimport {getModule} from 'module_registry';\nimport DesktopApp from 'utils/desktop_api';\nimport {isServerVersionGreaterThanOrEqualTo} from 'utils/server_version';\nimport {isDesktopApp, getDesktopVersion} from 'utils/user_agent';\n\nconst b = createBrowserHistory({basename: window.basename});\nconst isDesktop = isDesktopApp() && isServerVersionGreaterThanOrEqualTo(getDesktopVersion(), '5.0.0');\nconst browserHistory = {\n ...b,\n push: (path: string | { pathname: string }, ...args: string[]) => {\n if (isDesktop) {\n DesktopApp.doBrowserHistoryPush(typeof path === 'object' ? path.pathname : path);\n } else {\n b.push(path, ...args);\n }\n },\n};\n\nif (isDesktop) {\n DesktopApp.onBrowserHistoryPush((pathName) => b.push(pathName));\n}\n\n/**\n * Returns the current history object.\n *\n * If you're calling this from within a React component, consider using the useHistory hook from react-router-dom.\n */\nexport function getHistory() {\n return getModule('utils/browser_history') ?? browserHistory;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport semver from 'semver';\n\nimport type {DesktopAPI} from '@mattermost/desktop-api';\n\nimport {isDesktopApp} from 'utils/user_agent';\n\ndeclare global {\n interface Window {\n desktopAPI?: Partial;\n }\n}\n\nexport class DesktopAppAPI {\n private name?: string;\n private version?: string | null;\n private prereleaseVersion?: string;\n private dev?: boolean;\n\n /**\n * @deprecated\n */\n private postMessageListeners?: Map void>>;\n\n constructor() {\n // Check the user agent string first\n if (!isDesktopApp()) {\n return;\n }\n\n this.getDesktopAppInfo().then(({name, version}) => {\n this.name = name;\n this.version = semver.valid(semver.coerce(version));\n this.prereleaseVersion = version?.split('-')?.[1];\n\n // Legacy Desktop App version, used by some plugins\n if (!window.desktop) {\n window.desktop = {};\n }\n window.desktop.version = semver.valid(semver.coerce(version));\n });\n window.desktopAPI?.isDev?.().then((isDev) => {\n this.dev = isDev;\n });\n\n // Legacy code - to be removed\n this.postMessageListeners = new Map();\n window.addEventListener('message', this.postMessageListener);\n window.addEventListener('beforeunload', () => {\n window.removeEventListener('message', this.postMessageListener);\n });\n }\n\n /*******************************************************\n * Getters/setters for Desktop App specific information\n *******************************************************/\n\n getAppName = () => {\n return this.name;\n };\n\n getAppVersion = () => {\n return this.version;\n };\n\n getPrereleaseVersion = () => {\n return this.prereleaseVersion;\n };\n\n isDev = () => {\n return this.dev;\n };\n\n private getDesktopAppInfo = () => {\n if (window.desktopAPI?.getAppInfo) {\n return window.desktopAPI.getAppInfo();\n }\n\n return this.invokeWithMessaging(\n 'webapp-ready',\n undefined,\n 'register-desktop',\n );\n };\n\n /**********************\n * Exposed API methods\n **********************/\n\n /**\n * Invokes\n */\n\n getBrowserHistoryStatus = async () => {\n if (window.desktopAPI?.requestBrowserHistoryStatus) {\n return window.desktopAPI.requestBrowserHistoryStatus();\n }\n\n const {enableBack, enableForward} = await this.invokeWithMessaging(\n 'history-button',\n undefined,\n 'history-button-return',\n );\n\n return {\n canGoBack: enableBack,\n canGoForward: enableForward,\n };\n };\n\n /**\n * Listeners\n */\n\n onUserActivityUpdate = (listener: (userIsActive: boolean, idleTime: number, isSystemEvent: boolean) => void) => {\n if (window.desktopAPI?.onUserActivityUpdate) {\n return window.desktopAPI.onUserActivityUpdate(listener);\n }\n\n const legacyListener = ({userIsActive, manual}: {userIsActive: boolean; manual: boolean}) => listener(userIsActive, 0, manual);\n this.addPostMessageListener('user-activity-update', legacyListener);\n\n return () => this.removePostMessageListener('user-activity-update', legacyListener);\n };\n\n onNotificationClicked = (listener: (channelId: string, teamId: string, url: string) => void) => {\n if (window.desktopAPI?.onNotificationClicked) {\n return window.desktopAPI.onNotificationClicked(listener);\n }\n\n const legacyListener = ({channel, teamId, url}: {channel: {id: string}; teamId: string; url: string}) => listener(channel.id, teamId, url);\n this.addPostMessageListener('notification-clicked', legacyListener);\n\n return () => this.removePostMessageListener('notification-clicked', legacyListener);\n };\n\n onBrowserHistoryPush = (listener: (pathName: string) => void) => {\n if (window.desktopAPI?.onBrowserHistoryPush) {\n return window.desktopAPI.onBrowserHistoryPush(listener);\n }\n\n const legacyListener = ({pathName}: {pathName: string}) => listener(pathName);\n this.addPostMessageListener('browser-history-push-return', legacyListener);\n\n return () => this.removePostMessageListener('browser-history-push-return', legacyListener);\n };\n\n onBrowserHistoryStatusUpdated = (listener: (enableBack: boolean, enableForward: boolean) => void) => {\n if (window.desktopAPI?.onBrowserHistoryStatusUpdated) {\n return window.desktopAPI.onBrowserHistoryStatusUpdated(listener);\n }\n\n const legacyListener = ({enableBack, enableForward}: {enableBack: boolean; enableForward: boolean}) => listener(enableBack, enableForward);\n this.addPostMessageListener('history-button-return', legacyListener);\n\n return () => this.removePostMessageListener('history-button-return', legacyListener);\n };\n\n onReceiveMetrics = (listener: (metricsMap: Map) => void) => {\n return window.desktopAPI?.onSendMetrics?.(listener);\n };\n\n /**\n * One-ways\n */\n\n dispatchNotification = async (\n title: string,\n body: string,\n channelId: string,\n teamId: string,\n silent: boolean,\n soundName: string,\n url: string,\n ) => {\n if (window.desktopAPI?.sendNotification) {\n const result = await window.desktopAPI.sendNotification(title, body, channelId, teamId, url, silent, soundName);\n return result ?? {status: 'unsupported', reason: 'desktop_app_unsupported'};\n }\n\n // get the desktop app to trigger the notification\n window.postMessage(\n {\n type: 'dispatch-notification',\n message: {\n title,\n body,\n channel: {id: channelId},\n teamId,\n silent,\n data: {soundName},\n url,\n },\n },\n window.location.origin,\n );\n return {status: 'unsupported', reason: 'desktop_app_unsupported'};\n };\n\n doBrowserHistoryPush = (path: string) => {\n if (window.desktopAPI?.sendBrowserHistoryPush) {\n window.desktopAPI.sendBrowserHistoryPush(path);\n return;\n }\n\n window.postMessage(\n {\n type: 'browser-history-push',\n message: {path},\n },\n window.location.origin,\n );\n };\n\n updateUnreadsAndMentions = (isUnread: boolean, mentionCount: number) =>\n window.desktopAPI?.setUnreadsAndMentions && window.desktopAPI.setUnreadsAndMentions(isUnread, mentionCount);\n setSessionExpired = (expired: boolean) => window.desktopAPI?.setSessionExpired && window.desktopAPI.setSessionExpired(expired);\n signalLogin = () => window.desktopAPI?.onLogin?.();\n signalLogout = () => window.desktopAPI?.onLogout?.();\n reactAppInitialized = () => window.desktopAPI?.reactAppInitialized?.();\n\n /*********************************************************************\n * Helper functions for legacy code\n * Remove all of this once we have no use for message passing anymore\n *********************************************************************/\n\n /**\n * @deprecated\n */\n private postMessageListener = ({origin, data: {type, message}}: {origin: string; data: {type: string; message: unknown}}) => {\n if (origin !== window.location.origin) {\n return;\n }\n\n const listeners = this.postMessageListeners?.get(type);\n if (!listeners) {\n return;\n }\n\n listeners.forEach((listener) => {\n listener(message);\n });\n };\n\n /**\n * @deprecated\n */\n private addPostMessageListener = (channel: string, listener: (message: any) => void) => {\n if (this.postMessageListeners?.has(channel)) {\n this.postMessageListeners.set(channel, this.postMessageListeners.get(channel)!.add(listener));\n } else {\n this.postMessageListeners?.set(channel, new Set([listener]));\n }\n };\n\n /**\n * @deprecated\n */\n private removePostMessageListener = (channel: string, listener: (message: any) => void) => {\n const set = this.postMessageListeners?.get(channel);\n set?.delete(listener);\n if (set?.size) {\n this.postMessageListeners?.set(channel, set);\n } else {\n this.postMessageListeners?.delete(channel);\n }\n };\n\n /**\n * @deprecated\n */\n private invokeWithMessaging = (\n sendChannel: string,\n sendData?: T,\n receiveChannel?: string,\n ) => {\n return new Promise((resolve) => {\n /* create and register a temporary listener if necessary */\n const response = ({origin, data: {type, message}}: {origin: string; data: {type: string; message: T2}}) => {\n /* ignore messages from other frames */\n if (origin !== window.location.origin) {\n return;\n }\n\n /* ignore messages from other channels */\n if (type !== (receiveChannel ?? sendChannel)) {\n return;\n }\n\n /* clean up listener and resolve */\n window.removeEventListener('message', response);\n resolve(message);\n };\n\n window.addEventListener('message', response);\n window.postMessage(\n {type: sendChannel, message: sendData},\n window.location.origin,\n );\n });\n };\n}\n\nconst DesktopApp = new DesktopAppAPI();\nexport default DesktopApp;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\n/**\n * Boolean function to check if a server version is greater than another.\n *\n * currentVersion: The server version being checked\n * compareVersion: The version to compare the former version against\n *\n * eg. currentVersion = 4.16.0, compareVersion = 4.17.0 returns false\n * currentVersion = 4.16.1, compareVersion = 4.16.1 returns true\n */\nexport function isServerVersionGreaterThanOrEqualTo(currentVersion: string, compareVersion: string): boolean {\n if (currentVersion === compareVersion) {\n return true;\n }\n\n // We only care about the numbers\n const currentVersionNumber = (currentVersion || '').split('.').filter((x) => (/^[0-9]+$/).exec(x) !== null);\n const compareVersionNumber = (compareVersion || '').split('.').filter((x) => (/^[0-9]+$/).exec(x) !== null);\n\n for (let i = 0; i < Math.max(currentVersionNumber.length, compareVersionNumber.length); i++) {\n const currentVersion = parseInt(currentVersionNumber[i], 10) || 0;\n const compareVersion = parseInt(compareVersionNumber[i], 10) || 0;\n if (currentVersion > compareVersion) {\n return true;\n }\n\n if (currentVersion < compareVersion) {\n return false;\n }\n }\n\n // If all components are equal, then return true\n return true;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\n/*\nExample User Agents\n--------------------\n\nChrome:\n Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\n\nFirefox:\n Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0\n\nIE11:\n Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko\n\nEdge:\n Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586\n\nChromeOS Chromebook:\n Mozilla/5.0 (X11; CrOS x86_64 8172.45.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.64 Safari/537.36\n\nDesktop App:\n Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Mattermost/1.2.1 Chrome/49.0.2623.75 Electron/0.37.8 Safari/537.36\n Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586\n Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Mattermost/3.4.1 Chrome/53.0.2785.113 Electron/1.4.2 Safari/537.36\n Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Mattermost/3.4.1 Chrome/51.0.2704.106 Electron/1.2.8 Safari/537.36\n\nAndroid Chrome:\n Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19\n\nAndroid Firefox:\n Mozilla/5.0 (Android; U; Android; pl; rv:1.9.2.8) Gecko/20100202 Firefox/3.5.8\n Mozilla/5.0 (Android 7.0; Mobile; rv:54.0) Gecko/54.0 Firefox/54.0\n Mozilla/5.0 (Android 7.0; Mobile; rv:57.0) Gecko/57.0 Firefox/57.0\n\nAndroid App:\n Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; Build/KLP) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\n Mozilla/5.0 (Linux; Android 4.4; Nexus 5 Build/_BuildID_) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36\n Mozilla/5.0 (Linux; Android 5.1.1; Nexus 5 Build/LMY48B; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.65 Mobile Safari/537.36\n\niOS Safari:\n Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543 Safari/419.3\n\niOS Android:\n Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3\n\niOS App:\n Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13F69\n*/\n\nconst userAgent = () => window.navigator.userAgent;\n\nexport function isChrome(): boolean {\n return userAgent().indexOf('Chrome') > -1 && userAgent().indexOf('Edge') === -1;\n}\n\nexport function isSafari(): boolean {\n return userAgent().indexOf('Safari') !== -1 && userAgent().indexOf('Chrome') === -1;\n}\n\nexport function isIosSafari(): boolean {\n return (userAgent().indexOf('iPhone') !== -1 || userAgent().indexOf('iPad') !== -1) && userAgent().indexOf('Safari') !== -1 && userAgent().indexOf('CriOS') === -1;\n}\n\nexport function isIosChrome(): boolean {\n return userAgent().indexOf('CriOS') !== -1;\n}\n\nexport function isIosFirefox(): boolean {\n return userAgent().indexOf('FxiOS') !== -1;\n}\n\nexport function isIosWeb(): boolean {\n return isIosSafari() || isIosChrome();\n}\n\nexport function isIos(): boolean {\n return userAgent().indexOf('iPhone') !== -1 || userAgent().indexOf('iPad') !== -1;\n}\n\nexport function isAndroid(): boolean {\n return userAgent().indexOf('Android') !== -1;\n}\n\nexport function isAndroidChrome(): boolean {\n return userAgent().indexOf('Android') !== -1 && userAgent().indexOf('Chrome') !== -1 && userAgent().indexOf('Version') === -1;\n}\n\nexport function isAndroidFirefox(): boolean {\n return userAgent().indexOf('Android') !== -1 && userAgent().indexOf('Firefox') !== -1;\n}\n\nexport function isAndroidWeb(): boolean {\n return isAndroidChrome() || isAndroidFirefox();\n}\n\nexport function isIosClassic(): boolean {\n return isMobileApp() && isIos();\n}\n\n// Returns true if and only if the user is using a Mattermost mobile app. This will return false if the user is using the\n// web browser on a mobile device.\nexport function isMobileApp(): boolean {\n return isMobile() && !isIosWeb() && !isAndroidWeb();\n}\n\n// Returns true if and only if the user is using Mattermost from either the mobile app or the web browser on a mobile device.\nexport function isMobile(): boolean {\n return isIos() || isAndroid();\n}\n\nexport function isFirefox(): boolean {\n return userAgent().indexOf('Firefox') !== -1;\n}\n\nexport function isChromebook(): boolean {\n return userAgent().indexOf('CrOS') !== -1;\n}\n\nexport function isInternetExplorer(): boolean {\n return userAgent().indexOf('Trident') !== -1;\n}\n\nexport function isEdge(): boolean {\n return userAgent().indexOf('Edge') !== -1;\n}\n\nexport function isChromiumEdge(): boolean {\n return userAgent().indexOf('Edg') !== -1 && userAgent().indexOf('Edge') === -1;\n}\n\nexport function isDesktopApp(): boolean {\n return userAgent().indexOf('Mattermost') !== -1 && userAgent().indexOf('Electron') !== -1;\n}\n\nexport function isWindowsApp(): boolean {\n return isDesktopApp() && isWindows();\n}\n\nexport function isMacApp(): boolean {\n return isDesktopApp() && isMac();\n}\n\nexport function isWindows(): boolean {\n return userAgent().indexOf('Windows') !== -1;\n}\n\nexport function isMac(): boolean {\n return userAgent().indexOf('Macintosh') !== -1;\n}\n\nexport function isLinux(): boolean {\n return navigator.platform.toUpperCase().indexOf('LINUX') >= 0;\n}\n\nexport function isWindows7(): boolean {\n const appVersion = navigator.appVersion;\n\n if (!appVersion) {\n return false;\n }\n\n return (/\\bWindows NT 6\\.1\\b/).test(appVersion);\n}\n\nexport function getDesktopVersion(): string {\n // use if the value window.desktop.version is not set yet\n const regex = /Mattermost\\/(\\d+\\.\\d+\\.\\d+)/gm;\n const match = regex.exec(window.navigator.appVersion)?.[1] || '';\n return match;\n}\n"],"names":["makeAsyncComponent","displayName","LazyComponent","fallback","arguments","length","undefined","Component","props","React","b","createBrowserHistory","basename","window","isDesktop","isDesktopApp","isServerVersionGreaterThanOrEqualTo","getDesktopVersion","browserHistory","_objectSpread","push","path","DesktopApp","doBrowserHistoryPush","pathname","_len","args","Array","_key","getHistory","_getModule","getModule","onBrowserHistoryPush","pathName","constructor","_window$desktopAPI15","_window$desktopAPI15$","_defineProperty","this","name","version","prereleaseVersion","dev","_window$desktopAPI","desktopAPI","getAppInfo","invokeWithMessaging","async","_window$desktopAPI2","requestBrowserHistoryStatus","enableBack","enableForward","canGoBack","canGoForward","listener","_window$desktopAPI3","onUserActivityUpdate","legacyListener","_ref","userIsActive","manual","addPostMessageListener","removePostMessageListener","_window$desktopAPI4","onNotificationClicked","_ref2","channel","teamId","url","id","_window$desktopAPI5","_ref3","_window$desktopAPI6","onBrowserHistoryStatusUpdated","_ref4","_window$desktopAPI7","_window$desktopAPI7$o","onSendMetrics","call","title","body","channelId","silent","soundName","_window$desktopAPI8","sendNotification","result","status","reason","postMessage","type","message","data","location","origin","_window$desktopAPI9","sendBrowserHistoryPush","isUnread","mentionCount","_window$desktopAPI10","setUnreadsAndMentions","expired","_window$desktopAPI11","setSessionExpired","_window$desktopAPI12","_window$desktopAPI12$","onLogin","_window$desktopAPI13","_window$desktopAPI13$","onLogout","_window$desktopAPI14","_window$desktopAPI14$","reactAppInitialized","_ref5","_this$postMessageList","listeners","postMessageListeners","get","forEach","_this$postMessageList2","_this$postMessageList3","has","set","add","Set","_this$postMessageList4","_this$postMessageList5","_this$postMessageList6","delete","size","sendChannel","sendData","receiveChannel","Promise","resolve","response","_ref6","removeEventListener","addEventListener","getDesktopAppInfo","then","_ref7","_version$split","semver","split","desktop","isDev","Map","postMessageListener","currentVersion","compareVersion","currentVersionNumber","filter","x","exec","compareVersionNumber","i","Math","max","parseInt","userAgent","navigator","isChrome","indexOf","isSafari","isIosSafari","isIosChrome","isIosFirefox","isIosWeb","isIos","isAndroid","isAndroidWeb","isMobileApp","isMobile","isFirefox","isChromebook","isInternetExplorer","isEdge","isChromiumEdge","isMacApp","isMac","isWindows","isLinux","platform","toUpperCase","_regex$exec","appVersion"],"sourceRoot":""}