/// export type IpcEvent = Electron.IpcMainEvent | Electron.IpcMainServiceWorkerEvent; export type IpcInvokeEvent = Electron.IpcMainInvokeEvent | Electron.IpcMainServiceWorkerInvokeEvent; export type IpcAnyEvent = IpcEvent | IpcInvokeEvent; interface RoutingDelegateObserver { session: Electron.Session; onExtensionMessage(event: Electron.IpcMainInvokeEvent, extensionId: string | undefined, handlerName: string, ...args: any[]): Promise; addListener(listener: EventListener, extensionId: string, eventName: string): void; removeListener(listener: EventListener, extensionId: string, eventName: string): void; } /** * Handles event routing IPCs and delivers them to the observer with the * associated session. */ declare class RoutingDelegate { static get(): RoutingDelegate; private sessionMap; private workers; private constructor(); addObserver(observer: RoutingDelegateObserver): void; private onRouterMessage; private onRemoteMessage; private onAddListener; private onRemoveListener; } export type ExtensionSender = Electron.WebContents | Electron.ServiceWorkerMain; type ExtendedExtension = Omit & { manifest: chrome.runtime.Manifest; }; export type ExtensionEvent = { type: 'frame'; sender: Electron.WebContents; extension: ExtendedExtension; } | { type: 'service-worker'; sender: Electron.ServiceWorkerMain; extension: ExtendedExtension; }; export type HandlerCallback = (event: ExtensionEvent, ...args: any[]) => any; export interface HandlerOptions { /** Whether the handler can be invoked on behalf of a different session. */ allowRemote?: boolean; /** Whether an extension context is required to invoke the handler. */ extensionContext: boolean; /** Required extension permission to run the handler. */ permission?: chrome.runtime.ManifestPermissions; } type FrameEventListener = { type: 'frame'; host: Electron.WebContents; extensionId: string; }; type SWEventListener = { type: 'service-worker'; extensionId: string; }; type EventListener = FrameEventListener | SWEventListener; export declare class ExtensionRouter { session: Electron.Session; private delegate; private handlers; private listeners; /** * Collection of all extension hosts in the session. * * Currently the router has no ability to wake up non-persistent background * scripts to deliver events. For now we just hold a reference to them to * prevent them from being terminated. */ private extensionHosts; private extensionWorkers; constructor(session: Electron.Session, delegate?: RoutingDelegate); private filterListeners; private observeListenerHost; addListener(listener: EventListener, extensionId: string, eventName: string): void; removeListener(listener: EventListener, extensionId: string, eventName: string): void; private getHandler; onExtensionMessage(event: IpcInvokeEvent, extensionId: string | undefined, handlerName: string, ...args: any[]): Promise; private handle; /** Returns a callback to register API handlers for the given context. */ apiHandler(): (name: string, callback: HandlerCallback, opts?: Partial) => void; /** * Sends extension event to the host for the given extension ID if it * registered a listener for it. */ sendEvent(targetExtensionId: string | undefined, eventName: string, ...args: any[]): void; /** Broadcasts extension event to all extension hosts listening for it. */ broadcastEvent(eventName: string, ...args: any[]): void; } export {};