[edge] Add RequestContext type (#9526)

Co-authored-by: Kiko Beats <josefrancisco.verdu@gmail.com>
This commit is contained in:
Gal Schlezinger
2023-02-24 13:07:16 +02:00
committed by GitHub
parent 2db9678bd4
commit abea002e93
4 changed files with 133 additions and 0 deletions

View File

@@ -4,5 +4,6 @@ export * from './middleware-helpers';
export type { Geo } from './edge-headers';
export * from './edge-headers';
export * from './response';
export type { RequestContext } from './request';
import './published-types.d.ts';

View File

@@ -0,0 +1,52 @@
/**
* An extension to the standard `Request` object that is passed to every Edge Function.
*
* @example
* ```ts
* import type { RequestContext } from '@vercel/edge';
*
* export default async function handler(request: Request, ctx: RequestContext): Promise<Response> {
* // ctx is the RequestContext
* }
* ```
*/
export interface RequestContext {
/**
* A method that can be used to keep the function running after a response has been sent.
* This is useful when you have an async task that you want to keep running even after the
* response has been sent and the request has ended.
*
* @example
*
* <caption>Sending an internal error to an error tracking service</caption>
*
* ```ts
* import type { RequestContext } from '@vercel/edge';
*
* export async function handleRequest(request: Request, ctx: RequestContext): Promise<Response> {
* try {
* return await myFunctionThatReturnsResponse();
* } catch (e) {
* ctx.waitUntil((async () => {
* // report this error to your error tracking service
* await fetch('https://my-error-tracking-service.com', {
* method: 'POST',
* body: JSON.stringify({
* stack: e.stack,
* message: e.message,
* name: e.name,
* url: request.url,
* }),
* });
* })());
* return new Response('Internal Server Error', { status: 500 });
* }
* }
* ```
*/
waitUntil(
/**
* A promise that will be kept alive until it resolves or rejects.
*/ promise: Promise<unknown>
): void;
}