/* * https://github.com/morethanwords/tweb * Copyright (C) 2019-2021 Eduard Kuzmenko * https://github.com/morethanwords/tweb/blob/master/LICENSE */ import { MOUNT_CLASS_TO } from "../../config/debug"; import type { getEnvironment } from "../../environment/utils"; import type loadState from "../appManagers/utils/state/loadState"; import type { StoragesResults } from "../appManagers/utils/storages/loadStorages"; import type { LocalStorageProxyTask } from "../localStorage"; import type { Awaited } from "../../types"; import type { Mirrors, MirrorTaskPayload, NotificationBuildTaskPayload, TabState } from "./mtprotoworker"; import type toggleStorages from "../../helpers/toggleStorages"; import SuperMessagePort from "./superMessagePort"; export type MTProtoManagerTaskPayload = {name: string, method: string, args: any[]}; type MTProtoBroadcastEvent = { event: (payload: {name: string, args: any[]}, source: MessageEventSource) => void }; export default class MTProtoMessagePort extends SuperMessagePort<{ environment: (environment: ReturnType) => void, crypto: (payload: {method: string, args: any[]}) => Promise, state: (payload: {userId: UserId} & Awaited> & {storagesResults?: StoragesResults}) => void, manager: (payload: MTProtoManagerTaskPayload) => any, toggleStorages: (payload: {enabled: boolean, clearWrite: boolean}) => ReturnType, serviceWorkerOnline: (online: boolean) => void, cryptoPort: (payload: void, source: MessageEventSource, event: MessageEvent) => void, createObjectURL: (blob: Blob) => string, tabState: (payload: TabState, source: MessageEventSource) => void, } & MTProtoBroadcastEvent, { convertWebp: (payload: {fileName: string, bytes: Uint8Array}) => Promise, convertOpus: (payload: {fileName: string, bytes: Uint8Array}) => Promise, localStorageProxy: (payload: LocalStorageProxyTask['payload']) => Promise, mirror: (payload: MirrorTaskPayload) => void, notificationBuild: (payload: NotificationBuildTaskPayload) => void } & MTProtoBroadcastEvent, Master> { private static INSTANCE: MTProtoMessagePort; constructor() { super(); MTProtoMessagePort.INSTANCE = this; MOUNT_CLASS_TO && (MOUNT_CLASS_TO.mtprotoMessagePort = this); } public static getInstance() { return this.INSTANCE as MTProtoMessagePort; } }