mirror of
https://github.com/versia-pub/server.git
synced 2025-12-06 08:28:19 +01:00
68 lines
1.9 KiB
TypeScript
68 lines
1.9 KiB
TypeScript
import { z } from "zod";
|
|
import { url } from "./common.ts";
|
|
import {
|
|
NonTextContentFormatSchema,
|
|
TextContentFormatSchema,
|
|
} from "./contentformat.ts";
|
|
import { EntitySchema } from "./entity.ts";
|
|
import { PollExtensionSchema } from "./extensions/polls.ts";
|
|
|
|
export const NoteSchema = EntitySchema.extend({
|
|
type: z.literal("Note"),
|
|
attachments: z.array(NonTextContentFormatSchema).nullish(),
|
|
author: url,
|
|
category: z
|
|
.enum([
|
|
"microblog",
|
|
"forum",
|
|
"blog",
|
|
"image",
|
|
"video",
|
|
"audio",
|
|
"messaging",
|
|
])
|
|
.nullish(),
|
|
content: TextContentFormatSchema.nullish(),
|
|
collections: z
|
|
.strictObject({
|
|
replies: url,
|
|
quotes: url,
|
|
"pub.versia:reactions/Reactions": url.nullish(),
|
|
"pub.versia:share/Shares": url.nullish(),
|
|
"pub.versia:likes/Likes": url.nullish(),
|
|
"pub.versia:likes/Dislikes": url.nullish(),
|
|
})
|
|
.catchall(url),
|
|
device: z
|
|
.strictObject({
|
|
name: z.string(),
|
|
version: z.string().nullish(),
|
|
url: url.nullish(),
|
|
})
|
|
.nullish(),
|
|
group: url.or(z.enum(["public", "followers"])).nullish(),
|
|
is_sensitive: z.boolean().nullish(),
|
|
mentions: z.array(url).nullish(),
|
|
previews: z
|
|
.array(
|
|
z.strictObject({
|
|
link: url,
|
|
title: z.string(),
|
|
description: z.string().nullish(),
|
|
image: url.nullish(),
|
|
icon: url.nullish(),
|
|
}),
|
|
)
|
|
.nullish(),
|
|
quotes: url.nullish(),
|
|
replies_to: url.nullish(),
|
|
subject: z.string().nullish(),
|
|
extensions: EntitySchema.shape.extensions
|
|
.unwrap()
|
|
.unwrap()
|
|
.extend({
|
|
"pub.versia:polls": PollExtensionSchema.nullish(),
|
|
})
|
|
.nullish(),
|
|
});
|