Skip to content

Commit 61bc0de

Browse files
fomalhautbN2D4
andauthored
Config DB (stack-auth#568)
- Added new config json schema and helper functions - Separated the internal project and client project so we can later change the internal project APIs without breaking backward compatibility - Added database to config json and config json to project type so we can test and compare the result in production Co-authored-by: Konsti Wohlwend <n2d4xc@gmail.com>
1 parent 1311467 commit 61bc0de

File tree

32 files changed

+2188
-805
lines changed

32 files changed

+2188
-805
lines changed

apps/backend/package.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,23 +47,24 @@
4747
"@opentelemetry/sdk-trace-base": "^1.26.0",
4848
"@opentelemetry/sdk-trace-node": "^1.26.0",
4949
"@opentelemetry/semantic-conventions": "^1.27.0",
50+
"@oslojs/otp": "^1.1.0",
5051
"@prisma/client": "^6.0.1",
5152
"@prisma/extension-accelerate": "^1.2.1",
5253
"@prisma/instrumentation": "^5.19.1",
5354
"@sentry/nextjs": "^8.40.0",
5455
"@simplewebauthn/server": "^11.0.0",
5556
"@stackframe/stack-emails": "workspace:*",
5657
"@stackframe/stack-shared": "workspace:*",
57-
"@vercel/functions": "^1.4.2",
58-
"@vercel/otel": "^1.10.0",
58+
"@vercel/functions": "^2.0.0",
59+
"@vercel/otel": "^1.10.4",
5960
"bcrypt": "^5.1.1",
6061
"dotenv-cli": "^7.3.0",
6162
"jose": "^5.2.2",
63+
"json-diff": "^1.0.6",
6264
"next": "15.2.3",
6365
"nodemailer": "^6.9.10",
6466
"oidc-provider": "^8.5.1",
6567
"openid-client": "5.6.4",
66-
"@oslojs/otp": "^1.1.0",
6768
"posthog-node": "^4.1.0",
6869
"react": "19.0.0",
6970
"react-dom": "19.0.0",
@@ -75,6 +76,7 @@
7576
},
7677
"devDependencies": {
7778
"@simplewebauthn/types": "^11.0.0",
79+
"@types/json-diff": "^1.0.3",
7880
"@types/node": "^20.8.10",
7981
"@types/nodemailer": "^6.4.14",
8082
"@types/oidc-provider": "^8.5.1",

apps/backend/prisma/tsup.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ export default defineConfig({
88
outDir: 'dist',
99
target: 'node22',
1010
platform: 'node',
11-
noExternal: ['@stackframe/stack-shared', '@prisma/client', '@prisma/extension-accelerate', 'jose'],
11+
noExternal: ['@stackframe/stack-shared', '@prisma/client', '@prisma/extension-accelerate', 'jose', 'yup', 'json-diff'],
1212
clean: true
1313
});

apps/backend/scripts/verify-data-integrity.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ async function main() {
7575
const projectId = projects[i].id;
7676
await recurse(`[project ${i + 1}/${projects.length}] ${projectId} ${projects[i].displayName}`, async (recurse) => {
7777
const [currentProject, users] = await Promise.all([
78-
expectStatusCode(200, `/api/v1/projects/current`, {
78+
expectStatusCode(200, `/api/v1/internal/projects/current`, {
7979
method: "GET",
8080
headers: {
8181
"x-stack-project-id": projectId,
@@ -93,7 +93,10 @@ async function main() {
9393
}),
9494
]);
9595
if (users.pagination?.next_cursor) throwErr("Users are paginated? Please update the verify-data-integrity.ts script to handle this.");
96-
if (currentProject.user_count !== users.items.length) throwErr("User count mismatch.");
96+
if (currentProject.user_count !== users.items.length) throwErr("User count mismatch.", {
97+
projectUserCount: currentProject.user_count,
98+
usersUserCount: users.items.length,
99+
});
97100

98101
for (let j = 0; j < users.items.length; j++) {
99102
const user = users.items[j];

apps/backend/src/app/api/latest/integrations/neon/domains/crud.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import * as schemaFields from "@stackframe/stack-shared/dist/schema-fields";
44
import { yupMixed, yupObject } from "@stackframe/stack-shared/dist/schema-fields";
55
import { StatusError } from "@stackframe/stack-shared/dist/utils/errors";
66
import { createLazyProxy } from "@stackframe/stack-shared/dist/utils/proxies";
7-
import { projectsCrudHandlers } from "../../../projects/current/crud";
7+
import { projectsCrudHandlers } from "../../../internal/projects/current/crud";
88

99
const domainSchema = schemaFields.urlSchema.defined()
1010
.matches(/^https?:\/\//, 'URL must start with http:// or https://')

apps/backend/src/app/api/latest/internal/projects/crud.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { createProject, fullProjectInclude, listManagedProjectIds, projectPrisma
22
import { prismaClient } from "@/prisma-client";
33
import { createCrudHandlers } from "@/route-handlers/crud-handler";
44
import { KnownErrors } from "@stackframe/stack-shared";
5-
import { internalProjectsCrud } from "@stackframe/stack-shared/dist/interface/crud/projects";
5+
import { adminUserProjectsCrud } from "@stackframe/stack-shared/dist/interface/crud/projects";
66
import { projectIdSchema, yupObject } from "@stackframe/stack-shared/dist/schema-fields";
77
import { throwErr } from "@stackframe/stack-shared/dist/utils/errors";
88
import { createLazyProxy } from "@stackframe/stack-shared/dist/utils/proxies";
@@ -17,7 +17,7 @@ const disableSignUpByDefault = new Set([
1717
"1343e3e7-dd7a-44a1-8752-701c0881da72",
1818
]);
1919

20-
export const internalProjectsCrudHandlers = createLazyProxy(() => createCrudHandlers(internalProjectsCrud, {
20+
export const adminUserProjectsCrudHandlers = createLazyProxy(() => createCrudHandlers(adminUserProjectsCrud, {
2121
paramsSchema: yupObject({
2222
projectId: projectIdSchema.defined(),
2323
}),
@@ -52,7 +52,7 @@ export const internalProjectsCrudHandlers = createLazyProxy(() => createCrudHand
5252
});
5353

5454
return {
55-
items: results.map(x => projectPrismaToCrud(x)),
55+
items: await Promise.all(results.map(x => projectPrismaToCrud(x))),
5656
is_paginated: false,
5757
} as const;
5858
}

0 commit comments

Comments
 (0)