UNPKG

@paroicms/site-generator-plugin

Version:

ParoiCMS Site Generator Plugin

146 lines (145 loc) 4.47 kB
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); }