redwood-clerk
Version:
Unofficial Clerk integration for RedwoodSDK
31 lines (29 loc) • 1.26 kB
JavaScript
import { clerkClient } from "./clerk-client.js";
import { env } from "cloudflare:workers";
import { AuthStatus, TokenType, constants, makeAuthObjectSerializable, stripPrivateDataFromObject } from "@clerk/backend/internal";
//#region src/server/clerk-middleware.ts
const clerkMiddleware = (options) => async ({ ctx, headers, request }) => {
const requestState = await clerkClient().authenticateRequest(request, {
...options,
secretKey: options?.secretKey ?? env.CLERK_SECRET_KEY,
publishableKey: options?.publishableKey ?? env.CLERK_PUBLISHABLE_KEY,
acceptsToken: TokenType.SessionToken
});
const locationHeader = requestState.headers.get(constants.Headers.Location);
if (locationHeader) return new Response(null, {
status: 307,
headers: requestState.headers
});
if (requestState.status === AuthStatus.Handshake) throw new Error("Clerk: handshake status without redirect");
if (requestState.headers) requestState.headers.forEach((value, key) => {
headers.set(key, value);
});
const auth = (options$1) => requestState.toAuth(options$1);
const initialState = makeAuthObjectSerializable(stripPrivateDataFromObject(auth()));
Object.assign(ctx, {
auth,
__internal_initial_state: initialState
});
};
//#endregion
export { clerkMiddleware };