Utils

Request

Utilities to access incoming request

assertMethod(event, expected, allowHead?)

Asserts that the incoming request method is of the expected type using isMethod.

If the method is not allowed, it will throw a 405 error with the message "HTTP method is not allowed".

If allowHead is true, it will allow HEAD requests to pass if the expected method is GET.

Example:

getQuery(event)

Get parsed query string object from the request URL.

Example:

getRequestHost(event, opts: { xForwardedHost? })

Get the request hostname.

If xForwardedHost is true, it will use the x-forwarded-host header if it exists.

If no host header is found, it will default to "localhost".

Example:

getRequestIP(event)

Try to get the client IP address from the incoming request.

If xForwardedFor is true, it will use the x-forwarded-for header if it exists.

If IP cannot be determined, it will default to undefined.

Example:

getRequestProtocol(event, opts: { xForwardedProto? })

Get the request protocol.

If x-forwarded-proto header is set to "https", it will return "https". You can disable this behavior by setting xForwardedProto to false.

If protocol cannot be determined, it will default to "http".

Example:

getRequestURL(event, opts: { xForwardedHost?, xForwardedProto? })

Generated the full incoming request URL using getRequestProtocol, getRequestHost and event.path.

If xForwardedHost is true, it will use the x-forwarded-host header if it exists.

If xForwardedProto is false, it will not use the x-forwarded-proto header.

Example:

getRouterParam(event, name, opts: { decode? })

Get a matched route param by name.

If decode option is true, it will decode the matched route param using decodeURI.

Example:

getRouterParams(event, opts: { decode? })

Get matched route params.

If decode option is true, it will decode the matched route params using decodeURIComponent.

Example:

getValidatedQuery(event, validate)

Get the query param from the request URL validated with validate function.

You can use a simple function to validate the query object or a library like zod to define a schema.

Example:

getValidatedRouterParams(event, validate, opts: { decode? })

Get matched route params and validate with validate function.

If decode option is true, it will decode the matched route params using decodeURI.

You can use a simple function to validate the params object or a library like zod to define a schema.

Example:

isMethod(event, expected, allowHead?)

Checks if the incoming request method is of the expected type.

If allowHead is true, it will allow HEAD requests to pass if the expected method is GET.

Example:

getRequestFingerprint(event, opts)

Get a unique fingerprint for the incoming request.

readBody(event)

Reads request body and tries to parse using JSON.parse or URLSearchParams.

Example:

readValidatedBody(event, validate)

Tries to read the request body via readBody, then uses the provided validation function and either throws a validation error or returns the result.

You can use a simple function to validate the body or use a library like zod to define a schema.

Example:

app.use("/", (event) => {
  assertMethod(event, "GET");
  // Handle GET request, otherwise throw 405 error
});
app.use("/", (event) => {
  const query = getQuery(event); // { key: "value", key2: ["value1", "value2"] }
});
app.use("/", (event) => {
  const host = getRequestHost(event); // "example.com"
});
app.use("/", (event) => {
  const ip = getRequestIP(event); // "192.0.2.0"
});
app.use("/", (event) => {
  const protocol = getRequestProtocol(event); // "https"
});
app.use("/", (event) => {
  const url = getRequestURL(event); // "https://example.com/path"
});
app.use("/", (event) => {
  const param = getRouterParam(event, "key");
});
app.use("/", (event) => {
  const params = getRouterParams(event); // { key: "value" }
});
app.use("/", (event) => {
  const query = getValidatedQuery(event, (data) => {
    return "key" in data && typeof data.key === "string";
  });
});

Example:

import { z } from "zod";
app.use("/", (event) => {
  const query = getValidatedQuery(
    event,
    z.object({
      key: z.string(),
    }).parse,
  );
});
app.use("/", (event) => {
  const params = getValidatedRouterParams(event, (data) => {
    return "key" in data && typeof data.key === "string";
  });
});

Example:

import { z } from "zod";
app.use("/", (event) => {
  const params = getValidatedRouterParams(
    event,
    z.object({
      key: z.string(),
    }),
  );
});
app.use("/", (event) => {
  if (isMethod(event, "GET")) {
    // Handle GET request
  } else if (isMethod(event, ["POST", "PUT"])) {
    // Handle POST or PUT request
  }
});

Body utils

app.use("/", async (event) => {
  const body = await readBody(event);
});
app.use("/", async (event) => {
  const body = await readValidatedBody(event, (body) => {
    return typeof body === "object" && body !== null;
  });
});

Example:

import { z } from "zod";
app.use("/", async (event) => {
  const objectSchema = z.object();
  const body = await readValidatedBody(event, objectSchema.safeParse);
});