apitally
Version:
Simple API monitoring & analytics for REST APIs built with Express, Fastify, NestJS, AdonisJS, Hono, H3, Elysia, Hapi, and Koa.
81 lines (78 loc) • 2.71 kB
text/typescript
import { Buffer } from 'node:buffer';
import { IncomingHttpHeaders, OutgoingHttpHeaders } from 'node: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 LogRecord = {
timestamp: number;
logger?: string;
level: string;
message: string;
};
type RequestLoggingConfig = {
enabled: boolean;
logQueryParams: boolean;
logRequestHeaders: boolean;
logRequestBody: boolean;
logResponseHeaders: boolean;
logResponseBody: boolean;
logException: boolean;
captureLogs: boolean;
maskQueryParams: RegExp[];
maskHeaders: RegExp[];
maskBodyFields: 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>);
get maxBodySize(): number;
private shouldExcludePath;
private shouldExcludeUserAgent;
private shouldMaskQueryParam;
private shouldMaskHeader;
private shouldMaskBodyField;
private hasSupportedContentType;
private hasJsonContentType;
isSupportedContentType(contentType?: string | null): boolean;
private maskQueryParams;
private maskHeaders;
private maskBody;
private applyMasking;
logRequest(request: Request, response: Response, error?: Error, logs?: LogRecord[]): 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> | undefined): [string, string][];
declare function convertBody(body: any, contentType?: string | null): Buffer<any> | undefined;
export { type LogRecord, type Request, type RequestLoggingConfig, type Response, convertBody, convertHeaders, RequestLogger as default };