import { promises as fs } from "node:fs"; import path from "node:path"; import { fileURLToPath } from "node:url"; import { ProtocolSchemas } from "../src/gateway/protocol/schema.js"; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const repoRoot = path.resolve(__dirname, ".."); async function writeJsonSchema() { const definitions: Record = {}; for (const [name, schema] of Object.entries(ProtocolSchemas)) { definitions[name] = schema; } const rootSchema = { $schema: "http://json-schema.org/draft-07/schema#", $id: "https://moltbot.dev/protocol.schema.json", title: "Moltbot Gateway Protocol", description: "Handshake, request/response, and event frames for the Gateway WebSocket.", oneOf: [ { $ref: "#/definitions/RequestFrame" }, { $ref: "#/definitions/ResponseFrame" }, { $ref: "#/definitions/EventFrame" }, ], discriminator: { propertyName: "type", mapping: { req: "#/definitions/RequestFrame", res: "#/definitions/ResponseFrame", event: "#/definitions/EventFrame", }, }, definitions, }; const distDir = path.join(repoRoot, "dist"); await fs.mkdir(distDir, { recursive: true }); const jsonSchemaPath = path.join(distDir, "protocol.schema.json"); await fs.writeFile(jsonSchemaPath, JSON.stringify(rootSchema, null, 2)); console.log(`wrote ${jsonSchemaPath}`); return { jsonSchemaPath, schemaString: JSON.stringify(rootSchema) }; } async function main() { await writeJsonSchema(); } main().catch((err) => { console.error(err); process.exit(1); });