mirror of
https://github.com/versia-pub/server.git
synced 2025-12-06 16:38:19 +01:00
42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
import { z } from "zod/v4";
|
|
import { extensionRegex, semverRegex } from "../regex.ts";
|
|
import { url } from "./common.ts";
|
|
import { ImageContentFormatSchema } from "./contentformat.ts";
|
|
import { EntitySchema } from "./entity.ts";
|
|
|
|
export const InstanceMetadataSchema = EntitySchema.extend({
|
|
type: z.literal("InstanceMetadata"),
|
|
id: z.null().optional(),
|
|
uri: z.null().optional(),
|
|
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(),
|
|
host: z.string(),
|
|
shared_inbox: url.nullish(),
|
|
public_key: z.strictObject({
|
|
key: z.string().min(1),
|
|
algorithm: z.literal("ed25519"),
|
|
}),
|
|
moderators: url.nullish(),
|
|
admins: url.nullish(),
|
|
logo: ImageContentFormatSchema.nullish(),
|
|
banner: ImageContentFormatSchema.nullish(),
|
|
});
|