tweb/public/960.7ae964ab6031f51a0275.bundle.js.map
Eduard Kuzmenko 019a7aa1e3 Build
2022-06-24 21:23:25 +04:00

1 line
40 KiB
Plaintext

{"version":3,"file":"960.7ae964ab6031f51a0275.bundle.js","mappings":"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","sources":["webpack://tweb/./src/config/debug.ts","webpack://tweb/./src/config/modes.ts","webpack://tweb/./src/environment/ctx.ts","webpack://tweb/./src/helpers/array/findAndSplice.ts","webpack://tweb/./src/helpers/array/indexOfAndSplice.ts","webpack://tweb/./src/helpers/bytes/bufferConcats.ts","webpack://tweb/./src/helpers/context.ts","webpack://tweb/./src/helpers/dT.ts","webpack://tweb/./src/helpers/eventListenerBase.ts","webpack://tweb/./src/lib/crypto/cryptoMessagePort.ts","webpack://tweb/./src/lib/mtproto/superMessagePort.ts","webpack://tweb/./src/lib/polyfill.ts"],"sourcesContent":["/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from \"./modes\";\r\n\r\nexport const DEBUG = (process.env.NODE_ENV !== 'production' || Modes.debug)/* && false */;\r\nconst ctx: any = typeof(window) !== 'undefined' ? window : self;\r\nexport const MOUNT_CLASS_TO: any = DEBUG || true/* && false */ ? ctx : {};\r\nexport default DEBUG;\r\n\r\n//let m = DEBUG;\r\n/* if(!DEBUG) {\r\n ctx.sandpitTurtle = () => {\r\n //if(!m) {\r\n for(let i in MOUNT_CLASS_TO) {\r\n ctx[i] = MOUNT_CLASS_TO[i];\r\n }\r\n //m = true;\r\n //}\r\n \r\n //DEBUG = !DEBUG;\r\n };\r\n} */\r\n\r\n/* export const superDebug = (object: any, key: string) => {\r\n var d = object[key];\r\n var beforeStr = '', afterStr = '';\r\n for(var r of d) {\r\n beforeStr += r.before.hex + '\\n';\r\n afterStr += r.after.hex + '\\n';\r\n }\r\n\r\n beforeStr = beforeStr.trim();\r\n afterStr = afterStr.trim();\r\n //var beforeStr = d.map((r) => r.before.hex).join('\\n');\r\n //var afterStr = d.map((r) => r.after.hex).join('\\n');\r\n\r\n var dada = (name: string, str: string) => {\r\n var a = document.createElement('a');\r\n a.target = '_blank';\r\n a.download = name + '.txt';\r\n a.href = URL.createObjectURL(new Blob([str], {\r\n type: 'text/plain'\r\n }));\r\n document.body.append(a);\r\n a.click();\r\n };\r\n\r\n dada(key + '_' + 'before', beforeStr);\r\n dada(key + '_' + 'after', afterStr);\r\n}\r\n\r\nMOUNT_CLASS_TO.superDebug = superDebug; */\r\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\nimport type { TransportType } from \"../lib/mtproto/dcConfigurator\";\n\nconst Modes = {\n test: location.search.indexOf('test=1') > 0/* || true */,\n debug: location.search.indexOf('debug=1') > 0,\n http: false,\n ssl: true, // location.search.indexOf('ssl=1') > 0 || location.protocol === 'https:' && location.search.indexOf('ssl=0') === -1,\n multipleConnections: true,\n asServiceWorker: false,\n transport: 'websocket' as TransportType\n};\n\n \nModes.http = location.search.indexOf('http=1') > 0;\n \n\n \n \n \n\nif(Modes.http) {\n Modes.transport = 'https';\n}\n\n \n \n \n\nexport default Modes;\n","const ctx = typeof(window) !== 'undefined' ? window : self;\n\nexport default ctx;\n","export default function findAndSplice<T>(array: Array<T>, verify: (value: T, index?: number, array?: Array<T>) => boolean) {\n const index = array.findIndex(verify);\n return index !== -1 ? array.splice(index, 1)[0] : undefined;\n};\n","export default function indexOfAndSplice<T>(array: Array<T>, item: T) {\n const idx = array.indexOf(item);\n const spliced = idx !== -1 && array.splice(idx, 1);\n return spliced && spliced[0];\n}\n","export default function bufferConcats(...args: (ArrayBuffer | Uint8Array | number[])[]) {\n const length = args.reduce((acc, v) => acc + ((v as ArrayBuffer).byteLength || (v as Uint8Array).length), 0);\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 as ArrayBuffer).byteLength || (b as Uint8Array).length;\n });\n\n return tmp/* .buffer */;\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n// в SW может быть сразу две переменных TRUE\r\nexport const IS_SERVICE_WORKER = typeof ServiceWorkerGlobalScope !== 'undefined' && self instanceof ServiceWorkerGlobalScope;\r\nexport const IS_WEB_WORKER = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope && !IS_SERVICE_WORKER;\r\nexport const IS_WORKER = IS_WEB_WORKER || IS_SERVICE_WORKER;\r\n\r\nexport const getWindowClients = () => {\r\n return (self as any as ServiceWorkerGlobalScope)\r\n .clients\r\n .matchAll({includeUncontrolled: false, type: 'window'});\r\n};\r\n\r\nconst postMessage = (listener: WindowClient | DedicatedWorkerGlobalScope, ...args: any[]) => {\r\n try {\r\n // @ts-ignore\r\n listener.postMessage(...args);\r\n } catch(err) {\r\n console.error('[worker] postMessage error:', err, args);\r\n }\r\n};\r\n\r\nconst notifyServiceWorker = (all: boolean, ...args: any[]) => {\r\n getWindowClients().then((listeners) => {\r\n if(!listeners.length) {\r\n //console.trace('no listeners?', self, listeners);\r\n return;\r\n }\r\n\r\n listeners.slice(all ? 0 : -1).forEach((listener) => {\r\n postMessage(listener, ...args);\r\n });\r\n });\r\n};\r\n\r\nconst notifyWorker = (...args: any[]) => {\r\n postMessage(self as any as DedicatedWorkerGlobalScope, ...args);\r\n};\r\n\r\nconst noop = () => {};\r\n\r\nexport const notifySomeone = IS_SERVICE_WORKER ? notifyServiceWorker.bind(null, false) : (IS_WEB_WORKER ? notifyWorker : noop);\r\nexport const notifyAll = IS_SERVICE_WORKER ? notifyServiceWorker.bind(null, true) : (IS_WEB_WORKER ? notifyWorker : noop);\r\n","const _logTimer = Date.now();\r\nexport default function dT() {\r\n return '[' + ((Date.now() - _logTimer) / 1000).toFixed(3) + ']';\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n//import { MOUNT_CLASS_TO } from \"../config/debug\";\r\nimport type { ArgumentTypes, SuperReturnType } from \"../types\";\r\nimport findAndSplice from \"./array/findAndSplice\";\r\n\r\n// class EventSystem {\r\n// wm: WeakMap<any, Record<any, Set<any>>> = new WeakMap();\r\n\r\n// add(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (listeners === undefined) {\r\n// listeners = {};\r\n// }\r\n// let listenersForEvent = listeners[event];\r\n// if (listenersForEvent === undefined) {\r\n// listenersForEvent = new Set();\r\n// }\r\n// listenersForEvent.add(listener);\r\n// listeners[event] = listenersForEvent;\r\n// //target.addEventListener(event, listener);\r\n// this.wm.set(target, listeners);\r\n// };\r\n\r\n// remove(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// listenersForEvent.delete(listener);\r\n// };\r\n \r\n// /* fire(target, event) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// for (let handler of handlers) {\r\n// setTimeout(handler, 0, event, target); // we use a setTimeout here because we want event triggering to be asynchronous. \r\n// }\r\n// }; */\r\n// }\r\n\r\n// console.log = () => {};\r\n\r\n// const e = new EventSystem();\r\n// MOUNT_CLASS_TO.e = e;\r\n\r\nexport type EventListenerListeners = Record<string, Function>;\r\n// export type EventListenerListeners = Record<string, (...args: any[]) => any>;\r\n// export type EventListenerListeners = {[name in string]: Function};\r\n\r\n/**\r\n * Better not to remove listeners during setting\r\n * Should add listener callback only once\r\n */\r\n\r\ntype ListenerObject<T> = {callback: T, options: boolean | AddEventListenerOptions};\r\n\r\n// type EventLitenerCallback<T> = (data: T) => \r\n// export default class EventListenerBase<Listeners extends {[name: string]: Function}> {\r\nexport default class EventListenerBase<Listeners extends EventListenerListeners> {\r\n protected listeners: Partial<{\r\n [k in keyof Listeners]: Array<ListenerObject<Listeners[k]>>\r\n }>;\r\n protected listenerResults: Partial<{\r\n [k in keyof Listeners]: ArgumentTypes<Listeners[k]>\r\n }>;\r\n\r\n private reuseResults: boolean;\r\n\r\n constructor(reuseResults?: boolean) {\r\n this._constructor(reuseResults);\r\n }\r\n\r\n public _constructor(reuseResults = false): any {\r\n this.reuseResults = reuseResults;\r\n this.listeners = {};\r\n this.listenerResults = {};\r\n }\r\n\r\n public addEventListener<T extends keyof Listeners>(name: T, callback: Listeners[T], options?: boolean | AddEventListenerOptions) {\r\n (this.listeners[name] ?? (this.listeners[name] = [])).push({callback, options}); // ! add before because if you don't, you won't be able to delete it from callback\r\n\r\n if(this.listenerResults.hasOwnProperty(name)) {\r\n callback(...this.listenerResults[name]);\r\n \r\n if((options as AddEventListenerOptions)?.once) {\r\n this.listeners[name].pop();\r\n return;\r\n }\r\n }\r\n \r\n //e.add(this, name, {callback, once});\r\n }\r\n\r\n public addMultipleEventsListeners(obj: {\r\n [name in keyof Listeners]?: Listeners[name]\r\n }) {\r\n for(const i in obj) {\r\n this.addEventListener(i, obj[i]);\r\n }\r\n }\r\n\r\n public removeEventListener<T extends keyof Listeners>(name: T, callback: Listeners[T], options?: boolean | AddEventListenerOptions) {\r\n if(this.listeners[name]) {\r\n findAndSplice(this.listeners[name], l => l.callback === callback);\r\n }\r\n //e.remove(this, name, callback);\r\n }\r\n\r\n protected invokeListenerCallback<T extends keyof Listeners, L extends ListenerObject<any>>(name: T, listener: L, ...args: ArgumentTypes<L['callback']>) {\r\n let result: any;\r\n try {\r\n result = listener.callback(...args);\r\n } catch(err) {\r\n console.error(err);\r\n }\r\n\r\n if((listener.options as AddEventListenerOptions)?.once) {\r\n this.removeEventListener(name, listener.callback);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private _dispatchEvent<T extends keyof Listeners>(name: T, collectResults: boolean, ...args: ArgumentTypes<Listeners[T]>) {\r\n if(this.reuseResults) {\r\n this.listenerResults[name] = args;\r\n }\r\n\r\n const arr: Array<SuperReturnType<Listeners[typeof name]>> = collectResults && [];\r\n\r\n const listeners = this.listeners[name];\r\n if(listeners) {\r\n // ! this one will guarantee execution even if delete another listener during setting\r\n const left = listeners.slice();\r\n left.forEach((listener) => {\r\n const index = listeners.findIndex((l) => l.callback === listener.callback);\r\n if(index === -1) {\r\n return;\r\n }\r\n\r\n const result = this.invokeListenerCallback(name, listener, ...args);\r\n if(arr) {\r\n arr.push(result);\r\n }\r\n });\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n public dispatchResultableEvent<T extends keyof Listeners>(name: T, ...args: ArgumentTypes<Listeners[T]>) {\r\n return this._dispatchEvent(name, true, ...args);\r\n }\r\n\r\n // * must be protected, but who cares\r\n public dispatchEvent<L extends EventListenerListeners = Listeners, T extends keyof L = keyof L>(name: T, ...args: ArgumentTypes<L[T]>) {\r\n // @ts-ignore\r\n this._dispatchEvent(name, false, ...args);\r\n }\r\n\r\n public cleanup() {\r\n this.listeners = {}; \r\n this.listenerResults = {};\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { CryptoMethods } from './crypto_methods';\r\nimport SuperMessagePort from '../mtproto/superMessagePort';\r\nimport { Awaited } from '../../types';\r\nimport { MOUNT_CLASS_TO } from '../../config/debug';\r\nimport { IS_WORKER } from '../../helpers/context';\r\n\r\ntype CryptoEvent = {\r\n invoke: <T extends keyof CryptoMethods>(payload: {method: T, args: Parameters<CryptoMethods[T]>}) => ReturnType<CryptoMethods[T]>,\r\n port: (payload: void, source: MessageEventSource, event: MessageEvent) => void\r\n};\r\n\r\nexport class CryptoMessagePort<Master extends boolean = false> extends SuperMessagePort<CryptoEvent, CryptoEvent, Master> {\r\n public invokeCrypto<T extends keyof CryptoMethods>(method: T, ...args: Parameters<CryptoMethods[T]>): Promise<Awaited<ReturnType<CryptoMethods[T]>>> {\r\n const payload = {method, args};\r\n const listeners = this.listeners['invoke'];\r\n if(listeners?.length) { // already in worker\r\n // try {\r\n // @ts-ignore\r\n let result: any = listeners[0].callback(payload);\r\n if(!IS_WORKER && !(result instanceof Promise)) {\r\n result = Promise.resolve(result);\r\n }\r\n\r\n return result;\r\n // } catch(err) {\r\n // return Promise.reject(err);\r\n // }\r\n }\r\n\r\n // @ts-ignore\r\n return this.invoke('invoke', payload);\r\n }\r\n}\r\n\r\nconst cryptoMessagePort = new CryptoMessagePort<false>();\r\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.cryptoMessagePort = cryptoMessagePort);\r\nexport default cryptoMessagePort;\r\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 from \"../../config/debug\";\nimport ctx from \"../../environment/ctx\";\nimport indexOfAndSplice from \"../../helpers/array/indexOfAndSplice\";\nimport { IS_SERVICE_WORKER, IS_WORKER, notifyAll } from \"../../helpers/context\";\nimport EventListenerBase from \"../../helpers/eventListenerBase\";\nimport { Awaited, WorkerTaskTemplate, WorkerTaskVoidTemplate } from \"../../types\";\nimport { logger } from \"../logger\";\n\ntype SuperMessagePortTask = WorkerTaskTemplate & {\n transfer?: Transferable[]\n};\n\ninterface InvokeTask extends SuperMessagePortTask {\n type: 'invoke',\n payload: WorkerTaskVoidTemplate & {withAck?: boolean, void?: boolean}\n}\n\ninterface ResultTask extends SuperMessagePortTask {\n type: 'result',\n payload: {\n taskId: number,\n result?: any,\n error?: any\n }\n}\n\ninterface AckTask extends SuperMessagePortTask {\n type: 'ack',\n payload: {\n cached: boolean,\n taskId: number\n result?: any,\n error?: any,\n }\n}\n\ninterface PingTask extends SuperMessagePortTask {\n type: 'ping'\n}\n\ninterface PongTask extends SuperMessagePortTask {\n type: 'pong'\n}\n\ninterface BatchTask extends SuperMessagePortTask {\n type: 'batch',\n payload: Task[]\n}\n\ninterface CloseTask extends SuperMessagePortTask {\n type: 'close'\n}\n\ntype Task = InvokeTask | ResultTask | AckTask | PingTask | PongTask | BatchTask | CloseTask;\ntype TaskMap = {\n [type in Task as type['type']]?: (task: Extract<Task, type>, source: MessageEventSource, event: MessageEvent<any>) => void | Promise<any>\n};\n\nexport type AckedResult<T> = {\n cached: boolean,\n result: Promise<T>\n};\n// export type AckedResult<T> = {\n// cached: true,\n// result: T\n// } | {\n// cached: false,\n// result: Promise<T>\n// };\n\ntype ListenPort = WindowProxy | MessagePort | ServiceWorker | Worker | ServiceWorkerContainer;\ntype SendPort = WindowProxy | MessagePort | ServiceWorker | Worker;\n\ntype ListenerCallback = (payload: any, source: MessageEventSource, event: MessageEvent<any>) => any;\ntype Listeners = Record<string, ListenerCallback>;\n\n// const PING_INTERVAL = DEBUG && false ? 0x7FFFFFFF : 5000;\n// const PING_TIMEOUT = DEBUG && false ? 0x7FFFFFFF : 10000;\n\nexport default class SuperMessagePort<\n Workers extends Listeners, \n Masters extends Listeners,\n IsMaster extends boolean,\n Receive extends Listeners = IsMaster extends true ? Masters : Workers,\n Send extends Listeners = IsMaster extends true ? Workers : Masters\n> extends EventListenerBase<Receive> {\n protected listenPorts: Array<ListenPort>;\n protected sendPorts: Array<SendPort>;\n protected pingResolves: Map<SendPort, () => void>;\n\n protected taskId: number;\n protected awaiting: {\n [id: number]: {\n resolve: any,\n reject: any,\n taskType: string\n }\n };\n protected pending: Map<SendPort, Task[]>;\n\n protected log: ReturnType<typeof logger>;\n protected debug: boolean;\n protected releasingPending: boolean;\n\n protected processTaskMap: TaskMap;\n\n protected onPortDisconnect: (source: MessageEventSource) => void;\n\n constructor() {\n super(false);\n\n this.processTaskMap = {\n result: this.processResultTask,\n ack: this.processAckTask,\n invoke: this.processInvokeTask,\n ping: this.processPingTask,\n pong: this.processPongTask,\n close: this.processCloseTask\n };\n }\n\n public _constructor() {\n super._constructor(false);\n\n this.listenPorts = [];\n this.sendPorts = [];\n this.pingResolves = new Map();\n this.taskId = 0;\n this.awaiting = {};\n this.pending = new Map();\n this.log = logger('MP');\n this.debug = DEBUG;\n\n if(typeof(window) !== 'undefined') {\n window.addEventListener('beforeunload', () => {\n const task = this.createTask('close', undefined);\n this.postMessage(undefined, task);\n });\n }\n }\n\n public setOnPortDisconnect(callback: (source: MessageEventSource) => void) {\n this.onPortDisconnect = callback;\n }\n\n public attachPort(port: MessageEventSource) {\n this.attachListenPort(port);\n this.attachSendPort(port);\n }\n\n public attachListenPort(port: ListenPort) {\n this.listenPorts.push(port);\n port.addEventListener('message', this.onMessage as any);\n }\n\n public attachSendPort(port: SendPort) {\n this.log.warn('attaching port');\n\n if((port as MessagePort).start) {\n (port as MessagePort).start();\n }\n\n this.sendPorts.push(port);\n // this.sendPing(port);\n }\n\n // ! Can't rely on ping because timers can be suspended\n // protected sendPing(port: SendPort, loop = IS_WORKER) {\n // let timeout: number;\n // const promise = new Promise<void>((resolve, reject) => {\n // this.pingResolves.set(port, resolve);\n // this.pushTask(this.createTask('ping', undefined), port);\n\n // timeout = ctx.setTimeout(() => {\n // reject();\n // }, PING_TIMEOUT);\n // });\n\n // promise.then(() => {\n // // this.log('got pong');\n\n // clearTimeout(timeout);\n // this.pingResolves.delete(port);\n\n // if(loop) {\n // this.sendPingWithTimeout(port);\n // }\n // }, () => {\n // this.pingResolves.delete(port);\n // this.detachPort(port);\n // });\n // }\n\n // protected sendPingWithTimeout(port: SendPort, timeout = PING_INTERVAL) {\n // ctx.setTimeout(() => {\n // if(!this.sendPorts.includes(port)) {\n // return;\n // }\n\n // this.sendPing(port);\n // }, timeout);\n // }\n\n protected detachPort(port: SendPort) {\n this.log.warn('disconnecting port');\n \n port.removeEventListener('message', this.onMessage as any);\n indexOfAndSplice(this.listenPorts, port);\n indexOfAndSplice(this.sendPorts, port);\n if((port as MessagePort).close) {\n (port as MessagePort).close();\n }\n\n this.onPortDisconnect && this.onPortDisconnect(port as any);\n }\n\n protected postMessage(port: SendPort | SendPort[], task: Task) {\n const ports = Array.isArray(port) ? port : (port ? [port] : this.sendPorts);\n ports.forEach((port) => {\n port.postMessage(task, task.transfer as any);\n });\n }\n\n protected onMessage = (event: MessageEvent) => {\n const task: Task = event.data;\n // this.log('got message', task);\n\n const source: MessageEventSource = event.source || event.currentTarget as any; // can have no source\n /* if(task.type === 'batch') {\n const newEvent: MessageEvent = {data: event.data, source: event.source, currentTarget: event.currentTarget} as any;\n task.payload.forEach((task) => {\n // @ts-ignore\n newEvent.data = task;\n this.onMessage(newEvent);\n });\n } */\n\n // @ts-ignore\n this.processTaskMap[task.type](task, source, event);\n };\n\n protected /* async */ releasePending() {\n //return;\n\n if(!this.listenPorts.length || this.releasingPending) {\n return;\n }\n\n this.releasingPending = true;\n // const perf = performance.now();\n // await pause(0);\n\n this.debug && this.log.debug('releasing tasks, length:', this.pending.size/* , performance.now() - perf */);\n\n this.pending.forEach((portTasks, port) => {\n // let batchTask: BatchTask;\n // const tasks: Task[] = [];\n // portTasks.forEach((task) => {\n // if(task.transfer) {\n // batchTask = undefined;\n // tasks.push(task);\n // } else {\n // if(!batchTask) {\n // batchTask = this.createTask('batch', []);\n // tasks.push(batchTask);\n // }\n\n // batchTask.payload.push(task);\n // }\n // });\n\n const tasks = portTasks;\n\n tasks.forEach((task) => {\n // if(task.type === 'batch') {\n // this.log(`batching ${task.payload.length} tasks`);\n // }\n\n try {\n if(IS_SERVICE_WORKER) {\n notifyAll(task);\n } else {\n this.postMessage(port, task);\n }\n } catch(err) {\n this.log.error('postMessage error:', err, task, port);\n }\n });\n });\n\n this.debug && this.log.debug('released tasks');\n this.pending.clear();\n\n this.releasingPending = false;\n }\n\n protected processResultTask = (task: ResultTask) => {\n const {taskId, result, error} = task.payload;\n const deferred = this.awaiting[taskId];\n if(!deferred) {\n return;\n }\n\n this.debug && this.log.debug('done', deferred.taskType, result, error);\n 'error' in task.payload ? deferred.reject(error) : deferred.resolve(result);\n delete this.awaiting[taskId];\n };\n\n protected processAckTask = (task: AckTask) => {\n const payload = task.payload;\n const deferred = this.awaiting[payload.taskId];\n if(!deferred) {\n return;\n }\n\n // * will finish the init promise with incoming result\n const previousResolve: (acked: AckedResult<any>) => void = deferred.resolve;\n // const previousReject = deferred.reject;\n\n // if(payload.cached) {\n // if('result' in payload) {\n // previousResolve({\n // cached: true,\n // result: payload.result\n // });\n // } else {\n // previousReject(payload.error);\n // }\n // } else {\n // const ret: AckedResult<any> = {\n // cached: false,\n // result: new Promise((resolve, reject) => {\n // deferred.resolve = resolve;\n // deferred.reject = reject;\n // })\n // };\n\n // previousResolve(ret);\n // }\n\n const ret: AckedResult<any> = {\n cached: payload.cached,\n result: payload.cached ? ('result' in payload ? Promise.resolve(payload.result) : Promise.reject(payload.error)) : new Promise((resolve, reject) => {\n deferred.resolve = resolve;\n deferred.reject = reject;\n })\n };\n\n previousResolve(ret);\n };\n\n protected processPingTask = (task: PingTask, source: MessageEventSource, event: MessageEvent) => {\n this.pushTask(this.createTask('pong', undefined), event.source);\n };\n\n protected processPongTask = (task: PongTask, source: MessageEventSource, event: MessageEvent) => {\n const pingResolve = this.pingResolves.get(source);\n if(pingResolve) {\n this.pingResolves.delete(source);\n pingResolve();\n }\n };\n\n protected processCloseTask = (task: CloseTask, source: MessageEventSource, event: MessageEvent) => {\n this.detachPort(source);\n };\n\n protected processInvokeTask = async(task: InvokeTask, source: MessageEventSource, event: MessageEvent) => {\n const id = task.id;\n const innerTask = task.payload;\n \n let resultTaskPayload: ResultTask['payload'];\n let resultTask: ResultTask, ackTask: AckTask;\n if(!innerTask.void) {\n resultTaskPayload = {taskId: id};\n resultTask = this.createTask('result', resultTaskPayload);\n }\n\n if(innerTask.withAck) {\n ackTask = this.createTask('ack', {\n taskId: id,\n cached: true\n });\n }\n\n let isPromise: boolean;\n try {\n const listeners = this.listeners[innerTask.type];\n if(!listeners?.length) {\n throw new Error('no listener');\n }\n\n const listener = listeners[0];\n\n // @ts-ignore\n let result = this.invokeListenerCallback(innerTask.type, listener, innerTask.payload, source, event);\n if(innerTask.void) {\n return;\n }\n\n isPromise = result instanceof Promise;\n\n if(ackTask) {\n const cached = !isPromise;\n ackTask.payload.cached = cached;\n if(cached) ackTask.payload.result = result;\n this.pushTask(ackTask, source);\n\n if(cached) {\n return;\n }\n }\n\n if(isPromise) {\n result = await result;\n }\n \n resultTaskPayload.result = result;\n } catch(error) {\n this.log.error('worker task error:', error, task);\n if(innerTask.void) {\n return;\n }\n\n if(ackTask && ackTask.payload.cached) {\n ackTask.payload.error = error;\n this.pushTask(ackTask, source);\n return;\n }\n\n resultTaskPayload.error = error;\n }\n\n this.pushTask(resultTask, source);\n };\n\n protected createTask<T extends Task['type'], K extends Task = Parameters<TaskMap[T]>[0]>(type: T, payload: K['payload'], transfer?: Transferable[]): K {\n return {\n type,\n payload,\n id: this.taskId++,\n transfer\n } as K;\n }\n\n protected createInvokeTask(type: string, payload: any, withAck?: boolean, _void?: boolean, transfer?: Transferable[]): InvokeTask {\n return this.createTask('invoke', {\n type,\n payload,\n withAck,\n void: _void\n }, transfer);\n }\n\n protected pushTask(task: Task, port?: SendPort) {\n let tasks = this.pending.get(port);\n if(!tasks) {\n this.pending.set(port, tasks = []);\n }\n\n tasks.push(task);\n this.releasePending();\n }\n\n public invokeVoid<T extends keyof Send>(type: T, payload: Parameters<Send[T]>[0], port?: SendPort, transfer?: Transferable[]) {\n const task = this.createInvokeTask(type as string, payload, undefined, true, transfer);\n this.pushTask(task, port);\n }\n\n public invoke<T extends keyof Send>(type: T, payload: Parameters<Send[T]>[0], withAck?: false, port?: SendPort, transfer?: Transferable[]): Promise<Awaited<ReturnType<Send[T]>>>;\n public invoke<T extends keyof Send>(type: T, payload: Parameters<Send[T]>[0], withAck?: true, port?: SendPort, transfer?: Transferable[]): Promise<AckedResult<Awaited<ReturnType<Send[T]>>>>;\n public invoke<T extends keyof Send>(type: T, payload: Parameters<Send[T]>[0], withAck?: boolean, port?: SendPort, transfer?: Transferable[]) {\n this.debug && this.log.debug('start', type, payload);\n\n let task: InvokeTask;\n const promise = new Promise<Awaited<ReturnType<Send[T]>>>((resolve, reject) => {\n task = this.createInvokeTask(type as string, payload, withAck, undefined, transfer);\n this.awaiting[task.id] = {resolve, reject, taskType: type as string};\n this.pushTask(task, port);\n });\n\n if(IS_WORKER) {\n promise.finally(() => {\n clearInterval(interval);\n });\n \n const interval = ctx.setInterval(() => {\n this.log.error('task still has no result', task, port);\n }, 5e3);\n } else if(false) {\n // let timedOut = false;\n const startTime = Date.now();\n promise.finally(() => {\n const elapsedTime = Date.now() - startTime;\n if(elapsedTime >= TIMEOUT) {\n this.log.error(`task was processing ${Date.now() - startTime}ms`, task.payload.payload, port);\n }/* else {\n clearTimeout(timeout);\n } */\n });\n\n const TIMEOUT = 10;\n // const timeout = ctx.setTimeout(() => {\n // timedOut = true;\n // // this.log.error(`task is processing more than ${TIMEOUT} milliseconds`, task, port);\n // }, TIMEOUT);\n }\n\n return promise;\n }\n\n public invokeExceptSource<T extends keyof Send>(type: T, payload: Parameters<Send[T]>[0], source?: SendPort) {\n const ports = this.sendPorts.slice();\n indexOfAndSplice(ports, source);\n\n ports.forEach((target) => {\n this.invokeVoid(type, payload, target);\n });\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 bufferConcats from \"../helpers/bytes/bufferConcats\";\n\nUint8Array.prototype.concat = function(...args: Array<Uint8Array | ArrayBuffer | number[]>) {\n return bufferConcats(this, ...args);\n};\n\n/* Uint8Array.prototype.toString = function() {\n return String.fromCharCode.apply(null, [...this]);\n}; */\n\nUint8Array.prototype.toJSON = function() {\n return [...this];\n //return {type: 'bytes', value: [...this]};\n};\n\nPromise.prototype.finally = Promise.prototype.finally || function<T>(this: Promise<T>, fn: () => any) {\n const onFinally = (callback: typeof fn) => Promise.resolve(fn()).then(callback);\n return this.then(\n result => onFinally(() => result),\n reason => onFinally(() => Promise.reject(reason))\n );\n};\n\ndeclare global {\n interface Uint8Array {\n concat: (...args: Array<Uint8Array | ArrayBuffer | number[]>) => Uint8Array,\n //toString: () => string,\n toJSON: () => number[],\n //toJSON: () => {type: 'bytes', value: number[]},\n }\n \n interface Promise<T> {\n finally: (onfinally?: () => void) => Promise<T>;\n }\n}\n"],"names":["DEBUG","MOUNT_CLASS_TO","window","self","Modes","test","location","search","indexOf","debug","http","ssl","multipleConnections","asServiceWorker","transport","findAndSplice","array","verify","index","findIndex","splice","undefined","indexOfAndSplice","item","idx","spliced","bufferConcats","args","length","reduce","acc","v","byteLength","tmp","Uint8Array","lastLength","forEach","b","set","ArrayBuffer","IS_SERVICE_WORKER","ServiceWorkerGlobalScope","IS_WEB_WORKER","WorkerGlobalScope","IS_WORKER","postMessage","listener","err","console","error","notifyServiceWorker","all","clients","matchAll","includeUncontrolled","type","then","listeners","slice","notifyAll","bind","_logTimer","Date","now","dT","toFixed","EventListenerBase","constructor","reuseResults","this","_constructor","listenerResults","addEventListener","name","callback","options","push","hasOwnProperty","once","pop","addMultipleEventsListeners","obj","i","removeEventListener","l","invokeListenerCallback","result","_dispatchEvent","collectResults","arr","dispatchResultableEvent","dispatchEvent","cleanup","CryptoMessagePort","invokeCrypto","method","payload","Promise","resolve","invoke","cryptoMessagePort","SuperMessagePort","super","onMessage","event","task","data","source","currentTarget","processTaskMap","processResultTask","taskId","deferred","awaiting","log","taskType","reject","processAckTask","previousResolve","cached","processPingTask","pushTask","createTask","processPongTask","pingResolve","pingResolves","get","delete","processCloseTask","detachPort","processInvokeTask","id","innerTask","resultTaskPayload","resultTask","ackTask","isPromise","void","withAck","Error","ack","ping","pong","close","listenPorts","sendPorts","Map","pending","setOnPortDisconnect","onPortDisconnect","attachPort","port","attachListenPort","attachSendPort","warn","start","Array","isArray","transfer","releasePending","releasingPending","size","portTasks","clear","createInvokeTask","_void","tasks","invokeVoid","promise","finally","clearInterval","interval","invokeExceptSource","ports","target","prototype","concat","toJSON","fn","onFinally","reason"],"sourceRoot":""}