tweb/public/2.9b0721de7ac36470955e.chunk.js.map
wang chenyu 0a61727f1b Check isComposing for send shortcut for IME users (#11)
* Check isComposing for send shortcut
2021-05-01 20:47:43 +03:00

1 line
58 KiB
Plaintext

{"version":3,"sources":["webpack:///./src/lib/mtproto/mtproto.worker.ts","webpack:///./src/lib/webp/webp.worker.ts","webpack:///./src/lib/mtproto/transports/websocket.ts","webpack:///./src/lib/mtproto/mtprotoworker.ts","webpack:///./src/lib/crypto/crypto_methods.ts","webpack:///./src/helpers/bytes.ts","webpack:///./src/lib/langPack.ts","webpack:///./src/lib/webp/webpWorkerController.ts"],"names":["module","exports","Worker","dcId","url","logSuffix","super","debug","handleOpen","this","log","dispatchEvent","handleError","e","error","close","handleClose","removeListeners","handleMessage","event","data","byteLength","send","body","length","ws","logTypes","Error","Log","Debug","logger","connect","removeEventListener","undefined","WebSocket","binaryType","addEventListener","err","apiManagerProxy","bytes","performTaskWorker","buffer","salt","iterations","keyBytes","ivBytes","encryptedBytes","then","publicKey","x","y","m","toString","password","state","isNew","afterMessageIdTemp","taskId","awaiting","pending","updatesProcessor","hashes","apiPromisesSingle","apiPromisesCacheable","isSWRegistered","sockets","Map","taskListeners","onWorkerMessage","task","callback","type","update","progress","rootScope","broadcast","hasOwnProperty","finalizeTask","result","registerServiceWorker","addTaskListener","location","reload","payload","webpWorkerController","postMessage","socketTask","id","get","socket","onOpen","onClose","onMessage","delete","set","registerWorker","navigator","worker","serviceWorker","register","scope","registration","installing","waiting","active","onServiceWorkerFail","warn","releasePending","controller","bind","isWebpSupported","name","onWorkerFirstMessage","once","deferred","taskName","reject","resolve","args","Promise","params","push","forEach","method","options","o","prepareTempMessageId","messageId","invokeApi","queryJSON","JSON","stringify","cached","hash","_","includes","q","finally","cache","item","override","fulfilled","promise","timeout","clearTimeout","cacheSeconds","window","setTimeout","timestamp","Date","now","verify","queueId","userAuth","dc_id","fileName","enabled","bytesToHex","arr","i","join","bytesFromHex","hexString","len","start","parseInt","charAt","substr","bytesToBase64","mod3","nLen","nUint24","nIdx","String","fromCharCode","uint6ToBase64","replace","nUint6","bytesCmp","bytes1","bytes2","convertToArrayBuffer","ArrayBuffer","BYTES_PER_ELEMENT","Uint8Array","bufferConcats","b","tmp","lastLength","langPack","I18n","pluralRules","cacheLangPackPromise","loadLocalLangPack","defaultCode","langPackCode","lastRequestedLangCode","all","lang","langSign","strings","formatLocalStrings","default","saveLangPack","from_version","lang_code","version","local","loadLangPack","langCode","requestedServerLanguage","invokeApiCacheable","lang_pack","polyfillPromise","pushTo","v","key","value","getLangPack","_langPack","__langPack","___langPack","l","concat","string","appVersion","langPackVersion","applyLangPack","Intl","PluralRules","clear","Array","from","document","querySelectorAll","element","instance","weakMap","superFormatter","input","indexHolder","out","lastIndex","match","p1","p2","p3","offset","slice","createElement","append","format","plain","str","select","regExp","getCacheLangPack","getStrings","keys","_Intl","Object","assign","WeakMap","IntlElementBase","property","classList","add","IntlElement","textContent","formatted","dataset","IntlDateElement","dateTimeFormat","DateTimeFormat","date","i18n","i18n_","_i18n","elements","useLast","delimiterKey","convertPromises","indexOf","init","isWebpSupportedCache","toDataURL","startsWith","convertPromise"],"mappings":"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","file":"2.9b0721de7ac36470955e.chunk.js","sourcesContent":["module.exports = function() {\n return new Worker(__webpack_public_path__ + \"e92ac99c43e3da4aa213.worker.js\");\n};","module.exports = function() {\n return new Worker(__webpack_public_path__ + \"440a017792c536ff413e.worker.js\");\n};","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport { logger, LogTypes } from '../../logger';\nimport Modes from '../../../config/modes';\nimport EventListenerBase from '../../../helpers/eventListenerBase';\nimport { MTConnection } from './transport';\n\nexport default class Socket extends EventListenerBase<{\n open: () => void,\n message: (buffer: ArrayBuffer) => any,\n close: () => void,\n}> implements MTConnection {\n private ws: WebSocket;\n private log: ReturnType<typeof logger>;\n private debug = Modes.debug && false;\n\n constructor(protected dcId: number, protected url: string, logSuffix: string) {\n super();\n\n let logTypes = LogTypes.Error | LogTypes.Log;\n if(this.debug) logTypes |= LogTypes.Debug;\n this.log = logger(`WS-${dcId}` + logSuffix, logTypes);\n this.log('constructor');\n this.connect();\n\n return this;\n }\n\n private removeListeners() {\n if(!this.ws) {\n return;\n }\n\n this.ws.removeEventListener('open', this.handleOpen);\n this.ws.removeEventListener('close', this.handleClose);\n this.ws.removeEventListener('error', this.handleError);\n this.ws.removeEventListener('message', this.handleMessage);\n this.ws = undefined;\n }\n \n private connect() {\n this.ws = new WebSocket(this.url, 'binary');\n this.ws.binaryType = 'arraybuffer';\n this.ws.addEventListener('open', this.handleOpen);\n this.ws.addEventListener('close', this.handleClose);\n this.ws.addEventListener('error', this.handleError);\n this.ws.addEventListener('message', this.handleMessage);\n }\n\n public close() {\n if(!this.ws) {\n return;\n }\n\n this.log.error('close execution');\n\n try {\n this.ws.close();\n } catch(err) {\n\n }\n this.handleClose();\n }\n \n private handleOpen = () => {\n this.log('opened');\n\n this.debug && this.log.debug('sending init packet');\n this.dispatchEvent('open');\n };\n\n private handleError = (e: Event) => {\n this.log.error('handleError', e);\n this.close();\n };\n\n private handleClose = () => {\n this.log('closed'/* , event, this.pending, this.ws.bufferedAmount */);\n\n this.removeListeners();\n this.dispatchEvent('close');\n };\n\n private handleMessage = (event: MessageEvent) => {\n this.debug && this.log.debug('<-', 'handleMessage', /* event, */event.data.byteLength);\n\n this.dispatchEvent('message', event.data as ArrayBuffer);\n };\n\n public send = (body: Uint8Array) => {\n this.debug && this.log.debug('-> body length to send:', body.length);\n\n this.ws.send(body);\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport MTProtoWorker from 'worker-loader!./mtproto.worker';\n//import './mtproto.worker';\nimport { isObject } from '../../helpers/object';\nimport type { MethodDeclMap } from '../../layer';\nimport type { InvokeApiOptions } from '../../types';\nimport CryptoWorkerMethods from '../crypto/crypto_methods';\nimport { logger } from '../logger';\nimport rootScope from '../rootScope';\nimport webpWorkerController from '../webp/webpWorkerController';\nimport type { DownloadOptions } from './apiFileManager';\nimport type { ServiceWorkerTask } from './mtproto.service';\nimport { UserAuth } from './mtproto_config';\nimport type { MTMessage } from './networker';\nimport DEBUG, { MOUNT_CLASS_TO } from '../../config/debug';\nimport Socket from './transports/websocket';\n\ntype Task = {\n taskId: number,\n task: string,\n args: any[]\n};\n\ntype HashResult = {\n hash: number,\n result: any\n};\n\ntype HashOptions = {\n [queryJSON: string]: HashResult\n};\n\nexport class ApiManagerProxy extends CryptoWorkerMethods {\n public worker: /* Window */Worker;\n public postMessage: (...args: any[]) => void;\n private afterMessageIdTemp = 0;\n\n private taskId = 0;\n private awaiting: {\n [id: number]: {\n resolve: any,\n reject: any,\n taskName: string\n }\n } = {} as any;\n private pending: Array<Task> = [];\n\n public updatesProcessor: (obj: any) => void = null;\n\n private log = logger('API-PROXY');\n\n private hashes: {[method: string]: HashOptions} = {};\n\n private apiPromisesSingle: {\n [q: string]: Promise<any>\n } = {};\n private apiPromisesCacheable: {\n [method: string]: {\n [queryJSON: string]: {\n timestamp: number,\n promise: Promise<any>,\n fulfilled: boolean,\n timeout?: number,\n params: any\n }\n }\n } = {};\n\n private isSWRegistered = true;\n\n private debug = DEBUG /* && false */;\n\n private sockets: Map<number, Socket> = new Map();\n\n private taskListeners: {[taskType: string]: (task: any) => void} = {};\n\n public onServiceWorkerFail: () => void;\n\n constructor() {\n super();\n this.log('constructor');\n\n this.registerServiceWorker();\n\n this.addTaskListener('reload', () => {\n location.reload();\n });\n\n this.addTaskListener('connectionStatusChange', (task: any) => {\n rootScope.broadcast('connection_status_change', task.payload);\n });\n\n this.addTaskListener('convertWebp', (task) => {\n webpWorkerController.postMessage(task);\n });\n\n this.addTaskListener('socketProxy', (task) => {\n const socketTask = task.payload;\n const id = socketTask.id;\n //console.log('socketProxy', socketTask, id);\n\n if(socketTask.type === 'send') {\n const socket = this.sockets.get(id);\n socket.send(socketTask.payload);\n } else if(socketTask.type === 'close') {\n const socket = this.sockets.get(id);\n socket.close();\n } else if(socketTask.type === 'setup') {\n const socket = new Socket(socketTask.payload.dcId, socketTask.payload.url, socketTask.payload.logSuffix);\n \n const onOpen = () => {\n //console.log('socketProxy onOpen');\n this.postMessage({\n type: 'socketProxy', \n payload: {\n type: 'open',\n id\n }\n });\n };\n const onClose = () => {\n this.postMessage({\n type: 'socketProxy', \n payload: {\n type: 'close',\n id\n }\n });\n\n socket.removeEventListener('open', onOpen);\n socket.removeEventListener('close', onClose);\n socket.removeEventListener('message', onMessage);\n this.sockets.delete(id);\n };\n const onMessage = (buffer: ArrayBuffer) => {\n this.postMessage({\n type: 'socketProxy', \n payload: {\n type: 'message',\n id,\n payload: buffer\n }\n });\n };\n\n socket.addEventListener('open', onOpen);\n socket.addEventListener('close', onClose);\n socket.addEventListener('message', onMessage);\n this.sockets.set(id, socket);\n }\n });\n\n///////////////////////\n this.registerWorker();\n//////////////\n }\n\n public isServiceWorkerOnline() {\n return this.isSWRegistered;\n }\n\n private registerServiceWorker() {\n if(!('serviceWorker' in navigator)) return;\n \n const worker = navigator.serviceWorker;\n worker.register('./sw.js', {scope: './'}).then(registration => {\n this.log('SW registered', registration);\n this.isSWRegistered = true;\n\n const sw = registration.installing || registration.waiting || registration.active;\n sw.addEventListener('statechange', (e) => {\n this.log('SW statechange', e);\n });\n\n////////////////////////\n/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////\n////////////////\n }, (err) => {\n this.isSWRegistered = false;\n this.log.error('SW registration failed!', err);\n\n if(this.onServiceWorkerFail) {\n this.onServiceWorkerFail();\n }\n });\n\n worker.addEventListener('controllerchange', () => {\n this.log.warn('controllerchange');\n this.releasePending();\n\n worker.controller.addEventListener('error', (e) => {\n this.log.error('controller error:', e);\n });\n });\n\n//////////////////////\n/////////////////////////////////////////////////////////////\n/////////////\n worker.addEventListener('message', (e) => {\n const task: ServiceWorkerTask = e.data;\n if(!isObject(task)) {\n return;\n }\n \n this.postMessage(task);\n });\n//////////////\n\n worker.addEventListener('messageerror', (e) => {\n this.log.error('SW messageerror:', e);\n });\n }\n\n private onWorkerFirstMessage(worker: any) {\n if(!this.worker) {\n this.worker = worker;\n this.log('set webWorker');\n\n this.postMessage = this.worker.postMessage.bind(this.worker);\n\n const isWebpSupported = webpWorkerController.isWebpSupported();\n this.log('WebP supported:', isWebpSupported);\n this.postMessage({type: 'webpSupport', payload: isWebpSupported});\n\n this.releasePending();\n }\n }\n\n public addTaskListener(name: keyof ApiManagerProxy['taskListeners'], callback: ApiManagerProxy['taskListeners'][typeof name]) {\n this.taskListeners[name] = callback;\n }\n\n private onWorkerMessage = (e: MessageEvent) => {\n //this.log('got message from worker:', e.data);\n\n const task = e.data;\n\n if(!isObject(task)) {\n return;\n }\n\n const callback = this.taskListeners[task.type];\n if(callback) {\n callback(task);\n return;\n }\n\n if(task.update) {\n if(this.updatesProcessor) {\n this.updatesProcessor(task.update);\n }\n } else if(task.progress) {\n rootScope.broadcast('download_progress', task.progress);\n } else if(task.hasOwnProperty('result') || task.hasOwnProperty('error')) {\n this.finalizeTask(task.taskId, task.result, task.error);\n }\n };\n\n/////////////////////\n private registerWorker() {\n //return;\n\n const worker = new MTProtoWorker();\n //const worker = window;\n worker.addEventListener('message', this.onWorkerFirstMessage.bind(this, worker), {once: true});\n worker.addEventListener('message', this.onWorkerMessage);\n\n worker.addEventListener('error', (err) => {\n this.log.error('WORKER ERROR', err);\n });\n }\n////////////\n\n private finalizeTask(taskId: number, result: any, error: any) {\n const deferred = this.awaiting[taskId];\n if(deferred !== undefined) {\n this.debug && this.log.debug('done', deferred.taskName, result, error);\n error ? deferred.reject(error) : deferred.resolve(result);\n delete this.awaiting[taskId];\n }\n }\n\n public performTaskWorker<T>(task: string, ...args: any[]) {\n this.debug && this.log.debug('start', task, args);\n\n return new Promise<T>((resolve, reject) => {\n this.awaiting[this.taskId] = {resolve, reject, taskName: task};\n \n const params = {\n task,\n taskId: this.taskId,\n args\n };\n\n this.pending.push(params);\n this.releasePending();\n \n this.taskId++;\n });\n }\n\n private releasePending() {\n //return;\n\n if(this.postMessage) {\n this.debug && this.log.debug('releasing tasks, length:', this.pending.length);\n this.pending.forEach(pending => {\n this.postMessage(pending);\n });\n \n this.debug && this.log.debug('released tasks');\n this.pending.length = 0;\n }\n }\n\n public setUpdatesProcessor(callback: (obj: any) => void) {\n this.updatesProcessor = callback;\n }\n\n public invokeApi<T extends keyof MethodDeclMap>(method: T, params: MethodDeclMap[T]['req'] = {}, options: InvokeApiOptions = {}): Promise<MethodDeclMap[T]['res']> {\n //console.log('will invokeApi:', method, params, options);\n return this.performTaskWorker('invokeApi', method, params, options);\n }\n\n public invokeApiAfter<T extends keyof MethodDeclMap>(method: T, params: MethodDeclMap[T]['req'] = {}, options: InvokeApiOptions = {}): Promise<MethodDeclMap[T]['res']> {\n let o = options;\n o.prepareTempMessageId = '' + ++this.afterMessageIdTemp;\n \n o = {...options};\n (options as MTMessage).messageId = o.prepareTempMessageId;\n\n //console.log('will invokeApi:', method, params, options);\n return this.invokeApi(method, params, o);\n }\n\n public invokeApiHashable<T extends keyof MethodDeclMap>(method: T, params: Omit<MethodDeclMap[T]['req'], 'hash'> = {} as any, options: InvokeApiOptions = {}): Promise<MethodDeclMap[T]['res']> {\n //console.log('will invokeApi:', method, params, options);\n\n const queryJSON = JSON.stringify(params);\n let cached: HashResult;\n if(this.hashes[method]) {\n cached = this.hashes[method][queryJSON];\n if(cached) {\n (params as any).hash = cached.hash;\n }\n }\n\n return this.invokeApi(method, params, options).then((result: any) => {\n if(result._.includes('NotModified')) {\n this.debug && this.log.warn('NotModified saved!', method, queryJSON);\n return cached.result;\n }\n \n if(result.hash/* || result.messages */) {\n const hash = result.hash/* || this.computeHash(result.messages) */;\n \n if(!this.hashes[method]) this.hashes[method] = {};\n this.hashes[method][queryJSON] = {\n hash,\n result\n };\n }\n\n return result;\n });\n }\n\n public invokeApiSingle<T extends keyof MethodDeclMap>(method: T, params: MethodDeclMap[T]['req'] = {} as any, options: InvokeApiOptions = {}): Promise<MethodDeclMap[T]['res']> {\n const q = method + '-' + JSON.stringify(params);\n if(this.apiPromisesSingle[q]) {\n return this.apiPromisesSingle[q];\n }\n\n return this.apiPromisesSingle[q] = this.invokeApi(method, params, options).finally(() => {\n delete this.apiPromisesSingle[q];\n });\n }\n\n public invokeApiCacheable<T extends keyof MethodDeclMap>(method: T, params: MethodDeclMap[T]['req'] = {} as any, options: InvokeApiOptions & Partial<{cacheSeconds: number, override: boolean}> = {}): Promise<MethodDeclMap[T]['res']> {\n const cache = this.apiPromisesCacheable[method] ?? (this.apiPromisesCacheable[method] = {});\n const queryJSON = JSON.stringify(params);\n const item = cache[queryJSON];\n if(item && (!options.override || !item.fulfilled)) {\n return item.promise;\n }\n\n if(options.override) {\n if(item && item.timeout) {\n clearTimeout(item.timeout);\n delete item.timeout;\n }\n\n delete options.override;\n }\n\n let timeout: number;\n if(options.cacheSeconds) {\n timeout = window.setTimeout(() => {\n delete cache[queryJSON];\n }, options.cacheSeconds * 1000);\n delete options.cacheSeconds;\n }\n\n const promise = this.invokeApi(method, params, options);\n\n cache[queryJSON] = {\n timestamp: Date.now(),\n fulfilled: false,\n timeout,\n promise,\n params\n };\n\n return promise;\n }\n\n public clearCache<T extends keyof MethodDeclMap>(method: T, verify: (params: MethodDeclMap[T]['req']) => boolean) {\n const cache = this.apiPromisesCacheable[method];\n if(cache) {\n for(const queryJSON in cache) {\n const item = cache[queryJSON];\n if(verify(item.params)) {\n if(item.timeout) {\n clearTimeout(item.timeout);\n }\n\n delete cache[queryJSON];\n }\n }\n }\n }\n\n /* private computeHash(smth: any[]) {\n smth = smth.slice().sort((a, b) => a.id - b.id);\n //return smth.reduce((hash, v) => (((hash * 0x4F25) & 0x7FFFFFFF) + v.id) & 0x7FFFFFFF, 0);\n return smth.reduce((hash, v) => ((hash * 20261) + 0x80000000 + v.id) % 0x80000000, 0);\n } */\n\n public setBaseDcId(dcId: number) {\n return this.performTaskWorker('setBaseDcId', dcId);\n }\n\n public setQueueId(queueId: number) {\n return this.performTaskWorker('setQueueId', queueId);\n }\n\n public setUserAuth(userAuth: UserAuth) {\n rootScope.broadcast('user_auth', userAuth);\n return this.performTaskWorker('setUserAuth', userAuth);\n }\n\n public getNetworker(dc_id: number, options?: InvokeApiOptions) {\n return this.performTaskWorker('getNetworker', dc_id, options);\n }\n\n public logOut(): Promise<void> {\n return this.performTaskWorker('logOut');\n }\n\n public cancelDownload(fileName: string) {\n return this.performTaskWorker('cancelDownload', fileName);\n }\n\n public downloadFile(options: DownloadOptions) {\n return this.performTaskWorker('downloadFile', options);\n }\n\n public uploadFile(options: {file: Blob | File, fileName: string}) {\n return this.performTaskWorker('uploadFile', options);\n }\n\n public toggleStorage(enabled: boolean) {\n return this.performTaskWorker('toggleStorage', enabled);\n }\n}\n\nconst apiManagerProxy = new ApiManagerProxy();\nMOUNT_CLASS_TO.apiManagerProxy = apiManagerProxy;\nexport default apiManagerProxy;\n","import { convertToArrayBuffer } from \"../../helpers/bytes\";\nimport type { InputCheckPasswordSRP } from \"../../layer\";\nimport { aesEncryptSync, aesDecryptSync, sha256HashSync, sha1HashSync, bytesModPow } from \"./crypto_utils\";\n\nexport default abstract class CryptoWorkerMethods {\n abstract performTaskWorker<T>(task: string, ...args: any[]): Promise<T>;\n\n public sha1Hash(bytes: Parameters<typeof sha1HashSync>[0]): Promise<Uint8Array> {\n return this.performTaskWorker<Uint8Array>('sha1-hash', bytes);\n }\n\n public sha256Hash(bytes: Parameters<typeof sha256HashSync>[0]) {\n return this.performTaskWorker<number[]>('sha256-hash', bytes);\n }\n\n public pbkdf2(buffer: Uint8Array, salt: Uint8Array, iterations: number) {\n return this.performTaskWorker<ArrayBuffer>('pbkdf2', buffer, salt, iterations);\n }\n\n public aesEncrypt(bytes: Parameters<typeof aesEncryptSync>[0], \n keyBytes: Parameters<typeof aesEncryptSync>[1], \n ivBytes: Parameters<typeof aesEncryptSync>[2]) {\n return this.performTaskWorker<ReturnType<typeof aesEncryptSync>>('aes-encrypt', convertToArrayBuffer(bytes), \n convertToArrayBuffer(keyBytes), convertToArrayBuffer(ivBytes));\n }\n\n public aesDecrypt(encryptedBytes: Parameters<typeof aesDecryptSync>[0], \n keyBytes: Parameters<typeof aesDecryptSync>[1], \n ivBytes: Parameters<typeof aesDecryptSync>[2]): Promise<ArrayBuffer> {\n return this.performTaskWorker<ArrayBuffer>('aes-decrypt', \n encryptedBytes, keyBytes, ivBytes)\n .then(bytes => convertToArrayBuffer(bytes));\n }\n\n public rsaEncrypt(publicKey: {modulus: string, exponent: string}, bytes: any): Promise<number[]> {\n return this.performTaskWorker<number[]>('rsa-encrypt', publicKey, bytes);\n }\n\n public factorize(bytes: Uint8Array) {\n return this.performTaskWorker<[number[], number[], number]>('factorize', [...bytes]);\n }\n\n public modPow(x: Parameters<typeof bytesModPow>[0], y: Parameters<typeof bytesModPow>[1], m: Parameters<typeof bytesModPow>[2]) {\n return this.performTaskWorker<ReturnType<typeof bytesModPow>>('mod-pow', x, y, m);\n }\n\n public gzipUncompress<T>(bytes: ArrayBuffer, toString?: boolean) {\n return this.performTaskWorker<T>('gzipUncompress', bytes, toString);\n }\n\n public computeSRP(password: string, state: any, isNew = false): Promise<InputCheckPasswordSRP> {\n return this.performTaskWorker('computeSRP', password, state, isNew);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n * \n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nexport function bytesToHex(bytes: ArrayLike<number>) {\n bytes = bytes || [];\n let arr: string[] = [];\n for(let i = 0; i < bytes.length; ++i) {\n arr.push((bytes[i] < 16 ? '0' : '') + (bytes[i] || 0).toString(16));\n }\n return arr.join('');\n}\n\nexport function bytesFromHex(hexString: string) {\n const len = hexString.length;\n let start = 0;\n let bytes: number[] = [];\n\n if(len % 2) { // read 0x581 as 0x0581\n bytes.push(parseInt(hexString.charAt(0), 16));\n ++start;\n }\n\n for(let i = start; i < len; i += 2) {\n bytes.push(parseInt(hexString.substr(i, 2), 16));\n }\n\n return bytes;\n}\n\nexport function bytesToBase64(bytes: number[] | Uint8Array) {\n let mod3: number;\n let result = '';\n\n for(let nLen = bytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; ++nIdx) {\n mod3 = nIdx % 3;\n nUint24 |= bytes[nIdx] << (16 >>> mod3 & 24);\n if(mod3 === 2 || nLen - nIdx === 1) {\n result += String.fromCharCode(\n uint6ToBase64(nUint24 >>> 18 & 63),\n uint6ToBase64(nUint24 >>> 12 & 63),\n uint6ToBase64(nUint24 >>> 6 & 63),\n uint6ToBase64(nUint24 & 63)\n );\n nUint24 = 0;\n }\n }\n\n return result.replace(/A(?=A$|$)/g, '=');\n}\n\nexport function uint6ToBase64(nUint6: number) {\n return nUint6 < 26\n ? nUint6 + 65\n : nUint6 < 52\n ? nUint6 + 71\n : nUint6 < 62\n ? nUint6 - 4\n : nUint6 === 62\n ? 43\n : nUint6 === 63\n ? 47\n : 65\n}\n\nexport function bytesCmp(bytes1: number[] | Uint8Array, bytes2: number[] | Uint8Array) {\n const len = bytes1.length;\n if(len !== bytes2.length) {\n return false;\n }\n\n for(let i = 0; i < len; ++i) {\n if(bytes1[i] !== bytes2[i]) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function bytesXor(bytes1: number[] | Uint8Array, bytes2: number[] | Uint8Array) {\n const len = bytes1.length;\n const bytes: number[] = [];\n\n for(let i = 0; i < len; ++i) {\n bytes[i] = bytes1[i] ^ bytes2[i];\n }\n\n return bytes;\n}\n\nexport function bytesToArrayBuffer(b: number[]) {\n return (new Uint8Array(b)).buffer;\n}\n\nexport function convertToArrayBuffer(bytes: any | ArrayBuffer | Uint8Array) {\n // Be careful with converting subarrays!!\n if(bytes instanceof ArrayBuffer) {\n return bytes;\n }\n if(bytes.buffer !== undefined &&\n bytes.buffer.byteLength === bytes.length * bytes.BYTES_PER_ELEMENT) {\n return bytes.buffer;\n }\n return bytesToArrayBuffer(bytes);\n}\n\nexport function convertToUint8Array(bytes: Uint8Array | ArrayBuffer | number[] | string): Uint8Array {\n if((bytes as Uint8Array).buffer !== undefined) {\n return bytes as Uint8Array;\n } else if(typeof(bytes) === 'string') {\n return new TextEncoder().encode(bytes);\n }\n\n return new Uint8Array(bytes);\n}\n\nexport function bytesFromArrayBuffer(buffer: ArrayBuffer) {\n const len = buffer.byteLength;\n const byteView = new Uint8Array(buffer);\n const bytes: number[] = [];\n\n for(let i = 0; i < len; ++i) {\n bytes[i] = byteView[i];\n }\n\n return bytes;\n}\n\nexport function bufferConcat(buffer1: any, buffer2: any) {\n const l1 = buffer1.byteLength || buffer1.length;\n const l2 = buffer2.byteLength || buffer2.length;\n const tmp = new Uint8Array(l1 + l2);\n tmp.set(buffer1 instanceof ArrayBuffer ? new Uint8Array(buffer1) : buffer1, 0);\n tmp.set(buffer2 instanceof ArrayBuffer ? new Uint8Array(buffer2) : buffer2, l1);\n\n return tmp.buffer;\n}\n\nexport function bufferConcats(...args: any[]) {\n let length = 0;\n args.forEach(b => length += b.byteLength || b.length);\n\n const tmp = new Uint8Array(length);\n \n let lastLength = 0;\n args.forEach(b => {\n tmp.set(b instanceof ArrayBuffer ? new Uint8Array(b) : b, lastLength);\n lastLength += b.byteLength || b.length;\n });\n\n return tmp/* .buffer */;\n}\n\nexport function bytesFromWordss(input: Uint32Array) {\n const o: number[] = [];\n for(let i = 0, length = input.length * 4; i < length; ++i) {\n o.push((input[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff);\n }\n\n return o;\n}\n\nexport function bytesToWordss(input: ArrayBuffer | Uint8Array) {\n let bytes: Uint8Array;\n if(input instanceof ArrayBuffer) bytes = new Uint8Array(input);\n else bytes = input;\n\n const words: number[] = [];\n for(let i = 0, len = bytes.length; i < len; ++i) {\n words[i >>> 2] |= bytes[i] << (24 - (i % 4) * 8);\n }\n\n return new Uint32Array(words);\n}\n\n// * https://stackoverflow.com/a/52827031\n/* export const isBigEndian = (() => {\n const array = new Uint8Array(4);\n const view = new Uint32Array(array.buffer);\n return !((view[0] = 1) & array[0]);\n})(); */\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport DEBUG, { MOUNT_CLASS_TO } from \"../config/debug\";\nimport { safeAssign } from \"../helpers/object\";\nimport { capitalizeFirstLetter } from \"../helpers/string\";\nimport type lang from \"../lang\";\nimport type langSign from \"../langSign\";\nimport { LangPackDifference, LangPackString } from \"../layer\";\nimport apiManager from \"./mtproto/mtprotoworker\";\nimport sessionStorage from \"./sessionStorage\";\nimport App from \"../config/app\";\nimport rootScope from \"./rootScope\";\n\nexport const langPack: {[actionType: string]: LangPackKey} = {\n \"messageActionChatCreate\": \"ActionCreateGroup\",\n\t\"messageActionChatEditTitle\": \"ActionChangedTitle\",\n\t\"messageActionChatEditPhoto\": \"ActionChangedPhoto\",\n\t\"messageActionChatEditVideo\": \"ActionChangedVideo\",\n\t\"messageActionChatDeletePhoto\": \"ActionRemovedPhoto\",\n\t\"messageActionChatReturn\": \"ActionAddUserSelf\",\n\t\"messageActionChatReturnYou\": \"ActionAddUserSelfYou\",\n\t\"messageActionChatJoined\": \"ActionAddUserSelfMega\",\n\t\"messageActionChatJoinedYou\": \"ChannelMegaJoined\",\n \"messageActionChatAddUser\": \"ActionAddUser\",\n \"messageActionChatAddUsers\": \"ActionAddUser\",\n\t\"messageActionChatLeave\": \"ActionLeftUser\",\n\t\"messageActionChatDeleteUser\": \"ActionKickUser\",\n\t\"messageActionChatJoinedByLink\": \"ActionInviteUser\",\n \"messageActionPinMessage\": \"ActionPinnedNoText\",\n \"messageActionContactSignUp\": \"Chat.Service.PeerJoinedTelegram\",\n\t\"messageActionChannelCreate\": \"ActionCreateChannel\",\n\t\"messageActionChannelEditTitle\": \"Chat.Service.Channel.UpdatedTitle\",\n\t\"messageActionChannelEditPhoto\": \"Chat.Service.Channel.UpdatedPhoto\",\n\t\"messageActionChannelEditVideo\": \"Chat.Service.Channel.UpdatedVideo\",\n \"messageActionChannelDeletePhoto\": \"Chat.Service.Channel.RemovedPhoto\",\n \"messageActionHistoryClear\": \"HistoryCleared\",\n\n \"messageActionChannelMigrateFrom\": \"ActionMigrateFromGroup\",\n\n \"messageActionPhoneCall.in_ok\": \"ChatList.Service.Call.incoming\",\n\t\"messageActionPhoneCall.out_ok\": \"ChatList.Service.Call.outgoing\",\n\t\"messageActionPhoneCall.in_missed\": \"ChatList.Service.Call.Missed\",\n\t\"messageActionPhoneCall.out_missed\": \"ChatList.Service.Call.Cancelled\",\n\n\t\"messageActionBotAllowed\": \"Chat.Service.BotPermissionAllowed\"\n};\n\nexport type LangPackKey = /* string | */keyof typeof lang | keyof typeof langSign;\n\nnamespace I18n {\n\texport const strings: Map<LangPackKey, LangPackString> = new Map();\n\tlet pluralRules: Intl.PluralRules;\n\n\tlet cacheLangPackPromise: Promise<LangPackDifference>;\n\texport let lastRequestedLangCode: string;\n\texport let requestedServerLanguage = false;\n\texport function getCacheLangPack(): Promise<LangPackDifference> {\n\t\tif(cacheLangPackPromise) return cacheLangPackPromise;\n\t\treturn cacheLangPackPromise = Promise.all([\n\t\t\tsessionStorage.get('langPack') as Promise<LangPackDifference>,\n\t\t\tpolyfillPromise\n\t\t]).then(([langPack]) => {\n\t\t\tif(!langPack/* || true */) {\n\t\t\t\treturn loadLocalLangPack();\n\t\t\t} else if(DEBUG && false) {\n\t\t\t\treturn getLangPack(langPack.lang_code);\n\t\t\t}/* else if(langPack.appVersion !== App.langPackVersion) {\n\t\t\t\treturn getLangPack(langPack.lang_code);\n\t\t\t} */\n\t\t\t\n\t\t\tif(!lastRequestedLangCode) {\n\t\t\t\tlastRequestedLangCode = langPack.lang_code;\n\t\t\t}\n\t\t\t\n\t\t\tapplyLangPack(langPack);\n\t\t\treturn langPack;\n\t\t}).finally(() => {\n\t\t\tcacheLangPackPromise = undefined;\n\t\t});\n\t}\n\n\texport function loadLocalLangPack() {\n\t\tconst defaultCode = App.langPackCode;\n\t\tlastRequestedLangCode = defaultCode;\n\t\treturn Promise.all([\n\t\t\timport('../lang'),\n\t\t\timport('../langSign')\n\t\t]).then(([lang, langSign]) => {\n\t\t\tconst strings: LangPackString[] = [];\n\t\t\tformatLocalStrings(lang.default, strings);\n\t\t\tformatLocalStrings(langSign.default, strings);\n\n\t\t\tconst langPack: LangPackDifference = {\n\t\t\t\t_: 'langPackDifference',\n\t\t\t\tfrom_version: 0,\n\t\t\t\tlang_code: defaultCode,\n\t\t\t\tstrings,\n\t\t\t\tversion: 0,\n\t\t\t\tlocal: true\n\t\t\t};\n\t\t\treturn saveLangPack(langPack);\n\t\t});\n\t}\n\n\texport function loadLangPack(langCode: string) {\n\t\trequestedServerLanguage = true;\n\t\treturn Promise.all([\n\t\t\tapiManager.invokeApiCacheable('langpack.getLangPack', {\n\t\t\t\tlang_code: langCode,\n\t\t\t\tlang_pack: App.langPack\n\t\t\t}),\n\t\t\tapiManager.invokeApiCacheable('langpack.getLangPack', {\n\t\t\t\tlang_code: langCode,\n\t\t\t\tlang_pack: 'android'\n\t\t\t}),\n\t\t\timport('../lang'),\n\t\t\timport('../langSign'),\n\t\t\tpolyfillPromise\n\t\t]);\n\t}\n\n\texport function getStrings(langCode: string, strings: string[]) {\n\t\treturn apiManager.invokeApi('langpack.getStrings', {\n\t\t\tlang_pack: App.langPack,\n\t\t\tlang_code: langCode,\n\t\t\tkeys: strings\n\t\t});\n\t}\n\n\texport function formatLocalStrings(strings: any, pushTo: LangPackString[] = []) {\n\t\tfor(const i in strings) {\n\t\t\t// @ts-ignore\n\t\t\tconst v = strings[i];\n\t\t\tif(typeof(v) === 'string') {\n\t\t\t\tpushTo.push({\n\t\t\t\t\t_: 'langPackString',\n\t\t\t\t\tkey: i,\n\t\t\t\t\tvalue: v\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tpushTo.push({\n\t\t\t\t\t_: 'langPackStringPluralized',\n\t\t\t\t\tkey: i,\n\t\t\t\t\t...v\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn pushTo;\n\t}\n\n\texport function getLangPack(langCode: string) {\n\t\tlastRequestedLangCode = langCode;\n\t\treturn loadLangPack(langCode).then(([langPack, _langPack, __langPack, ___langPack, _]) => {\n\t\t\tlet strings: LangPackString[] = [];\n\n\t\t\t[__langPack, ___langPack].forEach(l => {\n\t\t\t\tformatLocalStrings(l.default as any, strings);\n\t\t\t});\n\n\t\t\tstrings = strings.concat(langPack.strings);\n\n\t\t\tfor(const string of _langPack.strings) {\n\t\t\t\tstrings.push(string);\n\t\t\t}\n\n\t\t\tlangPack.strings = strings;\n\t\t\treturn saveLangPack(langPack);\n\t\t});\n\t}\n\n\texport function saveLangPack(langPack: LangPackDifference) {\n\t\tlangPack.appVersion = App.langPackVersion;\n\n\t\treturn sessionStorage.set({langPack}).then(() => {\n\t\t\tapplyLangPack(langPack);\n\t\t\treturn langPack;\n\t\t});\n\t}\n\n\texport const polyfillPromise = (function checkIfPolyfillNeeded() {\n\t\tif(typeof(Intl) !== 'undefined' && typeof(Intl.PluralRules) !== 'undefined'/* && false */) {\n\t\t\treturn Promise.resolve();\n\t\t} else {\n\t\t\treturn import('./pluralPolyfill').then((_Intl) => {\n\t\t\t\t(window as any).Intl = Object.assign(typeof(Intl) !== 'undefined' ? Intl : {}, _Intl.default);\n\t\t\t});\n\t\t}\n\t})();\n\t\n\texport function applyLangPack(langPack: LangPackDifference) {\n\t\tif(langPack.lang_code !== lastRequestedLangCode) {\n\t\t\treturn;\n\t\t}\n\n\t\tpluralRules = new Intl.PluralRules(langPack.lang_code);\n\n\t\tstrings.clear();\n\n\t\tfor(const string of langPack.strings) {\n\t\t\tstrings.set(string.key as LangPackKey, string);\n\t\t}\n\n\t\trootScope.broadcast('language_change');\n\n\t\tconst elements = Array.from(document.querySelectorAll(`.i18n`)) as HTMLElement[];\n\t\telements.forEach(element => {\n\t\t\tconst instance = weakMap.get(element);\n\n\t\t\tif(instance) {\n\t\t\t\tinstance.update();\n\t\t\t}\n\t\t});\n\t}\n\n\texport function superFormatter(input: string, args?: any[], indexHolder = {i: 0}) {\n\t\tlet out: (string | HTMLElement)[] = [];\n\t\tconst regExp = /(\\*\\*)(.+?)\\1|(\\n)|un\\d|%\\d\\$.|%./g;\n\n\t\tlet lastIndex = 0;\n\t\tinput.replace(regExp, (match, p1: any, p2: any, p3: any, offset: number, string: string) => {\n\t\t\t//console.table({match, p1, p2, offset, string});\n\n\t\t\tout.push(string.slice(lastIndex, offset));\n\n\t\t\tif(p1) {\n\t\t\t\t//offset += p1.length;\n\t\t\t\tswitch(p1) {\n\t\t\t\t\tcase '**': {\n\t\t\t\t\t\tconst b = document.createElement('b');\n\t\t\t\t\t\tb.append(...superFormatter(p2, args, indexHolder));\n\t\t\t\t\t\tout.push(b);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if(p3) {\n\t\t\t\tout.push(document.createElement('br'));\n\t\t\t} else if(args) {\n\t\t\t\tout.push(args[indexHolder.i++]);\n\t\t\t}\n\n\t\t\tlastIndex = offset + match.length;\n\t\t\treturn '';\n\t\t});\n\t\n\t\tif(lastIndex !== input.length) {\n\t\t\tout.push(input.slice(lastIndex));\n\t\t}\n\n\t\treturn out;\n\t}\n\t\n\texport function format(key: LangPackKey, plain: true, args?: any[]): string;\n\texport function format(key: LangPackKey, plain?: false, args?: any[]): (string | HTMLElement)[];\n\texport function format(key: LangPackKey, plain = false, args?: any[]): (string | HTMLElement)[] | string {\n\t\tconst str = strings.get(key);\n\t\tlet input: string;\n\t\tif(str) {\n\t\t\tif(str._ === 'langPackStringPluralized' && args?.length) {\n\t\t\t\tlet v = args[0] as number | string;\n\t\t\t\tif(typeof(v) === 'string') v = +v.replace(/\\D/g, '');\n\t\t\t\tconst s = pluralRules.select(v);\n\t\t\t\t// @ts-ignore\n\t\t\t\tinput = str[s + '_value'] || str['other_value'];\n\t\t\t} else if(str._ === 'langPackString') {\n\t\t\t\tinput = str.value;\n\t\t\t} else {\n\t\t\t\t//input = '[' + key + ']';\n\t\t\t\tinput = key;\n\t\t\t}\n\t\t} else {\n\t\t\t//input = '[' + key + ']';\n\t\t\tinput = key;\n\t\t}\n\t\t\n\t\tif(plain) {\n\t\t\tif(args?.length) {\n\t\t\t\tconst regExp = /un\\d|%\\d\\$.|%./g;\n\t\t\t\tlet i = 0;\n\t\t\t\tinput = input.replace(regExp, (match, offset, string) => {\n\t\t\t\t\treturn '' + args[i++];\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn input;\n\t\t} else {\n\t\t\treturn superFormatter(input, args);\n\t\t}\n\t}\n\n\texport const weakMap: WeakMap<HTMLElement, IntlElementBase<IntlElementBaseOptions>> = new WeakMap();\n\n\texport type IntlElementBaseOptions = {\n\t\telement?: HTMLElement,\n\t\tproperty?: /* 'innerText' | */'innerHTML' | 'placeholder',\n\t};\n\n\tabstract class IntlElementBase<Options extends IntlElementBaseOptions> {\n\t\tpublic element: IntlElementBaseOptions['element'];\n\t\tpublic property: IntlElementBaseOptions['property'] = 'innerHTML';\n\t\n\t\tconstructor(options: Options) {\n\t\t\tthis.element = options.element || document.createElement('span');\n\t\t\tthis.element.classList.add('i18n');\n\t\t\t\n\t\t\tthis.update(options);\n\t\t\tweakMap.set(this.element, this);\n\t\t}\n\n\t\tabstract update(options?: Options): void;\n\t}\n\n\texport type IntlElementOptions = IntlElementBaseOptions & {\n\t\tkey: LangPackKey,\n\t\targs?: any[]\n\t};\n\texport class IntlElement extends IntlElementBase<IntlElementOptions> {\n\t\tpublic key: IntlElementOptions['key'];\n\t\tpublic args: IntlElementOptions['args'];\n\n\t\tpublic update(options?: IntlElementOptions) {\n\t\t\tsafeAssign(this, options);\n\t\n\t\t\tif(this.property === 'innerHTML') {\n\t\t\t\tthis.element.textContent = '';\n\t\t\t\tthis.element.append(...format(this.key, false, this.args));\n\t\t\t} else {\n\t\t\t\t// @ts-ignore\n\t\t\t\tconst v = this.element[this.property];\n\t\t\t\tconst formatted = format(this.key, true, this.args);\n\n\t\t\t\t// * hasOwnProperty won't work here\n\t\t\t\tif(v === undefined) this.element.dataset[this.property] = formatted;\n\t\t\t\telse (this.element as HTMLInputElement)[this.property] = formatted;\n\t\t\t}\n\t\t}\n\t}\n\n\texport type IntlDateElementOptions = IntlElementBaseOptions & {\n\t\tdate: Date,\n\t\toptions: Intl.DateTimeFormatOptions\n\t};\n\texport class IntlDateElement extends IntlElementBase<IntlDateElementOptions> {\n\t\tpublic date: IntlDateElementOptions['date'];\n\t\tpublic options: IntlDateElementOptions['options'];\n\n\t\tpublic update(options?: IntlDateElementOptions) {\n\t\t\tsafeAssign(this, options);\n\t\n\t\t\t//var options = { month: 'long', day: 'numeric' };\n\t\t\t\n\t\t\t// * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle#adding_an_hour_cycle_via_the_locale_string\n\t\t\tconst dateTimeFormat = new Intl.DateTimeFormat(lastRequestedLangCode + '-u-hc-h23', this.options);\n\t\t\t\n\t\t\t(this.element as any)[this.property] = capitalizeFirstLetter(dateTimeFormat.format(this.date));\n\t\t}\n\t}\n\n\texport function i18n(key: LangPackKey, args?: any[]) {\n\t\treturn new IntlElement({key, args}).element;\n\t}\n\t\n\texport function i18n_(options: IntlElementOptions) {\n\t\treturn new IntlElement(options).element;\n\t}\n\n\texport function _i18n(element: HTMLElement, key: LangPackKey, args?: any[], property?: IntlElementOptions['property']) {\n\t\treturn new IntlElement({element, key, args, property}).element;\n\t}\n}\n\nexport {I18n};\nexport default I18n;\n\nconst i18n = I18n.i18n;\nexport {i18n};\n\nconst i18n_ = I18n.i18n_;\nexport {i18n_};\n\nconst _i18n = I18n._i18n;\nexport {_i18n};\n\nexport function join(elements: HTMLElement[], useLast = true) {\n\tconst arr: HTMLElement[] = elements.slice(0, 1);\n for(let i = 1; i < elements.length; ++i) {\n const isLast = (elements.length - 1) === i;\n const delimiterKey: LangPackKey = isLast && useLast ? 'WordDelimiterLast' : 'WordDelimiter';\n arr.push(i18n(delimiterKey));\n arr.push(elements[i]);\n }\n\n\treturn arr;\n}\n\nMOUNT_CLASS_TO.I18n = I18n;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport WebpWorker from 'worker-loader!./webp.worker';\nimport { MOUNT_CLASS_TO } from '../../config/debug';\nimport { CancellablePromise, deferredPromise } from '../../helpers/cancellablePromise';\nimport apiManagerProxy from '../mtproto/mtprotoworker';\n\nexport type WebpConvertTask = {\n type: 'convertWebp', \n payload: {\n fileName: string, \n bytes: Uint8Array\n }\n};\n\nexport class WebpWorkerController {\n private worker: Worker;\n private convertPromises: {[fileName: string]: CancellablePromise<Uint8Array>} = {};\n private isWebpSupportedCache: boolean;\n \n init() {\n this.worker = new WebpWorker();\n this.worker.addEventListener('message', (e) => {\n const payload = (e.data as WebpConvertTask).payload;\n\n if(payload.fileName.indexOf('main-') === 0) {\n const promise = this.convertPromises[payload.fileName];\n if(promise) {\n payload.bytes ? promise.resolve(payload.bytes) : promise.reject();\n delete this.convertPromises[payload.fileName];\n }\n } else {\n apiManagerProxy.postMessage(e.data);\n }\n });\n }\n\n postMessage(data: WebpConvertTask) {\n if(this.init) {\n this.init();\n this.init = null;\n }\n\n this.worker.postMessage(data);\n }\n\n isWebpSupported() {\n if(this.isWebpSupportedCache === undefined) {\n this.isWebpSupportedCache = document.createElement('canvas').toDataURL('image/webp').startsWith('data:image/webp');\n }\n\n return this.isWebpSupportedCache;\n }\n\n convert(fileName: string, bytes: Uint8Array) {\n fileName = 'main-' + fileName;\n\n if(this.convertPromises.hasOwnProperty(fileName)) {\n return this.convertPromises[fileName];\n }\n \n const convertPromise = deferredPromise<Uint8Array>();\n\n this.postMessage({type: 'convertWebp', payload: {fileName, bytes}});\n\n return this.convertPromises[fileName] = convertPromise;\n }\n}\n\nconst webpWorkerController = new WebpWorkerController();\nMOUNT_CLASS_TO.webpWorkerController = webpWorkerController;\nexport default webpWorkerController;"],"sourceRoot":""}