@beignet/core
Version:
Core framework primitives for Beignet
87 lines • 3.14 kB
TypeScript
/**
* Error reporting hook utilities for @beignet/core/server
*/
import type { HttpContractConfig } from "../../contracts/index.js";
import type { ErrorReporterPort, ErrorReportOptions } from "../../error-reporting/index.js";
import type { HttpRequestLike, ServerCaughtErrorHook, ServerHook } from "../types.js";
type MaybePromise<T> = T | Promise<T>;
/**
* Minimal context shape used by `createErrorReportingHooks(...)`.
*/
export type ErrorReportingContext = {
ports?: {
errorReporter?: ErrorReporterPort;
};
requestId?: string;
traceId?: string;
spanId?: string;
parentSpanId?: string;
traceparent?: string;
actor?: {
type?: string;
id?: string;
};
tenant?: {
id?: string;
};
};
/**
* Arguments passed to error reporting hook callbacks.
*/
export type ErrorReportingHookArgs<Ctx> = Parameters<ServerCaughtErrorHook<Ctx>>[0];
/**
* Error reporter resolver accepted by `createErrorReportingHooks(...)`.
*/
export type ErrorReporterResolver<Ctx> = (args: ErrorReportingHookArgs<Ctx>) => MaybePromise<ErrorReporterPort | undefined>;
/**
* Options accepted by `createErrorReportingHooks(...)`.
*/
export interface ErrorReportingHooksOptions<Ctx> {
/**
* Reporter to use instead of `ctx.ports.errorReporter`.
*/
reporter?: ErrorReporterPort | ErrorReporterResolver<Ctx>;
/**
* Decide whether a caught error should be captured. The default reports
* unexpected failures and skips expected catalog/auth/validation outcomes.
*/
shouldReport?: (args: ErrorReportingHookArgs<Ctx>) => MaybePromise<boolean>;
/**
* Additional capture options. These are merged over Beignet's request,
* actor, tenant, contract, and trace metadata.
*/
reportOptions?: ErrorReportOptions | ((args: ErrorReportingHookArgs<Ctx>) => MaybePromise<ErrorReportOptions>);
/**
* Maximum time allowed for reporting preparation, capture, and failure
* observation. Each phase is bounded independently. Set to `false` only for
* intentionally unbounded reporters.
*
* @default 1000
*/
timeoutMs?: number | false;
/**
* Observer for reporter failures. Reporter failures are otherwise ignored so
* error reporting cannot change the HTTP response.
*/
onReporterError?: (args: {
error: unknown;
reportingError: unknown;
ctx?: Ctx;
req: HttpRequestLike;
contract: HttpContractConfig;
}) => MaybePromise<void>;
}
/**
* Create server hooks that capture unexpected HTTP request failures through
* `ctx.ports.errorReporter`.
*
* The hook observes `onCaughtError`, never maps responses, and ignores capture
* failures by default so reporting cannot affect request handling.
*/
export declare function createErrorReportingHooks<Ctx extends ErrorReportingContext = ErrorReportingContext>(config?: ErrorReportingHooksOptions<Ctx>): ServerHook<Ctx>;
/**
* Default filter for HTTP error reporting.
*/
export declare function shouldReportServerError(error: unknown): boolean;
export {};
//# sourceMappingURL=error-reporting.d.ts.map