Files
formbricks/packages/database/zod/api-keys.ts
victorvhs017 c03e60ac0b feat: organization endpoints (#5076)
Co-authored-by: Dhruwang <dhruwangjariwala18@gmail.com>
Co-authored-by: pandeymangg <anshuman.pandey9999@gmail.com>
2025-04-05 13:54:21 +02:00

60 lines
1.6 KiB
TypeScript

import { type ApiKey, type ApiKeyEnvironment, ApiKeyPermission, EnvironmentType } from "@prisma/client";
import { z } from "zod";
import { ZOrganizationAccess } from "../../types/api-key";
export const ZApiKeyPermission = z.nativeEnum(ApiKeyPermission);
export const ZApiKeyEnvironment = z.object({
id: z.string().cuid2(),
createdAt: z.date(),
updatedAt: z.date(),
apiKeyId: z.string().cuid2(),
environmentId: z.string().cuid2(),
projectId: z.string().cuid2(),
projectName: z.string(),
environmentType: z.nativeEnum(EnvironmentType),
permission: ZApiKeyPermission,
}) satisfies z.ZodType<ApiKeyEnvironment>;
export const ZApiKey = z.object({
id: z.string().cuid2(),
createdAt: z.date(),
createdBy: z.string(),
lastUsedAt: z.date().nullable(),
label: z.string(),
hashedKey: z.string(),
organizationId: z.string().cuid2(),
organizationAccess: ZOrganizationAccess,
}) satisfies z.ZodType<ApiKey>;
export const ZApiKeyCreateInput = z.object({
label: z.string(),
organizationId: z.string().cuid2(),
environmentIds: z.array(z.string().cuid2()),
permissions: z.record(z.string().cuid2(), ZApiKeyPermission),
createdBy: z.string(),
});
export const ZApiKeyEnvironmentCreateInput = z.object({
apiKeyId: z.string().cuid2(),
environmentId: z.string().cuid2(),
permission: ZApiKeyPermission,
});
export const ZApiKeyData = ZApiKey.pick({
organizationId: true,
organizationAccess: true,
}).merge(
z.object({
environments: z.array(
ZApiKeyEnvironment.pick({
environmentId: true,
environmentType: true,
permission: true,
projectId: true,
projectName: true,
})
),
})
);