@paroicms/site-generator-plugin
Version:
ParoiCMS Site Generator Plugin
146 lines (145 loc) • 4.47 kB
JavaScript
import { isObj } from "@paroicms/public-anywhere-lib";
import { ApiError } from "@paroicms/public-server-lib";
import { type } from "arktype";
export const GeneratorPluginConfigurationAT = type({
anthropicApiKey: "string",
mistralApiKey: "string",
packName: "string",
"debugDir?": "string|undefined",
"googleRecaptchaSiteKey?": "string|undefined",
"googleRecaptchaSecretKey?": "string|undefined",
"+": "reject",
}).pipe((data) => data);
const BaseCommandAT = type({
command: "string",
"+": "ignore",
});
const NewSessionCommandAT = type({
command: '"newSession"',
language: "string",
recaptchaToken: "string",
"+": "reject",
});
const RenewSessionCommandAT = type({
command: '"renewSession"',
sessionToken: "string",
recaptchaToken: "string",
"+": "reject",
});
const SetLanguageCommandAT = type({
command: '"setLanguage"',
sessionToken: "string",
language: "string",
"+": "reject",
});
const LoadWorkSessionCommandAT = type({
command: '"loadWorkSession"',
sessionToken: "string",
"+": "reject",
});
const LoadStepCommandAT = type({
command: '"loadStep"',
sessionToken: "string",
stepNumber: "number",
"+": "reject",
});
const CreateSiteSchemaCommandAT = type({
command: '"createSiteSchema"',
sessionToken: "string",
prompt: "string",
"+": "reject",
});
const UpdateSiteSchemaCommandAT = type({
command: '"updateSiteSchema"',
sessionToken: "string",
prompt: "string",
fromStepNumber: "number",
"+": "reject",
});
const GenerateSiteCommandAT = type({
command: '"generateSite"',
sessionToken: "string",
fromStepNumber: "number",
withSampleData: "boolean",
"+": "reject",
});
const PromptAT = type("string").narrow((prompt) => {
if (prompt.length > 5000) {
throw new ApiError("Prompt is too long", 400);
}
return true;
});
export function formatGeneratorCommand(data) {
if (!isObj(data))
throw new ApiError("Invalid input", 400);
const baseCommand = BaseCommandAT.assert(data);
const command = baseCommand.command;
if (command === "newSession") {
const validated = NewSessionCommandAT.assert(data);
return {
command: "newSession",
language: validated.language,
recaptchaToken: validated.recaptchaToken,
};
}
if (command === "renewSession") {
const validated = RenewSessionCommandAT.assert(data);
return {
command: "renewSession",
sessionToken: validated.sessionToken,
recaptchaToken: validated.recaptchaToken,
};
}
if (command === "setLanguage") {
const validated = SetLanguageCommandAT.assert(data);
return {
command: "setLanguage",
sessionToken: validated.sessionToken,
language: validated.language,
};
}
if (command === "loadWorkSession") {
const validated = LoadWorkSessionCommandAT.assert(data);
return {
command: "loadWorkSession",
sessionToken: validated.sessionToken,
};
}
if (command === "loadStep") {
const validated = LoadStepCommandAT.assert(data);
return {
command: "loadStep",
sessionToken: validated.sessionToken,
stepNumber: validated.stepNumber,
};
}
if (command === "createSiteSchema") {
const validated = CreateSiteSchemaCommandAT.assert(data);
const prompt = PromptAT.assert(validated.prompt);
return {
command: "createSiteSchema",
sessionToken: validated.sessionToken,
prompt,
};
}
if (command === "updateSiteSchema") {
const validated = UpdateSiteSchemaCommandAT.assert(data);
const prompt = PromptAT.assert(validated.prompt);
return {
command: "updateSiteSchema",
sessionToken: validated.sessionToken,
prompt,
fromStepNumber: validated.fromStepNumber,
};
}
if (command === "generateSite") {
const validated = GenerateSiteCommandAT.assert(data);
return {
command: "generateSite",
sessionToken: validated.sessionToken,
fromStepNumber: validated.fromStepNumber,
withSampleData: validated.withSampleData,
};
}
throw new ApiError(`Invalid command: ${command}`, 400);
}