From c3f665bc2b505095aa23deee04fa6eab42eef265 Mon Sep 17 00:00:00 2001 From: Madison Date: Thu, 28 May 2026 11:08:21 -0500 Subject: [PATCH] Resolve apiUrl from the request via getApiUrlForRequest, and thread apiUrl into createAuthTokens. the 500 after merging dev was token signing now need an apiUrl for the JWT iss claim. I wasnt passing it until merge dev into --- .../src/app/api/latest/internal/preview/claim/route.tsx | 5 +++-- apps/backend/src/lib/preview-pool.ts | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/backend/src/app/api/latest/internal/preview/claim/route.tsx b/apps/backend/src/app/api/latest/internal/preview/claim/route.tsx index 53df6feb7..bd86c805d 100644 --- a/apps/backend/src/app/api/latest/internal/preview/claim/route.tsx +++ b/apps/backend/src/app/api/latest/internal/preview/claim/route.tsx @@ -1,4 +1,5 @@ import { claimPreviewPoolLease, fillPreviewPool } from "@/lib/preview-pool"; +import { getApiUrlForRequest } from "@/lib/request-api-url"; import { createSmartRouteHandler } from "@/route-handlers/smart-route-handler"; import { runAsynchronouslyAndWaitUntil } from "@/utils/background-tasks"; import { yupNumber, yupObject, yupString } from "@stackframe/stack-shared/dist/schema-fields"; @@ -25,8 +26,8 @@ export const POST = createSmartRouteHandler({ refresh_token: yupString().defined(), }).defined(), }), - async handler() { - const lease = await claimPreviewPoolLease(); + async handler(_req, fullReq) { + const lease = await claimPreviewPoolLease({ apiUrl: getApiUrlForRequest(fullReq) }); runAsynchronouslyAndWaitUntil(fillPreviewPool({ maxCreate: 1 })); return { diff --git a/apps/backend/src/lib/preview-pool.ts b/apps/backend/src/lib/preview-pool.ts index 19fab24e6..f535dc507 100644 --- a/apps/backend/src/lib/preview-pool.ts +++ b/apps/backend/src/lib/preview-pool.ts @@ -532,7 +532,7 @@ export async function fillPreviewPool(options?: { maxCreate?: number }): Promise }; } -export async function claimPreviewPoolLease(): Promise { +export async function claimPreviewPoolLease(options: { apiUrl: string }): Promise { assertPreviewModeEnabled(); const claimed = await claimReadyPreviewPoolProject() ?? await createPreviewPoolProject("leased"); @@ -542,6 +542,7 @@ export async function claimPreviewPoolLease(): Promise { const { accessToken, refreshToken } = await createAuthTokens({ tenancy: internalTenancy, projectUserId: claimed.userId, + apiUrl: options.apiUrl, }); return {