///
///
///
import { AppHeader } from '@shardeum-foundation/lib-net/build/src/types';
import { EventEmitter } from 'events';
import { Application, Handler } from 'express';
import Log4js from 'log4js';
import Logger from '../logger';
import * as Shardus from '../shardus/shardus-types';
/** TYPES */
export interface IPInfo {
internalPort: number;
internalIp: string;
externalPort: number;
externalIp: string;
}
export declare let ipInfo: IPInfo;
/** CLASS */
export declare class NetworkClass extends EventEmitter {
app: Application;
io: SocketIO.Server;
sn: any;
logger: Logger;
mainLogger: Log4js.Logger;
netLogger: Log4js.Logger;
timeout: number;
internalRoutes: {};
externalRoutes: Array<(app: Application) => void>;
extServer: any;
intServer: any;
verboseLogsNet: boolean;
InternalTellCounter: number;
InternalAskCounter: number;
ipInfo: any;
signingSecretKeyHex: string;
shardusCryptoHashKey: string;
externalCatchAll: any;
debugNetworkDelay: number;
statisticsInstance: any;
useLruCacheForSocketMgmt: boolean;
lruCacheSizeForSocketMgmt: number;
payloadSizeLimitInBytes: number;
headerSizeLimitInBytes: number;
constructor(config: Shardus.StrictServerConfiguration, logger: Logger);
setDebugNetworkDelay(delay: number): void;
setStatisticsInstance(statistics: any): void;
customSendJsonMiddleware(req: any, res: any, next: any): void;
_setupExternal(): Promise;
_setupInternal(): Promise;
/**
*
* @param nodes
* @param route
* @param message
* @param alreadyLogged this is so that gossip system can indicate that we already have recorded playback logs
*/
tell(nodes: Shardus.Node[], route: string, message: any, alreadyLogged?: boolean, subRoute?: string): Promise;
tellBinary(nodes: Shardus.Node[] | Shardus.NodeWithRank[], route: string, message: Buffer, appHeader: AppHeader, trackerId: string, alreadyLogged?: boolean): Promise;
ask(node: any, route: any, message: any, alreadyLogged?: boolean, extraTime?: number): Promise;
askBinary(node: any, route: string, message: Buffer, appHeader: AppHeader, trackerId: string, alreadyLogged?: boolean, extraTime?: number): Promise<{
res: Buffer;
header?: AppHeader;
sign?: Shardus.Sign;
}>;
evictCachedSockets(nodes: Shardus.Node[]): void;
setup(ipInfo: IPInfo, signingSecretKeyHex: string): Promise;
shutdown(): Promise;
_registerExternal(method: string, route: string, responseHandler: Handler): any;
_registerExternal(method: string, route: string, authHandler: Handler, responseHandler: Handler): any;
_applyExternal(): void;
setExternalCatchAll(handler: any): void;
registerExternalGet(route: string, responseHandler: Handler): any;
registerExternalGet(route: string, authHandler: Handler, responseHandler: Handler): any;
registerExternalPost(route: string, responseHandler: Handler): any;
registerExternalPost(route: string, authHandler: Handler, responseHandler: Handler): any;
registerExternalPut(route: string, responseHandler: Handler): any;
registerExternalPut(route: string, authHandler: Handler, responseHandler: Handler): any;
registerExternalDelete(route: string, responseHandler: Handler): any;
registerExternalDelete(route: string, authHandler: Handler, responseHandler: Handler): any;
registerExternalPatch(route: string, responseHandler: Handler): any;
registerExternalPatch(route: string, authHandler: Handler, responseHandler: Handler): any;
registerInternal(route: string, handler: any): void;
unregisterInternal(route: any): void;
}
/** FUNCTIONS */
export declare function init(): Promise;
/**
* Gets and offset time from NTP servers. Returns false if not within
* config.p2p.syncLimit although this is tuned wrong (too high)
* and not used
*
* @param timeServers
* @returns
*/
export declare function checkAndUpdateTimeSyncedOffset(timeServers: any): Promise;
export declare function shardusGetTime(): number;
export declare function getNetworkTimeOffset(): number;
export declare function calculateFakeTimeOffset(shift: number, spread: number): number;
export declare function clearFakeTimeOffset(): number;
export declare function getFakeTimeOffset(): number;
export declare function getLastNTPObject(): any;