/* eslint-disable */ /* tslint:disable */ // @ts-nocheck /* * --------------------------------------------------------------- * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ## * ## ## * ## AUTHOR: acacode ## * ## SOURCE: https://github.com/acacode/swagger-typescript-api ## * --------------------------------------------------------------- */ /** * Attachment * Attachment */ export interface Attachment { id: string; name: string; mimetype: string; /** @min 0 */ size: number; /** @format date-time */ createdAt: string; } /** * Channel * Channel */ export interface Channel { id: string; ownerUsername: string | null; name: string; persistent: boolean; } /** * ChatMessage * ChatMessage */ export interface ChatMessage { /** @format uuid */ id: string; senderUsername: string; /** @minLength 1 */ text: string; /** @format date-time */ createdAt: string; /** @format date-time */ updatedAt: string; attachments: { id: string; name: string; mimetype: string; /** @min 0 */ size: number; /** @format date-time */ createdAt: string; }[]; } /** * CreateChannelPayload * CreateChannelPayload */ export interface CreateChannelPayload { name: string; persistent: boolean; } /** * CreateUser * CreateUser */ export interface CreateUser { /** @minLength 1 */ username: string; /** @minLength 6 */ password: string; } /** * GetAttachmentParams * GetAttachmentParams */ export interface GetAttachmentParams { /** @format uuid */ id: string; } /** * GetUserQuery * GetUserQuery */ export interface GetUserQuery { username?: string; } /** * Login * Login */ export interface Login { /** @minLength 1 */ username: string; /** @minLength 1 */ password: string; } /** * NewChatMessagePayload * NewChatMessagePayload */ export interface NewChatMessagePayload { /** @minLength 1 */ text: string; attachments?: string[]; } /** * Reply * Reply */ export interface Reply { /** @format uuid */ messageId: string; senderUsername: string; text: string; } /** * ResponseError * ResponseError */ export interface ResponseError { statusCode: number; error: string; message: string; } /** * UpdateUserPayload * UpdateUserPayload */ export interface UpdateUserPayload { displayName: string; } /** * UpdateUserPreferencesPayload * UpdateUserPreferencesPayload */ export interface UpdateUserPreferencesPayload { toggleInputHotkey?: string; toggleOutputHotkey?: string; } /** * UserPreferences * UserPreferences */ export interface UserPreferences { toggleInputHotkey: string; toggleOutputHotkey: string; } /** * User * User */ export interface User { username: string; displayName: string; /** @format date-time */ createdAt: string; } export type QueryParamsType = Record; export type ResponseFormat = keyof Omit; export interface FullRequestParams extends Omit { /** set parameter to `true` for call `securityWorker` for this request */ secure?: boolean; /** request path */ path: string; /** content type of request body */ type?: ContentType; /** query params */ query?: QueryParamsType; /** format of response (i.e. response.json() -> format: "json") */ format?: ResponseFormat; /** request body */ body?: unknown; /** base url */ baseUrl?: string; /** request cancellation token */ cancelToken?: CancelToken; } export type RequestParams = Omit< FullRequestParams, "body" | "method" | "query" | "path" >; export interface ApiConfig { baseUrl?: string; baseApiParams?: Omit; securityWorker?: ( securityData: SecurityDataType | null, ) => Promise | RequestParams | void; customFetch?: typeof fetch; } export interface HttpResponse extends Response { data: D; error: E; } type CancelToken = Symbol | string | number; export enum ContentType { Json = "application/json", JsonApi = "application/vnd.api+json", FormData = "multipart/form-data", UrlEncoded = "application/x-www-form-urlencoded", Text = "text/plain", } export class HttpClient { public baseUrl: string = ""; private securityData: SecurityDataType | null = null; private securityWorker?: ApiConfig["securityWorker"]; private abortControllers = new Map(); private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams); private baseApiParams: RequestParams = { credentials: "same-origin", headers: {}, redirect: "follow", referrerPolicy: "no-referrer", }; constructor(apiConfig: ApiConfig = {}) { Object.assign(this, apiConfig); } public setSecurityData = (data: SecurityDataType | null) => { this.securityData = data; }; protected encodeQueryParam(key: string, value: any) { const encodedKey = encodeURIComponent(key); return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`; } protected addQueryParam(query: QueryParamsType, key: string) { return this.encodeQueryParam(key, query[key]); } protected addArrayQueryParam(query: QueryParamsType, key: string) { const value = query[key]; return value.map((v: any) => this.encodeQueryParam(key, v)).join("&"); } protected toQueryString(rawQuery?: QueryParamsType): string { const query = rawQuery || {}; const keys = Object.keys(query).filter( (key) => "undefined" !== typeof query[key], ); return keys .map((key) => Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key), ) .join("&"); } protected addQueryParams(rawQuery?: QueryParamsType): string { const queryString = this.toQueryString(rawQuery); return queryString ? `?${queryString}` : ""; } private contentFormatters: Record any> = { [ContentType.Json]: (input: any) => input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, [ContentType.JsonApi]: (input: any) => input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input, [ContentType.Text]: (input: any) => input !== null && typeof input !== "string" ? JSON.stringify(input) : input, [ContentType.FormData]: (input: any) => { if (input instanceof FormData) { return input; } return Object.keys(input || {}).reduce((formData, key) => { const property = input[key]; formData.append( key, property instanceof Blob ? property : typeof property === "object" && property !== null ? JSON.stringify(property) : `${property}`, ); return formData; }, new FormData()); }, [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input), }; protected mergeRequestParams( params1: RequestParams, params2?: RequestParams, ): RequestParams { return { ...this.baseApiParams, ...params1, ...(params2 || {}), headers: { ...(this.baseApiParams.headers || {}), ...(params1.headers || {}), ...((params2 && params2.headers) || {}), }, }; } protected createAbortSignal = ( cancelToken: CancelToken, ): AbortSignal | undefined => { if (this.abortControllers.has(cancelToken)) { const abortController = this.abortControllers.get(cancelToken); if (abortController) { return abortController.signal; } return void 0; } const abortController = new AbortController(); this.abortControllers.set(cancelToken, abortController); return abortController.signal; }; public abortRequest = (cancelToken: CancelToken) => { const abortController = this.abortControllers.get(cancelToken); if (abortController) { abortController.abort(); this.abortControllers.delete(cancelToken); } }; public request = async ({ body, secure, path, type, query, format, baseUrl, cancelToken, ...params }: FullRequestParams): Promise> => { const secureParams = ((typeof secure === "boolean" ? secure : this.baseApiParams.secure) && this.securityWorker && (await this.securityWorker(this.securityData))) || {}; const requestParams = this.mergeRequestParams(params, secureParams); const queryString = query && this.toQueryString(query); const payloadFormatter = this.contentFormatters[type || ContentType.Json]; const responseFormat = format || requestParams.format; return this.customFetch( `${baseUrl || this.baseUrl || ""}${path}${queryString ? `?${queryString}` : ""}`, { ...requestParams, headers: { ...(requestParams.headers || {}), ...(type && type !== ContentType.FormData ? { "Content-Type": type } : {}), }, signal: (cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal) || null, body: typeof body === "undefined" || body === null ? null : payloadFormatter(body), }, ).then(async (response) => { const r = response as HttpResponse; r.data = null as unknown as T; r.error = null as unknown as E; const responseToParse = responseFormat ? response.clone() : response; const data = !responseFormat ? r : await responseToParse[responseFormat]() .then((data) => { if (r.ok) { r.data = data; } else { r.error = data; } return r; }) .catch((e) => { r.error = e; return r; }); if (cancelToken) { this.abortControllers.delete(cancelToken); } if (!response.ok) throw data; return data; }); }; } /** * @title Chad API * @version 1.0.0 */ export class Api< SecurityDataType extends unknown, > extends HttpClient { chad = { /** * @description Pass file to multipart/form-data * * @tags Attachment * @name AttachmentUpload * @summary Upload attachment * @request POST:/chad/attachment/upload */ attachmentUpload: (params: RequestParams = {}) => this.request({ path: `/chad/attachment/upload`, method: "POST", format: "json", ...params, }), /** * No description * * @tags Attachment * @name AttachmentGet * @summary Get attachment * @request GET:/chad/attachment/{id} */ attachmentGet: (id: string, params: RequestParams = {}) => this.request({ path: `/chad/attachment/${id}`, method: "GET", format: "json", ...params, }), /** * No description * * @tags Auth * @name AuthRegister * @summary Register * @request POST:/chad/auth/register */ authRegister: (data: CreateUser, params: RequestParams = {}) => this.request({ path: `/chad/auth/register`, method: "POST", body: data, type: ContentType.Json, format: "json", ...params, }), /** * No description * * @tags Auth * @name AuthLogin * @summary Login * @request POST:/chad/auth/login */ authLogin: (data: Login, params: RequestParams = {}) => this.request({ path: `/chad/auth/login`, method: "POST", body: data, type: ContentType.Json, format: "json", ...params, }), /** * No description * * @tags Auth * @name AuthMe * @summary Me * @request GET:/chad/auth/me */ authMe: (params: RequestParams = {}) => this.request({ path: `/chad/auth/me`, method: "GET", format: "json", ...params, }), /** * No description * * @tags Auth * @name AuthLogout * @summary Logout * @request POST:/chad/auth/logout */ authLogout: (params: RequestParams = {}) => this.request({ path: `/chad/auth/logout`, method: "POST", ...params, }), /** * No description * * @tags Channel * @name ChannelList * @summary Get channel list * @request GET:/chad/channels */ channelList: (params: RequestParams = {}) => this.request({ path: `/chad/channels`, method: "GET", format: "json", ...params, }), /** * No description * * @tags Channel * @name ChannelCreate * @summary Create channel * @request POST:/chad/channels */ channelCreate: (data: CreateChannelPayload, params: RequestParams = {}) => this.request({ path: `/chad/channels`, method: "POST", body: data, type: ContentType.Json, format: "json", ...params, }), /** * No description * * @tags Channel * @name ChannelDelete * @summary Delete channel * @request DELETE:/chad/channels/{id} */ channelDelete: (id: string, params: RequestParams = {}) => this.request({ path: `/chad/channels/${id}`, method: "DELETE", ...params, }), /** * No description * * @tags Chat * @name ChatSend * @summary Send message * @request POST:/chad/chat/send */ chatSend: (data: NewChatMessagePayload, params: RequestParams = {}) => this.request({ path: `/chad/chat/send`, method: "POST", body: data, type: ContentType.Json, format: "json", ...params, }), /** * No description * * @tags Chat * @name ChatMessages * @summary Get messages * @request GET:/chad/chat */ chatMessages: ( query: { /** * Cursor to message * @format uuid */ cursor?: string; /** * @min 1 * @max 100 * @default 10 */ limit: number; }, params: RequestParams = {}, ) => this.request< { messages: ChatMessage[]; /** * Cursor to last message * @format uuid */ nextCursor?: string; }, ResponseError >({ path: `/chad/chat`, method: "GET", query: query, format: "json", ...params, }), /** * No description * * @tags User * @name UserGet * @summary Get user * @request GET:/chad/user */ userGet: ( query?: { username?: string; }, params: RequestParams = {}, ) => this.request({ path: `/chad/user`, method: "GET", query: query, format: "json", ...params, }), /** * No description * * @tags User * @name UserGetPreferences * @summary Get preferences * @request GET:/chad/user/preferences */ userGetPreferences: (params: RequestParams = {}) => this.request({ path: `/chad/user/preferences`, method: "GET", format: "json", ...params, }), /** * No description * * @tags User * @name UserUpdatePreferences * @summary Update preferences * @request PATCH:/chad/user/preferences */ userUpdatePreferences: ( data: UpdateUserPreferencesPayload, params: RequestParams = {}, ) => this.request({ path: `/chad/user/preferences`, method: "PATCH", body: data, type: ContentType.Json, ...params, }), /** * No description * * @tags User * @name UserUpdateProfile * @summary Update profile * @request PATCH:/chad/profile */ userUpdateProfile: (data: UpdateUserPayload, params: RequestParams = {}) => this.request({ path: `/chad/profile`, method: "PATCH", body: data, type: ContentType.Json, format: "json", ...params, }), }; }