server/types/api.ts

86 lines
2 KiB
TypeScript
Raw Normal View History

import type { RouterRoute } from "@hono/hono/types";
import type { OpenAPIHono } from "@hono/zod-openapi";
import type {
Delete,
Follow,
FollowAccept,
FollowReject,
InstanceMetadata,
LikeExtension,
Note,
Unfollow,
User,
} from "@versia/federation/types";
import type { SocketAddress } from "bun";
import { z } from "zod";
import type { Application } from "~/classes/functions/application";
import type { RolePermissions } from "~/drizzle/schema";
import type { Config } from "~/packages/config-manager";
import type { User as DatabaseUser } from "~/packages/database-interface/user";
2024-05-07 05:13:37 +02:00
export type HttpVerb = "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "OPTIONS";
export interface ApiRouteMetadata {
2024-04-07 07:30:49 +02:00
ratelimits: {
max: number;
duration: number;
};
route: string;
auth: {
required: boolean;
methodOverrides?: {
[Key in HttpVerb]?: boolean;
};
2024-04-07 07:30:49 +02:00
oauthPermissions?: string[];
};
challenge?: {
required: boolean;
methodOverrides?: {
[Key in HttpVerb]?: boolean;
};
};
permissions?: {
required: RolePermissions[];
methodOverrides?: {
[Key in HttpVerb]?: RolePermissions[];
};
};
}
2024-05-07 05:13:37 +02:00
export const ErrorSchema = z.object({
error: z.string(),
});
export type HonoEnv = {
Variables: {
config: Config;
auth: {
user: DatabaseUser | null;
token: string | null;
application: Application | null;
};
};
Bindings: {
ip?: SocketAddress | null;
};
};
export interface ApiRouteExports {
meta: ApiRouteMetadata;
2024-05-07 05:13:37 +02:00
schemas?: {
query?: z.AnyZodObject;
body?: z.AnyZodObject;
};
default: (app: OpenAPIHono<HonoEnv>) => RouterRoute;
2024-05-07 05:13:37 +02:00
}
export type KnownEntity =
| Note
| InstanceMetadata
| User
| Follow
| FollowAccept
| FollowReject
| Unfollow
| Delete
| LikeExtension;