From c67a94529f33d9fa4f87b5738dbdb1966b486e7a Mon Sep 17 00:00:00 2001 From: Travis Fischer Date: Wed, 14 May 2025 16:48:40 +0700 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/api/src/db/schema/consumer.ts | 1 + apps/api/src/db/schema/deployment.ts | 1 + apps/api/src/db/schema/log-entry.ts | 1 + apps/api/src/db/schema/project.ts | 1 + apps/api/src/db/schema/team-member.ts | 1 + apps/api/src/db/schema/team.ts | 1 + apps/api/src/db/schema/types.ts | 54 +++++++++++++++++---------- apps/api/src/db/schema/user.ts | 13 ++++--- apps/api/src/db/types.test.ts | 3 +- package.json | 2 +- 10 files changed, 51 insertions(+), 27 deletions(-) diff --git a/apps/api/src/db/schema/consumer.ts b/apps/api/src/db/schema/consumer.ts index 228fbbe6..8e357834 100644 --- a/apps/api/src/db/schema/consumer.ts +++ b/apps/api/src/db/schema/consumer.ts @@ -136,6 +136,7 @@ export const consumerSelectSchema = createSelectSchema(consumers, { .optional() .openapi('Deployment', { type: 'object' }) }) + .strip() .openapi('Consumer') export const consumerInsertSchema = createInsertSchema(consumers) diff --git a/apps/api/src/db/schema/deployment.ts b/apps/api/src/db/schema/deployment.ts index d3920040..ffb3a351 100644 --- a/apps/api/src/db/schema/deployment.ts +++ b/apps/api/src/db/schema/deployment.ts @@ -125,6 +125,7 @@ export const deploymentSelectSchema = createSelectSchema(deployments, { .optional() .openapi('Team', { type: 'object' }) }) + .strip() .openapi('Deployment') export const deploymentInsertSchema = createInsertSchema(deployments, { diff --git a/apps/api/src/db/schema/log-entry.ts b/apps/api/src/db/schema/log-entry.ts index dd8d6832..06e1060a 100644 --- a/apps/api/src/db/schema/log-entry.ts +++ b/apps/api/src/db/schema/log-entry.ts @@ -101,6 +101,7 @@ export const logEntrySelectSchema = createSelectSchema(logEntries) .optional() .openapi('Consumer', { type: 'object' }) }) + .strip() .openapi('LogEntry') export const logEntryInsertSchema = createInsertSchema(logEntries) diff --git a/apps/api/src/db/schema/project.ts b/apps/api/src/db/schema/project.ts index 9813ad3a..cd6cc975 100644 --- a/apps/api/src/db/schema/project.ts +++ b/apps/api/src/db/schema/project.ts @@ -192,6 +192,7 @@ export const projectSelectSchema = createSelectSchema(projects, { .optional() .openapi('Deployment', { type: 'object' }) }) + .strip() .openapi('Project') export const projectInsertSchema = createInsertSchema(projects, { diff --git a/apps/api/src/db/schema/team-member.ts b/apps/api/src/db/schema/team-member.ts index c24f7962..246684b2 100644 --- a/apps/api/src/db/schema/team-member.ts +++ b/apps/api/src/db/schema/team-member.ts @@ -72,6 +72,7 @@ export const teamMemberSelectSchema = createSelectSchema(teamMembers) .optional() .openapi('Team', { type: 'object' }) }) + .strip() .openapi('TeamMember') export const teamMemberInsertSchema = createInsertSchema(teamMembers) diff --git a/apps/api/src/db/schema/team.ts b/apps/api/src/db/schema/team.ts index e954db75..78e9098b 100644 --- a/apps/api/src/db/schema/team.ts +++ b/apps/api/src/db/schema/team.ts @@ -53,6 +53,7 @@ export const teamSelectSchema = createSelectSchema(teams) .optional() .openapi('User', { type: 'object' }) }) + .strip() .openapi('Team') export const teamInsertSchema = createInsertSchema(teams, { diff --git a/apps/api/src/db/schema/types.ts b/apps/api/src/db/schema/types.ts index e6d55410..1a96a8bb 100644 --- a/apps/api/src/db/schema/types.ts +++ b/apps/api/src/db/schema/types.ts @@ -5,36 +5,50 @@ export const authProviderTypeSchema = z .openapi('AuthProviderType') export type AuthProviderType = z.infer -export const authProviderSchema = z - .object({ - provider: authProviderTypeSchema, +export const authProviderSchema = z.object({ + provider: authProviderTypeSchema, - /** Provider-specific user id */ - id: z.string(), + /** Provider-specific user id */ + id: z.string(), - /** Provider-specific username */ - username: z.string().optional(), + /** Provider-specific username */ + username: z.string().optional(), - /** Standard oauth2 access token */ - accessToken: z.string().optional(), + /** Standard oauth2 access token */ + accessToken: z.string().optional(), - /** Standard oauth2 refresh token */ - refreshToken: z.string().optional(), + /** Standard oauth2 refresh token */ + refreshToken: z.string().optional(), - /** Stripe public key */ - publicKey: z.string().optional(), + /** Stripe public key */ + publicKey: z.string().optional(), - /** OAuth scope(s) */ - scope: z.string().optional() - }) - .openapi('AuthProvider') + /** OAuth scope(s) */ + scope: z.string().optional() +}) export type AuthProvider = z.infer -export const authProvidersSchema = z - .record(authProviderTypeSchema, authProviderSchema.optional()) - .openapi('AuthProviders') +export const publicAuthProviderSchema = authProviderSchema + .omit({ + accessToken: true, + refreshToken: true, + publicKey: true + }) + .strip() + .openapi('AuthProvider') +export type PublicAuthProvider = z.infer + +export const authProvidersSchema = z.record( + authProviderTypeSchema, + authProviderSchema.optional() +) export type AuthProviders = z.infer +export const publicAuthProvidersSchema = z + .record(authProviderTypeSchema, publicAuthProviderSchema.optional()) + .openapi('AuthProviders') +export type PublicAuthProviders = z.infer + export const webhookSchema = z .object({ url: z.string(), diff --git a/apps/api/src/db/schema/user.ts b/apps/api/src/db/schema/user.ts index dff5e0b6..7bf6b49b 100644 --- a/apps/api/src/db/schema/user.ts +++ b/apps/api/src/db/schema/user.ts @@ -13,7 +13,7 @@ import { hashSync } from 'bcryptjs' import { sha256 } from '@/lib/utils' import { teams } from './team' -import { type AuthProviders, authProvidersSchema } from './types' +import { type AuthProviders, publicAuthProvidersSchema } from './types' import { createInsertSchema, createSelectSchema, @@ -69,7 +69,12 @@ export const usersRelations = relations(users, ({ many }) => ({ teamsOwned: many(teams) })) -export const userSelectSchema = createSelectSchema(users).openapi('User') +export const userSelectSchema = createSelectSchema(users, { + providers: publicAuthProvidersSchema +}) + .omit({ password: true, emailConfirmToken: true, passwordResetToken: true }) + .strip() + .openapi('User') export const userInsertSchema = createInsertSchema(users, { username: (schema) => @@ -77,9 +82,7 @@ export const userInsertSchema = createInsertSchema(users, { message: 'Invalid username' }), - email: (schema) => schema.email().optional(), - - providers: authProvidersSchema.optional() + email: (schema) => schema.email().optional() }) .pick({ username: true, diff --git a/apps/api/src/db/types.test.ts b/apps/api/src/db/types.test.ts index 0506aec0..946026fc 100644 --- a/apps/api/src/db/types.test.ts +++ b/apps/api/src/db/types.test.ts @@ -4,10 +4,11 @@ import type { schema } from '.' import type { User } from './types' type UserSelect = typeof schema.users.$inferSelect +type UserKeys = Exclude test('User types are compatible', () => { // TODO: { github?: AuthProvider | undefined } !== { github: AuthProvider | undefined } expectTypeOf().toExtend() - expectTypeOf().toEqualTypeOf() + expectTypeOf().toEqualTypeOf() }) diff --git a/package.json b/package.json index 94291d44..f8804569 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "type": "git", "url": "git+https://github.com/transitive-bullshit/agentic-platform.git" }, - "packageManager": "pnpm@10.10.0", + "packageManager": "pnpm@10.11.0", "engines": { "node": ">=18" },