import * as net from 'net'; import { Server, IncomingMessage, ServerResponse } from 'node:http'; import EventEmitter from 'eventemitter3'; interface Events { listening: []; error: [error: Error]; denied: [hub: string, topic: string]; subscribe: [hub: string, topic: string, leaseSeconds: number]; unsubscribe: [hub: string, topic: string]; feed: [hub: string, topic: string, body: string]; } interface Options { /** * HTTP Callback URL * * Must be accessible on the public internet! */ callbackURL: string; /** * HMAC Secret */ secret: string; } declare class WebSub extends EventEmitter { private readonly callbackURL; private readonly secret; private server; constructor(options: Options); /** * Start a server listening for connections */ get listen(): { (port?: number | undefined, hostname?: string | undefined, backlog?: number | undefined, listeningListener?: (() => void) | undefined): Server; (port?: number | undefined, hostname?: string | undefined, listeningListener?: (() => void) | undefined): Server; (port?: number | undefined, backlog?: number | undefined, listeningListener?: (() => void) | undefined): Server; (port?: number | undefined, listeningListener?: (() => void) | undefined): Server; (path: string, backlog?: number | undefined, listeningListener?: (() => void) | undefined): Server; (path: string, listeningListener?: (() => void) | undefined): Server; (options: net.ListenOptions, listeningListener?: (() => void) | undefined): Server; (handle: any, backlog?: number | undefined, listeningListener?: (() => void) | undefined): Server; (handle: any, listeningListener?: (() => void) | undefined): Server; }; /** * Subscribe to a topic * * @param url - URL to subscribe to * @param leaseSeconds - Subscription lease seconds [default: 0] * @param force - Whether to override the topic to the given URL */ subscribe(url: string, leaseSeconds?: number, force?: boolean): Promise; /** * Unsubscribe from a topic * * @param url - URL to unsubscribe from * @param force - Whether to override the topic to the given URL */ unsubscribe(url: string, force?: boolean): Promise; private _discover; private _hmacKey; private _handleSubscribe; private _handleRequest; private _parseBody; private _handleGET; private _handlePOST; } export { Options, WebSub };