UNPKG

redwood-clerk

Version:

Unofficial Clerk integration for RedwoodSDK

31 lines (29 loc) 1.26 kB
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 };