mirror of
https://github.com/sourcebot-dev/sourcebot.git
synced 2025-12-12 04:15:30 +00:00
74 lines
No EOL
2.3 KiB
TypeScript
74 lines
No EOL
2.3 KiB
TypeScript
import { checkIfOrgDomainExists } from "@/actions";
|
|
import { z } from "zod";
|
|
import { isServiceError } from "./utils";
|
|
import { serviceErrorSchema } from "./serviceError";
|
|
import { CodeHostType } from "@sourcebot/db";
|
|
|
|
export const secretCreateRequestSchema = z.object({
|
|
key: z.string(),
|
|
value: z.string(),
|
|
});
|
|
|
|
export const secreteDeleteRequestSchema = z.object({
|
|
key: z.string(),
|
|
});
|
|
|
|
export const repositoryQuerySchema = z.object({
|
|
codeHostType: z.nativeEnum(CodeHostType),
|
|
repoId: z.number(),
|
|
repoName: z.string(),
|
|
repoDisplayName: z.string().optional(),
|
|
repoCloneUrl: z.string(),
|
|
webUrl: z.string().optional(),
|
|
imageUrl: z.string().optional(),
|
|
indexedAt: z.coerce.date().optional(),
|
|
});
|
|
|
|
export const searchContextQuerySchema = z.object({
|
|
id: z.number(),
|
|
name: z.string(),
|
|
description: z.string().optional(),
|
|
repoNames: z.array(z.string()),
|
|
});
|
|
|
|
export const verifyCredentialsRequestSchema = z.object({
|
|
email: z.string().email(),
|
|
password: z.string().min(8),
|
|
});
|
|
|
|
export const orgNameSchema = z.string().min(2, { message: "Organization name must be at least 3 characters long." });
|
|
|
|
export const orgDomainSchema = z.string()
|
|
.min(2, { message: "Url must be at least 3 characters long." })
|
|
.max(50, { message: "Url must be at most 50 characters long." })
|
|
.regex(/^[a-z][a-z-]*[a-z]$/, {
|
|
message: "Url must start and end with a letter, and can only contain lowercase letters and dashes.",
|
|
})
|
|
.refine((domain) => {
|
|
const reserved = [
|
|
'api',
|
|
'login',
|
|
'signup',
|
|
'onboard',
|
|
'redeem',
|
|
'account',
|
|
'settings',
|
|
'staging',
|
|
'support',
|
|
'docs',
|
|
'blog',
|
|
'contact',
|
|
'status'
|
|
];
|
|
return !reserved.includes(domain);
|
|
}, "This url is reserved for internal use.")
|
|
.refine(async (domain) => {
|
|
const doesDomainExist = await checkIfOrgDomainExists(domain);
|
|
return isServiceError(doesDomainExist) || !doesDomainExist;
|
|
}, "This url is already taken.");
|
|
|
|
export const getVersionResponseSchema = z.object({
|
|
version: z.string(),
|
|
});
|
|
|
|
export const getReposResponseSchema = z.union([repositoryQuerySchema.array(), serviceErrorSchema]); |