diff --git a/apps/backend/prisma/seed.ts b/apps/backend/prisma/seed.ts index fc19c6dd7..e67721475 100644 --- a/apps/backend/prisma/seed.ts +++ b/apps/backend/prisma/seed.ts @@ -1,6 +1,6 @@ /* eslint-disable no-restricted-syntax */ import { usersCrudHandlers } from '@/app/api/latest/users/crud'; -import { createOrUpdateProject, getProject } from '@/lib/projects'; +import { createOrUpdateProjectWithLegacyConfig, getProject } from '@/lib/projects'; import { DEFAULT_BRANCH_ID, getSoleTenancyFromProjectBranch } from '@/lib/tenancies'; import { getPrismaClientForTenancy } from '@/prisma-client'; import { PrismaClient } from '@prisma/client'; @@ -34,7 +34,7 @@ async function seed() { let internalProject = await getProject('internal'); if (!internalProject) { - internalProject = await createOrUpdateProject({ + internalProject = await createOrUpdateProjectWithLegacyConfig({ type: 'create', projectId: 'internal', data: { @@ -60,7 +60,7 @@ async function seed() { const internalTenancy = await getSoleTenancyFromProjectBranch("internal", DEFAULT_BRANCH_ID); const internalPrisma = await getPrismaClientForTenancy(internalTenancy); - internalProject = await createOrUpdateProject({ + internalProject = await createOrUpdateProjectWithLegacyConfig({ projectId: 'internal', branchId: DEFAULT_BRANCH_ID, type: 'update', @@ -237,7 +237,7 @@ async function seed() { if (existingProject) { console.log('Emulator project already exists, skipping creation'); } else { - await createOrUpdateProject({ + await createOrUpdateProjectWithLegacyConfig({ projectId: emulatorProjectId, type: 'create', data: { diff --git a/apps/backend/src/app/api/latest/integrations/custom/projects/provision/route.tsx b/apps/backend/src/app/api/latest/integrations/custom/projects/provision/route.tsx index a27ea921a..fe6d71d23 100644 --- a/apps/backend/src/app/api/latest/integrations/custom/projects/provision/route.tsx +++ b/apps/backend/src/app/api/latest/integrations/custom/projects/provision/route.tsx @@ -1,5 +1,5 @@ import { createApiKeySet } from "@/lib/internal-api-keys"; -import { createOrUpdateProject } from "@/lib/projects"; +import { createOrUpdateProjectWithLegacyConfig } from "@/lib/projects"; import { globalPrismaClient } from "@/prisma-client"; import { createSmartRouteHandler } from "@/route-handlers/smart-route-handler"; import { neonAuthorizationHeaderSchema, projectDisplayNameSchema, yupNumber, yupObject, yupString, yupTuple } from "@stackframe/stack-shared/dist/schema-fields"; @@ -28,7 +28,7 @@ export const POST = createSmartRouteHandler({ handler: async (req) => { const [clientId] = decodeBasicAuthorizationHeader(req.headers.authorization[0])!; - const createdProject = await createOrUpdateProject({ + const createdProject = await createOrUpdateProjectWithLegacyConfig({ ownerIds: [], type: 'create', data: { diff --git a/apps/backend/src/app/api/latest/integrations/neon/oauth-providers/crud.tsx b/apps/backend/src/app/api/latest/integrations/neon/oauth-providers/crud.tsx index 3cee37861..de5b5826b 100644 --- a/apps/backend/src/app/api/latest/integrations/neon/oauth-providers/crud.tsx +++ b/apps/backend/src/app/api/latest/integrations/neon/oauth-providers/crud.tsx @@ -1,4 +1,4 @@ -import { createOrUpdateProject } from "@/lib/projects"; +import { createOrUpdateProjectWithLegacyConfig } from "@/lib/projects"; import { Tenancy, getTenancy } from "@/lib/tenancies"; import { createCrudHandlers } from "@/route-handlers/crud-handler"; import { createCrud } from "@stackframe/stack-shared/dist/crud"; @@ -97,7 +97,7 @@ export const oauthProvidersCrudHandlers = createLazyProxy(() => createCrudHandle throw new StatusError(StatusError.BadRequest, 'OAuth provider already exists'); } - await createOrUpdateProject({ + await createOrUpdateProjectWithLegacyConfig({ type: 'update', projectId: auth.project.id, branchId: auth.branchId, @@ -124,7 +124,7 @@ export const oauthProvidersCrudHandlers = createLazyProxy(() => createCrudHandle throw new StatusError(StatusError.NotFound, 'OAuth provider not found'); } - await createOrUpdateProject({ + await createOrUpdateProjectWithLegacyConfig({ type: 'update', projectId: auth.project.id, branchId: auth.branchId, @@ -153,7 +153,7 @@ export const oauthProvidersCrudHandlers = createLazyProxy(() => createCrudHandle throw new StatusError(StatusError.NotFound, 'OAuth provider not found'); } - await createOrUpdateProject({ + await createOrUpdateProjectWithLegacyConfig({ type: 'update', projectId: auth.project.id, branchId: auth.branchId, diff --git a/apps/backend/src/app/api/latest/integrations/neon/projects/provision/route.tsx b/apps/backend/src/app/api/latest/integrations/neon/projects/provision/route.tsx index fc285f4a8..45f390ee5 100644 --- a/apps/backend/src/app/api/latest/integrations/neon/projects/provision/route.tsx +++ b/apps/backend/src/app/api/latest/integrations/neon/projects/provision/route.tsx @@ -1,5 +1,5 @@ import { createApiKeySet } from "@/lib/internal-api-keys"; -import { createOrUpdateProject } from "@/lib/projects"; +import { createOrUpdateProjectWithLegacyConfig } from "@/lib/projects"; import { globalPrismaClient } from "@/prisma-client"; import { createSmartRouteHandler } from "@/route-handlers/smart-route-handler"; import { neonAuthorizationHeaderSchema, projectDisplayNameSchema, yupArray, yupNumber, yupObject, yupString, yupTuple } from "@stackframe/stack-shared/dist/schema-fields"; @@ -32,7 +32,7 @@ export const POST = createSmartRouteHandler({ handler: async (req) => { const [clientId] = decodeBasicAuthorizationHeader(req.headers.authorization[0])!; - const createdProject = await createOrUpdateProject({ + const createdProject = await createOrUpdateProjectWithLegacyConfig({ ownerIds: [], sourceOfTruth: req.body.connection_strings ? { type: 'neon', diff --git a/apps/backend/src/app/api/latest/internal/projects/crud.tsx b/apps/backend/src/app/api/latest/internal/projects/crud.tsx index 5c8c5fca5..2bc12df24 100644 --- a/apps/backend/src/app/api/latest/internal/projects/crud.tsx +++ b/apps/backend/src/app/api/latest/internal/projects/crud.tsx @@ -1,5 +1,5 @@ import { renderedOrganizationConfigToProjectCrud } from "@/lib/config"; -import { createOrUpdateProject, getProjectQuery, listManagedProjectIds } from "@/lib/projects"; +import { createOrUpdateProjectWithLegacyConfig, getProjectQuery, listManagedProjectIds } from "@/lib/projects"; import { DEFAULT_BRANCH_ID, getSoleTenancyFromProjectBranch } from "@/lib/tenancies"; import { globalPrismaClient, rawQueryAll } from "@/prisma-client"; import { createCrudHandlers } from "@/route-handlers/crud-handler"; @@ -30,7 +30,7 @@ export const adminUserProjectsCrudHandlers = createLazyProxy(() => createCrudHan const ownerPack = ownerPacks.find(p => p.has(user.id)); const userIds = ownerPack ? [...ownerPack] : [user.id]; - const project = await createOrUpdateProject({ + const project = await createOrUpdateProjectWithLegacyConfig({ ownerIds: userIds, type: 'create', data, diff --git a/apps/backend/src/app/api/latest/internal/projects/current/crud.tsx b/apps/backend/src/app/api/latest/internal/projects/current/crud.tsx index d52f26ebe..ffad17686 100644 --- a/apps/backend/src/app/api/latest/internal/projects/current/crud.tsx +++ b/apps/backend/src/app/api/latest/internal/projects/current/crud.tsx @@ -1,5 +1,5 @@ import { renderedOrganizationConfigToProjectCrud } from "@/lib/config"; -import { createOrUpdateProject } from "@/lib/projects"; +import { createOrUpdateProjectWithLegacyConfig } from "@/lib/projects"; import { getTenancy } from "@/lib/tenancies"; import { getPrismaClientForTenancy, globalPrismaClient } from "@/prisma-client"; import { createCrudHandlers } from "@/route-handlers/crud-handler"; @@ -17,7 +17,7 @@ export const projectsCrudHandlers = createLazyProxy(() => createCrudHandlers(pro ) { throw new StatusError(400, "Invalid email theme"); } - const project = await createOrUpdateProject({ + const project = await createOrUpdateProjectWithLegacyConfig({ type: "update", projectId: auth.project.id, branchId: auth.branchId, diff --git a/apps/backend/src/lib/projects.tsx b/apps/backend/src/lib/projects.tsx index c4af49812..fa7f70fb1 100644 --- a/apps/backend/src/lib/projects.tsx +++ b/apps/backend/src/lib/projects.tsx @@ -60,7 +60,7 @@ export async function getProject(projectId: string): Promise { + const response = await this.sendAdminRequest( + `/internal/config-overrides`, + { method: "GET" }, + null, + ); + return await response.json(); + } + + async updateConfigOverrides(data: ConfigOverridesCrud["Admin"]["Update"]): Promise { + const response = await this.sendAdminRequest( + `/internal/config-overrides`, + { method: "PATCH", body: JSON.stringify(data) }, + null, + ); + return await response.json(); + } }