Telegram Web K with changes to work inside I2P https://web.telegram.i2p/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

100 lines
3.0 KiB

/*
* https://github.com/morethanwords/tweb
* Copyright (C) 2019-2021 Eduard Kuzmenko
* https://github.com/morethanwords/tweb/blob/master/LICENSE
*/
// just to include
import '../polyfill';
import '../../helpers/peerIdPolyfill';
import cryptoWorker from "../crypto/cryptoMessagePort";
import { setEnvironment } from '../../environment/utils';
import appStateManager from '../appManagers/appStateManager';
import transportController from './transports/controller';
import MTProtoMessagePort from './mtprotoMessagePort';
import RESET_STORAGES_PROMISE from '../appManagers/utils/storages/resetStoragesPromise';
import appManagersManager from '../appManagers/appManagersManager';
import listenMessagePort from '../../helpers/listenMessagePort';
import { logger } from '../logger';
import { State } from '../../config/state';
import toggleStorages from '../../helpers/toggleStorages';
import appTabsManager from '../appManagers/appTabsManager';
let _isServiceWorkerOnline = true;
export function isServiceWorkerOnline() {
return _isServiceWorkerOnline;
}
const log = logger('MTPROTO');
const port = new MTProtoMessagePort<false>();
port.addMultipleEventsListeners({
environment: (environment) => {
setEnvironment(environment);
transportController.waitForWebSocket();
},
crypto: ({method, args}) => {
return cryptoWorker.invokeCrypto(method as any, ...args as any);
},
state: ({state, resetStorages, pushedKeys, newVersion, oldVersion, userId}) => {
log('got state', state, pushedKeys);
appStateManager.userId = userId;
appStateManager.newVersion = newVersion;
appStateManager.oldVersion = oldVersion;
(Object.keys(state) as any as (keyof State)[]).forEach((key) => {
appStateManager.pushToState(key, state[key], true, !pushedKeys.includes(key));
});
RESET_STORAGES_PROMISE.resolve(resetStorages);
},
toggleStorages: ({enabled, clearWrite}) => {
return toggleStorages(enabled, clearWrite);
},
event: (payload, source) => {
log('will redirect event', payload, source);
port.invokeExceptSource('event', payload, source);
},
serviceWorkerOnline: (online) => {
_isServiceWorkerOnline = online;
},
createObjectURL: (blob) => {
return URL.createObjectURL(blob);
},
// socketProxy: (task) => {
// const socketTask = task.payload;
// const id = socketTask.id;
// const socketProxied = socketsProxied.get(id);
// if(socketTask.type === 'message') {
// socketProxied.dispatchEvent('message', socketTask.payload);
// } else if(socketTask.type === 'open') {
// socketProxied.dispatchEvent('open');
// } else if(socketTask.type === 'close') {
// socketProxied.dispatchEvent('close');
// socketsProxied.delete(id);
// }
// },
});
log('MTProto start');
appManagersManager.start();
appManagersManager.getManagers();
appTabsManager.start();
listenMessagePort(port, (source) => {
appTabsManager.addTab(source);
}, (source) => {
appTabsManager.deleteTab(source);
});