server/packages/sdk/schemas/instance.ts
2026-02-25 02:34:27 +01:00

35 lines
1.1 KiB
TypeScript

import { z } from "zod";
import { extensionRegex, semverRegex } from "../regex.ts";
import { ImageContentFormatSchema } from "./contentformat.ts";
import { TransientEntitySchema } from "./entity.ts";
export const InstanceMetadataSchema = TransientEntitySchema.extend({
type: z.literal("InstanceMetadata"),
name: z.string().min(1),
software: z.strictObject({
name: z.string().min(1),
version: z.string().min(1),
}),
compatibility: z.strictObject({
versions: z.array(
z.string().regex(semverRegex, "must be a valid SemVer version"),
),
extensions: z.array(
z
.string()
.min(1)
.regex(
extensionRegex,
"must be in the format 'namespaced_url:extension_name', e.g. 'pub.versia:reactions'",
),
),
}),
description: z.string().nullish(),
domain: z.string(),
public_key: z.strictObject({
key: z.string().min(1),
algorithm: z.literal("ed25519"),
}),
logo: ImageContentFormatSchema.nullish(),
banner: ImageContentFormatSchema.nullish(),
});