libmodulor
Version:
A TypeScript library to create platform-agnostic applications
77 lines (76 loc) • 4.04 kB
TypeScript
import type { AppManifest } from '../../../app/index.js';
import type { HTTPMethod, HTTPStatusNumber, URL, URLPath } from '../../../dt/index.js';
import type { SettingsManager, Worker } from '../../../std/index.js';
import { UCBuilder, type UCDef, type UCInput, type UCManager, type UCManagerExecServerOpts, type UCOPIBase, type UCOutput } from '../../../uc/index.js';
import type { HTTPDataEnvelope, HTTPReqData } from '../../../utils/index.js';
import { AuthCookieCreator, type Output as AuthCookieCreatorOutput } from './AuthCookieCreator.js';
import { AuthenticationChecker } from './AuthenticationChecker.js';
import { CustomerFacingErrorBuilder } from './CustomerFacingErrorBuilder.js';
import { PublicApiKeyChecker } from './PublicApiKeyChecker.js';
import { RequestChecker } from './RequestChecker.js';
import { RequestLogger } from './RequestLogger.js';
import type { ServerManagerSettings } from './ServerManager.js';
export interface ServerRequestHandlerReq {
cookie: (name: string) => Promise<string | undefined>;
bodyFromFormData: () => Promise<HTTPReqData>;
bodyFromJSON: () => Promise<HTTPReqData>;
bodyFromQueryParams: () => Promise<HTTPReqData>;
bodyRaw: string | object | null;
method: HTTPMethod;
header: (name: string) => Promise<string | undefined>;
secure: boolean;
url: URL;
}
export interface ServerRequestHandlerRes {
clearCookie: (name: string) => Promise<void>;
redirect: (location: URL | URLPath) => Promise<void>;
setCookie: (info: AuthCookieCreatorOutput) => Promise<void>;
}
export interface ServerRequestHandlerInput<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined> {
appManifest: AppManifest;
dangerouslySkipAuthCheck?: boolean | undefined;
dangerouslySkipPubApiKeyCheck?: boolean | undefined;
envelope: HTTPDataEnvelope;
execOpts?: UCManagerExecServerOpts<OPI0, OPI1> | undefined;
req: ServerRequestHandlerReq;
res: ServerRequestHandlerRes;
skipSideEffects?: boolean | undefined;
ucd: UCDef<I, OPI0, OPI1>;
/**
* It is not injected in the handler constructor because it must be the same as the one used in ServerManager.
*
* And in some cases, this latter is specific to a context : for instance in automated tests.
*/
ucManager: UCManager;
}
type BodylessStatus = 204 | 302;
type Output<OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined> = ({
body: undefined;
status: BodylessStatus;
} | {
body: UCOutput<OPI0, OPI1> | object;
rawErr?: Error;
status: Exclude<HTTPStatusNumber, BodylessStatus>;
}) & {
rawErr?: Error;
};
type S = Pick<ServerManagerSettings, 'server_cookies_name_auth' | 'server_public_api_key_header_name'>;
export declare class ServerRequestHandler implements Worker<ServerRequestHandlerInput, Promise<Output>> {
private authCookieCreator;
private authenticationChecker;
private customerFacingErrorBuilder;
private publicApiKeyChecker;
private requestChecker;
private requestLogger;
private settingsManager;
private ucBuilder;
constructor(authCookieCreator: AuthCookieCreator, authenticationChecker: AuthenticationChecker, customerFacingErrorBuilder: CustomerFacingErrorBuilder, publicApiKeyChecker: PublicApiKeyChecker, requestChecker: RequestChecker, requestLogger: RequestLogger, settingsManager: SettingsManager<S>, ucBuilder: UCBuilder);
s(): S;
exec<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>({ appManifest, dangerouslySkipAuthCheck, dangerouslySkipPubApiKeyCheck, envelope, execOpts, req, res, skipSideEffects, ucd, ucManager, }: ServerRequestHandlerInput<I, OPI0, OPI1>): Promise<Output<OPI0, OPI1>>;
private fill;
private applySideEffects;
private applyClearAuthSideEffect;
private applyRedirectSideEffect;
private applySetAuthSideEffect;
}
export {};