UNPKG

@architect/functions

Version:

Runtime utility library for Functional Web Apps (FWAs) built with Architect (https://arc.codes)

107 lines (98 loc) 3.97 kB
import { APIGatewayProxyEvent, Context, APIGatewayProxyResult, } from "aws-lambda"; // from @types/aws-lambda import { Callback } from "./util"; // Turn off automatic exporting export { }; export type HttpMethods = "GET" | "POST" | "PATCH" | "PUT" | "DELETE"; export type ApiGatewayRequestVersion = "1.0" | "2.0" | string; export type SessionData = Record<string, any>; export interface HttpRequest { httpMethod: HttpMethods; /** The absolute path of the request */ path: string; /** The absolute path of the request, with resources substituted for actual path parts (e.g. /{foo}/bar) */ resource: string; /** Any URL params, if defined in your HTTP Function's path (e.g. foo in GET /:foo/bar) */ pathParameters: Record<string, string>; /** Any query params if present in the client request */ queryStringParameters: Record<string, string>; /** All client request headers */ headers: Record<string, string>; /** The request body in a base64-encoded buffer. You'll need to parse request.body before you can use it, but Architect provides tools to do this - see parsing request bodies. */ body: any; /** Indicates whether body is base64-encoded binary payload (will always be true if body has not null) */ isBase64Encoded: boolean; /** When the request/response is run through arc.http.async (https://arc.codes/docs/en/reference/runtime/node#arc.http.async) then it will have session added. */ session?: SessionData | undefined; version: ApiGatewayRequestVersion; rawBody: string; method: HttpMethods; params: Record<string, string>; query: Record<string, string>; } export interface HttpResponse { /** Sets the HTTP status code */ statusCode?: number | undefined; /** Alias for @see statusCode */ status?: number | undefined; /** All response headers */ headers?: Record<string, string> | undefined; /** * Contains request body, either as a plain string (no encoding or serialization required) or, if binary, base64-encoded buffer * Note: The maximum body payload size is 6MB */ body?: string | undefined; /** * Indicates whether body is base64-encoded binary payload * Required to be set to true if emitting a binary payload */ isBase64Encoded?: boolean | undefined; /** When the request/response is run through arc.http.async (https://arc.codes/docs/en/reference/runtime/node#arc.http.async) then it will have session added. */ session?: SessionData | undefined; /** * When used with https://arc.codes/docs/en/reference/runtime/node#arc.http.async * json sets the Content-Type header to application/json */ json?: any | undefined; /** * When used with https://arc.codes/docs/en/reference/runtime/node#arc.http.async * json sets the Content-Type header to application/json */ html?: string | undefined; css?: string | undefined; js?: string | undefined; text?: string | undefined; xml?: string | undefined; } export type HttpHandler = ( req: HttpRequest, res: (resOrError: HttpResponse | Error) => void, next: () => void, ) => void; export type HttpAsyncHandler = ( req: HttpRequest, context: Context, ) => Promise<HttpResponse | void>; type LambdaHandler = ( event: APIGatewayProxyEvent, context: Context, ) => Promise<APIGatewayProxyResult>; export interface ArcHTTP { (...handlers: HttpHandler[]): LambdaHandler; // these method signatures are the same (...handlers: HttpAsyncHandler[]): LambdaHandler; // unable to overload gracefully async: (...handlers: HttpAsyncHandler[]) => LambdaHandler; helpers: { bodyParser: (req: HttpRequest) => Record<string, any>; interpolate: (req: HttpRequest) => HttpRequest; url: (url: string) => string; }; session: { read(req: HttpRequest): Promise<SessionData>; read(req: HttpRequest, callback: Callback<SessionData>): void; write(sess: SessionData): Promise<string>; write(sess: SessionData, callback: Callback<string>): void; }; }