apitally
Version:
Simple API monitoring & analytics for REST APIs built with Express, Fastify, Hono, Koa, and NestJS.
68 lines (65 loc) • 2.35 kB
text/typescript
import { Buffer } from 'buffer';
import { IncomingHttpHeaders, OutgoingHttpHeaders } from 'http';
import TempGzipFile from './tempGzipFile.cjs';
type Request = {
timestamp: number;
method: string;
path?: string;
url: string;
headers: [string, string][];
size?: number;
consumer?: string;
body?: Buffer;
};
type Response = {
statusCode: number;
responseTime: number;
headers: [string, string][];
size?: number;
body?: Buffer;
};
type RequestLoggingConfig = {
enabled: boolean;
logQueryParams: boolean;
logRequestHeaders: boolean;
logRequestBody: boolean;
logResponseHeaders: boolean;
logResponseBody: boolean;
logException: boolean;
maskQueryParams: RegExp[];
maskHeaders: RegExp[];
maskRequestBodyCallback?: (request: Request) => Buffer | null | undefined;
maskResponseBodyCallback?: (request: Request, response: Response) => Buffer | null | undefined;
excludePaths: RegExp[];
excludeCallback?: (request: Request, response: Response) => boolean;
};
declare class RequestLogger {
config: RequestLoggingConfig;
enabled: boolean;
suspendUntil: number | null;
private pendingWrites;
private currentFile;
private files;
private maintainIntervalId?;
private lock;
constructor(config?: Partial<RequestLoggingConfig>);
private shouldExcludePath;
private shouldExcludeUserAgent;
private shouldMaskQueryParam;
private shouldMaskHeader;
private hasSupportedContentType;
isSupportedContentType(contentType?: string | null): boolean;
private maskQueryParams;
private maskHeaders;
logRequest(request: Request, response: Response, error?: Error): void;
writeToFile(): Promise<void>;
getFile(): TempGzipFile | undefined;
retryFileLater(file: TempGzipFile): void;
rotateFile(): Promise<void>;
maintain(): Promise<void>;
clear(): Promise<void>;
close(): Promise<void>;
}
declare function convertHeaders(headers: Headers | IncomingHttpHeaders | OutgoingHttpHeaders | Record<string, string | string[] | number | undefined>): [string, string][];
declare function convertBody(body: any, contentType?: string | null): Buffer<any> | undefined;
export { type Request, type RequestLoggingConfig, type Response, convertBody, convertHeaders, RequestLogger as default };