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.
 
 
 
 
 

102 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 CacheStorageController from '../cacheStorage';
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';
let _isServiceWorkerOnline = true;
export function isServiceWorkerOnline() {
return _isServiceWorkerOnline;
}
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}) => {
appStateManager.userId = userId;
appStateManager.newVersion = newVersion;
appStateManager.oldVersion = oldVersion;
appStateManager.setState(state);
for(const key of pushedKeys) {
appStateManager.setKeyValueToStorage(key);
}
RESET_STORAGES_PROMISE.resolve(resetStorages);
},
toggleStorage: (enabled) => {
// AppStorage.toggleStorage(enabled);
CacheStorageController.toggleStorage(enabled);
},
event: (payload, source) => {
console.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);
// }
// },
// refreshReference: (task: RefreshReferenceTaskResponse) => {
// const hex = bytesToHex(task.originalPayload);
// const r = apiFileManager.refreshReferencePromises[hex];
// const deferred = r?.deferred;
// if(deferred) {
// if(task.error) {
// deferred.reject(task.error);
// } else {
// deferred.resolve(task.payload);
// }
// }
// },
});
console.log('MTProto start');
appManagersManager.start();
appManagersManager.getManagers();
listenMessagePort(port);