{"version":3,"file":"index.prod.js","mappings":"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","sources":["webpack://MahsPayam-webapp/webpack/runtime/create fake namespace object","webpack://MahsPayam-webapp/webpack/runtime/load script","webpack://MahsPayam-webapp/./src/config.js","webpack://MahsPayam-webapp/./src/lib/blob-helpers.js","webpack://MahsPayam-webapp/./src/lib/local-storage.js","webpack://MahsPayam-webapp/./src/lib/navigation.js","webpack://MahsPayam-webapp/./src/lib/strformat.js","webpack://MahsPayam-webapp/./src/lib/utils.js","webpack://MahsPayam-webapp/./src/widgets/audio-player.jsx","webpack://MahsPayam-webapp/./src/widgets/cropper.jsx","webpack://MahsPayam-webapp/./src/widgets/avatar-crop.jsx","webpack://MahsPayam-webapp/./src/widgets/avatar-upload.jsx","webpack://MahsPayam-webapp/./src/widgets/badge-list.jsx","webpack://MahsPayam-webapp/./src/widgets/checkbox.jsx","webpack://MahsPayam-webapp/./src/widgets/letter-tile.jsx","webpack://MahsPayam-webapp/./src/widgets/load-spinner.jsx","webpack://MahsPayam-webapp/./src/widgets/visible-password.jsx","webpack://MahsPayam-webapp/./node_modules/react-dom/client.js","webpack://MahsPayam-webapp/./node_modules/react/cjs/react-jsx-runtime.production.min.js","webpack://MahsPayam-webapp/./node_modules/react/jsx-runtime.js","webpack://MahsPayam-webapp/external var \"React\"","webpack://MahsPayam-webapp/external var \"ReactDOM\"","webpack://MahsPayam-webapp/external var \"ReactIntl\"","webpack://MahsPayam-webapp/external var \"tinode\"","webpack://MahsPayam-webapp/webpack/bootstrap","webpack://MahsPayam-webapp/webpack/runtime/compat get default export","webpack://MahsPayam-webapp/webpack/runtime/define property getters","webpack://MahsPayam-webapp/webpack/runtime/ensure chunk","webpack://MahsPayam-webapp/webpack/runtime/get javascript chunk filename","webpack://MahsPayam-webapp/webpack/runtime/global","webpack://MahsPayam-webapp/webpack/runtime/hasOwnProperty shorthand","webpack://MahsPayam-webapp/webpack/runtime/make namespace object","webpack://MahsPayam-webapp/webpack/runtime/publicPath","webpack://MahsPayam-webapp/webpack/runtime/jsonp chunk loading","webpack://MahsPayam-webapp/./node_modules/@firebase/util/dist/index.esm2017.js","webpack://MahsPayam-webapp/./node_modules/@firebase/component/dist/esm/index.esm2017.js","webpack://MahsPayam-webapp/./node_modules/@firebase/logger/dist/esm/index.esm2017.js","webpack://MahsPayam-webapp/./node_modules/idb/build/wrap-idb-value.js","webpack://MahsPayam-webapp/./node_modules/idb/build/index.js","webpack://MahsPayam-webapp/./node_modules/@firebase/app/dist/esm/index.esm2017.js","webpack://MahsPayam-webapp/./node_modules/firebase/app/dist/esm/index.esm.js","webpack://MahsPayam-webapp/./node_modules/@firebase/installations/dist/esm/index.esm2017.js","webpack://MahsPayam-webapp/./node_modules/@firebase/messaging/dist/esm/index.esm2017.js","webpack://MahsPayam-webapp/./src/widgets/alert.jsx","webpack://MahsPayam-webapp/./src/widgets/context-menu.jsx","webpack://MahsPayam-webapp/./src/widgets/contact-badges.jsx","webpack://MahsPayam-webapp/./src/widgets/unread-badge.jsx","webpack://MahsPayam-webapp/./src/widgets/call-message.jsx","webpack://MahsPayam-webapp/./src/widgets/call-status.jsx","webpack://MahsPayam-webapp/./src/widgets/inline-video.jsx","webpack://MahsPayam-webapp/./src/widgets/lazy-image.jsx","webpack://MahsPayam-webapp/./src/widgets/file-progress.jsx","webpack://MahsPayam-webapp/./src/widgets/uploading-image.jsx","webpack://MahsPayam-webapp/./src/lib/formatters.js","webpack://MahsPayam-webapp/./src/widgets/contact.jsx","webpack://MahsPayam-webapp/./src/widgets/contact-action.jsx","webpack://MahsPayam-webapp/./src/widgets/contact-list.jsx","webpack://MahsPayam-webapp/./src/widgets/search-contacts.jsx","webpack://MahsPayam-webapp/./src/widgets/forward-dialog.jsx","webpack://MahsPayam-webapp/./src/constants.js","webpack://MahsPayam-webapp/./src/widgets/call-incoming.jsx","webpack://MahsPayam-webapp/./src/widgets/menu-cancel.jsx","webpack://MahsPayam-webapp/./src/widgets/error-panel.jsx","webpack://MahsPayam-webapp/./src/widgets/chip.jsx","webpack://MahsPayam-webapp/./src/widgets/chip-input.jsx","webpack://MahsPayam-webapp/./src/widgets/group-manager.jsx","webpack://MahsPayam-webapp/./src/widgets/permissions-editor.jsx","webpack://MahsPayam-webapp/external var \"QRCode\"","webpack://MahsPayam-webapp/./src/widgets/show-qrcode.jsx","webpack://MahsPayam-webapp/./src/widgets/in-place-edit.jsx","webpack://MahsPayam-webapp/./src/widgets/tag-manager.jsx","webpack://MahsPayam-webapp/./src/widgets/topic-desc-edit.jsx","webpack://MahsPayam-webapp/./src/views/topic-common-view.jsx","webpack://MahsPayam-webapp/./src/widgets/topic-security.jsx","webpack://MahsPayam-webapp/./src/views/info-view.jsx","webpack://MahsPayam-webapp/./src/widgets/call-panel.jsx","webpack://MahsPayam-webapp/./src/widgets/attachment.jsx","webpack://MahsPayam-webapp/./src/widgets/received-marker.jsx","webpack://MahsPayam-webapp/./src/widgets/chat-message.jsx","webpack://MahsPayam-webapp/./src/widgets/send-message.jsx","webpack://MahsPayam-webapp/./src/widgets/doc-preview.jsx","webpack://MahsPayam-webapp/./src/widgets/group-subs.jsx","webpack://MahsPayam-webapp/./src/widgets/image-preview.jsx","webpack://MahsPayam-webapp/./src/widgets/invitation.jsx","webpack://MahsPayam-webapp/./src/views/logo-view.jsx","webpack://MahsPayam-webapp/./src/widgets/meta-message.jsx","webpack://MahsPayam-webapp/./src/widgets/video-preview.jsx","webpack://MahsPayam-webapp/./src/views/messages-view.jsx","webpack://MahsPayam-webapp/./src/widgets/button-back.jsx","webpack://MahsPayam-webapp/./src/widgets/menu-contacts.jsx","webpack://MahsPayam-webapp/./src/widgets/menu-start.jsx","webpack://MahsPayam-webapp/./src/widgets/side-navbar.jsx","webpack://MahsPayam-webapp/./src/views/contacts-view.jsx","webpack://MahsPayam-webapp/./src/views/acc-notifications-view.jsx","webpack://MahsPayam-webapp/./src/views/acc-security-view.jsx","webpack://MahsPayam-webapp/./src/views/acc-support-view.jsx","webpack://MahsPayam-webapp/./src/views/login-view.jsx","webpack://MahsPayam-webapp/./src/widgets/new-topic-by-id.jsx","webpack://MahsPayam-webapp/./src/widgets/new-topic-group.jsx","webpack://MahsPayam-webapp/./src/views/new-topic-view.jsx","webpack://MahsPayam-webapp/./src/widgets/host-selector.jsx","webpack://MahsPayam-webapp/./src/views/settings-view.jsx","webpack://MahsPayam-webapp/./src/views/validation-view.jsx","webpack://MahsPayam-webapp/./src/views/sidepanel-view.jsx","webpack://MahsPayam-webapp/./src/lib/host-name.js","webpack://MahsPayam-webapp/./src/views/tinode-web.jsx","webpack://MahsPayam-webapp/./src/version.js","webpack://MahsPayam-webapp/./src/index.js"],"sourcesContent":["var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"MahsPayam-webapp:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import { PACKAGE_VERSION } from './version.js';\r\n\r\n// Name of this application, used in the User-Agent.\r\nexport const APP_NAME = \"پیامرسان مجتمع آموزشی حضرت سیدالشهدا (ع)\";\r\n\r\n// API key. Use https://github.com/tinode/chat/tree/master/keygen to generate your own\r\nexport const API_KEY = 'AQAAAAABAAAJU4daLfy60hF72jG6B6i4';\r\n\r\n// The array of possible hosts to connect to.\r\nexport const KNOWN_HOSTS = {hosted: 'payam.mahs.ir', local: 'localhost:6060'};\r\n\r\n// Default host name and port to connect to.\r\nexport const DEFAULT_HOST = KNOWN_HOSTS.hosted;\r\n\r\n// Enable console logging.\r\nexport const LOGGING_ENABLED = true;\r\n\r\n// Minimum time between two keypress notifications, milliseconds.\r\nexport const KEYPRESS_DELAY = 3_000;\r\n// Delay before sending a read notification, milliseconds.\r\nexport const READ_DELAY = 1_500;\r\n\r\n// The default shortest allowed tag length. Matches the value on the server.\r\nexport const MIN_TAG_LENGTH = 2;\r\n// The default greatest allowed tag length. Matches the value on the server.\r\nexport const MAX_TAG_LENGTH = 96;\r\n// The default maximum number of tags allowed. Matches the value on the server.\r\nexport const MAX_TAG_COUNT = 16;\r\n\r\n// Access mode for P2P subscriptions initiated by the current user.\r\nexport const DEFAULT_P2P_ACCESS_MODE = 'JRWPS';\r\n// Access mode for new group topics created by the current user.\r\nexport const NEW_GRP_ACCESS_MODE = 'JRWPSAO';\r\n// Access mode for a channel.\r\nexport const CHANNEL_ACCESS_MODE = 'JR';\r\n\r\n// Access mode for no access.\r\nexport const NO_ACCESS_MODE = 'N';\r\n\r\n// Mediaquery breakpoint between desktop and mobile, in px. Should match the value\r\n// in @media (max-size: 640px) in base.css\r\nexport const MEDIA_BREAKPOINT = 640;\r\n// Size of css 'rem' unit in pixels. Default 1rem = 10pt = 13px.\r\nexport const REM_SIZE = 13;\r\n\r\n// Size of the avatar image: when image dimensions are greater or the image is not square, it's resized to\r\n// a square of this size or less.\r\nexport const AVATAR_SIZE = 384;\r\n\r\n// Maximum size of an avatar in bytes for sending in-band. Bigger avatars will be sent out of band (as uploads).\r\nexport const MAX_AVATAR_BYTES = 4096;\r\n\r\n// Size of the broken_image shown in MessagesView\r\nexport const BROKEN_IMAGE_SIZE = 32;\r\n\r\n// Size of video preview when dimensions are missing.\r\nexport const NO_DIMENSIONS_VIDEO = 128;\r\n\r\n// Number of chat messages to fetch in one call.\r\nexport const MESSAGES_PAGE = 24;\r\n\r\n// Default maximum in-band (included directly into the message) attachment size which fits into\r\n// a message of 256K in size. Used when the server-provided value is unavailable. The actual\r\n// binary size of the attachment should be smaller due to base64 encoding expansion and some overhead,\r\n// for instance 1024 bytes.\r\n// Increase this limit to a greater value in production, if desired. Also increase\r\n// max_message_size in the server config.\r\nexport const MAX_INBAND_ATTACHMENT_SIZE = 262_144;\r\n\r\n// Default absolute maximum attachment size to be used with the server = 8MB.\r\n// Used when the server-provided value is unavailable. Increase to something like 100MB in production.\r\nexport const MAX_EXTERN_ATTACHMENT_SIZE = 1 << 23;\r\n\r\n// Maximum allowed linear dimension (pixels) of an image sent inline. Larger images will be shrunk\r\n// to make the larger dimension fit under this size. You may want to adjust it to 1600 or\r\n// 2400 for production.\r\nexport const MAX_IMAGE_DIM = 1024;\r\n\r\n// Linear dimensions of image preview: shrink image under this size for previews.\r\nexport const IMAGE_PREVIEW_DIM = 64;\r\n\r\n// Linear dimensions of video screencapture: shrink image under this size for previews.\r\nexport const VIDEO_PREVIEW_DIM = 96;\r\n\r\n// Linear dimensions of image thumbnail: shrink image under this size for thumbnails in reply quote previews.\r\nexport const IMAGE_THUMBNAIL_DIM = 36;\r\n// Width of video thumbnail: allow it to be wider, but not taller. Use IMAGE_THUMBNAIL_DIM for height.\r\nexport const VIDEO_THUMBNAIL_WIDTH = 48;\r\n\r\n// Maximum number of online users to be shown in a topic title bar. Others will be\r\n// hidden under \"+X more\"\r\nexport const MAX_ONLINE_IN_TOPIC = 4;\r\n\r\n// Maximum length of user name, topic title, and private comment.\r\nexport const MAX_TITLE_LENGTH = 60;\r\n// Maximum length of topic description.\r\nexport const MAX_TOPIC_DESCRIPTION_LENGTH = 360;\r\n// Maximum length of user name when displaying a video call.\r\nexport const MAX_PEER_TITLE_LENGTH = 20;\r\n\r\n// Length of message previews in chat list, in characters.\r\nexport const MESSAGE_PREVIEW_LENGTH = 80;\r\n\r\n// Length of a quote in quoted reply (for outgoing messages).\r\nexport const QUOTED_REPLY_LENGTH = 30;\r\n// Length of a preview of a forwarded message.\r\nexport const FORWARDED_PREVIEW_LENGTH = 84;\r\n// Length of preview for a message being edited.\r\nexport const EDIT_PREVIEW_LENGTH = 48;\r\n\r\n// Minimum duration of an audio recording in milliseconds (2 sec).\r\nexport const MIN_DURATION = 2_000;\r\n// Maximum duration of an audio recording in milliseconds (10 min).\r\nexport const MAX_DURATION = 600_000;\r\n\r\n// Link for \"Contact Us\".\r\nexport const LINK_CONTACT_US = 'mailto:mahsgram@gmail.com';\r\n\r\n// Link to Privacy Policy.\r\nexport const LINK_PRIVACY_POLICY = 'https://payam.mahs.ir/privacy.html';\r\n\r\n// Link to Terms of Service.\r\nexport const LINK_TERMS_OF_SERVICE = 'https://payam.mahs.ir/terms.html';\r\n\r\n// When user starts a P2P topic, automatic subscription does not\r\n// happen until the first message. Setting this option to true enables\r\n// immediate subscription.\r\nexport const IMMEDIATE_P2P_SUBSCRIPTION = false;\r\n\r\n// URL schemes permitted to appear in links (i.e. no javascript: scheme).\r\nexport const CLICKABLE_URL_SCHEMES = ['http', 'https', 'ftp', 'ftps'];\r\n\r\n// Size of the QR code in the app.\r\nexport const QRCODE_SIZE = 128;\r\n","// File and image helper functions.\r\n\r\n// Supported image MIME types and corresponding file extensions.\r\nexport const SUPPORTED_IMAGE_FORMATS = ['image/jpeg', 'image/gif', 'image/png', 'image/svg', 'image/svg+xml'];\r\nexport const MIME_EXTENSIONS = ['jpg', 'gif', 'png', 'svg', 'svg'];\r\n\r\n// Get an URL from a theCard photo: either create a data: URL or return reference URL.\r\nexport function makeImageUrl(photo) {\r\n if (photo && typeof photo == 'object') {\r\n if (photo.ref) {\r\n return photo.ref\r\n }\r\n if (photo.data && photo.type) {\r\n const mime = photo.type.startsWith('image/') ? photo.type : ('image/' + photo.type);\r\n return 'data:' + mime + ';base64,' + photo.data;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n// Calculate linear dimensions for scaling image down to fit under a certain size.\r\n// Returns an object which contains destination sizes, source sizes, and offsets\r\n// into source (when making square images).\r\nexport function fitImageSize(width, height, maxWidth, maxHeight, forceSquare) {\r\n // Sanitize input\r\n width = width | 0;\r\n height = height | 0;\r\n maxWidth = maxWidth | 0;\r\n maxHeight = maxHeight | 0;\r\n\r\n if (width <= 0 || height <= 0 || maxWidth <= 0 || maxHeight <= 0) {\r\n return null;\r\n }\r\n\r\n if (forceSquare) {\r\n maxWidth = maxHeight = Math.min(maxWidth, maxHeight);\r\n }\r\n\r\n const scale = Math.min(\r\n Math.min(width, maxWidth) / width,\r\n Math.min(height, maxHeight) / height\r\n );\r\n\r\n const size = {\r\n dstWidth: (width * scale) | 0,\r\n dstHeight: (height * scale) | 0,\r\n };\r\n\r\n if (forceSquare) {\r\n // Also calculate parameters for making the image square.\r\n size.dstWidth = size.dstHeight = Math.min(size.dstWidth, size.dstHeight);\r\n size.srcWidth = size.srcHeight = Math.min(width, height);\r\n size.xoffset = ((width - size.srcWidth) / 2) | 0;\r\n size.yoffset = ((height - size.srcWidth) / 2) | 0;\r\n } else {\r\n size.xoffset = size.yoffset = 0;\r\n size.srcWidth = width;\r\n size.srcHeight = height;\r\n }\r\n return size;\r\n}\r\n\r\n// Ensure file's extension matches mime content type\r\nexport function fileNameForMime(fname, mime) {\r\n const idx = SUPPORTED_IMAGE_FORMATS.indexOf(mime);\r\n if (idx < 0 || !fname) {\r\n // Unknown mime or empty name.\r\n return fname;\r\n }\r\n const ext = MIME_EXTENSIONS[idx];\r\n\r\n const at = fname.lastIndexOf('.');\r\n if (at >= 0) {\r\n fname = fname.substring(0, at);\r\n }\r\n return fname + '.' + ext;\r\n}\r\n\r\n// Scale uploaded image to fit under certain dimensions and byte size, optionally constraining to a square.\r\n// Returns a promise which is resolven on success or rejected on failure.\r\nexport function imageScaled(fileOrBlob, maxWidth, maxHeight, maxSize, forceSquare) {\r\n return new Promise((resolve, reject) => {\r\n const img = new Image();\r\n img.crossOrigin = 'Anonymous';\r\n img.onerror = function(err) {\r\n reject(new Error(\"Image format unrecognized\"));\r\n }\r\n img.onload = async function() {\r\n // Once the image is loaded, the URL is no longer needed.\r\n URL.revokeObjectURL(img.src);\r\n\r\n // Calculate the desired image dimensions.\r\n const dim = fitImageSize(img.width, img.height, maxWidth, maxHeight, forceSquare);\r\n if (!dim) {\r\n reject(new Error(\"Invalid image\"));\r\n return;\r\n }\r\n let canvas = document.createElement('canvas');\r\n canvas.width = dim.dstWidth;\r\n canvas.height = dim.dstHeight;\r\n let ctx = canvas.getContext('2d');\r\n ctx.imageSmoothingEnabled = true;\r\n ctx.drawImage(img, dim.xoffset, dim.yoffset, dim.srcWidth, dim.srcHeight,\r\n 0, 0, dim.dstWidth, dim.dstHeight);\r\n\r\n const mime = SUPPORTED_IMAGE_FORMATS.includes(fileOrBlob.type) ? fileOrBlob.type : 'image/jpeg';\r\n // Generate blob to check size of the image.\r\n let blob = await new Promise(resolve => canvas.toBlob(resolve, mime));\r\n if (!blob) {\r\n reject(new Error(\"Unsupported image format\"));\r\n return;\r\n }\r\n // Ensure the image is not too large. Shrink the image keeping the aspect ratio.\r\n // Do nothing if maxsize is <= 0.\r\n while (maxSize > 0 && blob.length > maxSize) {\r\n dim.dstWidth = (dim.dstWidth * 0.70710678118) | 0;\r\n dim.dstHeight = (dim.dstHeight * 0.70710678118) | 0;\r\n canvas.width = dim.dstWidth;\r\n canvas.height = dim.dstHeight;\r\n ctx = canvas.getContext('2d');\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n ctx.drawImage(img, dim.xoffset, dim.yoffset, dim.srcWidth, dim.srcHeight,\r\n 0, 0, dim.dstWidth, dim.dstHeight);\r\n blob = await new Promise(resolve => canvas.toBlob(resolve, mime));\r\n }\r\n\r\n canvas = null;\r\n resolve({mime: mime, blob: blob, width: dim.dstWidth, height: dim.dstHeight, name: fileNameForMime(fileOrBlob.name, mime)});\r\n };\r\n img.src = URL.createObjectURL(fileOrBlob);\r\n });\r\n}\r\n\r\n// Scale and crop image according to specified dimensions.\r\n// The coordinates are in unscaled image pixels, i.e. cut the rectangle first then scale it.\r\n// returns a promise.\r\nexport function imageCrop(mime, objURL, left, top, width, height, scale) {\r\n return new Promise((resolve, reject) => {\r\n const img = new Image();\r\n img.crossOrigin = 'Anonymous';\r\n img.onerror = _ => {\r\n reject(new Error(\"Image format unrecognized\"));\r\n };\r\n img.onload = _ => {\r\n // Once the image is loaded, the URL is no longer needed.\r\n URL.revokeObjectURL(img.src);\r\n\r\n let canvas = document.createElement('canvas');\r\n canvas.width = width * scale;\r\n canvas.height = height * scale;\r\n let ctx = canvas.getContext('2d');\r\n ctx.imageSmoothingEnabled = true;\r\n ctx.drawImage(img, left, top, width, height, 0, 0, canvas.width, canvas.height);\r\n\r\n mime = SUPPORTED_IMAGE_FORMATS.includes(mime) ? mime : 'image/jpeg';\r\n // Generate blob to check size of the image.\r\n canvas.toBlob((blob) => {\r\n // Allow GC.\r\n canvas = null;\r\n if (blob) {\r\n resolve({mime: mime, blob: blob, width: width, height: height});\r\n } else {\r\n reject(new Error(\"Unsupported image format\"));\r\n }\r\n }, mime);\r\n };\r\n img.src = objURL;\r\n });\r\n}\r\n\r\n// Convert file to base64 string.\r\nexport function fileToBase64(file) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onerror = _ => {\r\n reject(reader.error);\r\n };\r\n reader.onload = _ => {\r\n resolve({mime: file.type, bits: reader.result.split(',')[1], name: file.name});\r\n };\r\n reader.readAsDataURL(file);\r\n });\r\n}\r\n\r\n// Convert Blob to base64 string. Returns a promise resolved with the base64 string and mime.\r\nexport function blobToBase64(blob) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onerror = _ => {\r\n reject(reader.error);\r\n };\r\n reader.onload = _ => {\r\n resolve({mime: blob.type, bits: reader.result.split(',')[1]});\r\n };\r\n reader.readAsDataURL(blob);\r\n });\r\n}\r\n\r\n// File pasted from the clipboard. It's either an inline image or a file attachment.\r\nexport function filePasted(event, onImageSuccess, onAttachmentSuccess, onError) {\r\n const items = (event.clipboardData || event.originalEvent.clipboardData || {}).items;\r\n if (!items || !items.length) {\r\n return false;\r\n }\r\n\r\n for (let i in items) {\r\n const item = items[i];\r\n if (item.kind === 'file') {\r\n const file = item.getAsFile();\r\n if (!file) {\r\n console.error(\"Failed to get file object from pasted file item\", item.kind, item.type);\r\n onError(\"Failed to get file object from pasted file item\");\r\n continue;\r\n }\r\n if (file.type && file.type.split('/')[0] == 'image') {\r\n onImageSuccess(file);\r\n } else {\r\n onAttachmentSuccess(file);\r\n }\r\n // Indicate that the pasted data contains a file.\r\n return true;\r\n }\r\n }\r\n // No file found.\r\n return false;\r\n}\r\n\r\n// Get mime type from data URL header.\r\nexport function getMimeType(header) {\r\n var mime = /^data:(image\\/[-+a-z0-9.]+);base64/.exec(header);\r\n return (mime && mime.length > 1) ? mime[1] : null;\r\n}\r\n\r\n// Given length of a binary object in bytes, calculate the length after\r\n// base64 encoding.\r\nexport function base64EncodedLen(n) {\r\n return Math.floor((n + 2) / 3) * 4;\r\n}\r\n\r\n// Given length of a base64-encoded object, calculate decoded size of the\r\n// pbject in bytes.\r\nexport function base64DecodedLen(n) {\r\n return Math.floor(n / 4) * 3;\r\n}\r\n\r\n// Re-encode string to standard base64 encoding with padding.\r\n// The string may be base64-URL encoded without the padding.\r\nexport function base64ReEncode(str) {\r\n if (str) {\r\n str = str.replace(/-/g, '+').replace(/_/g, '/');\r\n try {\r\n str = btoa(atob(str));\r\n } catch(err) {\r\n console.error(\"Failed to base64 re-encode string.\", err);\r\n str = null;\r\n }\r\n }\r\n return str;\r\n}\r\n\r\n// Convert a base64 encoded string with the provided mime type into a Blob.\r\nexport function base64ToBlob(str, mime) {\r\n if (!str) {\r\n return null;\r\n }\r\n\r\n try {\r\n // Make blob.\r\n const bin = atob(str);\r\n const length = bin.length;\r\n const buf = new ArrayBuffer(length);\r\n const arr = new Uint8Array(buf);\r\n for (let i = 0; i < length; i++) {\r\n arr[i] = bin.charCodeAt(i);\r\n }\r\n\r\n return new Blob([buf], { type: mime });\r\n } catch(err) {\r\n console.error(\"Failed to convert base64 to blob: \", err);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function intArrayToBase64(arr) {\r\n if (!Array.isArray(arr)) {\r\n return null;\r\n }\r\n try {\r\n let bin = '';\r\n new Uint8Array(arr).forEach(b => bin += String.fromCharCode(b));\r\n return window.btoa(bin);\r\n } catch (err) {}\r\n return null;\r\n}\r\n\r\nexport function base64ToIntArray(b64) {\r\n const arr = [];\r\n try {\r\n const bin = window.atob(b64);\r\n [...bin].forEach(c => {\r\n arr.push(c.charCodeAt(0));\r\n });\r\n return arr;\r\n } catch (err) {}\r\n return null;\r\n}\r\n","// Helper functions for storing values in localStorage.\r\n// By default localStorage can store only strings, not objects or other types.\r\n\r\nexport default class LocalStorageUtil {\r\n // Replace old object with the new one.\r\n static setObject(key, value) {\r\n localStorage.setItem(key, JSON.stringify(value));\r\n }\r\n\r\n // Get stored object.\r\n static getObject(key) {\r\n const value = localStorage.getItem(key);\r\n return value && JSON.parse(value);\r\n }\r\n\r\n // Partially or wholly update stored object.\r\n static updateObject(key, value) {\r\n const oldVal = this.getObject(key);\r\n this.setObject(key, Object.assign(oldVal || {}, value));\r\n }\r\n\r\n // Just a wrapper.\r\n static removeItem(key) {\r\n localStorage.removeItem(key);\r\n }\r\n}\r\n","// Utility class for hash navigation.\r\n\r\nexport default class HashNavigation {\r\n // Parse hash as in http://www.example.com/path#hash as if it were\r\n // path and arguments.\r\n static parseUrlHash(hash) {\r\n // Split 'path/?args' into 'path/' and 'args', path -> parts[0], args->path[1].\r\n const parts = hash.split('?', 2);\r\n const params = {};\r\n let path = [];\r\n if (parts[0]) {\r\n path = parts[0].replace('#', '').split('/');\r\n }\r\n if (parts[1]) {\r\n parts[1].split('&').forEach((arg) => {\r\n // Can't use split() because the value may contain '='.\r\n const eq = arg.indexOf('=');\r\n if (eq > 0) {\r\n params[arg.slice(0, eq)] = decodeURIComponent(arg.slice(eq + 1));\r\n }\r\n });\r\n }\r\n return {path: path, params: params};\r\n }\r\n\r\n static navigateTo(url) {\r\n window.location.hash = url;\r\n }\r\n\r\n static composeUrlHash(path, params) {\r\n let url = path.join('/');\r\n const args = [];\r\n for (const key in params) {\r\n if (params.hasOwnProperty(key)) {\r\n if (params[key] !== undefined) {\r\n args.push(key + '=' + encodeURIComponent(params[key]));\r\n }\r\n }\r\n }\r\n if (args.length > 0) {\r\n url += '?' + args.join('&');\r\n }\r\n return url;\r\n }\r\n\r\n static addUrlParam(hash, key, value) {\r\n const parsed = HashNavigation.parseUrlHash(hash);\r\n parsed.params[key] = value;\r\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\r\n }\r\n\r\n static removeUrlParam(hash, key) {\r\n const parsed = HashNavigation.parseUrlHash(hash);\r\n delete parsed.params[key];\r\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\r\n }\r\n\r\n static setUrlSidePanel(hash, sidepanel) {\r\n const parsed = HashNavigation.parseUrlHash(hash);\r\n parsed.path[0] = sidepanel;\r\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\r\n }\r\n\r\n static setUrlInfoPanel(hash, infopanel) {\r\n const parsed = HashNavigation.parseUrlHash(hash);\r\n if (infopanel) {\r\n parsed.params.info = infopanel;\r\n } else {\r\n delete parsed.params.info;\r\n }\r\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\r\n }\r\n\r\n static setUrlTopic(hash, topic) {\r\n const parsed = HashNavigation.parseUrlHash(hash);\r\n parsed.path[1] = topic;\r\n // Close InfoView on topic change.\r\n delete parsed.params.info;\r\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\r\n }\r\n}\r\n","// Short representation of time in the past.\r\nexport function shortDateFormat(then, locale) {\r\n locale = locale || window.navigator.userLanguage || window.navigator.language;\r\n const now = new Date();\r\n if (then.getFullYear() == now.getFullYear()) {\r\n // Same year.\r\n if (then.getMonth() == now.getMonth() && then.getDate() == now.getDate()) {\r\n // Same month and day, show time only.\r\n return then.toLocaleTimeString(locale, {hour12: false, hour: '2-digit', minute: '2-digit'});\r\n }\r\n // Different month and/or day, show month day, time.\r\n return then.toLocaleDateString(locale,\r\n {hour12: false, month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit'});\r\n }\r\n // Different year: just show the date.\r\n return then.toLocaleDateString(locale, {year: 'numeric', month: 'short', day: 'numeric'});\r\n}\r\n\r\n// Representation a date relative to now.\r\nexport function relativeDateFormat(then, locale) {\r\n locale = locale || window.navigator.userLanguage || window.navigator.language;\r\n const now = new Date();\r\n const thenDays = Math.floor((then.getTime() - then.getTimezoneOffset() * 60_000) / 86_400_000);\r\n const nowDays = Math.floor((now.getTime() - now.getTimezoneOffset() * 60_000) / 86_400_000);\r\n const diff = thenDays - nowDays;\r\n if (Math.abs(diff) < 2) {\r\n // Today or yesterday.\r\n return new Intl.RelativeTimeFormat(locale, { numeric: 'auto' }).format(diff, 'day')\r\n }\r\n // More than two days: just show the date.\r\n return new Intl.DateTimeFormat(locale).format(then);\r\n}\r\n\r\n// Convert seconds to [hours:]minutes:seconds, i.e. 156 sec -> 2:36, 3756 sec -> 1:02:36.\r\n// If fixedMins is true, then minutes are represented by at least two digits.\r\nexport function secondsToTime(seconds, fixedMin) {\r\n if (typeof seconds != 'number') {\r\n return '';\r\n }\r\n\r\n let min = (Math.floor(seconds / 60) | 0) % 60;\r\n let hours = Math.floor(seconds / 3600) | 0;\r\n\r\n if (fixedMin || hours > 0) {\r\n min = min < 10 ? `0${min}` : min;\r\n }\r\n let sec = (seconds | 0) % 60;\r\n sec = sec < 10 ? `0${sec}` : sec;\r\n if (hours == 0) {\r\n return `${min}:${sec}`;\r\n }\r\n return `${hours}:${min}:${sec}`;\r\n}\r\n\r\n// Convert a number of bytes to human-readable format.\r\nexport function bytesToHumanSize(bytes) {\r\n if (!bytes || bytes == 0) {\r\n return '0 Bytes';\r\n }\r\n\r\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\r\n const bucket = Math.min(Math.floor(Math.log2(bytes) / 10) | 0, sizes.length-1);\r\n const count = bytes / Math.pow(1024, bucket);\r\n const round = bucket > 0 ? (count < 3 ? 2 : (count < 30 ? 1 : 0)) : 0;\r\n return count.toFixed(round) + ' ' + sizes[bucket];\r\n}\r\n\r\n// Shorten a file name to be under maxLength by clipping out the middle.\r\nexport function shortenFileName(filename, maxLength) {\r\n if (typeof filename != 'string') {\r\n return filename;\r\n }\r\n return filename.length > maxLength ?\r\n filename.slice(0, maxLength/2 - 1) + '…' + filename.slice(1 - maxLength/2) : filename;\r\n}\r\n\r\n// Get 32 bit integer hash value for a string. Ideally it should produce the same value\r\n// as Java's String#hash().\r\nfunction stringToColorHash(value) {\r\n let hash = 0;\r\n value = '' + value;\r\n for (let i = 0; i < value.length; i++) {\r\n hash = ((hash << 5) - hash) + value.charCodeAt(i);\r\n hash = hash & hash; // Convert to 32bit integer\r\n }\r\n return hash;\r\n}\r\n\r\n// User avatar letter color id.\r\nexport function letterTileColorId(userId) {\r\n return Math.abs(stringToColorHash(userId)) % 16;\r\n}\r\n\r\n// Converts user or topic ID to a CSS color class. Ideally it should produce the same color value as Java version.\r\n// params:\r\n// - {string} id: user or topic ID\r\n// - {boolean} light: light or dark version of the color.\r\n// - {boolean} fg: foreground (text) or background color.\r\nexport function idToColorClass(id, light, fg) {\r\n return (light ? 'lt-' : 'dk-') + (fg ? 'fg-' : 'bg-') + letterTileColorId(id);\r\n}\r\n\r\n// Takes ISO Alpha-2 country code, like 'US' and converts it to a flag emoji.\r\nexport function flagEmoji(countryCode) {\r\n const codePoints = countryCode\r\n .toUpperCase()\r\n .split('')\r\n .map(char => 0x1F1A5 + char.charCodeAt());\r\n return String.fromCodePoint(...codePoints);\r\n}\r\n","// Odds and ends\r\n\r\nimport { Tinode } from 'tinode-sdk';\r\n\r\n// Make shortcut icon appear with a green dot + show unread count in title.\r\nexport function updateFavicon(count) {\r\n const oldIcon = document.getElementById('shortcut-icon');\r\n const head = document.head || document.getElementsByTagName('head')[0];\r\n const newIcon = document.createElement('link');\r\n newIcon.type = 'image/png';\r\n newIcon.id = 'shortcut-icon';\r\n newIcon.rel = 'shortcut icon';\r\n newIcon.href = 'img/logo32x32' + (count > 0 ? 'a' : '') + '.png';\r\n if (oldIcon) {\r\n head.removeChild(oldIcon);\r\n }\r\n head.appendChild(newIcon);\r\n\r\n document.title = (count > 0 ? '('+count+') ' : '') + 'MahsPayam';\r\n}\r\n\r\n// Create theCard which represents user's or topic's \"public\" info.\r\nexport function theCard(fn, imageUrl, imageMimeType, note) {\r\n let card = null;\r\n fn = fn && fn.trim();\r\n note = note && note.trim();\r\n\r\n if (fn) {\r\n card = {\r\n fn: fn\r\n };\r\n }\r\n\r\n if (typeof note == 'string') {\r\n card = card || {};\r\n card.note = note ? note : Tinode.DEL_CHAR;\r\n }\r\n\r\n if (imageUrl) {\r\n card = card || {};\r\n let mimeType = imageMimeType;\r\n // Is this a data URL \"data:[][;base64],\"?\r\n const matches = /^data:(image\\/[-a-z0-9+.]+)?(;base64)?,/i.exec(imageUrl);\r\n if (matches) {\r\n mimeType = matches[1];\r\n card.photo = {\r\n data: imageUrl.substring(imageUrl.indexOf(',') + 1),\r\n ref: Tinode.DEL_CHAR\r\n };\r\n } else {\r\n card.photo = {\r\n data: Tinode.DEL_CHAR,\r\n ref: imageUrl\r\n };\r\n }\r\n card.photo.type = (mimeType || 'image/jpeg').substring('image/'.length);\r\n }\r\n\r\n return card;\r\n}\r\n\r\n// Deep-shallow compare two arrays: shallow compare each element.\r\nexport function arrayEqual(a, b) {\r\n if (a === b) {\r\n return true;\r\n }\r\n\r\n if (!Array.isArray(a) || !Array.isArray(b)) {\r\n return false;\r\n }\r\n\r\n // Compare lengths first.\r\n if (a.length != b.length) {\r\n return false;\r\n }\r\n // Order of elements is ignored.\r\n a.sort();\r\n b.sort();\r\n for (let i = 0, l = a.length; i < l; i++) {\r\n if (a[i] !== b[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n\r\n// Checks (loosely) if the given string is a phone. If so, returns the phone number in a format\r\n// as close to E.164 as possible.\r\nexport function asPhone(val) {\r\n val = val.trim();\r\n if (/^(?:\\+?(\\d{1,3}))?[- (.]*(\\d{3})[- ).]*(\\d{3})[- .]*(\\d{2})[- .]*(\\d{2})?$/.test(val)) {\r\n return val.replace(/[- ().]*/, '');\r\n }\r\n return null;\r\n}\r\n\r\n// Checks (loosely) if the given string is an email. If so returns the email.\r\nexport function asEmail(val) {\r\n val = val.trim();\r\n if (/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$/.test(val)) {\r\n return val;\r\n }\r\n return null;\r\n}\r\n\r\n// Checks if URL is a relative url, i.e. has no 'scheme://', including the case of missing scheme '//'.\r\n// The scheme is expected to be RFC-compliant, e.g. [a-z][a-z0-9+.-]*\r\n// example.html - ok\r\n// https:example.com - not ok.\r\n// http:/example.com - not ok.\r\n// //example.com or \\\\example.com - not ok.\r\n// ' ↲ https://example.com' - not ok. (↲ means carriage return)\r\nexport function isUrlRelative(url) {\r\n // Replacing backslashes with forward slashes to mimic JS URL parser then testing for\r\n // 'scheme:' and '//' with optional space at the start.\r\n return url && !/^\\s*([a-z][a-z0-9+.-]*:|\\/\\/)/im.test(url.replace(/\\\\/g, '/'));\r\n}\r\n\r\n// Ensure URL does not present an XSS risk. Optional allowedSchemes may contain an array of\r\n// strings with permitted URL schemes, such as ['ftp', 'ftps']; otherwise accept http and https only.\r\nexport function sanitizeUrl(url, allowedSchemes) {\r\n if (typeof url != 'string') {\r\n return url;\r\n }\r\n\r\n // Strip control characters and whitespace. They are not valid URL characters anyway.\r\n url = url.replace(/[^\\x21-\\x7E]/gmi, '').trim();\r\n\r\n // Replace backslashes with forward slashes. They will be replaced in the URL parser anyway.\r\n url = url.replace(/\\\\/g, '/');\r\n\r\n // Relative URLs are safe.\r\n // Relative URL does not start with ':', abcd123: or '//'.\r\n if (!/^([a-z][a-z0-9+.-]*:|\\/\\/)/i.test(url)) {\r\n return url;\r\n }\r\n\r\n // Blob URLs are safe.\r\n if (/^blob:http/.test(url)) {\r\n return url;\r\n }\r\n\r\n // Absolute URL. Accept only safe schemes, or no scheme.\r\n const schemes = Array.isArray(allowedSchemes) ? allowedSchemes.join('|') : 'http|https';\r\n const re = new RegExp('^((' + schemes + '):|//)', 'i');\r\n if (!re.test(url)) {\r\n return null;\r\n }\r\n\r\n return url;\r\n}\r\n\r\n// Ensure URL is suitable as a source like field: the URL must be a relative URL or\r\n// have http:, https:, blob: or data: scheme.\r\n// In case of data: scheme, the URL must must be of the right MIME type such as 'data:{mimeMajor}/XXXX;base64,'.\r\nexport function sanitizeUrlForMime(url, mimeMajor) {\r\n if (!url) {\r\n return null;\r\n }\r\n\r\n const sanitizedUrl = sanitizeUrl(url);\r\n if (sanitizedUrl) {\r\n return sanitizedUrl;\r\n }\r\n\r\n // Is this a data: URL of the appropriate mime type?\r\n const re = new RegExp(`data:${mimeMajor}\\/[a-z0-9.-]+;base64,`, 'i');\r\n if (re.test(url.trim())) {\r\n return url;\r\n }\r\n\r\n return null;\r\n}\r\n\r\n// Append query parameter 'asatt=1' to the URL.\r\n// It will cause Tinode server to add 'Content-Disposition: attachment' header when serving it.\r\n// The URL is a string. The URL here is always absolute.\r\nexport function urlAsAttachment(url) {\r\n // TODO: check if URL is local or remote, i.e. compare to window.location.origin.\r\n /*\r\n if (typeof window.location == 'object') {\r\n if (!url.startsWith(window.location.origin)) {\r\n return url;\r\n }\r\n }\r\n */\r\n // Check if the URL is a data or blob. Do not alter such URLs.\r\n if (url.startsWith('data:') || url.startsWith('blob:')) {\r\n return url;\r\n }\r\n\r\n // Split URL into host+path, query, fragment.\r\n let query = '', fragment = '';\r\n const idxF = url.indexOf('#');\r\n if (idxF > 0) {\r\n fragment = url.substring(idxF+1);\r\n url = url.substring(0, idxF);\r\n }\r\n const idxQ = url.indexOf('?');\r\n if (idxQ > 0) {\r\n query = url.substring(idxQ+1);\r\n url = url.substring(0, idxQ);\r\n }\r\n // Add parameter and reassemble.\r\n const params = new URLSearchParams(query);\r\n params.append('asatt', '1');\r\n return `${url}?${params.toString()}` + (fragment ? `#${fragment}` : '');\r\n}\r\n\r\n// Given message's received status, return name and color of a delivery indicator icon.\r\nexport function deliveryMarker(received) {\r\n switch (received) {\r\n case Tinode.MESSAGE_STATUS_SENDING:\r\n return { name: 'access_time' }; // watch face\r\n case Tinode.MESSAGE_STATUS_FAILED:\r\n case Tinode.MESSAGE_STATUS_FATAL:\r\n return { name: 'warning', color: 'danger-color' }; // yellow icon /!\\\r\n case Tinode.MESSAGE_STATUS_SENT:\r\n return { name: 'done' }; // checkmark\r\n case Tinode.MESSAGE_STATUS_RECEIVED:\r\n return { name: 'done_all' }; // double checkmark\r\n case Tinode.MESSAGE_STATUS_READ:\r\n return { name: 'done_all', color: 'blue' }; // blue double checkmark\r\n }\r\n return null;\r\n}\r\n\r\n// Wraps a promise to make it cancelable.\r\n// The parameter can be either a promise or an error. If it's an error, the wrapped promise is\r\n// created in a rejected state.\r\nexport function cancelablePromise(promise) {\r\n let hasCanceled = false;\r\n\r\n const wrappedPromise = promise instanceof Error ?\r\n Promise.reject(promise) :\r\n new Promise((resolve, reject) => {\r\n promise.then(\r\n result => hasCanceled ? reject({isCanceled: true}) : resolve(result),\r\n error => hasCanceled ? reject({isCanceled: true}) : reject(error)\r\n );\r\n });\r\n\r\n return {\r\n promise: wrappedPromise,\r\n cancel() {\r\n hasCanceled = true;\r\n },\r\n };\r\n};\r\n\r\n// Clips string to the specified length.\r\nexport function clipStr(str, length) {\r\n return str && str.substring(0, length);\r\n}\r\n","// Audio recorder widget.\r\n\r\nimport React from 'react';\r\nimport { defineMessages, injectIntl } from 'react-intl';\r\n\r\nimport { secondsToTime } from '../lib/strformat';\r\nimport { base64ToIntArray } from '../lib/blob-helpers';\r\n\r\n// Make canvas bigger than the element size to reduce blurring.\r\nconst CANVAS_UPSCALING = 2.0;\r\n// Thickness of a visualization bar.\r\nconst LINE_WIDTH = 3 * CANVAS_UPSCALING;\r\n// Spacing between two visualization bars.\r\nconst SPACING = 2 * CANVAS_UPSCALING;\r\n// Color of histogram bars.\r\nconst BAR_COLOR = '#888A';\r\nconst BAR_COLOR_DARK = '#666C';\r\nconst THUMB_COLOR = '#444E';\r\n// Minimum number of amplitude bars to draw.\r\nconst MIN_PREVIEW_LENGTH = 16;\r\n\r\nconst messages = defineMessages({\r\n icon_title_play: {\r\n id: 'icon_title_play',\r\n defaultMessage: 'Play recording',\r\n description: 'Icon tool tip for starting audio playback'\r\n }\r\n});\r\n\r\nclass AudioPlayer extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n let preview = base64ToIntArray(this.props.preview);\r\n if (!Array.isArray(preview) || preview.length < MIN_PREVIEW_LENGTH) {\r\n preview = null;\r\n }\r\n\r\n this.state = {\r\n canPlay: false,\r\n playing: false,\r\n currentTime: '0:00',\r\n duration: this.props.duration > 0 ? secondsToTime(this.props.duration / 1000) : '-:--',\r\n longMin: this.props.duration >= 600000,\r\n preview: preview\r\n };\r\n\r\n this.initAudio = this.initAudio.bind(this);\r\n this.initCanvas = this.initCanvas.bind(this);\r\n this.resampleBars = this.resampleBars.bind(this);\r\n this.visualize = this.visualize.bind(this);\r\n\r\n this.handlePlay = this.handlePlay.bind(this);\r\n this.handleSeek = this.handleSeek.bind(this);\r\n this.handleError = this.handleError.bind(this);\r\n\r\n this.audioPlayer = null;\r\n\r\n this.viewBuffer = [];\r\n this.canvasRef = React.createRef();\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.src) {\r\n this.initAudio();\r\n }\r\n\r\n this.initCanvas();\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.audioPlayer) {\r\n this.audioPlayer.onloadedmetadata = null;\r\n this.audioPlayer.ontimeupdate = null;\r\n this.audioPlayer.onended = null;\r\n this.audioPlayer.pause();\r\n this.audioPlayer = null;\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (this.props.src != prevProps.src) {\r\n this.initAudio();\r\n }\r\n\r\n if (this.props.preview != prevProps.preview) {\r\n let preview = base64ToIntArray(this.props.preview);\r\n if (!Array.isArray(preview) || preview.length < MIN_PREVIEW_LENGTH) {\r\n preview = null;\r\n }\r\n this.setState({preview: preview}, this.initCanvas);\r\n }\r\n }\r\n\r\n initAudio() {\r\n this.audioPlayer = new Audio(this.props.src);\r\n this.audioPlayer.onloadedmetadata = _ => this.setState({canPlay: true});\r\n this.audioPlayer.ontimeupdate = _ => this.setState({\r\n currentTime: secondsToTime(this.audioPlayer.currentTime, this.state.longMin)\r\n });\r\n this.audioPlayer.onended = _ => {\r\n this.audioPlayer.currentTime = 0;\r\n this.setState({playing: false, currentTime: secondsToTime(0, this.state.longMin)})\r\n }\r\n }\r\n\r\n initCanvas() {\r\n // Force canvas aspect ratio to match one of the element + upscale canvas to reduce blurring.\r\n this.canvasRef.current.width = this.canvasRef.current.offsetWidth * CANVAS_UPSCALING;\r\n this.canvasRef.current.height = this.canvasRef.current.offsetHeight * CANVAS_UPSCALING;\r\n\r\n this.canvasContext = this.canvasRef.current.getContext('2d');\r\n this.canvasContext.lineCap = 'round';\r\n\r\n this.viewBuffer = this.resampleBars(this.state.preview);\r\n this.visualize();\r\n }\r\n\r\n // Draw amplitude of sound.\r\n visualize() {\r\n if (!this.canvasRef.current) {\r\n return;\r\n }\r\n\r\n const width = this.effectiveWidth;\r\n const height = this.canvasRef.current.height;\r\n\r\n this.canvasContext.lineWidth = LINE_WIDTH;\r\n\r\n const drawFrame = _ => {\r\n if (!this.canvasRef.current || !this.audioPlayer) {\r\n // The component is unmounted.\r\n return;\r\n }\r\n\r\n this.canvasContext.clearRect(0, 0, this.canvasRef.current.width, height);\r\n\r\n if (this.viewBuffer) {\r\n if (this.state.playing) {\r\n window.requestAnimationFrame(drawFrame);\r\n }\r\n\r\n // Current playback position.\r\n const thumbAt = this.props.duration ?\r\n Math.max(0, Math.min(this.audioPlayer.currentTime * 1000 / this.props.duration, 1)) * (width - LINE_WIDTH * 2) : -1;\r\n\r\n // Draw amplitude bars.\r\n this.canvasContext.beginPath();\r\n this.canvasContext.strokeStyle = BAR_COLOR_DARK;\r\n for (let i = 0; i < this.viewBuffer.length; i++) {\r\n let x = 1 + i * (LINE_WIDTH + SPACING) + LINE_WIDTH * 0.5;\r\n let y = Math.max(this.viewBuffer[i] * height * 0.9, 1);\r\n\r\n const color = x < thumbAt ? BAR_COLOR_DARK : BAR_COLOR;\r\n if (this.canvasContext.strokeStyle != color) {\r\n this.canvasContext.stroke();\r\n this.canvasContext.beginPath();\r\n this.canvasContext.strokeStyle = color;\r\n }\r\n\r\n this.canvasContext.moveTo(x, (height - y) * 0.5);\r\n this.canvasContext.lineTo(x, (height + y) * 0.5);\r\n }\r\n // Actually draw the bars on canvas.\r\n this.canvasContext.stroke();\r\n\r\n // Draw thumb.\r\n if (this.props.duration) {\r\n this.canvasContext.beginPath();\r\n this.canvasContext.arc(thumbAt + LINE_WIDTH * 2, height * 0.5, LINE_WIDTH * 2, 0, 2 * Math.PI);\r\n this.canvasContext.fillStyle = THUMB_COLOR;\r\n this.canvasContext.fill();\r\n }\r\n }\r\n }\r\n\r\n drawFrame();\r\n }\r\n\r\n // Quick and dirty downsampling of the original preview bars into a smaller (or equal) number of bars we can display here.\r\n resampleBars(original) {\r\n const dstCount = ((this.canvasRef.current.width - SPACING) / (LINE_WIDTH + SPACING)) | 0;\r\n // Remove extra padding on the right due to fractional bar which is not drawn.\r\n this.effectiveWidth = dstCount * (LINE_WIDTH + SPACING) + SPACING;\r\n\r\n if (!Array.isArray(original) || original.length == 0) {\r\n return Array.apply(null, Array(dstCount)).map(_ => 0.01);\r\n }\r\n\r\n const factor = original.length / dstCount;\r\n let amps = [];\r\n let maxAmp = -1;\r\n for (let i=0; i 0) {\r\n return amps.map(a => a / maxAmp);\r\n }\r\n return Array.apply(null, Array(dstCount)).map(_ => 0.01);\r\n }\r\n\r\n handlePlay(e) {\r\n e.preventDefault();\r\n if (!this.state.canPlay) {\r\n return;\r\n }\r\n\r\n if (this.state.playing) {\r\n this.audioPlayer.pause();\r\n this.setState({playing: false});\r\n } else if (this.audioPlayer.readyState >= 2) {\r\n this.audioPlayer.play();\r\n this.setState({playing: true}, this.visualize);\r\n }\r\n }\r\n\r\n handleError(err) {\r\n console.error(err);\r\n }\r\n\r\n handleSeek(e) {\r\n e.preventDefault();\r\n if (e.target && this.props.duration) {\r\n const rect = e.target.getBoundingClientRect();\r\n const offset = (e.clientX - rect.left) / this.effectiveWidth * CANVAS_UPSCALING;\r\n this.audioPlayer.currentTime = this.props.duration * offset / 1000;\r\n this.setState({currentTime: secondsToTime(this.audioPlayer.currentTime, this.state.longMin)});\r\n if (!this.state.playing) {\r\n this.visualize();\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n const playClass = 'material-icons' +\r\n (this.props.short ? '' : ' large') +\r\n (this.state.canPlay ? '' : ' disabled');\r\n const play = (\r\n {this.state.playing ? 'pause_circle' :\r\n (this.state.canPlay ? 'play_circle' : 'not_interested')}\r\n );\r\n return (
{this.props.short ?\r\n <>\r\n \r\n {play}\r\n \r\n :\r\n <>\r\n {play}\r\n
\r\n \r\n
{this.state.currentTime}/{this.state.duration}
\r\n
\r\n \r\n }\r\n
);\r\n }\r\n}\r\n\r\nexport default injectIntl(AudioPlayer);\r\n","// Image zoom and crop widget.\r\n\r\nimport React from 'react';\r\n\r\nconst DEFAULT_MAX_ZOOM = 2.5;\r\n\r\nexport default class Cropper extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n // Coordinates of the top left corner of the image in container coordinates.\r\n panX: 0,\r\n panY: 0,\r\n // Origin of the zoom in image coordinates.\r\n originX: 0,\r\n originY: 0,\r\n // Zoom scale.\r\n zoom: 1,\r\n // Zoom min and max.\r\n minZoom: 0,\r\n maxZoom: DEFAULT_MAX_ZOOM,\r\n };\r\n\r\n // References to DOM elements for hooking up events and getting screen dimensions.\r\n // The transparent element which captures mouse moves (moves with the image).\r\n this.overlay = React.createRef();\r\n // The image cutout window or view port (static).\r\n this.cutout = React.createRef();\r\n // Scaled and translated image preview.\r\n this.preview = React.createRef();\r\n // The main container (static).\r\n this.boundingBox = React.createRef();\r\n\r\n // The original image width and height before any scaling.\r\n this.imageWidth = 0;\r\n this.imageHeight = 0;\r\n\r\n // Mouse position when dragging.\r\n this.mouseX = 0\r\n this.mouseY = 0;\r\n // Length of the previous mouse move when dragging.\r\n this.prevDistance = 0;\r\n\r\n // Bounding rectangles of static elements.\r\n this.cutoutRect = {};\r\n this.bBoxRect = {};\r\n // Center of the bounding box.\r\n this.originX = 0;\r\n this.originY = 0;\r\n\r\n this.initScaling = this.initScaling.bind(this);\r\n this.onZoom = this.onZoom.bind(this);\r\n this.handleZoom = this.handleZoom.bind(this);\r\n this.mouseDown = this.mouseDown.bind(this);\r\n this.mouseUp = this.mouseUp.bind(this);\r\n this.mouseMove = this.mouseMove.bind(this);\r\n this.mouseTouch = this.mouseTouch.bind(this);\r\n this.positionAll = this.positionAll.bind(this);\r\n this.translate = this.translate.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n this.overlay.current.addEventListener('mousedown', this.mouseDown, { passive: true });\r\n this.overlay.current.addEventListener('touchstart', this.mouseDown, { passive: true });\r\n\r\n // The rectangle position is in viewport coordinates.\r\n this.bBoxRect = this.boundingBox.current.getBoundingClientRect();\r\n // Center of the bounding box in container coordinates.\r\n this.originX = this.bBoxRect.width / 2;\r\n this.originY = this.bBoxRect.height / 2;\r\n\r\n // The rectangle position is in viewport coordinates.\r\n this.cutoutRect = this.cutout.current.getBoundingClientRect();\r\n }\r\n\r\n componentWillUnmount() {\r\n this.overlay.current.removeEventListener('mousedown', this.mouseDown);\r\n this.overlay.current.removeEventListener('touchstart', this.mouseDown);\r\n }\r\n\r\n // Position all elements.\r\n positionAll(panX, panY, zoom) {\r\n // Zoom origin in image preview coordinates.\r\n this.setState({\r\n panX: panX,\r\n panY: panY,\r\n zoom: zoom,\r\n originX: this.originX - panX,\r\n originY: this.originY - panY,\r\n });\r\n\r\n // Pass cut out coordinates to caller.\r\n const left = (this.originX - panX) * zoom - this.originX;\r\n const top = (this.originY - panY) * zoom - this.originY;\r\n this.props.onChange(\r\n (left + this.cutoutRect.left - this.bBoxRect.left) / zoom,\r\n (top + this.cutoutRect.top - this.bBoxRect.top) / zoom,\r\n this.cutoutRect.width / zoom,\r\n this.cutoutRect.height / zoom,\r\n zoom);\r\n }\r\n\r\n // Check if new location is within the limits.\r\n static checkBound(currPan, img, cutout, delta) {\r\n let nextDiff = Math.min(0, cutout[0] - img[0] - delta, img[1] - cutout[1] + delta);\r\n if (nextDiff == 0) {\r\n // Cutout is completely within the image.\r\n currPan += delta;\r\n } else if (Math.min(0, cutout[0] - img[0], img[1] - cutout[1]) < nextDiff) {\r\n // Cutout is outside of the range but closer to the bound.\r\n currPan += delta;\r\n }\r\n return currPan;\r\n }\r\n\r\n initScaling() {\r\n // Initialize components.\r\n const imgRect = this.preview.current.getBoundingClientRect();\r\n\r\n this.imageWidth = imgRect.width;\r\n this.imageHeight = imgRect.height;\r\n\r\n // Set zoom slider's min and max values. Make sure the scaled image cannot be smaller than the cutout.\r\n const minZoom = Math.max(this.cutoutRect.width / imgRect.width, this.cutoutRect.height / imgRect.height);\r\n this.setState({\r\n minZoom: minZoom,\r\n maxZoom: Math.max(DEFAULT_MAX_ZOOM, minZoom + 1)\r\n });\r\n\r\n // Initial zoom level fills the bounding box at the smallest image dimension and overflows the largest, i.e. \"fill\" not \"fit\".\r\n const zoom = Math.max(this.bBoxRect.width / imgRect.width, this.bBoxRect.height / imgRect.height);\r\n // Converting from viewport coordinates to container, then panning.\r\n const panX = this.cutoutRect.left - this.bBoxRect.left -\r\n (imgRect.width - this.cutoutRect.width) / 2;\r\n const panY = this.cutoutRect.top - this.bBoxRect.top -\r\n (imgRect.height - this.cutoutRect.height) / 2;\r\n\r\n this.positionAll(panX, panY, zoom);\r\n }\r\n\r\n onZoom(e) {\r\n this.handleZoom(e.target.value);\r\n }\r\n\r\n handleZoom(zoom) {\r\n let panX = this.state.panX;\r\n let panY = this.state.panY;\r\n\r\n // Ensure that the image at the new zoom is not outside of the cutout boundaries.\r\n // Calculate image coordinates at the new zoom.\r\n const imgLeft = this.originX - (this.originX - panX) * zoom;\r\n const imgRight = imgLeft + this.imageWidth * zoom;\r\n // Cutout in the same coordinates as the image.\r\n const coLeft = this.cutoutRect.left - this.bBoxRect.left;\r\n const coRight = coLeft + this.cutoutRect.width;\r\n if (coLeft < imgLeft) {\r\n panX -= imgLeft - coLeft;\r\n } else if (coRight > imgRight) {\r\n panX += coRight - imgRight;\r\n }\r\n const imgTop = this.originY - (this.originY - panY) * zoom;\r\n const imgBottom = imgTop + this.imageHeight * zoom;\r\n const coTop = this.cutoutRect.top - this.bBoxRect.top;\r\n const coBottom = coTop + this.cutoutRect.height;\r\n if (coTop < imgTop) {\r\n panY -= imgTop - coTop;\r\n } else if (coBottom > imgBottom) {\r\n panY += coBottom - imgBottom;\r\n }\r\n\r\n this.positionAll(panX, panY, zoom);\r\n }\r\n\r\n mouseDown(e) {\r\n if (e.touches) {\r\n this.mouseX = e.touches[0].pageX;\r\n this.mouseY = e.touches[0].pageY;\r\n } else {\r\n this.mouseX = e.pageX;\r\n this.mouseY = e.pageY;\r\n }\r\n\r\n window.addEventListener('mousemove', this.mouseMove, { passive: false });\r\n window.addEventListener('touchmove', this.mouseTouch, { passive: false });\r\n window.addEventListener('mouseup', this.mouseUp, { passive: true });\r\n window.addEventListener('touchend', this.mouseUp, { passive: true });\r\n // Disable text selection in the entire document.\r\n document.body.style['userSelect'] = 'none';\r\n }\r\n\r\n // Perform image panning.\r\n translate(pageX, pageY) {\r\n const dX = pageX - this.mouseX;\r\n const dY = pageY - this.mouseY;\r\n\r\n this.mouseX = pageX;\r\n this.mouseY = pageY;\r\n\r\n // Make sure the image is within the cutout window.\r\n const imgRect = this.preview.current.getBoundingClientRect();\r\n\r\n // Check if the new position is within the boundaries, and if not if it's closer to them.\r\n let panX = Cropper.checkBound(this.state.panX, [imgRect.left, imgRect.right],\r\n [this.cutoutRect.left, this.cutoutRect.right], dX);\r\n let panY = Cropper.checkBound(this.state.panY, [imgRect.top, imgRect.bottom],\r\n [this.cutoutRect.top, this.cutoutRect.bottom], dY);\r\n\r\n this.positionAll(panX, panY, this.state.zoom);\r\n }\r\n\r\n // Image panning.\r\n mouseMove(e) {\r\n e.preventDefault();\r\n this.translate(e.pageX, e.pageY);\r\n }\r\n\r\n mouseTouch(e) {\r\n e.preventDefault();\r\n\r\n if (e.touches.length == 1) {\r\n this.translate(e.touches[0].pageX, e.touches[0].pageY);\r\n return;\r\n }\r\n\r\n // Image zooming by pinching.\r\n const [touch0, touch1] = e.touches;\r\n const distance = Math.sqrt((touch0.pageX - touch1.pageX) * (touch0.pageX - touch1.pageX) +\r\n (touch0.pageY - touch1.pageY) * (touch0.pageY - touch1.pageY));\r\n\r\n if (!this.prevDistance) {\r\n this.prevDistance = distance / this.state.zoom;\r\n }\r\n\r\n let scale = (distance / this.prevDistance);\r\n this.handleZoom(Math.max(this.minZoom, Math.min(this.maxZoom, scale)));\r\n }\r\n\r\n mouseUp(e) {\r\n window.removeEventListener('mousemove', this.mouseMove);\r\n window.removeEventListener('touchmove', this.mouseTouch);\r\n window.removeEventListener('mouseup', this.mouseUp);\r\n window.removeEventListener('touchend', this.mouseUp);\r\n // Re-enable text selection.\r\n document.body.style['userSelect'] = '';\r\n\r\n this.positionAll(this.state.panX, this.state.panY, this.state.zoom);\r\n }\r\n\r\n render() {\r\n // transform3d: position and scale.\r\n const t3d = `translate3d(${this.state.panX}px, ${this.state.panY}px, 0) scale(${this.state.zoom})`;\r\n // transformOrigin: zoom origin.\r\n const orig = `${this.state.originX}px ${this.state.originY}px`;\r\n\r\n // Overlay position and size are exactly equal to the position and size of the transformed image\r\n // except it uses different coordinates.\r\n const overlay = {\r\n top: `${this.originY - this.state.originY * this.state.zoom}px`,\r\n left: `${this.originX - this.state.originX * this.state.zoom}px`,\r\n width: `${this.imageWidth * this.state.zoom}px`,\r\n height: `${this.imageHeight * this.state.zoom}px`\r\n };\r\n return (\r\n
\r\n
\r\n \"\"\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n","// Edit account parameters.\r\nimport React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\nimport Cropper from './cropper.jsx';\r\nimport { imageCrop } from '../lib/blob-helpers.js';\r\n\r\nexport default class AvatarCrop extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n top: 0,\r\n left: 0,\r\n width: 0,\r\n height: 0,\r\n scale: 1\r\n };\r\n\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n }\r\n\r\n // Cut out in image coordinates and desired scale factor.\r\n handleChange(left, top, width, height, scale) {\r\n this.setState({\r\n left: left,\r\n top: top,\r\n width: width,\r\n height: height,\r\n scale: scale\r\n });\r\n }\r\n\r\n handleSubmit() {\r\n imageCrop(this.props.mime, this.props.avatar,\r\n this.state.left, this.state.top, this.state.width, this.state.height,\r\n this.state.scale)\r\n .then(img => {\r\n this.props.onSubmit(img.mime, img.blob, img.width, img.height);\r\n })\r\n .catch(err => {\r\n this.props.onError(err);\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n {this.props.onCancel ?\r\n \r\n : null}\r\n \r\n
\r\n
\r\n );\r\n }\r\n};\r\n","import React from 'react';\r\n\r\nimport LetterTile from './letter-tile.jsx';\r\nimport LoadSpinner from './load-spinner.jsx';\r\n\r\nimport { sanitizeUrlForMime } from '../lib/utils.js';\r\n\r\nimport { AVATAR_SIZE } from '../config.js';\r\n\r\nexport default class AvatarUpload extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n source: props.avatar\r\n };\r\n\r\n this.handleFileReceived = this.handleFileReceived.bind(this);\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (this.props.avatar != prevProps.avatar) {\r\n this.setState({source: this.props.avatar});\r\n }\r\n }\r\n\r\n handleFileReceived(e) {\r\n const image = e.target.files[0];\r\n this.props.onImageUpdated(image.type, URL.createObjectURL(image), image.name);\r\n // Clear the value so the same file can be uploaded again.\r\n e.target.value = '';\r\n }\r\n\r\n render() {\r\n // Randomize id value in case more than one AvatarUpload is shown\r\n // at the same time.\r\n const randId = 'file-input-avatar-' + ('' + Math.random()).substring(0, 4);\r\n const className = 'avatar-upload' + (this.props.readOnly ? ' read-only' : '');\r\n return (\r\n
\r\n {this.props.readOnly || !this.state.source ?\r\n null :\r\n {e.preventDefault(); this.props.onImageUpdated();}}>\r\n clear\r\n }\r\n {this.state.source ?\r\n :\r\n this.props.readOnly && this.props.uid ?\r\n
\r\n \r\n
\r\n :\r\n
{AVATAR_SIZE}×{AVATAR_SIZE}
}\r\n {this.props.readOnly ? null :\r\n }\r\n {this.props.readOnly ? null :\r\n }\r\n \r\n
\r\n );\r\n }\r\n};\r\n","import React from 'react';\r\nimport { defineMessages, injectIntl } from 'react-intl';\r\n\r\nconst icon_mapping = {'staff': 'verified_user'};\r\n\r\nconst messages = defineMessages({\r\n badge_verified: {\r\n id: 'badge_verified',\r\n defaultMessage: 'Verified/official',\r\n description: 'Explanation of a verified account or topic badge'\r\n },\r\n badge_staff: {\r\n id: 'badge_staff',\r\n defaultMessage: 'Staff-managed',\r\n description: 'Explanation of a staff-managed account or topic badge'\r\n },\r\n badge_danger: {\r\n id: 'badge_danger',\r\n defaultMessage: 'Untrustworthy',\r\n description: 'Suspicious or untrustworthy account or topic badge'\r\n },\r\n});\r\n\r\n\r\n/* Trusted badges with labels: verified, staff, danger */\r\nclass BadgeList extends React.PureComponent {\r\n render() {\r\n const {formatMessage} = this.props.intl;\r\n let badges = null;\r\n if (this.props.trustedBadges && this.props.trustedBadges.length > 0) {\r\n badges = [];\r\n this.props.trustedBadges.map((b) => {\r\n const comment = this.props.short ? null : formatMessage(messages['badge_' + b]);\r\n const style = 'material-icons ' + b + '-color';\r\n badges.push(
{icon_mapping[b] || b} {comment}
);\r\n });\r\n return <>{badges};\r\n }\r\n return null;\r\n }\r\n};\r\n\r\nexport default injectIntl(BadgeList);\r\n","import React from 'react';\r\n\r\n/* CheckBox: styled three-state checkbox, either clickable or static */\r\nexport default class CheckBox extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.handleChange = this.handleChange.bind(this);\r\n }\r\n\r\n handleChange() {\r\n this.props.onChange(this.props.name, !this.props.checked);\r\n }\r\n\r\n render() {\r\n let classList = ['material-icons'];\r\n let iconName;\r\n if (Array.isArray(this.props.className)) {\r\n classList.push(...this.props.className);\r\n } else if (this.props.className) {\r\n classList.push(this.props.className);\r\n }\r\n if (this.props.onChange) {\r\n if (this.props.checked) {\r\n classList.push('blue', 'clickable');\r\n iconName = 'check_box';\r\n } else if (this.props.checked === false) {\r\n classList.push('blue', 'clickable');\r\n iconName = 'check_box_outline_blank';\r\n } else {\r\n classList.push('lt-blue');\r\n iconName = 'indeterminate_check_box';\r\n }\r\n } else {\r\n if (this.props.checked) {\r\n iconName = 'check_box';\r\n } else {\r\n iconName = 'check_box_outline_blank';\r\n }\r\n }\r\n let attrs = {\r\n className: classList.join(' '),\r\n id: this.props.id,\r\n };\r\n if (this.props.onChange) {\r\n attrs.onClick = this.handleChange;\r\n }\r\n return React.createElement('i', attrs, iconName);\r\n }\r\n}\r\n","import React from 'react';\r\n\r\nimport { Tinode } from 'tinode-sdk';\r\n\r\nimport { idToColorClass } from '../lib/strformat.js';\r\nimport { sanitizeUrlForMime } from '../lib/utils.js';\r\n\r\nexport default class LetterTile extends React.PureComponent {\r\n render() {\r\n let avatar;\r\n if (this.props.avatar === true) {\r\n const isGroup = Tinode.isGroupTopicName(this.props.topic);\r\n const iconColor = idToColorClass(this.props.topic, isGroup);\r\n if (this.props.topic && this.props.title && this.props.title.trim()) {\r\n const letter = this.props.title.trim().charAt(0);\r\n const className = 'lettertile ' + iconColor + (this.props.deleted ? ' disabled' : '');\r\n avatar = (
{letter}
)\r\n } else {\r\n const className = 'material-icons ' + iconColor + (this.props.deleted ? ' disabled' : '');\r\n avatar = isGroup ? group : person;\r\n }\r\n } else if (this.props.avatar) {\r\n const url = this.props.tinode.authorizeURL(sanitizeUrlForMime(this.props.avatar, 'image'));\r\n // If avatar image is invalid, show a placeholder.\r\n const className = 'avatar' + (this.props.deleted ? ' deleted' : '');\r\n avatar = \"avatar\"{e.target.onerror = null; e.target.src=\"../img/broken_image.png\"}} />;\r\n } else {\r\n avatar = null;\r\n }\r\n return avatar;\r\n }\r\n}\r\n","import React from 'react';\r\n\r\nexport default class LoadSpinner extends React.PureComponent {\r\n render() {\r\n const className = 'load-spinner-box' + (this.props.large ? ' large' : '')\r\n + (this.props.clear ? ' clear' : '') + (this.props.centered ? ' centered' : '');\r\n return (this.props.show ?\r\n
: null);\r\n }\r\n}\r\n","// Password with a visiblity toggle.\r\nimport React from 'react';\r\n\r\nexport default class VisiblePassword extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.inputRef = React.createRef();\r\n\r\n this.state = {\r\n value: this.props.value || '',\r\n visible: false\r\n };\r\n\r\n this.handleVisibility = this.handleVisibility.bind(this);\r\n this.handeTextChange = this.handeTextChange.bind(this);\r\n this.handleKeyDown = this.handleKeyDown.bind(this);\r\n this.handleEditingFinished = this.handleEditingFinished.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.autoFocus) {\r\n this.inputRef.current.focus();\r\n }\r\n }\r\n\r\n handeTextChange(e) {\r\n this.setState({value: e.target.value});\r\n if (this.props.onChange) {\r\n this.props.onChange(e);\r\n }\r\n }\r\n\r\n handleVisibility(e) {\r\n e.preventDefault();\r\n this.setState({visible: !this.state.visible});\r\n }\r\n\r\n handleKeyDown(e) {\r\n if (e.keyCode == 27) {\r\n // Escape pressed\r\n this.setState({value: this.props.value || '', visible: false});\r\n if (this.props.onFinished) {\r\n this.props.onFinished();\r\n }\r\n } else if (e.keyCode == 13) {\r\n // Enter pressed\r\n this.handleEditingFinished();\r\n }\r\n }\r\n\r\n handleEditingFinished(e) {\r\n if (e) {\r\n let currentTarget = e.currentTarget;\r\n setTimeout(_ => {\r\n if (!currentTarget.contains(document.activeElement)) {\r\n if (this.props.onFinished) {\r\n this.props.onFinished(this.state.value);\r\n }\r\n }\r\n }, 0);\r\n } else if (this.props.onFinished) {\r\n this.props.onFinished(this.state.value.trim());\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n \r\n \r\n {this.state.visible ? 'visibility' : 'visibility_off'}\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n","'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n exports.createRoot = m.createRoot;\n exports.hydrateRoot = m.hydrateRoot;\n} else {\n var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n exports.createRoot = function(c, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.createRoot(c, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n exports.hydrateRoot = function(c, h, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.hydrateRoot(c, h, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n}\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","module.exports = React;","module.exports = ReactDOM;","module.exports = ReactIntl;","module.exports = tinode;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".prod.js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/umd/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t57: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = globalThis[\"webpackChunkMahsPayam_webapp\"] = globalThis[\"webpackChunkMahsPayam_webapp\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Firebase constants. Some of these (@defines) can be overridden at compile-time.\r\n */\r\nconst CONSTANTS = {\r\n /**\r\n * @define {boolean} Whether this is the client Node.js SDK.\r\n */\r\n NODE_CLIENT: false,\r\n /**\r\n * @define {boolean} Whether this is the Admin Node.js SDK.\r\n */\r\n NODE_ADMIN: false,\r\n /**\r\n * Firebase SDK Version\r\n */\r\n SDK_VERSION: '${JSCORE_VERSION}'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Throws an error if the provided assertion is falsy\r\n */\r\nconst assert = function (assertion, message) {\r\n if (!assertion) {\r\n throw assertionError(message);\r\n }\r\n};\r\n/**\r\n * Returns an Error object suitable for throwing.\r\n */\r\nconst assertionError = function (message) {\r\n return new Error('Firebase Database (' +\r\n CONSTANTS.SDK_VERSION +\r\n ') INTERNAL ASSERT FAILED: ' +\r\n message);\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst stringToByteArray$1 = function (str) {\r\n // TODO(user): Use native implementations if/when available\r\n const out = [];\r\n let p = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n let c = str.charCodeAt(i);\r\n if (c < 128) {\r\n out[p++] = c;\r\n }\r\n else if (c < 2048) {\r\n out[p++] = (c >> 6) | 192;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else if ((c & 0xfc00) === 0xd800 &&\r\n i + 1 < str.length &&\r\n (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {\r\n // Surrogate Pair\r\n c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff);\r\n out[p++] = (c >> 18) | 240;\r\n out[p++] = ((c >> 12) & 63) | 128;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else {\r\n out[p++] = (c >> 12) | 224;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n }\r\n return out;\r\n};\r\n/**\r\n * Turns an array of numbers into the string given by the concatenation of the\r\n * characters to which the numbers correspond.\r\n * @param bytes Array of numbers representing characters.\r\n * @return Stringification of the array.\r\n */\r\nconst byteArrayToString = function (bytes) {\r\n // TODO(user): Use native implementations if/when available\r\n const out = [];\r\n let pos = 0, c = 0;\r\n while (pos < bytes.length) {\r\n const c1 = bytes[pos++];\r\n if (c1 < 128) {\r\n out[c++] = String.fromCharCode(c1);\r\n }\r\n else if (c1 > 191 && c1 < 224) {\r\n const c2 = bytes[pos++];\r\n out[c++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));\r\n }\r\n else if (c1 > 239 && c1 < 365) {\r\n // Surrogate Pair\r\n const c2 = bytes[pos++];\r\n const c3 = bytes[pos++];\r\n const c4 = bytes[pos++];\r\n const u = (((c1 & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63)) -\r\n 0x10000;\r\n out[c++] = String.fromCharCode(0xd800 + (u >> 10));\r\n out[c++] = String.fromCharCode(0xdc00 + (u & 1023));\r\n }\r\n else {\r\n const c2 = bytes[pos++];\r\n const c3 = bytes[pos++];\r\n out[c++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\r\n }\r\n }\r\n return out.join('');\r\n};\r\n// We define it as an object literal instead of a class because a class compiled down to es5 can't\r\n// be treeshaked. https://github.com/rollup/rollup/issues/1691\r\n// Static lookup maps, lazily populated by init_()\r\nconst base64 = {\r\n /**\r\n * Maps bytes to characters.\r\n */\r\n byteToCharMap_: null,\r\n /**\r\n * Maps characters to bytes.\r\n */\r\n charToByteMap_: null,\r\n /**\r\n * Maps bytes to websafe characters.\r\n * @private\r\n */\r\n byteToCharMapWebSafe_: null,\r\n /**\r\n * Maps websafe characters to bytes.\r\n * @private\r\n */\r\n charToByteMapWebSafe_: null,\r\n /**\r\n * Our default alphabet, shared between\r\n * ENCODED_VALS and ENCODED_VALS_WEBSAFE\r\n */\r\n ENCODED_VALS_BASE: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 'abcdefghijklmnopqrstuvwxyz' + '0123456789',\r\n /**\r\n * Our default alphabet. Value 64 (=) is special; it means \"nothing.\"\r\n */\r\n get ENCODED_VALS() {\r\n return this.ENCODED_VALS_BASE + '+/=';\r\n },\r\n /**\r\n * Our websafe alphabet.\r\n */\r\n get ENCODED_VALS_WEBSAFE() {\r\n return this.ENCODED_VALS_BASE + '-_.';\r\n },\r\n /**\r\n * Whether this browser supports the atob and btoa functions. This extension\r\n * started at Mozilla but is now implemented by many browsers. We use the\r\n * ASSUME_* variables to avoid pulling in the full useragent detection library\r\n * but still allowing the standard per-browser compilations.\r\n *\r\n */\r\n HAS_NATIVE_SUPPORT: typeof atob === 'function',\r\n /**\r\n * Base64-encode an array of bytes.\r\n *\r\n * @param input An array of bytes (numbers with\r\n * value in [0, 255]) to encode.\r\n * @param webSafe Boolean indicating we should use the\r\n * alternative alphabet.\r\n * @return The base64 encoded string.\r\n */\r\n encodeByteArray(input, webSafe) {\r\n if (!Array.isArray(input)) {\r\n throw Error('encodeByteArray takes an array as a parameter');\r\n }\r\n this.init_();\r\n const byteToCharMap = webSafe\r\n ? this.byteToCharMapWebSafe_\r\n : this.byteToCharMap_;\r\n const output = [];\r\n for (let i = 0; i < input.length; i += 3) {\r\n const byte1 = input[i];\r\n const haveByte2 = i + 1 < input.length;\r\n const byte2 = haveByte2 ? input[i + 1] : 0;\r\n const haveByte3 = i + 2 < input.length;\r\n const byte3 = haveByte3 ? input[i + 2] : 0;\r\n const outByte1 = byte1 >> 2;\r\n const outByte2 = ((byte1 & 0x03) << 4) | (byte2 >> 4);\r\n let outByte3 = ((byte2 & 0x0f) << 2) | (byte3 >> 6);\r\n let outByte4 = byte3 & 0x3f;\r\n if (!haveByte3) {\r\n outByte4 = 64;\r\n if (!haveByte2) {\r\n outByte3 = 64;\r\n }\r\n }\r\n output.push(byteToCharMap[outByte1], byteToCharMap[outByte2], byteToCharMap[outByte3], byteToCharMap[outByte4]);\r\n }\r\n return output.join('');\r\n },\r\n /**\r\n * Base64-encode a string.\r\n *\r\n * @param input A string to encode.\r\n * @param webSafe If true, we should use the\r\n * alternative alphabet.\r\n * @return The base64 encoded string.\r\n */\r\n encodeString(input, webSafe) {\r\n // Shortcut for Mozilla browsers that implement\r\n // a native base64 encoder in the form of \"btoa/atob\"\r\n if (this.HAS_NATIVE_SUPPORT && !webSafe) {\r\n return btoa(input);\r\n }\r\n return this.encodeByteArray(stringToByteArray$1(input), webSafe);\r\n },\r\n /**\r\n * Base64-decode a string.\r\n *\r\n * @param input to decode.\r\n * @param webSafe True if we should use the\r\n * alternative alphabet.\r\n * @return string representing the decoded value.\r\n */\r\n decodeString(input, webSafe) {\r\n // Shortcut for Mozilla browsers that implement\r\n // a native base64 encoder in the form of \"btoa/atob\"\r\n if (this.HAS_NATIVE_SUPPORT && !webSafe) {\r\n return atob(input);\r\n }\r\n return byteArrayToString(this.decodeStringToByteArray(input, webSafe));\r\n },\r\n /**\r\n * Base64-decode a string.\r\n *\r\n * In base-64 decoding, groups of four characters are converted into three\r\n * bytes. If the encoder did not apply padding, the input length may not\r\n * be a multiple of 4.\r\n *\r\n * In this case, the last group will have fewer than 4 characters, and\r\n * padding will be inferred. If the group has one or two characters, it decodes\r\n * to one byte. If the group has three characters, it decodes to two bytes.\r\n *\r\n * @param input Input to decode.\r\n * @param webSafe True if we should use the web-safe alphabet.\r\n * @return bytes representing the decoded value.\r\n */\r\n decodeStringToByteArray(input, webSafe) {\r\n this.init_();\r\n const charToByteMap = webSafe\r\n ? this.charToByteMapWebSafe_\r\n : this.charToByteMap_;\r\n const output = [];\r\n for (let i = 0; i < input.length;) {\r\n const byte1 = charToByteMap[input.charAt(i++)];\r\n const haveByte2 = i < input.length;\r\n const byte2 = haveByte2 ? charToByteMap[input.charAt(i)] : 0;\r\n ++i;\r\n const haveByte3 = i < input.length;\r\n const byte3 = haveByte3 ? charToByteMap[input.charAt(i)] : 64;\r\n ++i;\r\n const haveByte4 = i < input.length;\r\n const byte4 = haveByte4 ? charToByteMap[input.charAt(i)] : 64;\r\n ++i;\r\n if (byte1 == null || byte2 == null || byte3 == null || byte4 == null) {\r\n throw new DecodeBase64StringError();\r\n }\r\n const outByte1 = (byte1 << 2) | (byte2 >> 4);\r\n output.push(outByte1);\r\n if (byte3 !== 64) {\r\n const outByte2 = ((byte2 << 4) & 0xf0) | (byte3 >> 2);\r\n output.push(outByte2);\r\n if (byte4 !== 64) {\r\n const outByte3 = ((byte3 << 6) & 0xc0) | byte4;\r\n output.push(outByte3);\r\n }\r\n }\r\n }\r\n return output;\r\n },\r\n /**\r\n * Lazy static initialization function. Called before\r\n * accessing any of the static map variables.\r\n * @private\r\n */\r\n init_() {\r\n if (!this.byteToCharMap_) {\r\n this.byteToCharMap_ = {};\r\n this.charToByteMap_ = {};\r\n this.byteToCharMapWebSafe_ = {};\r\n this.charToByteMapWebSafe_ = {};\r\n // We want quick mappings back and forth, so we precompute two maps.\r\n for (let i = 0; i < this.ENCODED_VALS.length; i++) {\r\n this.byteToCharMap_[i] = this.ENCODED_VALS.charAt(i);\r\n this.charToByteMap_[this.byteToCharMap_[i]] = i;\r\n this.byteToCharMapWebSafe_[i] = this.ENCODED_VALS_WEBSAFE.charAt(i);\r\n this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[i]] = i;\r\n // Be forgiving when decoding and correctly decode both encodings.\r\n if (i >= this.ENCODED_VALS_BASE.length) {\r\n this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(i)] = i;\r\n this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(i)] = i;\r\n }\r\n }\r\n }\r\n }\r\n};\r\n/**\r\n * An error encountered while decoding base64 string.\r\n */\r\nclass DecodeBase64StringError extends Error {\r\n constructor() {\r\n super(...arguments);\r\n this.name = 'DecodeBase64StringError';\r\n }\r\n}\r\n/**\r\n * URL-safe base64 encoding\r\n */\r\nconst base64Encode = function (str) {\r\n const utf8Bytes = stringToByteArray$1(str);\r\n return base64.encodeByteArray(utf8Bytes, true);\r\n};\r\n/**\r\n * URL-safe base64 encoding (without \".\" padding in the end).\r\n * e.g. Used in JSON Web Token (JWT) parts.\r\n */\r\nconst base64urlEncodeWithoutPadding = function (str) {\r\n // Use base64url encoding and remove padding in the end (dot characters).\r\n return base64Encode(str).replace(/\\./g, '');\r\n};\r\n/**\r\n * URL-safe base64 decoding\r\n *\r\n * NOTE: DO NOT use the global atob() function - it does NOT support the\r\n * base64Url variant encoding.\r\n *\r\n * @param str To be decoded\r\n * @return Decoded result, if possible\r\n */\r\nconst base64Decode = function (str) {\r\n try {\r\n return base64.decodeString(str, true);\r\n }\r\n catch (e) {\r\n console.error('base64Decode failed: ', e);\r\n }\r\n return null;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Do a deep-copy of basic JavaScript Objects or Arrays.\r\n */\r\nfunction deepCopy(value) {\r\n return deepExtend(undefined, value);\r\n}\r\n/**\r\n * Copy properties from source to target (recursively allows extension\r\n * of Objects and Arrays). Scalar values in the target are over-written.\r\n * If target is undefined, an object of the appropriate type will be created\r\n * (and returned).\r\n *\r\n * We recursively copy all child properties of plain Objects in the source- so\r\n * that namespace- like dictionaries are merged.\r\n *\r\n * Note that the target can be a function, in which case the properties in\r\n * the source Object are copied onto it as static properties of the Function.\r\n *\r\n * Note: we don't merge __proto__ to prevent prototype pollution\r\n */\r\nfunction deepExtend(target, source) {\r\n if (!(source instanceof Object)) {\r\n return source;\r\n }\r\n switch (source.constructor) {\r\n case Date:\r\n // Treat Dates like scalars; if the target date object had any child\r\n // properties - they will be lost!\r\n const dateValue = source;\r\n return new Date(dateValue.getTime());\r\n case Object:\r\n if (target === undefined) {\r\n target = {};\r\n }\r\n break;\r\n case Array:\r\n // Always copy the array source and overwrite the target.\r\n target = [];\r\n break;\r\n default:\r\n // Not a plain Object - treat it as a scalar.\r\n return source;\r\n }\r\n for (const prop in source) {\r\n // use isValidKey to guard against prototype pollution. See https://snyk.io/vuln/SNYK-JS-LODASH-450202\r\n if (!source.hasOwnProperty(prop) || !isValidKey(prop)) {\r\n continue;\r\n }\r\n target[prop] = deepExtend(target[prop], source[prop]);\r\n }\r\n return target;\r\n}\r\nfunction isValidKey(key) {\r\n return key !== '__proto__';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Polyfill for `globalThis` object.\r\n * @returns the `globalThis` object for the given environment.\r\n * @public\r\n */\r\nfunction getGlobal() {\r\n if (typeof self !== 'undefined') {\r\n return self;\r\n }\r\n if (typeof window !== 'undefined') {\r\n return window;\r\n }\r\n if (typeof global !== 'undefined') {\r\n return global;\r\n }\r\n throw new Error('Unable to locate global object.');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst getDefaultsFromGlobal = () => getGlobal().__FIREBASE_DEFAULTS__;\r\n/**\r\n * Attempt to read defaults from a JSON string provided to\r\n * process(.)env(.)__FIREBASE_DEFAULTS__ or a JSON file whose path is in\r\n * process(.)env(.)__FIREBASE_DEFAULTS_PATH__\r\n * The dots are in parens because certain compilers (Vite?) cannot\r\n * handle seeing that variable in comments.\r\n * See https://github.com/firebase/firebase-js-sdk/issues/6838\r\n */\r\nconst getDefaultsFromEnvVariable = () => {\r\n if (typeof process === 'undefined' || typeof process.env === 'undefined') {\r\n return;\r\n }\r\n const defaultsJsonString = process.env.__FIREBASE_DEFAULTS__;\r\n if (defaultsJsonString) {\r\n return JSON.parse(defaultsJsonString);\r\n }\r\n};\r\nconst getDefaultsFromCookie = () => {\r\n if (typeof document === 'undefined') {\r\n return;\r\n }\r\n let match;\r\n try {\r\n match = document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/);\r\n }\r\n catch (e) {\r\n // Some environments such as Angular Universal SSR have a\r\n // `document` object but error on accessing `document.cookie`.\r\n return;\r\n }\r\n const decoded = match && base64Decode(match[1]);\r\n return decoded && JSON.parse(decoded);\r\n};\r\n/**\r\n * Get the __FIREBASE_DEFAULTS__ object. It checks in order:\r\n * (1) if such an object exists as a property of `globalThis`\r\n * (2) if such an object was provided on a shell environment variable\r\n * (3) if such an object exists in a cookie\r\n * @public\r\n */\r\nconst getDefaults = () => {\r\n try {\r\n return (getDefaultsFromGlobal() ||\r\n getDefaultsFromEnvVariable() ||\r\n getDefaultsFromCookie());\r\n }\r\n catch (e) {\r\n /**\r\n * Catch-all for being unable to get __FIREBASE_DEFAULTS__ due\r\n * to any environment case we have not accounted for. Log to\r\n * info instead of swallowing so we can find these unknown cases\r\n * and add paths for them if needed.\r\n */\r\n console.info(`Unable to get __FIREBASE_DEFAULTS__ due to: ${e}`);\r\n return;\r\n }\r\n};\r\n/**\r\n * Returns emulator host stored in the __FIREBASE_DEFAULTS__ object\r\n * for the given product.\r\n * @returns a URL host formatted like `127.0.0.1:9999` or `[::1]:4000` if available\r\n * @public\r\n */\r\nconst getDefaultEmulatorHost = (productName) => { var _a, _b; return (_b = (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.emulatorHosts) === null || _b === void 0 ? void 0 : _b[productName]; };\r\n/**\r\n * Returns emulator hostname and port stored in the __FIREBASE_DEFAULTS__ object\r\n * for the given product.\r\n * @returns a pair of hostname and port like `[\"::1\", 4000]` if available\r\n * @public\r\n */\r\nconst getDefaultEmulatorHostnameAndPort = (productName) => {\r\n const host = getDefaultEmulatorHost(productName);\r\n if (!host) {\r\n return undefined;\r\n }\r\n const separatorIndex = host.lastIndexOf(':'); // Finding the last since IPv6 addr also has colons.\r\n if (separatorIndex <= 0 || separatorIndex + 1 === host.length) {\r\n throw new Error(`Invalid host ${host} with no separate hostname and port!`);\r\n }\r\n // eslint-disable-next-line no-restricted-globals\r\n const port = parseInt(host.substring(separatorIndex + 1), 10);\r\n if (host[0] === '[') {\r\n // Bracket-quoted `[ipv6addr]:port` => return \"ipv6addr\" (without brackets).\r\n return [host.substring(1, separatorIndex - 1), port];\r\n }\r\n else {\r\n return [host.substring(0, separatorIndex), port];\r\n }\r\n};\r\n/**\r\n * Returns Firebase app config stored in the __FIREBASE_DEFAULTS__ object.\r\n * @public\r\n */\r\nconst getDefaultAppConfig = () => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.config; };\r\n/**\r\n * Returns an experimental setting on the __FIREBASE_DEFAULTS__ object (properties\r\n * prefixed by \"_\")\r\n * @public\r\n */\r\nconst getExperimentalSetting = (name) => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a[`_${name}`]; };\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass Deferred {\r\n constructor() {\r\n this.reject = () => { };\r\n this.resolve = () => { };\r\n this.promise = new Promise((resolve, reject) => {\r\n this.resolve = resolve;\r\n this.reject = reject;\r\n });\r\n }\r\n /**\r\n * Our API internals are not promiseified and cannot because our callback APIs have subtle expectations around\r\n * invoking promises inline, which Promises are forbidden to do. This method accepts an optional node-style callback\r\n * and returns a node-style callback which will resolve or reject the Deferred's promise.\r\n */\r\n wrapCallback(callback) {\r\n return (error, value) => {\r\n if (error) {\r\n this.reject(error);\r\n }\r\n else {\r\n this.resolve(value);\r\n }\r\n if (typeof callback === 'function') {\r\n // Attaching noop handler just in case developer wasn't expecting\r\n // promises\r\n this.promise.catch(() => { });\r\n // Some of our callbacks don't expect a value and our own tests\r\n // assert that the parameter length is 1\r\n if (callback.length === 1) {\r\n callback(error);\r\n }\r\n else {\r\n callback(error, value);\r\n }\r\n }\r\n };\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction createMockUserToken(token, projectId) {\r\n if (token.uid) {\r\n throw new Error('The \"uid\" field is no longer supported by mockUserToken. Please use \"sub\" instead for Firebase Auth User ID.');\r\n }\r\n // Unsecured JWTs use \"none\" as the algorithm.\r\n const header = {\r\n alg: 'none',\r\n type: 'JWT'\r\n };\r\n const project = projectId || 'demo-project';\r\n const iat = token.iat || 0;\r\n const sub = token.sub || token.user_id;\r\n if (!sub) {\r\n throw new Error(\"mockUserToken must contain 'sub' or 'user_id' field!\");\r\n }\r\n const payload = Object.assign({ \r\n // Set all required fields to decent defaults\r\n iss: `https://securetoken.google.com/${project}`, aud: project, iat, exp: iat + 3600, auth_time: iat, sub, user_id: sub, firebase: {\r\n sign_in_provider: 'custom',\r\n identities: {}\r\n } }, token);\r\n // Unsecured JWTs use the empty string as a signature.\r\n const signature = '';\r\n return [\r\n base64urlEncodeWithoutPadding(JSON.stringify(header)),\r\n base64urlEncodeWithoutPadding(JSON.stringify(payload)),\r\n signature\r\n ].join('.');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns navigator.userAgent string or '' if it's not defined.\r\n * @return user agent string\r\n */\r\nfunction getUA() {\r\n if (typeof navigator !== 'undefined' &&\r\n typeof navigator['userAgent'] === 'string') {\r\n return navigator['userAgent'];\r\n }\r\n else {\r\n return '';\r\n }\r\n}\r\n/**\r\n * Detect Cordova / PhoneGap / Ionic frameworks on a mobile device.\r\n *\r\n * Deliberately does not rely on checking `file://` URLs (as this fails PhoneGap\r\n * in the Ripple emulator) nor Cordova `onDeviceReady`, which would normally\r\n * wait for a callback.\r\n */\r\nfunction isMobileCordova() {\r\n return (typeof window !== 'undefined' &&\r\n // @ts-ignore Setting up an broadly applicable index signature for Window\r\n // just to deal with this case would probably be a bad idea.\r\n !!(window['cordova'] || window['phonegap'] || window['PhoneGap']) &&\r\n /ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(getUA()));\r\n}\r\n/**\r\n * Detect Node.js.\r\n *\r\n * @return true if Node.js environment is detected or specified.\r\n */\r\n// Node detection logic from: https://github.com/iliakan/detect-node/\r\nfunction isNode() {\r\n var _a;\r\n const forceEnvironment = (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.forceEnvironment;\r\n if (forceEnvironment === 'node') {\r\n return true;\r\n }\r\n else if (forceEnvironment === 'browser') {\r\n return false;\r\n }\r\n try {\r\n return (Object.prototype.toString.call(global.process) === '[object process]');\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n}\r\n/**\r\n * Detect Browser Environment\r\n */\r\nfunction isBrowser() {\r\n return typeof self === 'object' && self.self === self;\r\n}\r\nfunction isBrowserExtension() {\r\n const runtime = typeof chrome === 'object'\r\n ? chrome.runtime\r\n : typeof browser === 'object'\r\n ? browser.runtime\r\n : undefined;\r\n return typeof runtime === 'object' && runtime.id !== undefined;\r\n}\r\n/**\r\n * Detect React Native.\r\n *\r\n * @return true if ReactNative environment is detected.\r\n */\r\nfunction isReactNative() {\r\n return (typeof navigator === 'object' && navigator['product'] === 'ReactNative');\r\n}\r\n/** Detects Electron apps. */\r\nfunction isElectron() {\r\n return getUA().indexOf('Electron/') >= 0;\r\n}\r\n/** Detects Internet Explorer. */\r\nfunction isIE() {\r\n const ua = getUA();\r\n return ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\r\n}\r\n/** Detects Universal Windows Platform apps. */\r\nfunction isUWP() {\r\n return getUA().indexOf('MSAppHost/') >= 0;\r\n}\r\n/**\r\n * Detect whether the current SDK build is the Node version.\r\n *\r\n * @return true if it's the Node SDK build.\r\n */\r\nfunction isNodeSdk() {\r\n return CONSTANTS.NODE_CLIENT === true || CONSTANTS.NODE_ADMIN === true;\r\n}\r\n/** Returns true if we are running in Safari. */\r\nfunction isSafari() {\r\n return (!isNode() &&\r\n !!navigator.userAgent &&\r\n navigator.userAgent.includes('Safari') &&\r\n !navigator.userAgent.includes('Chrome'));\r\n}\r\n/**\r\n * This method checks if indexedDB is supported by current browser/service worker context\r\n * @return true if indexedDB is supported by current browser/service worker context\r\n */\r\nfunction isIndexedDBAvailable() {\r\n try {\r\n return typeof indexedDB === 'object';\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n}\r\n/**\r\n * This method validates browser/sw context for indexedDB by opening a dummy indexedDB database and reject\r\n * if errors occur during the database open operation.\r\n *\r\n * @throws exception if current browser/sw context can't run idb.open (ex: Safari iframe, Firefox\r\n * private browsing)\r\n */\r\nfunction validateIndexedDBOpenable() {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n let preExist = true;\r\n const DB_CHECK_NAME = 'validate-browser-context-for-indexeddb-analytics-module';\r\n const request = self.indexedDB.open(DB_CHECK_NAME);\r\n request.onsuccess = () => {\r\n request.result.close();\r\n // delete database only when it doesn't pre-exist\r\n if (!preExist) {\r\n self.indexedDB.deleteDatabase(DB_CHECK_NAME);\r\n }\r\n resolve(true);\r\n };\r\n request.onupgradeneeded = () => {\r\n preExist = false;\r\n };\r\n request.onerror = () => {\r\n var _a;\r\n reject(((_a = request.error) === null || _a === void 0 ? void 0 : _a.message) || '');\r\n };\r\n }\r\n catch (error) {\r\n reject(error);\r\n }\r\n });\r\n}\r\n/**\r\n *\r\n * This method checks whether cookie is enabled within current browser\r\n * @return true if cookie is enabled within current browser\r\n */\r\nfunction areCookiesEnabled() {\r\n if (typeof navigator === 'undefined' || !navigator.cookieEnabled) {\r\n return false;\r\n }\r\n return true;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Standardized Firebase Error.\r\n *\r\n * Usage:\r\n *\r\n * // Typescript string literals for type-safe codes\r\n * type Err =\r\n * 'unknown' |\r\n * 'object-not-found'\r\n * ;\r\n *\r\n * // Closure enum for type-safe error codes\r\n * // at-enum {string}\r\n * var Err = {\r\n * UNKNOWN: 'unknown',\r\n * OBJECT_NOT_FOUND: 'object-not-found',\r\n * }\r\n *\r\n * let errors: Map = {\r\n * 'generic-error': \"Unknown error\",\r\n * 'file-not-found': \"Could not find file: {$file}\",\r\n * };\r\n *\r\n * // Type-safe function - must pass a valid error code as param.\r\n * let error = new ErrorFactory('service', 'Service', errors);\r\n *\r\n * ...\r\n * throw error.create(Err.GENERIC);\r\n * ...\r\n * throw error.create(Err.FILE_NOT_FOUND, {'file': fileName});\r\n * ...\r\n * // Service: Could not file file: foo.txt (service/file-not-found).\r\n *\r\n * catch (e) {\r\n * assert(e.message === \"Could not find file: foo.txt.\");\r\n * if ((e as FirebaseError)?.code === 'service/file-not-found') {\r\n * console.log(\"Could not read file: \" + e['file']);\r\n * }\r\n * }\r\n */\r\nconst ERROR_NAME = 'FirebaseError';\r\n// Based on code from:\r\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Custom_Error_Types\r\nclass FirebaseError extends Error {\r\n constructor(\r\n /** The error code for this error. */\r\n code, message, \r\n /** Custom data for this error. */\r\n customData) {\r\n super(message);\r\n this.code = code;\r\n this.customData = customData;\r\n /** The custom name for all FirebaseErrors. */\r\n this.name = ERROR_NAME;\r\n // Fix For ES5\r\n // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\r\n Object.setPrototypeOf(this, FirebaseError.prototype);\r\n // Maintains proper stack trace for where our error was thrown.\r\n // Only available on V8.\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, ErrorFactory.prototype.create);\r\n }\r\n }\r\n}\r\nclass ErrorFactory {\r\n constructor(service, serviceName, errors) {\r\n this.service = service;\r\n this.serviceName = serviceName;\r\n this.errors = errors;\r\n }\r\n create(code, ...data) {\r\n const customData = data[0] || {};\r\n const fullCode = `${this.service}/${code}`;\r\n const template = this.errors[code];\r\n const message = template ? replaceTemplate(template, customData) : 'Error';\r\n // Service Name: Error message (service/code).\r\n const fullMessage = `${this.serviceName}: ${message} (${fullCode}).`;\r\n const error = new FirebaseError(fullCode, fullMessage, customData);\r\n return error;\r\n }\r\n}\r\nfunction replaceTemplate(template, data) {\r\n return template.replace(PATTERN, (_, key) => {\r\n const value = data[key];\r\n return value != null ? String(value) : `<${key}?>`;\r\n });\r\n}\r\nconst PATTERN = /\\{\\$([^}]+)}/g;\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Evaluates a JSON string into a javascript object.\r\n *\r\n * @param {string} str A string containing JSON.\r\n * @return {*} The javascript object representing the specified JSON.\r\n */\r\nfunction jsonEval(str) {\r\n return JSON.parse(str);\r\n}\r\n/**\r\n * Returns JSON representing a javascript object.\r\n * @param {*} data Javascript object to be stringified.\r\n * @return {string} The JSON contents of the object.\r\n */\r\nfunction stringify(data) {\r\n return JSON.stringify(data);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Decodes a Firebase auth. token into constituent parts.\r\n *\r\n * Notes:\r\n * - May return with invalid / incomplete claims if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst decode = function (token) {\r\n let header = {}, claims = {}, data = {}, signature = '';\r\n try {\r\n const parts = token.split('.');\r\n header = jsonEval(base64Decode(parts[0]) || '');\r\n claims = jsonEval(base64Decode(parts[1]) || '');\r\n signature = parts[2];\r\n data = claims['d'] || {};\r\n delete claims['d'];\r\n }\r\n catch (e) { }\r\n return {\r\n header,\r\n claims,\r\n data,\r\n signature\r\n };\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and checks the validity of its time-based claims. Will return true if the\r\n * token is within the time window authorized by the 'nbf' (not-before) and 'iat' (issued-at) claims.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst isValidTimestamp = function (token) {\r\n const claims = decode(token).claims;\r\n const now = Math.floor(new Date().getTime() / 1000);\r\n let validSince = 0, validUntil = 0;\r\n if (typeof claims === 'object') {\r\n if (claims.hasOwnProperty('nbf')) {\r\n validSince = claims['nbf'];\r\n }\r\n else if (claims.hasOwnProperty('iat')) {\r\n validSince = claims['iat'];\r\n }\r\n if (claims.hasOwnProperty('exp')) {\r\n validUntil = claims['exp'];\r\n }\r\n else {\r\n // token will expire after 24h by default\r\n validUntil = validSince + 86400;\r\n }\r\n }\r\n return (!!now &&\r\n !!validSince &&\r\n !!validUntil &&\r\n now >= validSince &&\r\n now <= validUntil);\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and returns its issued at time if valid, null otherwise.\r\n *\r\n * Notes:\r\n * - May return null if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst issuedAtTime = function (token) {\r\n const claims = decode(token).claims;\r\n if (typeof claims === 'object' && claims.hasOwnProperty('iat')) {\r\n return claims['iat'];\r\n }\r\n return null;\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and checks the validity of its format. Expects a valid issued-at time.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst isValidFormat = function (token) {\r\n const decoded = decode(token), claims = decoded.claims;\r\n return !!claims && typeof claims === 'object' && claims.hasOwnProperty('iat');\r\n};\r\n/**\r\n * Attempts to peer into an auth token and determine if it's an admin auth token by looking at the claims portion.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst isAdmin = function (token) {\r\n const claims = decode(token).claims;\r\n return typeof claims === 'object' && claims['admin'] === true;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction contains(obj, key) {\r\n return Object.prototype.hasOwnProperty.call(obj, key);\r\n}\r\nfunction safeGet(obj, key) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n return obj[key];\r\n }\r\n else {\r\n return undefined;\r\n }\r\n}\r\nfunction isEmpty(obj) {\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction map(obj, fn, contextObj) {\r\n const res = {};\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n res[key] = fn.call(contextObj, obj[key], key, obj);\r\n }\r\n }\r\n return res;\r\n}\r\n/**\r\n * Deep equal two objects. Support Arrays and Objects.\r\n */\r\nfunction deepEqual(a, b) {\r\n if (a === b) {\r\n return true;\r\n }\r\n const aKeys = Object.keys(a);\r\n const bKeys = Object.keys(b);\r\n for (const k of aKeys) {\r\n if (!bKeys.includes(k)) {\r\n return false;\r\n }\r\n const aProp = a[k];\r\n const bProp = b[k];\r\n if (isObject(aProp) && isObject(bProp)) {\r\n if (!deepEqual(aProp, bProp)) {\r\n return false;\r\n }\r\n }\r\n else if (aProp !== bProp) {\r\n return false;\r\n }\r\n }\r\n for (const k of bKeys) {\r\n if (!aKeys.includes(k)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction isObject(thing) {\r\n return thing !== null && typeof thing === 'object';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Rejects if the given promise doesn't resolve in timeInMS milliseconds.\r\n * @internal\r\n */\r\nfunction promiseWithTimeout(promise, timeInMS = 2000) {\r\n const deferredPromise = new Deferred();\r\n setTimeout(() => deferredPromise.reject('timeout!'), timeInMS);\r\n promise.then(deferredPromise.resolve, deferredPromise.reject);\r\n return deferredPromise.promise;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns a querystring-formatted string (e.g. &arg=val&arg2=val2) from a\r\n * params object (e.g. {arg: 'val', arg2: 'val2'})\r\n * Note: You must prepend it with ? when adding it to a URL.\r\n */\r\nfunction querystring(querystringParams) {\r\n const params = [];\r\n for (const [key, value] of Object.entries(querystringParams)) {\r\n if (Array.isArray(value)) {\r\n value.forEach(arrayVal => {\r\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(arrayVal));\r\n });\r\n }\r\n else {\r\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\r\n }\r\n }\r\n return params.length ? '&' + params.join('&') : '';\r\n}\r\n/**\r\n * Decodes a querystring (e.g. ?arg=val&arg2=val2) into a params object\r\n * (e.g. {arg: 'val', arg2: 'val2'})\r\n */\r\nfunction querystringDecode(querystring) {\r\n const obj = {};\r\n const tokens = querystring.replace(/^\\?/, '').split('&');\r\n tokens.forEach(token => {\r\n if (token) {\r\n const [key, value] = token.split('=');\r\n obj[decodeURIComponent(key)] = decodeURIComponent(value);\r\n }\r\n });\r\n return obj;\r\n}\r\n/**\r\n * Extract the query string part of a URL, including the leading question mark (if present).\r\n */\r\nfunction extractQuerystring(url) {\r\n const queryStart = url.indexOf('?');\r\n if (!queryStart) {\r\n return '';\r\n }\r\n const fragmentStart = url.indexOf('#', queryStart);\r\n return url.substring(queryStart, fragmentStart > 0 ? fragmentStart : undefined);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview SHA-1 cryptographic hash.\r\n * Variable names follow the notation in FIPS PUB 180-3:\r\n * http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf.\r\n *\r\n * Usage:\r\n * var sha1 = new sha1();\r\n * sha1.update(bytes);\r\n * var hash = sha1.digest();\r\n *\r\n * Performance:\r\n * Chrome 23: ~400 Mbit/s\r\n * Firefox 16: ~250 Mbit/s\r\n *\r\n */\r\n/**\r\n * SHA-1 cryptographic hash constructor.\r\n *\r\n * The properties declared here are discussed in the above algorithm document.\r\n * @constructor\r\n * @final\r\n * @struct\r\n */\r\nclass Sha1 {\r\n constructor() {\r\n /**\r\n * Holds the previous values of accumulated variables a-e in the compress_\r\n * function.\r\n * @private\r\n */\r\n this.chain_ = [];\r\n /**\r\n * A buffer holding the partially computed hash result.\r\n * @private\r\n */\r\n this.buf_ = [];\r\n /**\r\n * An array of 80 bytes, each a part of the message to be hashed. Referred to\r\n * as the message schedule in the docs.\r\n * @private\r\n */\r\n this.W_ = [];\r\n /**\r\n * Contains data needed to pad messages less than 64 bytes.\r\n * @private\r\n */\r\n this.pad_ = [];\r\n /**\r\n * @private {number}\r\n */\r\n this.inbuf_ = 0;\r\n /**\r\n * @private {number}\r\n */\r\n this.total_ = 0;\r\n this.blockSize = 512 / 8;\r\n this.pad_[0] = 128;\r\n for (let i = 1; i < this.blockSize; ++i) {\r\n this.pad_[i] = 0;\r\n }\r\n this.reset();\r\n }\r\n reset() {\r\n this.chain_[0] = 0x67452301;\r\n this.chain_[1] = 0xefcdab89;\r\n this.chain_[2] = 0x98badcfe;\r\n this.chain_[3] = 0x10325476;\r\n this.chain_[4] = 0xc3d2e1f0;\r\n this.inbuf_ = 0;\r\n this.total_ = 0;\r\n }\r\n /**\r\n * Internal compress helper function.\r\n * @param buf Block to compress.\r\n * @param offset Offset of the block in the buffer.\r\n * @private\r\n */\r\n compress_(buf, offset) {\r\n if (!offset) {\r\n offset = 0;\r\n }\r\n const W = this.W_;\r\n // get 16 big endian words\r\n if (typeof buf === 'string') {\r\n for (let i = 0; i < 16; i++) {\r\n // TODO(user): [bug 8140122] Recent versions of Safari for Mac OS and iOS\r\n // have a bug that turns the post-increment ++ operator into pre-increment\r\n // during JIT compilation. We have code that depends heavily on SHA-1 for\r\n // correctness and which is affected by this bug, so I've removed all uses\r\n // of post-increment ++ in which the result value is used. We can revert\r\n // this change once the Safari bug\r\n // (https://bugs.webkit.org/show_bug.cgi?id=109036) has been fixed and\r\n // most clients have been updated.\r\n W[i] =\r\n (buf.charCodeAt(offset) << 24) |\r\n (buf.charCodeAt(offset + 1) << 16) |\r\n (buf.charCodeAt(offset + 2) << 8) |\r\n buf.charCodeAt(offset + 3);\r\n offset += 4;\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < 16; i++) {\r\n W[i] =\r\n (buf[offset] << 24) |\r\n (buf[offset + 1] << 16) |\r\n (buf[offset + 2] << 8) |\r\n buf[offset + 3];\r\n offset += 4;\r\n }\r\n }\r\n // expand to 80 words\r\n for (let i = 16; i < 80; i++) {\r\n const t = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\r\n W[i] = ((t << 1) | (t >>> 31)) & 0xffffffff;\r\n }\r\n let a = this.chain_[0];\r\n let b = this.chain_[1];\r\n let c = this.chain_[2];\r\n let d = this.chain_[3];\r\n let e = this.chain_[4];\r\n let f, k;\r\n // TODO(user): Try to unroll this loop to speed up the computation.\r\n for (let i = 0; i < 80; i++) {\r\n if (i < 40) {\r\n if (i < 20) {\r\n f = d ^ (b & (c ^ d));\r\n k = 0x5a827999;\r\n }\r\n else {\r\n f = b ^ c ^ d;\r\n k = 0x6ed9eba1;\r\n }\r\n }\r\n else {\r\n if (i < 60) {\r\n f = (b & c) | (d & (b | c));\r\n k = 0x8f1bbcdc;\r\n }\r\n else {\r\n f = b ^ c ^ d;\r\n k = 0xca62c1d6;\r\n }\r\n }\r\n const t = (((a << 5) | (a >>> 27)) + f + e + k + W[i]) & 0xffffffff;\r\n e = d;\r\n d = c;\r\n c = ((b << 30) | (b >>> 2)) & 0xffffffff;\r\n b = a;\r\n a = t;\r\n }\r\n this.chain_[0] = (this.chain_[0] + a) & 0xffffffff;\r\n this.chain_[1] = (this.chain_[1] + b) & 0xffffffff;\r\n this.chain_[2] = (this.chain_[2] + c) & 0xffffffff;\r\n this.chain_[3] = (this.chain_[3] + d) & 0xffffffff;\r\n this.chain_[4] = (this.chain_[4] + e) & 0xffffffff;\r\n }\r\n update(bytes, length) {\r\n // TODO(johnlenz): tighten the function signature and remove this check\r\n if (bytes == null) {\r\n return;\r\n }\r\n if (length === undefined) {\r\n length = bytes.length;\r\n }\r\n const lengthMinusBlock = length - this.blockSize;\r\n let n = 0;\r\n // Using local instead of member variables gives ~5% speedup on Firefox 16.\r\n const buf = this.buf_;\r\n let inbuf = this.inbuf_;\r\n // The outer while loop should execute at most twice.\r\n while (n < length) {\r\n // When we have no data in the block to top up, we can directly process the\r\n // input buffer (assuming it contains sufficient data). This gives ~25%\r\n // speedup on Chrome 23 and ~15% speedup on Firefox 16, but requires that\r\n // the data is provided in large chunks (or in multiples of 64 bytes).\r\n if (inbuf === 0) {\r\n while (n <= lengthMinusBlock) {\r\n this.compress_(bytes, n);\r\n n += this.blockSize;\r\n }\r\n }\r\n if (typeof bytes === 'string') {\r\n while (n < length) {\r\n buf[inbuf] = bytes.charCodeAt(n);\r\n ++inbuf;\r\n ++n;\r\n if (inbuf === this.blockSize) {\r\n this.compress_(buf);\r\n inbuf = 0;\r\n // Jump to the outer loop so we use the full-block optimization.\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n while (n < length) {\r\n buf[inbuf] = bytes[n];\r\n ++inbuf;\r\n ++n;\r\n if (inbuf === this.blockSize) {\r\n this.compress_(buf);\r\n inbuf = 0;\r\n // Jump to the outer loop so we use the full-block optimization.\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n this.inbuf_ = inbuf;\r\n this.total_ += length;\r\n }\r\n /** @override */\r\n digest() {\r\n const digest = [];\r\n let totalBits = this.total_ * 8;\r\n // Add pad 0x80 0x00*.\r\n if (this.inbuf_ < 56) {\r\n this.update(this.pad_, 56 - this.inbuf_);\r\n }\r\n else {\r\n this.update(this.pad_, this.blockSize - (this.inbuf_ - 56));\r\n }\r\n // Add # bits.\r\n for (let i = this.blockSize - 1; i >= 56; i--) {\r\n this.buf_[i] = totalBits & 255;\r\n totalBits /= 256; // Don't use bit-shifting here!\r\n }\r\n this.compress_(this.buf_);\r\n let n = 0;\r\n for (let i = 0; i < 5; i++) {\r\n for (let j = 24; j >= 0; j -= 8) {\r\n digest[n] = (this.chain_[i] >> j) & 255;\r\n ++n;\r\n }\r\n }\r\n return digest;\r\n }\r\n}\n\n/**\r\n * Helper to make a Subscribe function (just like Promise helps make a\r\n * Thenable).\r\n *\r\n * @param executor Function which can make calls to a single Observer\r\n * as a proxy.\r\n * @param onNoObservers Callback when count of Observers goes to zero.\r\n */\r\nfunction createSubscribe(executor, onNoObservers) {\r\n const proxy = new ObserverProxy(executor, onNoObservers);\r\n return proxy.subscribe.bind(proxy);\r\n}\r\n/**\r\n * Implement fan-out for any number of Observers attached via a subscribe\r\n * function.\r\n */\r\nclass ObserverProxy {\r\n /**\r\n * @param executor Function which can make calls to a single Observer\r\n * as a proxy.\r\n * @param onNoObservers Callback when count of Observers goes to zero.\r\n */\r\n constructor(executor, onNoObservers) {\r\n this.observers = [];\r\n this.unsubscribes = [];\r\n this.observerCount = 0;\r\n // Micro-task scheduling by calling task.then().\r\n this.task = Promise.resolve();\r\n this.finalized = false;\r\n this.onNoObservers = onNoObservers;\r\n // Call the executor asynchronously so subscribers that are called\r\n // synchronously after the creation of the subscribe function\r\n // can still receive the very first value generated in the executor.\r\n this.task\r\n .then(() => {\r\n executor(this);\r\n })\r\n .catch(e => {\r\n this.error(e);\r\n });\r\n }\r\n next(value) {\r\n this.forEachObserver((observer) => {\r\n observer.next(value);\r\n });\r\n }\r\n error(error) {\r\n this.forEachObserver((observer) => {\r\n observer.error(error);\r\n });\r\n this.close(error);\r\n }\r\n complete() {\r\n this.forEachObserver((observer) => {\r\n observer.complete();\r\n });\r\n this.close();\r\n }\r\n /**\r\n * Subscribe function that can be used to add an Observer to the fan-out list.\r\n *\r\n * - We require that no event is sent to a subscriber sychronously to their\r\n * call to subscribe().\r\n */\r\n subscribe(nextOrObserver, error, complete) {\r\n let observer;\r\n if (nextOrObserver === undefined &&\r\n error === undefined &&\r\n complete === undefined) {\r\n throw new Error('Missing Observer.');\r\n }\r\n // Assemble an Observer object when passed as callback functions.\r\n if (implementsAnyMethods(nextOrObserver, [\r\n 'next',\r\n 'error',\r\n 'complete'\r\n ])) {\r\n observer = nextOrObserver;\r\n }\r\n else {\r\n observer = {\r\n next: nextOrObserver,\r\n error,\r\n complete\r\n };\r\n }\r\n if (observer.next === undefined) {\r\n observer.next = noop;\r\n }\r\n if (observer.error === undefined) {\r\n observer.error = noop;\r\n }\r\n if (observer.complete === undefined) {\r\n observer.complete = noop;\r\n }\r\n const unsub = this.unsubscribeOne.bind(this, this.observers.length);\r\n // Attempt to subscribe to a terminated Observable - we\r\n // just respond to the Observer with the final error or complete\r\n // event.\r\n if (this.finalized) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.task.then(() => {\r\n try {\r\n if (this.finalError) {\r\n observer.error(this.finalError);\r\n }\r\n else {\r\n observer.complete();\r\n }\r\n }\r\n catch (e) {\r\n // nothing\r\n }\r\n return;\r\n });\r\n }\r\n this.observers.push(observer);\r\n return unsub;\r\n }\r\n // Unsubscribe is synchronous - we guarantee that no events are sent to\r\n // any unsubscribed Observer.\r\n unsubscribeOne(i) {\r\n if (this.observers === undefined || this.observers[i] === undefined) {\r\n return;\r\n }\r\n delete this.observers[i];\r\n this.observerCount -= 1;\r\n if (this.observerCount === 0 && this.onNoObservers !== undefined) {\r\n this.onNoObservers(this);\r\n }\r\n }\r\n forEachObserver(fn) {\r\n if (this.finalized) {\r\n // Already closed by previous event....just eat the additional values.\r\n return;\r\n }\r\n // Since sendOne calls asynchronously - there is no chance that\r\n // this.observers will become undefined.\r\n for (let i = 0; i < this.observers.length; i++) {\r\n this.sendOne(i, fn);\r\n }\r\n }\r\n // Call the Observer via one of it's callback function. We are careful to\r\n // confirm that the observe has not been unsubscribed since this asynchronous\r\n // function had been queued.\r\n sendOne(i, fn) {\r\n // Execute the callback asynchronously\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.task.then(() => {\r\n if (this.observers !== undefined && this.observers[i] !== undefined) {\r\n try {\r\n fn(this.observers[i]);\r\n }\r\n catch (e) {\r\n // Ignore exceptions raised in Observers or missing methods of an\r\n // Observer.\r\n // Log error to console. b/31404806\r\n if (typeof console !== 'undefined' && console.error) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n close(err) {\r\n if (this.finalized) {\r\n return;\r\n }\r\n this.finalized = true;\r\n if (err !== undefined) {\r\n this.finalError = err;\r\n }\r\n // Proxy is no longer needed - garbage collect references\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.task.then(() => {\r\n this.observers = undefined;\r\n this.onNoObservers = undefined;\r\n });\r\n }\r\n}\r\n/** Turn synchronous function into one called asynchronously. */\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nfunction async(fn, onError) {\r\n return (...args) => {\r\n Promise.resolve(true)\r\n .then(() => {\r\n fn(...args);\r\n })\r\n .catch((error) => {\r\n if (onError) {\r\n onError(error);\r\n }\r\n });\r\n };\r\n}\r\n/**\r\n * Return true if the object passed in implements any of the named methods.\r\n */\r\nfunction implementsAnyMethods(obj, methods) {\r\n if (typeof obj !== 'object' || obj === null) {\r\n return false;\r\n }\r\n for (const method of methods) {\r\n if (method in obj && typeof obj[method] === 'function') {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\nfunction noop() {\r\n // do nothing\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Check to make sure the appropriate number of arguments are provided for a public function.\r\n * Throws an error if it fails.\r\n *\r\n * @param fnName The function name\r\n * @param minCount The minimum number of arguments to allow for the function call\r\n * @param maxCount The maximum number of argument to allow for the function call\r\n * @param argCount The actual number of arguments provided.\r\n */\r\nconst validateArgCount = function (fnName, minCount, maxCount, argCount) {\r\n let argError;\r\n if (argCount < minCount) {\r\n argError = 'at least ' + minCount;\r\n }\r\n else if (argCount > maxCount) {\r\n argError = maxCount === 0 ? 'none' : 'no more than ' + maxCount;\r\n }\r\n if (argError) {\r\n const error = fnName +\r\n ' failed: Was called with ' +\r\n argCount +\r\n (argCount === 1 ? ' argument.' : ' arguments.') +\r\n ' Expects ' +\r\n argError +\r\n '.';\r\n throw new Error(error);\r\n }\r\n};\r\n/**\r\n * Generates a string to prefix an error message about failed argument validation\r\n *\r\n * @param fnName The function name\r\n * @param argName The name of the argument\r\n * @return The prefix to add to the error thrown for validation.\r\n */\r\nfunction errorPrefix(fnName, argName) {\r\n return `${fnName} failed: ${argName} argument `;\r\n}\r\n/**\r\n * @param fnName\r\n * @param argumentNumber\r\n * @param namespace\r\n * @param optional\r\n */\r\nfunction validateNamespace(fnName, namespace, optional) {\r\n if (optional && !namespace) {\r\n return;\r\n }\r\n if (typeof namespace !== 'string') {\r\n //TODO: I should do more validation here. We only allow certain chars in namespaces.\r\n throw new Error(errorPrefix(fnName, 'namespace') + 'must be a valid firebase namespace.');\r\n }\r\n}\r\nfunction validateCallback(fnName, argumentName, \r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\ncallback, optional) {\r\n if (optional && !callback) {\r\n return;\r\n }\r\n if (typeof callback !== 'function') {\r\n throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid function.');\r\n }\r\n}\r\nfunction validateContextObject(fnName, argumentName, context, optional) {\r\n if (optional && !context) {\r\n return;\r\n }\r\n if (typeof context !== 'object' || context === null) {\r\n throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid context object.');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Code originally came from goog.crypt.stringToUtf8ByteArray, but for some reason they\r\n// automatically replaced '\\r\\n' with '\\n', and they didn't handle surrogate pairs,\r\n// so it's been modified.\r\n// Note that not all Unicode characters appear as single characters in JavaScript strings.\r\n// fromCharCode returns the UTF-16 encoding of a character - so some Unicode characters\r\n// use 2 characters in Javascript. All 4-byte UTF-8 characters begin with a first\r\n// character in the range 0xD800 - 0xDBFF (the first character of a so-called surrogate\r\n// pair).\r\n// See http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3\r\n/**\r\n * @param {string} str\r\n * @return {Array}\r\n */\r\nconst stringToByteArray = function (str) {\r\n const out = [];\r\n let p = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n let c = str.charCodeAt(i);\r\n // Is this the lead surrogate in a surrogate pair?\r\n if (c >= 0xd800 && c <= 0xdbff) {\r\n const high = c - 0xd800; // the high 10 bits.\r\n i++;\r\n assert(i < str.length, 'Surrogate pair missing trail surrogate.');\r\n const low = str.charCodeAt(i) - 0xdc00; // the low 10 bits.\r\n c = 0x10000 + (high << 10) + low;\r\n }\r\n if (c < 128) {\r\n out[p++] = c;\r\n }\r\n else if (c < 2048) {\r\n out[p++] = (c >> 6) | 192;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else if (c < 65536) {\r\n out[p++] = (c >> 12) | 224;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else {\r\n out[p++] = (c >> 18) | 240;\r\n out[p++] = ((c >> 12) & 63) | 128;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n }\r\n return out;\r\n};\r\n/**\r\n * Calculate length without actually converting; useful for doing cheaper validation.\r\n * @param {string} str\r\n * @return {number}\r\n */\r\nconst stringLength = function (str) {\r\n let p = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n const c = str.charCodeAt(i);\r\n if (c < 128) {\r\n p++;\r\n }\r\n else if (c < 2048) {\r\n p += 2;\r\n }\r\n else if (c >= 0xd800 && c <= 0xdbff) {\r\n // Lead surrogate of a surrogate pair. The pair together will take 4 bytes to represent.\r\n p += 4;\r\n i++; // skip trail surrogate.\r\n }\r\n else {\r\n p += 3;\r\n }\r\n }\r\n return p;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Copied from https://stackoverflow.com/a/2117523\r\n * Generates a new uuid.\r\n * @public\r\n */\r\nconst uuidv4 = function () {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\r\n const r = (Math.random() * 16) | 0, v = c === 'x' ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n};\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The amount of milliseconds to exponentially increase.\r\n */\r\nconst DEFAULT_INTERVAL_MILLIS = 1000;\r\n/**\r\n * The factor to backoff by.\r\n * Should be a number greater than 1.\r\n */\r\nconst DEFAULT_BACKOFF_FACTOR = 2;\r\n/**\r\n * The maximum milliseconds to increase to.\r\n *\r\n *

Visible for testing\r\n */\r\nconst MAX_VALUE_MILLIS = 4 * 60 * 60 * 1000; // Four hours, like iOS and Android.\r\n/**\r\n * The percentage of backoff time to randomize by.\r\n * See\r\n * http://go/safe-client-behavior#step-1-determine-the-appropriate-retry-interval-to-handle-spike-traffic\r\n * for context.\r\n *\r\n *

Visible for testing\r\n */\r\nconst RANDOM_FACTOR = 0.5;\r\n/**\r\n * Based on the backoff method from\r\n * https://github.com/google/closure-library/blob/master/closure/goog/math/exponentialbackoff.js.\r\n * Extracted here so we don't need to pass metadata and a stateful ExponentialBackoff object around.\r\n */\r\nfunction calculateBackoffMillis(backoffCount, intervalMillis = DEFAULT_INTERVAL_MILLIS, backoffFactor = DEFAULT_BACKOFF_FACTOR) {\r\n // Calculates an exponentially increasing value.\r\n // Deviation: calculates value from count and a constant interval, so we only need to save value\r\n // and count to restore state.\r\n const currBaseValue = intervalMillis * Math.pow(backoffFactor, backoffCount);\r\n // A random \"fuzz\" to avoid waves of retries.\r\n // Deviation: randomFactor is required.\r\n const randomWait = Math.round(\r\n // A fraction of the backoff value to add/subtract.\r\n // Deviation: changes multiplication order to improve readability.\r\n RANDOM_FACTOR *\r\n currBaseValue *\r\n // A random float (rounded to int by Math.round above) in the range [-1, 1]. Determines\r\n // if we add or subtract.\r\n (Math.random() - 0.5) *\r\n 2);\r\n // Limits backoff to max to avoid effectively permanent backoff.\r\n return Math.min(MAX_VALUE_MILLIS, currBaseValue + randomWait);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provide English ordinal letters after a number\r\n */\r\nfunction ordinal(i) {\r\n if (!Number.isFinite(i)) {\r\n return `${i}`;\r\n }\r\n return i + indicator(i);\r\n}\r\nfunction indicator(i) {\r\n i = Math.abs(i);\r\n const cent = i % 100;\r\n if (cent >= 10 && cent <= 20) {\r\n return 'th';\r\n }\r\n const dec = i % 10;\r\n if (dec === 1) {\r\n return 'st';\r\n }\r\n if (dec === 2) {\r\n return 'nd';\r\n }\r\n if (dec === 3) {\r\n return 'rd';\r\n }\r\n return 'th';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction getModularInstance(service) {\r\n if (service && service._delegate) {\r\n return service._delegate;\r\n }\r\n else {\r\n return service;\r\n }\r\n}\n\nexport { CONSTANTS, DecodeBase64StringError, Deferred, ErrorFactory, FirebaseError, MAX_VALUE_MILLIS, RANDOM_FACTOR, Sha1, areCookiesEnabled, assert, assertionError, async, base64, base64Decode, base64Encode, base64urlEncodeWithoutPadding, calculateBackoffMillis, contains, createMockUserToken, createSubscribe, decode, deepCopy, deepEqual, deepExtend, errorPrefix, extractQuerystring, getDefaultAppConfig, getDefaultEmulatorHost, getDefaultEmulatorHostnameAndPort, getDefaults, getExperimentalSetting, getGlobal, getModularInstance, getUA, isAdmin, isBrowser, isBrowserExtension, isElectron, isEmpty, isIE, isIndexedDBAvailable, isMobileCordova, isNode, isNodeSdk, isReactNative, isSafari, isUWP, isValidFormat, isValidTimestamp, issuedAtTime, jsonEval, map, ordinal, promiseWithTimeout, querystring, querystringDecode, safeGet, stringLength, stringToByteArray, stringify, uuidv4, validateArgCount, validateCallback, validateContextObject, validateIndexedDBOpenable, validateNamespace };\n//# sourceMappingURL=index.esm2017.js.map\n","import { Deferred } from '@firebase/util';\n\n/**\r\n * Component for service name T, e.g. `auth`, `auth-internal`\r\n */\r\nclass Component {\r\n /**\r\n *\r\n * @param name The public service name, e.g. app, auth, firestore, database\r\n * @param instanceFactory Service factory responsible for creating the public interface\r\n * @param type whether the service provided by the component is public or private\r\n */\r\n constructor(name, instanceFactory, type) {\r\n this.name = name;\r\n this.instanceFactory = instanceFactory;\r\n this.type = type;\r\n this.multipleInstances = false;\r\n /**\r\n * Properties to be added to the service namespace\r\n */\r\n this.serviceProps = {};\r\n this.instantiationMode = \"LAZY\" /* InstantiationMode.LAZY */;\r\n this.onInstanceCreated = null;\r\n }\r\n setInstantiationMode(mode) {\r\n this.instantiationMode = mode;\r\n return this;\r\n }\r\n setMultipleInstances(multipleInstances) {\r\n this.multipleInstances = multipleInstances;\r\n return this;\r\n }\r\n setServiceProps(props) {\r\n this.serviceProps = props;\r\n return this;\r\n }\r\n setInstanceCreatedCallback(callback) {\r\n this.onInstanceCreated = callback;\r\n return this;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DEFAULT_ENTRY_NAME = '[DEFAULT]';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for instance for service name T, e.g. 'auth', 'auth-internal'\r\n * NameServiceMapping[T] is an alias for the type of the instance\r\n */\r\nclass Provider {\r\n constructor(name, container) {\r\n this.name = name;\r\n this.container = container;\r\n this.component = null;\r\n this.instances = new Map();\r\n this.instancesDeferred = new Map();\r\n this.instancesOptions = new Map();\r\n this.onInitCallbacks = new Map();\r\n }\r\n /**\r\n * @param identifier A provider can provide mulitple instances of a service\r\n * if this.component.multipleInstances is true.\r\n */\r\n get(identifier) {\r\n // if multipleInstances is not supported, use the default name\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\r\n if (!this.instancesDeferred.has(normalizedIdentifier)) {\r\n const deferred = new Deferred();\r\n this.instancesDeferred.set(normalizedIdentifier, deferred);\r\n if (this.isInitialized(normalizedIdentifier) ||\r\n this.shouldAutoInitialize()) {\r\n // initialize the service if it can be auto-initialized\r\n try {\r\n const instance = this.getOrInitializeService({\r\n instanceIdentifier: normalizedIdentifier\r\n });\r\n if (instance) {\r\n deferred.resolve(instance);\r\n }\r\n }\r\n catch (e) {\r\n // when the instance factory throws an exception during get(), it should not cause\r\n // a fatal error. We just return the unresolved promise in this case.\r\n }\r\n }\r\n }\r\n return this.instancesDeferred.get(normalizedIdentifier).promise;\r\n }\r\n getImmediate(options) {\r\n var _a;\r\n // if multipleInstances is not supported, use the default name\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(options === null || options === void 0 ? void 0 : options.identifier);\r\n const optional = (_a = options === null || options === void 0 ? void 0 : options.optional) !== null && _a !== void 0 ? _a : false;\r\n if (this.isInitialized(normalizedIdentifier) ||\r\n this.shouldAutoInitialize()) {\r\n try {\r\n return this.getOrInitializeService({\r\n instanceIdentifier: normalizedIdentifier\r\n });\r\n }\r\n catch (e) {\r\n if (optional) {\r\n return null;\r\n }\r\n else {\r\n throw e;\r\n }\r\n }\r\n }\r\n else {\r\n // In case a component is not initialized and should/can not be auto-initialized at the moment, return null if the optional flag is set, or throw\r\n if (optional) {\r\n return null;\r\n }\r\n else {\r\n throw Error(`Service ${this.name} is not available`);\r\n }\r\n }\r\n }\r\n getComponent() {\r\n return this.component;\r\n }\r\n setComponent(component) {\r\n if (component.name !== this.name) {\r\n throw Error(`Mismatching Component ${component.name} for Provider ${this.name}.`);\r\n }\r\n if (this.component) {\r\n throw Error(`Component for ${this.name} has already been provided`);\r\n }\r\n this.component = component;\r\n // return early without attempting to initialize the component if the component requires explicit initialization (calling `Provider.initialize()`)\r\n if (!this.shouldAutoInitialize()) {\r\n return;\r\n }\r\n // if the service is eager, initialize the default instance\r\n if (isComponentEager(component)) {\r\n try {\r\n this.getOrInitializeService({ instanceIdentifier: DEFAULT_ENTRY_NAME });\r\n }\r\n catch (e) {\r\n // when the instance factory for an eager Component throws an exception during the eager\r\n // initialization, it should not cause a fatal error.\r\n // TODO: Investigate if we need to make it configurable, because some component may want to cause\r\n // a fatal error in this case?\r\n }\r\n }\r\n // Create service instances for the pending promises and resolve them\r\n // NOTE: if this.multipleInstances is false, only the default instance will be created\r\n // and all promises with resolve with it regardless of the identifier.\r\n for (const [instanceIdentifier, instanceDeferred] of this.instancesDeferred.entries()) {\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier);\r\n try {\r\n // `getOrInitializeService()` should always return a valid instance since a component is guaranteed. use ! to make typescript happy.\r\n const instance = this.getOrInitializeService({\r\n instanceIdentifier: normalizedIdentifier\r\n });\r\n instanceDeferred.resolve(instance);\r\n }\r\n catch (e) {\r\n // when the instance factory throws an exception, it should not cause\r\n // a fatal error. We just leave the promise unresolved.\r\n }\r\n }\r\n }\r\n clearInstance(identifier = DEFAULT_ENTRY_NAME) {\r\n this.instancesDeferred.delete(identifier);\r\n this.instancesOptions.delete(identifier);\r\n this.instances.delete(identifier);\r\n }\r\n // app.delete() will call this method on every provider to delete the services\r\n // TODO: should we mark the provider as deleted?\r\n async delete() {\r\n const services = Array.from(this.instances.values());\r\n await Promise.all([\r\n ...services\r\n .filter(service => 'INTERNAL' in service) // legacy services\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n .map(service => service.INTERNAL.delete()),\r\n ...services\r\n .filter(service => '_delete' in service) // modularized services\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n .map(service => service._delete())\r\n ]);\r\n }\r\n isComponentSet() {\r\n return this.component != null;\r\n }\r\n isInitialized(identifier = DEFAULT_ENTRY_NAME) {\r\n return this.instances.has(identifier);\r\n }\r\n getOptions(identifier = DEFAULT_ENTRY_NAME) {\r\n return this.instancesOptions.get(identifier) || {};\r\n }\r\n initialize(opts = {}) {\r\n const { options = {} } = opts;\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(opts.instanceIdentifier);\r\n if (this.isInitialized(normalizedIdentifier)) {\r\n throw Error(`${this.name}(${normalizedIdentifier}) has already been initialized`);\r\n }\r\n if (!this.isComponentSet()) {\r\n throw Error(`Component ${this.name} has not been registered yet`);\r\n }\r\n const instance = this.getOrInitializeService({\r\n instanceIdentifier: normalizedIdentifier,\r\n options\r\n });\r\n // resolve any pending promise waiting for the service instance\r\n for (const [instanceIdentifier, instanceDeferred] of this.instancesDeferred.entries()) {\r\n const normalizedDeferredIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier);\r\n if (normalizedIdentifier === normalizedDeferredIdentifier) {\r\n instanceDeferred.resolve(instance);\r\n }\r\n }\r\n return instance;\r\n }\r\n /**\r\n *\r\n * @param callback - a function that will be invoked after the provider has been initialized by calling provider.initialize().\r\n * The function is invoked SYNCHRONOUSLY, so it should not execute any longrunning tasks in order to not block the program.\r\n *\r\n * @param identifier An optional instance identifier\r\n * @returns a function to unregister the callback\r\n */\r\n onInit(callback, identifier) {\r\n var _a;\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\r\n const existingCallbacks = (_a = this.onInitCallbacks.get(normalizedIdentifier)) !== null && _a !== void 0 ? _a : new Set();\r\n existingCallbacks.add(callback);\r\n this.onInitCallbacks.set(normalizedIdentifier, existingCallbacks);\r\n const existingInstance = this.instances.get(normalizedIdentifier);\r\n if (existingInstance) {\r\n callback(existingInstance, normalizedIdentifier);\r\n }\r\n return () => {\r\n existingCallbacks.delete(callback);\r\n };\r\n }\r\n /**\r\n * Invoke onInit callbacks synchronously\r\n * @param instance the service instance`\r\n */\r\n invokeOnInitCallbacks(instance, identifier) {\r\n const callbacks = this.onInitCallbacks.get(identifier);\r\n if (!callbacks) {\r\n return;\r\n }\r\n for (const callback of callbacks) {\r\n try {\r\n callback(instance, identifier);\r\n }\r\n catch (_a) {\r\n // ignore errors in the onInit callback\r\n }\r\n }\r\n }\r\n getOrInitializeService({ instanceIdentifier, options = {} }) {\r\n let instance = this.instances.get(instanceIdentifier);\r\n if (!instance && this.component) {\r\n instance = this.component.instanceFactory(this.container, {\r\n instanceIdentifier: normalizeIdentifierForFactory(instanceIdentifier),\r\n options\r\n });\r\n this.instances.set(instanceIdentifier, instance);\r\n this.instancesOptions.set(instanceIdentifier, options);\r\n /**\r\n * Invoke onInit listeners.\r\n * Note this.component.onInstanceCreated is different, which is used by the component creator,\r\n * while onInit listeners are registered by consumers of the provider.\r\n */\r\n this.invokeOnInitCallbacks(instance, instanceIdentifier);\r\n /**\r\n * Order is important\r\n * onInstanceCreated() should be called after this.instances.set(instanceIdentifier, instance); which\r\n * makes `isInitialized()` return true.\r\n */\r\n if (this.component.onInstanceCreated) {\r\n try {\r\n this.component.onInstanceCreated(this.container, instanceIdentifier, instance);\r\n }\r\n catch (_a) {\r\n // ignore errors in the onInstanceCreatedCallback\r\n }\r\n }\r\n }\r\n return instance || null;\r\n }\r\n normalizeInstanceIdentifier(identifier = DEFAULT_ENTRY_NAME) {\r\n if (this.component) {\r\n return this.component.multipleInstances ? identifier : DEFAULT_ENTRY_NAME;\r\n }\r\n else {\r\n return identifier; // assume multiple instances are supported before the component is provided.\r\n }\r\n }\r\n shouldAutoInitialize() {\r\n return (!!this.component &&\r\n this.component.instantiationMode !== \"EXPLICIT\" /* InstantiationMode.EXPLICIT */);\r\n }\r\n}\r\n// undefined should be passed to the service factory for the default instance\r\nfunction normalizeIdentifierForFactory(identifier) {\r\n return identifier === DEFAULT_ENTRY_NAME ? undefined : identifier;\r\n}\r\nfunction isComponentEager(component) {\r\n return component.instantiationMode === \"EAGER\" /* InstantiationMode.EAGER */;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * ComponentContainer that provides Providers for service name T, e.g. `auth`, `auth-internal`\r\n */\r\nclass ComponentContainer {\r\n constructor(name) {\r\n this.name = name;\r\n this.providers = new Map();\r\n }\r\n /**\r\n *\r\n * @param component Component being added\r\n * @param overwrite When a component with the same name has already been registered,\r\n * if overwrite is true: overwrite the existing component with the new component and create a new\r\n * provider with the new component. It can be useful in tests where you want to use different mocks\r\n * for different tests.\r\n * if overwrite is false: throw an exception\r\n */\r\n addComponent(component) {\r\n const provider = this.getProvider(component.name);\r\n if (provider.isComponentSet()) {\r\n throw new Error(`Component ${component.name} has already been registered with ${this.name}`);\r\n }\r\n provider.setComponent(component);\r\n }\r\n addOrOverwriteComponent(component) {\r\n const provider = this.getProvider(component.name);\r\n if (provider.isComponentSet()) {\r\n // delete the existing provider from the container, so we can register the new component\r\n this.providers.delete(component.name);\r\n }\r\n this.addComponent(component);\r\n }\r\n /**\r\n * getProvider provides a type safe interface where it can only be called with a field name\r\n * present in NameServiceMapping interface.\r\n *\r\n * Firebase SDKs providing services should extend NameServiceMapping interface to register\r\n * themselves.\r\n */\r\n getProvider(name) {\r\n if (this.providers.has(name)) {\r\n return this.providers.get(name);\r\n }\r\n // create a Provider for a service that hasn't registered with Firebase\r\n const provider = new Provider(name, this);\r\n this.providers.set(name, provider);\r\n return provider;\r\n }\r\n getProviders() {\r\n return Array.from(this.providers.values());\r\n }\r\n}\n\nexport { Component, ComponentContainer, Provider };\n//# sourceMappingURL=index.esm2017.js.map\n","/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A container for all of the Logger instances\r\n */\r\nconst instances = [];\r\n/**\r\n * The JS SDK supports 5 log levels and also allows a user the ability to\r\n * silence the logs altogether.\r\n *\r\n * The order is a follows:\r\n * DEBUG < VERBOSE < INFO < WARN < ERROR\r\n *\r\n * All of the log types above the current log level will be captured (i.e. if\r\n * you set the log level to `INFO`, errors will still be logged, but `DEBUG` and\r\n * `VERBOSE` logs will not)\r\n */\r\nvar LogLevel;\r\n(function (LogLevel) {\r\n LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\r\n LogLevel[LogLevel[\"VERBOSE\"] = 1] = \"VERBOSE\";\r\n LogLevel[LogLevel[\"INFO\"] = 2] = \"INFO\";\r\n LogLevel[LogLevel[\"WARN\"] = 3] = \"WARN\";\r\n LogLevel[LogLevel[\"ERROR\"] = 4] = \"ERROR\";\r\n LogLevel[LogLevel[\"SILENT\"] = 5] = \"SILENT\";\r\n})(LogLevel || (LogLevel = {}));\r\nconst levelStringToEnum = {\r\n 'debug': LogLevel.DEBUG,\r\n 'verbose': LogLevel.VERBOSE,\r\n 'info': LogLevel.INFO,\r\n 'warn': LogLevel.WARN,\r\n 'error': LogLevel.ERROR,\r\n 'silent': LogLevel.SILENT\r\n};\r\n/**\r\n * The default log level\r\n */\r\nconst defaultLogLevel = LogLevel.INFO;\r\n/**\r\n * By default, `console.debug` is not displayed in the developer console (in\r\n * chrome). To avoid forcing users to have to opt-in to these logs twice\r\n * (i.e. once for firebase, and once in the console), we are sending `DEBUG`\r\n * logs to the `console.log` function.\r\n */\r\nconst ConsoleMethod = {\r\n [LogLevel.DEBUG]: 'log',\r\n [LogLevel.VERBOSE]: 'log',\r\n [LogLevel.INFO]: 'info',\r\n [LogLevel.WARN]: 'warn',\r\n [LogLevel.ERROR]: 'error'\r\n};\r\n/**\r\n * The default log handler will forward DEBUG, VERBOSE, INFO, WARN, and ERROR\r\n * messages on to their corresponding console counterparts (if the log method\r\n * is supported by the current log level)\r\n */\r\nconst defaultLogHandler = (instance, logType, ...args) => {\r\n if (logType < instance.logLevel) {\r\n return;\r\n }\r\n const now = new Date().toISOString();\r\n const method = ConsoleMethod[logType];\r\n if (method) {\r\n console[method](`[${now}] ${instance.name}:`, ...args);\r\n }\r\n else {\r\n throw new Error(`Attempted to log a message with an invalid logType (value: ${logType})`);\r\n }\r\n};\r\nclass Logger {\r\n /**\r\n * Gives you an instance of a Logger to capture messages according to\r\n * Firebase's logging scheme.\r\n *\r\n * @param name The name that the logs will be associated with\r\n */\r\n constructor(name) {\r\n this.name = name;\r\n /**\r\n * The log level of the given Logger instance.\r\n */\r\n this._logLevel = defaultLogLevel;\r\n /**\r\n * The main (internal) log handler for the Logger instance.\r\n * Can be set to a new function in internal package code but not by user.\r\n */\r\n this._logHandler = defaultLogHandler;\r\n /**\r\n * The optional, additional, user-defined log handler for the Logger instance.\r\n */\r\n this._userLogHandler = null;\r\n /**\r\n * Capture the current instance for later use\r\n */\r\n instances.push(this);\r\n }\r\n get logLevel() {\r\n return this._logLevel;\r\n }\r\n set logLevel(val) {\r\n if (!(val in LogLevel)) {\r\n throw new TypeError(`Invalid value \"${val}\" assigned to \\`logLevel\\``);\r\n }\r\n this._logLevel = val;\r\n }\r\n // Workaround for setter/getter having to be the same type.\r\n setLogLevel(val) {\r\n this._logLevel = typeof val === 'string' ? levelStringToEnum[val] : val;\r\n }\r\n get logHandler() {\r\n return this._logHandler;\r\n }\r\n set logHandler(val) {\r\n if (typeof val !== 'function') {\r\n throw new TypeError('Value assigned to `logHandler` must be a function');\r\n }\r\n this._logHandler = val;\r\n }\r\n get userLogHandler() {\r\n return this._userLogHandler;\r\n }\r\n set userLogHandler(val) {\r\n this._userLogHandler = val;\r\n }\r\n /**\r\n * The functions below are all based on the `console` interface\r\n */\r\n debug(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.DEBUG, ...args);\r\n this._logHandler(this, LogLevel.DEBUG, ...args);\r\n }\r\n log(...args) {\r\n this._userLogHandler &&\r\n this._userLogHandler(this, LogLevel.VERBOSE, ...args);\r\n this._logHandler(this, LogLevel.VERBOSE, ...args);\r\n }\r\n info(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.INFO, ...args);\r\n this._logHandler(this, LogLevel.INFO, ...args);\r\n }\r\n warn(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.WARN, ...args);\r\n this._logHandler(this, LogLevel.WARN, ...args);\r\n }\r\n error(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.ERROR, ...args);\r\n this._logHandler(this, LogLevel.ERROR, ...args);\r\n }\r\n}\r\nfunction setLogLevel(level) {\r\n instances.forEach(inst => {\r\n inst.setLogLevel(level);\r\n });\r\n}\r\nfunction setUserLogHandler(logCallback, options) {\r\n for (const instance of instances) {\r\n let customLogLevel = null;\r\n if (options && options.level) {\r\n customLogLevel = levelStringToEnum[options.level];\r\n }\r\n if (logCallback === null) {\r\n instance.userLogHandler = null;\r\n }\r\n else {\r\n instance.userLogHandler = (instance, level, ...args) => {\r\n const message = args\r\n .map(arg => {\r\n if (arg == null) {\r\n return null;\r\n }\r\n else if (typeof arg === 'string') {\r\n return arg;\r\n }\r\n else if (typeof arg === 'number' || typeof arg === 'boolean') {\r\n return arg.toString();\r\n }\r\n else if (arg instanceof Error) {\r\n return arg.message;\r\n }\r\n else {\r\n try {\r\n return JSON.stringify(arg);\r\n }\r\n catch (ignored) {\r\n return null;\r\n }\r\n }\r\n })\r\n .filter(arg => arg)\r\n .join(' ');\r\n if (level >= (customLogLevel !== null && customLogLevel !== void 0 ? customLogLevel : instance.logLevel)) {\r\n logCallback({\r\n level: LogLevel[level].toLowerCase(),\r\n message,\r\n args,\r\n type: instance.name\r\n });\r\n }\r\n };\r\n }\r\n }\r\n}\n\nexport { LogLevel, Logger, setLogLevel, setUserLogHandler };\n//# sourceMappingURL=index.esm2017.js.map\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event);\n });\n }\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event.newVersion, event));\n }\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking) {\n db.addEventListener('versionchange', (event) => blocking(event.oldVersion, event.newVersion, event));\n }\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event));\n }\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","import { Component, ComponentContainer } from '@firebase/component';\nimport { Logger, setUserLogHandler, setLogLevel as setLogLevel$1 } from '@firebase/logger';\nimport { ErrorFactory, getDefaultAppConfig, deepEqual, isBrowser, FirebaseError, base64urlEncodeWithoutPadding, isIndexedDBAvailable, validateIndexedDBOpenable } from '@firebase/util';\nexport { FirebaseError } from '@firebase/util';\nimport { openDB } from 'idb';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass PlatformLoggerServiceImpl {\r\n constructor(container) {\r\n this.container = container;\r\n }\r\n // In initial implementation, this will be called by installations on\r\n // auth token refresh, and installations will send this string.\r\n getPlatformInfoString() {\r\n const providers = this.container.getProviders();\r\n // Loop through providers and get library/version pairs from any that are\r\n // version components.\r\n return providers\r\n .map(provider => {\r\n if (isVersionServiceProvider(provider)) {\r\n const service = provider.getImmediate();\r\n return `${service.library}/${service.version}`;\r\n }\r\n else {\r\n return null;\r\n }\r\n })\r\n .filter(logString => logString)\r\n .join(' ');\r\n }\r\n}\r\n/**\r\n *\r\n * @param provider check if this provider provides a VersionService\r\n *\r\n * NOTE: Using Provider<'app-version'> is a hack to indicate that the provider\r\n * provides VersionService. The provider is not necessarily a 'app-version'\r\n * provider.\r\n */\r\nfunction isVersionServiceProvider(provider) {\r\n const component = provider.getComponent();\r\n return (component === null || component === void 0 ? void 0 : component.type) === \"VERSION\" /* ComponentType.VERSION */;\r\n}\n\nconst name$o = \"@firebase/app\";\nconst version$1 = \"0.10.2\";\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst logger = new Logger('@firebase/app');\n\nconst name$n = \"@firebase/app-compat\";\n\nconst name$m = \"@firebase/analytics-compat\";\n\nconst name$l = \"@firebase/analytics\";\n\nconst name$k = \"@firebase/app-check-compat\";\n\nconst name$j = \"@firebase/app-check\";\n\nconst name$i = \"@firebase/auth\";\n\nconst name$h = \"@firebase/auth-compat\";\n\nconst name$g = \"@firebase/database\";\n\nconst name$f = \"@firebase/database-compat\";\n\nconst name$e = \"@firebase/functions\";\n\nconst name$d = \"@firebase/functions-compat\";\n\nconst name$c = \"@firebase/installations\";\n\nconst name$b = \"@firebase/installations-compat\";\n\nconst name$a = \"@firebase/messaging\";\n\nconst name$9 = \"@firebase/messaging-compat\";\n\nconst name$8 = \"@firebase/performance\";\n\nconst name$7 = \"@firebase/performance-compat\";\n\nconst name$6 = \"@firebase/remote-config\";\n\nconst name$5 = \"@firebase/remote-config-compat\";\n\nconst name$4 = \"@firebase/storage\";\n\nconst name$3 = \"@firebase/storage-compat\";\n\nconst name$2 = \"@firebase/firestore\";\n\nconst name$1 = \"@firebase/firestore-compat\";\n\nconst name = \"firebase\";\nconst version = \"10.11.1\";\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The default app name\r\n *\r\n * @internal\r\n */\r\nconst DEFAULT_ENTRY_NAME = '[DEFAULT]';\r\nconst PLATFORM_LOG_STRING = {\r\n [name$o]: 'fire-core',\r\n [name$n]: 'fire-core-compat',\r\n [name$l]: 'fire-analytics',\r\n [name$m]: 'fire-analytics-compat',\r\n [name$j]: 'fire-app-check',\r\n [name$k]: 'fire-app-check-compat',\r\n [name$i]: 'fire-auth',\r\n [name$h]: 'fire-auth-compat',\r\n [name$g]: 'fire-rtdb',\r\n [name$f]: 'fire-rtdb-compat',\r\n [name$e]: 'fire-fn',\r\n [name$d]: 'fire-fn-compat',\r\n [name$c]: 'fire-iid',\r\n [name$b]: 'fire-iid-compat',\r\n [name$a]: 'fire-fcm',\r\n [name$9]: 'fire-fcm-compat',\r\n [name$8]: 'fire-perf',\r\n [name$7]: 'fire-perf-compat',\r\n [name$6]: 'fire-rc',\r\n [name$5]: 'fire-rc-compat',\r\n [name$4]: 'fire-gcs',\r\n [name$3]: 'fire-gcs-compat',\r\n [name$2]: 'fire-fst',\r\n [name$1]: 'fire-fst-compat',\r\n 'fire-js': 'fire-js',\r\n [name]: 'fire-js-all'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @internal\r\n */\r\nconst _apps = new Map();\r\n/**\r\n * @internal\r\n */\r\nconst _serverApps = new Map();\r\n/**\r\n * Registered components.\r\n *\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nconst _components = new Map();\r\n/**\r\n * @param component - the component being added to this app's container\r\n *\r\n * @internal\r\n */\r\nfunction _addComponent(app, component) {\r\n try {\r\n app.container.addComponent(component);\r\n }\r\n catch (e) {\r\n logger.debug(`Component ${component.name} failed to register with FirebaseApp ${app.name}`, e);\r\n }\r\n}\r\n/**\r\n *\r\n * @internal\r\n */\r\nfunction _addOrOverwriteComponent(app, component) {\r\n app.container.addOrOverwriteComponent(component);\r\n}\r\n/**\r\n *\r\n * @param component - the component to register\r\n * @returns whether or not the component is registered successfully\r\n *\r\n * @internal\r\n */\r\nfunction _registerComponent(component) {\r\n const componentName = component.name;\r\n if (_components.has(componentName)) {\r\n logger.debug(`There were multiple attempts to register component ${componentName}.`);\r\n return false;\r\n }\r\n _components.set(componentName, component);\r\n // add the component to existing app instances\r\n for (const app of _apps.values()) {\r\n _addComponent(app, component);\r\n }\r\n for (const serverApp of _serverApps.values()) {\r\n _addComponent(serverApp, component);\r\n }\r\n return true;\r\n}\r\n/**\r\n *\r\n * @param app - FirebaseApp instance\r\n * @param name - service name\r\n *\r\n * @returns the provider for the service with the matching name\r\n *\r\n * @internal\r\n */\r\nfunction _getProvider(app, name) {\r\n const heartbeatController = app.container\r\n .getProvider('heartbeat')\r\n .getImmediate({ optional: true });\r\n if (heartbeatController) {\r\n void heartbeatController.triggerHeartbeat();\r\n }\r\n return app.container.getProvider(name);\r\n}\r\n/**\r\n *\r\n * @param app - FirebaseApp instance\r\n * @param name - service name\r\n * @param instanceIdentifier - service instance identifier in case the service supports multiple instances\r\n *\r\n * @internal\r\n */\r\nfunction _removeServiceInstance(app, name, instanceIdentifier = DEFAULT_ENTRY_NAME) {\r\n _getProvider(app, name).clearInstance(instanceIdentifier);\r\n}\r\n/**\r\n *\r\n * @param obj - an object of type FirebaseApp or FirebaseOptions.\r\n *\r\n * @returns true if the provide object is of type FirebaseApp.\r\n *\r\n * @internal\r\n */\r\nfunction _isFirebaseApp(obj) {\r\n return obj.options !== undefined;\r\n}\r\n/**\r\n *\r\n * @param obj - an object of type FirebaseApp.\r\n *\r\n * @returns true if the provided object is of type FirebaseServerAppImpl.\r\n *\r\n * @internal\r\n */\r\nfunction _isFirebaseServerApp(obj) {\r\n return obj.settings !== undefined;\r\n}\r\n/**\r\n * Test only\r\n *\r\n * @internal\r\n */\r\nfunction _clearComponents() {\r\n _components.clear();\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst ERRORS = {\r\n [\"no-app\" /* AppError.NO_APP */]: \"No Firebase App '{$appName}' has been created - \" +\r\n 'call initializeApp() first',\r\n [\"bad-app-name\" /* AppError.BAD_APP_NAME */]: \"Illegal App name: '{$appName}'\",\r\n [\"duplicate-app\" /* AppError.DUPLICATE_APP */]: \"Firebase App named '{$appName}' already exists with different options or config\",\r\n [\"app-deleted\" /* AppError.APP_DELETED */]: \"Firebase App named '{$appName}' already deleted\",\r\n [\"server-app-deleted\" /* AppError.SERVER_APP_DELETED */]: 'Firebase Server App has been deleted',\r\n [\"no-options\" /* AppError.NO_OPTIONS */]: 'Need to provide options, when not being deployed to hosting via source.',\r\n [\"invalid-app-argument\" /* AppError.INVALID_APP_ARGUMENT */]: 'firebase.{$appName}() takes either no argument or a ' +\r\n 'Firebase App instance.',\r\n [\"invalid-log-argument\" /* AppError.INVALID_LOG_ARGUMENT */]: 'First argument to `onLog` must be null or a function.',\r\n [\"idb-open\" /* AppError.IDB_OPEN */]: 'Error thrown when opening IndexedDB. Original error: {$originalErrorMessage}.',\r\n [\"idb-get\" /* AppError.IDB_GET */]: 'Error thrown when reading from IndexedDB. Original error: {$originalErrorMessage}.',\r\n [\"idb-set\" /* AppError.IDB_WRITE */]: 'Error thrown when writing to IndexedDB. Original error: {$originalErrorMessage}.',\r\n [\"idb-delete\" /* AppError.IDB_DELETE */]: 'Error thrown when deleting from IndexedDB. Original error: {$originalErrorMessage}.',\r\n [\"finalization-registry-not-supported\" /* AppError.FINALIZATION_REGISTRY_NOT_SUPPORTED */]: 'FirebaseServerApp deleteOnDeref field defined but the JS runtime does not support FinalizationRegistry.',\r\n [\"invalid-server-app-environment\" /* AppError.INVALID_SERVER_APP_ENVIRONMENT */]: 'FirebaseServerApp is not for use in browser environments.'\r\n};\r\nconst ERROR_FACTORY = new ErrorFactory('app', 'Firebase', ERRORS);\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass FirebaseAppImpl {\r\n constructor(options, config, container) {\r\n this._isDeleted = false;\r\n this._options = Object.assign({}, options);\r\n this._config = Object.assign({}, config);\r\n this._name = config.name;\r\n this._automaticDataCollectionEnabled =\r\n config.automaticDataCollectionEnabled;\r\n this._container = container;\r\n this.container.addComponent(new Component('app', () => this, \"PUBLIC\" /* ComponentType.PUBLIC */));\r\n }\r\n get automaticDataCollectionEnabled() {\r\n this.checkDestroyed();\r\n return this._automaticDataCollectionEnabled;\r\n }\r\n set automaticDataCollectionEnabled(val) {\r\n this.checkDestroyed();\r\n this._automaticDataCollectionEnabled = val;\r\n }\r\n get name() {\r\n this.checkDestroyed();\r\n return this._name;\r\n }\r\n get options() {\r\n this.checkDestroyed();\r\n return this._options;\r\n }\r\n get config() {\r\n this.checkDestroyed();\r\n return this._config;\r\n }\r\n get container() {\r\n return this._container;\r\n }\r\n get isDeleted() {\r\n return this._isDeleted;\r\n }\r\n set isDeleted(val) {\r\n this._isDeleted = val;\r\n }\r\n /**\r\n * This function will throw an Error if the App has already been deleted -\r\n * use before performing API actions on the App.\r\n */\r\n checkDestroyed() {\r\n if (this.isDeleted) {\r\n throw ERROR_FACTORY.create(\"app-deleted\" /* AppError.APP_DELETED */, { appName: this._name });\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2023 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass FirebaseServerAppImpl extends FirebaseAppImpl {\r\n constructor(options, serverConfig, name, container) {\r\n // Build configuration parameters for the FirebaseAppImpl base class.\r\n const automaticDataCollectionEnabled = serverConfig.automaticDataCollectionEnabled !== undefined\r\n ? serverConfig.automaticDataCollectionEnabled\r\n : false;\r\n // Create the FirebaseAppSettings object for the FirebaseAppImp constructor.\r\n const config = {\r\n name,\r\n automaticDataCollectionEnabled\r\n };\r\n if (options.apiKey !== undefined) {\r\n // Construct the parent FirebaseAppImp object.\r\n super(options, config, container);\r\n }\r\n else {\r\n const appImpl = options;\r\n super(appImpl.options, config, container);\r\n }\r\n // Now construct the data for the FirebaseServerAppImpl.\r\n this._serverConfig = Object.assign({ automaticDataCollectionEnabled }, serverConfig);\r\n this._finalizationRegistry = new FinalizationRegistry(() => {\r\n this.automaticCleanup();\r\n });\r\n this._refCount = 0;\r\n this.incRefCount(this._serverConfig.releaseOnDeref);\r\n // Do not retain a hard reference to the dref object, otherwise the FinalizationRegisry\r\n // will never trigger.\r\n this._serverConfig.releaseOnDeref = undefined;\r\n serverConfig.releaseOnDeref = undefined;\r\n registerVersion(name$o, version$1, 'serverapp');\r\n }\r\n toJSON() {\r\n return undefined;\r\n }\r\n get refCount() {\r\n return this._refCount;\r\n }\r\n // Increment the reference count of this server app. If an object is provided, register it\r\n // with the finalization registry.\r\n incRefCount(obj) {\r\n if (this.isDeleted) {\r\n return;\r\n }\r\n this._refCount++;\r\n if (obj !== undefined) {\r\n this._finalizationRegistry.register(obj, this);\r\n }\r\n }\r\n // Decrement the reference count.\r\n decRefCount() {\r\n if (this.isDeleted) {\r\n return 0;\r\n }\r\n return --this._refCount;\r\n }\r\n // Invoked by the FinalizationRegistry callback to note that this app should go through its\r\n // reference counts and delete itself if no reference count remain. The coordinating logic that\r\n // handles this is in deleteApp(...).\r\n automaticCleanup() {\r\n void deleteApp(this);\r\n }\r\n get settings() {\r\n this.checkDestroyed();\r\n return this._serverConfig;\r\n }\r\n /**\r\n * This function will throw an Error if the App has already been deleted -\r\n * use before performing API actions on the App.\r\n */\r\n checkDestroyed() {\r\n if (this.isDeleted) {\r\n throw ERROR_FACTORY.create(\"server-app-deleted\" /* AppError.SERVER_APP_DELETED */);\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The current SDK version.\r\n *\r\n * @public\r\n */\r\nconst SDK_VERSION = version;\r\nfunction initializeApp(_options, rawConfig = {}) {\r\n let options = _options;\r\n if (typeof rawConfig !== 'object') {\r\n const name = rawConfig;\r\n rawConfig = { name };\r\n }\r\n const config = Object.assign({ name: DEFAULT_ENTRY_NAME, automaticDataCollectionEnabled: false }, rawConfig);\r\n const name = config.name;\r\n if (typeof name !== 'string' || !name) {\r\n throw ERROR_FACTORY.create(\"bad-app-name\" /* AppError.BAD_APP_NAME */, {\r\n appName: String(name)\r\n });\r\n }\r\n options || (options = getDefaultAppConfig());\r\n if (!options) {\r\n throw ERROR_FACTORY.create(\"no-options\" /* AppError.NO_OPTIONS */);\r\n }\r\n const existingApp = _apps.get(name);\r\n if (existingApp) {\r\n // return the existing app if options and config deep equal the ones in the existing app.\r\n if (deepEqual(options, existingApp.options) &&\r\n deepEqual(config, existingApp.config)) {\r\n return existingApp;\r\n }\r\n else {\r\n throw ERROR_FACTORY.create(\"duplicate-app\" /* AppError.DUPLICATE_APP */, { appName: name });\r\n }\r\n }\r\n const container = new ComponentContainer(name);\r\n for (const component of _components.values()) {\r\n container.addComponent(component);\r\n }\r\n const newApp = new FirebaseAppImpl(options, config, container);\r\n _apps.set(name, newApp);\r\n return newApp;\r\n}\r\nfunction initializeServerApp(_options, _serverAppConfig) {\r\n if (isBrowser()) {\r\n // FirebaseServerApp isn't designed to be run in browsers.\r\n throw ERROR_FACTORY.create(\"invalid-server-app-environment\" /* AppError.INVALID_SERVER_APP_ENVIRONMENT */);\r\n }\r\n if (_serverAppConfig.automaticDataCollectionEnabled === undefined) {\r\n _serverAppConfig.automaticDataCollectionEnabled = false;\r\n }\r\n let appOptions;\r\n if (_isFirebaseApp(_options)) {\r\n appOptions = _options.options;\r\n }\r\n else {\r\n appOptions = _options;\r\n }\r\n // Build an app name based on a hash of the configuration options.\r\n const nameObj = Object.assign(Object.assign({}, _serverAppConfig), appOptions);\r\n // However, Do not mangle the name based on releaseOnDeref, since it will vary between the\r\n // construction of FirebaseServerApp instances. For example, if the object is the request headers.\r\n if (nameObj.releaseOnDeref !== undefined) {\r\n delete nameObj.releaseOnDeref;\r\n }\r\n const hashCode = (s) => {\r\n return [...s].reduce((hash, c) => (Math.imul(31, hash) + c.charCodeAt(0)) | 0, 0);\r\n };\r\n if (_serverAppConfig.releaseOnDeref !== undefined) {\r\n if (typeof FinalizationRegistry === 'undefined') {\r\n throw ERROR_FACTORY.create(\"finalization-registry-not-supported\" /* AppError.FINALIZATION_REGISTRY_NOT_SUPPORTED */, {});\r\n }\r\n }\r\n const nameString = '' + hashCode(JSON.stringify(nameObj));\r\n const existingApp = _serverApps.get(nameString);\r\n if (existingApp) {\r\n existingApp.incRefCount(_serverAppConfig.releaseOnDeref);\r\n return existingApp;\r\n }\r\n const container = new ComponentContainer(nameString);\r\n for (const component of _components.values()) {\r\n container.addComponent(component);\r\n }\r\n const newApp = new FirebaseServerAppImpl(appOptions, _serverAppConfig, nameString, container);\r\n _serverApps.set(nameString, newApp);\r\n return newApp;\r\n}\r\n/**\r\n * Retrieves a {@link @firebase/app#FirebaseApp} instance.\r\n *\r\n * When called with no arguments, the default app is returned. When an app name\r\n * is provided, the app corresponding to that name is returned.\r\n *\r\n * An exception is thrown if the app being retrieved has not yet been\r\n * initialized.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Return the default app\r\n * const app = getApp();\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Return a named app\r\n * const otherApp = getApp(\"otherApp\");\r\n * ```\r\n *\r\n * @param name - Optional name of the app to return. If no name is\r\n * provided, the default is `\"[DEFAULT]\"`.\r\n *\r\n * @returns The app corresponding to the provided app name.\r\n * If no app name is provided, the default app is returned.\r\n *\r\n * @public\r\n */\r\nfunction getApp(name = DEFAULT_ENTRY_NAME) {\r\n const app = _apps.get(name);\r\n if (!app && name === DEFAULT_ENTRY_NAME && getDefaultAppConfig()) {\r\n return initializeApp();\r\n }\r\n if (!app) {\r\n throw ERROR_FACTORY.create(\"no-app\" /* AppError.NO_APP */, { appName: name });\r\n }\r\n return app;\r\n}\r\n/**\r\n * A (read-only) array of all initialized apps.\r\n * @public\r\n */\r\nfunction getApps() {\r\n return Array.from(_apps.values());\r\n}\r\n/**\r\n * Renders this app unusable and frees the resources of all associated\r\n * services.\r\n *\r\n * @example\r\n * ```javascript\r\n * deleteApp(app)\r\n * .then(function() {\r\n * console.log(\"App deleted successfully\");\r\n * })\r\n * .catch(function(error) {\r\n * console.log(\"Error deleting app:\", error);\r\n * });\r\n * ```\r\n *\r\n * @public\r\n */\r\nasync function deleteApp(app) {\r\n let cleanupProviders = false;\r\n const name = app.name;\r\n if (_apps.has(name)) {\r\n cleanupProviders = true;\r\n _apps.delete(name);\r\n }\r\n else if (_serverApps.has(name)) {\r\n const firebaseServerApp = app;\r\n if (firebaseServerApp.decRefCount() <= 0) {\r\n _serverApps.delete(name);\r\n cleanupProviders = true;\r\n }\r\n }\r\n if (cleanupProviders) {\r\n await Promise.all(app.container\r\n .getProviders()\r\n .map(provider => provider.delete()));\r\n app.isDeleted = true;\r\n }\r\n}\r\n/**\r\n * Registers a library's name and version for platform logging purposes.\r\n * @param library - Name of 1p or 3p library (e.g. firestore, angularfire)\r\n * @param version - Current version of that library.\r\n * @param variant - Bundle variant, e.g., node, rn, etc.\r\n *\r\n * @public\r\n */\r\nfunction registerVersion(libraryKeyOrName, version, variant) {\r\n var _a;\r\n // TODO: We can use this check to whitelist strings when/if we set up\r\n // a good whitelist system.\r\n let library = (_a = PLATFORM_LOG_STRING[libraryKeyOrName]) !== null && _a !== void 0 ? _a : libraryKeyOrName;\r\n if (variant) {\r\n library += `-${variant}`;\r\n }\r\n const libraryMismatch = library.match(/\\s|\\//);\r\n const versionMismatch = version.match(/\\s|\\//);\r\n if (libraryMismatch || versionMismatch) {\r\n const warning = [\r\n `Unable to register library \"${library}\" with version \"${version}\":`\r\n ];\r\n if (libraryMismatch) {\r\n warning.push(`library name \"${library}\" contains illegal characters (whitespace or \"/\")`);\r\n }\r\n if (libraryMismatch && versionMismatch) {\r\n warning.push('and');\r\n }\r\n if (versionMismatch) {\r\n warning.push(`version name \"${version}\" contains illegal characters (whitespace or \"/\")`);\r\n }\r\n logger.warn(warning.join(' '));\r\n return;\r\n }\r\n _registerComponent(new Component(`${library}-version`, () => ({ library, version }), \"VERSION\" /* ComponentType.VERSION */));\r\n}\r\n/**\r\n * Sets log handler for all Firebase SDKs.\r\n * @param logCallback - An optional custom log handler that executes user code whenever\r\n * the Firebase SDK makes a logging call.\r\n *\r\n * @public\r\n */\r\nfunction onLog(logCallback, options) {\r\n if (logCallback !== null && typeof logCallback !== 'function') {\r\n throw ERROR_FACTORY.create(\"invalid-log-argument\" /* AppError.INVALID_LOG_ARGUMENT */);\r\n }\r\n setUserLogHandler(logCallback, options);\r\n}\r\n/**\r\n * Sets log level for all Firebase SDKs.\r\n *\r\n * All of the log types above the current log level are captured (i.e. if\r\n * you set the log level to `info`, errors are logged, but `debug` and\r\n * `verbose` logs are not).\r\n *\r\n * @public\r\n */\r\nfunction setLogLevel(logLevel) {\r\n setLogLevel$1(logLevel);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DB_NAME = 'firebase-heartbeat-database';\r\nconst DB_VERSION = 1;\r\nconst STORE_NAME = 'firebase-heartbeat-store';\r\nlet dbPromise = null;\r\nfunction getDbPromise() {\r\n if (!dbPromise) {\r\n dbPromise = openDB(DB_NAME, DB_VERSION, {\r\n upgrade: (db, oldVersion) => {\r\n // We don't use 'break' in this switch statement, the fall-through\r\n // behavior is what we want, because if there are multiple versions between\r\n // the old version and the current version, we want ALL the migrations\r\n // that correspond to those versions to run, not only the last one.\r\n // eslint-disable-next-line default-case\r\n switch (oldVersion) {\r\n case 0:\r\n try {\r\n db.createObjectStore(STORE_NAME);\r\n }\r\n catch (e) {\r\n // Safari/iOS browsers throw occasional exceptions on\r\n // db.createObjectStore() that may be a bug. Avoid blocking\r\n // the rest of the app functionality.\r\n console.warn(e);\r\n }\r\n }\r\n }\r\n }).catch(e => {\r\n throw ERROR_FACTORY.create(\"idb-open\" /* AppError.IDB_OPEN */, {\r\n originalErrorMessage: e.message\r\n });\r\n });\r\n }\r\n return dbPromise;\r\n}\r\nasync function readHeartbeatsFromIndexedDB(app) {\r\n try {\r\n const db = await getDbPromise();\r\n const tx = db.transaction(STORE_NAME);\r\n const result = await tx.objectStore(STORE_NAME).get(computeKey(app));\r\n // We already have the value but tx.done can throw,\r\n // so we need to await it here to catch errors\r\n await tx.done;\r\n return result;\r\n }\r\n catch (e) {\r\n if (e instanceof FirebaseError) {\r\n logger.warn(e.message);\r\n }\r\n else {\r\n const idbGetError = ERROR_FACTORY.create(\"idb-get\" /* AppError.IDB_GET */, {\r\n originalErrorMessage: e === null || e === void 0 ? void 0 : e.message\r\n });\r\n logger.warn(idbGetError.message);\r\n }\r\n }\r\n}\r\nasync function writeHeartbeatsToIndexedDB(app, heartbeatObject) {\r\n try {\r\n const db = await getDbPromise();\r\n const tx = db.transaction(STORE_NAME, 'readwrite');\r\n const objectStore = tx.objectStore(STORE_NAME);\r\n await objectStore.put(heartbeatObject, computeKey(app));\r\n await tx.done;\r\n }\r\n catch (e) {\r\n if (e instanceof FirebaseError) {\r\n logger.warn(e.message);\r\n }\r\n else {\r\n const idbGetError = ERROR_FACTORY.create(\"idb-set\" /* AppError.IDB_WRITE */, {\r\n originalErrorMessage: e === null || e === void 0 ? void 0 : e.message\r\n });\r\n logger.warn(idbGetError.message);\r\n }\r\n }\r\n}\r\nfunction computeKey(app) {\r\n return `${app.name}!${app.options.appId}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst MAX_HEADER_BYTES = 1024;\r\n// 30 days\r\nconst STORED_HEARTBEAT_RETENTION_MAX_MILLIS = 30 * 24 * 60 * 60 * 1000;\r\nclass HeartbeatServiceImpl {\r\n constructor(container) {\r\n this.container = container;\r\n /**\r\n * In-memory cache for heartbeats, used by getHeartbeatsHeader() to generate\r\n * the header string.\r\n * Stores one record per date. This will be consolidated into the standard\r\n * format of one record per user agent string before being sent as a header.\r\n * Populated from indexedDB when the controller is instantiated and should\r\n * be kept in sync with indexedDB.\r\n * Leave public for easier testing.\r\n */\r\n this._heartbeatsCache = null;\r\n const app = this.container.getProvider('app').getImmediate();\r\n this._storage = new HeartbeatStorageImpl(app);\r\n this._heartbeatsCachePromise = this._storage.read().then(result => {\r\n this._heartbeatsCache = result;\r\n return result;\r\n });\r\n }\r\n /**\r\n * Called to report a heartbeat. The function will generate\r\n * a HeartbeatsByUserAgent object, update heartbeatsCache, and persist it\r\n * to IndexedDB.\r\n * Note that we only store one heartbeat per day. So if a heartbeat for today is\r\n * already logged, subsequent calls to this function in the same day will be ignored.\r\n */\r\n async triggerHeartbeat() {\r\n var _a, _b;\r\n const platformLogger = this.container\r\n .getProvider('platform-logger')\r\n .getImmediate();\r\n // This is the \"Firebase user agent\" string from the platform logger\r\n // service, not the browser user agent.\r\n const agent = platformLogger.getPlatformInfoString();\r\n const date = getUTCDateString();\r\n if (((_a = this._heartbeatsCache) === null || _a === void 0 ? void 0 : _a.heartbeats) == null) {\r\n this._heartbeatsCache = await this._heartbeatsCachePromise;\r\n // If we failed to construct a heartbeats cache, then return immediately.\r\n if (((_b = this._heartbeatsCache) === null || _b === void 0 ? void 0 : _b.heartbeats) == null) {\r\n return;\r\n }\r\n }\r\n // Do not store a heartbeat if one is already stored for this day\r\n // or if a header has already been sent today.\r\n if (this._heartbeatsCache.lastSentHeartbeatDate === date ||\r\n this._heartbeatsCache.heartbeats.some(singleDateHeartbeat => singleDateHeartbeat.date === date)) {\r\n return;\r\n }\r\n else {\r\n // There is no entry for this date. Create one.\r\n this._heartbeatsCache.heartbeats.push({ date, agent });\r\n }\r\n // Remove entries older than 30 days.\r\n this._heartbeatsCache.heartbeats = this._heartbeatsCache.heartbeats.filter(singleDateHeartbeat => {\r\n const hbTimestamp = new Date(singleDateHeartbeat.date).valueOf();\r\n const now = Date.now();\r\n return now - hbTimestamp <= STORED_HEARTBEAT_RETENTION_MAX_MILLIS;\r\n });\r\n return this._storage.overwrite(this._heartbeatsCache);\r\n }\r\n /**\r\n * Returns a base64 encoded string which can be attached to the heartbeat-specific header directly.\r\n * It also clears all heartbeats from memory as well as in IndexedDB.\r\n *\r\n * NOTE: Consuming product SDKs should not send the header if this method\r\n * returns an empty string.\r\n */\r\n async getHeartbeatsHeader() {\r\n var _a;\r\n if (this._heartbeatsCache === null) {\r\n await this._heartbeatsCachePromise;\r\n }\r\n // If it's still null or the array is empty, there is no data to send.\r\n if (((_a = this._heartbeatsCache) === null || _a === void 0 ? void 0 : _a.heartbeats) == null ||\r\n this._heartbeatsCache.heartbeats.length === 0) {\r\n return '';\r\n }\r\n const date = getUTCDateString();\r\n // Extract as many heartbeats from the cache as will fit under the size limit.\r\n const { heartbeatsToSend, unsentEntries } = extractHeartbeatsForHeader(this._heartbeatsCache.heartbeats);\r\n const headerString = base64urlEncodeWithoutPadding(JSON.stringify({ version: 2, heartbeats: heartbeatsToSend }));\r\n // Store last sent date to prevent another being logged/sent for the same day.\r\n this._heartbeatsCache.lastSentHeartbeatDate = date;\r\n if (unsentEntries.length > 0) {\r\n // Store any unsent entries if they exist.\r\n this._heartbeatsCache.heartbeats = unsentEntries;\r\n // This seems more likely than emptying the array (below) to lead to some odd state\r\n // since the cache isn't empty and this will be called again on the next request,\r\n // and is probably safest if we await it.\r\n await this._storage.overwrite(this._heartbeatsCache);\r\n }\r\n else {\r\n this._heartbeatsCache.heartbeats = [];\r\n // Do not wait for this, to reduce latency.\r\n void this._storage.overwrite(this._heartbeatsCache);\r\n }\r\n return headerString;\r\n }\r\n}\r\nfunction getUTCDateString() {\r\n const today = new Date();\r\n // Returns date format 'YYYY-MM-DD'\r\n return today.toISOString().substring(0, 10);\r\n}\r\nfunction extractHeartbeatsForHeader(heartbeatsCache, maxSize = MAX_HEADER_BYTES) {\r\n // Heartbeats grouped by user agent in the standard format to be sent in\r\n // the header.\r\n const heartbeatsToSend = [];\r\n // Single date format heartbeats that are not sent.\r\n let unsentEntries = heartbeatsCache.slice();\r\n for (const singleDateHeartbeat of heartbeatsCache) {\r\n // Look for an existing entry with the same user agent.\r\n const heartbeatEntry = heartbeatsToSend.find(hb => hb.agent === singleDateHeartbeat.agent);\r\n if (!heartbeatEntry) {\r\n // If no entry for this user agent exists, create one.\r\n heartbeatsToSend.push({\r\n agent: singleDateHeartbeat.agent,\r\n dates: [singleDateHeartbeat.date]\r\n });\r\n if (countBytes(heartbeatsToSend) > maxSize) {\r\n // If the header would exceed max size, remove the added heartbeat\r\n // entry and stop adding to the header.\r\n heartbeatsToSend.pop();\r\n break;\r\n }\r\n }\r\n else {\r\n heartbeatEntry.dates.push(singleDateHeartbeat.date);\r\n // If the header would exceed max size, remove the added date\r\n // and stop adding to the header.\r\n if (countBytes(heartbeatsToSend) > maxSize) {\r\n heartbeatEntry.dates.pop();\r\n break;\r\n }\r\n }\r\n // Pop unsent entry from queue. (Skipped if adding the entry exceeded\r\n // quota and the loop breaks early.)\r\n unsentEntries = unsentEntries.slice(1);\r\n }\r\n return {\r\n heartbeatsToSend,\r\n unsentEntries\r\n };\r\n}\r\nclass HeartbeatStorageImpl {\r\n constructor(app) {\r\n this.app = app;\r\n this._canUseIndexedDBPromise = this.runIndexedDBEnvironmentCheck();\r\n }\r\n async runIndexedDBEnvironmentCheck() {\r\n if (!isIndexedDBAvailable()) {\r\n return false;\r\n }\r\n else {\r\n return validateIndexedDBOpenable()\r\n .then(() => true)\r\n .catch(() => false);\r\n }\r\n }\r\n /**\r\n * Read all heartbeats.\r\n */\r\n async read() {\r\n const canUseIndexedDB = await this._canUseIndexedDBPromise;\r\n if (!canUseIndexedDB) {\r\n return { heartbeats: [] };\r\n }\r\n else {\r\n const idbHeartbeatObject = await readHeartbeatsFromIndexedDB(this.app);\r\n if (idbHeartbeatObject === null || idbHeartbeatObject === void 0 ? void 0 : idbHeartbeatObject.heartbeats) {\r\n return idbHeartbeatObject;\r\n }\r\n else {\r\n return { heartbeats: [] };\r\n }\r\n }\r\n }\r\n // overwrite the storage with the provided heartbeats\r\n async overwrite(heartbeatsObject) {\r\n var _a;\r\n const canUseIndexedDB = await this._canUseIndexedDBPromise;\r\n if (!canUseIndexedDB) {\r\n return;\r\n }\r\n else {\r\n const existingHeartbeatsObject = await this.read();\r\n return writeHeartbeatsToIndexedDB(this.app, {\r\n lastSentHeartbeatDate: (_a = heartbeatsObject.lastSentHeartbeatDate) !== null && _a !== void 0 ? _a : existingHeartbeatsObject.lastSentHeartbeatDate,\r\n heartbeats: heartbeatsObject.heartbeats\r\n });\r\n }\r\n }\r\n // add heartbeats\r\n async add(heartbeatsObject) {\r\n var _a;\r\n const canUseIndexedDB = await this._canUseIndexedDBPromise;\r\n if (!canUseIndexedDB) {\r\n return;\r\n }\r\n else {\r\n const existingHeartbeatsObject = await this.read();\r\n return writeHeartbeatsToIndexedDB(this.app, {\r\n lastSentHeartbeatDate: (_a = heartbeatsObject.lastSentHeartbeatDate) !== null && _a !== void 0 ? _a : existingHeartbeatsObject.lastSentHeartbeatDate,\r\n heartbeats: [\r\n ...existingHeartbeatsObject.heartbeats,\r\n ...heartbeatsObject.heartbeats\r\n ]\r\n });\r\n }\r\n }\r\n}\r\n/**\r\n * Calculate bytes of a HeartbeatsByUserAgent array after being wrapped\r\n * in a platform logging header JSON object, stringified, and converted\r\n * to base 64.\r\n */\r\nfunction countBytes(heartbeatsCache) {\r\n // base64 has a restricted set of characters, all of which should be 1 byte.\r\n return base64urlEncodeWithoutPadding(\r\n // heartbeatsCache wrapper properties\r\n JSON.stringify({ version: 2, heartbeats: heartbeatsCache })).length;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction registerCoreComponents(variant) {\r\n _registerComponent(new Component('platform-logger', container => new PlatformLoggerServiceImpl(container), \"PRIVATE\" /* ComponentType.PRIVATE */));\r\n _registerComponent(new Component('heartbeat', container => new HeartbeatServiceImpl(container), \"PRIVATE\" /* ComponentType.PRIVATE */));\r\n // Register `app` package.\r\n registerVersion(name$o, version$1, variant);\r\n // BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\r\n registerVersion(name$o, version$1, 'esm2017');\r\n // Register platform SDK identifier (no version).\r\n registerVersion('fire-js', '');\r\n}\n\n/**\r\n * Firebase App\r\n *\r\n * @remarks This package coordinates the communication between the different Firebase components\r\n * @packageDocumentation\r\n */\r\nregisterCoreComponents('');\n\nexport { SDK_VERSION, DEFAULT_ENTRY_NAME as _DEFAULT_ENTRY_NAME, _addComponent, _addOrOverwriteComponent, _apps, _clearComponents, _components, _getProvider, _isFirebaseApp, _isFirebaseServerApp, _registerComponent, _removeServiceInstance, _serverApps, deleteApp, getApp, getApps, initializeApp, initializeServerApp, onLog, registerVersion, setLogLevel };\n//# sourceMappingURL=index.esm2017.js.map\n","import { registerVersion } from '@firebase/app';\nexport * from '@firebase/app';\n\nvar name = \"firebase\";\nvar version = \"10.11.1\";\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nregisterVersion(name, version, 'app');\n//# sourceMappingURL=index.esm.js.map\n","import { _getProvider, getApp, _registerComponent, registerVersion } from '@firebase/app';\nimport { Component } from '@firebase/component';\nimport { ErrorFactory, FirebaseError } from '@firebase/util';\nimport { openDB } from 'idb';\n\nconst name = \"@firebase/installations\";\nconst version = \"0.6.6\";\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst PENDING_TIMEOUT_MS = 10000;\r\nconst PACKAGE_VERSION = `w:${version}`;\r\nconst INTERNAL_AUTH_VERSION = 'FIS_v2';\r\nconst INSTALLATIONS_API_URL = 'https://firebaseinstallations.googleapis.com/v1';\r\nconst TOKEN_EXPIRATION_BUFFER = 60 * 60 * 1000; // One hour\r\nconst SERVICE = 'installations';\r\nconst SERVICE_NAME = 'Installations';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst ERROR_DESCRIPTION_MAP = {\r\n [\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */]: 'Missing App configuration value: \"{$valueName}\"',\r\n [\"not-registered\" /* ErrorCode.NOT_REGISTERED */]: 'Firebase Installation is not registered.',\r\n [\"installation-not-found\" /* ErrorCode.INSTALLATION_NOT_FOUND */]: 'Firebase Installation not found.',\r\n [\"request-failed\" /* ErrorCode.REQUEST_FAILED */]: '{$requestName} request failed with error \"{$serverCode} {$serverStatus}: {$serverMessage}\"',\r\n [\"app-offline\" /* ErrorCode.APP_OFFLINE */]: 'Could not process request. Application offline.',\r\n [\"delete-pending-registration\" /* ErrorCode.DELETE_PENDING_REGISTRATION */]: \"Can't delete installation while there is a pending registration request.\"\r\n};\r\nconst ERROR_FACTORY = new ErrorFactory(SERVICE, SERVICE_NAME, ERROR_DESCRIPTION_MAP);\r\n/** Returns true if error is a FirebaseError that is based on an error from the server. */\r\nfunction isServerError(error) {\r\n return (error instanceof FirebaseError &&\r\n error.code.includes(\"request-failed\" /* ErrorCode.REQUEST_FAILED */));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction getInstallationsEndpoint({ projectId }) {\r\n return `${INSTALLATIONS_API_URL}/projects/${projectId}/installations`;\r\n}\r\nfunction extractAuthTokenInfoFromResponse(response) {\r\n return {\r\n token: response.token,\r\n requestStatus: 2 /* RequestStatus.COMPLETED */,\r\n expiresIn: getExpiresInFromResponseExpiresIn(response.expiresIn),\r\n creationTime: Date.now()\r\n };\r\n}\r\nasync function getErrorFromResponse(requestName, response) {\r\n const responseJson = await response.json();\r\n const errorData = responseJson.error;\r\n return ERROR_FACTORY.create(\"request-failed\" /* ErrorCode.REQUEST_FAILED */, {\r\n requestName,\r\n serverCode: errorData.code,\r\n serverMessage: errorData.message,\r\n serverStatus: errorData.status\r\n });\r\n}\r\nfunction getHeaders({ apiKey }) {\r\n return new Headers({\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json',\r\n 'x-goog-api-key': apiKey\r\n });\r\n}\r\nfunction getHeadersWithAuth(appConfig, { refreshToken }) {\r\n const headers = getHeaders(appConfig);\r\n headers.append('Authorization', getAuthorizationHeader(refreshToken));\r\n return headers;\r\n}\r\n/**\r\n * Calls the passed in fetch wrapper and returns the response.\r\n * If the returned response has a status of 5xx, re-runs the function once and\r\n * returns the response.\r\n */\r\nasync function retryIfServerError(fn) {\r\n const result = await fn();\r\n if (result.status >= 500 && result.status < 600) {\r\n // Internal Server Error. Retry request.\r\n return fn();\r\n }\r\n return result;\r\n}\r\nfunction getExpiresInFromResponseExpiresIn(responseExpiresIn) {\r\n // This works because the server will never respond with fractions of a second.\r\n return Number(responseExpiresIn.replace('s', '000'));\r\n}\r\nfunction getAuthorizationHeader(refreshToken) {\r\n return `${INTERNAL_AUTH_VERSION} ${refreshToken}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function createInstallationRequest({ appConfig, heartbeatServiceProvider }, { fid }) {\r\n const endpoint = getInstallationsEndpoint(appConfig);\r\n const headers = getHeaders(appConfig);\r\n // If heartbeat service exists, add the heartbeat string to the header.\r\n const heartbeatService = heartbeatServiceProvider.getImmediate({\r\n optional: true\r\n });\r\n if (heartbeatService) {\r\n const heartbeatsHeader = await heartbeatService.getHeartbeatsHeader();\r\n if (heartbeatsHeader) {\r\n headers.append('x-firebase-client', heartbeatsHeader);\r\n }\r\n }\r\n const body = {\r\n fid,\r\n authVersion: INTERNAL_AUTH_VERSION,\r\n appId: appConfig.appId,\r\n sdkVersion: PACKAGE_VERSION\r\n };\r\n const request = {\r\n method: 'POST',\r\n headers,\r\n body: JSON.stringify(body)\r\n };\r\n const response = await retryIfServerError(() => fetch(endpoint, request));\r\n if (response.ok) {\r\n const responseValue = await response.json();\r\n const registeredInstallationEntry = {\r\n fid: responseValue.fid || fid,\r\n registrationStatus: 2 /* RequestStatus.COMPLETED */,\r\n refreshToken: responseValue.refreshToken,\r\n authToken: extractAuthTokenInfoFromResponse(responseValue.authToken)\r\n };\r\n return registeredInstallationEntry;\r\n }\r\n else {\r\n throw await getErrorFromResponse('Create Installation', response);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** Returns a promise that resolves after given time passes. */\r\nfunction sleep(ms) {\r\n return new Promise(resolve => {\r\n setTimeout(resolve, ms);\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction bufferToBase64UrlSafe(array) {\r\n const b64 = btoa(String.fromCharCode(...array));\r\n return b64.replace(/\\+/g, '-').replace(/\\//g, '_');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst VALID_FID_PATTERN = /^[cdef][\\w-]{21}$/;\r\nconst INVALID_FID = '';\r\n/**\r\n * Generates a new FID using random values from Web Crypto API.\r\n * Returns an empty string if FID generation fails for any reason.\r\n */\r\nfunction generateFid() {\r\n try {\r\n // A valid FID has exactly 22 base64 characters, which is 132 bits, or 16.5\r\n // bytes. our implementation generates a 17 byte array instead.\r\n const fidByteArray = new Uint8Array(17);\r\n const crypto = self.crypto || self.msCrypto;\r\n crypto.getRandomValues(fidByteArray);\r\n // Replace the first 4 random bits with the constant FID header of 0b0111.\r\n fidByteArray[0] = 0b01110000 + (fidByteArray[0] % 0b00010000);\r\n const fid = encode(fidByteArray);\r\n return VALID_FID_PATTERN.test(fid) ? fid : INVALID_FID;\r\n }\r\n catch (_a) {\r\n // FID generation errored\r\n return INVALID_FID;\r\n }\r\n}\r\n/** Converts a FID Uint8Array to a base64 string representation. */\r\nfunction encode(fidByteArray) {\r\n const b64String = bufferToBase64UrlSafe(fidByteArray);\r\n // Remove the 23rd character that was added because of the extra 4 bits at the\r\n // end of our 17 byte array, and the '=' padding.\r\n return b64String.substr(0, 22);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** Returns a string key that can be used to identify the app. */\r\nfunction getKey(appConfig) {\r\n return `${appConfig.appName}!${appConfig.appId}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst fidChangeCallbacks = new Map();\r\n/**\r\n * Calls the onIdChange callbacks with the new FID value, and broadcasts the\r\n * change to other tabs.\r\n */\r\nfunction fidChanged(appConfig, fid) {\r\n const key = getKey(appConfig);\r\n callFidChangeCallbacks(key, fid);\r\n broadcastFidChange(key, fid);\r\n}\r\nfunction addCallback(appConfig, callback) {\r\n // Open the broadcast channel if it's not already open,\r\n // to be able to listen to change events from other tabs.\r\n getBroadcastChannel();\r\n const key = getKey(appConfig);\r\n let callbackSet = fidChangeCallbacks.get(key);\r\n if (!callbackSet) {\r\n callbackSet = new Set();\r\n fidChangeCallbacks.set(key, callbackSet);\r\n }\r\n callbackSet.add(callback);\r\n}\r\nfunction removeCallback(appConfig, callback) {\r\n const key = getKey(appConfig);\r\n const callbackSet = fidChangeCallbacks.get(key);\r\n if (!callbackSet) {\r\n return;\r\n }\r\n callbackSet.delete(callback);\r\n if (callbackSet.size === 0) {\r\n fidChangeCallbacks.delete(key);\r\n }\r\n // Close broadcast channel if there are no more callbacks.\r\n closeBroadcastChannel();\r\n}\r\nfunction callFidChangeCallbacks(key, fid) {\r\n const callbacks = fidChangeCallbacks.get(key);\r\n if (!callbacks) {\r\n return;\r\n }\r\n for (const callback of callbacks) {\r\n callback(fid);\r\n }\r\n}\r\nfunction broadcastFidChange(key, fid) {\r\n const channel = getBroadcastChannel();\r\n if (channel) {\r\n channel.postMessage({ key, fid });\r\n }\r\n closeBroadcastChannel();\r\n}\r\nlet broadcastChannel = null;\r\n/** Opens and returns a BroadcastChannel if it is supported by the browser. */\r\nfunction getBroadcastChannel() {\r\n if (!broadcastChannel && 'BroadcastChannel' in self) {\r\n broadcastChannel = new BroadcastChannel('[Firebase] FID Change');\r\n broadcastChannel.onmessage = e => {\r\n callFidChangeCallbacks(e.data.key, e.data.fid);\r\n };\r\n }\r\n return broadcastChannel;\r\n}\r\nfunction closeBroadcastChannel() {\r\n if (fidChangeCallbacks.size === 0 && broadcastChannel) {\r\n broadcastChannel.close();\r\n broadcastChannel = null;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DATABASE_NAME = 'firebase-installations-database';\r\nconst DATABASE_VERSION = 1;\r\nconst OBJECT_STORE_NAME = 'firebase-installations-store';\r\nlet dbPromise = null;\r\nfunction getDbPromise() {\r\n if (!dbPromise) {\r\n dbPromise = openDB(DATABASE_NAME, DATABASE_VERSION, {\r\n upgrade: (db, oldVersion) => {\r\n // We don't use 'break' in this switch statement, the fall-through\r\n // behavior is what we want, because if there are multiple versions between\r\n // the old version and the current version, we want ALL the migrations\r\n // that correspond to those versions to run, not only the last one.\r\n // eslint-disable-next-line default-case\r\n switch (oldVersion) {\r\n case 0:\r\n db.createObjectStore(OBJECT_STORE_NAME);\r\n }\r\n }\r\n });\r\n }\r\n return dbPromise;\r\n}\r\n/** Assigns or overwrites the record for the given key with the given value. */\r\nasync function set(appConfig, value) {\r\n const key = getKey(appConfig);\r\n const db = await getDbPromise();\r\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\r\n const objectStore = tx.objectStore(OBJECT_STORE_NAME);\r\n const oldValue = (await objectStore.get(key));\r\n await objectStore.put(value, key);\r\n await tx.done;\r\n if (!oldValue || oldValue.fid !== value.fid) {\r\n fidChanged(appConfig, value.fid);\r\n }\r\n return value;\r\n}\r\n/** Removes record(s) from the objectStore that match the given key. */\r\nasync function remove(appConfig) {\r\n const key = getKey(appConfig);\r\n const db = await getDbPromise();\r\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\r\n await tx.objectStore(OBJECT_STORE_NAME).delete(key);\r\n await tx.done;\r\n}\r\n/**\r\n * Atomically updates a record with the result of updateFn, which gets\r\n * called with the current value. If newValue is undefined, the record is\r\n * deleted instead.\r\n * @return Updated value\r\n */\r\nasync function update(appConfig, updateFn) {\r\n const key = getKey(appConfig);\r\n const db = await getDbPromise();\r\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\r\n const store = tx.objectStore(OBJECT_STORE_NAME);\r\n const oldValue = (await store.get(key));\r\n const newValue = updateFn(oldValue);\r\n if (newValue === undefined) {\r\n await store.delete(key);\r\n }\r\n else {\r\n await store.put(newValue, key);\r\n }\r\n await tx.done;\r\n if (newValue && (!oldValue || oldValue.fid !== newValue.fid)) {\r\n fidChanged(appConfig, newValue.fid);\r\n }\r\n return newValue;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Updates and returns the InstallationEntry from the database.\r\n * Also triggers a registration request if it is necessary and possible.\r\n */\r\nasync function getInstallationEntry(installations) {\r\n let registrationPromise;\r\n const installationEntry = await update(installations.appConfig, oldEntry => {\r\n const installationEntry = updateOrCreateInstallationEntry(oldEntry);\r\n const entryWithPromise = triggerRegistrationIfNecessary(installations, installationEntry);\r\n registrationPromise = entryWithPromise.registrationPromise;\r\n return entryWithPromise.installationEntry;\r\n });\r\n if (installationEntry.fid === INVALID_FID) {\r\n // FID generation failed. Waiting for the FID from the server.\r\n return { installationEntry: await registrationPromise };\r\n }\r\n return {\r\n installationEntry,\r\n registrationPromise\r\n };\r\n}\r\n/**\r\n * Creates a new Installation Entry if one does not exist.\r\n * Also clears timed out pending requests.\r\n */\r\nfunction updateOrCreateInstallationEntry(oldEntry) {\r\n const entry = oldEntry || {\r\n fid: generateFid(),\r\n registrationStatus: 0 /* RequestStatus.NOT_STARTED */\r\n };\r\n return clearTimedOutRequest(entry);\r\n}\r\n/**\r\n * If the Firebase Installation is not registered yet, this will trigger the\r\n * registration and return an InProgressInstallationEntry.\r\n *\r\n * If registrationPromise does not exist, the installationEntry is guaranteed\r\n * to be registered.\r\n */\r\nfunction triggerRegistrationIfNecessary(installations, installationEntry) {\r\n if (installationEntry.registrationStatus === 0 /* RequestStatus.NOT_STARTED */) {\r\n if (!navigator.onLine) {\r\n // Registration required but app is offline.\r\n const registrationPromiseWithError = Promise.reject(ERROR_FACTORY.create(\"app-offline\" /* ErrorCode.APP_OFFLINE */));\r\n return {\r\n installationEntry,\r\n registrationPromise: registrationPromiseWithError\r\n };\r\n }\r\n // Try registering. Change status to IN_PROGRESS.\r\n const inProgressEntry = {\r\n fid: installationEntry.fid,\r\n registrationStatus: 1 /* RequestStatus.IN_PROGRESS */,\r\n registrationTime: Date.now()\r\n };\r\n const registrationPromise = registerInstallation(installations, inProgressEntry);\r\n return { installationEntry: inProgressEntry, registrationPromise };\r\n }\r\n else if (installationEntry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */) {\r\n return {\r\n installationEntry,\r\n registrationPromise: waitUntilFidRegistration(installations)\r\n };\r\n }\r\n else {\r\n return { installationEntry };\r\n }\r\n}\r\n/** This will be executed only once for each new Firebase Installation. */\r\nasync function registerInstallation(installations, installationEntry) {\r\n try {\r\n const registeredInstallationEntry = await createInstallationRequest(installations, installationEntry);\r\n return set(installations.appConfig, registeredInstallationEntry);\r\n }\r\n catch (e) {\r\n if (isServerError(e) && e.customData.serverCode === 409) {\r\n // Server returned a \"FID can not be used\" error.\r\n // Generate a new ID next time.\r\n await remove(installations.appConfig);\r\n }\r\n else {\r\n // Registration failed. Set FID as not registered.\r\n await set(installations.appConfig, {\r\n fid: installationEntry.fid,\r\n registrationStatus: 0 /* RequestStatus.NOT_STARTED */\r\n });\r\n }\r\n throw e;\r\n }\r\n}\r\n/** Call if FID registration is pending in another request. */\r\nasync function waitUntilFidRegistration(installations) {\r\n // Unfortunately, there is no way of reliably observing when a value in\r\n // IndexedDB changes (yet, see https://github.com/WICG/indexed-db-observers),\r\n // so we need to poll.\r\n let entry = await updateInstallationRequest(installations.appConfig);\r\n while (entry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */) {\r\n // createInstallation request still in progress.\r\n await sleep(100);\r\n entry = await updateInstallationRequest(installations.appConfig);\r\n }\r\n if (entry.registrationStatus === 0 /* RequestStatus.NOT_STARTED */) {\r\n // The request timed out or failed in a different call. Try again.\r\n const { installationEntry, registrationPromise } = await getInstallationEntry(installations);\r\n if (registrationPromise) {\r\n return registrationPromise;\r\n }\r\n else {\r\n // if there is no registrationPromise, entry is registered.\r\n return installationEntry;\r\n }\r\n }\r\n return entry;\r\n}\r\n/**\r\n * Called only if there is a CreateInstallation request in progress.\r\n *\r\n * Updates the InstallationEntry in the DB based on the status of the\r\n * CreateInstallation request.\r\n *\r\n * Returns the updated InstallationEntry.\r\n */\r\nfunction updateInstallationRequest(appConfig) {\r\n return update(appConfig, oldEntry => {\r\n if (!oldEntry) {\r\n throw ERROR_FACTORY.create(\"installation-not-found\" /* ErrorCode.INSTALLATION_NOT_FOUND */);\r\n }\r\n return clearTimedOutRequest(oldEntry);\r\n });\r\n}\r\nfunction clearTimedOutRequest(entry) {\r\n if (hasInstallationRequestTimedOut(entry)) {\r\n return {\r\n fid: entry.fid,\r\n registrationStatus: 0 /* RequestStatus.NOT_STARTED */\r\n };\r\n }\r\n return entry;\r\n}\r\nfunction hasInstallationRequestTimedOut(installationEntry) {\r\n return (installationEntry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */ &&\r\n installationEntry.registrationTime + PENDING_TIMEOUT_MS < Date.now());\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function generateAuthTokenRequest({ appConfig, heartbeatServiceProvider }, installationEntry) {\r\n const endpoint = getGenerateAuthTokenEndpoint(appConfig, installationEntry);\r\n const headers = getHeadersWithAuth(appConfig, installationEntry);\r\n // If heartbeat service exists, add the heartbeat string to the header.\r\n const heartbeatService = heartbeatServiceProvider.getImmediate({\r\n optional: true\r\n });\r\n if (heartbeatService) {\r\n const heartbeatsHeader = await heartbeatService.getHeartbeatsHeader();\r\n if (heartbeatsHeader) {\r\n headers.append('x-firebase-client', heartbeatsHeader);\r\n }\r\n }\r\n const body = {\r\n installation: {\r\n sdkVersion: PACKAGE_VERSION,\r\n appId: appConfig.appId\r\n }\r\n };\r\n const request = {\r\n method: 'POST',\r\n headers,\r\n body: JSON.stringify(body)\r\n };\r\n const response = await retryIfServerError(() => fetch(endpoint, request));\r\n if (response.ok) {\r\n const responseValue = await response.json();\r\n const completedAuthToken = extractAuthTokenInfoFromResponse(responseValue);\r\n return completedAuthToken;\r\n }\r\n else {\r\n throw await getErrorFromResponse('Generate Auth Token', response);\r\n }\r\n}\r\nfunction getGenerateAuthTokenEndpoint(appConfig, { fid }) {\r\n return `${getInstallationsEndpoint(appConfig)}/${fid}/authTokens:generate`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns a valid authentication token for the installation. Generates a new\r\n * token if one doesn't exist, is expired or about to expire.\r\n *\r\n * Should only be called if the Firebase Installation is registered.\r\n */\r\nasync function refreshAuthToken(installations, forceRefresh = false) {\r\n let tokenPromise;\r\n const entry = await update(installations.appConfig, oldEntry => {\r\n if (!isEntryRegistered(oldEntry)) {\r\n throw ERROR_FACTORY.create(\"not-registered\" /* ErrorCode.NOT_REGISTERED */);\r\n }\r\n const oldAuthToken = oldEntry.authToken;\r\n if (!forceRefresh && isAuthTokenValid(oldAuthToken)) {\r\n // There is a valid token in the DB.\r\n return oldEntry;\r\n }\r\n else if (oldAuthToken.requestStatus === 1 /* RequestStatus.IN_PROGRESS */) {\r\n // There already is a token request in progress.\r\n tokenPromise = waitUntilAuthTokenRequest(installations, forceRefresh);\r\n return oldEntry;\r\n }\r\n else {\r\n // No token or token expired.\r\n if (!navigator.onLine) {\r\n throw ERROR_FACTORY.create(\"app-offline\" /* ErrorCode.APP_OFFLINE */);\r\n }\r\n const inProgressEntry = makeAuthTokenRequestInProgressEntry(oldEntry);\r\n tokenPromise = fetchAuthTokenFromServer(installations, inProgressEntry);\r\n return inProgressEntry;\r\n }\r\n });\r\n const authToken = tokenPromise\r\n ? await tokenPromise\r\n : entry.authToken;\r\n return authToken;\r\n}\r\n/**\r\n * Call only if FID is registered and Auth Token request is in progress.\r\n *\r\n * Waits until the current pending request finishes. If the request times out,\r\n * tries once in this thread as well.\r\n */\r\nasync function waitUntilAuthTokenRequest(installations, forceRefresh) {\r\n // Unfortunately, there is no way of reliably observing when a value in\r\n // IndexedDB changes (yet, see https://github.com/WICG/indexed-db-observers),\r\n // so we need to poll.\r\n let entry = await updateAuthTokenRequest(installations.appConfig);\r\n while (entry.authToken.requestStatus === 1 /* RequestStatus.IN_PROGRESS */) {\r\n // generateAuthToken still in progress.\r\n await sleep(100);\r\n entry = await updateAuthTokenRequest(installations.appConfig);\r\n }\r\n const authToken = entry.authToken;\r\n if (authToken.requestStatus === 0 /* RequestStatus.NOT_STARTED */) {\r\n // The request timed out or failed in a different call. Try again.\r\n return refreshAuthToken(installations, forceRefresh);\r\n }\r\n else {\r\n return authToken;\r\n }\r\n}\r\n/**\r\n * Called only if there is a GenerateAuthToken request in progress.\r\n *\r\n * Updates the InstallationEntry in the DB based on the status of the\r\n * GenerateAuthToken request.\r\n *\r\n * Returns the updated InstallationEntry.\r\n */\r\nfunction updateAuthTokenRequest(appConfig) {\r\n return update(appConfig, oldEntry => {\r\n if (!isEntryRegistered(oldEntry)) {\r\n throw ERROR_FACTORY.create(\"not-registered\" /* ErrorCode.NOT_REGISTERED */);\r\n }\r\n const oldAuthToken = oldEntry.authToken;\r\n if (hasAuthTokenRequestTimedOut(oldAuthToken)) {\r\n return Object.assign(Object.assign({}, oldEntry), { authToken: { requestStatus: 0 /* RequestStatus.NOT_STARTED */ } });\r\n }\r\n return oldEntry;\r\n });\r\n}\r\nasync function fetchAuthTokenFromServer(installations, installationEntry) {\r\n try {\r\n const authToken = await generateAuthTokenRequest(installations, installationEntry);\r\n const updatedInstallationEntry = Object.assign(Object.assign({}, installationEntry), { authToken });\r\n await set(installations.appConfig, updatedInstallationEntry);\r\n return authToken;\r\n }\r\n catch (e) {\r\n if (isServerError(e) &&\r\n (e.customData.serverCode === 401 || e.customData.serverCode === 404)) {\r\n // Server returned a \"FID not found\" or a \"Invalid authentication\" error.\r\n // Generate a new ID next time.\r\n await remove(installations.appConfig);\r\n }\r\n else {\r\n const updatedInstallationEntry = Object.assign(Object.assign({}, installationEntry), { authToken: { requestStatus: 0 /* RequestStatus.NOT_STARTED */ } });\r\n await set(installations.appConfig, updatedInstallationEntry);\r\n }\r\n throw e;\r\n }\r\n}\r\nfunction isEntryRegistered(installationEntry) {\r\n return (installationEntry !== undefined &&\r\n installationEntry.registrationStatus === 2 /* RequestStatus.COMPLETED */);\r\n}\r\nfunction isAuthTokenValid(authToken) {\r\n return (authToken.requestStatus === 2 /* RequestStatus.COMPLETED */ &&\r\n !isAuthTokenExpired(authToken));\r\n}\r\nfunction isAuthTokenExpired(authToken) {\r\n const now = Date.now();\r\n return (now < authToken.creationTime ||\r\n authToken.creationTime + authToken.expiresIn < now + TOKEN_EXPIRATION_BUFFER);\r\n}\r\n/** Returns an updated InstallationEntry with an InProgressAuthToken. */\r\nfunction makeAuthTokenRequestInProgressEntry(oldEntry) {\r\n const inProgressAuthToken = {\r\n requestStatus: 1 /* RequestStatus.IN_PROGRESS */,\r\n requestTime: Date.now()\r\n };\r\n return Object.assign(Object.assign({}, oldEntry), { authToken: inProgressAuthToken });\r\n}\r\nfunction hasAuthTokenRequestTimedOut(authToken) {\r\n return (authToken.requestStatus === 1 /* RequestStatus.IN_PROGRESS */ &&\r\n authToken.requestTime + PENDING_TIMEOUT_MS < Date.now());\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Creates a Firebase Installation if there isn't one for the app and\r\n * returns the Installation ID.\r\n * @param installations - The `Installations` instance.\r\n *\r\n * @public\r\n */\r\nasync function getId(installations) {\r\n const installationsImpl = installations;\r\n const { installationEntry, registrationPromise } = await getInstallationEntry(installationsImpl);\r\n if (registrationPromise) {\r\n registrationPromise.catch(console.error);\r\n }\r\n else {\r\n // If the installation is already registered, update the authentication\r\n // token if needed.\r\n refreshAuthToken(installationsImpl).catch(console.error);\r\n }\r\n return installationEntry.fid;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns a Firebase Installations auth token, identifying the current\r\n * Firebase Installation.\r\n * @param installations - The `Installations` instance.\r\n * @param forceRefresh - Force refresh regardless of token expiration.\r\n *\r\n * @public\r\n */\r\nasync function getToken(installations, forceRefresh = false) {\r\n const installationsImpl = installations;\r\n await completeInstallationRegistration(installationsImpl);\r\n // At this point we either have a Registered Installation in the DB, or we've\r\n // already thrown an error.\r\n const authToken = await refreshAuthToken(installationsImpl, forceRefresh);\r\n return authToken.token;\r\n}\r\nasync function completeInstallationRegistration(installations) {\r\n const { registrationPromise } = await getInstallationEntry(installations);\r\n if (registrationPromise) {\r\n // A createInstallation request is in progress. Wait until it finishes.\r\n await registrationPromise;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function deleteInstallationRequest(appConfig, installationEntry) {\r\n const endpoint = getDeleteEndpoint(appConfig, installationEntry);\r\n const headers = getHeadersWithAuth(appConfig, installationEntry);\r\n const request = {\r\n method: 'DELETE',\r\n headers\r\n };\r\n const response = await retryIfServerError(() => fetch(endpoint, request));\r\n if (!response.ok) {\r\n throw await getErrorFromResponse('Delete Installation', response);\r\n }\r\n}\r\nfunction getDeleteEndpoint(appConfig, { fid }) {\r\n return `${getInstallationsEndpoint(appConfig)}/${fid}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Deletes the Firebase Installation and all associated data.\r\n * @param installations - The `Installations` instance.\r\n *\r\n * @public\r\n */\r\nasync function deleteInstallations(installations) {\r\n const { appConfig } = installations;\r\n const entry = await update(appConfig, oldEntry => {\r\n if (oldEntry && oldEntry.registrationStatus === 0 /* RequestStatus.NOT_STARTED */) {\r\n // Delete the unregistered entry without sending a deleteInstallation request.\r\n return undefined;\r\n }\r\n return oldEntry;\r\n });\r\n if (entry) {\r\n if (entry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */) {\r\n // Can't delete while trying to register.\r\n throw ERROR_FACTORY.create(\"delete-pending-registration\" /* ErrorCode.DELETE_PENDING_REGISTRATION */);\r\n }\r\n else if (entry.registrationStatus === 2 /* RequestStatus.COMPLETED */) {\r\n if (!navigator.onLine) {\r\n throw ERROR_FACTORY.create(\"app-offline\" /* ErrorCode.APP_OFFLINE */);\r\n }\r\n else {\r\n await deleteInstallationRequest(appConfig, entry);\r\n await remove(appConfig);\r\n }\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Sets a new callback that will get called when Installation ID changes.\r\n * Returns an unsubscribe function that will remove the callback when called.\r\n * @param installations - The `Installations` instance.\r\n * @param callback - The callback function that is invoked when FID changes.\r\n * @returns A function that can be called to unsubscribe.\r\n *\r\n * @public\r\n */\r\nfunction onIdChange(installations, callback) {\r\n const { appConfig } = installations;\r\n addCallback(appConfig, callback);\r\n return () => {\r\n removeCallback(appConfig, callback);\r\n };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns an instance of {@link Installations} associated with the given\r\n * {@link @firebase/app#FirebaseApp} instance.\r\n * @param app - The {@link @firebase/app#FirebaseApp} instance.\r\n *\r\n * @public\r\n */\r\nfunction getInstallations(app = getApp()) {\r\n const installationsImpl = _getProvider(app, 'installations').getImmediate();\r\n return installationsImpl;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction extractAppConfig(app) {\r\n if (!app || !app.options) {\r\n throw getMissingValueError('App Configuration');\r\n }\r\n if (!app.name) {\r\n throw getMissingValueError('App Name');\r\n }\r\n // Required app config keys\r\n const configKeys = [\r\n 'projectId',\r\n 'apiKey',\r\n 'appId'\r\n ];\r\n for (const keyName of configKeys) {\r\n if (!app.options[keyName]) {\r\n throw getMissingValueError(keyName);\r\n }\r\n }\r\n return {\r\n appName: app.name,\r\n projectId: app.options.projectId,\r\n apiKey: app.options.apiKey,\r\n appId: app.options.appId\r\n };\r\n}\r\nfunction getMissingValueError(valueName) {\r\n return ERROR_FACTORY.create(\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */, {\r\n valueName\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst INSTALLATIONS_NAME = 'installations';\r\nconst INSTALLATIONS_NAME_INTERNAL = 'installations-internal';\r\nconst publicFactory = (container) => {\r\n const app = container.getProvider('app').getImmediate();\r\n // Throws if app isn't configured properly.\r\n const appConfig = extractAppConfig(app);\r\n const heartbeatServiceProvider = _getProvider(app, 'heartbeat');\r\n const installationsImpl = {\r\n app,\r\n appConfig,\r\n heartbeatServiceProvider,\r\n _delete: () => Promise.resolve()\r\n };\r\n return installationsImpl;\r\n};\r\nconst internalFactory = (container) => {\r\n const app = container.getProvider('app').getImmediate();\r\n // Internal FIS instance relies on public FIS instance.\r\n const installations = _getProvider(app, INSTALLATIONS_NAME).getImmediate();\r\n const installationsInternal = {\r\n getId: () => getId(installations),\r\n getToken: (forceRefresh) => getToken(installations, forceRefresh)\r\n };\r\n return installationsInternal;\r\n};\r\nfunction registerInstallations() {\r\n _registerComponent(new Component(INSTALLATIONS_NAME, publicFactory, \"PUBLIC\" /* ComponentType.PUBLIC */));\r\n _registerComponent(new Component(INSTALLATIONS_NAME_INTERNAL, internalFactory, \"PRIVATE\" /* ComponentType.PRIVATE */));\r\n}\n\n/**\r\n * The Firebase Installations Web SDK.\r\n * This SDK does not work in a Node.js environment.\r\n *\r\n * @packageDocumentation\r\n */\r\nregisterInstallations();\r\nregisterVersion(name, version);\r\n// BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\r\nregisterVersion(name, version, 'esm2017');\n\nexport { deleteInstallations, getId, getInstallations, getToken, onIdChange };\n//# sourceMappingURL=index.esm2017.js.map\n","import '@firebase/installations';\nimport { Component } from '@firebase/component';\nimport { openDB, deleteDB } from 'idb';\nimport { ErrorFactory, validateIndexedDBOpenable, isIndexedDBAvailable, areCookiesEnabled, getModularInstance } from '@firebase/util';\nimport { _registerComponent, registerVersion, _getProvider, getApp } from '@firebase/app';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DEFAULT_SW_PATH = '/firebase-messaging-sw.js';\r\nconst DEFAULT_SW_SCOPE = '/firebase-cloud-messaging-push-scope';\r\nconst DEFAULT_VAPID_KEY = 'BDOU99-h67HcA6JeFXHbSNMu7e2yNNu3RzoMj8TM4W88jITfq7ZmPvIM1Iv-4_l2LxQcYwhqby2xGpWwzjfAnG4';\r\nconst ENDPOINT = 'https://fcmregistrations.googleapis.com/v1';\r\nconst CONSOLE_CAMPAIGN_ID = 'google.c.a.c_id';\r\nconst CONSOLE_CAMPAIGN_NAME = 'google.c.a.c_l';\r\nconst CONSOLE_CAMPAIGN_TIME = 'google.c.a.ts';\r\n/** Set to '1' if Analytics is enabled for the campaign */\r\nconst CONSOLE_CAMPAIGN_ANALYTICS_ENABLED = 'google.c.a.e';\r\nvar MessageType$1;\r\n(function (MessageType) {\r\n MessageType[MessageType[\"DATA_MESSAGE\"] = 1] = \"DATA_MESSAGE\";\r\n MessageType[MessageType[\"DISPLAY_NOTIFICATION\"] = 3] = \"DISPLAY_NOTIFICATION\";\r\n})(MessageType$1 || (MessageType$1 = {}));\n\n/**\r\n * @license\r\n * Copyright 2018 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\r\n * in compliance with the License. You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software distributed under the License\r\n * is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\r\n * or implied. See the License for the specific language governing permissions and limitations under\r\n * the License.\r\n */\r\nvar MessageType;\r\n(function (MessageType) {\r\n MessageType[\"PUSH_RECEIVED\"] = \"push-received\";\r\n MessageType[\"NOTIFICATION_CLICKED\"] = \"notification-clicked\";\r\n})(MessageType || (MessageType = {}));\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction arrayToBase64(array) {\r\n const uint8Array = new Uint8Array(array);\r\n const base64String = btoa(String.fromCharCode(...uint8Array));\r\n return base64String.replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\r\n}\r\nfunction base64ToArray(base64String) {\r\n const padding = '='.repeat((4 - (base64String.length % 4)) % 4);\r\n const base64 = (base64String + padding)\r\n .replace(/\\-/g, '+')\r\n .replace(/_/g, '/');\r\n const rawData = atob(base64);\r\n const outputArray = new Uint8Array(rawData.length);\r\n for (let i = 0; i < rawData.length; ++i) {\r\n outputArray[i] = rawData.charCodeAt(i);\r\n }\r\n return outputArray;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst OLD_DB_NAME = 'fcm_token_details_db';\r\n/**\r\n * The last DB version of 'fcm_token_details_db' was 4. This is one higher, so that the upgrade\r\n * callback is called for all versions of the old DB.\r\n */\r\nconst OLD_DB_VERSION = 5;\r\nconst OLD_OBJECT_STORE_NAME = 'fcm_token_object_Store';\r\nasync function migrateOldDatabase(senderId) {\r\n if ('databases' in indexedDB) {\r\n // indexedDb.databases() is an IndexedDB v3 API and does not exist in all browsers. TODO: Remove\r\n // typecast when it lands in TS types.\r\n const databases = await indexedDB.databases();\r\n const dbNames = databases.map(db => db.name);\r\n if (!dbNames.includes(OLD_DB_NAME)) {\r\n // old DB didn't exist, no need to open.\r\n return null;\r\n }\r\n }\r\n let tokenDetails = null;\r\n const db = await openDB(OLD_DB_NAME, OLD_DB_VERSION, {\r\n upgrade: async (db, oldVersion, newVersion, upgradeTransaction) => {\r\n var _a;\r\n if (oldVersion < 2) {\r\n // Database too old, skip migration.\r\n return;\r\n }\r\n if (!db.objectStoreNames.contains(OLD_OBJECT_STORE_NAME)) {\r\n // Database did not exist. Nothing to do.\r\n return;\r\n }\r\n const objectStore = upgradeTransaction.objectStore(OLD_OBJECT_STORE_NAME);\r\n const value = await objectStore.index('fcmSenderId').get(senderId);\r\n await objectStore.clear();\r\n if (!value) {\r\n // No entry in the database, nothing to migrate.\r\n return;\r\n }\r\n if (oldVersion === 2) {\r\n const oldDetails = value;\r\n if (!oldDetails.auth || !oldDetails.p256dh || !oldDetails.endpoint) {\r\n return;\r\n }\r\n tokenDetails = {\r\n token: oldDetails.fcmToken,\r\n createTime: (_a = oldDetails.createTime) !== null && _a !== void 0 ? _a : Date.now(),\r\n subscriptionOptions: {\r\n auth: oldDetails.auth,\r\n p256dh: oldDetails.p256dh,\r\n endpoint: oldDetails.endpoint,\r\n swScope: oldDetails.swScope,\r\n vapidKey: typeof oldDetails.vapidKey === 'string'\r\n ? oldDetails.vapidKey\r\n : arrayToBase64(oldDetails.vapidKey)\r\n }\r\n };\r\n }\r\n else if (oldVersion === 3) {\r\n const oldDetails = value;\r\n tokenDetails = {\r\n token: oldDetails.fcmToken,\r\n createTime: oldDetails.createTime,\r\n subscriptionOptions: {\r\n auth: arrayToBase64(oldDetails.auth),\r\n p256dh: arrayToBase64(oldDetails.p256dh),\r\n endpoint: oldDetails.endpoint,\r\n swScope: oldDetails.swScope,\r\n vapidKey: arrayToBase64(oldDetails.vapidKey)\r\n }\r\n };\r\n }\r\n else if (oldVersion === 4) {\r\n const oldDetails = value;\r\n tokenDetails = {\r\n token: oldDetails.fcmToken,\r\n createTime: oldDetails.createTime,\r\n subscriptionOptions: {\r\n auth: arrayToBase64(oldDetails.auth),\r\n p256dh: arrayToBase64(oldDetails.p256dh),\r\n endpoint: oldDetails.endpoint,\r\n swScope: oldDetails.swScope,\r\n vapidKey: arrayToBase64(oldDetails.vapidKey)\r\n }\r\n };\r\n }\r\n }\r\n });\r\n db.close();\r\n // Delete all old databases.\r\n await deleteDB(OLD_DB_NAME);\r\n await deleteDB('fcm_vapid_details_db');\r\n await deleteDB('undefined');\r\n return checkTokenDetails(tokenDetails) ? tokenDetails : null;\r\n}\r\nfunction checkTokenDetails(tokenDetails) {\r\n if (!tokenDetails || !tokenDetails.subscriptionOptions) {\r\n return false;\r\n }\r\n const { subscriptionOptions } = tokenDetails;\r\n return (typeof tokenDetails.createTime === 'number' &&\r\n tokenDetails.createTime > 0 &&\r\n typeof tokenDetails.token === 'string' &&\r\n tokenDetails.token.length > 0 &&\r\n typeof subscriptionOptions.auth === 'string' &&\r\n subscriptionOptions.auth.length > 0 &&\r\n typeof subscriptionOptions.p256dh === 'string' &&\r\n subscriptionOptions.p256dh.length > 0 &&\r\n typeof subscriptionOptions.endpoint === 'string' &&\r\n subscriptionOptions.endpoint.length > 0 &&\r\n typeof subscriptionOptions.swScope === 'string' &&\r\n subscriptionOptions.swScope.length > 0 &&\r\n typeof subscriptionOptions.vapidKey === 'string' &&\r\n subscriptionOptions.vapidKey.length > 0);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Exported for tests.\r\nconst DATABASE_NAME = 'firebase-messaging-database';\r\nconst DATABASE_VERSION = 1;\r\nconst OBJECT_STORE_NAME = 'firebase-messaging-store';\r\nlet dbPromise = null;\r\nfunction getDbPromise() {\r\n if (!dbPromise) {\r\n dbPromise = openDB(DATABASE_NAME, DATABASE_VERSION, {\r\n upgrade: (upgradeDb, oldVersion) => {\r\n // We don't use 'break' in this switch statement, the fall-through behavior is what we want,\r\n // because if there are multiple versions between the old version and the current version, we\r\n // want ALL the migrations that correspond to those versions to run, not only the last one.\r\n // eslint-disable-next-line default-case\r\n switch (oldVersion) {\r\n case 0:\r\n upgradeDb.createObjectStore(OBJECT_STORE_NAME);\r\n }\r\n }\r\n });\r\n }\r\n return dbPromise;\r\n}\r\n/** Gets record(s) from the objectStore that match the given key. */\r\nasync function dbGet(firebaseDependencies) {\r\n const key = getKey(firebaseDependencies);\r\n const db = await getDbPromise();\r\n const tokenDetails = (await db\r\n .transaction(OBJECT_STORE_NAME)\r\n .objectStore(OBJECT_STORE_NAME)\r\n .get(key));\r\n if (tokenDetails) {\r\n return tokenDetails;\r\n }\r\n else {\r\n // Check if there is a tokenDetails object in the old DB.\r\n const oldTokenDetails = await migrateOldDatabase(firebaseDependencies.appConfig.senderId);\r\n if (oldTokenDetails) {\r\n await dbSet(firebaseDependencies, oldTokenDetails);\r\n return oldTokenDetails;\r\n }\r\n }\r\n}\r\n/** Assigns or overwrites the record for the given key with the given value. */\r\nasync function dbSet(firebaseDependencies, tokenDetails) {\r\n const key = getKey(firebaseDependencies);\r\n const db = await getDbPromise();\r\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\r\n await tx.objectStore(OBJECT_STORE_NAME).put(tokenDetails, key);\r\n await tx.done;\r\n return tokenDetails;\r\n}\r\n/** Removes record(s) from the objectStore that match the given key. */\r\nasync function dbRemove(firebaseDependencies) {\r\n const key = getKey(firebaseDependencies);\r\n const db = await getDbPromise();\r\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\r\n await tx.objectStore(OBJECT_STORE_NAME).delete(key);\r\n await tx.done;\r\n}\r\nfunction getKey({ appConfig }) {\r\n return appConfig.appId;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst ERROR_MAP = {\r\n [\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */]: 'Missing App configuration value: \"{$valueName}\"',\r\n [\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */]: 'This method is available in a Window context.',\r\n [\"only-available-in-sw\" /* ErrorCode.AVAILABLE_IN_SW */]: 'This method is available in a service worker context.',\r\n [\"permission-default\" /* ErrorCode.PERMISSION_DEFAULT */]: 'The notification permission was not granted and dismissed instead.',\r\n [\"permission-blocked\" /* ErrorCode.PERMISSION_BLOCKED */]: 'The notification permission was not granted and blocked instead.',\r\n [\"unsupported-browser\" /* ErrorCode.UNSUPPORTED_BROWSER */]: \"This browser doesn't support the API's required to use the Firebase SDK.\",\r\n [\"indexed-db-unsupported\" /* ErrorCode.INDEXED_DB_UNSUPPORTED */]: \"This browser doesn't support indexedDb.open() (ex. Safari iFrame, Firefox Private Browsing, etc)\",\r\n [\"failed-service-worker-registration\" /* ErrorCode.FAILED_DEFAULT_REGISTRATION */]: 'We are unable to register the default service worker. {$browserErrorMessage}',\r\n [\"token-subscribe-failed\" /* ErrorCode.TOKEN_SUBSCRIBE_FAILED */]: 'A problem occurred while subscribing the user to FCM: {$errorInfo}',\r\n [\"token-subscribe-no-token\" /* ErrorCode.TOKEN_SUBSCRIBE_NO_TOKEN */]: 'FCM returned no token when subscribing the user to push.',\r\n [\"token-unsubscribe-failed\" /* ErrorCode.TOKEN_UNSUBSCRIBE_FAILED */]: 'A problem occurred while unsubscribing the ' +\r\n 'user from FCM: {$errorInfo}',\r\n [\"token-update-failed\" /* ErrorCode.TOKEN_UPDATE_FAILED */]: 'A problem occurred while updating the user from FCM: {$errorInfo}',\r\n [\"token-update-no-token\" /* ErrorCode.TOKEN_UPDATE_NO_TOKEN */]: 'FCM returned no token when updating the user to push.',\r\n [\"use-sw-after-get-token\" /* ErrorCode.USE_SW_AFTER_GET_TOKEN */]: 'The useServiceWorker() method may only be called once and must be ' +\r\n 'called before calling getToken() to ensure your service worker is used.',\r\n [\"invalid-sw-registration\" /* ErrorCode.INVALID_SW_REGISTRATION */]: 'The input to useServiceWorker() must be a ServiceWorkerRegistration.',\r\n [\"invalid-bg-handler\" /* ErrorCode.INVALID_BG_HANDLER */]: 'The input to setBackgroundMessageHandler() must be a function.',\r\n [\"invalid-vapid-key\" /* ErrorCode.INVALID_VAPID_KEY */]: 'The public VAPID key must be a string.',\r\n [\"use-vapid-key-after-get-token\" /* ErrorCode.USE_VAPID_KEY_AFTER_GET_TOKEN */]: 'The usePublicVapidKey() method may only be called once and must be ' +\r\n 'called before calling getToken() to ensure your VAPID key is used.'\r\n};\r\nconst ERROR_FACTORY = new ErrorFactory('messaging', 'Messaging', ERROR_MAP);\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function requestGetToken(firebaseDependencies, subscriptionOptions) {\r\n const headers = await getHeaders(firebaseDependencies);\r\n const body = getBody(subscriptionOptions);\r\n const subscribeOptions = {\r\n method: 'POST',\r\n headers,\r\n body: JSON.stringify(body)\r\n };\r\n let responseData;\r\n try {\r\n const response = await fetch(getEndpoint(firebaseDependencies.appConfig), subscribeOptions);\r\n responseData = await response.json();\r\n }\r\n catch (err) {\r\n throw ERROR_FACTORY.create(\"token-subscribe-failed\" /* ErrorCode.TOKEN_SUBSCRIBE_FAILED */, {\r\n errorInfo: err === null || err === void 0 ? void 0 : err.toString()\r\n });\r\n }\r\n if (responseData.error) {\r\n const message = responseData.error.message;\r\n throw ERROR_FACTORY.create(\"token-subscribe-failed\" /* ErrorCode.TOKEN_SUBSCRIBE_FAILED */, {\r\n errorInfo: message\r\n });\r\n }\r\n if (!responseData.token) {\r\n throw ERROR_FACTORY.create(\"token-subscribe-no-token\" /* ErrorCode.TOKEN_SUBSCRIBE_NO_TOKEN */);\r\n }\r\n return responseData.token;\r\n}\r\nasync function requestUpdateToken(firebaseDependencies, tokenDetails) {\r\n const headers = await getHeaders(firebaseDependencies);\r\n const body = getBody(tokenDetails.subscriptionOptions);\r\n const updateOptions = {\r\n method: 'PATCH',\r\n headers,\r\n body: JSON.stringify(body)\r\n };\r\n let responseData;\r\n try {\r\n const response = await fetch(`${getEndpoint(firebaseDependencies.appConfig)}/${tokenDetails.token}`, updateOptions);\r\n responseData = await response.json();\r\n }\r\n catch (err) {\r\n throw ERROR_FACTORY.create(\"token-update-failed\" /* ErrorCode.TOKEN_UPDATE_FAILED */, {\r\n errorInfo: err === null || err === void 0 ? void 0 : err.toString()\r\n });\r\n }\r\n if (responseData.error) {\r\n const message = responseData.error.message;\r\n throw ERROR_FACTORY.create(\"token-update-failed\" /* ErrorCode.TOKEN_UPDATE_FAILED */, {\r\n errorInfo: message\r\n });\r\n }\r\n if (!responseData.token) {\r\n throw ERROR_FACTORY.create(\"token-update-no-token\" /* ErrorCode.TOKEN_UPDATE_NO_TOKEN */);\r\n }\r\n return responseData.token;\r\n}\r\nasync function requestDeleteToken(firebaseDependencies, token) {\r\n const headers = await getHeaders(firebaseDependencies);\r\n const unsubscribeOptions = {\r\n method: 'DELETE',\r\n headers\r\n };\r\n try {\r\n const response = await fetch(`${getEndpoint(firebaseDependencies.appConfig)}/${token}`, unsubscribeOptions);\r\n const responseData = await response.json();\r\n if (responseData.error) {\r\n const message = responseData.error.message;\r\n throw ERROR_FACTORY.create(\"token-unsubscribe-failed\" /* ErrorCode.TOKEN_UNSUBSCRIBE_FAILED */, {\r\n errorInfo: message\r\n });\r\n }\r\n }\r\n catch (err) {\r\n throw ERROR_FACTORY.create(\"token-unsubscribe-failed\" /* ErrorCode.TOKEN_UNSUBSCRIBE_FAILED */, {\r\n errorInfo: err === null || err === void 0 ? void 0 : err.toString()\r\n });\r\n }\r\n}\r\nfunction getEndpoint({ projectId }) {\r\n return `${ENDPOINT}/projects/${projectId}/registrations`;\r\n}\r\nasync function getHeaders({ appConfig, installations }) {\r\n const authToken = await installations.getToken();\r\n return new Headers({\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json',\r\n 'x-goog-api-key': appConfig.apiKey,\r\n 'x-goog-firebase-installations-auth': `FIS ${authToken}`\r\n });\r\n}\r\nfunction getBody({ p256dh, auth, endpoint, vapidKey }) {\r\n const body = {\r\n web: {\r\n endpoint,\r\n auth,\r\n p256dh\r\n }\r\n };\r\n if (vapidKey !== DEFAULT_VAPID_KEY) {\r\n body.web.applicationPubKey = vapidKey;\r\n }\r\n return body;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// UpdateRegistration will be called once every week.\r\nconst TOKEN_EXPIRATION_MS = 7 * 24 * 60 * 60 * 1000; // 7 days\r\nasync function getTokenInternal(messaging) {\r\n const pushSubscription = await getPushSubscription(messaging.swRegistration, messaging.vapidKey);\r\n const subscriptionOptions = {\r\n vapidKey: messaging.vapidKey,\r\n swScope: messaging.swRegistration.scope,\r\n endpoint: pushSubscription.endpoint,\r\n auth: arrayToBase64(pushSubscription.getKey('auth')),\r\n p256dh: arrayToBase64(pushSubscription.getKey('p256dh'))\r\n };\r\n const tokenDetails = await dbGet(messaging.firebaseDependencies);\r\n if (!tokenDetails) {\r\n // No token, get a new one.\r\n return getNewToken(messaging.firebaseDependencies, subscriptionOptions);\r\n }\r\n else if (!isTokenValid(tokenDetails.subscriptionOptions, subscriptionOptions)) {\r\n // Invalid token, get a new one.\r\n try {\r\n await requestDeleteToken(messaging.firebaseDependencies, tokenDetails.token);\r\n }\r\n catch (e) {\r\n // Suppress errors because of #2364\r\n console.warn(e);\r\n }\r\n return getNewToken(messaging.firebaseDependencies, subscriptionOptions);\r\n }\r\n else if (Date.now() >= tokenDetails.createTime + TOKEN_EXPIRATION_MS) {\r\n // Weekly token refresh\r\n return updateToken(messaging, {\r\n token: tokenDetails.token,\r\n createTime: Date.now(),\r\n subscriptionOptions\r\n });\r\n }\r\n else {\r\n // Valid token, nothing to do.\r\n return tokenDetails.token;\r\n }\r\n}\r\n/**\r\n * This method deletes the token from the database, unsubscribes the token from FCM, and unregisters\r\n * the push subscription if it exists.\r\n */\r\nasync function deleteTokenInternal(messaging) {\r\n const tokenDetails = await dbGet(messaging.firebaseDependencies);\r\n if (tokenDetails) {\r\n await requestDeleteToken(messaging.firebaseDependencies, tokenDetails.token);\r\n await dbRemove(messaging.firebaseDependencies);\r\n }\r\n // Unsubscribe from the push subscription.\r\n const pushSubscription = await messaging.swRegistration.pushManager.getSubscription();\r\n if (pushSubscription) {\r\n return pushSubscription.unsubscribe();\r\n }\r\n // If there's no SW, consider it a success.\r\n return true;\r\n}\r\nasync function updateToken(messaging, tokenDetails) {\r\n try {\r\n const updatedToken = await requestUpdateToken(messaging.firebaseDependencies, tokenDetails);\r\n const updatedTokenDetails = Object.assign(Object.assign({}, tokenDetails), { token: updatedToken, createTime: Date.now() });\r\n await dbSet(messaging.firebaseDependencies, updatedTokenDetails);\r\n return updatedToken;\r\n }\r\n catch (e) {\r\n throw e;\r\n }\r\n}\r\nasync function getNewToken(firebaseDependencies, subscriptionOptions) {\r\n const token = await requestGetToken(firebaseDependencies, subscriptionOptions);\r\n const tokenDetails = {\r\n token,\r\n createTime: Date.now(),\r\n subscriptionOptions\r\n };\r\n await dbSet(firebaseDependencies, tokenDetails);\r\n return tokenDetails.token;\r\n}\r\n/**\r\n * Gets a PushSubscription for the current user.\r\n */\r\nasync function getPushSubscription(swRegistration, vapidKey) {\r\n const subscription = await swRegistration.pushManager.getSubscription();\r\n if (subscription) {\r\n return subscription;\r\n }\r\n return swRegistration.pushManager.subscribe({\r\n userVisibleOnly: true,\r\n // Chrome <= 75 doesn't support base64-encoded VAPID key. For backward compatibility, VAPID key\r\n // submitted to pushManager#subscribe must be of type Uint8Array.\r\n applicationServerKey: base64ToArray(vapidKey)\r\n });\r\n}\r\n/**\r\n * Checks if the saved tokenDetails object matches the configuration provided.\r\n */\r\nfunction isTokenValid(dbOptions, currentOptions) {\r\n const isVapidKeyEqual = currentOptions.vapidKey === dbOptions.vapidKey;\r\n const isEndpointEqual = currentOptions.endpoint === dbOptions.endpoint;\r\n const isAuthEqual = currentOptions.auth === dbOptions.auth;\r\n const isP256dhEqual = currentOptions.p256dh === dbOptions.p256dh;\r\n return isVapidKeyEqual && isEndpointEqual && isAuthEqual && isP256dhEqual;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction externalizePayload(internalPayload) {\r\n const payload = {\r\n from: internalPayload.from,\r\n // eslint-disable-next-line camelcase\r\n collapseKey: internalPayload.collapse_key,\r\n // eslint-disable-next-line camelcase\r\n messageId: internalPayload.fcmMessageId\r\n };\r\n propagateNotificationPayload(payload, internalPayload);\r\n propagateDataPayload(payload, internalPayload);\r\n propagateFcmOptions(payload, internalPayload);\r\n return payload;\r\n}\r\nfunction propagateNotificationPayload(payload, messagePayloadInternal) {\r\n if (!messagePayloadInternal.notification) {\r\n return;\r\n }\r\n payload.notification = {};\r\n const title = messagePayloadInternal.notification.title;\r\n if (!!title) {\r\n payload.notification.title = title;\r\n }\r\n const body = messagePayloadInternal.notification.body;\r\n if (!!body) {\r\n payload.notification.body = body;\r\n }\r\n const image = messagePayloadInternal.notification.image;\r\n if (!!image) {\r\n payload.notification.image = image;\r\n }\r\n const icon = messagePayloadInternal.notification.icon;\r\n if (!!icon) {\r\n payload.notification.icon = icon;\r\n }\r\n}\r\nfunction propagateDataPayload(payload, messagePayloadInternal) {\r\n if (!messagePayloadInternal.data) {\r\n return;\r\n }\r\n payload.data = messagePayloadInternal.data;\r\n}\r\nfunction propagateFcmOptions(payload, messagePayloadInternal) {\r\n var _a, _b, _c, _d, _e;\r\n // fcmOptions.link value is written into notification.click_action. see more in b/232072111\r\n if (!messagePayloadInternal.fcmOptions &&\r\n !((_a = messagePayloadInternal.notification) === null || _a === void 0 ? void 0 : _a.click_action)) {\r\n return;\r\n }\r\n payload.fcmOptions = {};\r\n const link = (_c = (_b = messagePayloadInternal.fcmOptions) === null || _b === void 0 ? void 0 : _b.link) !== null && _c !== void 0 ? _c : (_d = messagePayloadInternal.notification) === null || _d === void 0 ? void 0 : _d.click_action;\r\n if (!!link) {\r\n payload.fcmOptions.link = link;\r\n }\r\n // eslint-disable-next-line camelcase\r\n const analyticsLabel = (_e = messagePayloadInternal.fcmOptions) === null || _e === void 0 ? void 0 : _e.analytics_label;\r\n if (!!analyticsLabel) {\r\n payload.fcmOptions.analyticsLabel = analyticsLabel;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction isConsoleMessage(data) {\r\n // This message has a campaign ID, meaning it was sent using the Firebase Console.\r\n return typeof data === 'object' && !!data && CONSOLE_CAMPAIGN_ID in data;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n_mergeStrings('hts/frbslgigp.ogepscmv/ieo/eaylg', 'tp:/ieaeogn-agolai.o/1frlglgc/o');\r\n_mergeStrings('AzSCbw63g1R0nCw85jG8', 'Iaya3yLKwmgvh7cF0q4');\r\nfunction _mergeStrings(s1, s2) {\r\n const resultArray = [];\r\n for (let i = 0; i < s1.length; i++) {\r\n resultArray.push(s1.charAt(i));\r\n if (i < s2.length) {\r\n resultArray.push(s2.charAt(i));\r\n }\r\n }\r\n return resultArray.join('');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction extractAppConfig(app) {\r\n if (!app || !app.options) {\r\n throw getMissingValueError('App Configuration Object');\r\n }\r\n if (!app.name) {\r\n throw getMissingValueError('App Name');\r\n }\r\n // Required app config keys\r\n const configKeys = [\r\n 'projectId',\r\n 'apiKey',\r\n 'appId',\r\n 'messagingSenderId'\r\n ];\r\n const { options } = app;\r\n for (const keyName of configKeys) {\r\n if (!options[keyName]) {\r\n throw getMissingValueError(keyName);\r\n }\r\n }\r\n return {\r\n appName: app.name,\r\n projectId: options.projectId,\r\n apiKey: options.apiKey,\r\n appId: options.appId,\r\n senderId: options.messagingSenderId\r\n };\r\n}\r\nfunction getMissingValueError(valueName) {\r\n return ERROR_FACTORY.create(\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */, {\r\n valueName\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass MessagingService {\r\n constructor(app, installations, analyticsProvider) {\r\n // logging is only done with end user consent. Default to false.\r\n this.deliveryMetricsExportedToBigQueryEnabled = false;\r\n this.onBackgroundMessageHandler = null;\r\n this.onMessageHandler = null;\r\n this.logEvents = [];\r\n this.isLogServiceStarted = false;\r\n const appConfig = extractAppConfig(app);\r\n this.firebaseDependencies = {\r\n app,\r\n appConfig,\r\n installations,\r\n analyticsProvider\r\n };\r\n }\r\n _delete() {\r\n return Promise.resolve();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function registerDefaultSw(messaging) {\r\n try {\r\n messaging.swRegistration = await navigator.serviceWorker.register(DEFAULT_SW_PATH, {\r\n scope: DEFAULT_SW_SCOPE\r\n });\r\n // The timing when browser updates sw when sw has an update is unreliable from experiment. It\r\n // leads to version conflict when the SDK upgrades to a newer version in the main page, but sw\r\n // is stuck with the old version. For example,\r\n // https://github.com/firebase/firebase-js-sdk/issues/2590 The following line reliably updates\r\n // sw if there was an update.\r\n messaging.swRegistration.update().catch(() => {\r\n /* it is non blocking and we don't care if it failed */\r\n });\r\n }\r\n catch (e) {\r\n throw ERROR_FACTORY.create(\"failed-service-worker-registration\" /* ErrorCode.FAILED_DEFAULT_REGISTRATION */, {\r\n browserErrorMessage: e === null || e === void 0 ? void 0 : e.message\r\n });\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function updateSwReg(messaging, swRegistration) {\r\n if (!swRegistration && !messaging.swRegistration) {\r\n await registerDefaultSw(messaging);\r\n }\r\n if (!swRegistration && !!messaging.swRegistration) {\r\n return;\r\n }\r\n if (!(swRegistration instanceof ServiceWorkerRegistration)) {\r\n throw ERROR_FACTORY.create(\"invalid-sw-registration\" /* ErrorCode.INVALID_SW_REGISTRATION */);\r\n }\r\n messaging.swRegistration = swRegistration;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function updateVapidKey(messaging, vapidKey) {\r\n if (!!vapidKey) {\r\n messaging.vapidKey = vapidKey;\r\n }\r\n else if (!messaging.vapidKey) {\r\n messaging.vapidKey = DEFAULT_VAPID_KEY;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function getToken$1(messaging, options) {\r\n if (!navigator) {\r\n throw ERROR_FACTORY.create(\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */);\r\n }\r\n if (Notification.permission === 'default') {\r\n await Notification.requestPermission();\r\n }\r\n if (Notification.permission !== 'granted') {\r\n throw ERROR_FACTORY.create(\"permission-blocked\" /* ErrorCode.PERMISSION_BLOCKED */);\r\n }\r\n await updateVapidKey(messaging, options === null || options === void 0 ? void 0 : options.vapidKey);\r\n await updateSwReg(messaging, options === null || options === void 0 ? void 0 : options.serviceWorkerRegistration);\r\n return getTokenInternal(messaging);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function logToScion(messaging, messageType, data) {\r\n const eventType = getEventType(messageType);\r\n const analytics = await messaging.firebaseDependencies.analyticsProvider.get();\r\n analytics.logEvent(eventType, {\r\n /* eslint-disable camelcase */\r\n message_id: data[CONSOLE_CAMPAIGN_ID],\r\n message_name: data[CONSOLE_CAMPAIGN_NAME],\r\n message_time: data[CONSOLE_CAMPAIGN_TIME],\r\n message_device_time: Math.floor(Date.now() / 1000)\r\n /* eslint-enable camelcase */\r\n });\r\n}\r\nfunction getEventType(messageType) {\r\n switch (messageType) {\r\n case MessageType.NOTIFICATION_CLICKED:\r\n return 'notification_open';\r\n case MessageType.PUSH_RECEIVED:\r\n return 'notification_foreground';\r\n default:\r\n throw new Error();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function messageEventListener(messaging, event) {\r\n const internalPayload = event.data;\r\n if (!internalPayload.isFirebaseMessaging) {\r\n return;\r\n }\r\n if (messaging.onMessageHandler &&\r\n internalPayload.messageType === MessageType.PUSH_RECEIVED) {\r\n if (typeof messaging.onMessageHandler === 'function') {\r\n messaging.onMessageHandler(externalizePayload(internalPayload));\r\n }\r\n else {\r\n messaging.onMessageHandler.next(externalizePayload(internalPayload));\r\n }\r\n }\r\n // Log to Scion if applicable\r\n const dataPayload = internalPayload.data;\r\n if (isConsoleMessage(dataPayload) &&\r\n dataPayload[CONSOLE_CAMPAIGN_ANALYTICS_ENABLED] === '1') {\r\n await logToScion(messaging, internalPayload.messageType, dataPayload);\r\n }\r\n}\n\nconst name = \"@firebase/messaging\";\nconst version = \"0.12.8\";\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst WindowMessagingFactory = (container) => {\r\n const messaging = new MessagingService(container.getProvider('app').getImmediate(), container.getProvider('installations-internal').getImmediate(), container.getProvider('analytics-internal'));\r\n navigator.serviceWorker.addEventListener('message', e => messageEventListener(messaging, e));\r\n return messaging;\r\n};\r\nconst WindowMessagingInternalFactory = (container) => {\r\n const messaging = container\r\n .getProvider('messaging')\r\n .getImmediate();\r\n const messagingInternal = {\r\n getToken: (options) => getToken$1(messaging, options)\r\n };\r\n return messagingInternal;\r\n};\r\nfunction registerMessagingInWindow() {\r\n _registerComponent(new Component('messaging', WindowMessagingFactory, \"PUBLIC\" /* ComponentType.PUBLIC */));\r\n _registerComponent(new Component('messaging-internal', WindowMessagingInternalFactory, \"PRIVATE\" /* ComponentType.PRIVATE */));\r\n registerVersion(name, version);\r\n // BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\r\n registerVersion(name, version, 'esm2017');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Checks if all required APIs exist in the browser.\r\n * @returns a Promise that resolves to a boolean.\r\n *\r\n * @public\r\n */\r\nasync function isWindowSupported() {\r\n try {\r\n // This throws if open() is unsupported, so adding it to the conditional\r\n // statement below can cause an uncaught error.\r\n await validateIndexedDBOpenable();\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n // firebase-js-sdk/issues/2393 reveals that idb#open in Safari iframe and Firefox private browsing\r\n // might be prohibited to run. In these contexts, an error would be thrown during the messaging\r\n // instantiating phase, informing the developers to import/call isSupported for special handling.\r\n return (typeof window !== 'undefined' &&\r\n isIndexedDBAvailable() &&\r\n areCookiesEnabled() &&\r\n 'serviceWorker' in navigator &&\r\n 'PushManager' in window &&\r\n 'Notification' in window &&\r\n 'fetch' in window &&\r\n ServiceWorkerRegistration.prototype.hasOwnProperty('showNotification') &&\r\n PushSubscription.prototype.hasOwnProperty('getKey'));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function deleteToken$1(messaging) {\r\n if (!navigator) {\r\n throw ERROR_FACTORY.create(\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */);\r\n }\r\n if (!messaging.swRegistration) {\r\n await registerDefaultSw(messaging);\r\n }\r\n return deleteTokenInternal(messaging);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction onMessage$1(messaging, nextOrObserver) {\r\n if (!navigator) {\r\n throw ERROR_FACTORY.create(\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */);\r\n }\r\n messaging.onMessageHandler = nextOrObserver;\r\n return () => {\r\n messaging.onMessageHandler = null;\r\n };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Retrieves a Firebase Cloud Messaging instance.\r\n *\r\n * @returns The Firebase Cloud Messaging instance associated with the provided firebase app.\r\n *\r\n * @public\r\n */\r\nfunction getMessagingInWindow(app = getApp()) {\r\n // Conscious decision to make this async check non-blocking during the messaging instance\r\n // initialization phase for performance consideration. An error would be thrown latter for\r\n // developer's information. Developers can then choose to import and call `isSupported` for\r\n // special handling.\r\n isWindowSupported().then(isSupported => {\r\n // If `isWindowSupported()` resolved, but returned false.\r\n if (!isSupported) {\r\n throw ERROR_FACTORY.create(\"unsupported-browser\" /* ErrorCode.UNSUPPORTED_BROWSER */);\r\n }\r\n }, _ => {\r\n // If `isWindowSupported()` rejected.\r\n throw ERROR_FACTORY.create(\"indexed-db-unsupported\" /* ErrorCode.INDEXED_DB_UNSUPPORTED */);\r\n });\r\n return _getProvider(getModularInstance(app), 'messaging').getImmediate();\r\n}\r\n/**\r\n * Subscribes the {@link Messaging} instance to push notifications. Returns a Firebase Cloud\r\n * Messaging registration token that can be used to send push messages to that {@link Messaging}\r\n * instance.\r\n *\r\n * If notification permission isn't already granted, this method asks the user for permission. The\r\n * returned promise rejects if the user does not allow the app to show notifications.\r\n *\r\n * @param messaging - The {@link Messaging} instance.\r\n * @param options - Provides an optional vapid key and an optional service worker registration.\r\n *\r\n * @returns The promise resolves with an FCM registration token.\r\n *\r\n * @public\r\n */\r\nasync function getToken(messaging, options) {\r\n messaging = getModularInstance(messaging);\r\n return getToken$1(messaging, options);\r\n}\r\n/**\r\n * Deletes the registration token associated with this {@link Messaging} instance and unsubscribes\r\n * the {@link Messaging} instance from the push subscription.\r\n *\r\n * @param messaging - The {@link Messaging} instance.\r\n *\r\n * @returns The promise resolves when the token has been successfully deleted.\r\n *\r\n * @public\r\n */\r\nfunction deleteToken(messaging) {\r\n messaging = getModularInstance(messaging);\r\n return deleteToken$1(messaging);\r\n}\r\n/**\r\n * When a push message is received and the user is currently on a page for your origin, the\r\n * message is passed to the page and an `onMessage()` event is dispatched with the payload of\r\n * the push message.\r\n *\r\n *\r\n * @param messaging - The {@link Messaging} instance.\r\n * @param nextOrObserver - This function, or observer object with `next` defined,\r\n * is called when a message is received and the user is currently viewing your page.\r\n * @returns To stop listening for messages execute this returned function.\r\n *\r\n * @public\r\n */\r\nfunction onMessage(messaging, nextOrObserver) {\r\n messaging = getModularInstance(messaging);\r\n return onMessage$1(messaging, nextOrObserver);\r\n}\n\n/**\r\n * The Firebase Cloud Messaging Web SDK.\r\n * This SDK does not work in a Node.js environment.\r\n *\r\n * @packageDocumentation\r\n */\r\nregisterMessagingInWindow();\n\nexport { deleteToken, getMessagingInWindow as getMessaging, getToken, isWindowSupported as isSupported, onMessage };\n//# sourceMappingURL=index.esm2017.js.map\n","import React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\nexport default class Alert extends React.PureComponent {\r\n render() {\r\n return (

\r\n
\r\n
{this.props.title}
\r\n
{this.props.content}
\r\n
\r\n {this.props.onReject ?\r\n \r\n :\r\n null\r\n }\r\n {this.props.onConfirm ?\r\n \r\n :\r\n null\r\n }\r\n
\r\n
\r\n
);\r\n }\r\n};\r\n","// Context Menu: popup/dropdown menu.\r\nimport React from 'react';\r\nimport { injectIntl, defineMessages } from 'react-intl';\r\n\r\nimport { REM_SIZE } from '../config.js';\r\n\r\nconst messages = defineMessages({\r\n info: {\r\n id: 'menu_item_info',\r\n defaultMessage: 'Info',\r\n description: 'Show extended topic information'\r\n },\r\n clear_messages: {\r\n id: 'menu_item_clear_messages',\r\n defaultMessage: 'Clear messages',\r\n description: 'Delete all messages'\r\n },\r\n clear_for_all: {\r\n id: 'menu_item_clear_messages_for_all',\r\n defaultMessage: 'Clear for All',\r\n description: 'Delete all message(s) for all members'\r\n },\r\n delete: {\r\n id: 'menu_item_delete',\r\n defaultMessage: 'Delete',\r\n description: 'Delete selected messages'\r\n },\r\n delete_for_all: {\r\n id: 'menu_item_delete_for_all',\r\n defaultMessage: 'Delete for All',\r\n description: 'Delete selected message(s) for all members'\r\n },\r\n send_retry: {\r\n id: 'menu_item_send_retry',\r\n defaultMessage: 'Retry',\r\n description: 'Retry sending message'\r\n },\r\n mute: {\r\n id: 'menu_item_mute',\r\n defaultMessage: 'Mute',\r\n description: 'Turn off notifications'\r\n },\r\n unmute: {\r\n id: 'menu_item_unmute',\r\n defaultMessage: 'Unmute',\r\n description: 'Turn notifications on'\r\n },\r\n reply: {\r\n id: 'menu_item_reply',\r\n defaultMessage: 'Reply',\r\n description: 'Reply to message'\r\n },\r\n forward: {\r\n id: 'menu_item_forward',\r\n defaultMessage: 'Forward',\r\n description: 'Forward message'\r\n },\r\n edit: {\r\n id: 'menu_item_edit',\r\n defaultMessage: 'Edit',\r\n description: 'Edit message'\r\n },\r\n topic_delete: {\r\n id: 'menu_item_delete_topic',\r\n defaultMessage: 'Delete',\r\n description: 'Delete entire topic'\r\n },\r\n topic_delete_warning: {\r\n id: 'topic_delete_warning',\r\n defaultMessage: 'Are you sure you want to delete this conversation? It cannot be undone.',\r\n description: 'Alert warning when deleting entire topic'\r\n },\r\n delete_messages_warning: {\r\n id: 'delete_messages_warning',\r\n defaultMessage: 'Are you sure you want to delete all messages for everyone? It cannot be undone.',\r\n description: 'Alert dialog warning when hard-deleting all messages.'\r\n },\r\n unblock: {\r\n id: 'menu_item_unblock',\r\n defaultMessage: 'Unblock',\r\n description: 'Unblock topic or user'\r\n },\r\n // Generic string suitable for either topic or user.\r\n block: {\r\n id: 'menu_item_block',\r\n defaultMessage: 'Block',\r\n description: 'Block topic or user'\r\n },\r\n topic_block_warning: {\r\n id: 'topic_block_warning',\r\n defaultMessage: 'Are you sure you want to block this conversation?',\r\n description: 'Alert warning when blocking a topic.'\r\n },\r\n member_delete: {\r\n id: 'menu_item_member_delete',\r\n defaultMessage: 'Remove',\r\n description: 'Remove user from topic'\r\n },\r\n archive: {\r\n id: 'menu_item_archive_topic',\r\n defaultMessage: 'Archive',\r\n description: 'Move topic from the list of active chats to archive'\r\n },\r\n unarchive: {\r\n id: 'menu_item_restore_topic',\r\n defaultMessage: 'Restore',\r\n description: 'Restore topic from archive'\r\n },\r\n edit_permissions: {\r\n id: 'menu_item_edit_permissions',\r\n defaultMessage: 'Edit permissions',\r\n description: 'Menu item [Edit permissions]'\r\n },\r\n clear_messages_warning: {\r\n id: 'clear_messages_warning',\r\n defaultMessage: 'Are you sure you want to clear all messages? It cannot be undone.',\r\n description: 'Alert dialog warning when deleting all messages.'\r\n },\r\n});\r\n\r\nclass ContextMenu extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.selfRef = React.createRef();\r\n\r\n const {formatMessage} = props.intl;\r\n\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.handleEscapeKey = this.handleEscapeKey.bind(this);\r\n this.handleClick = this.handleClick.bind(this);\r\n\r\n // Preconfigured menu items.\r\n this.MenuItems = {\r\n 'topic_info': {\r\n id: 'topic_info',\r\n title: formatMessage(messages.info),\r\n handler: null\r\n },\r\n 'messages_clear': {\r\n id: 'messages_clear',\r\n title: formatMessage(messages.clear_messages),\r\n handler: (params, errorHandler) => {\r\n return props.onShowAlert(\r\n formatMessage(messages.clear_messages), // title\r\n formatMessage(messages.clear_messages_warning), // content\r\n (_ => { this.deleteMessages(true, false, params, errorHandler); }), // onConfirm\r\n null, // \"OK\"\r\n true, // Show Reject button\r\n null // \"Cancel\"\r\n );\r\n }\r\n },\r\n 'messages_clear_hard': {\r\n id: 'messages_clear_hard',\r\n title: formatMessage(messages.clear_for_all),\r\n handler: (params, errorHandler) => {\r\n return props.onShowAlert(\r\n formatMessage(messages.clear_for_all), // title\r\n formatMessage(messages.delete_messages_warning), // content\r\n (_ => { return this.deleteMessages(true, true, params, errorHandler); }),\r\n null, // \"OK\"\r\n true, // Show Reject button\r\n null // \"Cancel\"\r\n );\r\n }\r\n },\r\n 'message_delete': {\r\n id: 'message_delete',\r\n title: formatMessage(messages.delete),\r\n handler: (params, errorHandler) => {\r\n return this.deleteMessages(false, false, params, errorHandler);\r\n }\r\n },\r\n 'message_delete_hard': {\r\n id: 'message_delete_hard',\r\n title: formatMessage(messages.delete_for_all),\r\n handler: (params, errorHandler) => {\r\n return this.deleteMessages(false, true, params, errorHandler);\r\n }\r\n },\r\n 'menu_item_send_retry': {\r\n id: 'menu_item_send_retry',\r\n title: formatMessage(messages.send_retry),\r\n handler: (params, errorHandler) => {\r\n return this.retryMessage(params, errorHandler);\r\n }\r\n },\r\n 'menu_item_reply': {\r\n id: 'menu_item_reply',\r\n title: formatMessage(messages.reply),\r\n handler: (params, errorHandler) => {\r\n return this.replyToMessage(params, errorHandler);\r\n }\r\n },\r\n 'menu_item_forward': {\r\n id: 'menu_item_forward',\r\n title: formatMessage(messages.forward),\r\n handler: _ => {} /* the action is taken directly in tinode-web */\r\n },\r\n 'menu_item_edit': {\r\n id: 'menu_item_edit',\r\n title: formatMessage(messages.edit),\r\n handler: (params, errorHandler) => {\r\n return this.editMessage(params, errorHandler);\r\n }\r\n },\r\n 'topic_unmute': {\r\n id: 'topic_unmute',\r\n title: formatMessage(messages.unmute),\r\n handler: this.topicPermissionSetter.bind(this, '+P')\r\n },\r\n 'topic_mute': {\r\n id: 'topic_mute',\r\n title: formatMessage(messages.mute),\r\n handler: this.topicPermissionSetter.bind(this, '-P')\r\n },\r\n 'topic_unblock': {\r\n id: 'topic_unblock',\r\n title: formatMessage(messages.unblock),\r\n handler: this.topicPermissionSetter.bind(this, '+JP')\r\n },\r\n 'topic_block': {\r\n id: 'topic_block',\r\n title: formatMessage(messages.block),\r\n handler: (params, errorHandler) => {\r\n return props.onShowAlert(\r\n formatMessage(messages.block), // title\r\n formatMessage(messages.topic_block_warning), // content\r\n (_ => this.topicPermissionSetter('-JP', params, errorHandler).then(ctrl => {\r\n this.props.onTopicRemoved(params.topicName);\r\n return ctrl;\r\n })),\r\n null, // \"OK\"\r\n true, // Show Reject button\r\n null // \"Cancel\"\r\n );\r\n }\r\n },\r\n 'topic_delete': {\r\n id: 'topic_delete',\r\n title: formatMessage(messages.topic_delete),\r\n handler: (params, errorHandler) => {\r\n return props.onShowAlert(\r\n formatMessage(messages.topic_delete), // title\r\n formatMessage(messages.topic_delete_warning), // content\r\n (_ => {\r\n const topic = this.props.tinode.getTopic(params.topicName);\r\n if (!topic) {\r\n console.warn(\"Topic not found: \", params.topicName);\r\n return;\r\n }\r\n return topic.delTopic(true).catch(err => {\r\n if (errorHandler) {\r\n errorHandler(err.message, 'err');\r\n }\r\n });\r\n }),\r\n null, // \"OK\"\r\n true, // Show Reject button\r\n null // \"Cancel\"\r\n );\r\n }\r\n },\r\n 'topic_archive': {\r\n id: 'topic_archive',\r\n title: formatMessage(messages.archive),\r\n handler: (params, errorHandler) => {\r\n const topic = this.props.tinode.getTopic(params.topicName);\r\n if (!topic) {\r\n console.warn(\"Topic not found: \", params.topicName);\r\n return;\r\n }\r\n return topic.archive(true).catch(err => {\r\n if (errorHandler) {\r\n errorHandler(err.message, 'err');\r\n }\r\n });\r\n }\r\n },\r\n 'topic_restore': {\r\n id: 'topic_restore',\r\n title: formatMessage(messages.unarchive),\r\n handler: (params, errorHandler) => {\r\n const topic = this.props.tinode.getTopic(params.topicName);\r\n if (!topic) {\r\n console.warn(\"Topic not found: \", params.topicName);\r\n return;\r\n }\r\n return topic.archive(false).catch(err => {\r\n if (errorHandler) {\r\n errorHandler(err.message, 'err');\r\n }\r\n });\r\n }\r\n },\r\n // menu_item_edit_permissions is defined elsewhere.\r\n 'permissions': {\r\n id: 'permissions',\r\n title: formatMessage(messages.edit_permissions),\r\n handler: null\r\n },\r\n 'member_delete': {\r\n id: 'member_delete',\r\n title: formatMessage(messages.member_delete),\r\n handler: (params, errorHandler) => {\r\n const topic = this.props.tinode.getTopic(params.topicName);\r\n if (!topic || !params.user) {\r\n console.warn(\"Topic or user not found: '\" + params.topicName + \"', '\" + params.user + \"'\");\r\n return;\r\n }\r\n return topic.delSubscription(params.user).catch(err => {\r\n if (errorHandler) {\r\n errorHandler(err.message, 'err');\r\n }\r\n });\r\n }\r\n },\r\n 'member_mute': {\r\n id: 'member_mute',\r\n title: formatMessage(messages.mute),\r\n handler: this.topicPermissionSetter.bind(this, '-P')\r\n },\r\n 'member_unmute': {\r\n id: 'member_unmute',\r\n title: formatMessage(messages.unmute),\r\n handler: this.topicPermissionSetter.bind(this, '+P')\r\n },\r\n 'member_block': {\r\n id: 'member_block',\r\n title: formatMessage(messages.block),\r\n handler: this.topicPermissionSetter.bind(this, '-JP')\r\n },\r\n 'member_unblock': {\r\n id: 'member_unblock',\r\n title: formatMessage(messages.unblock),\r\n handler: this.topicPermissionSetter.bind(this, '+JP')\r\n },\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n document.addEventListener('mousedown', this.handlePageClick, false);\r\n document.addEventListener('keyup', this.handleEscapeKey, false);\r\n }\r\n\r\n componentWillUnmount() {\r\n document.removeEventListener('mousedown', this.handlePageClick, false);\r\n document.removeEventListener('keyup', this.handleEscapeKey, false);\r\n }\r\n\r\n handlePageClick(e) {\r\n if (this.selfRef.current.contains(e.target)) {\r\n return;\r\n }\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.props.hide();\r\n }\r\n\r\n handleEscapeKey(e) {\r\n if (e.keyCode === 27) {\r\n this.props.hide();\r\n }\r\n }\r\n\r\n handleClick(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.props.hide();\r\n let item = this.props.items[e.currentTarget.dataset.id];\r\n if (typeof item == 'string') {\r\n item = this.MenuItems[item];\r\n }\r\n\r\n if (!item) {\r\n console.error(\"Invalid menu item ID\", e.currentTarget.dataset.id);\r\n } else {\r\n this.props.onAction(\r\n item.id,\r\n item.handler(this.props.params, this.props.onError),\r\n this.props.params);\r\n }\r\n }\r\n\r\n // Menu Actions\r\n\r\n deleteMessages(all, hard, params, errorHandler) {\r\n const topic = this.props.tinode.getTopic(params.topicName);\r\n if (!topic) {\r\n console.warn(\"Topic not found: \", params.topicName);\r\n return;\r\n }\r\n\r\n // We don't know if the message is still pending (e.g. attachment is being uploaded),\r\n // so try cancelling first. No harm if we can't cancel.\r\n // The message can be cancelled if transmission to the server has not\r\n // started yet or if the message send has failed.\r\n if (!all && topic.cancelSend(params.seq)) {\r\n return;\r\n }\r\n\r\n const promise = all ?\r\n topic.delMessagesAll(hard) :\r\n params.replace > 0 ?\r\n topic.delMessagesEdits(params.replace, hard) :\r\n topic.delMessagesList([params.seq], hard);\r\n\r\n return promise.catch(err => {\r\n if (errorHandler) {\r\n errorHandler(err.message, 'err');\r\n }\r\n });\r\n }\r\n\r\n // Retries sending failed message.\r\n retryMessage(params, errorHandler) {\r\n const topic = this.props.tinode.getTopic(params.topicName);\r\n // Remove the existing message entry.\r\n if (!topic || !topic.flushMessage(params.seq)) {\r\n return;\r\n }\r\n const msg = topic.createMessage(params.content, false);\r\n return topic.publishDraft(msg).catch(err => {\r\n if (errorHandler) {\r\n errorHandler(err.message, 'err');\r\n }\r\n });\r\n }\r\n\r\n // Function is used by context menu to set permissions.\r\n topicPermissionSetter(mode, params, errorHandler) {\r\n const topic = this.props.tinode.getTopic(params.topicName);\r\n if (!topic) {\r\n console.warn(\"Topic not found\", params.topicName);\r\n return;\r\n }\r\n\r\n let result = topic.updateMode(params.user, mode);\r\n if (errorHandler) {\r\n result = result.catch(err => errorHandler(err.message, 'err'));\r\n }\r\n return result;\r\n }\r\n\r\n replyToMessage(params, errorHandler) {\r\n params.pickReply(params.seq, params.content, params.userFrom, params.userName, errorHandler);\r\n }\r\n\r\n editMessage(params, errorHandler) {\r\n params.editMessage(params.replace || params.seq, params.content, errorHandler);\r\n }\r\n\r\n render() {\r\n const menu = [];\r\n let count = 0;\r\n this.props.items.map((item) => {\r\n if (typeof item == 'string') {\r\n item = this.MenuItems[item];\r\n }\r\n if (item && item.title) {\r\n menu.push(\r\n item.title == '-' ?\r\n
  • \r\n :\r\n
  • {item.title}
  • \r\n );\r\n }\r\n count++;\r\n });\r\n\r\n // Ensure that menu is inside the app-container.\r\n const hSize = 12 * REM_SIZE;\r\n const vSize = REM_SIZE * (0.7 + menu.length * 2.5);\r\n const left = (this.props.bounds.right - this.props.clickAt.x < hSize) ?\r\n (this.props.clickAt.x - this.props.bounds.left - hSize) :\r\n (this.props.clickAt.x - this.props.bounds.left);\r\n const top = (this.props.bounds.bottom - this.props.clickAt.y < vSize) ?\r\n (this.props.clickAt.y - this.props.bounds.top - vSize) :\r\n (this.props.clickAt.y - this.props.bounds.top);\r\n\r\n const position = {\r\n left: left + 'px',\r\n top: top + 'px'\r\n };\r\n\r\n return (\r\n
      \r\n {menu}\r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default injectIntl(ContextMenu);\r\n","import React from 'react';\r\n\r\nconst icon_mapping = {'muted': 'notifications_off', 'banned': 'block', 'staff': 'verified_user'};\r\n\r\n/* Contact's labels: [you], or icons [muted], [blocked] */\r\nexport default class ContactBadges extends React.PureComponent {\r\n render() {\r\n let badges = null;\r\n if (this.props.badges && this.props.badges.length > 0) {\r\n badges = [];\r\n this.props.badges.map((b) => {\r\n const color = (b.color ? ' ' + b.color : '');\r\n if (b.icon) {\r\n badges.push({icon_mapping[b.icon] || b.icon});\r\n } else {\r\n badges.push({b.name});\r\n }\r\n });\r\n return <>{badges};\r\n }\r\n return null;\r\n }\r\n};\r\n","// The counter of unread messages in the topic.\r\nimport React from 'react';\r\n\r\nexport default class UnreadBadge extends React.PureComponent {\r\n render() {\r\n return (this.props.count > 0 ?\r\n {this.props.count > 9 ? \"9+\" : this.props.count}\r\n : null);\r\n }\r\n};\r\n","// Chat message describing a video or voice call.\r\n\r\nimport React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\nimport { secondsToTime } from '../lib/strformat.js';\r\n\r\nexport default class CallMessage extends React.PureComponent {\r\n render() {\r\n const isCallDropped = ['busy', 'declined', 'disconnected', 'missed'].includes(this.props.callState);\r\n const successClass = 'material-icons medium ' + (isCallDropped ? 'red' : 'green');\r\n const callIcon = this.props.incoming ?\r\n (isCallDropped ? 'call_missed' : 'call_received') :\r\n (isCallDropped ? 'call_missed_outgoing' : 'call_made');\r\n let duration;\r\n if (isCallDropped) {\r\n switch (this.props.callState) {\r\n case 'busy':\r\n duration = ;\r\n break;\r\n case 'declined':\r\n duration = ;\r\n break;\r\n case 'missed':\r\n duration = this.props.incoming ?\r\n :\r\n ;\r\n break;\r\n default:\r\n duration = ;\r\n break;\r\n }\r\n } else {\r\n duration = {secondsToTime(this.props.duration / 1000)};\r\n }\r\n return
    \r\n
    call
    \r\n
    \r\n
    {this.props.incoming ?\r\n :\r\n \r\n }
    \r\n
    {callIcon} {duration}
    \r\n
    \r\n
    ;\r\n }\r\n}\r\n","// The counter of unread messages in the topic.\r\nimport React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\nimport { secondsToTime } from '../lib/strformat.js';\r\n\r\n// Props:\r\n// incoming: true | false.\r\n// success: true | false.\r\nexport default class CallStatus extends React.PureComponent {\r\n render() {\r\n const isCallDropped = ['busy', 'declined', 'disconnected', 'missed'].includes(this.props.callState);\r\n const icon2 = this.props.incoming ?\r\n (isCallDropped ? 'call_missed' : 'call_received') :\r\n (isCallDropped ? 'call_missed_outgoing' : 'call_made');\r\n let duration;\r\n if (isCallDropped) {\r\n switch (this.props.callState) {\r\n case 'busy':\r\n duration = ;\r\n break;\r\n case 'declined':\r\n duration = ;\r\n break;\r\n case 'missed':\r\n duration = this.props.incoming ?\r\n :\r\n ;\r\n break;\r\n default:\r\n duration = ;\r\n break;\r\n }\r\n } else if (['accepted', 'started'].includes(this.props.callState) && !this.props.duration) {\r\n duration = \r\n } else {\r\n duration = {secondsToTime(this.props.duration / 1000)};\r\n }\r\n return (\r\n <>\r\n
    \r\n call{icon2}\r\n
    {duration}\r\n \r\n );\r\n }\r\n};\r\n","// Element which shows static video preview:\r\n// an image with duration and a play button in the middle.\r\n\r\nimport React from 'react';\r\n\r\nimport { secondsToTime } from '../lib/strformat.js'\r\n\r\nexport default class InlineVideo extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.videoRef = React.createRef();\r\n\r\n this.handleClick = this.handleClick.bind(this);\r\n }\r\n\r\n handleClick(e) {\r\n if (this.props.onClick) {\r\n // the click target has to be the image element.\r\n this.props.onClick(e);\r\n }\r\n }\r\n\r\n render() {\r\n const duration = secondsToTime(this.props['data-duration'] / 1000);\r\n const className = 'inline-video' + (this.props.onClick ? ' image-clickable' : '');\r\n return (\r\n
    \r\n {React.createElement('img', this.props)}\r\n
    \r\n {this.props.onClick ?\r\n play_arrow\r\n :\r\n }\r\n
    \r\n {duration ?
    {duration}
    : null}\r\n
    \r\n );\r\n }\r\n};\r\n","// Image with a placeholder which is replaced when the promise is resolved.\r\nimport React from 'react';\r\n\r\nexport default class LazyImage extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n src: this.props.isvideo ? 'img/blankvid.png' : 'img/blankimg.png',\r\n style: Object.assign({padding: '4px'}, this.props.style),\r\n className: this.props.className,\r\n alt: this.props.alt,\r\n onClick: this.props.onClick,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n // whenDone is a wrapper around an actual promise to be able to cancel it.\r\n this.props.whenDone\r\n .promise\r\n .then(data => this.setState({src: data.src, style: {...this.state.style, padding: 0}}))\r\n .catch(_ => this.setState({src: this.props.isvideo ? 'img/broken_video.png' : 'img/broken_image.png'}));\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.whenDone.cancel();\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.whenDone != this.props.whenDone) {\r\n this.setState({src: this.props.isvideo ? 'img/blankvid.png' : 'img/blankimg.png', style: {...this.state.style, padding: '4px'}});\r\n this.props.whenDone\r\n .promise\r\n .then(data => this.setState({src: data.src, style: {...this.state.style, padding: 0}}))\r\n .catch(_ => this.setState({src: this.props.isvideo ? 'img/broken_video.png' : 'img/broken_image.png'}));\r\n }\r\n }\r\n\r\n render() {\r\n return React.createElement('img', this.state);\r\n }\r\n};\r\n","// File uload/download progress indicator with a cancel inside.\r\nimport React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\nexport default class FileProgress extends React.PureComponent {\r\n render() {\r\n return (\r\n
    \r\n
    \r\n {this.props.progress < 0.999 ?\r\n {e.preventDefault(); this.props.onCancel();}}>\r\n close \r\n \r\n :\r\n \r\n }\r\n
    \r\n );\r\n }\r\n}\r\n","// Image view with progress bar and a cancel button.\r\nimport React from 'react';\r\n\r\nimport FileProgress from './file-progress.jsx';\r\n\r\nexport default class UploadingImage extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return (\r\n
    \r\n {React.createElement('img', this.props)}\r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n }\r\n};\r\n","import React from 'react';\r\nimport { defineMessages } from 'react-intl';\r\n\r\nimport { Drafty } from 'tinode-sdk';\r\n\r\nimport AudioPlayer from '../widgets/audio-player.jsx'\r\nimport CallMessage from '../widgets/call-message.jsx'\r\nimport CallStatus from '../widgets/call-status.jsx';\r\nimport InlineVideo from '../widgets/inline-video.jsx';\r\nimport LazyImage from '../widgets/lazy-image.jsx'\r\nimport UploadingImage from '../widgets/uploading-image.jsx'\r\n\r\nimport { BROKEN_IMAGE_SIZE, CLICKABLE_URL_SCHEMES, IMAGE_THUMBNAIL_DIM, NO_DIMENSIONS_VIDEO, REM_SIZE,\r\n VIDEO_THUMBNAIL_WIDTH } from '../config.js';\r\nimport { base64ToBlob, blobToBase64, fitImageSize, imageScaled } from './blob-helpers.js';\r\nimport { idToColorClass, secondsToTime, shortenFileName } from './strformat.js';\r\nimport { cancelablePromise, sanitizeUrl, sanitizeUrlForMime } from './utils.js';\r\n\r\nconst messages = defineMessages({\r\n drafty_form: {\r\n id: 'drafty_form',\r\n defaultMessage: 'Form: ',\r\n description: 'Comment for form in Drafty'\r\n },\r\n drafty_attachment: {\r\n id: 'drafty_attachment',\r\n defaultMessage: 'Attachment',\r\n description: 'Comment for attachment in Drafty'\r\n },\r\n drafty_image: {\r\n id: 'drafty_image',\r\n defaultMessage: 'Picture',\r\n description: 'Comment for embedded images in Drafty'\r\n },\r\n drafty_video: {\r\n id: 'drafty_video',\r\n defaultMessage: 'Video recording',\r\n description: 'Comment for videos embedded in Drafty'\r\n },\r\n drafty_unknown: {\r\n id: 'drafty_unknown',\r\n defaultMessage: 'Unsupported',\r\n description: 'Unsupported entity in drafty'\r\n }\r\n});\r\n\r\n// The main Drafty formatter: converts Drafty elements into React classes. 'this' is set by the caller.\r\n// 'this' must contain:\r\n// viewportWidth:\r\n// authorizeURL:\r\n// onImagePreview:\r\n// onVideoPreview:\r\n// onFormButtonClick:\r\n// onQuoteClick:\r\nexport function fullFormatter(style, data, values, key, stack) {\r\n if (stack.includes('QQ')) {\r\n return quoteFormatter.call(this, style, data, values, key);\r\n }\r\n\r\n if (!style) {\r\n // Unformatted.\r\n return values;\r\n }\r\n\r\n let el = Drafty.tagName(style);\r\n let attr = Drafty.attrValue(style, data) || {};\r\n attr.key = key;\r\n switch (style) {\r\n case 'AU':\r\n // Show audio player.\r\n if (attr.src) {\r\n attr.src = this.authorizeURL(sanitizeUrlForMime(attr.src, 'audio'));\r\n attr.duration = data.duration > 0 ? (data.duration | 0) : undefined;\r\n attr.preview = data.preview;\r\n attr.loading = 'lazy';\r\n }\r\n el = AudioPlayer;\r\n // Audio element cannot have content.\r\n values = null;\r\n break;\r\n case 'BR':\r\n values = null;\r\n break;\r\n case 'EX':\r\n // Ignore.\r\n break;\r\n case 'HL':\r\n // Highlighted text. Assign class name.\r\n attr.className = 'highlight';\r\n break;\r\n case 'HD':\r\n el = null;\r\n values = null;\r\n break;\r\n case 'IM':\r\n // Additional processing for images\r\n el = handleImageData.call(this, el, data, attr);\r\n // Image element cannot have content.\r\n values = null;\r\n break;\r\n case 'BN':\r\n // Button\r\n attr.onClick = this.onFormButtonClick;\r\n let inner = React.Children.map(values, (child) => {\r\n return typeof child == 'string' ? child : undefined;\r\n });\r\n if (!inner || inner.length == 0) {\r\n inner = [attr.name]\r\n }\r\n // Get text which will be sent back when the button is clicked.\r\n attr['data-title'] = inner.join('');\r\n break;\r\n case 'LN':\r\n if (attr) {\r\n // Ensure only safe URL schemes are clickable.\r\n attr.href = typeof attr.href == 'string' ? sanitizeUrl(attr.href, CLICKABLE_URL_SCHEMES) : '';\r\n }\r\n break;\r\n case 'MN':\r\n // Mention\r\n attr.className = 'mention'\r\n if (data) {\r\n attr.className += ' ' + idToColorClass(data.val, false, true);\r\n }\r\n break;\r\n case 'FM':\r\n // Form\r\n attr.className = 'bot-form';\r\n break;\r\n case 'RW':\r\n // Form element formatting is dependent on element content.\r\n break;\r\n case 'QQ':\r\n // Quote/citation.\r\n attr.className = 'reply-quote'\r\n attr.onClick = this.onQuoteClick;\r\n break;\r\n case 'VC':\r\n el = CallMessage;\r\n // Video call messages do not have content.\r\n values = null;\r\n if (data) {\r\n attr.callState = data.state;\r\n attr.incoming = data.incoming;\r\n attr.duration = data.duration;\r\n }\r\n break;\r\n case 'VD':\r\n // Additional processing for videos.\r\n el = handleVideoData.call(this, el, data, attr);\r\n // Video element cannot have content.\r\n values = null;\r\n break;\r\n default:\r\n if (!el) {\r\n // Unknown element.\r\n el = React.Fragment;\r\n attr = {key: key};\r\n // Generate comment for unknown element.\r\n let body = values;\r\n if (!Array.isArray(values) || !values.join('').trim()) {\r\n body = [{this.formatMessage(messages.drafty_unknown)}];\r\n }\r\n values = [extension, ' '].concat(body);\r\n }\r\n break;\r\n }\r\n if (!el) {\r\n return values;\r\n }\r\n return React.createElement(el, attr, values);\r\n}\r\n\r\n// Additional processing of image data.\r\nfunction handleImageData(el, data, attr) {\r\n if (!data) {\r\n attr.src = 'img/broken_image.png';\r\n attr.style = {\r\n width: IMAGE_THUMBNAIL_DIM + 'px',\r\n height: IMAGE_THUMBNAIL_DIM + 'px',\r\n };\r\n return el;\r\n }\r\n\r\n attr.className = 'inline-image';\r\n const dim = fitImageSize(data.width, data.height,\r\n this.viewportWidth > 0 ? Math.min(this.viewportWidth - REM_SIZE * 6.5, REM_SIZE * 34.5) :\r\n REM_SIZE * 34.5, REM_SIZE * 24, false) ||\r\n {dstWidth: BROKEN_IMAGE_SIZE, dstHeight: BROKEN_IMAGE_SIZE};\r\n attr.style = {\r\n width: dim.dstWidth + 'px',\r\n height: dim.dstHeight + 'px',\r\n // Looks like a Chrome bug: broken image does not respect 'width' and 'height'.\r\n minWidth: dim.dstWidth + 'px',\r\n minHeight: dim.dstHeight + 'px'\r\n };\r\n if (!Drafty.isProcessing(data)) {\r\n attr.src = this.authorizeURL(sanitizeUrlForMime(attr.src, 'image'));\r\n attr.alt = data.name;\r\n if (attr.src) {\r\n if (Math.max(data.width || 0, data.height || 0) > IMAGE_THUMBNAIL_DIM) {\r\n // Allow previews for large enough images.\r\n attr.onClick = this.onImagePreview;\r\n attr.className += ' image-clickable';\r\n }\r\n attr.loading = 'lazy';\r\n } else {\r\n attr.src = null;\r\n }\r\n } else {\r\n // Use custom element instead of .\r\n el = UploadingImage;\r\n }\r\n\r\n return el;\r\n}\r\n\r\n// Additional processing of image data.\r\nfunction handleVideoData(el, data, attr) {\r\n if (!data) {\r\n attr.src = 'img/broken_video.png';\r\n attr.style = {\r\n width: IMAGE_THUMBNAIL_DIM + 'px',\r\n height: IMAGE_THUMBNAIL_DIM + 'px',\r\n };\r\n return el;\r\n }\r\n attr.className = 'inline-image';\r\n const dim = fitImageSize(data.width, data.height,\r\n this.viewportWidth > 0 ? Math.min(this.viewportWidth - REM_SIZE * 6.5, REM_SIZE * 34.5) :\r\n REM_SIZE * 34.5, REM_SIZE * 24, false) ||\r\n {dstWidth: NO_DIMENSIONS_VIDEO, dstHeight: NO_DIMENSIONS_VIDEO};\r\n attr.style = {\r\n width: dim.dstWidth + 'px',\r\n height: dim.dstHeight + 'px',\r\n // Looks like a Chrome bug: broken image does not respect 'width' and 'height'.\r\n minWidth: dim.dstWidth + 'px',\r\n minHeight: dim.dstHeight + 'px'\r\n };\r\n if (!Drafty.isProcessing(data)) {\r\n attr.src = this.authorizeURL(sanitizeUrlForMime(attr.src, 'image'));\r\n attr.alt = data.name;\r\n if (data.ref || data.val) {\r\n attr.onClick = this.onVideoPreview;\r\n attr.loading = 'lazy';\r\n }\r\n el = InlineVideo;\r\n } else {\r\n // Use custom element instead of .\r\n el = UploadingImage;\r\n }\r\n\r\n return el;\r\n}\r\n\r\n// Converts Drafty object into a one-line preview. 'this' is set by the caller.\r\n// 'this' must contain:\r\n// formatMessage: this.props.intl.formatMessage\r\n// messages: formatjs messages defined with defineMessages.\r\nexport function previewFormatter(style, data, values, key) {\r\n if (!style) {\r\n // Unformatted.\r\n return values;\r\n }\r\n\r\n let el = Drafty.tagName(style);\r\n const attr = { key: key };\r\n switch (style) {\r\n case 'AU':\r\n // Voicemail as '[mic] 0:00'.\r\n el = React.Fragment;\r\n values = [mic, ' ', secondsToTime(data.duration/1000)];\r\n break;\r\n case 'BR':\r\n // Replace new line with a space.\r\n el = React.Fragment;\r\n values = [' '];\r\n break;\r\n case 'HL':\r\n // Make highlight less prominent in preview.\r\n attr.className = 'highlight preview';\r\n break;\r\n case 'LN':\r\n case 'MN':\r\n // Disable links in previews.\r\n el = 'span';\r\n break;\r\n case 'IM':\r\n // Replace image with '[icon] Image'.\r\n el = React.Fragment;\r\n values = [photo, ' ', this.formatMessage(messages.drafty_image)];\r\n break;\r\n case 'BN':\r\n el = 'span';\r\n attr.className = 'flat-button faux';\r\n break;\r\n case 'FM':\r\n el = React.Fragment;\r\n values = [dashboard,\r\n this.formatMessage(messages.drafty_form)].concat(' ', values || []);\r\n break;\r\n case 'RW':\r\n el = React.Fragment;\r\n break;\r\n case 'EX':\r\n if (data) {\r\n if (data.mime == 'application/json') {\r\n // Ignore JSON attachments: they are form response payloads.\r\n return null;\r\n }\r\n // Clear payload.\r\n delete data.val;\r\n delete data.ref;\r\n }\r\n el = React.Fragment;\r\n values = [attachment, ' ', this.formatMessage(messages.drafty_attachment)];\r\n break;\r\n case 'VC':\r\n el = CallStatus;\r\n if (data) {\r\n attr.callState = data.state;\r\n attr.incoming = data.incoming;\r\n attr.duration = data.duration;\r\n }\r\n values = null;\r\n break;\r\n case 'QQ':\r\n case 'HD':\r\n el = null;\r\n values = null;\r\n break;\r\n case 'VD':\r\n // Replace image with '[icon] Video'.\r\n el = React.Fragment;\r\n values = [play_circle_outline, ' ', this.formatMessage(messages.drafty_video)];\r\n break;\r\n default:\r\n if (!el) {\r\n // Unknown element.\r\n el = React.Fragment;\r\n values = [extension, ' ', this.formatMessage(messages.drafty_unknown)];\r\n }\r\n break;\r\n }\r\n if (!el) {\r\n return values;\r\n }\r\n return React.createElement(el, attr, values);\r\n};\r\n\r\n// Converts Drafty object into a quoted reply; 'this' is set by the caller.\r\nfunction inlineImageAttr(attr, data) {\r\n attr.style = {\r\n width: IMAGE_THUMBNAIL_DIM + 'px',\r\n height: IMAGE_THUMBNAIL_DIM + 'px',\r\n maxWidth: IMAGE_THUMBNAIL_DIM + 'px',\r\n maxHeight: IMAGE_THUMBNAIL_DIM + 'px',\r\n }\r\n attr.className = 'inline-image';\r\n attr.alt = this.formatMessage(messages.drafty_image);\r\n if (!data) {\r\n attr.src = 'img/broken_image.png';\r\n } else {\r\n attr.src = attr.src || 'img/broken_image.png';\r\n }\r\n attr.title = attr.alt;\r\n return attr;\r\n}\r\n\r\n// Converts Drafty object into a quoted reply; 'this' is set by the caller.\r\nfunction inlineVideoAttr(attr, data) {\r\n const dim = fitImageSize(data.width, data.height, VIDEO_THUMBNAIL_WIDTH, IMAGE_THUMBNAIL_DIM);\r\n attr.style = {\r\n width: dim.width + 'px',\r\n height: dim.height + 'px',\r\n maxWidth: VIDEO_THUMBNAIL_WIDTH + 'px',\r\n maxHeight: IMAGE_THUMBNAIL_DIM + 'px',\r\n }\r\n attr.className = 'inline-image';\r\n attr.alt = this.formatMessage(messages.drafty_video);\r\n attr.title = attr.alt;\r\n if (!data) {\r\n attr.src = 'img/broken_video.png';\r\n } else {\r\n attr.src = attr.src || 'img/broken_video.png';\r\n }\r\n return attr;\r\n}\r\n\r\n// Displays a portion of Drafty within 'QQ' quotes. 'this' is set by the caller.\r\n// 'this' must contain:\r\n// formatMessage: this.props.intl.formatMessage\r\n// messages: formatjs messages defined with defineMessages.\r\n// authorizeURL: this.props.tinode.authorizeURL\r\n// onQuoteClick: this.handleQuoteClick (optional)\r\nfunction quoteFormatter(style, data, values, key) {\r\n if (['BR', 'EX', 'IM', 'MN', 'VD'].includes(style)) {\r\n let el = Drafty.tagName(style);\r\n let attr = Drafty.attrValue(style, data) || {};\r\n attr.key = key;\r\n switch(style) {\r\n case 'BR':\r\n values = null;\r\n break;\r\n case 'IM':\r\n attr = inlineImageAttr.call(this, attr, data);\r\n values = [React.createElement('img', attr, null), ' ', attr.alt];\r\n el = React.Fragment;\r\n // Fragment attributes.\r\n attr = {key: key};\r\n break;\r\n case 'VD':\r\n attr = inlineVideoAttr.call(this, attr, data);\r\n values = [React.createElement('img', attr, null), ' ', attr.alt];\r\n el = React.Fragment;\r\n // Fragment attributes.\r\n attr = {key: key};\r\n break;\r\n case 'MN':\r\n el = 'span';\r\n attr.className = 'mention'\r\n if (data) {\r\n attr.className += ' ' + idToColorClass(data.val, false, true);\r\n }\r\n break;\r\n case 'EX':\r\n let fname;\r\n if (data) {\r\n if (data.mime == 'application/json') {\r\n // Ignore JSON attachments: they are form response payloads.\r\n return null;\r\n }\r\n fname = data.name;\r\n // Clear payload.\r\n delete data.val;\r\n delete data.ref;\r\n }\r\n el = React.Fragment;\r\n values = [attachment,\r\n shortenFileName(fname, 16) || this.formatMessage(messages.drafty_attachment)];\r\n break;\r\n }\r\n return React.createElement(el, attr, values);\r\n }\r\n return previewFormatter.call(this, style, data, values, key);\r\n}\r\n\r\n// Create image thumbnail suitable for inclusion in a quote.\r\nfunction quoteImageOrVideo(data, isVideo) {\r\n let promise;\r\n let bits, ref, mime;\r\n if (isVideo) {\r\n bits = data.preview;\r\n mime = data.premime || 'image/jpeg';\r\n ref = data.preref;\r\n } else {\r\n bits = data.val;\r\n mime = data.mime;\r\n ref = data.ref;\r\n }\r\n // Get the blob from the image data.\r\n if (bits) {\r\n const blob = base64ToBlob(bits, mime);\r\n if (!blob) {\r\n throw new Error(\"Invalid image\");\r\n }\r\n promise = Promise.resolve(blob);\r\n } else if (ref) {\r\n promise = fetch(this.authorizeURL(sanitizeUrlForMime(ref, 'image')))\r\n .then(evt => {\r\n if (evt.ok) {\r\n return evt.blob();\r\n } else {\r\n throw new Error(`Image fetch unsuccessful: ${evt.status} ${evt.statusText}`);\r\n }\r\n });\r\n } else {\r\n throw new Error(\"Missing image data\");\r\n }\r\n\r\n // Scale the blob.\r\n return promise\r\n .then(blob => {\r\n // If it's an image, cut the square from the center of the image and shrink it.\r\n // If it's a video, allow it to be rectantular.\r\n return imageScaled(blob, isVideo ? VIDEO_THUMBNAIL_WIDTH : IMAGE_THUMBNAIL_DIM, IMAGE_THUMBNAIL_DIM, -1, !isVideo)\r\n }).then(scaled => {\r\n if (isVideo) {\r\n data.premime = scaled.mime;\r\n } else {\r\n data.mime = scaled.mime;\r\n }\r\n data.size = scaled.blob.size;\r\n data.width = scaled.width;\r\n data.height = scaled.height;\r\n delete data.ref;\r\n delete data.preref;\r\n // Keeping the original file name, if provided: ex.data.name;\r\n\r\n data.src = URL.createObjectURL(scaled.blob);\r\n return blobToBase64(scaled.blob);\r\n }).then(b64 => {\r\n if (isVideo) {\r\n data.preview = b64.bits;\r\n } else {\r\n data.val = b64.bits;\r\n }\r\n return data;\r\n }).catch(err => {\r\n delete data.val;\r\n delete data.preview;\r\n delete data.src;\r\n data.width = IMAGE_THUMBNAIL_DIM;\r\n data.height = IMAGE_THUMBNAIL_DIM;\r\n // Rethrow.\r\n throw err;\r\n });\r\n}\r\n\r\n// Create a preview of a reply.\r\nexport function replyFormatter(style, data, values, key, stack) {\r\n if (style == 'IM' || style == 'VD') {\r\n const isImage = style == 'IM';\r\n const attr = isImage ? inlineImageAttr.call(this, {key: key}, data) :\r\n inlineVideoAttr.call(this, {key: key}, data);\r\n\r\n let loadedPromise;\r\n try {\r\n loadedPromise = cancelablePromise(quoteImageOrVideo.call(this, data, style == 'VD'));\r\n } catch (error) {\r\n console.warn(\"Failed to quote image:\", error.message);\r\n loadedPromise = cancelablePromise(error);\r\n }\r\n attr.whenDone = loadedPromise;\r\n values = [React.createElement(LazyImage, attr, null), ' ', attr.alt];\r\n return React.createElement(React.Fragment, {key: key}, values);\r\n } else if (style == 'QQ') {\r\n if (stack.includes('QQ')) {\r\n // Quote inside quote when forwarding a message.\r\n return React.createElement('span', {key: key},\r\n [format_quote, ' ']);\r\n }\r\n\r\n const attr = Drafty.attrValue('QQ', data) || {};\r\n attr.key = key;\r\n attr.className = 'reply-quote'\r\n return React.createElement(Drafty.tagName('QQ'), attr, values);\r\n }\r\n return quoteFormatter.call(this, style, data, values, key);\r\n}\r\n","// A single topic or user.\r\nimport React from 'react';\r\nimport { FormattedMessage, injectIntl } from 'react-intl';\r\n\r\nimport ContactBadges from './contact-badges.jsx';\r\nimport LetterTile from './letter-tile.jsx';\r\nimport UnreadBadge from './unread-badge.jsx';\r\n\r\nimport { Drafty } from 'tinode-sdk';\r\n\r\nimport { previewFormatter } from '../lib/formatters.js';\r\nimport { deliveryMarker } from '../lib/utils.js';\r\n\r\nclass Contact extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.handleClick = this.handleClick.bind(this);\r\n this.handleContextClick = this.handleContextClick.bind(this);\r\n }\r\n\r\n handleClick(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (this.props.onSelected) {\r\n // Index this.props.index is used by GroupManager.\r\n this.props.onSelected(this.props.item, this.props.index);\r\n }\r\n }\r\n\r\n handleContextClick(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.props.showContextMenu({ topicName: this.props.item, y: e.pageY, x: e.pageX });\r\n }\r\n\r\n render() {\r\n let title = this.props.title;\r\n if (!title) {\r\n title = ;\r\n } else if (title.length > 30) {\r\n // FIXME: this is probably wrong for RTL languages.\r\n title = title.substring(0, 28) + '…';\r\n }\r\n const online = this.props.now ? 'online' : 'offline';\r\n const avatar = this.props.avatar ? this.props.avatar : true;\r\n const badges = this.props.badges ? this.props.badges.slice() : [];\r\n const icon_badges = [];\r\n if (this.props.isVerified) {\r\n icon_badges.push({icon: 'verified', color: 'verified-color'});\r\n }\r\n if (this.props.isStaff) {\r\n icon_badges.push({icon: 'staff', color: 'staff-color'});\r\n }\r\n if (this.props.isDangerous) {\r\n icon_badges.push({icon: 'dangerous', color: 'danger-color'});\r\n }\r\n if (this.props.acs) {\r\n if (this.props.showMode) {\r\n badges.push({name: this.props.acs.getMode(), key: 'mode'});\r\n }\r\n if (this.props.acs.isMuted()) {\r\n icon_badges.push({icon: 'muted'});\r\n }\r\n if (!this.props.acs.isJoiner()) {\r\n icon_badges.push({icon: 'banned'});\r\n }\r\n }\r\n\r\n // The this.props.preview contains alreay shortened Drafty or string.\r\n let preview;\r\n if (typeof this.props.preview == 'string') {\r\n preview = this.props.preview;\r\n } else if (Drafty.isValid(this.props.preview)) {\r\n preview = React.createElement(React.Fragment, null, Drafty.format(this.props.preview, previewFormatter,\r\n {formatMessage: this.props.intl.formatMessage, previewIsResponse: this.props.previewIsResponse}));\r\n } else if (this.props.preview) {\r\n preview =\r\n <>warning_amber \r\n \r\n ;\r\n }\r\n\r\n const icon = deliveryMarker(this.props.received);\r\n const marker = icon ? {icon.name} : null;\r\n const titleClass = 'contact-title' + (this.props.deleted ? ' deleted' : '');\r\n\r\n return (\r\n
  • \r\n
    \r\n \r\n {this.props.deleted ? cancel :\r\n this.props.showOnline ? :\r\n (this.props.showCheckmark && this.props.selected) ?\r\n check_circle\r\n : null}\r\n
    \r\n
    \r\n
    {title}\r\n {this.props.isGroup ? group : null}\r\n {this.props.isChannel ? \"channel\" : null}\r\n \r\n {!this.props.deleted ? : null}\r\n
    \r\n {this.props.showMode ?\r\n :\r\n this.props.small ? null :
    {marker}{preview || this.props.comment || '\\u00A0'}
    }\r\n
    \r\n {this.props.showContextMenu ?\r\n \r\n \r\n expand_more\r\n \r\n : null}\r\n
  • \r\n );\r\n }\r\n};\r\n\r\nexport default injectIntl(Contact);\r\n","// A panel included into a list of contacts with an action text.\r\nimport React from 'react';\r\nimport { injectIntl } from 'react-intl';\r\n\r\nclass ContactAction extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.handleClick = this.handleClick.bind(this);\r\n }\r\n\r\n handleClick(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.props.onAction(this.props.action);\r\n }\r\n\r\n render() {\r\n const {formatMessage} = this.props.intl;\r\n return (\r\n
  • \r\n
    {formatMessage(this.props.title, this.props.values)}
    \r\n
  • \r\n );\r\n }\r\n};\r\n\r\nexport default injectIntl(ContactAction);\r\n","// ContactList: component for showing a list of contacts,\r\n// such as a list of group members in a group chat.\r\nimport React from 'react';\r\nimport { defineMessages, injectIntl } from 'react-intl';\r\n\r\nimport { Drafty, Tinode } from 'tinode-sdk';\r\n\r\nimport Contact from './contact.jsx';\r\nimport ContactAction from './contact-action.jsx';\r\n\r\nimport { makeImageUrl } from '../lib/blob-helpers.js';\r\n\r\nimport { MESSAGE_PREVIEW_LENGTH } from '../config.js';\r\n\r\nconst messages = defineMessages({\r\n badge_you: {\r\n id: 'badge_you',\r\n defaultMessage: 'you',\r\n description: 'Badge for indicating the current user'\r\n },\r\n badge_owner: {\r\n id: 'badge_owner',\r\n defaultMessage: 'owner',\r\n description: 'Badge for indicating the owner'\r\n }\r\n});\r\n\r\nclass ContactList extends React.Component {\r\n render() {\r\n const { formatMessage } = this.props.intl;\r\n const showCheckmark = Array.isArray(this.props.topicSelected);\r\n const contactNodes = [];\r\n let contactsCount = 0;\r\n if (this.props.contacts && this.props.contacts.length > 0) {\r\n this.props.contacts.map((c) => {\r\n if (c.action) {\r\n // Action item\r\n contactNodes.push(\r\n );\r\n } else {\r\n // Normal contact\r\n const key = this.props.showMode ? c.user : (c.topic || c.user);\r\n // If filter function is provided, filter out the items\r\n // which don't satisfy the condition.\r\n if (this.props.filterFunc && this.props.filter) {\r\n const filterOn = [key];\r\n if (c.private && c.private.comment) {\r\n filterOn.push(('' + c.private.comment).toLowerCase());\r\n }\r\n if (c.public && c.public.fn) {\r\n filterOn.push(('' + c.public.fn).toLowerCase());\r\n }\r\n if (!this.props.filterFunc(this.props.filter, filterOn)) {\r\n return;\r\n }\r\n }\r\n\r\n const isChannel = Tinode.isChannelTopicName(key);\r\n const isGroup = !isChannel && Tinode.isGroupTopicName(key);\r\n const selected = showCheckmark ?\r\n (this.props.topicSelected.indexOf(key) > -1) :\r\n (this.props.topicSelected === key);\r\n const badges = [];\r\n if (this.props.showMode) {\r\n if (key == this.props.myUserId) {\r\n badges.push({name: formatMessage(messages.badge_you), color: 'green'});\r\n }\r\n if (c.acs && c.acs.isOwner()) {\r\n badges.push({name: formatMessage(messages.badge_owner), color: 'blue'});\r\n }\r\n }\r\n\r\n const comment = Array.isArray(c.private) ?\r\n c.private.join(',') : (c.private ? c.private.comment : null);\r\n let preview;\r\n let forwarded;\r\n let previewIsResponse;\r\n let deliveryStatus;\r\n if (!this.props.showMode && c.latestMessage) {\r\n const msg = c.latestMessage();\r\n if (msg) {\r\n forwarded = msg.head ? msg.head.forwarded : null;\r\n deliveryStatus = msg._status || c.msgStatus(msg, true);\r\n previewIsResponse = msg.from != this.props.myUserId;\r\n if (msg.content) {\r\n preview = typeof msg.content == 'string' ?\r\n msg.content.substr(0, MESSAGE_PREVIEW_LENGTH) :\r\n Drafty.preview(msg.content, MESSAGE_PREVIEW_LENGTH);\r\n }\r\n }\r\n }\r\n\r\n contactNodes.push(\r\n \r\n );\r\n contactsCount ++;\r\n }\r\n }, this);\r\n }\r\n\r\n return (\r\n
    \r\n {contactsCount == 0 ?\r\n
    \r\n :\r\n null\r\n }\r\n {contactNodes.length > 0 ?\r\n
      \r\n {contactNodes}\r\n
    \r\n :\r\n null\r\n }\r\n
    \r\n );\r\n }\r\n};\r\n\r\nexport default injectIntl(ContactList);\r\n","import React from 'react';\r\n\r\nimport { Tinode } from 'tinode-sdk';\r\n\r\nexport default class SearchContacts extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n edited: false,\r\n search: ''\r\n };\r\n\r\n this.handleSearchChange = this.handleSearchChange.bind(this);\r\n this.handleSearch = this.handleSearch.bind(this);\r\n this.handleClear = this.handleClear.bind(this);\r\n this.handleKeyDown = this.handleKeyDown.bind(this);\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.state.edited) {\r\n this.setState({search: '', edited: false});\r\n this.props.onSearchContacts(Tinode.DEL_CHAR);\r\n }\r\n }\r\n\r\n handleSearchChange(e) {\r\n this.setState({search: e.target.value});\r\n }\r\n\r\n handleSearch(e) {\r\n e.preventDefault();\r\n const query = this.state.search.trim();\r\n this.setState({edited: (query.length > 0)});\r\n this.props.onSearchContacts(query.length > 0 ? query : Tinode.DEL_CHAR);\r\n }\r\n\r\n handleClear(e) {\r\n e.preventDefault();\r\n if (this.state.edited) {\r\n this.props.onSearchContacts(Tinode.DEL_CHAR);\r\n }\r\n this.setState({search: '', edited: false});\r\n }\r\n\r\n handleKeyDown(e) {\r\n if (e.key === 'Enter') {\r\n this.handleSearch(e);\r\n } else if (e.key === 'Escape') {\r\n this.handleClear();\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
    \r\n
    \r\n search\r\n \r\n {this.state.search ?\r\n highlight_off\r\n :\r\n  }\r\n
    \r\n
    \r\n );\r\n }\r\n};\r\n","// Forward Menu: message forwarding popup/dropdown menu.\r\nimport React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\nimport { Tinode } from 'tinode-sdk';\r\n\r\nimport ContactList from './contact-list.jsx';\r\nimport SearchContacts from './search-contacts.jsx';\r\n\r\nexport default class ForwardDialog extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n query: null\r\n };\r\n\r\n this.handleEscapeKey = this.handleEscapeKey.bind(this);\r\n this.handleClose = this.handleClose.bind(this);\r\n\r\n this.handleSearchContacts = this.handleSearchContacts.bind(this);\r\n this.handleContactSelected = this.handleContactSelected.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n this.props.onInitFind();\r\n }\r\n\r\n handleEscapeKey(e) {\r\n if (e.keyCode === 27) {\r\n // Not forwarding the message.\r\n this.props.hide(false);\r\n }\r\n }\r\n\r\n handleClose(e) {\r\n e.preventDefault();\r\n this.props.hide(false);\r\n }\r\n\r\n handleSearchContacts(query) {\r\n this.setState({ query: Tinode.isNullValue(query) ? null : query });\r\n this.props.onSearchContacts(query);\r\n }\r\n\r\n handleContactSelected(uid) {\r\n this.props.onTopicSelected(uid);\r\n this.props.hide(true);\r\n }\r\n\r\n render() {\r\n let contacts = this.state.query != null ? this.props.searchResults : this.props.contacts;\r\n // Filter out contacts without a 'W' or 'J' permissions as well as the current topic.\r\n contacts = contacts.filter((c) => {\r\n return (c.name != this.props.topicSelected) && c.acs.isJoiner() && c.acs.isWriter();\r\n });\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n {\r\n (search_placeholder) => \r\n }\r\n {\r\n (not_found_placeholder) => \r\n }\r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n","// Video call states.\r\nexport const CALL_STATE_NONE = 0;\r\nexport const CALL_STATE_OUTGOING_INITATED = 1;\r\nexport const CALL_STATE_INCOMING_RECEIVED = 2;\r\nexport const CALL_STATE_IN_PROGRESS = 3;\r\n\r\n// Video call message headers representing call state.\r\nexport const CALL_HEAD_STARTED = 'started';\r\n","// IncomingCall: displays Accept & Reject buttons for incoming calls.\r\nimport React from 'react';\r\n\r\nimport BadgeList from './badge-list.jsx';\r\nimport LetterTile from './letter-tile.jsx';\r\n\r\nimport { MAX_TITLE_LENGTH, MAX_PEER_TITLE_LENGTH } from '../config.js';\r\nimport { CALL_STATE_INCOMING_RECEIVED } from '../constants.js';\r\n\r\nimport { makeImageUrl } from '../lib/blob-helpers.js';\r\nimport { clipStr } from '../lib/utils.js'\r\n\r\nconst RING_SOUND = new Audio('audio/call-in.m4a');\r\n\r\nexport default class CallIncoming extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n topic: null,\r\n fullName: undefined,\r\n avatar: null,\r\n trustedBadges: [],\r\n previousMetaDesc: undefined,\r\n };\r\n\r\n this.resetDesc = this.resetDesc.bind(this);\r\n this.onMetaDesc = this.onMetaDesc.bind(this);\r\n this.handleRejectCall = this.handleRejectCall.bind(this);\r\n this.handleAcceptCall = this.handleAcceptCall.bind(this);\r\n this.ringTimer = null;\r\n }\r\n\r\n componentDidMount() {\r\n const topic = this.props.tinode.getTopic(this.props.topic);\r\n if (!topic) {\r\n return;\r\n }\r\n\r\n this.resetDesc(topic);\r\n if (this.props.callState == CALL_STATE_INCOMING_RECEIVED) {\r\n // play() throws if the user did not click the app first: https://goo.gl/xX8pDD.\r\n RING_SOUND.play().catch(_ => {});\r\n this.ringTimer = setInterval(_ => {RING_SOUND.play().catch(_ => {})}, 2000);\r\n this.props.onRinging(this.props.topic, this.props.seq);\r\n }\r\n }\r\n\r\n // No need to separately handle component mount.\r\n componentDidUpdate(props) {\r\n const topic = this.props.tinode.getTopic(props.topic);\r\n if (!topic) {\r\n return;\r\n }\r\n\r\n if (this.onMetaDesc != topic.onMetaDesc) {\r\n this.previousMetaDesc = topic.onMetaDesc;\r\n topic.onMetaDesc = this.onMetaDesc;\r\n }\r\n\r\n if (this.state.topic != props.topic) {\r\n this.setState({topic: props.topic});\r\n this.resetDesc(topic, props);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.ringTimer != null) {\r\n clearInterval(this.ringTimer);\r\n RING_SOUND.pause();\r\n }\r\n const topic = this.props.tinode.getTopic(this.props.topic);\r\n if (!topic) {\r\n return;\r\n }\r\n this.setState({topic: null});\r\n topic.onMetaDesc = this.previousMetaDesc;\r\n }\r\n\r\n resetDesc(topic) {\r\n const badges = [];\r\n if (topic.trusted) {\r\n for (const [key, val] of Object.entries(topic.trusted)) {\r\n if (val) {\r\n badges.push(key);\r\n }\r\n }\r\n }\r\n\r\n this.setState({\r\n fullName: clipStr(topic.public ? topic.public.fn : undefined, MAX_TITLE_LENGTH),\r\n avatar: makeImageUrl(topic.public ? topic.public.photo : null),\r\n trustedBadges: badges,\r\n });\r\n }\r\n\r\n onMetaDesc(desc) {\r\n const topic = this.props.tinode.getTopic(this.props.topic);\r\n if (!topic) {\r\n return;\r\n }\r\n this.resetDesc(topic);\r\n\r\n if (this.previousMetaDesc && this.previousMetaDesc != this.onMetaDesc) {\r\n this.previousMetaDesc(desc);\r\n }\r\n }\r\n\r\n handleAcceptCall() {\r\n this.props.onAcceptCall(this.props.topic);\r\n }\r\n\r\n handleRejectCall() {\r\n this.props.onReject(this.props.topic, this.props.seq);\r\n this.props.onClose();\r\n }\r\n\r\n render() {\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    {clipStr(this.state.fullName, MAX_PEER_TITLE_LENGTH)}\r\n
    \r\n
    \r\n
    \r\n {this.props.callState == CALL_STATE_INCOMING_RECEIVED ?\r\n <>\r\n \r\n \r\n \r\n :\r\n null\r\n }\r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n};\r\n","// The X menu to be displayed in title bars.\r\nimport React from 'react';\r\n\r\nexport default class MenuCancel extends React.PureComponent {\r\n render() {\r\n return (\r\n {e.preventDefault(); this.props.onCancel();}}>\r\n close\r\n \r\n );\r\n }\r\n}\r\n","import React from 'react';\r\n\r\nimport MenuCancel from './menu-cancel.jsx';\r\n\r\nexport default class ErrorPanel extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n show: false,\r\n };\r\n\r\n this.hide = this.hide.bind(this);\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.level !== this.props.level) {\r\n this.setState({\r\n show: !(!this.props.level)\r\n });\r\n }\r\n }\r\n\r\n hide() {\r\n this.setState({show: false});\r\n if (this.props.onClearError) {\r\n this.props.onClearError();\r\n }\r\n }\r\n\r\n render() {\r\n const icons = {err: 'error', warn: 'warning', info: 'info'}\r\n const level = icons[this.props.level] || '';\r\n const className = 'info-box ' + level;\r\n return (\r\n
    \r\n
    {level}
    \r\n \r\n {this.props.text}\r\n {this.props.action ?\r\n <>\r\n   {e.preventDefault(); this.props.action();}}>\r\n {this.props.actionText}\r\n \r\n \r\n : null}\r\n \r\n
    \r\n
    \r\n );\r\n }\r\n};\r\n","import React from 'react';\r\n\r\nimport LetterTile from './letter-tile.jsx';\r\n\r\nexport default class Chip extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.handleCancel = this.handleCancel.bind(this);\r\n }\r\n\r\n handleCancel(e) {\r\n e.preventDefault();\r\n this.props.onCancel(this.props.topic, this.props.index);\r\n }\r\n\r\n render() {\r\n const title = this.props.title || this.props.topic;\r\n const className = this.props.invalid ? 'chip invalid' : 'chip';\r\n return (\r\n
    \r\n {this.props.noAvatar ?\r\n :\r\n
    \r\n \r\n
    \r\n }\r\n {title}\r\n {this.props.onCancel && !this.props.required ?\r\n ×\r\n : }\r\n
    \r\n );\r\n }\r\n};\r\n","import React from 'react';\r\n\r\nimport Chip from './chip.jsx';\r\n\r\nimport { makeImageUrl } from '../lib/blob-helpers.js';\r\n\r\n/* BEGIN ChipInput: group membership widget */\r\nexport default class ChipInput extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = ChipInput.deriveStateFromProps(props);\r\n this.state.input = '';\r\n this.state.focused = false;\r\n\r\n this.handleTextInput = this.handleTextInput.bind(this);\r\n this.removeChipAt = this.removeChipAt.bind(this);\r\n this.handleChipCancel = this.handleChipCancel.bind(this);\r\n this.handleFocusGained = this.handleFocusGained.bind(this);\r\n this.handleFocusLost = this.handleFocusLost.bind(this);\r\n this.handleKeyDown = this.handleKeyDown.bind(this);\r\n }\r\n\r\n static deriveStateFromProps(props) {\r\n return {\r\n placeholder: props.chips ? '' : props.prompt,\r\n sortedChips: ChipInput.sortChips(props.chips, props.staticMembers),\r\n chipIndex: ChipInput.indexChips(props.chips)\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (prevProps.chips != this.props.chips ||\r\n prevProps.staticMembers != this.props.staticMembers ||\r\n prevProps.prompt != this.props.prompt) {\r\n this.setState(ChipInput.deriveStateFromProps(this.props));\r\n }\r\n if (!prevState || this.props.chips.length > prevState.sortedChips.length) {\r\n this.setState({input: ''});\r\n }\r\n }\r\n\r\n // Map chip index to user name\r\n static indexChips(chips) {\r\n const index = {};\r\n let count = 0;\r\n chips.map((item) => {\r\n index[item.user] = count;\r\n count ++;\r\n });\r\n return index;\r\n }\r\n\r\n // Have non-removable chips appear before all other chips.\r\n static sortChips(chips, keep) {\r\n const required = [];\r\n const normal = [];\r\n chips.map((item) => {\r\n if (keep && keep.includes(item.user)) {\r\n required.push(item);\r\n } else {\r\n normal.push(item);\r\n }\r\n });\r\n return required.concat(normal);\r\n }\r\n\r\n handleTextInput(e) {\r\n this.setState({input: e.target.value});\r\n if (this.props.filterFunc) {\r\n this.props.filterFunc(e.target.value);\r\n }\r\n }\r\n\r\n removeChipAt(idx) {\r\n const removed = this.state.sortedChips[idx];\r\n this.props.onChipRemoved(removed.user, this.state.chipIndex[removed.user]);\r\n }\r\n\r\n handleChipCancel(item, idx) {\r\n this.removeChipAt(idx);\r\n }\r\n\r\n handleFocusGained() {\r\n this.setState({focused: true});\r\n }\r\n\r\n handleFocusLost() {\r\n this.setState({focused: false});\r\n if (this.props.onFocusLost) {\r\n this.props.onFocusLost(this.state.input);\r\n }\r\n }\r\n\r\n handleKeyDown(e) {\r\n if (e.key === 'Backspace') {\r\n if (this.state.input.length == 0 && this.state.sortedChips.length > 0) {\r\n const at = this.state.sortedChips.length - 1;\r\n if (this.state.sortedChips[at].user !== this.props.staticMembers) {\r\n this.removeChipAt(at);\r\n }\r\n }\r\n } else if (e.key === 'Enter') {\r\n if (this.props.onEnter) {\r\n this.props.onEnter(this.state.input);\r\n }\r\n } else if (e.key === 'Escape') {\r\n if (this.props.onCancel) {\r\n this.props.onCancel();\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n const chips = [];\r\n let count = 0;\r\n const staticMembers = this.props.staticMembers || [];\r\n this.state.sortedChips.map((item) => {\r\n chips.push(\r\n \r\n );\r\n count++;\r\n });\r\n const className = \"chip-input\" + (this.state.focused ? ' focused' : '');\r\n const autoFocus = !(this.props.tabIndex > 0);\r\n return (\r\n
    \r\n {chips}\r\n \r\n
    \r\n );\r\n }\r\n};\r\n","// GroupMembers: control for managing a list of group members.\r\nimport React from 'react';\r\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\r\n\r\nimport ChipInput from './chip-input.jsx';\r\nimport ContactList from './contact-list.jsx';\r\n\r\nconst messages = defineMessages({\r\n no_contacts: {\r\n id: 'no_contacts',\r\n defaultMessage: 'You have no contacts :-(',\r\n description: 'Shown in ContactsView when the user has no contacts'\r\n },\r\n contacts_not_found_short: {\r\n id: 'contacts_not_found_short',\r\n defaultMessage: \"No contacts match ''{query}''\",\r\n description: 'Shown in ContactsView when search returned no results'\r\n }\r\n});\r\n\r\nclass GroupManager extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n // Array of topic members\r\n members: props.members,\r\n index: GroupManager.indexMembers(props.members),\r\n staticMembers: GroupManager.staticMembers(props.members, props.keepInitialMembers, props.requiredMember),\r\n contactFilter: '',\r\n noContactsMessage: props.intl.formatMessage(messages.no_contacts),\r\n selectedContacts: GroupManager.selectedContacts(props.members)\r\n };\r\n\r\n this.handleContactSelected = this.handleContactSelected.bind(this);\r\n this.handleMemberRemoved = this.handleMemberRemoved.bind(this);\r\n this.handleContactFilter = this.handleContactFilter.bind(this);\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n this.handleCancel = this.handleCancel.bind(this);\r\n }\r\n\r\n static indexMembers(members) {\r\n let index = {};\r\n members.map((m) => {\r\n index[m.user] = {delta: 0, present: true}; // Delta: 0 unchanged, +1 added, -1 removed\r\n });\r\n return index;\r\n }\r\n\r\n static staticMembers(members, keepInitial, requiredMember) {\r\n let stat = [];\r\n members.map((m) => {\r\n if (keepInitial || m.user == requiredMember) {\r\n stat.push(m.user);\r\n }\r\n });\r\n return stat;\r\n }\r\n\r\n static selectedContacts(members) {\r\n let sel = [];\r\n members.map((m) => {\r\n sel.push(m.user);\r\n });\r\n return sel;\r\n }\r\n\r\n handleContactSelected(userId, index) {\r\n let status = this.state.index[userId];\r\n if (status) {\r\n if (status.present) {\r\n // Prevent duplicate members\r\n return;\r\n }\r\n status.delta += 1;\r\n status.present = true;\r\n } else {\r\n status = {delta: 1, present: true};\r\n }\r\n\r\n let m = this.state.members.slice();\r\n m.push(this.props.contacts[index]);\r\n\r\n const sel = GroupManager.selectedContacts(m);\r\n\r\n const i = this.state.index;\r\n i[userId] = status;\r\n\r\n this.setState({members: m, index: i, selectedContacts: sel});\r\n }\r\n\r\n handleMemberRemoved(userId, index) {\r\n const status = this.state.index[userId];\r\n if (!status || !status.present) {\r\n return;\r\n }\r\n status.present = false;\r\n status.delta -= 1;\r\n\r\n let m = this.state.members.slice();\r\n m.splice(index, 1);\r\n\r\n const sel = GroupManager.selectedContacts(m);\r\n\r\n const i = this.state.index;\r\n i[userId] = status;\r\n\r\n this.setState({members: m, index: i, selectedContacts: sel});\r\n }\r\n\r\n handleContactFilter(val) {\r\n const {formatMessage} = this.props.intl;\r\n const msg = !val ?\r\n formatMessage(messages.no_contacts) :\r\n formatMessage(messages.contacts_not_found_short, {query: val});\r\n\r\n this.setState({contactFilter: val, noContactsMessage: msg});\r\n }\r\n\r\n static doContactFiltering(filter, values) {\r\n if (filter) {\r\n for (let i=0; i= 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n handleSubmit() {\r\n var instance = this;\r\n var members = [];\r\n var added = [];\r\n var removed = [];\r\n\r\n var keys = Object.keys(this.state.index);\r\n keys.map(function(k) {\r\n if (instance.state.index[k].present) {\r\n members.push(k);\r\n }\r\n\r\n if (instance.state.index[k].delta > 0) {\r\n added.push(k);\r\n } else if (instance.state.index[k].delta < 0) {\r\n removed.push(k);\r\n }\r\n });\r\n this.props.onSubmit(members, added, removed);\r\n }\r\n\r\n handleCancel() {\r\n this.props.onCancel();\r\n }\r\n\r\n render() {\r\n const {formatMessage} = this.props.intl;\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n );\r\n }\r\n};\r\n\r\nexport default injectIntl(GroupManager);\r\n","// PermissionsEditor: Component for editing permissions\r\n// \r\nimport React from 'react';\r\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\r\n\r\nimport CheckBox from './checkbox.jsx';\r\nimport Contact from './contact.jsx';\r\n\r\nimport { makeImageUrl } from '../lib/blob-helpers.js';\r\n\r\n// Translatable permission names.\r\nconst messages = defineMessages({\r\n joiner: {\r\n id: 'permission_join',\r\n defaultMessage: \"Join ({val})\",\r\n description: 'Name of J permission'\r\n },\r\n reader: {\r\n id: 'permission_read',\r\n defaultMessage: \"Read ({val})\",\r\n description: 'Name of R permission'\r\n },\r\n writer: {\r\n id: 'permission_write',\r\n defaultMessage: \"Write ({val})\",\r\n description: 'Name of W permission'\r\n },\r\n preser: {\r\n id: 'permission_pres',\r\n defaultMessage: \"Get notified ({val})\",\r\n description: 'Name of P permission'\r\n },\r\n approver: {\r\n id: 'permission_admin',\r\n defaultMessage: \"Approve ({val})\",\r\n description: 'Name of A permission'\r\n },\r\n sharer: {\r\n id: 'permission_share',\r\n defaultMessage: \"Share ({val})\",\r\n description: 'Name of S permission'\r\n },\r\n deleter: {\r\n id: 'permission_delete',\r\n defaultMessage: \"Delete ({val})\",\r\n description: 'Name of D permission'\r\n },\r\n owner: {\r\n id: 'permission_owner',\r\n defaultMessage: \"Owner ({val})\",\r\n description: 'Name of O permission'\r\n }\r\n});\r\n\r\nclass PermissionsEditor extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n mode: (props.mode || '').replace('N', '')\r\n };\r\n\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n this.handleCancel = this.handleCancel.bind(this);\r\n }\r\n\r\n handleChange(val) {\r\n let mode = this.state.mode;\r\n const idx = mode.indexOf(val);\r\n if (idx == -1) {\r\n mode += val;\r\n } else {\r\n mode = mode.replace(val, '');\r\n }\r\n this.setState({mode: mode});\r\n }\r\n\r\n handleSubmit() {\r\n // Normalize string, otherwise cannot check if mode has changed.\r\n const mode = (this.state.mode || 'N').split('').sort().join('');\r\n const before = (this.props.mode || 'N').split('').sort().join('')\r\n if (mode !== before) {\r\n this.props.onSubmit(mode);\r\n } else {\r\n this.props.onCancel();\r\n }\r\n }\r\n\r\n handleCancel() {\r\n this.props.onCancel();\r\n }\r\n\r\n render() {\r\n const {formatMessage} = this.props.intl;\r\n const all = 'JRWPASDO';\r\n const names = {\r\n 'J': formatMessage(messages.joiner, {val: 'J'}),\r\n 'R': formatMessage(messages.reader, {val: 'R'}),\r\n 'W': formatMessage(messages.writer, {val: 'W'}),\r\n 'P': formatMessage(messages.preser, {val: 'P'}),\r\n 'A': formatMessage(messages.approver, {val: 'A'}),\r\n 'S': formatMessage(messages.sharer, {val: 'S'}),\r\n 'D': formatMessage(messages.deleter, {val: 'D'}),\r\n 'O': formatMessage(messages.owner, {val: 'O'})\r\n };\r\n\r\n let skip = this.props.skip || '';\r\n let mode = this.state.mode;\r\n let compare = (this.props.compare || '').replace('N', '');\r\n let items = [];\r\n for (let i=0; i= 0 && mode.indexOf(c) < 0) {\r\n // Permission is marked as inactive: hide unchecked permissions, disable checked permissions\r\n continue;\r\n }\r\n items.push(\r\n \r\n {names[c]}\r\n {skip.indexOf(c) < 0 ?\r\n = 0)} onChange={this.handleChange}/>\r\n :\r\n = 0)} />\r\n }{this.props.compare ? \r\n = 0)}/>\r\n : null}\r\n \r\n );\r\n }\r\n\r\n return (\r\n
    \r\n {this.props.userTitle ?\r\n
    : null}\r\n \r\n \r\n {this.props.compare ?\r\n \r\n \r\n \r\n :\r\n null}\r\n \r\n {items}\r\n
    {this.props.modeTitle}{this.props.compareTitle}
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n );\r\n }\r\n};\r\n\r\nexport default injectIntl(PermissionsEditor);\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = QRCode;","import QRCode from 'qrcodejs';\r\nimport React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\nimport { QRCODE_SIZE } from '../config';\r\n\r\nexport default class ShowQRCode extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n this.qrCodeRef = React.createRef();\r\n }\r\n\r\n componentDidMount() {\r\n new QRCode(this.qrCodeRef.current, {\r\n text: this.props.uri,\r\n width: QRCODE_SIZE,\r\n height: QRCODE_SIZE,\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n }\r\n};\r\n","// In-place text editor. Shows text with an icon which toggles it into an input field.\r\nimport React from 'react';\r\n\r\nimport VisiblePassword from './visible-password.jsx';\r\n\r\nexport default class InPlaceEdit extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.selfRef = React.createRef();\r\n\r\n this.state = {\r\n active: props.active,\r\n initialValue: props.value || '',\r\n value: props.value || ''\r\n };\r\n\r\n this.handeTextChange = this.handeTextChange.bind(this);\r\n this.handleKeyDown = this.handleKeyDown.bind(this);\r\n this.handleStartEditing = this.handleStartEditing.bind(this);\r\n this.handleEditingFinished = this.handleEditingFinished.bind(this);\r\n this.handlePasswordFinished = this.handlePasswordFinished.bind(this);\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n // If text has changed while in read mode, update text and discard changes.\r\n // Ignore update if in edit mode.\r\n const newValue = this.props.value || '';\r\n if (prevState.initialValue != newValue && !prevState.active) {\r\n this.setState({\r\n initialValue: newValue,\r\n value: newValue\r\n });\r\n }\r\n }\r\n\r\n handeTextChange(e) {\r\n this.setState({value: e.target.value || ''});\r\n }\r\n\r\n handleKeyDown(e) {\r\n if (e.keyCode === 27) {\r\n // Escape pressed\r\n this.setState({value: this.props.value, active: false});\r\n } else if (e.keyCode === 13) {\r\n // Enter pressed\r\n this.handleEditingFinished(e);\r\n }\r\n }\r\n\r\n handleStartEditing() {\r\n if (!this.props.readOnly) {\r\n this.setState({active: true}, _ => {\r\n if (this.selfRef.current) {\r\n this.selfRef.current.focus();\r\n }\r\n });\r\n }\r\n }\r\n\r\n handleEditingFinished(event) {\r\n const value = this.state.value.trim();\r\n if (this.props.required && (!event.target.checkValidity() || !value)) {\r\n // Empty input\r\n this.setState({value: this.props.value, active: false});\r\n return;\r\n }\r\n this.setState({active: false});\r\n if ((value || this.props.value) && (value !== this.props.value)) {\r\n this.props.onFinished(value);\r\n }\r\n }\r\n\r\n handlePasswordFinished(value) {\r\n this.setState({active: false});\r\n if (value && (value !== this.props.value)) {\r\n this.props.onFinished(value);\r\n }\r\n }\r\n\r\n render() {\r\n if (!this.state.active) {\r\n let spanText = this.props.type == 'password' ? '••••••••' : this.state.value;\r\n let spanClass = 'in-place-edit' + (this.props.readOnly ? ' disabled' : '');\r\n if (!spanText) {\r\n spanText = this.props.placeholder;\r\n spanClass += ' placeholder';\r\n }\r\n if (!this.props.multiline || this.props.multiline == 1) {\r\n spanClass += ' short';\r\n }\r\n\r\n return (\r\n {spanText}\r\n );\r\n }\r\n\r\n let element;\r\n const attr = {};\r\n if (this.props.type == 'password') {\r\n element = VisiblePassword;\r\n attr.onFinished = this.handlePasswordFinished;\r\n } else {\r\n if (this.props.multiline > 1) {\r\n element = 'textarea';\r\n attr.rows = this.props.multiline;\r\n attr.className = 'inplace-edit';\r\n } else {\r\n element = 'input';\r\n attr.type = this.props.type || 'text';\r\n }\r\n attr.value = this.state.value;\r\n attr.ref = this.selfRef;\r\n attr.onChange = this.handeTextChange;\r\n attr.onKeyDown = this.handleKeyDown;\r\n attr.onBlur = this.handleEditingFinished;\r\n }\r\n attr.placeholder = this.props.placeholder;\r\n attr.required = this.props.required ? 'required' : '';\r\n attr.autoComplete = this.props.autoComplete;\r\n attr.autoFocus = true;\r\n\r\n return React.createElement(element, attr, null);\r\n }\r\n};\r\n","// TagManager: edit topic or user tags.\r\nimport React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\nimport ChipInput from './chip-input.jsx';\r\n\r\nimport { MAX_TAG_COUNT, MAX_TAG_LENGTH, MIN_TAG_LENGTH } from '../config.js';\r\nimport { arrayEqual } from '../lib/utils.js';\r\n\r\nexport default class TagManager extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n tags: this.props.tags || [],\r\n tagInput: '',\r\n activated: this.props.activated\r\n };\r\n\r\n this.handleTagInput = this.handleTagInput.bind(this);\r\n this.handleAddTag = this.handleAddTag.bind(this);\r\n this.handleRemoveTag = this.handleRemoveTag.bind(this);\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n this.handleCancel = this.handleCancel.bind(this);\r\n }\r\n\r\n static getDerivedStateFromProps(nextProps, prevState) {\r\n const tags = nextProps.tags || [];\r\n if (!arrayEqual(tags, prevState.tags) && !prevState.activated) {\r\n return {tags: tags};\r\n }\r\n return null;\r\n }\r\n\r\n handleTagInput(text) {\r\n this.setState({tagInput: text});\r\n if (text.length > 0) {\r\n const last = text[text.length-1];\r\n if (text[0] == '\"') {\r\n // This is a quoted string.\r\n if (text.length > 1 && last == '\"') {\r\n this.handleAddTag(text.substring(1, text.length-1));\r\n }\r\n } else if (last == ',' || last == ' ' || last == ';' || last == '\"') {\r\n // User entered ',', ' ' or ';'\r\n this.handleAddTag(text.substring(0, text.length-1).trim());\r\n }\r\n }\r\n }\r\n\r\n handleAddTag(tag) {\r\n const maxTagCount = this.props.tinode.getServerParam('maxTagCount', MAX_TAG_COUNT);\r\n\r\n if (tag.length > 0 && this.state.tags.length < maxTagCount) {\r\n const tags = this.state.tags.slice(0);\r\n tags.push(tag);\r\n\r\n this.setState({tags: tags, tagInput: ''});\r\n if (this.props.onTagsChanged) {\r\n this.props.onTagsChanged(tags);\r\n }\r\n return tags;\r\n }\r\n return this.state.tags;\r\n }\r\n\r\n handleRemoveTag(tag, index) {\r\n const tags = this.state.tags.slice(0);\r\n tags.splice(index, 1);\r\n this.setState({tags: tags});\r\n if (this.props.onTagsChanged) {\r\n this.props.onTagsChanged(tags);\r\n }\r\n }\r\n\r\n handleSubmit() {\r\n // Add unprocessed input to tags, submit the list.\r\n this.props.onSubmit(this.handleAddTag(this.state.tagInput.trim()));\r\n this.setState({activated: false, tags: this.props.tags || []});\r\n }\r\n\r\n handleCancel() {\r\n this.setState({activated: false, tagInput: '', tags: this.props.tags || []});\r\n if (this.props.onCancel) {\r\n this.props.onCancel();\r\n }\r\n }\r\n\r\n render() {\r\n const minTagLength = this.props.tinode.getServerParam('minTagLength', MIN_TAG_LENGTH);\r\n const maxTagLength = this.props.tinode.getServerParam('maxTagLength', MAX_TAG_LENGTH);\r\n\r\n let tags = [];\r\n if (this.state.activated) {\r\n this.state.tags.map((tag) => {\r\n tags.push({user: tag, invalid: (tag.length < minTagLength || tag.length > maxTagLength)});\r\n });\r\n } else {\r\n this.state.tags.map((tag) => {\r\n tags.push({tag});\r\n });\r\n if (tags.length == 0) {\r\n tags = (\r\n \r\n \r\n \r\n );\r\n }\r\n }\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n {this.state.activated ?\r\n
    \r\n {\r\n (add_tags_prompt) => \r\n }\r\n {this.props.onSubmit || this.props.onCancel ?\r\n
    \r\n \r\n \r\n
    \r\n : null}\r\n
    \r\n :\r\n */}\r\n {/* */}\r\n <>{tags}\r\n
    \r\n }\r\n
    \r\n );\r\n }\r\n};\r\n","// Widget for editing topic description.\r\n\r\nimport React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\nimport { Tinode } from 'tinode-sdk';\r\n\r\nimport AvatarCrop from './avatar-crop.jsx';\r\nimport AvatarUpload from './avatar-upload.jsx';\r\nimport InPlaceEdit from './in-place-edit.jsx';\r\nimport TagManager from './tag-manager.jsx';\r\n\r\nimport { AVATAR_SIZE, MAX_AVATAR_BYTES, MAX_EXTERN_ATTACHMENT_SIZE, MAX_TITLE_LENGTH,\r\n MAX_TOPIC_DESCRIPTION_LENGTH } from '../config.js';\r\nimport { imageScaled, blobToBase64, makeImageUrl } from '../lib/blob-helpers.js';\r\nimport { arrayEqual, theCard } from '../lib/utils.js';\r\n\r\nexport default class TopicDescEdit extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n const topic = this.props.tinode.getTopic(this.props.topic);\r\n const acs = topic.getAccessMode();\r\n this.state = {\r\n isMe: Tinode.isMeTopicName(this.props.topic),\r\n owner: acs && acs.isOwner(),\r\n fullName: topic.public ? topic.public.fn : undefined,\r\n private: topic.private ? topic.private.comment : null,\r\n description: topic.public ? topic.public.note : undefined,\r\n avatar: makeImageUrl(topic.public ? topic.public.photo : null),\r\n tags: topic.tags() || [],\r\n newAvatar: null,\r\n newAvatarMime: null\r\n };\r\n\r\n this.previousOnTags = null;\r\n\r\n this.tnNewTags = this.tnNewTags.bind(this);\r\n this.handleFullNameUpdate = this.handleFullNameUpdate.bind(this);\r\n this.handleImageUpdated = this.handleImageUpdated.bind(this);\r\n this.handleAvatarCropped = this.handleAvatarCropped.bind(this);\r\n this.handleAvatarCropCancel = this.handleAvatarCropCancel.bind(this);\r\n this.uploadAvatar = this.uploadAvatar.bind(this);\r\n this.handlePrivateUpdate = this.handlePrivateUpdate.bind(this);\r\n this.handleDescriptionUpdate = this.handleDescriptionUpdate.bind(this);\r\n this.handleTagsUpdated = this.handleTagsUpdated.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const topic = this.props.tinode.getTopic(this.props.topic);\r\n this.previousOnTags = topic.onTagsUpdated;\r\n topic.onTagsUpdated = this.tnNewTags;\r\n }\r\n\r\n componentWillUnmount() {\r\n const topic = this.props.tinode.getTopic(this.props.topic);\r\n topic.onTagsUpdated = this.previousOnTags;\r\n }\r\n\r\n tnNewTags(tags) {\r\n this.setState({tags: tags});\r\n }\r\n\r\n handleFullNameUpdate(fn) {\r\n fn = fn.trim().substring(0, MAX_TITLE_LENGTH);\r\n if (fn && this.state.fullName !== fn) {\r\n this.setState({fullName: fn});\r\n this.props.onUpdateTopicDesc(this.props.topic, theCard(fn, null));\r\n }\r\n }\r\n\r\n handlePrivateUpdate(comment) {\r\n comment = comment.trim().substring(0, MAX_TITLE_LENGTH);\r\n if (this.state.private !== comment) {\r\n this.setState({private: comment});\r\n this.props.onUpdateTopicDesc(this.props.topic, null, comment || Tinode.DEL_CHAR);\r\n }\r\n }\r\n\r\n handleDescriptionUpdate(desc) {\r\n desc = desc.trim().substring(0, MAX_TOPIC_DESCRIPTION_LENGTH);\r\n if (desc) {\r\n this.setState({description: desc});\r\n this.props.onUpdateTopicDesc(this.props.topic, theCard(null, null, null, desc));\r\n }\r\n }\r\n\r\n // AvatarUpload widget has changed the avatar: received a new file or deleted the avatar.\r\n handleImageUpdated(mime, img) {\r\n // This will show the AvatarCropView is img is not null.\r\n this.setState({newAvatar: img, newAvatarMime: mime});\r\n if (!img) {\r\n // Deleting the avatar.\r\n this.setState({avatar: null});\r\n this.props.onUpdateTopicDesc(this.props.topic, theCard(null, Tinode.DEL_CHAR));\r\n }\r\n }\r\n\r\n // AvatarCropView calls this method when the user has cropped the image.\r\n handleAvatarCropped(mime, blob, width, height) {\r\n const url = blob ? URL.createObjectURL(blob) : null;\r\n this.setState({avatar: url, newAvatar: null, newAvatarMime: null});\r\n if (blob) {\r\n this.uploadAvatar(mime, blob, width, height);\r\n }\r\n }\r\n\r\n // Utility method for converting cropped avatar blob to bytes for sending inband or\r\n // for uploading it to the server out of band.\r\n uploadAvatar(mime, blob, width, height) {\r\n const readyToUpload = image => {\r\n let {mime, blob} = image;\r\n if (blob.size > MAX_AVATAR_BYTES) {\r\n // Too large to send inband - uploading out of band and sending as a link.\r\n const uploader = this.props.tinode.getLargeFileHelper();\r\n uploader.upload(blob)\r\n .then(url => this.props.onUpdateTopicDesc(this.props.topic, theCard(null, url)))\r\n .catch(err => this.props.onError(err.message, 'err'));\r\n } else {\r\n // Convert blob to base64-encoded bits.\r\n blobToBase64(blob)\r\n .then(b64 => {\r\n const du = makeImageUrl({data: b64.bits, type: mime});\r\n this.setState({source: du});\r\n this.props.onUpdateTopicDesc(this.props.topic, theCard(null, du));\r\n });\r\n }\r\n };\r\n\r\n if (width > AVATAR_SIZE || height > AVATAR_SIZE || width != height) {\r\n // Avatar is not square or too large even after cropping. Shrink it and make square.\r\n imageScaled(blob, AVATAR_SIZE, AVATAR_SIZE, MAX_EXTERN_ATTACHMENT_SIZE, true)\r\n .then(scaled => readyToUpload(scaled))\r\n .catch(err => this.props.onError(err.message, 'err'));\r\n } else {\r\n readyToUpload({mime: mime, blob: blob, width: width, height: height});\r\n }\r\n }\r\n\r\n handleAvatarCropCancel() {\r\n this.setState({newAvatar: null, newAvatarMime: null});\r\n }\r\n\r\n handleTagsUpdated(tags) {\r\n //always return because user can't edit tags\r\n return;\r\n // Check if tags have actually changed.\r\n if (arrayEqual(this.state.tags.slice(0), tags.slice(0))) {\r\n return;\r\n }\r\n this.props.onUpdateTags(tags);\r\n }\r\n\r\n render() {\r\n if (this.state.newAvatar) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n const editable = this.state.isMe || this.state.owner;\r\n\r\n return (\r\n <>\r\n
    \r\n
    \r\n \r\n
    \r\n {this.state.isMe ?\r\n
    \r\n \r\n
    \r\n
    {this.state.fullName}
    \r\n
    \r\n
    \r\n :\r\n <>\r\n
    \r\n
    \r\n
    \r\n {\r\n (group_name_placeholder) => \r\n }\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n {\r\n (private_placeholder) => \r\n }\r\n
    \r\n
    \r\n \r\n }\r\n {editable || this.state.description ?\r\n
    \r\n
    \r\n
    \r\n {\r\n (private_placeholder) => \r\n }\r\n
    \r\n
    \r\n : null\r\n }\r\n
    \r\n {/* only topic owner can see tags so users on topic me only see null */}\r\n {this.state.owner ?\r\n <>\r\n
    \r\n {\r\n (title_tag_manager) => \r\n }\r\n \r\n : null\r\n }\r\n \r\n );\r\n }\r\n};\r\n","// View for editing topic parameters (including 'me' topic).\r\n\r\nimport React from 'react';\r\n\r\nimport TopicDescEdit from '../widgets/topic-desc-edit.jsx';\r\n\r\nimport { arrayEqual } from '../lib/utils.js';\r\n\r\nexport default class TopicCommonView extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n const topic = this.props.tinode.getTopic(this.props.topic);\r\n const acs = topic.getAccessMode();\r\n this.state = {\r\n tags: []\r\n };\r\n\r\n this.previousTagsUpdated = undefined;\r\n\r\n this.onTagsUpdated = this.onTagsUpdated.bind(this);\r\n this.handleTagsUpdated = this.handleTagsUpdated.bind(this);\r\n }\r\n\r\n // No need to separately handle component mount.\r\n componentDidUpdate(props) {\r\n const topic = this.props.tinode.getTopic(props.topic);\r\n if (!topic) {\r\n return;\r\n }\r\n\r\n if (topic.onTagsUpdated != this.onTagsUpdated) {\r\n if (topic.getType() == 'grp') {\r\n this.previousTagsUpdated = topic.onTagsUpdated;\r\n topic.onTagsUpdated = this.onTagsUpdated;\r\n } else {\r\n this.previousTagsUpdated = undefined;\r\n }\r\n }\r\n\r\n if (this.state.topic != props.topic) {\r\n this.setState({topic: props.topic});\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n const topic = this.props.tinode.getTopic(this.props.topic);\r\n topic.onTagsUpdated = this.previousTagsUpdated;\r\n }\r\n\r\n // Server informs that the tags have been updated.\r\n onTagsUpdated(tags) {\r\n this.setState({tags: tags});\r\n\r\n if (this.previousTagsUpdated && this.previousTagsUpdated != this.onTagsUpdated) {\r\n this.previousTagsUpdated(tags);\r\n }\r\n }\r\n\r\n // Request server to change tags.\r\n handleTagsUpdated(tags) {\r\n if (!arrayEqual(this.state.tags.slice(0), tags.slice(0))) {\r\n this.props.onUpdateTagsRequest(this.props.topic, tags);\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n }\r\n};\r\n","// Edit account parameters.\r\nimport React from 'react';\r\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\r\n\r\nconst messages = defineMessages({\r\n clear_messages: {\r\n id: 'action_clear_messages',\r\n defaultMessage: 'Clear Messages',\r\n description: 'Flat button [Clear Messages] (soft-delete messages)'\r\n },\r\n clear_messages_warning: {\r\n id: 'clear_messages_warning',\r\n defaultMessage: 'Are you sure you want to clear all messages? It cannot be undone.',\r\n description: 'Alert dialog warning when deleting all messages.'\r\n },\r\n delete_messages: {\r\n id: 'action_delete_messages',\r\n defaultMessage: 'Clear Messages for All',\r\n description: 'Flat button [Clear for All] (hard-delete all messages)'\r\n },\r\n delete_messages_warning: {\r\n id: 'delete_messages_warning',\r\n defaultMessage: 'Are you sure you want to delete all messages for everyone? It cannot be undone.',\r\n description: 'Alert dialog warning when hard-deleting all messages.'\r\n },\r\n topic_delete: {\r\n id: 'topic_delete',\r\n defaultMessage: 'Delete Conversation',\r\n description: 'Alert title when deleting the topic.'\r\n },\r\n topic_delete_warning: {\r\n id: 'topic_delete_warning',\r\n defaultMessage: 'Are you sure you want to delete this conversation? It cannot be undone.',\r\n description: 'Alert warning when deleting entire topic'\r\n },\r\n leave_chat: {\r\n id: 'action_leave_chat',\r\n defaultMessage: 'Leave Conversation',\r\n description: 'Flat button [Leave Conversation]'\r\n },\r\n leave_chat_warning: {\r\n id: 'leave_chat_warning',\r\n defaultMessage: 'Are you sure you want to leave this conversation?',\r\n description: 'Alert dialog warning when unsubscribing from a chat.'\r\n },\r\n block_contact: {\r\n id: 'action_block_contact',\r\n defaultMessage: \"Block Contact\",\r\n description: \"Flat button [Block Contact]\"\r\n },\r\n block_contact_warning: {\r\n id: 'block_contact_warning',\r\n defaultMessage: 'Are you sure you want to block this contact?',\r\n description: 'Alert dialog warning when blocking a contact.'\r\n },\r\n report_chat: {\r\n id: 'action_report_chat',\r\n defaultMessage: 'Report Conversation',\r\n description: 'Flat button [Report Group]'\r\n },\r\n report_chat_warning: {\r\n id: 'report_chat_warning',\r\n defaultMessage: 'Are you sure you want to block and report this conversation?',\r\n description: 'Alert dialog warning when reporting a conversation for abuse'\r\n },\r\n other_user: {\r\n id: 'label_other_user',\r\n defaultMessage: 'Other',\r\n description: 'Label for the other user when the user is unnamed'\r\n },\r\n});\r\n\r\nclass TopicSecurity extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.handleDeleteTopic = this.handleDeleteTopic.bind(this);\r\n this.handleDeleteMessages = this.handleDeleteMessages.bind(this);\r\n this.handleLeave = this.handleLeave.bind(this);\r\n this.handleBlock = this.handleBlock.bind(this);\r\n this.handleReport = this.handleReport.bind(this);\r\n }\r\n\r\n handleDeleteTopic(e) {\r\n e.preventDefault();\r\n const {formatMessage} = this.props.intl;\r\n this.props.onShowAlert(\r\n formatMessage(messages.topic_delete), // title\r\n formatMessage(messages.topic_delete_warning), // content\r\n _ => this.props.onDeleteTopic(this.props.topic), // onConfirm\r\n null, // \"OK\"\r\n true, // Show Reject button\r\n null // \"Cancel\"\r\n );\r\n }\r\n\r\n handleDeleteMessages(e) {\r\n e.preventDefault();\r\n const {formatMessage} = this.props.intl;\r\n this.props.onShowAlert(\r\n formatMessage(this.props.deleter ? messages.delete_messages : messages.clear_messages), // title\r\n formatMessage(this.props.deleter ? messages.delete_messages_warning : messages.clear_messages_warning), // content\r\n _ => this.props.onDeleteMessages(this.props.topic), // onConfirm\r\n null, // \"OK\"\r\n true, // Show Reject button\r\n null // \"Cancel\"\r\n );\r\n }\r\n\r\n handleLeave(e) {\r\n e.preventDefault();\r\n const {formatMessage} = this.props.intl;\r\n this.props.onShowAlert(\r\n formatMessage(messages.leave_chat), // title\r\n formatMessage(messages.leave_chat_warning), // content\r\n _ => this.props.onLeaveTopic(this.props.topic), // onConfirm\r\n null, // \"OK\"\r\n true, // Show Reject button\r\n null // \"Cancel\"\r\n );\r\n }\r\n\r\n handleBlock(e) {\r\n e.preventDefault();\r\n const {formatMessage} = this.props.intl;\r\n this.props.onShowAlert(\r\n formatMessage(messages.block_contact), // title\r\n formatMessage(messages.block_contact_warning), // content\r\n _ => this.props.onBlockTopic(this.props.topic), // onConfirm\r\n null, // \"OK\"\r\n true, // Show Reject button\r\n null // \"Cancel\"\r\n );\r\n }\r\n\r\n handleReport(e) {\r\n e.preventDefault();\r\n const {formatMessage} = this.props.intl;\r\n this.props.onShowAlert(\r\n formatMessage(messages.report_chat), // title\r\n formatMessage(messages.report_chat_warning), // content\r\n (_ => { this.props.onReportTopic(this.props.topic); }), // onConfirm\r\n null, // \"OK\"\r\n true, // Show Reject button\r\n null // \"Cancel\"\r\n );\r\n }\r\n\r\n render() {\r\n const {formatMessage} = this.props.intl;\r\n return (\r\n
    \r\n \r\n
    \r\n
    \r\n {this.props.groupTopic ?\r\n <>\r\n
    \r\n {e.preventDefault(); this.props.onLaunchPermissionsEditor('want')}}>\r\n {this.props.access}\r\n \r\n
    \r\n {!this.props.channel ?\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    Auth: {\r\n e.preventDefault();\r\n if (this.props.owner) {\r\n this.props.onLaunchPermissionsEditor('auth');\r\n }\r\n }}>{this.props.auth}\r\n
    \r\n
    Anon: {\r\n e.preventDefault();\r\n if (this.props.owner) {\r\n this.props.onLaunchPermissionsEditor('anon');\r\n }\r\n }}>{this.props.anon}\r\n
    \r\n
    \r\n
    \r\n :\r\n null\r\n }\r\n \r\n :\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n {e.preventDefault(); this.props.onLaunchPermissionsEditor('want')}}>\r\n {this.props.access}\r\n \r\n
    \r\n
    {this.props.fullName ? this.props.fullName : formatMessage(messages.other_user)}:\r\n   {e.preventDefault(); this.props.onLaunchPermissionsEditor('given')}}>\r\n {this.props.modeGiven2}\r\n \r\n
    \r\n
    \r\n
    \r\n }\r\n
    \r\n
    \r\n );\r\n }\r\n};\r\n\r\nexport default injectIntl(TopicSecurity);\r\n","// InfoView: panel with topic/user info.\r\nimport React from 'react';\r\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\r\n\r\nimport { AccessMode, Tinode } from 'tinode-sdk';\r\n\r\nimport AvatarUpload from '../widgets/avatar-upload.jsx';\r\nimport BadgeList from '../widgets/badge-list.jsx';\r\nimport CheckBox from '../widgets/checkbox.jsx';\r\nimport ContactList from '../widgets/contact-list.jsx';\r\nimport ErrorPanel from '../widgets/error-panel.jsx';\r\nimport GroupManager from '../widgets/group-manager.jsx';\r\nimport MenuCancel from '../widgets/menu-cancel.jsx';\r\nimport PermissionsEditor from '../widgets/permissions-editor.jsx';\r\nimport ShowQRCode from '../widgets/show-qrcode.jsx';\r\nimport TopicCommonView from './topic-common-view.jsx';\r\nimport TopicSecurity from '../widgets/topic-security.jsx';\r\n\r\nimport { MAX_TITLE_LENGTH, MAX_TOPIC_DESCRIPTION_LENGTH, NO_ACCESS_MODE } from '../config.js';\r\n\r\nimport { makeImageUrl } from '../lib/blob-helpers.js';\r\nimport { theCard, clipStr } from '../lib/utils.js';\r\n\r\nconst messages = defineMessages({\r\n info: {\r\n id: 'panel_title_info',\r\n description: 'Title for InfoView',\r\n defaultMessage: 'Info'\r\n },\r\n general: {\r\n id: 'panel_title_general',\r\n description: 'Title for TopicCommon.',\r\n defaultMessage: 'General'\r\n },\r\n security: {\r\n id: 'panel_title_security',\r\n description: 'Title for TopicSecirity and AccSecurity.',\r\n defaultMessage: 'Security'\r\n },\r\n members: {\r\n id: 'panel_title_members',\r\n description: 'Title for managing group members view.',\r\n defaultMessage: 'Members'\r\n },\r\n crop: {\r\n id: 'panel_title_crop',\r\n description: 'Title for AvatarCropView.',\r\n defaultMessage: 'Drag to Adjust'\r\n },\r\n perm_want: {\r\n id: 'requested_permissions',\r\n defaultMessage: 'Requested',\r\n description: 'Title for permissions'\r\n },\r\n perm_given: {\r\n id: 'granted_permissions',\r\n defaultMessage: 'Granted',\r\n description: 'Title for permissions'\r\n },\r\n perm_auth: {\r\n id: 'permissions_authenticated',\r\n defaultMessage: 'Authenticated',\r\n description: 'Title for editing default authenticated permissions'\r\n },\r\n perm_anon: {\r\n id: 'permissions_anonymous',\r\n defaultMessage: 'Anonymous',\r\n description: 'Title for editing default anonymous permissions'\r\n },\r\n perm_user: {\r\n id: 'permissions_user',\r\n defaultMessage: 'User\\'s Permissions',\r\n description: 'Title for editing user\\'s permissions'\r\n },\r\n edit_permissions: {\r\n id: 'menu_item_edit_permissions',\r\n defaultMessage: 'Edit permissions',\r\n description: 'Menu item [Edit permissions]'\r\n },\r\n qrcode: {\r\n id: 'scan_qr_code',\r\n defaultMessage: 'Scan QR Code',\r\n description: 'Title for scanning QR code'\r\n },\r\n});\r\n\r\nclass InfoView extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n topic: null,\r\n owner: false,\r\n admin: false,\r\n sharer: false,\r\n deleter: false,\r\n muted: false,\r\n address: null,\r\n groupTopic: undefined,\r\n channel: undefined,\r\n fullName: undefined,\r\n description: undefined,\r\n avatar: null,\r\n private: null,\r\n selectedContact: null,\r\n access: null,\r\n modeGiven: null,\r\n modeWant: null,\r\n modeGiven2: null, // P2P topic, the other user mode given\r\n modeWant2: null, // P2P topic, the other user mode want\r\n auth: null,\r\n anon: null,\r\n contactList: [],\r\n trustedBadges: [],\r\n previousMetaDesc: undefined,\r\n previousSubsUpdated: undefined,\r\n };\r\n\r\n this.resetSubs = this.resetSubs.bind(this);\r\n this.resetDesc = this.resetDesc.bind(this);\r\n this.resetTags = this.resetTags.bind(this);\r\n this.onMetaDesc = this.onMetaDesc.bind(this);\r\n this.onSubsUpdated = this.onSubsUpdated.bind(this);\r\n this.handleImageChanged = this.handleImageChanged.bind(this);\r\n this.handleMuted = this.handleMuted.bind(this);\r\n this.handleUnarchive = this.handleUnarchive.bind(this);\r\n this.handlePermissionsChanged = this.handlePermissionsChanged.bind(this);\r\n this.handleLaunchPermissionsEditor = this.handleLaunchPermissionsEditor.bind(this);\r\n this.handleCopyID = this.handleCopyID.bind(this);\r\n this.handleShowQRCode = this.handleShowQRCode.bind(this);\r\n this.handleShowAddMembers = this.handleShowAddMembers.bind(this);\r\n this.handleMemberUpdateRequest = this.handleMemberUpdateRequest.bind(this);\r\n this.handleMemberSelected = this.handleMemberSelected.bind(this);\r\n this.handleContextMenu = this.handleContextMenu.bind(this);\r\n this.handleBackNavigate = this.handleBackNavigate.bind(this);\r\n }\r\n\r\n // No need to separately handle component mount.\r\n componentDidUpdate(props) {\r\n const topic = this.props.tinode.getTopic(props.topic);\r\n if (!topic) {\r\n return;\r\n }\r\n\r\n if (this.onMetaDesc != topic.onMetaDesc) {\r\n this.previousMetaDesc = topic.onMetaDesc;\r\n topic.onMetaDesc = this.onMetaDesc;\r\n\r\n this.previousSubsUpdated = topic.onSubsUpdated;\r\n topic.onSubsUpdated = this.onSubsUpdated;\r\n }\r\n\r\n if (this.state.topic != props.topic) {\r\n this.setState({topic: props.topic});\r\n this.resetDesc(topic, props);\r\n this.resetSubs(topic, props);\r\n this.resetTags(topic);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n const topic = this.props.tinode.getTopic(this.props.topic);\r\n if (!topic) {\r\n return;\r\n }\r\n this.setState({topic: null});\r\n topic.onMetaDesc = this.previousMetaDesc;\r\n topic.onSubsUpdated = this.previousSubsUpdated;\r\n }\r\n\r\n resetSubs(topic, props) {\r\n const newState = {contactList: []};\r\n if (topic.getType() == 'p2p') {\r\n // Fetch the other party in the p2p conversation.\r\n // Topic may not be ready yet, so check if user is found.\r\n const user2 = topic.subscriber(props.topic);\r\n if (user2) {\r\n newState.modeGiven2 = user2.acs.getGiven();\r\n newState.modeWant2 = user2.acs.getWant();\r\n } else {\r\n newState.modeGiven2 = NO_ACCESS_MODE;\r\n newState.modeWant2 = NO_ACCESS_MODE;\r\n }\r\n } else {\r\n topic.subscribers((sub) => {\r\n newState.contactList.push(sub);\r\n }, this);\r\n }\r\n\r\n this.setState(newState);\r\n }\r\n\r\n resetDesc(topic, props) {\r\n const defacs = topic.getDefaultAccess() || {};\r\n const acs = topic.getAccessMode();\r\n\r\n const badges = [];\r\n if (topic.trusted) {\r\n for (const [key, val] of Object.entries(topic.trusted)) {\r\n if (val) {\r\n badges.push(key);\r\n }\r\n }\r\n }\r\n\r\n this.setState({\r\n owner: acs && acs.isOwner(),\r\n admin: acs && acs.isAdmin(),\r\n sharer: acs && acs.isSharer(),\r\n deleter: acs && acs.isDeleter(),\r\n muted: acs && acs.isMuted(),\r\n\r\n fullName: clipStr(topic.public && topic.public.fn, MAX_TITLE_LENGTH),\r\n description: clipStr(topic.public && topic.public.note, MAX_TOPIC_DESCRIPTION_LENGTH),\r\n avatar: makeImageUrl(topic.public ? topic.public.photo : null),\r\n trustedBadges: badges,\r\n private: clipStr(topic.private && topic.private.comment, MAX_TITLE_LENGTH),\r\n archived: topic.isArchived(),\r\n address: topic.name,\r\n groupTopic: topic.isGroupType(),\r\n channel: topic.isChannelType() || topic.chan,\r\n access: acs ? acs.getMode() : undefined,\r\n modeGiven: acs ? acs.getGiven() : undefined,\r\n modeWant: acs ? acs.getWant() : undefined,\r\n auth: defacs.auth,\r\n anon: defacs.anon\r\n });\r\n }\r\n\r\n resetTags(topic) {\r\n if (topic.getType() != 'grp') {\r\n return;\r\n }\r\n\r\n const acs = topic.getAccessMode();\r\n if (acs && acs.isOwner()) {\r\n // Requesting tags: owner is editing the topic.\r\n topic.getMeta(topic.startMetaQuery().withTags().build());\r\n }\r\n }\r\n\r\n onMetaDesc(desc) {\r\n const topic = this.props.tinode.getTopic(this.props.topic);\r\n if (!topic) {\r\n return;\r\n }\r\n this.resetDesc(topic, this.props);\r\n\r\n if (this.previousMetaDesc && this.previousMetaDesc != this.onMetaDesc) {\r\n this.previousMetaDesc(desc);\r\n }\r\n }\r\n\r\n onSubsUpdated(subs) {\r\n const topic = this.props.tinode.getTopic(this.props.topic);\r\n if (!topic) {\r\n return;\r\n }\r\n this.resetSubs(topic, this.props);\r\n\r\n if (this.previousSubsUpdated && this.previousSubsUpdated != this.onSubsUpdated) {\r\n this.previousSubsUpdated(subs);\r\n }\r\n }\r\n\r\n handleImageChanged(mime, img) {\r\n this.setState({avatar: img});\r\n this.props.onTopicDescUpdate(this.props.topic, theCard(null, img || Tinode.DEL_CHAR), null);\r\n }\r\n\r\n handleMuted(ignored, checked) {\r\n this.setState({muted: checked});\r\n this.props.onChangePermissions(this.props.topic, checked ? '-P' : '+P');\r\n }\r\n\r\n handleUnarchive(ignored, ignored2) {\r\n this.props.onTopicUnArchive(this.props.topic);\r\n }\r\n\r\n handlePermissionsChanged(which, perm) {\r\n switch (which) {\r\n case 'auth':\r\n this.props.onTopicDescUpdateRequest(this.props.topic, null, null, {auth: perm});\r\n break;\r\n case 'anon':\r\n this.props.onTopicDescUpdateRequest(this.props.topic, null, null, {anon: perm});\r\n break;\r\n case 'mode':\r\n case 'want':\r\n this.props.onChangePermissions(this.props.topic, perm);\r\n break;\r\n case 'given':\r\n this.props.onChangePermissions(this.props.topic, perm, this.props.topic);\r\n break;\r\n case 'user':\r\n this.props.onChangePermissions(this.props.topic, perm, this.state.userPermissionsEdited);\r\n break;\r\n }\r\n\r\n this.handleBackNavigate();\r\n }\r\n\r\n handleLaunchPermissionsEditor(which, uid) {\r\n const {formatMessage} = this.props.intl;\r\n let toEdit, toCompare, toSkip, titleEdit, titleCompare, userTitle, userAvatar;\r\n switch (which) {\r\n case 'mode':\r\n toEdit = this.state.access;\r\n break;\r\n case 'want':\r\n toEdit = this.state.modeWant;\r\n toCompare = this.state.modeGiven;\r\n if (this.state.owner) {\r\n // Don't allow owner to unset 'O' permission. All other permissions are OK.\r\n toSkip = 'O';\r\n } else {\r\n // Allow accepting any of 'ASDO' permissions but don't allow asking for them.\r\n toSkip = AccessMode.encode(AccessMode.diff('ASDO', this.state.modeGiven));\r\n if (this.state.channel) {\r\n // Channels are read-only.\r\n toSkip += 'W';\r\n }\r\n }\r\n titleEdit = formatMessage(messages.perm_want);\r\n titleCompare = formatMessage(messages.perm_given);\r\n break;\r\n case 'given':\r\n toEdit = this.state.modeGiven2;\r\n toCompare = this.state.modeWant2;\r\n toSkip = this.state.groupTopic ? (this.state.owner ? '' : 'O') : 'ASDO';\r\n titleEdit = formatMessage(messages.perm_given);\r\n titleCompare = formatMessage(messages.perm_want);\r\n break;\r\n case 'auth':\r\n toEdit = this.state.auth;\r\n toSkip = 'O';\r\n break;\r\n case 'anon':\r\n toEdit = this.state.anon;\r\n toSkip = 'O';\r\n break;\r\n case 'user': {\r\n const topic = this.props.tinode.getTopic(this.props.topic);\r\n if (!topic) {\r\n return;\r\n }\r\n const user = topic.subscriber(uid);\r\n if (!user || !user.acs) {\r\n return;\r\n }\r\n toEdit = user.acs.getGiven();\r\n toCompare = user.acs.getWant();\r\n toSkip = this.state.owner ? '' : 'O';\r\n titleEdit = formatMessage(messages.perm_given);\r\n titleCompare = formatMessage(messages.perm_want);\r\n if (user.public) {\r\n userTitle = user.public.fn;\r\n userAvatar = user.public.photo;\r\n }\r\n break;\r\n }\r\n default:\r\n console.error(\"Unknown permission editing mode '\" + which + \"'\");\r\n return;\r\n }\r\n this.setState({\r\n userPermissionsEdited: uid,\r\n userPermissionsTitle: userTitle,\r\n userPermissionsAvatar: userAvatar,\r\n editedPermissions: toEdit,\r\n immutablePermissions: toCompare,\r\n editedPermissionsTitle: titleEdit,\r\n immutablePermissionsTitle: titleCompare,\r\n editedPermissionsSkipped: toSkip,\r\n });\r\n this.props.onNavigate(`perm/${which}`);\r\n }\r\n\r\n handleCopyID(e) {\r\n e.preventDefault();\r\n navigator.clipboard.writeText(this.props.myUserId);\r\n }\r\n\r\n handleShowQRCode(e) {\r\n e.preventDefault();\r\n this.props.onNavigate('qrcode');\r\n }\r\n\r\n handleShowAddMembers(e) {\r\n e.preventDefault();\r\n this.props.onInitFind();\r\n this.props.onNavigate('members');\r\n }\r\n\r\n handleMemberUpdateRequest(members, added, removed) {\r\n this.props.onMemberUpdateRequest(this.props.topic, added, removed);\r\n this.props.onNavigate('info');\r\n }\r\n\r\n handleMemberSelected(uid) {\r\n this.setState({selectedContact: uid});\r\n }\r\n\r\n handleBackNavigate() {\r\n const args = (this.props.panel || 'info').split('/');\r\n if (args[0] == 'info') {\r\n this.props.onNavigate(null);\r\n } else if (args[0] == 'perm') {\r\n if (args[1] == 'user') {\r\n this.props.onNavigate('info');\r\n } else {\r\n this.props.onNavigate('security');\r\n }\r\n } else {\r\n this.props.onNavigate('info');\r\n }\r\n }\r\n\r\n handleContextMenu(params) {\r\n const {formatMessage} = this.props.intl;\r\n const topic = this.props.tinode.getTopic(this.props.topic);\r\n if (!topic) {\r\n return;\r\n }\r\n const user = topic.subscriber(params.topicName);\r\n if (!user || !user.acs) {\r\n return;\r\n }\r\n\r\n const isMe = this.props.tinode.isMe(params.topicName);\r\n const menuItems = [{\r\n title: formatMessage(messages.edit_permissions),\r\n handler: _ => this.handleLaunchPermissionsEditor(isMe ? 'want' : 'user', params.topicName)\r\n }];\r\n if (!isMe) {\r\n menuItems.push('member_delete');\r\n }\r\n menuItems.push(user.acs.isMuted() ? 'member_unmute' : 'member_mute');\r\n if (!isMe) {\r\n menuItems.push(user.acs.isJoiner() ? 'member_block' : 'member_unblock');\r\n }\r\n this.props.showContextMenu({\r\n topicName: this.props.topic,\r\n x: params.x,\r\n y: params.y,\r\n user: params.topicName}, menuItems);\r\n }\r\n\r\n render() {\r\n const args = (this.props.panel || 'info').split('/');\r\n const view = args[0];\r\n args.shift();\r\n\r\n const {formatMessage} = this.props.intl;\r\n const panelTitle = formatMessage((view == 'perm' ? messages['perm_' + args[0]] : messages[view])\r\n || messages['info']);\r\n\r\n return (\r\n
    \r\n
    \r\n
    {panelTitle}
    \r\n
    \r\n \r\n
    \r\n
    \r\n {this.props.displayMobile ?\r\n : null}\r\n {view == 'members' ?\r\n \r\n :\r\n view == 'perm' && args.length > 0 ?\r\n this.handlePermissionsChanged(args[0], mode)}\r\n onCancel={this.handleBackNavigate} />\r\n :\r\n view == 'general' ?\r\n \r\n :\r\n view == 'security' ?\r\n \r\n :\r\n view == 'qrcode' ?\r\n \r\n :\r\n
    \r\n
    \r\n {e.preventDefault(); this.props.onNavigate('general');}}>\r\n edit \r\n \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    {this.state.fullName}\r\n {this.state.channel ? \"channel\" : null}
    \r\n
    \r\n {this.state.private ?\r\n
    \r\n
    \r\n
    {this.state.private}
    \r\n
    \r\n : null\r\n }\r\n
    \r\n
    \r\n  \r\n {this.state.address}\r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n {this.state.description ?\r\n
    \r\n \r\n
    {this.state.description}
    \r\n
    : null}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n {this.state.archived ?\r\n
    \r\n \r\n \r\n
    \r\n :\r\n null\r\n }\r\n
    \r\n \r\n {this.state.groupTopic && this.state.sharer ?\r\n <>\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n {\r\n (no_members) => \r\n }\r\n \r\n :\r\n null\r\n }\r\n
    \r\n }\r\n
    \r\n );\r\n }\r\n};\r\n\r\nexport default injectIntl(InfoView);\r\n","// CallPanel displays call in progress: local and remote viewports and controls.\r\nimport React from 'react';\r\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\r\n\r\nimport LetterTile from './letter-tile.jsx';\r\n\r\nimport { MAX_PEER_TITLE_LENGTH } from '../config.js';\r\nimport { CALL_STATE_OUTGOING_INITATED, CALL_STATE_IN_PROGRESS } from '../constants.js';\r\n\r\nimport { clipStr } from '../lib/utils.js'\r\n\r\nconst RING_SOUND = new Audio('audio/call-out.m4a');\r\nRING_SOUND.loop = true;\r\nconst CALL_ENDED_SOUND = new Audio('audio/call-end.m4a');\r\nCALL_ENDED_SOUND.loop = true;\r\nconst DIALING_SOUND = new Audio('audio/dialing.m4a');\r\n\r\nconst VIDEO_MUTED_EVENT = 'video:muted';\r\nconst VIDEO_UNMUTED_EVENT = 'video:unmuted';\r\n\r\nconst messages = defineMessages({\r\n already_in_call: {\r\n id: 'already_in_call',\r\n defaultMessage: 'You already in an ongoing call!',\r\n description: 'Error message when the user tried to accept a new call without finishing pervious one',\r\n }\r\n});\r\n\r\nclass CallPanel extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n localStream: undefined,\r\n remoteStream: undefined,\r\n pc: undefined,\r\n dataChannel: undefined,\r\n\r\n previousOnInfo: undefined,\r\n waitingForPeer: false,\r\n // If true, the client has received a remote SDP from the peer and has sent a local SDP to the peer.\r\n callInitialSetupComplete: false,\r\n audioOnly: props.callAudioOnly,\r\n // Video mute/unmute in progress.\r\n videoToggleInProgress: false,\r\n // Indicates if the remote peer has informed us that their camera is on.\r\n remoteVideoLive: false,\r\n };\r\n\r\n this.localStreamConstraints = {\r\n audio: true,\r\n video: !props.callAudioOnly\r\n };\r\n this.isOutgoingCall = props.callState == CALL_STATE_OUTGOING_INITATED;\r\n\r\n this.localRef = React.createRef();\r\n this.remoteRef = React.createRef();\r\n // Cache for remote ice candidates until initial setup gets completed.\r\n this.remoteIceCandidatesCache = [];\r\n\r\n this.onInfo = this.onInfo.bind(this);\r\n this.start = this.start.bind(this);\r\n this.stop = this.stop.bind(this);\r\n\r\n this.createPeerConnection = this.createPeerConnection.bind(this);\r\n this.canSendOffer = this.canSendOffer.bind(this);\r\n this.drainRemoteIceCandidatesCache = this.drainRemoteIceCandidatesCache.bind(this);\r\n\r\n this.handleNegotiationNeededEvent = this.handleNegotiationNeededEvent.bind(this);\r\n this.handleICECandidateEvent = this.handleICECandidateEvent.bind(this);\r\n this.handleNewICECandidateMsg = this.handleNewICECandidateMsg.bind(this);\r\n this.handleICEConnectionStateChangeEvent = this.handleICEConnectionStateChangeEvent.bind(this);\r\n this.handleSignalingStateChangeEvent = this.handleSignalingStateChangeEvent.bind(this);\r\n this.handleICEGatheringStateChangeEvent = this.handleICEGatheringStateChangeEvent.bind(this);\r\n this.handleIceCandidateErrorEvent = this.handleIceCandidateErrorEvent.bind(this);\r\n this.handleTrackEvent = this.handleTrackEvent.bind(this);\r\n\r\n this.handleVideoOfferMsg = this.handleVideoOfferMsg.bind(this);\r\n this.handleVideoAnswerMsg = this.handleVideoAnswerMsg.bind(this);\r\n this.handleNewICECandidateMsg = this.handleNewICECandidateMsg.bind(this);\r\n\r\n this.reportError = this.reportError.bind(this);\r\n this.handleGetUserMediaError = this.handleGetUserMediaError.bind(this);\r\n\r\n this.stopTracks = this.stopTracks.bind(this);\r\n this.disconnectMedia = this.disconnectMedia.bind(this);\r\n\r\n this.handleCloseClick = this.handleCloseClick.bind(this);\r\n this.handleToggleCameraClick = this.handleToggleCameraClick.bind(this);\r\n this.handleToggleMicClick = this.handleToggleMicClick.bind(this);\r\n\r\n this.handleRemoteHangup = this.handleRemoteHangup.bind(this);\r\n this.handleVideoCallAccepted = this.handleVideoCallAccepted.bind(this);\r\n\r\n this.muteVideo = this.muteVideo.bind(this);\r\n this.unmuteVideo = this.unmuteVideo.bind(this);\r\n this.emptyVideoTrack = this.emptyVideoTrack.bind(this);\r\n\r\n this.handleDataChannelEvent = this.handleDataChannelEvent.bind(this);\r\n this.handleDataChannelError = this.handleDataChannelError.bind(this);\r\n this.handleDataChannelMessage = this.handleDataChannelMessage.bind(this);\r\n this.handleDataChannelOpen = this.handleDataChannelOpen.bind(this);\r\n this.handleDataChannelClose = this.handleDataChannelClose.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const topic = this.props.tinode.getTopic(this.props.topic);\r\n this.previousOnInfo = topic.onInfo;\r\n topic.onInfo = this.onInfo;\r\n if ((this.props.callState == CALL_STATE_OUTGOING_INITATED ||\r\n this.props.callState == CALL_STATE_IN_PROGRESS) && this.localRef.current) {\r\n this.start();\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n const topic = this.props.tinode.getTopic(this.props.topic);\r\n topic.onInfo = this.previousOnInfo;\r\n this.stop();\r\n }\r\n\r\n handleVideoCallAccepted(info) {\r\n RING_SOUND.pause();\r\n // Create peer connection with a data channel.\r\n const pc = this.createPeerConnection(true);\r\n const stream = this.state.localStream;\r\n stream.getTracks().forEach(track => {\r\n pc.addTrack(track, stream);\r\n\r\n if (track.kind == 'video' && this.state.audioOnly) {\r\n // This is an audio-only call.\r\n // Remove dummy video track (placeholder remains).\r\n track.enabled = false;\r\n track.stop();\r\n stream.removeTrack(track);\r\n }\r\n });\r\n }\r\n\r\n onInfo(info) {\r\n if (info.what != 'call') {\r\n return;\r\n }\r\n switch (info.event) {\r\n case 'accept':\r\n this.handleVideoCallAccepted(info);\r\n break;\r\n case 'answer':\r\n this.handleVideoAnswerMsg(info);\r\n break;\r\n case 'ice-candidate':\r\n this.handleNewICECandidateMsg(info);\r\n break;\r\n case 'hang-up':\r\n this.handleRemoteHangup(info);\r\n break;\r\n case 'offer':\r\n this.handleVideoOfferMsg(info);\r\n break;\r\n case 'ringing':\r\n // play() throws if the user did not click the app first: https://goo.gl/xX8pDD.\r\n RING_SOUND.play().catch(_ => {});\r\n break;\r\n default:\r\n console.warn(\"Unknown call event\", info.event);\r\n break;\r\n }\r\n }\r\n\r\n // Creates an empty video track placeholder.\r\n emptyVideoTrack() {\r\n const width = 640;\r\n const height = 480;\r\n const canvas = Object.assign(document.createElement(\"canvas\"), {width, height});\r\n canvas.getContext('2d').fillRect(0, 0, width, height);\r\n const stream = canvas.captureStream(0);\r\n return Object.assign(stream.getVideoTracks()[0], {enabled: false});\r\n }\r\n\r\n start() {\r\n if (this.state.localStream) {\r\n this.props.onError(this.props.intl.formatMessage(messages.already_in_call), 'info');\r\n return;\r\n }\r\n\r\n if (this.props.callState == CALL_STATE_IN_PROGRESS) {\r\n // We apparently just accepted the call.\r\n this.props.onInvite(this.props.topic, this.props.seq, CALL_STATE_IN_PROGRESS, this.props.callAudioOnly);\r\n return;\r\n }\r\n\r\n // This is an outgoing call waiting for the other side to pick up.\r\n // Start local video.\r\n navigator.mediaDevices.getUserMedia(this.localStreamConstraints)\r\n .then(stream => {\r\n if (!this.localStreamConstraints.video) {\r\n // Starting an audio-only call. Create a dummy video track\r\n // (so video can be enabled during the call if the user desires).\r\n stream.addTrack(this.emptyVideoTrack());\r\n }\r\n this.setState({localStream: stream, waitingForPeer: true});\r\n this.localRef.current.srcObject = stream;\r\n\r\n DIALING_SOUND.play();\r\n\r\n // Send call invitation.\r\n this.props.onInvite(this.props.topic, this.props.seq, this.props.callState, this.props.callAudioOnly);\r\n })\r\n .catch(this.handleGetUserMediaError);\r\n }\r\n\r\n stop() {\r\n CALL_ENDED_SOUND.pause();\r\n CALL_ENDED_SOUND.currentTime = 0;\r\n RING_SOUND.pause();\r\n RING_SOUND.currentTime = 0;\r\n\r\n this.stopTracks(this.state.localStream);\r\n this.stopTracks(this.state.remoteStream);\r\n this.disconnectMedia(this.localRef.current);\r\n this.disconnectMedia(this.remoteRef.current);\r\n if (this.state.pc) {\r\n this.state.pc.ontrack = null;\r\n this.state.pc.onremovetrack = null;\r\n this.state.pc.onremovestream = null;\r\n this.state.pc.onicecandidate = null;\r\n this.state.pc.oniceconnectionstatechange = null;\r\n this.state.pc.onsignalingstatechange = null;\r\n this.state.pc.onicegatheringstatechange = null;\r\n this.state.pc.onnegotiationneeded = null;\r\n this.state.pc.onicecandidateerror = null;\r\n this.state.pc.ondatachannel = null;\r\n\r\n if (this.state.dataChannel && (this.state.dataChannel.readyState == 'open' || this.state.dataChannel.readyState == 'connecting')) {\r\n this.state.dataChannel.close();\r\n }\r\n this.state.pc.close();\r\n }\r\n this.setState({pc: null, waitingForPeer: false});\r\n }\r\n\r\n disconnectMedia(el) {\r\n if (!el) {\r\n return;\r\n }\r\n\r\n el.srcObject = null;\r\n el.src = '';\r\n }\r\n\r\n stopTracks(stream) {\r\n if (!stream) {\r\n return;\r\n }\r\n\r\n let tracks = stream.getTracks();\r\n if (tracks) {\r\n tracks.forEach(track => {\r\n track.stop();\r\n track.enabled = false;\r\n });\r\n }\r\n }\r\n\r\n handleDataChannelError(error) {\r\n console.error('data channel error', error);\r\n }\r\n\r\n handleDataChannelMessage(event) {\r\n switch (event.data) {\r\n case VIDEO_MUTED_EVENT:\r\n this.setState({remoteVideoLive: false}, _ => { this.remoteRef.current.srcObject = this.state.remoteStream; });\r\n break;\r\n case VIDEO_UNMUTED_EVENT:\r\n this.setState({remoteVideoLive: true}, _ => { this.remoteRef.current.srcObject = this.state.remoteStream; });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n handleDataChannelOpen(event) {\r\n if (!this.state.audioOnly) {\r\n event.target.send(VIDEO_UNMUTED_EVENT);\r\n }\r\n }\r\n\r\n handleDataChannelClose(event) {\r\n console.log('close data channel:', event);\r\n }\r\n\r\n handleDataChannelEvent(event) {\r\n console.log('data channel event:', event);\r\n const channel = event.channel;\r\n channel.onerror = this.handleDataChannelError;\r\n channel.onmessage = this.handleDataChannelMessage;\r\n channel.onopen = this.handleDataChannelOpen;\r\n channel.onclose = this.handleDataChannelClose;\r\n this.setState({dataChannel: channel});\r\n }\r\n\r\n createPeerConnection(withDataChannel) {\r\n const iceServers = this.props.tinode.getServerParam('iceServers', null);\r\n const pc = iceServers ? new RTCPeerConnection({iceServers: iceServers}) : new RTCPeerConnection();\r\n\r\n pc.onicecandidate = this.handleICECandidateEvent;\r\n pc.oniceconnectionstatechange = this.handleICEConnectionStateChangeEvent;\r\n pc.onicegatheringstatechange = this.handleICEGatheringStateChangeEvent;\r\n pc.onsignalingstatechange = this.handleSignalingStateChangeEvent;\r\n pc.onnegotiationneeded = this.handleNegotiationNeededEvent;\r\n pc.onicecandidateerror = this.handleIceCandidateErrorEvent;\r\n pc.ontrack = this.handleTrackEvent;\r\n pc.ondatachannel = this.handleDataChannelEvent;\r\n\r\n let stateUpdate = {pc: pc, waitingForPeer: false};\r\n if (withDataChannel) {\r\n // Create data channel for exchanging events.\r\n const channel = pc.createDataChannel(\"events\", {ordered: true});\r\n channel.onerror = this.handleDataChannelError;\r\n channel.onmessage = this.handleDataChannelMessage;\r\n channel.onopen = this.handleDataChannelOpen;\r\n channel.onclose = this.handleDataChannelClose;\r\n stateUpdate.dataChannel = channel;\r\n }\r\n this.setState(stateUpdate);\r\n return pc;\r\n }\r\n\r\n handleVideoAnswerMsg(info) {\r\n // Configure the remote description, which is the SDP payload\r\n // in 'info' message.\r\n const desc = new RTCSessionDescription(info.payload);\r\n this.state.pc.setRemoteDescription(desc)\r\n .then(_ => {\r\n this.setState({ callInitialSetupComplete: true }, _ => this.drainRemoteIceCandidatesCache());\r\n })\r\n .catch(err => this.reportError(err));\r\n }\r\n\r\n reportError(err) {\r\n this.props.onError(err.message, 'err');\r\n }\r\n\r\n canSendOffer() {\r\n return this.isOutgoingCall || this.state.callInitialSetupComplete;\r\n }\r\n\r\n handleNegotiationNeededEvent(event) {\r\n const pc = event.target;\r\n if (!this.canSendOffer()) {\r\n return;\r\n }\r\n pc.createOffer().then(offer => {\r\n return pc.setLocalDescription(offer);\r\n })\r\n .then(_ => {\r\n this.props.onSendOffer(this.props.topic, this.props.seq, pc.localDescription.toJSON());\r\n })\r\n .catch(err => this.reportError(err));\r\n }\r\n\r\n handleIceCandidateErrorEvent(event) {\r\n console.warn(\"ICE candidate error:\", event);\r\n }\r\n\r\n handleICECandidateEvent(event) {\r\n if (event.candidate) {\r\n this.props.onIceCandidate(this.props.topic, this.props.seq, event.candidate.toJSON());\r\n }\r\n }\r\n\r\n handleNewICECandidateMsg(info) {\r\n const candidate = new RTCIceCandidate(info.payload);\r\n if (this.state.callInitialSetupComplete) {\r\n this.state.pc.addIceCandidate(candidate)\r\n .catch(err => {\r\n if (candidate.candidate) {\r\n this.reportError(err);\r\n }\r\n console.warn(\"Error adding new ice candidate\", candidate, err);\r\n });\r\n } else {\r\n this.remoteIceCandidatesCache.push(candidate);\r\n }\r\n }\r\n\r\n drainRemoteIceCandidatesCache() {\r\n this.remoteIceCandidatesCache.forEach(candidate => {\r\n this.state.pc.addIceCandidate(candidate)\r\n .catch(err => {\r\n if (candidate.candidate) {\r\n this.reportError(err);\r\n }\r\n console.warn(\"Error adding cached ice candidate\", candidate, err);\r\n });\r\n });\r\n this.remoteIceCandidatesCache = [];\r\n }\r\n\r\n handleICEConnectionStateChangeEvent(event) {\r\n switch (event.target.iceConnectionState) {\r\n case 'closed':\r\n case 'failed':\r\n this.handleCloseClick();\r\n break;\r\n }\r\n }\r\n\r\n handleSignalingStateChangeEvent(event) {\r\n if (event.target.signalingState == 'closed') {\r\n this.handleCloseClick();\r\n }\r\n }\r\n\r\n handleICEGatheringStateChangeEvent(event) {\r\n // ICE gathering change state\r\n }\r\n\r\n handleTrackEvent(event) {\r\n // Remote video becomes available.\r\n this.remoteRef.current.srcObject = event.streams[0];\r\n this.setState({remoteStream: event.streams[0]});\r\n }\r\n\r\n handleGetUserMediaError(e) {\r\n console.error(\"Error opening camera and/or microphone\", e);\r\n switch(e.name) {\r\n case 'NotFoundError':\r\n // Cannot start the call b/c no camera and/or microphone found.\r\n this.reportError(e);\r\n break;\r\n case 'SecurityError':\r\n case 'PermissionDeniedError':\r\n // Do nothing; this is the same as the user canceling the call.\r\n break;\r\n default:\r\n this.reportError(e);\r\n break;\r\n }\r\n\r\n // Make sure we shut down our end of the RTCPeerConnection so we're\r\n // ready to try again.\r\n this.handleCloseClick();\r\n }\r\n\r\n handleVideoOfferMsg(info) {\r\n let localStream = null;\r\n // If needed, create peer connection.\r\n // Not creating data channel since it should be created by the peer.\r\n const pc = this.state.pc ? this.state.pc : this.createPeerConnection(false);\r\n const desc = new RTCSessionDescription(info.payload);\r\n\r\n pc.setRemoteDescription(desc).then(_ => {\r\n return navigator.mediaDevices.getUserMedia(this.localStreamConstraints);\r\n })\r\n .then(stream => {\r\n let dummyVideo;\r\n if (!this.localStreamConstraints.video) {\r\n // Starting an audio-only call. Create an empty video track so\r\n // so the user can enable the video during the call.\r\n dummyVideo = this.emptyVideoTrack();\r\n stream.addTrack(dummyVideo);\r\n }\r\n localStream = stream;\r\n this.localRef.current.srcObject = stream;\r\n this.setState({localStream: stream});\r\n\r\n localStream.getTracks().forEach(track => {\r\n pc.addTrack(track, localStream);\r\n });\r\n\r\n if (dummyVideo) {\r\n dummyVideo.enabled = false;\r\n dummyVideo.stop();\r\n stream.removeTrack(dummyVideo);\r\n }\r\n })\r\n .then(_ => {\r\n return pc.createAnswer();\r\n })\r\n .then(answer => {\r\n return pc.setLocalDescription(answer);\r\n })\r\n .then(_ => {\r\n this.props.onSendAnswer(this.props.topic, this.props.seq, pc.localDescription.toJSON());\r\n this.setState({ callInitialSetupComplete: true }, _ => this.drainRemoteIceCandidatesCache());\r\n })\r\n .catch(this.handleGetUserMediaError);\r\n }\r\n\r\n // Call disconnected by remote.\r\n handleRemoteHangup() {\r\n if (!this.state.waitingForPeer) {\r\n // This is live call, just hang up.\r\n this.handleCloseClick();\r\n } else {\r\n // This is a call which is not yet connected.\r\n // Stop pulse animation.\r\n this.setState({waitingForPeer: false});\r\n // Change sound and wait a bit before ending it.\r\n RING_SOUND.pause();\r\n RING_SOUND.currentTime = 0;\r\n CALL_ENDED_SOUND.loop = true;\r\n CALL_ENDED_SOUND.play().catch(_ => {});\r\n setTimeout(_ => {\r\n this.handleCloseClick();\r\n }, 2000);\r\n }\r\n }\r\n\r\n handleCloseClick() {\r\n this.stop();\r\n this.props.onHangup(this.props.topic, this.props.seq);\r\n }\r\n\r\n // Ends video track and turns off the camera.\r\n muteVideo() {\r\n if (!this.state.pc || !this.state.dataChannel) {\r\n return;\r\n }\r\n\r\n const stream = this.state.localStream;\r\n const t = stream.getVideoTracks()[0];\r\n t.enabled = false;\r\n t.stop();\r\n\r\n stream.removeTrack(t);\r\n this.state.dataChannel.send(VIDEO_MUTED_EVENT);\r\n this.setState({videoToggleInProgress: false});\r\n }\r\n\r\n unmuteVideo() {\r\n if (!this.state.pc || !this.state.dataChannel) {\r\n return;\r\n }\r\n navigator.mediaDevices.getUserMedia({ video: true })\r\n .then(stream => {\r\n // Will extract video track from stream and throw stream away,\r\n // and replace video track in the media sender.\r\n this.localRef.current.srcObject = null;\r\n const sender = this.state.pc.getSenders().find(s => s.track.kind == 'video');\r\n const track = stream.getVideoTracks()[0];\r\n // Remote track from new stream.\r\n stream.removeTrack(track);\r\n // Add this track to the existing local stream.\r\n this.state.localStream.addTrack(track);\r\n return sender.replaceTrack(track);\r\n })\r\n .then(_ => {\r\n this.localRef.current.srcObject = this.state.localStream;\r\n this.state.dataChannel.send(VIDEO_UNMUTED_EVENT);\r\n })\r\n .catch(err => this.handleGetUserMediaError(err))\r\n .finally(_ => { this.setState({videoToggleInProgress: false}); }); // Make sure we redraw the mute/unmute icons (e.g. camera -> camera_off).\r\n }\r\n\r\n handleToggleCameraClick() {\r\n if (this.state.videoToggleInProgress) {\r\n // Toggle currently in progress.\r\n return;\r\n }\r\n const tracks = this.state.localStream.getVideoTracks();\r\n this.setState({videoToggleInProgress: true}, _ => {\r\n if (tracks && tracks.length > 0 && tracks[0].enabled && tracks[0].readyState == 'live') {\r\n this.muteVideo();\r\n } else {\r\n this.unmuteVideo();\r\n }\r\n this.setState({audioOnly: !this.state.audioOnly});\r\n });\r\n }\r\n\r\n handleToggleMicClick() {\r\n const stream = this.state.localStream;\r\n const t = stream.getAudioTracks()[0];\r\n t.enabled = !t.enabled;\r\n // Make sure we redraw the mute/unmute icons (e.g. mic -> mic_off).\r\n this.forceUpdate();\r\n }\r\n\r\n render() {\r\n const audioTracks = this.state.localStream && this.state.localStream.getAudioTracks();\r\n const videoTracks = !this.state.audioOnly && this.state.localStream && this.state.localStream.getVideoTracks();\r\n const disabled = !this.state.pc || !this.state.dataChannel || !(audioTracks && audioTracks[0]);\r\n const audioIcon = audioTracks && audioTracks[0] && audioTracks[0].enabled ? 'mic' : 'mic_off';\r\n const videoIcon = videoTracks && videoTracks[0] && videoTracks[0].enabled && videoTracks[0].readyState == 'live' ? 'videocam' : 'videocam_off';\r\n const peerTitle = clipStr(this.props.title, MAX_PEER_TITLE_LENGTH);\r\n const pulseAnimation = this.state.waitingForPeer ? ' pulse' : '';\r\n\r\n let remoteActive = false;\r\n if (this.remoteRef.current && this.remoteRef.current.srcObject && this.state.remoteVideoLive) {\r\n const rstream = this.remoteRef.current.srcObject;\r\n if (rstream.getVideoTracks().length > 0) {\r\n const t = rstream.getVideoTracks()[0];\r\n remoteActive = t.enabled && t.readyState == 'live';\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n {remoteActive ?\r\n <>\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n );\r\n }\r\n};\r\n\r\nexport default injectIntl(CallPanel);\r\n","import React from 'react';\r\nimport { FormattedMessage } from 'react-intl';\r\n\r\nimport FileProgress from './file-progress.jsx';\r\nimport { bytesToHumanSize } from '../lib/strformat.js';\r\nimport { isUrlRelative, sanitizeUrl } from '../lib/utils.js';\r\n\r\nexport default class Attachment extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n downloader: null,\r\n progress: 0\r\n };\r\n\r\n this.downloadFile = this.downloadFile.bind(this);\r\n this.handleCancel = this.handleCancel.bind(this);\r\n }\r\n\r\n downloadFile(url, filename, mimetype) {\r\n if (!url) {\r\n this.props.onError(\"Invalid download URL '\" + url + \"'\");\r\n return;\r\n }\r\n\r\n const downloader = this.props.tinode.getLargeFileHelper();\r\n this.setState({downloader: downloader});\r\n downloader.download(url, filename, mimetype,\r\n loaded => this.setState({progress: loaded / this.props.size}),\r\n err => this.props.onError(err, 'err')\r\n )\r\n .then(_ => this.setState({downloader: null, progress: 0}))\r\n .catch(err => {\r\n if (err) {\r\n this.props.onError(\"Error downloading file: \" + err.message, 'err');\r\n }\r\n this.setState({downloader: null, progress: 0});\r\n });\r\n }\r\n\r\n handleCancel() {\r\n if (this.props.uploading) {\r\n this.props.onCancelUpload();\r\n } else if (this.state.downloader) {\r\n this.state.downloader.cancel();\r\n }\r\n }\r\n\r\n render() {\r\n let filename = this.props.filename || 'file_attachment';\r\n if (filename.length > 36) {\r\n filename = filename.substr(0, 16) + '...' + filename.substr(-16);\r\n }\r\n let size = this.props.size > 0 ?\r\n ({bytesToHumanSize(this.props.size)}) :\r\n null;\r\n\r\n // Detect if the download URL is relative or absolute.\r\n // If the URL is relative use LargeFileHelper to attach authentication\r\n // credentials to the request.\r\n let url, helperFunc;\r\n if (!this.props.uploading && !this.state.downloader && isUrlRelative(this.props.downloadUrl)) {\r\n // Relative URL. Use download helper.\r\n url = '#';\r\n helperFunc = (e) => {\r\n e.preventDefault();\r\n this.downloadFile(this.props.downloadUrl, this.props.filename, this.props.mimetype);\r\n };\r\n } else {\r\n url = sanitizeUrl(this.props.downloadUrl);\r\n helperFunc = null;\r\n }\r\n const downloadWidget = <>file_download ;\r\n return (\r\n
    \r\n
    insert_drive_file
    \r\n
    \r\n
    {filename} {size}
    \r\n {this.props.uploading || this.state.downloader ?\r\n \r\n :\r\n
    {url ?\r\n {downloadWidget}\r\n :\r\n {downloadWidget}\r\n }
    \r\n }\r\n
    \r\n
    \r\n );\r\n }\r\n};\r\n","// Received/read indicator.\r\nimport React from 'react';\r\nimport { defineMessages, injectIntl } from 'react-intl';\r\n\r\nimport { Tinode } from 'tinode-sdk';\r\n\r\nimport { deliveryMarker } from '../lib/utils.js';\r\n\r\nconst messages = defineMessages({\r\n message_sending: {\r\n id: 'message_sending',\r\n defaultMessage: 'sending...',\r\n description: 'Message being sent, in place of time stamp'\r\n },\r\n message_sending_failed: {\r\n id: 'message_sending_failed',\r\n defaultMessage: 'failed',\r\n description: 'Failed to send message, in place of time stamp'\r\n },\r\n message_edited_marker: {\r\n id: 'message_edited_marker',\r\n defaultMessage: ', edited',\r\n description: 'Marker indicating that the message was edited'\r\n }\r\n});\r\n\r\nclass ReceivedMarker extends React.PureComponent {\r\n render() {\r\n const {formatMessage} = this.props.intl;\r\n let timestamp;\r\n if (this.props.received <= Tinode.MESSAGE_STATUS_SENDING) {\r\n timestamp = formatMessage(messages.message_sending);\r\n } else if (this.props.received == Tinode.MESSAGE_STATUS_FAILED ||\r\n this.props.received == Tinode.MESSAGE_STATUS_FATAL) {\r\n timestamp = formatMessage(messages.message_sending_failed);\r\n } else {\r\n timestamp = this.props.timestamp.toLocaleTimeString(this.props.intl.locale, { timeStyle: 'short' });\r\n }\r\n\r\n const icon = deliveryMarker(this.props.received);\r\n const marker = icon ? {icon.name} : null;\r\n const edited = this.props.edited ? formatMessage(messages.message_edited_marker) : null;\r\n\r\n return (\r\n \r\n {timestamp}{edited}{'\\u00a0'}{marker}\r\n \r\n );\r\n }\r\n};\r\n\r\nexport default injectIntl(ReceivedMarker);\r\n","// Single chat message bubble, sent or received.\r\n\r\nimport React from 'react';\r\nimport { FormattedMessage, injectIntl } from 'react-intl';\r\nimport { Drafty, Tinode } from 'tinode-sdk';\r\n\r\nimport Attachment from './attachment.jsx';\r\nimport LetterTile from './letter-tile.jsx';\r\nimport ReceivedMarker from './received-marker.jsx'\r\n\r\nimport { fullFormatter } from '../lib/formatters.js';\r\nimport { sanitizeUrl } from '../lib/utils.js';\r\n\r\nclass BaseChatMessage extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n progress: 0\r\n };\r\n\r\n if (props.uploader) {\r\n props.uploader.onProgress = this.handleProgress.bind(this);\r\n }\r\n\r\n this.handleExpandImage = this.handleExpandImage.bind(this);\r\n this.handlePlayVideo = this.handlePlayVideo.bind(this);\r\n this.handleFormButtonClick = this.handleFormButtonClick.bind(this);\r\n this.handleContextClick = this.handleContextClick.bind(this);\r\n this.handleCancelUpload = this.handleCancelUpload.bind(this);\r\n this.handleQuoteClick = this.handleQuoteClick.bind(this);\r\n\r\n this.formatterContext = {\r\n formatMessage: props.intl.formatMessage.bind(props.intl),\r\n viewportWidth: props.viewportWidth,\r\n authorizeURL: props.tinode.authorizeURL.bind(props.tinode),\r\n\r\n onImagePreview: this.handleExpandImage,\r\n onVideoPreview: this.handlePlayVideo,\r\n onFormButtonClick: this.handleFormButtonClick,\r\n onQuoteClick: this.handleQuoteClick\r\n };\r\n }\r\n\r\n handleExpandImage(e) {\r\n e.preventDefault();\r\n this.props.onExpandMedia({\r\n url: e.target.src,\r\n filename: e.target.dataset.name,\r\n width: e.target.dataset.width,\r\n height: e.target.dataset.height,\r\n size: e.target.dataset.size,\r\n type: e.target.dataset.mime\r\n });\r\n }\r\n\r\n handlePlayVideo(e) {\r\n e.preventDefault();\r\n this.props.onExpandMedia({\r\n video: true,\r\n url: e.target.dataset.src,\r\n preview: e.target.src,\r\n filename: e.target.dataset.name,\r\n width: e.target.dataset.width,\r\n height: e.target.dataset.height,\r\n duration: e.target.dataset.duration,\r\n size: e.target.dataset.size,\r\n type: e.target.dataset.mime\r\n });\r\n }\r\n\r\n handleFormButtonClick(e) {\r\n e.preventDefault();\r\n const data = {\r\n seq: this.props.seq\r\n };\r\n data.resp = {};\r\n if (e.target.dataset.name) {\r\n data.resp[e.target.dataset.name] = e.target.dataset.val ? e.target.dataset.val :\r\n e.target.dataset.val === undefined ? 1 : '' + e.target.dataset.val;\r\n }\r\n if (e.target.dataset.act == 'url') {\r\n data.ref = sanitizeUrl(e.target.dataset.ref) || 'about:blank';\r\n }\r\n const text = e.target.dataset.title || 'unknown';\r\n this.props.onFormResponse(e.target.dataset.act, text, data);\r\n }\r\n\r\n handleContextClick(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const menuItems = [];\r\n if (this.props.received == Tinode.MESSAGE_STATUS_FAILED) {\r\n menuItems.push('menu_item_send_retry');\r\n }\r\n if (this.props.userIsWriter && this.props.received > Tinode.MESSAGE_STATUS_FATAL) {\r\n menuItems.push('menu_item_reply');\r\n if (!this.props.response) {\r\n let immutable = false;\r\n Drafty.entities(this.props.content, (_0, _1, tp) => {\r\n immutable = ['AU', 'EX', 'FM', 'IM', 'VC', 'VD'].includes(tp);\r\n return immutable;\r\n });\r\n if (!immutable) {\r\n Drafty.styles(this.props.content, tp => {\r\n immutable = ['QQ'].includes(tp);\r\n return immutable;\r\n });\r\n }\r\n if (!immutable) {\r\n menuItems.push('menu_item_edit');\r\n }\r\n }\r\n }\r\n menuItems.push('menu_item_forward');\r\n\r\n this.props.showContextMenu({\r\n seq: this.props.seq,\r\n replace: this.props.edited ? parseInt(this.props.edited.split(':')[1]) : 0,\r\n content: this.props.content,\r\n userFrom: this.props.userFrom,\r\n userName: this.props.userName,\r\n y: e.pageY,\r\n x: e.pageX,\r\n pickReply: this.props.pickReply,\r\n editMessage: this.props.editMessage,\r\n }, menuItems);\r\n }\r\n\r\n handleProgress(ratio) {\r\n this.setState({progress: ratio});\r\n }\r\n\r\n handleCancelUpload() {\r\n this.props.onCancelUpload(this.props.seq, this.props.uploader);\r\n }\r\n\r\n handleQuoteClick(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const replyToSeq = this.props.replyToSeq;\r\n if (replyToSeq) {\r\n this.props.onQuoteClick(replyToSeq);\r\n }\r\n }\r\n\r\n render() {\r\n const sideClass = this.props.sequence + ' ' + (this.props.response ? 'left' : 'right');\r\n const bubbleClass = (this.props.sequence == 'single' || this.props.sequence == 'last') ? 'bubble tip' : 'bubble';\r\n const avatar = this.props.userAvatar || true;\r\n const fullDisplay = (this.props.isGroup && this.props.response &&\r\n (this.props.sequence == 'single' || this.props.sequence == 'last'));\r\n\r\n let content = this.props.content;\r\n const attachments = [];\r\n if (this.props.mimeType == Drafty.getContentType() && Drafty.isValid(content)) {\r\n Drafty.attachments(content, (att, i) => {\r\n if (att.mime == 'application/json') {\r\n // Don't show json objects as attachments.\r\n // They are not meant for users.\r\n return;\r\n }\r\n attachments.push();\r\n }, this);\r\n const tree = Drafty.format(content, fullFormatter, this.formatterContext);\r\n content = React.createElement(React.Fragment, null, tree);\r\n } else if (typeof content != 'string') {\r\n content = <>warning_amber \r\n \r\n }\r\n\r\n return (\r\n
  • \r\n {this.props.isGroup && this.props.response ?\r\n
    \r\n {fullDisplay ?\r\n :\r\n null}\r\n
    :\r\n null}\r\n
    \r\n
    \r\n
    \r\n
    \r\n {content}\r\n {attachments}\r\n
    \r\n {this.props.timestamp ?\r\n \r\n : null}\r\n
    \r\n {this.props.showContextMenu ?\r\n \r\n \r\n expand_more\r\n \r\n : null\r\n }\r\n
    \r\n {fullDisplay ?\r\n
    \r\n {this.props.userName ||\r\n \r\n }\r\n
    \r\n : null\r\n }\r\n
    \r\n
  • \r\n );\r\n }\r\n};\r\n\r\nconst IntlChatMessage = injectIntl(BaseChatMessage);\r\nconst ChatMessage = React.forwardRef((props, ref) => );\r\n\r\nexport default ChatMessage;\r\n","// Send message form.\r\nimport React, { Suspense } from 'react';\r\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\r\nimport { Drafty } from 'tinode-sdk';\r\n\r\n// Lazy-loading AudioRecorder because it's quite large due to\r\n// a dependency on webm-duration-fix.\r\nconst AudioRecorder = React.lazy(_ => import('./audio-recorder.jsx'));\r\n\r\nimport { KEYPRESS_DELAY } from '../config.js';\r\nimport { filePasted } from '../lib/blob-helpers.js';\r\nimport { replyFormatter } from '../lib/formatters.js';\r\n\r\nconst messages = defineMessages({\r\n messaging_disabled: {\r\n id: 'messaging_disabled_prompt',\r\n defaultMessage: 'Messaging disabled',\r\n description: 'Prompt in SendMessage in read-only topic'\r\n },\r\n type_new_message: {\r\n id: 'new_message_prompt',\r\n defaultMessage: 'New message',\r\n description: 'Prompt in send message field'\r\n },\r\n add_image_caption: {\r\n id: 'image_caption_prompt',\r\n defaultMessage: 'Image caption',\r\n description: 'Prompt in SendMessage for attached image'\r\n },\r\n file_attachment_too_large: {\r\n id: 'file_attachment_too_large',\r\n defaultMessage: 'The file size {size} exceeds the {limit} limit.',\r\n description: 'Error message when attachment is too large'\r\n },\r\n cannot_initiate_upload: {\r\n id: 'cannot_initiate_file_upload',\r\n defaultMessage: 'Cannot initiate file upload.',\r\n description: 'Generic error messagewhen attachment fails'\r\n },\r\n icon_title_record_voice: {\r\n id: 'icon_title_record_voice',\r\n defaultMessage: 'Record voice message',\r\n description: 'Icon tool tip for recording a voice message'\r\n },\r\n icon_title_attach_file: {\r\n id: 'icon_title_attach_file',\r\n defaultMessage: 'Attach file',\r\n description: 'Icon tool tip for attaching a file'\r\n },\r\n icon_title_add_image: {\r\n id: 'icon_title_add_image',\r\n defaultMessage: 'Add image',\r\n description: 'Icon tool tip for attaching an image'\r\n },\r\n icon_title_send: {\r\n id: 'icon_title_send',\r\n defaultMessage: 'Send message',\r\n description: 'Icon tool tip for sending a message'\r\n },\r\n});\r\n\r\nclass SendMessage extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n quote: null,\r\n message: '',\r\n audioRec: false,\r\n audioAvailable: !!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia),\r\n };\r\n\r\n // Timestamp when the previous key press was sent to the server.\r\n this.keypressTimestamp = 0;\r\n\r\n this.handlePasteEvent = this.handlePasteEvent.bind(this);\r\n this.handleAttachImage = this.handleAttachImage.bind(this);\r\n this.handleAttachFile = this.handleAttachFile.bind(this);\r\n this.handleAttachAudio = this.handleAttachAudio.bind(this);\r\n this.handleSend = this.handleSend.bind(this);\r\n this.handleKeyPress = this.handleKeyPress.bind(this);\r\n this.handleMessageTyping = this.handleMessageTyping.bind(this);\r\n this.handleDropAttach = this.handleDropAttach.bind(this);\r\n\r\n this.handleQuoteClick = this.handleQuoteClick.bind(this);\r\n\r\n this.formatReply = this.formatReply.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n if (this.messageEditArea) {\r\n this.messageEditArea.addEventListener('paste', this.handlePasteEvent, false);\r\n if (window.getComputedStyle(this.messageEditArea).getPropertyValue('transition-property') == 'all') {\r\n // Set focus on desktop, but not on mobile: focus causes soft keyboard to pop up.\r\n this.messageEditArea.focus();\r\n }\r\n }\r\n\r\n this.setState({quote: this.formatReply()});\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.messageEditArea) {\r\n this.messageEditArea.removeEventListener('paste', this.handlePasteEvent, false);\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (this.messageEditArea) {\r\n if (window.getComputedStyle(this.messageEditArea).getPropertyValue('transition-property') == 'all') {\r\n // Set focus on desktop, but not on mobile: focus causes soft keyboard to pop up.\r\n this.messageEditArea.focus();\r\n }\r\n\r\n // Adjust height of the message area for the amount of text.\r\n this.messageEditArea.style.height = '0px';\r\n this.messageEditArea.style.height = this.messageEditArea.scrollHeight + 'px';\r\n }\r\n\r\n if (prevProps.topicName != this.props.topicName) {\r\n this.setState({message: this.props.initMessage || '', audioRec: false, quote: null});\r\n } else if (prevProps.initMessage != this.props.initMessage) {\r\n const msg = this.props.initMessage || '';\r\n this.setState({message: msg}, _ => {\r\n // If there is text, scroll to bottom and set caret to the end.\r\n this.messageEditArea.scrollTop = this.messageEditArea.scrollHeight;\r\n this.messageEditArea.setSelectionRange(msg.length, msg.length);\r\n });\r\n }\r\n if (prevProps.reply != this.props.reply) {\r\n this.setState({quote: this.formatReply()});\r\n }\r\n }\r\n\r\n formatReply() {\r\n return this.props.reply ?\r\n Drafty.format(this.props.reply.content, replyFormatter, {\r\n formatMessage: this.props.intl.formatMessage.bind(this.props.intl),\r\n authorizeURL: this.props.tinode.authorizeURL.bind(this.props.tinode)\r\n }) : null;\r\n }\r\n\r\n handlePasteEvent(e) {\r\n if (this.props.disabled) {\r\n return;\r\n }\r\n // FIXME: handle large files too.\r\n if (filePasted(e,\r\n file => { this.props.onAttachImage(file); },\r\n file => { this.props.onAttachFile(file); },\r\n this.props.onError)) {\r\n\r\n // If a file was pasted, don't paste base64 data into input field.\r\n e.preventDefault();\r\n }\r\n }\r\n\r\n handleAttachImage(e) {\r\n if (e.target.files && e.target.files.length > 0) {\r\n this.props.onAttachImage(e.target.files[0]);\r\n }\r\n // Clear the value so the same file can be uploaded again.\r\n e.target.value = '';\r\n }\r\n\r\n handleAttachFile(e) {\r\n if (e.target.files && e.target.files.length > 0) {\r\n this.props.onAttachFile(e.target.files[0]);\r\n }\r\n // Clear the value so the same file can be uploaded again.\r\n e.target.value = '';\r\n }\r\n\r\n handleDropAttach(files) {\r\n if (files && files.length > 0) {\r\n this.props.onAttachFile(files[0]);\r\n }\r\n }\r\n\r\n handleAttachAudio(url, preview, duration) {\r\n this.setState({audioRec: false});\r\n this.props.onAttachAudio(url, preview, duration);\r\n }\r\n\r\n handleSend(e) {\r\n e.preventDefault();\r\n const message = this.state.message.trim();\r\n if (message || this.props.acceptBlank || this.props.noInput) {\r\n this.props.onSendMessage(message);\r\n this.setState({message: ''});\r\n }\r\n }\r\n\r\n /* Send on Enter key */\r\n handleKeyPress(e) {\r\n if (this.state.audioRec) {\r\n // Ignore key presses while audio is being recorded.\r\n e.preventDefault();\r\n e.stopPropagation();\r\n return;\r\n }\r\n\r\n // Remove this if you don't want Enter to trigger send\r\n if (e.key === 'Enter') {\r\n // Have Shift-Enter insert a line break instead\r\n if (!e.shiftKey) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n this.handleSend(e);\r\n }\r\n }\r\n }\r\n\r\n handleMessageTyping(e) {\r\n this.setState({message: e.target.value});\r\n if (this.props.onKeyPress) {\r\n const now = new Date().getTime();\r\n if (now - this.keypressTimestamp > KEYPRESS_DELAY) {\r\n this.props.onKeyPress();\r\n this.keypressTimestamp = now;\r\n }\r\n }\r\n }\r\n\r\n handleQuoteClick(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (this.props.reply && this.props.onQuoteClick) {\r\n const replyToSeq = this.props.reply.seq;\r\n this.props.onQuoteClick(replyToSeq);\r\n }\r\n }\r\n\r\n render() {\r\n const { formatMessage } = this.props.intl;\r\n const prompt = this.props.disabled ?\r\n formatMessage(messages.messaging_disabled) :\r\n (this.props.messagePrompt ?\r\n formatMessage(messages[this.props.messagePrompt]) :\r\n formatMessage(messages.type_new_message));\r\n\r\n const sendIcon = (this.props.reply && this.props.reply.editing) ?\r\n 'check_circle' : 'send';\r\n\r\n const quote = this.state.quote ?\r\n (
    \r\n \r\n {this.state.quote}\r\n
    ) : null;\r\n const audioEnabled = this.state.audioAvailable && this.props.onAttachAudio;\r\n return (\r\n
    \r\n {!this.props.noInput ? quote : null}\r\n
    \r\n {!this.props.disabled ?\r\n <>\r\n {this.props.onAttachFile && !this.state.audioRec ?\r\n <>\r\n {e.preventDefault(); this.attachImage.click();}} title={formatMessage(messages.icon_title_add_image)}>\r\n photo\r\n \r\n {e.preventDefault(); this.attachFile.click();}} title={formatMessage(messages.icon_title_attach_file)}>\r\n attach_file\r\n \r\n \r\n :\r\n null}\r\n {this.props.noInput ?\r\n (quote ||
    ) :\r\n (this.state.audioRec ?\r\n (
    }>\r\n this.props.onKeyPress(true)}\r\n onDeleted={_ => this.setState({audioRec: false})}\r\n onFinished={this.handleAttachAudio}/>\r\n ) :\r\n