sourcebot/packages/web/src/app/[domain]/connections/utils.ts
Michael Sukkarieh 4869137d1e
skip stripe checkout for trial + fix indexing in progress UI + additional schema validation (#214)
* add additional config validation

* wip bypass stripe checkout for trial

* fix stripe trial checkout bypass

* fix indexing in progress ui on home page

* add subscription checks, more schema validation, and fix issue with complete page

* dont display if no indexed repos
2025-02-26 17:29:09 -08:00

40 lines
No EOL
1.2 KiB
TypeScript

import Ajv, { Schema } from "ajv";
import { z } from "zod";
export const createZodConnectionConfigValidator = <T>(jsonSchema: Schema, additionalConfigValidation?: (config: T) => { message: string, isValid: boolean }) => {
const ajv = new Ajv({
validateFormats: false,
});
const validate = ajv.compile(jsonSchema);
return z
.string()
.superRefine((data, ctx) => {
const addIssue = (message: string) => {
return ctx.addIssue({
code: "custom",
message: `Schema validation error: ${message}`
});
}
let parsed;
try {
parsed = JSON.parse(data);
} catch {
addIssue("Invalid JSON");
return;
}
const valid = validate(parsed);
if (!valid) {
addIssue(ajv.errorsText(validate.errors));
}
if (additionalConfigValidation) {
const result = additionalConfigValidation(parsed as T);
if (!result.isValid) {
addIssue(result.message);
}
}
});
}