add openapi-typescript

This commit is contained in:
kritzl 2026-05-10 21:13:47 +02:00
commit a1b37de674
Signed by: kritzl
SSH key fingerprint: SHA256:5BmINP9VjZWaUk5Z+2CTut1KFhwLtd0ZynMekKbtViM
4 changed files with 519 additions and 36 deletions

3
app/src/api/README.md Normal file
View file

@ -0,0 +1,3 @@
# Update schema
`pnpm dlx openapi-typescript http://localhost:8000/openapi.json -o ./schema.d.ts`

275
app/src/api/schema.ts Normal file
View file

@ -0,0 +1,275 @@
/**
* This file was auto-generated by openapi-typescript.
* Do not make direct changes to the file.
*/
export interface paths {
"/api/user-info/": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Get-User-Info */
get: operations["get_user_info_api_user_info__get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/auth/login": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Login Init */
get: operations["login_init_auth_login_get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/auth/login-callback": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Login Callback */
get: operations["login_callback_auth_login_callback_get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/locks/": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** List Locks */
get: operations["list_locks_api_locks__get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
}
export type webhooks = Record<string, never>;
export interface components {
schemas: {
/** HTTPValidationError */
HTTPValidationError: {
/** Detail */
detail?: components["schemas"]["ValidationError"][];
};
/**
* HttpProblemDetail
* @description API Error modeled after [RFC9475](https://www.rfc-editor.org/rfc/rfc9457.html).
*/
HttpProblemDetail: {
/** Status */
status: number;
type: components["schemas"]["HttpProblemType"];
/** Title */
title: string;
/** Detail */
detail: string;
/** Instance */
instance: string | null;
};
/**
* HttpProblemType
* @description Statically known HTTP problem types using the [type URI scheme](https://datatracker.ietf.org/doc/rfc4151/)
* @enum {string}
*/
HttpProblemType: "type:noc@hamburg.ccc.de,2026:UNAUTHORIZED" | "type:noc@hamburg.ccc.de,2026:DOOR_NOT_FOUND";
/** Lock */
Lock: {
/** Name */
name: string;
status: components["schemas"]["LockStatus"];
};
/** LockStatus */
LockStatus: {
/** Is Unreachable */
is_unreachable: boolean;
/** Is Low Battery */
is_low_battery: boolean;
/** Is Error Jammed */
is_error_jammed: boolean;
/**
* Lock Target Level
* @enum {string}
*/
lock_target_level: "locked" | "unlocked" | "open";
/**
* Lock State
* @enum {string}
*/
lock_state: "unknown" | "locked" | "unlocked";
/**
* Activity State
* @enum {string}
*/
activity_state: "unknown" | "locking" | "unlocking" | "stable";
};
/** UserInfo */
UserInfo: {
/** Username */
username: string;
};
/** UserStatus */
UserStatus: {
/** Is Logged In */
is_logged_in: boolean;
/** Guaranteed Session Until */
guaranteed_session_until: string | null;
user_info: components["schemas"]["UserInfo"] | null;
};
/** ValidationError */
ValidationError: {
/** Location */
loc: (string | number)[];
/** Message */
msg: string;
/** Error Type */
type: string;
/** Input */
input?: unknown;
/** Context */
ctx?: Record<string, never>;
};
};
responses: never;
parameters: never;
requestBodies: never;
headers: never;
pathItems: never;
}
export type $defs = Record<string, never>;
export interface operations {
get_user_info_api_user_info__get: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["UserStatus"];
};
};
/** @description Unauthorized */
401: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HttpProblemDetail"];
};
};
};
};
login_init_auth_login_get: {
parameters: {
query?: {
next?: string | null;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
302: {
headers: {
[name: string]: unknown;
};
content?: never;
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
login_callback_auth_login_callback_get: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
302: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
list_locks_api_locks__get: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Lock"][];
};
};
/** @description Unauthorized */
401: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HttpProblemDetail"];
};
};
};
};
}