Pass the page URL to Hypertune
Overview
Setup
input Context {
environment: Environment!
user: User!
url: String!
}import { NextRequest, NextResponse } from "next/server";
export function addHeadersToRequest(
request: NextRequest,
response: NextResponse,
headers: Record<string, string>,
): void {
mutateRequestHeaders(request, response, (newRequestHeaders) => {
Object.entries(headers).forEach(([key, value]) => {
newRequestHeaders.set(key, value);
});
});
}
const xMiddlewareOverrideHeadersHeaderName = "x-middleware-override-headers";
const xMiddlewareRequestHeaderNamePrefix = "x-middleware-request-";
function mutateRequestHeaders(
request: NextRequest,
response: NextResponse,
mutate: (newRequestHeaders: Headers) => void,
): void {
const newRequestHeaders = new Headers(request.headers);
// Add existing request header overrides to new request headers
response.headers.forEach((value, key) => {
if (key.toLowerCase().startsWith(xMiddlewareRequestHeaderNamePrefix)) {
const originalName = key.slice(xMiddlewareRequestHeaderNamePrefix.length);
newRequestHeaders.set(originalName, value);
}
});
mutate(newRequestHeaders);
const dummyResponse = NextResponse.next({
request: { headers: newRequestHeaders },
});
// Add request header overrides to response
dummyResponse.headers.forEach((value, key) => {
if (
key === xMiddlewareOverrideHeadersHeaderName ||
key.toLowerCase().startsWith(xMiddlewareRequestHeaderNamePrefix)
) {
response.headers.set(key, value);
}
});
}Last updated