spiderable-middleware
Version:
Boost organic traffic from SERPs, AI Chat Bots, and GPT
203 lines (191 loc) • 5.46 kB
TypeScript
declare module 'spiderable-middleware' {
import type { IncomingMessage, ServerResponse, RequestOptions } from 'http';
import type { URL } from 'url';
/**
* Configuration options for Spiderable.
*/
export interface SpiderableOptions {
/**
* The URL of the rendering service.
* Defaults to the environment variable `SPIDERABLE_SERVICE_URL` or `PRERENDER_SERVICE_URL` if not provided.
*/
serviceURL?: string;
/**
* The root URL of your application.
* Defaults to the environment variable `ROOT_URL` if not provided.
*/
rootURL?: string;
/**
* Authentication credentials in the form "username:password".
*/
auth?: string;
/**
* When true, duplicate slashes in URLs will be sanitized.
*/
sanitizeUrls?: boolean;
/**
* An array of bot user-agent patterns.
*/
botsUA?: string[];
/**
* An array of header names to ignore when proxying responses.
*/
ignoredHeaders?: string[];
/**
* An array of URL paths to ignore.
*/
ignore?: string[];
/**
* An array of rules (strings or RegExp) for URLs that should be rendered exclusively.
*/
only?: (string | RegExp)[];
/**
* A RegExp to match URLs that should be rendered exclusively.
*/
onlyRE?: RegExp;
/**
* Request timeout in milliseconds.
*/
timeout?: number;
/**
* Additional request options (merged into the HTTP request payload).
*/
requestOptions?: RequestOptions;
/**
* When true, debug logging is enabled.
*/
debug?: boolean;
/**
* A regular expression to match static file extensions.
* (Not documented in the JS doc but used internally.)
*/
staticExt?: RegExp;
}
export type NextFunction = (err?: unknown) => void;
/**
* Spiderable middleware class for rendering pages for bots/crawlers.
*
* @example
* import Spiderable from 'spiderable-middleware';
* const spiderable = new Spiderable({
* rootURL: 'http://example.com',
* auth: 'test:test'
* });
*
* WebApp.connectHandlers.use(spiderable.handler);
*/
export default class Spiderable {
constructor(options?: SpiderableOptions);
/**
* Package name (set from package details).
*/
NAME: string;
/**
* The user agent used when sending requests to the rendering service.
*/
userAgent: string;
/**
* Authentication credentials.
*/
auth: string;
/**
* When true, enables debug logging.
*/
debug: boolean;
/**
* An array of "only" rules (strings or RegExp) or false if not defined.
*/
only: (string | RegExp)[] | false;
/**
* A RegExp built from the "only" rules or false if not defined.
*/
onlyRE: RegExp | false;
/**
* An array of bot user-agent patterns.
*/
botsUA: string[];
/**
* The root URL of the application.
*/
rootURL: string;
/**
* Request timeout (in milliseconds).
*/
timeout: number;
/**
* A RegExp to match static file extensions.
*/
staticExt: RegExp;
/**
* The rendering service URL.
*/
serviceURL: string;
/**
* When true, URLs are sanitized (removing duplicate slashes).
*/
sanitizeUrls: boolean;
/**
* An array of header names to ignore.
*/
ignoredHeaders: string[];
/**
* Additional options to be merged into the HTTP request payload.
*/
requestOptions: RequestOptions;
/**
* A RegExp built from the `ignoredHeaders` array.
*/
headersRE: RegExp;
/**
* A RegExp built from the `botsUA` array.
*/
botsRE: RegExp;
/**
* A RegExp built from the `ignore` option or false if not defined.
*/
ignoreRE: RegExp | false;
/**
* Constructs the complete service URL used to request a rendered page.
*
* @param urlObj - A URL object representing the original request.
* @param bua - Optional bot user-agent string (from the request headers).
* @returns A complete URL string to the rendering service.
*/
getServiceURL(urlObj: URL, bua?: string): string;
/**
* Processes the incoming request URL.
*
* @param req - The original HTTP request.
* @returns A URL object if the request qualifies for rendering, or false otherwise.
*/
getRequestURL(req: IncomingMessage): URL | false;
/**
* Express/connect–style middleware function.
*
* Processes the request and proxies a rendered response if applicable.
*
* @param req - The incoming HTTP request.
* @param res - The HTTP response.
* @param next - A function to call the next middleware.
* @returns true if the middleware handled the request, false otherwise.
*/
middleware(
req: IncomingMessage,
res: ServerResponse,
next: NextFunction
): boolean;
/**
* Alias for `middleware`. Can be used when mounting the middleware.
*/
handler: (req: IncomingMessage, res: ServerResponse, next: NextFunction) => boolean;
/**
* Alias for `middleware`.
*/
handle: (req: IncomingMessage, res: ServerResponse, next: NextFunction) => void;
}
}
declare module 'meteor/ostrio:spiderable-middleware' {
export * from 'spiderable-middleware';
import Spiderable from 'spiderable-middleware';
export default Spiderable;
}