mirror of
https://github.com/versia-pub/server.git
synced 2026-04-27 20:59:15 +02:00
feat(federation): ✨ Port to Versia 0.6
This commit is contained in:
parent
de69f27877
commit
fca30b4dad
62 changed files with 1614 additions and 2008 deletions
|
|
@ -1,87 +1,32 @@
|
|||
import { InstanceMetadataSchema } from "@versia/sdk/schemas";
|
||||
import { config } from "@versia-server/config";
|
||||
import { apiRoute } from "@versia-server/kit/api";
|
||||
import { User } from "@versia-server/kit/db";
|
||||
import { Users } from "@versia-server/kit/tables";
|
||||
import { asc } from "drizzle-orm";
|
||||
import { describeRoute, resolver } from "hono-openapi";
|
||||
import { urlToContentFormat } from "@/content_types";
|
||||
import pkg from "../../../../package.json" with { type: "json" };
|
||||
import z from "zod";
|
||||
|
||||
export default apiRoute((app) =>
|
||||
app.get(
|
||||
"/.well-known/versia",
|
||||
describeRoute({
|
||||
summary: "Get instance metadata",
|
||||
summary: "Get supported versia protocol versions",
|
||||
tags: ["Federation"],
|
||||
responses: {
|
||||
200: {
|
||||
description: "Instance metadata",
|
||||
content: {
|
||||
"application/json": {
|
||||
schema: resolver(InstanceMetadataSchema),
|
||||
schema: resolver(
|
||||
z.strictObject({
|
||||
versions: z.array(z.string().min(1)),
|
||||
}),
|
||||
),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}),
|
||||
async (context) => {
|
||||
// Get date of first user creation
|
||||
const firstUser = await User.fromSql(
|
||||
undefined,
|
||||
asc(Users.createdAt),
|
||||
);
|
||||
|
||||
const publicKey = Buffer.from(
|
||||
await crypto.subtle.exportKey(
|
||||
"spki",
|
||||
config.instance.keys.public,
|
||||
),
|
||||
).toString("base64");
|
||||
|
||||
(context) => {
|
||||
return context.json(
|
||||
{
|
||||
type: "InstanceMetadata" as const,
|
||||
compatibility: {
|
||||
extensions: [
|
||||
"pub.versia:custom_emojis",
|
||||
"pub.versia:instance_messaging",
|
||||
"pub.versia:likes",
|
||||
"pub.versia:shares",
|
||||
"pub.versia:reactions",
|
||||
],
|
||||
versions: ["0.5.0"],
|
||||
},
|
||||
host: config.http.base_url.host,
|
||||
name: config.instance.name,
|
||||
description: config.instance.description,
|
||||
public_key: {
|
||||
key: publicKey,
|
||||
algorithm: "ed25519" as const,
|
||||
},
|
||||
software: {
|
||||
name: "Versia Server",
|
||||
version: pkg.version,
|
||||
},
|
||||
banner: config.instance.branding.banner
|
||||
? urlToContentFormat(config.instance.branding.banner)
|
||||
: undefined,
|
||||
logo: config.instance.branding.logo
|
||||
? urlToContentFormat(config.instance.branding.logo)
|
||||
: undefined,
|
||||
shared_inbox: new URL(
|
||||
"/inbox",
|
||||
config.http.base_url,
|
||||
).toString(),
|
||||
created_at: firstUser?.data.createdAt.toISOString(),
|
||||
extensions: {
|
||||
"pub.versia:instance_messaging": {
|
||||
endpoint: new URL(
|
||||
"/messaging",
|
||||
config.http.base_url,
|
||||
).toString(),
|
||||
},
|
||||
},
|
||||
versions: ["0.6.0"],
|
||||
},
|
||||
200,
|
||||
);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue