From 2654e313b96a605303b8ef0b51cc5df105d43976 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Sun, 6 Jul 2025 16:35:55 -0700 Subject: [PATCH] feat: also emit dxt signature info schema (#44) --- scripts/build-dxt-schema.js | 27 ++++++++++++++++++--------- src/schemas.ts | 11 ++++++++++- src/types.ts | 10 ++-------- 3 files changed, 30 insertions(+), 18 deletions(-) diff --git a/scripts/build-dxt-schema.js b/scripts/build-dxt-schema.js index e21b0ef..fd6604d 100644 --- a/scripts/build-dxt-schema.js +++ b/scripts/build-dxt-schema.js @@ -1,14 +1,23 @@ -import { DxtManifestSchema } from "../src/schemas.ts"; +import { DxtManifestSchema, DxtSignatureInfoSchema } from "../src/schemas.ts"; import * as z from "zod/v4"; import fs from "node:fs/promises"; import path from "node:path"; -const schema = z.toJSONSchema(DxtManifestSchema); +const schemasToWrite = { + 'dxt-manifest': DxtManifestSchema, + 'dxt-signature-info': DxtSignatureInfoSchema +} + await fs.mkdir(path.join(import.meta.dirname, "../dist"), { recursive: true }); -await fs.writeFile( - path.join(import.meta.dirname, "../dist", "dxt-manifest.schema.json"), - JSON.stringify(schema, null, 2), - { - encoding: "utf8", - }, -); + +for (const key in schemasToWrite) { + const schema = z.toJSONSchema(schemasToWrite[key]); + await fs.writeFile( + path.join(import.meta.dirname, "../dist", `${key}.schema.json`), + JSON.stringify(schema, null, 2), + { + encoding: "utf8", + }, + ); +} + diff --git a/src/schemas.ts b/src/schemas.ts index 9281a97..266ad97 100644 --- a/src/schemas.ts +++ b/src/schemas.ts @@ -73,7 +73,7 @@ export const DxtUserConfigurationOptionSchema = z.object({ export const DxtUserConfigValuesSchema = z.record( z.string(), - z.union([z.string(), z.number(), z.boolean(), z.array(z.string())]), + z.union([z.string(), z.number(), z.boolean(), z.array(z.string())]) ); export const DxtManifestSchema = z.object({ @@ -103,3 +103,12 @@ export const DxtManifestSchema = z.object({ .record(z.string(), DxtUserConfigurationOptionSchema) .optional(), }); + +export const DxtSignatureInfoSchema = z.object({ + status: z.enum(["signed", "unsigned", "self-signed"]), + publisher: z.string().optional(), + issuer: z.string().optional(), + valid_from: z.string().optional(), + valid_to: z.string().optional(), + fingerprint: z.string().optional(), +}); diff --git a/src/types.ts b/src/types.ts index cdddffa..5b8aafc 100644 --- a/src/types.ts +++ b/src/types.ts @@ -10,6 +10,7 @@ import type { DxtManifestSchema, DxtManifestServerSchema, DxtManifestToolSchema, + DxtSignatureInfoSchema, DxtUserConfigurationOptionSchema, DxtUserConfigValuesSchema, McpServerConfigSchema, @@ -48,14 +49,7 @@ export type DxtManifest = z.infer; /** * Information about a DXT package signature */ -export interface DxtSignatureInfo { - status: "signed" | "unsigned" | "self-signed"; - publisher?: string; - issuer?: string; - valid_from?: string; - valid_to?: string; - fingerprint?: string; -} +export type DxtSignatureInfo = z.infer; export interface Logger { log: (...args: unknown[]) => void;