/** * Generated by orval v8.5.3 🍺 * Do not edit manually. * Api * Tx OS API specification * OpenAPI spec version: 0.1.0 */ import { useMutation, useQuery } from "@tanstack/react-query"; import type { MutationFunction, QueryFunction, QueryKey, UseMutationOptions, UseMutationResult, UseQueryOptions, UseQueryResult, } from "@tanstack/react-query"; import type { AddAppPermissionBody, AddParticipantsBody, AddUserRoleBody, AdminAppOpensByApp, AdminAppOpensByUser, AdminResetLinkResponse, AdminStats, App, AppDeletionConflict, AppDependentGroupsPage, AppDependentOpensPage, AppDependentRestrictionsPage, AppPermissionLink, AppPermissionsImpact, AppPermissionsImpactBody, AppSettings, AuditLogList, AuthUser, ConversationWithDetails, CreateAppBody, CreateConversationBody, CreateGroupBody, CreateRoleBody, CreateServiceBody, CreateServiceOrderBody, CreateUserBody, DeleteAppParams, DeleteGroupParams, DeleteServiceParams, DeleteUserParams, ErrorResponse, ExportAuditLogsCsvParams, ForgotPasswordBody, ForgotPasswordResponse, GetAdminAppDependentGroupsParams, GetAdminAppDependentOpensParams, GetAdminAppDependentRestrictionsParams, GetAdminAppOpensByAppParams, GetAdminAppOpensByUserParams, GetAdminServiceDependentOrdersParams, GetAdminStatsParams, GetAdminUserDependentConversationsParams, GetAdminUserDependentMessagesParams, GetAdminUserDependentNotesParams, GetAdminUserDependentOrdersParams, GetAppPermissionAuditParams, GetGroupPermissionAuditParams, GetRolePermissionAuditParams, GetUserPermissionAuditParams, Group, GroupDeletionConflict, GroupDetail, HealthStatus, HomeStats, LeaveConversationBody, ListAuditLogsParams, ListGroupsParams, ListUsersParams, LoginBody, MessageWithSender, Notification, Permission, PermissionAuditList, RegisterBody, ReplaceRolePermissionsBody, RequestUploadUrlBody, RequestUploadUrlResponse, ResetPasswordBody, Role, RoleDeletionConflict, RolePermissionAuditList, RolePermissionsImpact, RolePermissionsImpactBody, RoleUsage, SendMessageBody, Service, ServiceCategory, ServiceDeletionConflict, ServiceDependentOrdersPage, ServiceOrder, SuccessResponse, UpdateAppBody, UpdateAppSettingsBody, UpdateClockHour12Body, UpdateClockStyleBody, UpdateConversationBody, UpdateConversationStateBody, UpdateGroupBody, UpdateLanguageBody, UpdateMyAppOrderBody, UpdateRoleBody, UpdateServiceBody, UpdateServiceOrderStatusBody, UpdateUserBody, UserDeletionConflict, UserDependentConversationsPage, UserDependentMessagesPage, UserDependentNotesPage, UserDependentOrdersPage, UserProfile, VerifyResetTokenBody, VerifyResetTokenResponse, } from "./api.schemas"; import { customFetch } from "../custom-fetch"; import type { ErrorType, BodyType } from "../custom-fetch"; type AwaitedInput = PromiseLike | T; type Awaited = O extends AwaitedInput ? T : never; type SecondParameter unknown> = Parameters[1]; /** * @summary Health check */ export const getHealthCheckUrl = () => { return `/api/healthz`; }; export const healthCheck = async ( options?: RequestInit, ): Promise => { return customFetch(getHealthCheckUrl(), { ...options, method: "GET", }); }; export const getHealthCheckQueryKey = () => { return [`/api/healthz`] as const; }; export const getHealthCheckQueryOptions = < TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getHealthCheckQueryKey(); const queryFn: QueryFunction>> = ({ signal, }) => healthCheck({ signal, ...requestOptions }); return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type HealthCheckQueryResult = NonNullable< Awaited> >; export type HealthCheckQueryError = ErrorType; /** * @summary Health check */ export function useHealthCheck< TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getHealthCheckQueryOptions(options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary Register a new user */ export const getRegisterUrl = () => { return `/api/auth/register`; }; export const register = async ( registerBody: RegisterBody, options?: RequestInit, ): Promise => { return customFetch(getRegisterUrl(), { ...options, method: "POST", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(registerBody), }); }; export const getRegisterMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext > => { const mutationKey = ["register"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { data: BodyType } > = (props) => { const { data } = props ?? {}; return register(data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type RegisterMutationResult = NonNullable< Awaited> >; export type RegisterMutationBody = BodyType; export type RegisterMutationError = ErrorType; /** * @summary Register a new user */ export const useRegister = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { data: BodyType }, TContext > => { return useMutation(getRegisterMutationOptions(options)); }; /** * @summary Login */ export const getLoginUrl = () => { return `/api/auth/login`; }; export const login = async ( loginBody: LoginBody, options?: RequestInit, ): Promise => { return customFetch(getLoginUrl(), { ...options, method: "POST", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(loginBody), }); }; export const getLoginMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext > => { const mutationKey = ["login"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { data: BodyType } > = (props) => { const { data } = props ?? {}; return login(data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type LoginMutationResult = NonNullable< Awaited> >; export type LoginMutationBody = BodyType; export type LoginMutationError = ErrorType; /** * @summary Login */ export const useLogin = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { data: BodyType }, TContext > => { return useMutation(getLoginMutationOptions(options)); }; /** * @summary Logout */ export const getLogoutUrl = () => { return `/api/auth/logout`; }; export const logout = async ( options?: RequestInit, ): Promise => { return customFetch(getLogoutUrl(), { ...options, method: "POST", }); }; export const getLogoutMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, void, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, void, TContext > => { const mutationKey = ["logout"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, void > = () => { return logout(requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type LogoutMutationResult = NonNullable< Awaited> >; export type LogoutMutationError = ErrorType; /** * @summary Logout */ export const useLogout = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, void, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, void, TContext > => { return useMutation(getLogoutMutationOptions(options)); }; /** * @summary Request a password reset link */ export const getForgotPasswordUrl = () => { return `/api/auth/forgot-password`; }; export const forgotPassword = async ( forgotPasswordBody: ForgotPasswordBody, options?: RequestInit, ): Promise => { return customFetch(getForgotPasswordUrl(), { ...options, method: "POST", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(forgotPasswordBody), }); }; export const getForgotPasswordMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext > => { const mutationKey = ["forgotPassword"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { data: BodyType } > = (props) => { const { data } = props ?? {}; return forgotPassword(data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type ForgotPasswordMutationResult = NonNullable< Awaited> >; export type ForgotPasswordMutationBody = BodyType; export type ForgotPasswordMutationError = ErrorType; /** * @summary Request a password reset link */ export const useForgotPassword = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { data: BodyType }, TContext > => { return useMutation(getForgotPasswordMutationOptions(options)); }; /** * @summary Set a new password using a reset token */ export const getResetPasswordUrl = () => { return `/api/auth/reset-password`; }; export const resetPassword = async ( resetPasswordBody: ResetPasswordBody, options?: RequestInit, ): Promise => { return customFetch(getResetPasswordUrl(), { ...options, method: "POST", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(resetPasswordBody), }); }; export const getResetPasswordMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext > => { const mutationKey = ["resetPassword"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { data: BodyType } > = (props) => { const { data } = props ?? {}; return resetPassword(data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type ResetPasswordMutationResult = NonNullable< Awaited> >; export type ResetPasswordMutationBody = BodyType; export type ResetPasswordMutationError = ErrorType; /** * @summary Set a new password using a reset token */ export const useResetPassword = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { data: BodyType }, TContext > => { return useMutation(getResetPasswordMutationOptions(options)); }; /** * @summary Check whether a reset token is valid */ export const getVerifyResetTokenUrl = () => { return `/api/auth/reset-password/verify`; }; export const verifyResetToken = async ( verifyResetTokenBody: VerifyResetTokenBody, options?: RequestInit, ): Promise => { return customFetch(getVerifyResetTokenUrl(), { ...options, method: "POST", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(verifyResetTokenBody), }); }; export const getVerifyResetTokenMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext > => { const mutationKey = ["verifyResetToken"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { data: BodyType } > = (props) => { const { data } = props ?? {}; return verifyResetToken(data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type VerifyResetTokenMutationResult = NonNullable< Awaited> >; export type VerifyResetTokenMutationBody = BodyType; export type VerifyResetTokenMutationError = ErrorType; /** * @summary Check whether a reset token is valid */ export const useVerifyResetToken = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { data: BodyType }, TContext > => { return useMutation(getVerifyResetTokenMutationOptions(options)); }; /** * @summary Admin generates a one-time password reset link for a user */ export const getAdminIssueResetLinkUrl = (id: number) => { return `/api/auth/admin/users/${id}/issue-reset-link`; }; export const adminIssueResetLink = async ( id: number, options?: RequestInit, ): Promise => { return customFetch(getAdminIssueResetLinkUrl(id), { ...options, method: "POST", }); }; export const getAdminIssueResetLinkMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number }, TContext > => { const mutationKey = ["adminIssueResetLink"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number } > = (props) => { const { id } = props ?? {}; return adminIssueResetLink(id, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type AdminIssueResetLinkMutationResult = NonNullable< Awaited> >; export type AdminIssueResetLinkMutationError = ErrorType; /** * @summary Admin generates a one-time password reset link for a user */ export const useAdminIssueResetLink = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number }, TContext > => { return useMutation(getAdminIssueResetLinkMutationOptions(options)); }; /** * @summary Get current user */ export const getGetMeUrl = () => { return `/api/auth/me`; }; export const getMe = async (options?: RequestInit): Promise => { return customFetch(getGetMeUrl(), { ...options, method: "GET", }); }; export const getGetMeQueryKey = () => { return [`/api/auth/me`] as const; }; export const getGetMeQueryOptions = < TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions>, TError, TData>; request?: SecondParameter; }) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getGetMeQueryKey(); const queryFn: QueryFunction>> = ({ signal, }) => getMe({ signal, ...requestOptions }); return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type GetMeQueryResult = NonNullable>>; export type GetMeQueryError = ErrorType; /** * @summary Get current user */ export function useGetMe< TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions>, TError, TData>; request?: SecondParameter; }): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getGetMeQueryOptions(options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary Update preferred language */ export const getUpdateLanguageUrl = () => { return `/api/auth/me/language`; }; export const updateLanguage = async ( updateLanguageBody: UpdateLanguageBody, options?: RequestInit, ): Promise => { return customFetch(getUpdateLanguageUrl(), { ...options, method: "PATCH", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(updateLanguageBody), }); }; export const getUpdateLanguageMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext > => { const mutationKey = ["updateLanguage"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { data: BodyType } > = (props) => { const { data } = props ?? {}; return updateLanguage(data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type UpdateLanguageMutationResult = NonNullable< Awaited> >; export type UpdateLanguageMutationBody = BodyType; export type UpdateLanguageMutationError = ErrorType; /** * @summary Update preferred language */ export const useUpdateLanguage = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { data: BodyType }, TContext > => { return useMutation(getUpdateLanguageMutationOptions(options)); }; /** * @summary Update preferred home-screen clock style */ export const getUpdateClockStyleUrl = () => { return `/api/auth/me/clock-style`; }; export const updateClockStyle = async ( updateClockStyleBody: UpdateClockStyleBody, options?: RequestInit, ): Promise => { return customFetch(getUpdateClockStyleUrl(), { ...options, method: "PATCH", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(updateClockStyleBody), }); }; export const getUpdateClockStyleMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext > => { const mutationKey = ["updateClockStyle"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { data: BodyType } > = (props) => { const { data } = props ?? {}; return updateClockStyle(data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type UpdateClockStyleMutationResult = NonNullable< Awaited> >; export type UpdateClockStyleMutationBody = BodyType; export type UpdateClockStyleMutationError = ErrorType; /** * @summary Update preferred home-screen clock style */ export const useUpdateClockStyle = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { data: BodyType }, TContext > => { return useMutation(getUpdateClockStyleMutationOptions(options)); }; /** * @summary Update preferred 12/24-hour clock format */ export const getUpdateClockHour12Url = () => { return `/api/auth/me/clock-hour12`; }; export const updateClockHour12 = async ( updateClockHour12Body: UpdateClockHour12Body, options?: RequestInit, ): Promise => { return customFetch(getUpdateClockHour12Url(), { ...options, method: "PATCH", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(updateClockHour12Body), }); }; export const getUpdateClockHour12MutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext > => { const mutationKey = ["updateClockHour12"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { data: BodyType } > = (props) => { const { data } = props ?? {}; return updateClockHour12(data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type UpdateClockHour12MutationResult = NonNullable< Awaited> >; export type UpdateClockHour12MutationBody = BodyType; export type UpdateClockHour12MutationError = ErrorType; /** * @summary Update preferred 12/24-hour clock format */ export const useUpdateClockHour12 = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { data: BodyType }, TContext > => { return useMutation(getUpdateClockHour12MutationOptions(options)); }; /** * @summary List all active apps */ export const getListAppsUrl = () => { return `/api/apps`; }; export const listApps = async (options?: RequestInit): Promise => { return customFetch(getListAppsUrl(), { ...options, method: "GET", }); }; export const getListAppsQueryKey = () => { return [`/api/apps`] as const; }; export const getListAppsQueryOptions = < TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions>, TError, TData>; request?: SecondParameter; }) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getListAppsQueryKey(); const queryFn: QueryFunction>> = ({ signal, }) => listApps({ signal, ...requestOptions }); return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type ListAppsQueryResult = NonNullable< Awaited> >; export type ListAppsQueryError = ErrorType; /** * @summary List all active apps */ export function useListApps< TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions>, TError, TData>; request?: SecondParameter; }): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getListAppsQueryOptions(options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary Create a new app (admin) */ export const getCreateAppUrl = () => { return `/api/apps`; }; export const createApp = async ( createAppBody: CreateAppBody, options?: RequestInit, ): Promise => { return customFetch(getCreateAppUrl(), { ...options, method: "POST", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(createAppBody), }); }; export const getCreateAppMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext > => { const mutationKey = ["createApp"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { data: BodyType } > = (props) => { const { data } = props ?? {}; return createApp(data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type CreateAppMutationResult = NonNullable< Awaited> >; export type CreateAppMutationBody = BodyType; export type CreateAppMutationError = ErrorType; /** * @summary Create a new app (admin) */ export const useCreateApp = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { data: BodyType }, TContext > => { return useMutation(getCreateAppMutationOptions(options)); }; /** * @summary Get app by ID */ export const getGetAppUrl = (id: number) => { return `/api/apps/${id}`; }; export const getApp = async ( id: number, options?: RequestInit, ): Promise => { return customFetch(getGetAppUrl(id), { ...options, method: "GET", }); }; export const getGetAppQueryKey = (id: number) => { return [`/api/apps/${id}`] as const; }; export const getGetAppQueryOptions = < TData = Awaited>, TError = ErrorType, >( id: number, options?: { query?: UseQueryOptions>, TError, TData>; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getGetAppQueryKey(id); const queryFn: QueryFunction>> = ({ signal, }) => getApp(id, { signal, ...requestOptions }); return { queryKey, queryFn, enabled: !!id, ...queryOptions, } as UseQueryOptions>, TError, TData> & { queryKey: QueryKey; }; }; export type GetAppQueryResult = NonNullable>>; export type GetAppQueryError = ErrorType; /** * @summary Get app by ID */ export function useGetApp< TData = Awaited>, TError = ErrorType, >( id: number, options?: { query?: UseQueryOptions>, TError, TData>; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getGetAppQueryOptions(id, options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary Update app (admin) */ export const getUpdateAppUrl = (id: number) => { return `/api/apps/${id}`; }; export const updateApp = async ( id: number, updateAppBody: UpdateAppBody, options?: RequestInit, ): Promise => { return customFetch(getUpdateAppUrl(id), { ...options, method: "PATCH", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(updateAppBody), }); }; export const getUpdateAppMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext > => { const mutationKey = ["updateApp"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number; data: BodyType } > = (props) => { const { id, data } = props ?? {}; return updateApp(id, data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type UpdateAppMutationResult = NonNullable< Awaited> >; export type UpdateAppMutationBody = BodyType; export type UpdateAppMutationError = ErrorType; /** * @summary Update app (admin) */ export const useUpdateApp = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number; data: BodyType }, TContext > => { return useMutation(getUpdateAppMutationOptions(options)); }; /** * @summary Delete app (admin) */ export const getDeleteAppUrl = (id: number, params?: DeleteAppParams) => { const normalizedParams = new URLSearchParams(); Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? "null" : value.toString()); } }); const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 ? `/api/apps/${id}?${stringifiedParams}` : `/api/apps/${id}`; }; export const deleteApp = async ( id: number, params?: DeleteAppParams, options?: RequestInit, ): Promise => { return customFetch(getDeleteAppUrl(id, params), { ...options, method: "DELETE", }); }; export const getDeleteAppMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; params?: DeleteAppParams }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number; params?: DeleteAppParams }, TContext > => { const mutationKey = ["deleteApp"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number; params?: DeleteAppParams } > = (props) => { const { id, params } = props ?? {}; return deleteApp(id, params, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type DeleteAppMutationResult = NonNullable< Awaited> >; export type DeleteAppMutationError = ErrorType; /** * @summary Delete app (admin) */ export const useDeleteApp = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; params?: DeleteAppParams }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number; params?: DeleteAppParams }, TContext > => { return useMutation(getDeleteAppMutationOptions(options)); }; /** * Returns the permissions currently required for users to see this app in their launcher. An app with no rows here is unrestricted (visible to anyone). When more than one permission is configured, holding any one of them is sufficient. * @summary List the permissions that gate this app (admin) */ export const getListAppPermissionsUrl = (id: number) => { return `/api/apps/${id}/permissions`; }; export const listAppPermissions = async ( id: number, options?: RequestInit, ): Promise => { return customFetch(getListAppPermissionsUrl(id), { ...options, method: "GET", }); }; export const getListAppPermissionsQueryKey = (id: number) => { return [`/api/apps/${id}/permissions`] as const; }; export const getListAppPermissionsQueryOptions = < TData = Awaited>, TError = ErrorType, >( id: number, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getListAppPermissionsQueryKey(id); const queryFn: QueryFunction< Awaited> > = ({ signal }) => listAppPermissions(id, { signal, ...requestOptions }); return { queryKey, queryFn, enabled: !!id, ...queryOptions, } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type ListAppPermissionsQueryResult = NonNullable< Awaited> >; export type ListAppPermissionsQueryError = ErrorType; /** * @summary List the permissions that gate this app (admin) */ export function useListAppPermissions< TData = Awaited>, TError = ErrorType, >( id: number, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getListAppPermissionsQueryOptions(id, options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * Adds a row to `app_permissions` for the (app_id, permission_id) pair. Uses `ON CONFLICT DO NOTHING` against the composite primary key so re-adding an existing pair is a no-op. * @summary Add a required permission to this app (admin) */ export const getAddAppPermissionUrl = (id: number) => { return `/api/apps/${id}/permissions`; }; export const addAppPermission = async ( id: number, addAppPermissionBody: AddAppPermissionBody, options?: RequestInit, ): Promise => { return customFetch(getAddAppPermissionUrl(id), { ...options, method: "POST", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(addAppPermissionBody), }); }; export const getAddAppPermissionMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext > => { const mutationKey = ["addAppPermission"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number; data: BodyType } > = (props) => { const { id, data } = props ?? {}; return addAppPermission(id, data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type AddAppPermissionMutationResult = NonNullable< Awaited> >; export type AddAppPermissionMutationBody = BodyType; export type AddAppPermissionMutationError = ErrorType; /** * @summary Add a required permission to this app (admin) */ export const useAddAppPermission = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number; data: BodyType }, TContext > => { return useMutation(getAddAppPermissionMutationOptions(options)); }; /** * Given a candidate set of permission IDs that would gate this app, returns how many users would lose visibility of the app (excluding admins, who always see every app), the count of users who currently see the app, and the groups that grant the app via `group_apps`. A member of any returned group always sees the app regardless of permission changes, so listing them lets the admin see which populations are protected from the loss. Mirrors `POST /roles/{id}/permissions/impact-preview` so the admin UI can show the same kind of warning before committing the change. * @summary Preview the impact of changing the permissions required for an app (admin) */ export const getPreviewAppPermissionsImpactUrl = (id: number) => { return `/api/apps/${id}/permissions/impact-preview`; }; export const previewAppPermissionsImpact = async ( id: number, appPermissionsImpactBody: AppPermissionsImpactBody, options?: RequestInit, ): Promise => { return customFetch( getPreviewAppPermissionsImpactUrl(id), { ...options, method: "POST", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(appPermissionsImpactBody), }, ); }; export const getPreviewAppPermissionsImpactMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext > => { const mutationKey = ["previewAppPermissionsImpact"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number; data: BodyType } > = (props) => { const { id, data } = props ?? {}; return previewAppPermissionsImpact(id, data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type PreviewAppPermissionsImpactMutationResult = NonNullable< Awaited> >; export type PreviewAppPermissionsImpactMutationBody = BodyType; export type PreviewAppPermissionsImpactMutationError = ErrorType; /** * @summary Preview the impact of changing the permissions required for an app (admin) */ export const usePreviewAppPermissionsImpact = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number; data: BodyType }, TContext > => { return useMutation(getPreviewAppPermissionsImpactMutationOptions(options)); }; /** * @summary Remove a required permission from this app (admin) */ export const getRemoveAppPermissionUrl = (id: number, permissionId: number) => { return `/api/apps/${id}/permissions/${permissionId}`; }; export const removeAppPermission = async ( id: number, permissionId: number, options?: RequestInit, ): Promise => { return customFetch(getRemoveAppPermissionUrl(id, permissionId), { ...options, method: "DELETE", }); }; export const getRemoveAppPermissionMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; permissionId: number }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number; permissionId: number }, TContext > => { const mutationKey = ["removeAppPermission"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number; permissionId: number } > = (props) => { const { id, permissionId } = props ?? {}; return removeAppPermission(id, permissionId, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type RemoveAppPermissionMutationResult = NonNullable< Awaited> >; export type RemoveAppPermissionMutationError = ErrorType; /** * @summary Remove a required permission from this app (admin) */ export const useRemoveAppPermission = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; permissionId: number }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number; permissionId: number }, TContext > => { return useMutation(getRemoveAppPermissionMutationOptions(options)); }; /** * @summary Log an app open event for the current user */ export const getLogAppOpenUrl = (id: number) => { return `/api/apps/${id}/open`; }; export const logAppOpen = async ( id: number, options?: RequestInit, ): Promise => { return customFetch(getLogAppOpenUrl(id), { ...options, method: "POST", }); }; export const getLogAppOpenMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number }, TContext > => { const mutationKey = ["logAppOpen"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number } > = (props) => { const { id } = props ?? {}; return logAppOpen(id, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type LogAppOpenMutationResult = NonNullable< Awaited> >; export type LogAppOpenMutationError = ErrorType; /** * @summary Log an app open event for the current user */ export const useLogAppOpen = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number }, TContext > => { return useMutation(getLogAppOpenMutationOptions(options)); }; /** * @summary Set the current user's preferred home apps order */ export const getUpdateMyAppOrderUrl = () => { return `/api/me/app-order`; }; export const updateMyAppOrder = async ( updateMyAppOrderBody: UpdateMyAppOrderBody, options?: RequestInit, ): Promise => { return customFetch(getUpdateMyAppOrderUrl(), { ...options, method: "PUT", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(updateMyAppOrderBody), }); }; export const getUpdateMyAppOrderMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext > => { const mutationKey = ["updateMyAppOrder"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { data: BodyType } > = (props) => { const { data } = props ?? {}; return updateMyAppOrder(data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type UpdateMyAppOrderMutationResult = NonNullable< Awaited> >; export type UpdateMyAppOrderMutationBody = BodyType; export type UpdateMyAppOrderMutationError = ErrorType; /** * @summary Set the current user's preferred home apps order */ export const useUpdateMyAppOrder = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { data: BodyType }, TContext > => { return useMutation(getUpdateMyAppOrderMutationOptions(options)); }; /** * @summary Get application settings (public) */ export const getGetAppSettingsUrl = () => { return `/api/settings`; }; export const getAppSettings = async ( options?: RequestInit, ): Promise => { return customFetch(getGetAppSettingsUrl(), { ...options, method: "GET", }); }; export const getGetAppSettingsQueryKey = () => { return [`/api/settings`] as const; }; export const getGetAppSettingsQueryOptions = < TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getGetAppSettingsQueryKey(); const queryFn: QueryFunction>> = ({ signal, }) => getAppSettings({ signal, ...requestOptions }); return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type GetAppSettingsQueryResult = NonNullable< Awaited> >; export type GetAppSettingsQueryError = ErrorType; /** * @summary Get application settings (public) */ export function useGetAppSettings< TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getGetAppSettingsQueryOptions(options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary Update application settings (admin) */ export const getUpdateAppSettingsUrl = () => { return `/api/settings`; }; export const updateAppSettings = async ( updateAppSettingsBody: UpdateAppSettingsBody, options?: RequestInit, ): Promise => { return customFetch(getUpdateAppSettingsUrl(), { ...options, method: "PATCH", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(updateAppSettingsBody), }); }; export const getUpdateAppSettingsMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext > => { const mutationKey = ["updateAppSettings"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { data: BodyType } > = (props) => { const { data } = props ?? {}; return updateAppSettings(data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type UpdateAppSettingsMutationResult = NonNullable< Awaited> >; export type UpdateAppSettingsMutationBody = BodyType; export type UpdateAppSettingsMutationError = ErrorType; /** * @summary Update application settings (admin) */ export const useUpdateAppSettings = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { data: BodyType }, TContext > => { return useMutation(getUpdateAppSettingsMutationOptions(options)); }; /** * @summary Request a presigned URL for file upload */ export const getRequestUploadUrlUrl = () => { return `/api/storage/uploads/request-url`; }; export const requestUploadUrl = async ( requestUploadUrlBody: RequestUploadUrlBody, options?: RequestInit, ): Promise => { return customFetch(getRequestUploadUrlUrl(), { ...options, method: "POST", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(requestUploadUrlBody), }); }; export const getRequestUploadUrlMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext > => { const mutationKey = ["requestUploadUrl"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { data: BodyType } > = (props) => { const { data } = props ?? {}; return requestUploadUrl(data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type RequestUploadUrlMutationResult = NonNullable< Awaited> >; export type RequestUploadUrlMutationBody = BodyType; export type RequestUploadUrlMutationError = ErrorType; /** * @summary Request a presigned URL for file upload */ export const useRequestUploadUrl = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { data: BodyType }, TContext > => { return useMutation(getRequestUploadUrlMutationOptions(options)); }; /** * @summary List all services */ export const getListServicesUrl = () => { return `/api/services`; }; export const listServices = async ( options?: RequestInit, ): Promise => { return customFetch(getListServicesUrl(), { ...options, method: "GET", }); }; export const getListServicesQueryKey = () => { return [`/api/services`] as const; }; export const getListServicesQueryOptions = < TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getListServicesQueryKey(); const queryFn: QueryFunction>> = ({ signal, }) => listServices({ signal, ...requestOptions }); return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type ListServicesQueryResult = NonNullable< Awaited> >; export type ListServicesQueryError = ErrorType; /** * @summary List all services */ export function useListServices< TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getListServicesQueryOptions(options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary Create a service (admin) */ export const getCreateServiceUrl = () => { return `/api/services`; }; export const createService = async ( createServiceBody: CreateServiceBody, options?: RequestInit, ): Promise => { return customFetch(getCreateServiceUrl(), { ...options, method: "POST", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(createServiceBody), }); }; export const getCreateServiceMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext > => { const mutationKey = ["createService"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { data: BodyType } > = (props) => { const { data } = props ?? {}; return createService(data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type CreateServiceMutationResult = NonNullable< Awaited> >; export type CreateServiceMutationBody = BodyType; export type CreateServiceMutationError = ErrorType; /** * @summary Create a service (admin) */ export const useCreateService = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { data: BodyType }, TContext > => { return useMutation(getCreateServiceMutationOptions(options)); }; /** * @summary Get service by ID */ export const getGetServiceUrl = (id: number) => { return `/api/services/${id}`; }; export const getService = async ( id: number, options?: RequestInit, ): Promise => { return customFetch(getGetServiceUrl(id), { ...options, method: "GET", }); }; export const getGetServiceQueryKey = (id: number) => { return [`/api/services/${id}`] as const; }; export const getGetServiceQueryOptions = < TData = Awaited>, TError = ErrorType, >( id: number, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getGetServiceQueryKey(id); const queryFn: QueryFunction>> = ({ signal, }) => getService(id, { signal, ...requestOptions }); return { queryKey, queryFn, enabled: !!id, ...queryOptions, } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type GetServiceQueryResult = NonNullable< Awaited> >; export type GetServiceQueryError = ErrorType; /** * @summary Get service by ID */ export function useGetService< TData = Awaited>, TError = ErrorType, >( id: number, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getGetServiceQueryOptions(id, options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary Update service (admin) */ export const getUpdateServiceUrl = (id: number) => { return `/api/services/${id}`; }; export const updateService = async ( id: number, updateServiceBody: UpdateServiceBody, options?: RequestInit, ): Promise => { return customFetch(getUpdateServiceUrl(id), { ...options, method: "PATCH", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(updateServiceBody), }); }; export const getUpdateServiceMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext > => { const mutationKey = ["updateService"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number; data: BodyType } > = (props) => { const { id, data } = props ?? {}; return updateService(id, data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type UpdateServiceMutationResult = NonNullable< Awaited> >; export type UpdateServiceMutationBody = BodyType; export type UpdateServiceMutationError = ErrorType; /** * @summary Update service (admin) */ export const useUpdateService = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number; data: BodyType }, TContext > => { return useMutation(getUpdateServiceMutationOptions(options)); }; /** * @summary Delete service (admin) */ export const getDeleteServiceUrl = ( id: number, params?: DeleteServiceParams, ) => { const normalizedParams = new URLSearchParams(); Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? "null" : value.toString()); } }); const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 ? `/api/services/${id}?${stringifiedParams}` : `/api/services/${id}`; }; export const deleteService = async ( id: number, params?: DeleteServiceParams, options?: RequestInit, ): Promise => { return customFetch(getDeleteServiceUrl(id, params), { ...options, method: "DELETE", }); }; export const getDeleteServiceMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; params?: DeleteServiceParams }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number; params?: DeleteServiceParams }, TContext > => { const mutationKey = ["deleteService"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number; params?: DeleteServiceParams } > = (props) => { const { id, params } = props ?? {}; return deleteService(id, params, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type DeleteServiceMutationResult = NonNullable< Awaited> >; export type DeleteServiceMutationError = ErrorType; /** * @summary Delete service (admin) */ export const useDeleteService = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; params?: DeleteServiceParams }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number; params?: DeleteServiceParams }, TContext > => { return useMutation(getDeleteServiceMutationOptions(options)); }; /** * @summary Place a service order */ export const getCreateServiceOrderUrl = () => { return `/api/orders`; }; export const createServiceOrder = async ( createServiceOrderBody: CreateServiceOrderBody, options?: RequestInit, ): Promise => { return customFetch(getCreateServiceOrderUrl(), { ...options, method: "POST", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(createServiceOrderBody), }); }; export const getCreateServiceOrderMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext > => { const mutationKey = ["createServiceOrder"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { data: BodyType } > = (props) => { const { data } = props ?? {}; return createServiceOrder(data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type CreateServiceOrderMutationResult = NonNullable< Awaited> >; export type CreateServiceOrderMutationBody = BodyType; export type CreateServiceOrderMutationError = ErrorType; /** * @summary Place a service order */ export const useCreateServiceOrder = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { data: BodyType }, TContext > => { return useMutation(getCreateServiceOrderMutationOptions(options)); }; /** * @summary List orders placed by the current user */ export const getListMyServiceOrdersUrl = () => { return `/api/orders/my`; }; export const listMyServiceOrders = async ( options?: RequestInit, ): Promise => { return customFetch(getListMyServiceOrdersUrl(), { ...options, method: "GET", }); }; export const getListMyServiceOrdersQueryKey = () => { return [`/api/orders/my`] as const; }; export const getListMyServiceOrdersQueryOptions = < TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getListMyServiceOrdersQueryKey(); const queryFn: QueryFunction< Awaited> > = ({ signal }) => listMyServiceOrders({ signal, ...requestOptions }); return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type ListMyServiceOrdersQueryResult = NonNullable< Awaited> >; export type ListMyServiceOrdersQueryError = ErrorType; /** * @summary List orders placed by the current user */ export function useListMyServiceOrders< TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getListMyServiceOrdersQueryOptions(options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary List active orders for receivers (requires orders.receive permission). Returns pending+unassigned orders plus orders assigned to me that are not completed/cancelled. */ export const getListIncomingServiceOrdersUrl = () => { return `/api/orders/incoming`; }; export const listIncomingServiceOrders = async ( options?: RequestInit, ): Promise => { return customFetch(getListIncomingServiceOrdersUrl(), { ...options, method: "GET", }); }; export const getListIncomingServiceOrdersQueryKey = () => { return [`/api/orders/incoming`] as const; }; export const getListIncomingServiceOrdersQueryOptions = < TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getListIncomingServiceOrdersQueryKey(); const queryFn: QueryFunction< Awaited> > = ({ signal }) => listIncomingServiceOrders({ signal, ...requestOptions }); return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type ListIncomingServiceOrdersQueryResult = NonNullable< Awaited> >; export type ListIncomingServiceOrdersQueryError = ErrorType; /** * @summary List active orders for receivers (requires orders.receive permission). Returns pending+unassigned orders plus orders assigned to me that are not completed/cancelled. */ export function useListIncomingServiceOrders< TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getListIncomingServiceOrdersQueryOptions(options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary Update order status. Preparing/completed restricted to assigned receiver or admin; cancelled allowed for owner (while pending|received) or admin (any time); pending/received are restore-from-cancelled transitions allowed for owner or admin. */ export const getUpdateServiceOrderStatusUrl = (id: number) => { return `/api/orders/${id}/status`; }; export const updateServiceOrderStatus = async ( id: number, updateServiceOrderStatusBody: UpdateServiceOrderStatusBody, options?: RequestInit, ): Promise => { return customFetch(getUpdateServiceOrderStatusUrl(id), { ...options, method: "PATCH", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(updateServiceOrderStatusBody), }); }; export const getUpdateServiceOrderStatusMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext > => { const mutationKey = ["updateServiceOrderStatus"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number; data: BodyType } > = (props) => { const { id, data } = props ?? {}; return updateServiceOrderStatus(id, data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type UpdateServiceOrderStatusMutationResult = NonNullable< Awaited> >; export type UpdateServiceOrderStatusMutationBody = BodyType; export type UpdateServiceOrderStatusMutationError = ErrorType; /** * @summary Update order status. Preparing/completed restricted to assigned receiver or admin; cancelled allowed for owner (while pending|received) or admin (any time); pending/received are restore-from-cancelled transitions allowed for owner or admin. */ export const useUpdateServiceOrderStatus = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number; data: BodyType }, TContext > => { return useMutation(getUpdateServiceOrderStatusMutationOptions(options)); }; /** * @summary Receiver atomically claims a pending order (sets status=received, assigned_to=current user). Requires orders.receive permission. Returns 409 already_claimed if the order is no longer pending+unassigned. */ export const getConfirmServiceOrderReceiptUrl = (id: number) => { return `/api/orders/${id}/confirm-receipt`; }; export const confirmServiceOrderReceipt = async ( id: number, options?: RequestInit, ): Promise => { return customFetch(getConfirmServiceOrderReceiptUrl(id), { ...options, method: "PATCH", }); }; export const getConfirmServiceOrderReceiptMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number }, TContext > => { const mutationKey = ["confirmServiceOrderReceipt"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number } > = (props) => { const { id } = props ?? {}; return confirmServiceOrderReceipt(id, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type ConfirmServiceOrderReceiptMutationResult = NonNullable< Awaited> >; export type ConfirmServiceOrderReceiptMutationError = ErrorType; /** * @summary Receiver atomically claims a pending order (sets status=received, assigned_to=current user). Requires orders.receive permission. Returns 409 already_claimed if the order is no longer pending+unassigned. */ export const useConfirmServiceOrderReceipt = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number }, TContext > => { return useMutation(getConfirmServiceOrderReceiptMutationOptions(options)); }; /** * @summary List service categories */ export const getListServiceCategoriesUrl = () => { return `/api/service-categories`; }; export const listServiceCategories = async ( options?: RequestInit, ): Promise => { return customFetch(getListServiceCategoriesUrl(), { ...options, method: "GET", }); }; export const getListServiceCategoriesQueryKey = () => { return [`/api/service-categories`] as const; }; export const getListServiceCategoriesQueryOptions = < TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getListServiceCategoriesQueryKey(); const queryFn: QueryFunction< Awaited> > = ({ signal }) => listServiceCategories({ signal, ...requestOptions }); return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type ListServiceCategoriesQueryResult = NonNullable< Awaited> >; export type ListServiceCategoriesQueryError = ErrorType; /** * @summary List service categories */ export function useListServiceCategories< TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getListServiceCategoriesQueryOptions(options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary List conversations for current user */ export const getListConversationsUrl = () => { return `/api/conversations`; }; export const listConversations = async ( options?: RequestInit, ): Promise => { return customFetch(getListConversationsUrl(), { ...options, method: "GET", }); }; export const getListConversationsQueryKey = () => { return [`/api/conversations`] as const; }; export const getListConversationsQueryOptions = < TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getListConversationsQueryKey(); const queryFn: QueryFunction< Awaited> > = ({ signal }) => listConversations({ signal, ...requestOptions }); return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type ListConversationsQueryResult = NonNullable< Awaited> >; export type ListConversationsQueryError = ErrorType; /** * @summary List conversations for current user */ export function useListConversations< TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getListConversationsQueryOptions(options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary Create a conversation */ export const getCreateConversationUrl = () => { return `/api/conversations`; }; export const createConversation = async ( createConversationBody: CreateConversationBody, options?: RequestInit, ): Promise => { return customFetch(getCreateConversationUrl(), { ...options, method: "POST", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(createConversationBody), }); }; export const getCreateConversationMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext > => { const mutationKey = ["createConversation"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { data: BodyType } > = (props) => { const { data } = props ?? {}; return createConversation(data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type CreateConversationMutationResult = NonNullable< Awaited> >; export type CreateConversationMutationBody = BodyType; export type CreateConversationMutationError = ErrorType; /** * @summary Create a conversation */ export const useCreateConversation = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { data: BodyType }, TContext > => { return useMutation(getCreateConversationMutationOptions(options)); }; /** * @summary Get conversation by ID */ export const getGetConversationUrl = (id: number) => { return `/api/conversations/${id}`; }; export const getConversation = async ( id: number, options?: RequestInit, ): Promise => { return customFetch(getGetConversationUrl(id), { ...options, method: "GET", }); }; export const getGetConversationQueryKey = (id: number) => { return [`/api/conversations/${id}`] as const; }; export const getGetConversationQueryOptions = < TData = Awaited>, TError = ErrorType, >( id: number, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getGetConversationQueryKey(id); const queryFn: QueryFunction>> = ({ signal, }) => getConversation(id, { signal, ...requestOptions }); return { queryKey, queryFn, enabled: !!id, ...queryOptions, } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type GetConversationQueryResult = NonNullable< Awaited> >; export type GetConversationQueryError = ErrorType; /** * @summary Get conversation by ID */ export function useGetConversation< TData = Awaited>, TError = ErrorType, >( id: number, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getGetConversationQueryOptions(id, options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary Update conversation properties (admin only) */ export const getUpdateConversationUrl = (id: number) => { return `/api/conversations/${id}`; }; export const updateConversation = async ( id: number, updateConversationBody: UpdateConversationBody, options?: RequestInit, ): Promise => { return customFetch(getUpdateConversationUrl(id), { ...options, method: "PATCH", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(updateConversationBody), }); }; export const getUpdateConversationMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext > => { const mutationKey = ["updateConversation"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number; data: BodyType } > = (props) => { const { id, data } = props ?? {}; return updateConversation(id, data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type UpdateConversationMutationResult = NonNullable< Awaited> >; export type UpdateConversationMutationBody = BodyType; export type UpdateConversationMutationError = ErrorType; /** * @summary Update conversation properties (admin only) */ export const useUpdateConversation = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number; data: BodyType }, TContext > => { return useMutation(getUpdateConversationMutationOptions(options)); }; /** * @summary Add participants to a group conversation (admin only) */ export const getAddConversationParticipantsUrl = (id: number) => { return `/api/conversations/${id}/participants`; }; export const addConversationParticipants = async ( id: number, addParticipantsBody: AddParticipantsBody, options?: RequestInit, ): Promise => { return customFetch( getAddConversationParticipantsUrl(id), { ...options, method: "POST", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(addParticipantsBody), }, ); }; export const getAddConversationParticipantsMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext > => { const mutationKey = ["addConversationParticipants"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number; data: BodyType } > = (props) => { const { id, data } = props ?? {}; return addConversationParticipants(id, data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type AddConversationParticipantsMutationResult = NonNullable< Awaited> >; export type AddConversationParticipantsMutationBody = BodyType; export type AddConversationParticipantsMutationError = ErrorType; /** * @summary Add participants to a group conversation (admin only) */ export const useAddConversationParticipants = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number; data: BodyType }, TContext > => { return useMutation(getAddConversationParticipantsMutationOptions(options)); }; /** * @summary Remove a participant from a group conversation (admin only) */ export const getRemoveConversationParticipantUrl = ( id: number, userId: number, ) => { return `/api/conversations/${id}/participants/${userId}`; }; export const removeConversationParticipant = async ( id: number, userId: number, options?: RequestInit, ): Promise => { return customFetch( getRemoveConversationParticipantUrl(id, userId), { ...options, method: "DELETE", }, ); }; export const getRemoveConversationParticipantMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; userId: number }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number; userId: number }, TContext > => { const mutationKey = ["removeConversationParticipant"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number; userId: number } > = (props) => { const { id, userId } = props ?? {}; return removeConversationParticipant(id, userId, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type RemoveConversationParticipantMutationResult = NonNullable< Awaited> >; export type RemoveConversationParticipantMutationError = ErrorType; /** * @summary Remove a participant from a group conversation (admin only) */ export const useRemoveConversationParticipant = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; userId: number }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number; userId: number }, TContext > => { return useMutation(getRemoveConversationParticipantMutationOptions(options)); }; /** * @summary Update per-user state (mute, archive) */ export const getUpdateConversationStateUrl = (id: number) => { return `/api/conversations/${id}/state`; }; export const updateConversationState = async ( id: number, updateConversationStateBody: UpdateConversationStateBody, options?: RequestInit, ): Promise => { return customFetch( getUpdateConversationStateUrl(id), { ...options, method: "PATCH", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(updateConversationStateBody), }, ); }; export const getUpdateConversationStateMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext > => { const mutationKey = ["updateConversationState"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number; data: BodyType } > = (props) => { const { id, data } = props ?? {}; return updateConversationState(id, data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type UpdateConversationStateMutationResult = NonNullable< Awaited> >; export type UpdateConversationStateMutationBody = BodyType; export type UpdateConversationStateMutationError = ErrorType; /** * @summary Update per-user state (mute, archive) */ export const useUpdateConversationState = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number; data: BodyType }, TContext > => { return useMutation(getUpdateConversationStateMutationOptions(options)); }; /** * @summary Leave a group conversation */ export const getLeaveConversationUrl = (id: number) => { return `/api/conversations/${id}/leave`; }; export const leaveConversation = async ( id: number, leaveConversationBody?: LeaveConversationBody, options?: RequestInit, ): Promise => { return customFetch(getLeaveConversationUrl(id), { ...options, method: "POST", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(leaveConversationBody), }); }; export const getLeaveConversationMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext > => { const mutationKey = ["leaveConversation"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number; data: BodyType } > = (props) => { const { id, data } = props ?? {}; return leaveConversation(id, data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type LeaveConversationMutationResult = NonNullable< Awaited> >; export type LeaveConversationMutationBody = BodyType; export type LeaveConversationMutationError = ErrorType; /** * @summary Leave a group conversation */ export const useLeaveConversation = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number; data: BodyType }, TContext > => { return useMutation(getLeaveConversationMutationOptions(options)); }; /** * @summary List messages in a conversation */ export const getListMessagesUrl = (id: number) => { return `/api/conversations/${id}/messages`; }; export const listMessages = async ( id: number, options?: RequestInit, ): Promise => { return customFetch(getListMessagesUrl(id), { ...options, method: "GET", }); }; export const getListMessagesQueryKey = (id: number) => { return [`/api/conversations/${id}/messages`] as const; }; export const getListMessagesQueryOptions = < TData = Awaited>, TError = ErrorType, >( id: number, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getListMessagesQueryKey(id); const queryFn: QueryFunction>> = ({ signal, }) => listMessages(id, { signal, ...requestOptions }); return { queryKey, queryFn, enabled: !!id, ...queryOptions, } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type ListMessagesQueryResult = NonNullable< Awaited> >; export type ListMessagesQueryError = ErrorType; /** * @summary List messages in a conversation */ export function useListMessages< TData = Awaited>, TError = ErrorType, >( id: number, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getListMessagesQueryOptions(id, options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary Send a message */ export const getSendMessageUrl = (id: number) => { return `/api/conversations/${id}/messages`; }; export const sendMessage = async ( id: number, sendMessageBody: SendMessageBody, options?: RequestInit, ): Promise => { return customFetch(getSendMessageUrl(id), { ...options, method: "POST", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(sendMessageBody), }); }; export const getSendMessageMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext > => { const mutationKey = ["sendMessage"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number; data: BodyType } > = (props) => { const { id, data } = props ?? {}; return sendMessage(id, data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type SendMessageMutationResult = NonNullable< Awaited> >; export type SendMessageMutationBody = BodyType; export type SendMessageMutationError = ErrorType; /** * @summary Send a message */ export const useSendMessage = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number; data: BodyType }, TContext > => { return useMutation(getSendMessageMutationOptions(options)); }; /** * @summary Mark all messages in conversation as read */ export const getMarkConversationReadUrl = (id: number) => { return `/api/conversations/${id}/read`; }; export const markConversationRead = async ( id: number, options?: RequestInit, ): Promise => { return customFetch(getMarkConversationReadUrl(id), { ...options, method: "POST", }); }; export const getMarkConversationReadMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number }, TContext > => { const mutationKey = ["markConversationRead"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number } > = (props) => { const { id } = props ?? {}; return markConversationRead(id, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type MarkConversationReadMutationResult = NonNullable< Awaited> >; export type MarkConversationReadMutationError = ErrorType; /** * @summary Mark all messages in conversation as read */ export const useMarkConversationRead = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number }, TContext > => { return useMutation(getMarkConversationReadMutationOptions(options)); }; /** * @summary List notifications for current user */ export const getListNotificationsUrl = () => { return `/api/notifications`; }; export const listNotifications = async ( options?: RequestInit, ): Promise => { return customFetch(getListNotificationsUrl(), { ...options, method: "GET", }); }; export const getListNotificationsQueryKey = () => { return [`/api/notifications`] as const; }; export const getListNotificationsQueryOptions = < TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getListNotificationsQueryKey(); const queryFn: QueryFunction< Awaited> > = ({ signal }) => listNotifications({ signal, ...requestOptions }); return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type ListNotificationsQueryResult = NonNullable< Awaited> >; export type ListNotificationsQueryError = ErrorType; /** * @summary List notifications for current user */ export function useListNotifications< TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getListNotificationsQueryOptions(options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary Mark notification as read */ export const getMarkNotificationReadUrl = (id: number) => { return `/api/notifications/${id}/read`; }; export const markNotificationRead = async ( id: number, options?: RequestInit, ): Promise => { return customFetch(getMarkNotificationReadUrl(id), { ...options, method: "PATCH", }); }; export const getMarkNotificationReadMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number }, TContext > => { const mutationKey = ["markNotificationRead"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number } > = (props) => { const { id } = props ?? {}; return markNotificationRead(id, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type MarkNotificationReadMutationResult = NonNullable< Awaited> >; export type MarkNotificationReadMutationError = ErrorType; /** * @summary Mark notification as read */ export const useMarkNotificationRead = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number }, TContext > => { return useMutation(getMarkNotificationReadMutationOptions(options)); }; /** * @summary Mark all notifications as read */ export const getMarkAllNotificationsReadUrl = () => { return `/api/notifications/read-all`; }; export const markAllNotificationsRead = async ( options?: RequestInit, ): Promise => { return customFetch(getMarkAllNotificationsReadUrl(), { ...options, method: "POST", }); }; export const getMarkAllNotificationsReadMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, void, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, void, TContext > => { const mutationKey = ["markAllNotificationsRead"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, void > = () => { return markAllNotificationsRead(requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type MarkAllNotificationsReadMutationResult = NonNullable< Awaited> >; export type MarkAllNotificationsReadMutationError = ErrorType; /** * @summary Mark all notifications as read */ export const useMarkAllNotificationsRead = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, void, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, void, TContext > => { return useMutation(getMarkAllNotificationsReadMutationOptions(options)); }; /** * @summary List all users (admin) */ export const getListUsersUrl = (params?: ListUsersParams) => { const normalizedParams = new URLSearchParams(); Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? "null" : value.toString()); } }); const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 ? `/api/users?${stringifiedParams}` : `/api/users`; }; export const listUsers = async ( params?: ListUsersParams, options?: RequestInit, ): Promise => { return customFetch(getListUsersUrl(params), { ...options, method: "GET", }); }; export const getListUsersQueryKey = (params?: ListUsersParams) => { return [`/api/users`, ...(params ? [params] : [])] as const; }; export const getListUsersQueryOptions = < TData = Awaited>, TError = ErrorType, >( params?: ListUsersParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getListUsersQueryKey(params); const queryFn: QueryFunction>> = ({ signal, }) => listUsers(params, { signal, ...requestOptions }); return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type ListUsersQueryResult = NonNullable< Awaited> >; export type ListUsersQueryError = ErrorType; /** * @summary List all users (admin) */ export function useListUsers< TData = Awaited>, TError = ErrorType, >( params?: ListUsersParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getListUsersQueryOptions(params, options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary Create a user (admin) */ export const getCreateUserUrl = () => { return `/api/users`; }; export const createUser = async ( createUserBody: CreateUserBody, options?: RequestInit, ): Promise => { return customFetch(getCreateUserUrl(), { ...options, method: "POST", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(createUserBody), }); }; export const getCreateUserMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext > => { const mutationKey = ["createUser"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { data: BodyType } > = (props) => { const { data } = props ?? {}; return createUser(data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type CreateUserMutationResult = NonNullable< Awaited> >; export type CreateUserMutationBody = BodyType; export type CreateUserMutationError = ErrorType; /** * @summary Create a user (admin) */ export const useCreateUser = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { data: BodyType }, TContext > => { return useMutation(getCreateUserMutationOptions(options)); }; /** * @summary Get user by ID (admin) */ export const getGetUserUrl = (id: number) => { return `/api/users/${id}`; }; export const getUser = async ( id: number, options?: RequestInit, ): Promise => { return customFetch(getGetUserUrl(id), { ...options, method: "GET", }); }; export const getGetUserQueryKey = (id: number) => { return [`/api/users/${id}`] as const; }; export const getGetUserQueryOptions = < TData = Awaited>, TError = ErrorType, >( id: number, options?: { query?: UseQueryOptions>, TError, TData>; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getGetUserQueryKey(id); const queryFn: QueryFunction>> = ({ signal, }) => getUser(id, { signal, ...requestOptions }); return { queryKey, queryFn, enabled: !!id, ...queryOptions, } as UseQueryOptions>, TError, TData> & { queryKey: QueryKey; }; }; export type GetUserQueryResult = NonNullable< Awaited> >; export type GetUserQueryError = ErrorType; /** * @summary Get user by ID (admin) */ export function useGetUser< TData = Awaited>, TError = ErrorType, >( id: number, options?: { query?: UseQueryOptions>, TError, TData>; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getGetUserQueryOptions(id, options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary Update user (admin) */ export const getUpdateUserUrl = (id: number) => { return `/api/users/${id}`; }; export const updateUser = async ( id: number, updateUserBody: UpdateUserBody, options?: RequestInit, ): Promise => { return customFetch(getUpdateUserUrl(id), { ...options, method: "PATCH", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(updateUserBody), }); }; export const getUpdateUserMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext > => { const mutationKey = ["updateUser"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number; data: BodyType } > = (props) => { const { id, data } = props ?? {}; return updateUser(id, data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type UpdateUserMutationResult = NonNullable< Awaited> >; export type UpdateUserMutationBody = BodyType; export type UpdateUserMutationError = ErrorType; /** * @summary Update user (admin) */ export const useUpdateUser = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number; data: BodyType }, TContext > => { return useMutation(getUpdateUserMutationOptions(options)); }; /** * @summary Delete user (admin) */ export const getDeleteUserUrl = (id: number, params?: DeleteUserParams) => { const normalizedParams = new URLSearchParams(); Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? "null" : value.toString()); } }); const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 ? `/api/users/${id}?${stringifiedParams}` : `/api/users/${id}`; }; export const deleteUser = async ( id: number, params?: DeleteUserParams, options?: RequestInit, ): Promise => { return customFetch(getDeleteUserUrl(id, params), { ...options, method: "DELETE", }); }; export const getDeleteUserMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; params?: DeleteUserParams }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number; params?: DeleteUserParams }, TContext > => { const mutationKey = ["deleteUser"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number; params?: DeleteUserParams } > = (props) => { const { id, params } = props ?? {}; return deleteUser(id, params, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type DeleteUserMutationResult = NonNullable< Awaited> >; export type DeleteUserMutationError = ErrorType; /** * @summary Delete user (admin) */ export const useDeleteUser = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; params?: DeleteUserParams }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number; params?: DeleteUserParams }, TContext > => { return useMutation(getDeleteUserMutationOptions(options)); }; /** * Permanently deletes the order. Allowed when the caller owns the order AND it is in a terminal status (completed/cancelled), OR the caller is an admin (any status). * @summary Delete a service order */ export const getDeleteServiceOrderUrl = (id: number) => { return `/api/orders/${id}`; }; export const deleteServiceOrder = async ( id: number, options?: RequestInit, ): Promise => { return customFetch(getDeleteServiceOrderUrl(id), { ...options, method: "DELETE", }); }; export const getDeleteServiceOrderMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number }, TContext > => { const mutationKey = ["deleteServiceOrder"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number } > = (props) => { const { id } = props ?? {}; return deleteServiceOrder(id, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type DeleteServiceOrderMutationResult = NonNullable< Awaited> >; export type DeleteServiceOrderMutationError = ErrorType; /** * @summary Delete a service order */ export const useDeleteServiceOrder = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number }, TContext > => { return useMutation(getDeleteServiceOrderMutationOptions(options)); }; /** * @summary Idempotently add a role to a user (admin) */ export const getAddUserRoleUrl = (id: number) => { return `/api/users/${id}/roles`; }; export const addUserRole = async ( id: number, addUserRoleBody: AddUserRoleBody, options?: RequestInit, ): Promise => { return customFetch(getAddUserRoleUrl(id), { ...options, method: "POST", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(addUserRoleBody), }); }; export const getAddUserRoleMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext > => { const mutationKey = ["addUserRole"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number; data: BodyType } > = (props) => { const { id, data } = props ?? {}; return addUserRole(id, data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type AddUserRoleMutationResult = NonNullable< Awaited> >; export type AddUserRoleMutationBody = BodyType; export type AddUserRoleMutationError = ErrorType; /** * @summary Idempotently add a role to a user (admin) */ export const useAddUserRole = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number; data: BodyType }, TContext > => { return useMutation(getAddUserRoleMutationOptions(options)); }; /** * @summary Idempotently remove a role from a user (admin) */ export const getRemoveUserRoleUrl = (id: number, roleName: string) => { return `/api/users/${id}/roles/${roleName}`; }; export const removeUserRole = async ( id: number, roleName: string, options?: RequestInit, ): Promise => { return customFetch(getRemoveUserRoleUrl(id, roleName), { ...options, method: "DELETE", }); }; export const getRemoveUserRoleMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; roleName: string }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number; roleName: string }, TContext > => { const mutationKey = ["removeUserRole"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number; roleName: string } > = (props) => { const { id, roleName } = props ?? {}; return removeUserRole(id, roleName, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type RemoveUserRoleMutationResult = NonNullable< Awaited> >; export type RemoveUserRoleMutationError = ErrorType; /** * @summary Idempotently remove a role from a user (admin) */ export const useRemoveUserRole = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; roleName: string }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number; roleName: string }, TContext > => { return useMutation(getRemoveUserRoleMutationOptions(options)); }; /** * @summary List all available permissions (admin) */ export const getListPermissionsUrl = () => { return `/api/permissions`; }; export const listPermissions = async ( options?: RequestInit, ): Promise => { return customFetch(getListPermissionsUrl(), { ...options, method: "GET", }); }; export const getListPermissionsQueryKey = () => { return [`/api/permissions`] as const; }; export const getListPermissionsQueryOptions = < TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getListPermissionsQueryKey(); const queryFn: QueryFunction>> = ({ signal, }) => listPermissions({ signal, ...requestOptions }); return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type ListPermissionsQueryResult = NonNullable< Awaited> >; export type ListPermissionsQueryError = ErrorType; /** * @summary List all available permissions (admin) */ export function useListPermissions< TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getListPermissionsQueryOptions(options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary List roles (admin) */ export const getListRolesUrl = () => { return `/api/roles`; }; export const listRoles = async (options?: RequestInit): Promise => { return customFetch(getListRolesUrl(), { ...options, method: "GET", }); }; export const getListRolesQueryKey = () => { return [`/api/roles`] as const; }; export const getListRolesQueryOptions = < TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions>, TError, TData>; request?: SecondParameter; }) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getListRolesQueryKey(); const queryFn: QueryFunction>> = ({ signal, }) => listRoles({ signal, ...requestOptions }); return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type ListRolesQueryResult = NonNullable< Awaited> >; export type ListRolesQueryError = ErrorType; /** * @summary List roles (admin) */ export function useListRoles< TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions>, TError, TData>; request?: SecondParameter; }): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getListRolesQueryOptions(options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary Create role (admin) */ export const getCreateRoleUrl = () => { return `/api/roles`; }; export const createRole = async ( createRoleBody: CreateRoleBody, options?: RequestInit, ): Promise => { return customFetch(getCreateRoleUrl(), { ...options, method: "POST", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(createRoleBody), }); }; export const getCreateRoleMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext > => { const mutationKey = ["createRole"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { data: BodyType } > = (props) => { const { data } = props ?? {}; return createRole(data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type CreateRoleMutationResult = NonNullable< Awaited> >; export type CreateRoleMutationBody = BodyType; export type CreateRoleMutationError = ErrorType; /** * @summary Create role (admin) */ export const useCreateRole = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { data: BodyType }, TContext > => { return useMutation(getCreateRoleMutationOptions(options)); }; /** * @summary Update role name and descriptions (admin) */ export const getUpdateRoleUrl = (id: number) => { return `/api/roles/${id}`; }; export const updateRole = async ( id: number, updateRoleBody: UpdateRoleBody, options?: RequestInit, ): Promise => { return customFetch(getUpdateRoleUrl(id), { ...options, method: "PATCH", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(updateRoleBody), }); }; export const getUpdateRoleMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext > => { const mutationKey = ["updateRole"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number; data: BodyType } > = (props) => { const { id, data } = props ?? {}; return updateRole(id, data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type UpdateRoleMutationResult = NonNullable< Awaited> >; export type UpdateRoleMutationBody = BodyType; export type UpdateRoleMutationError = ErrorType; /** * @summary Update role name and descriptions (admin) */ export const useUpdateRole = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number; data: BodyType }, TContext > => { return useMutation(getUpdateRoleMutationOptions(options)); }; /** * @summary Delete role (admin) */ export const getDeleteRoleUrl = (id: number) => { return `/api/roles/${id}`; }; export const deleteRole = async ( id: number, options?: RequestInit, ): Promise => { return customFetch(getDeleteRoleUrl(id), { ...options, method: "DELETE", }); }; export const getDeleteRoleMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number }, TContext > => { const mutationKey = ["deleteRole"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number } > = (props) => { const { id } = props ?? {}; return deleteRole(id, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type DeleteRoleMutationResult = NonNullable< Awaited> >; export type DeleteRoleMutationError = ErrorType< ErrorResponse | RoleDeletionConflict >; /** * @summary Delete role (admin) */ export const useDeleteRole = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number }, TContext > => { return useMutation(getDeleteRoleMutationOptions(options)); }; /** * @summary Count users and groups currently assigned to a role (admin) */ export const getGetRoleUsageUrl = (id: number) => { return `/api/roles/${id}/usage`; }; export const getRoleUsage = async ( id: number, options?: RequestInit, ): Promise => { return customFetch(getGetRoleUsageUrl(id), { ...options, method: "GET", }); }; export const getGetRoleUsageQueryKey = (id: number) => { return [`/api/roles/${id}/usage`] as const; }; export const getGetRoleUsageQueryOptions = < TData = Awaited>, TError = ErrorType, >( id: number, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getGetRoleUsageQueryKey(id); const queryFn: QueryFunction>> = ({ signal, }) => getRoleUsage(id, { signal, ...requestOptions }); return { queryKey, queryFn, enabled: !!id, ...queryOptions, } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type GetRoleUsageQueryResult = NonNullable< Awaited> >; export type GetRoleUsageQueryError = ErrorType; /** * @summary Count users and groups currently assigned to a role (admin) */ export function useGetRoleUsage< TData = Awaited>, TError = ErrorType, >( id: number, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getGetRoleUsageQueryOptions(id, options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * Returns permission-change audit records for the given role, newest first. Supports offset-based pagination via `limit`/`offset` and optional filters by acting user (`actorUserId`) and a date range (`from`/`to`, inclusive UTC days). The response includes the total matching count and the next offset to load (or `null` when the end has been reached). Each entry captures the actor (if known), the previous permission IDs, the new permission IDs, and the timestamp. * @summary List recent permission-change audit entries for a role (admin) */ export const getGetRolePermissionAuditUrl = ( id: number, params?: GetRolePermissionAuditParams, ) => { const normalizedParams = new URLSearchParams(); Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? "null" : value.toString()); } }); const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 ? `/api/roles/${id}/audit?${stringifiedParams}` : `/api/roles/${id}/audit`; }; export const getRolePermissionAudit = async ( id: number, params?: GetRolePermissionAuditParams, options?: RequestInit, ): Promise => { return customFetch( getGetRolePermissionAuditUrl(id, params), { ...options, method: "GET", }, ); }; export const getGetRolePermissionAuditQueryKey = ( id: number, params?: GetRolePermissionAuditParams, ) => { return [`/api/roles/${id}/audit`, ...(params ? [params] : [])] as const; }; export const getGetRolePermissionAuditQueryOptions = < TData = Awaited>, TError = ErrorType, >( id: number, params?: GetRolePermissionAuditParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getGetRolePermissionAuditQueryKey(id, params); const queryFn: QueryFunction< Awaited> > = ({ signal }) => getRolePermissionAudit(id, params, { signal, ...requestOptions }); return { queryKey, queryFn, enabled: !!id, ...queryOptions, } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type GetRolePermissionAuditQueryResult = NonNullable< Awaited> >; export type GetRolePermissionAuditQueryError = ErrorType; /** * @summary List recent permission-change audit entries for a role (admin) */ export function useGetRolePermissionAudit< TData = Awaited>, TError = ErrorType, >( id: number, params?: GetRolePermissionAuditParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getGetRolePermissionAuditQueryOptions( id, params, options, ); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * Given a candidate set of permission IDs for the role, returns the list of permissions that would be removed and, for each one, how many users would lose the permission (because they hold this role directly or via a group and have no other role granting the permission), plus the groups that currently grant this role. * @summary Preview the impact of changing a role's permission set (admin) */ export const getPreviewRolePermissionsImpactUrl = (id: number) => { return `/api/roles/${id}/permissions/impact-preview`; }; export const previewRolePermissionsImpact = async ( id: number, rolePermissionsImpactBody: RolePermissionsImpactBody, options?: RequestInit, ): Promise => { return customFetch( getPreviewRolePermissionsImpactUrl(id), { ...options, method: "POST", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(rolePermissionsImpactBody), }, ); }; export const getPreviewRolePermissionsImpactMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext > => { const mutationKey = ["previewRolePermissionsImpact"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number; data: BodyType } > = (props) => { const { id, data } = props ?? {}; return previewRolePermissionsImpact(id, data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type PreviewRolePermissionsImpactMutationResult = NonNullable< Awaited> >; export type PreviewRolePermissionsImpactMutationBody = BodyType; export type PreviewRolePermissionsImpactMutationError = ErrorType; /** * @summary Preview the impact of changing a role's permission set (admin) */ export const usePreviewRolePermissionsImpact = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number; data: BodyType }, TContext > => { return useMutation(getPreviewRolePermissionsImpactMutationOptions(options)); }; /** * @summary List permissions assigned to a role (admin) */ export const getGetRolePermissionsUrl = (id: number) => { return `/api/roles/${id}/permissions`; }; export const getRolePermissions = async ( id: number, options?: RequestInit, ): Promise => { return customFetch(getGetRolePermissionsUrl(id), { ...options, method: "GET", }); }; export const getGetRolePermissionsQueryKey = (id: number) => { return [`/api/roles/${id}/permissions`] as const; }; export const getGetRolePermissionsQueryOptions = < TData = Awaited>, TError = ErrorType, >( id: number, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getGetRolePermissionsQueryKey(id); const queryFn: QueryFunction< Awaited> > = ({ signal }) => getRolePermissions(id, { signal, ...requestOptions }); return { queryKey, queryFn, enabled: !!id, ...queryOptions, } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type GetRolePermissionsQueryResult = NonNullable< Awaited> >; export type GetRolePermissionsQueryError = ErrorType; /** * @summary List permissions assigned to a role (admin) */ export function useGetRolePermissions< TData = Awaited>, TError = ErrorType, >( id: number, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getGetRolePermissionsQueryOptions(id, options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary Atomically replace the permissions assigned to a role (admin) */ export const getReplaceRolePermissionsUrl = (id: number) => { return `/api/roles/${id}/permissions`; }; export const replaceRolePermissions = async ( id: number, replaceRolePermissionsBody: ReplaceRolePermissionsBody, options?: RequestInit, ): Promise => { return customFetch(getReplaceRolePermissionsUrl(id), { ...options, method: "PUT", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(replaceRolePermissionsBody), }); }; export const getReplaceRolePermissionsMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext > => { const mutationKey = ["replaceRolePermissions"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number; data: BodyType } > = (props) => { const { id, data } = props ?? {}; return replaceRolePermissions(id, data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type ReplaceRolePermissionsMutationResult = NonNullable< Awaited> >; export type ReplaceRolePermissionsMutationBody = BodyType; export type ReplaceRolePermissionsMutationError = ErrorType; /** * @summary Atomically replace the permissions assigned to a role (admin) */ export const useReplaceRolePermissions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number; data: BodyType }, TContext > => { return useMutation(getReplaceRolePermissionsMutationOptions(options)); }; /** * @summary List groups (admin) */ export const getListGroupsUrl = (params?: ListGroupsParams) => { const normalizedParams = new URLSearchParams(); Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? "null" : value.toString()); } }); const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 ? `/api/groups?${stringifiedParams}` : `/api/groups`; }; export const listGroups = async ( params?: ListGroupsParams, options?: RequestInit, ): Promise => { return customFetch(getListGroupsUrl(params), { ...options, method: "GET", }); }; export const getListGroupsQueryKey = (params?: ListGroupsParams) => { return [`/api/groups`, ...(params ? [params] : [])] as const; }; export const getListGroupsQueryOptions = < TData = Awaited>, TError = ErrorType, >( params?: ListGroupsParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getListGroupsQueryKey(params); const queryFn: QueryFunction>> = ({ signal, }) => listGroups(params, { signal, ...requestOptions }); return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type ListGroupsQueryResult = NonNullable< Awaited> >; export type ListGroupsQueryError = ErrorType; /** * @summary List groups (admin) */ export function useListGroups< TData = Awaited>, TError = ErrorType, >( params?: ListGroupsParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getListGroupsQueryOptions(params, options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary Create group (admin) */ export const getCreateGroupUrl = () => { return `/api/groups`; }; export const createGroup = async ( createGroupBody: CreateGroupBody, options?: RequestInit, ): Promise => { return customFetch(getCreateGroupUrl(), { ...options, method: "POST", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(createGroupBody), }); }; export const getCreateGroupMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext > => { const mutationKey = ["createGroup"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { data: BodyType } > = (props) => { const { data } = props ?? {}; return createGroup(data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type CreateGroupMutationResult = NonNullable< Awaited> >; export type CreateGroupMutationBody = BodyType; export type CreateGroupMutationError = ErrorType; /** * @summary Create group (admin) */ export const useCreateGroup = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { data: BodyType }, TContext > => { return useMutation(getCreateGroupMutationOptions(options)); }; /** * @summary Get group with members and apps (admin) */ export const getGetGroupUrl = (id: number) => { return `/api/groups/${id}`; }; export const getGroup = async ( id: number, options?: RequestInit, ): Promise => { return customFetch(getGetGroupUrl(id), { ...options, method: "GET", }); }; export const getGetGroupQueryKey = (id: number) => { return [`/api/groups/${id}`] as const; }; export const getGetGroupQueryOptions = < TData = Awaited>, TError = ErrorType, >( id: number, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getGetGroupQueryKey(id); const queryFn: QueryFunction>> = ({ signal, }) => getGroup(id, { signal, ...requestOptions }); return { queryKey, queryFn, enabled: !!id, ...queryOptions, } as UseQueryOptions>, TError, TData> & { queryKey: QueryKey; }; }; export type GetGroupQueryResult = NonNullable< Awaited> >; export type GetGroupQueryError = ErrorType; /** * @summary Get group with members and apps (admin) */ export function useGetGroup< TData = Awaited>, TError = ErrorType, >( id: number, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getGetGroupQueryOptions(id, options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary Update group (admin) */ export const getUpdateGroupUrl = (id: number) => { return `/api/groups/${id}`; }; export const updateGroup = async ( id: number, updateGroupBody: UpdateGroupBody, options?: RequestInit, ): Promise => { return customFetch(getUpdateGroupUrl(id), { ...options, method: "PATCH", headers: { "Content-Type": "application/json", ...options?.headers }, body: JSON.stringify(updateGroupBody), }); }; export const getUpdateGroupMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext > => { const mutationKey = ["updateGroup"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number; data: BodyType } > = (props) => { const { id, data } = props ?? {}; return updateGroup(id, data, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type UpdateGroupMutationResult = NonNullable< Awaited> >; export type UpdateGroupMutationBody = BodyType; export type UpdateGroupMutationError = ErrorType; /** * @summary Update group (admin) */ export const useUpdateGroup = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: BodyType }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number; data: BodyType }, TContext > => { return useMutation(getUpdateGroupMutationOptions(options)); }; /** * @summary Delete group (admin) */ export const getDeleteGroupUrl = (id: number, params?: DeleteGroupParams) => { const normalizedParams = new URLSearchParams(); Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? "null" : value.toString()); } }); const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 ? `/api/groups/${id}?${stringifiedParams}` : `/api/groups/${id}`; }; export const deleteGroup = async ( id: number, params?: DeleteGroupParams, options?: RequestInit, ): Promise => { return customFetch(getDeleteGroupUrl(id, params), { ...options, method: "DELETE", }); }; export const getDeleteGroupMutationOptions = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; params?: DeleteGroupParams }, TContext >; request?: SecondParameter; }): UseMutationOptions< Awaited>, TError, { id: number; params?: DeleteGroupParams }, TContext > => { const mutationKey = ["deleteGroup"]; const { mutation: mutationOptions, request: requestOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey }, request: undefined }; const mutationFn: MutationFunction< Awaited>, { id: number; params?: DeleteGroupParams } > = (props) => { const { id, params } = props ?? {}; return deleteGroup(id, params, requestOptions); }; return { mutationFn, ...mutationOptions }; }; export type DeleteGroupMutationResult = NonNullable< Awaited> >; export type DeleteGroupMutationError = ErrorType< ErrorResponse | GroupDeletionConflict >; /** * @summary Delete group (admin) */ export const useDeleteGroup = < TError = ErrorType, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; params?: DeleteGroupParams }, TContext >; request?: SecondParameter; }): UseMutationResult< Awaited>, TError, { id: number; params?: DeleteGroupParams }, TContext > => { return useMutation(getDeleteGroupMutationOptions(options)); }; /** * Returns permission-change audit records for the given user, newest first. Mirrors the role audit endpoint shape and supports the same `limit`/`offset`/`actorUserId`/`from`/`to` filters. Each entry captures the actor (if known), the previous and new id sets, and the change kind (`user.roles` or `user.groups`). * @summary List recent permission-change audit entries for a user (admin) */ export const getGetUserPermissionAuditUrl = ( id: number, params?: GetUserPermissionAuditParams, ) => { const normalizedParams = new URLSearchParams(); Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? "null" : value.toString()); } }); const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 ? `/api/users/${id}/audit?${stringifiedParams}` : `/api/users/${id}/audit`; }; export const getUserPermissionAudit = async ( id: number, params?: GetUserPermissionAuditParams, options?: RequestInit, ): Promise => { return customFetch( getGetUserPermissionAuditUrl(id, params), { ...options, method: "GET", }, ); }; export const getGetUserPermissionAuditQueryKey = ( id: number, params?: GetUserPermissionAuditParams, ) => { return [`/api/users/${id}/audit`, ...(params ? [params] : [])] as const; }; export const getGetUserPermissionAuditQueryOptions = < TData = Awaited>, TError = ErrorType, >( id: number, params?: GetUserPermissionAuditParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getGetUserPermissionAuditQueryKey(id, params); const queryFn: QueryFunction< Awaited> > = ({ signal }) => getUserPermissionAudit(id, params, { signal, ...requestOptions }); return { queryKey, queryFn, enabled: !!id, ...queryOptions, } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type GetUserPermissionAuditQueryResult = NonNullable< Awaited> >; export type GetUserPermissionAuditQueryError = ErrorType; /** * @summary List recent permission-change audit entries for a user (admin) */ export function useGetUserPermissionAudit< TData = Awaited>, TError = ErrorType, >( id: number, params?: GetUserPermissionAuditParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getGetUserPermissionAuditQueryOptions( id, params, options, ); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * Returns permission-change audit records for the given group, newest first. Captures changes to the group's user, role and app sets via the discriminator field `changeKind`. * @summary List recent permission-change audit entries for a group (admin) */ export const getGetGroupPermissionAuditUrl = ( id: number, params?: GetGroupPermissionAuditParams, ) => { const normalizedParams = new URLSearchParams(); Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? "null" : value.toString()); } }); const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 ? `/api/groups/${id}/audit?${stringifiedParams}` : `/api/groups/${id}/audit`; }; export const getGroupPermissionAudit = async ( id: number, params?: GetGroupPermissionAuditParams, options?: RequestInit, ): Promise => { return customFetch( getGetGroupPermissionAuditUrl(id, params), { ...options, method: "GET", }, ); }; export const getGetGroupPermissionAuditQueryKey = ( id: number, params?: GetGroupPermissionAuditParams, ) => { return [`/api/groups/${id}/audit`, ...(params ? [params] : [])] as const; }; export const getGetGroupPermissionAuditQueryOptions = < TData = Awaited>, TError = ErrorType, >( id: number, params?: GetGroupPermissionAuditParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getGetGroupPermissionAuditQueryKey(id, params); const queryFn: QueryFunction< Awaited> > = ({ signal }) => getGroupPermissionAudit(id, params, { signal, ...requestOptions }); return { queryKey, queryFn, enabled: !!id, ...queryOptions, } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type GetGroupPermissionAuditQueryResult = NonNullable< Awaited> >; export type GetGroupPermissionAuditQueryError = ErrorType; /** * @summary List recent permission-change audit entries for a group (admin) */ export function useGetGroupPermissionAudit< TData = Awaited>, TError = ErrorType, >( id: number, params?: GetGroupPermissionAuditParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getGetGroupPermissionAuditQueryOptions( id, params, options, ); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * Returns permission-change audit records for the given app, newest first. Captures changes to the set of permissions required to open the app (`changeKind: app.permissions`). * @summary List recent permission-change audit entries for an app (admin) */ export const getGetAppPermissionAuditUrl = ( id: number, params?: GetAppPermissionAuditParams, ) => { const normalizedParams = new URLSearchParams(); Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? "null" : value.toString()); } }); const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 ? `/api/apps/${id}/audit?${stringifiedParams}` : `/api/apps/${id}/audit`; }; export const getAppPermissionAudit = async ( id: number, params?: GetAppPermissionAuditParams, options?: RequestInit, ): Promise => { return customFetch( getGetAppPermissionAuditUrl(id, params), { ...options, method: "GET", }, ); }; export const getGetAppPermissionAuditQueryKey = ( id: number, params?: GetAppPermissionAuditParams, ) => { return [`/api/apps/${id}/audit`, ...(params ? [params] : [])] as const; }; export const getGetAppPermissionAuditQueryOptions = < TData = Awaited>, TError = ErrorType, >( id: number, params?: GetAppPermissionAuditParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getGetAppPermissionAuditQueryKey(id, params); const queryFn: QueryFunction< Awaited> > = ({ signal }) => getAppPermissionAudit(id, params, { signal, ...requestOptions }); return { queryKey, queryFn, enabled: !!id, ...queryOptions, } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type GetAppPermissionAuditQueryResult = NonNullable< Awaited> >; export type GetAppPermissionAuditQueryError = ErrorType; /** * @summary List recent permission-change audit entries for an app (admin) */ export function useGetAppPermissionAudit< TData = Awaited>, TError = ErrorType, >( id: number, params?: GetAppPermissionAuditParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getGetAppPermissionAuditQueryOptions( id, params, options, ); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary Get home screen stats */ export const getGetHomeStatsUrl = () => { return `/api/stats/home`; }; export const getHomeStats = async ( options?: RequestInit, ): Promise => { return customFetch(getGetHomeStatsUrl(), { ...options, method: "GET", }); }; export const getGetHomeStatsQueryKey = () => { return [`/api/stats/home`] as const; }; export const getGetHomeStatsQueryOptions = < TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getGetHomeStatsQueryKey(); const queryFn: QueryFunction>> = ({ signal, }) => getHomeStats({ signal, ...requestOptions }); return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type GetHomeStatsQueryResult = NonNullable< Awaited> >; export type GetHomeStatsQueryError = ErrorType; /** * @summary Get home screen stats */ export function useGetHomeStats< TData = Awaited>, TError = ErrorType, >(options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getGetHomeStatsQueryOptions(options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary Get admin dashboard trend stats */ export const getGetAdminStatsUrl = (params?: GetAdminStatsParams) => { const normalizedParams = new URLSearchParams(); Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? "null" : value.toString()); } }); const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 ? `/api/stats/admin?${stringifiedParams}` : `/api/stats/admin`; }; export const getAdminStats = async ( params?: GetAdminStatsParams, options?: RequestInit, ): Promise => { return customFetch(getGetAdminStatsUrl(params), { ...options, method: "GET", }); }; export const getGetAdminStatsQueryKey = (params?: GetAdminStatsParams) => { return [`/api/stats/admin`, ...(params ? [params] : [])] as const; }; export const getGetAdminStatsQueryOptions = < TData = Awaited>, TError = ErrorType, >( params?: GetAdminStatsParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getGetAdminStatsQueryKey(params); const queryFn: QueryFunction>> = ({ signal, }) => getAdminStats(params, { signal, ...requestOptions }); return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type GetAdminStatsQueryResult = NonNullable< Awaited> >; export type GetAdminStatsQueryError = ErrorType; /** * @summary Get admin dashboard trend stats */ export function useGetAdminStats< TData = Awaited>, TError = ErrorType, >( params?: GetAdminStatsParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getGetAdminStatsQueryOptions(params, options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary Recent opens of a single app within the selected range */ export const getGetAdminAppOpensByAppUrl = ( appId: number, params?: GetAdminAppOpensByAppParams, ) => { const normalizedParams = new URLSearchParams(); Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? "null" : value.toString()); } }); const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 ? `/api/stats/admin/app-opens/by-app/${appId}?${stringifiedParams}` : `/api/stats/admin/app-opens/by-app/${appId}`; }; export const getAdminAppOpensByApp = async ( appId: number, params?: GetAdminAppOpensByAppParams, options?: RequestInit, ): Promise => { return customFetch( getGetAdminAppOpensByAppUrl(appId, params), { ...options, method: "GET", }, ); }; export const getGetAdminAppOpensByAppQueryKey = ( appId: number, params?: GetAdminAppOpensByAppParams, ) => { return [ `/api/stats/admin/app-opens/by-app/${appId}`, ...(params ? [params] : []), ] as const; }; export const getGetAdminAppOpensByAppQueryOptions = < TData = Awaited>, TError = ErrorType, >( appId: number, params?: GetAdminAppOpensByAppParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getGetAdminAppOpensByAppQueryKey(appId, params); const queryFn: QueryFunction< Awaited> > = ({ signal }) => getAdminAppOpensByApp(appId, params, { signal, ...requestOptions }); return { queryKey, queryFn, enabled: !!appId, ...queryOptions, } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type GetAdminAppOpensByAppQueryResult = NonNullable< Awaited> >; export type GetAdminAppOpensByAppQueryError = ErrorType; /** * @summary Recent opens of a single app within the selected range */ export function useGetAdminAppOpensByApp< TData = Awaited>, TError = ErrorType, >( appId: number, params?: GetAdminAppOpensByAppParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getGetAdminAppOpensByAppQueryOptions( appId, params, options, ); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary Recent app opens by a single user within the selected range */ export const getGetAdminAppOpensByUserUrl = ( userId: number, params?: GetAdminAppOpensByUserParams, ) => { const normalizedParams = new URLSearchParams(); Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? "null" : value.toString()); } }); const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 ? `/api/stats/admin/app-opens/by-user/${userId}?${stringifiedParams}` : `/api/stats/admin/app-opens/by-user/${userId}`; }; export const getAdminAppOpensByUser = async ( userId: number, params?: GetAdminAppOpensByUserParams, options?: RequestInit, ): Promise => { return customFetch( getGetAdminAppOpensByUserUrl(userId, params), { ...options, method: "GET", }, ); }; export const getGetAdminAppOpensByUserQueryKey = ( userId: number, params?: GetAdminAppOpensByUserParams, ) => { return [ `/api/stats/admin/app-opens/by-user/${userId}`, ...(params ? [params] : []), ] as const; }; export const getGetAdminAppOpensByUserQueryOptions = < TData = Awaited>, TError = ErrorType, >( userId: number, params?: GetAdminAppOpensByUserParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getGetAdminAppOpensByUserQueryKey(userId, params); const queryFn: QueryFunction< Awaited> > = ({ signal }) => getAdminAppOpensByUser(userId, params, { signal, ...requestOptions }); return { queryKey, queryFn, enabled: !!userId, ...queryOptions, } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type GetAdminAppOpensByUserQueryResult = NonNullable< Awaited> >; export type GetAdminAppOpensByUserQueryError = ErrorType; /** * @summary Recent app opens by a single user within the selected range */ export function useGetAdminAppOpensByUser< TData = Awaited>, TError = ErrorType, >( userId: number, params?: GetAdminAppOpensByUserParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getGetAdminAppOpensByUserQueryOptions( userId, params, options, ); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * Returns recent entries from the audit log, newest first. Admin only. Filter by action (exact match) and/or a date range (inclusive). * @summary List audit log entries (admin) */ export const getListAuditLogsUrl = (params?: ListAuditLogsParams) => { const normalizedParams = new URLSearchParams(); Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? "null" : value.toString()); } }); const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 ? `/api/admin/audit-logs?${stringifiedParams}` : `/api/admin/audit-logs`; }; export const listAuditLogs = async ( params?: ListAuditLogsParams, options?: RequestInit, ): Promise => { return customFetch(getListAuditLogsUrl(params), { ...options, method: "GET", }); }; export const getListAuditLogsQueryKey = (params?: ListAuditLogsParams) => { return [`/api/admin/audit-logs`, ...(params ? [params] : [])] as const; }; export const getListAuditLogsQueryOptions = < TData = Awaited>, TError = ErrorType, >( params?: ListAuditLogsParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getListAuditLogsQueryKey(params); const queryFn: QueryFunction>> = ({ signal, }) => listAuditLogs(params, { signal, ...requestOptions }); return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type ListAuditLogsQueryResult = NonNullable< Awaited> >; export type ListAuditLogsQueryError = ErrorType; /** * @summary List audit log entries (admin) */ export function useListAuditLogs< TData = Awaited>, TError = ErrorType, >( params?: ListAuditLogsParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getListAuditLogsQueryOptions(params, options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * Streams the filtered audit log as a CSV download. Honors the same `action`, `forcedOnly`, `from`, and `to` filters as the list endpoint. Columns: action, actor_username, target_type, target_id, created_at, metadata. Capped at 50,000 rows per export to bound response size. * @summary Export filtered audit log as CSV (admin) */ export const getExportAuditLogsCsvUrl = (params?: ExportAuditLogsCsvParams) => { const normalizedParams = new URLSearchParams(); Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? "null" : value.toString()); } }); const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 ? `/api/admin/audit-logs/export?${stringifiedParams}` : `/api/admin/audit-logs/export`; }; export const exportAuditLogsCsv = async ( params?: ExportAuditLogsCsvParams, options?: RequestInit, ): Promise => { return customFetch(getExportAuditLogsCsvUrl(params), { ...options, method: "GET", }); }; export const getExportAuditLogsCsvQueryKey = ( params?: ExportAuditLogsCsvParams, ) => { return [`/api/admin/audit-logs/export`, ...(params ? [params] : [])] as const; }; export const getExportAuditLogsCsvQueryOptions = < TData = Awaited>, TError = ErrorType, >( params?: ExportAuditLogsCsvParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getExportAuditLogsCsvQueryKey(params); const queryFn: QueryFunction< Awaited> > = ({ signal }) => exportAuditLogsCsv(params, { signal, ...requestOptions }); return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type ExportAuditLogsCsvQueryResult = NonNullable< Awaited> >; export type ExportAuditLogsCsvQueryError = ErrorType; /** * @summary Export filtered audit log as CSV (admin) */ export function useExportAuditLogsCsv< TData = Awaited>, TError = ErrorType, >( params?: ExportAuditLogsCsvParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getExportAuditLogsCsvQueryOptions(params, options); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * Returns the groups behind the inline " groups" badge on the admin Apps row, paginated. Admin only. * @summary List groups granting access to an app */ export const getGetAdminAppDependentGroupsUrl = ( id: number, params?: GetAdminAppDependentGroupsParams, ) => { const normalizedParams = new URLSearchParams(); Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? "null" : value.toString()); } }); const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 ? `/api/admin/apps/${id}/dependents/groups?${stringifiedParams}` : `/api/admin/apps/${id}/dependents/groups`; }; export const getAdminAppDependentGroups = async ( id: number, params?: GetAdminAppDependentGroupsParams, options?: RequestInit, ): Promise => { return customFetch( getGetAdminAppDependentGroupsUrl(id, params), { ...options, method: "GET", }, ); }; export const getGetAdminAppDependentGroupsQueryKey = ( id: number, params?: GetAdminAppDependentGroupsParams, ) => { return [ `/api/admin/apps/${id}/dependents/groups`, ...(params ? [params] : []), ] as const; }; export const getGetAdminAppDependentGroupsQueryOptions = < TData = Awaited>, TError = ErrorType, >( id: number, params?: GetAdminAppDependentGroupsParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getGetAdminAppDependentGroupsQueryKey(id, params); const queryFn: QueryFunction< Awaited> > = ({ signal }) => getAdminAppDependentGroups(id, params, { signal, ...requestOptions }); return { queryKey, queryFn, enabled: !!id, ...queryOptions, } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type GetAdminAppDependentGroupsQueryResult = NonNullable< Awaited> >; export type GetAdminAppDependentGroupsQueryError = ErrorType; /** * @summary List groups granting access to an app */ export function useGetAdminAppDependentGroups< TData = Awaited>, TError = ErrorType, >( id: number, params?: GetAdminAppDependentGroupsParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getGetAdminAppDependentGroupsQueryOptions( id, params, options, ); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * Returns the legacy permissions gating an app, with the role names currently holding each permission, paginated. Admin only. * @summary List permission restrictions on an app */ export const getGetAdminAppDependentRestrictionsUrl = ( id: number, params?: GetAdminAppDependentRestrictionsParams, ) => { const normalizedParams = new URLSearchParams(); Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? "null" : value.toString()); } }); const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 ? `/api/admin/apps/${id}/dependents/restrictions?${stringifiedParams}` : `/api/admin/apps/${id}/dependents/restrictions`; }; export const getAdminAppDependentRestrictions = async ( id: number, params?: GetAdminAppDependentRestrictionsParams, options?: RequestInit, ): Promise => { return customFetch( getGetAdminAppDependentRestrictionsUrl(id, params), { ...options, method: "GET", }, ); }; export const getGetAdminAppDependentRestrictionsQueryKey = ( id: number, params?: GetAdminAppDependentRestrictionsParams, ) => { return [ `/api/admin/apps/${id}/dependents/restrictions`, ...(params ? [params] : []), ] as const; }; export const getGetAdminAppDependentRestrictionsQueryOptions = < TData = Awaited>, TError = ErrorType, >( id: number, params?: GetAdminAppDependentRestrictionsParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getGetAdminAppDependentRestrictionsQueryKey(id, params); const queryFn: QueryFunction< Awaited> > = ({ signal }) => getAdminAppDependentRestrictions(id, params, { signal, ...requestOptions }); return { queryKey, queryFn, enabled: !!id, ...queryOptions, } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type GetAdminAppDependentRestrictionsQueryResult = NonNullable< Awaited> >; export type GetAdminAppDependentRestrictionsQueryError = ErrorType; /** * @summary List permission restrictions on an app */ export function useGetAdminAppDependentRestrictions< TData = Awaited>, TError = ErrorType, >( id: number, params?: GetAdminAppDependentRestrictionsParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getGetAdminAppDependentRestrictionsQueryOptions( id, params, options, ); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * Returns every recorded open for the app newest-first, paginated. Unlike /stats/admin/app-opens/by-app/{appId}, this endpoint does not apply a date range so the badge total and the list match. * @summary List recent opens for an app (no time filter) */ export const getGetAdminAppDependentOpensUrl = ( id: number, params?: GetAdminAppDependentOpensParams, ) => { const normalizedParams = new URLSearchParams(); Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? "null" : value.toString()); } }); const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 ? `/api/admin/apps/${id}/dependents/opens?${stringifiedParams}` : `/api/admin/apps/${id}/dependents/opens`; }; export const getAdminAppDependentOpens = async ( id: number, params?: GetAdminAppDependentOpensParams, options?: RequestInit, ): Promise => { return customFetch( getGetAdminAppDependentOpensUrl(id, params), { ...options, method: "GET", }, ); }; export const getGetAdminAppDependentOpensQueryKey = ( id: number, params?: GetAdminAppDependentOpensParams, ) => { return [ `/api/admin/apps/${id}/dependents/opens`, ...(params ? [params] : []), ] as const; }; export const getGetAdminAppDependentOpensQueryOptions = < TData = Awaited>, TError = ErrorType, >( id: number, params?: GetAdminAppDependentOpensParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getGetAdminAppDependentOpensQueryKey(id, params); const queryFn: QueryFunction< Awaited> > = ({ signal }) => getAdminAppDependentOpens(id, params, { signal, ...requestOptions }); return { queryKey, queryFn, enabled: !!id, ...queryOptions, } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type GetAdminAppDependentOpensQueryResult = NonNullable< Awaited> >; export type GetAdminAppDependentOpensQueryError = ErrorType; /** * @summary List recent opens for an app (no time filter) */ export function useGetAdminAppDependentOpens< TData = Awaited>, TError = ErrorType, >( id: number, params?: GetAdminAppDependentOpensParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getGetAdminAppDependentOpensQueryOptions( id, params, options, ); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * Returns the service orders behind the inline " orders" badge on the admin Services row, paginated, newest-first. Admin only. * @summary List orders placed against a service */ export const getGetAdminServiceDependentOrdersUrl = ( id: number, params?: GetAdminServiceDependentOrdersParams, ) => { const normalizedParams = new URLSearchParams(); Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? "null" : value.toString()); } }); const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 ? `/api/admin/services/${id}/dependents/orders?${stringifiedParams}` : `/api/admin/services/${id}/dependents/orders`; }; export const getAdminServiceDependentOrders = async ( id: number, params?: GetAdminServiceDependentOrdersParams, options?: RequestInit, ): Promise => { return customFetch( getGetAdminServiceDependentOrdersUrl(id, params), { ...options, method: "GET", }, ); }; export const getGetAdminServiceDependentOrdersQueryKey = ( id: number, params?: GetAdminServiceDependentOrdersParams, ) => { return [ `/api/admin/services/${id}/dependents/orders`, ...(params ? [params] : []), ] as const; }; export const getGetAdminServiceDependentOrdersQueryOptions = < TData = Awaited>, TError = ErrorType, >( id: number, params?: GetAdminServiceDependentOrdersParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getGetAdminServiceDependentOrdersQueryKey(id, params); const queryFn: QueryFunction< Awaited> > = ({ signal }) => getAdminServiceDependentOrders(id, params, { signal, ...requestOptions }); return { queryKey, queryFn, enabled: !!id, ...queryOptions, } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type GetAdminServiceDependentOrdersQueryResult = NonNullable< Awaited> >; export type GetAdminServiceDependentOrdersQueryError = ErrorType; /** * @summary List orders placed against a service */ export function useGetAdminServiceDependentOrders< TData = Awaited>, TError = ErrorType, >( id: number, params?: GetAdminServiceDependentOrdersParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getGetAdminServiceDependentOrdersQueryOptions( id, params, options, ); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary List notes owned by a user */ export const getGetAdminUserDependentNotesUrl = ( id: number, params?: GetAdminUserDependentNotesParams, ) => { const normalizedParams = new URLSearchParams(); Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? "null" : value.toString()); } }); const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 ? `/api/admin/users/${id}/dependents/notes?${stringifiedParams}` : `/api/admin/users/${id}/dependents/notes`; }; export const getAdminUserDependentNotes = async ( id: number, params?: GetAdminUserDependentNotesParams, options?: RequestInit, ): Promise => { return customFetch( getGetAdminUserDependentNotesUrl(id, params), { ...options, method: "GET", }, ); }; export const getGetAdminUserDependentNotesQueryKey = ( id: number, params?: GetAdminUserDependentNotesParams, ) => { return [ `/api/admin/users/${id}/dependents/notes`, ...(params ? [params] : []), ] as const; }; export const getGetAdminUserDependentNotesQueryOptions = < TData = Awaited>, TError = ErrorType, >( id: number, params?: GetAdminUserDependentNotesParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getGetAdminUserDependentNotesQueryKey(id, params); const queryFn: QueryFunction< Awaited> > = ({ signal }) => getAdminUserDependentNotes(id, params, { signal, ...requestOptions }); return { queryKey, queryFn, enabled: !!id, ...queryOptions, } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type GetAdminUserDependentNotesQueryResult = NonNullable< Awaited> >; export type GetAdminUserDependentNotesQueryError = ErrorType; /** * @summary List notes owned by a user */ export function useGetAdminUserDependentNotes< TData = Awaited>, TError = ErrorType, >( id: number, params?: GetAdminUserDependentNotesParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getGetAdminUserDependentNotesQueryOptions( id, params, options, ); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary List service orders placed by a user */ export const getGetAdminUserDependentOrdersUrl = ( id: number, params?: GetAdminUserDependentOrdersParams, ) => { const normalizedParams = new URLSearchParams(); Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? "null" : value.toString()); } }); const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 ? `/api/admin/users/${id}/dependents/orders?${stringifiedParams}` : `/api/admin/users/${id}/dependents/orders`; }; export const getAdminUserDependentOrders = async ( id: number, params?: GetAdminUserDependentOrdersParams, options?: RequestInit, ): Promise => { return customFetch( getGetAdminUserDependentOrdersUrl(id, params), { ...options, method: "GET", }, ); }; export const getGetAdminUserDependentOrdersQueryKey = ( id: number, params?: GetAdminUserDependentOrdersParams, ) => { return [ `/api/admin/users/${id}/dependents/orders`, ...(params ? [params] : []), ] as const; }; export const getGetAdminUserDependentOrdersQueryOptions = < TData = Awaited>, TError = ErrorType, >( id: number, params?: GetAdminUserDependentOrdersParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getGetAdminUserDependentOrdersQueryKey(id, params); const queryFn: QueryFunction< Awaited> > = ({ signal }) => getAdminUserDependentOrders(id, params, { signal, ...requestOptions }); return { queryKey, queryFn, enabled: !!id, ...queryOptions, } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type GetAdminUserDependentOrdersQueryResult = NonNullable< Awaited> >; export type GetAdminUserDependentOrdersQueryError = ErrorType; /** * @summary List service orders placed by a user */ export function useGetAdminUserDependentOrders< TData = Awaited>, TError = ErrorType, >( id: number, params?: GetAdminUserDependentOrdersParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getGetAdminUserDependentOrdersQueryOptions( id, params, options, ); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary List conversations created by a user */ export const getGetAdminUserDependentConversationsUrl = ( id: number, params?: GetAdminUserDependentConversationsParams, ) => { const normalizedParams = new URLSearchParams(); Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? "null" : value.toString()); } }); const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 ? `/api/admin/users/${id}/dependents/conversations?${stringifiedParams}` : `/api/admin/users/${id}/dependents/conversations`; }; export const getAdminUserDependentConversations = async ( id: number, params?: GetAdminUserDependentConversationsParams, options?: RequestInit, ): Promise => { return customFetch( getGetAdminUserDependentConversationsUrl(id, params), { ...options, method: "GET", }, ); }; export const getGetAdminUserDependentConversationsQueryKey = ( id: number, params?: GetAdminUserDependentConversationsParams, ) => { return [ `/api/admin/users/${id}/dependents/conversations`, ...(params ? [params] : []), ] as const; }; export const getGetAdminUserDependentConversationsQueryOptions = < TData = Awaited>, TError = ErrorType, >( id: number, params?: GetAdminUserDependentConversationsParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getGetAdminUserDependentConversationsQueryKey(id, params); const queryFn: QueryFunction< Awaited> > = ({ signal }) => getAdminUserDependentConversations(id, params, { signal, ...requestOptions, }); return { queryKey, queryFn, enabled: !!id, ...queryOptions, } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type GetAdminUserDependentConversationsQueryResult = NonNullable< Awaited> >; export type GetAdminUserDependentConversationsQueryError = ErrorType; /** * @summary List conversations created by a user */ export function useGetAdminUserDependentConversations< TData = Awaited>, TError = ErrorType, >( id: number, params?: GetAdminUserDependentConversationsParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getGetAdminUserDependentConversationsQueryOptions( id, params, options, ); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; } /** * @summary List messages sent by a user */ export const getGetAdminUserDependentMessagesUrl = ( id: number, params?: GetAdminUserDependentMessagesParams, ) => { const normalizedParams = new URLSearchParams(); Object.entries(params || {}).forEach(([key, value]) => { if (value !== undefined) { normalizedParams.append(key, value === null ? "null" : value.toString()); } }); const stringifiedParams = normalizedParams.toString(); return stringifiedParams.length > 0 ? `/api/admin/users/${id}/dependents/messages?${stringifiedParams}` : `/api/admin/users/${id}/dependents/messages`; }; export const getAdminUserDependentMessages = async ( id: number, params?: GetAdminUserDependentMessagesParams, options?: RequestInit, ): Promise => { return customFetch( getGetAdminUserDependentMessagesUrl(id, params), { ...options, method: "GET", }, ); }; export const getGetAdminUserDependentMessagesQueryKey = ( id: number, params?: GetAdminUserDependentMessagesParams, ) => { return [ `/api/admin/users/${id}/dependents/messages`, ...(params ? [params] : []), ] as const; }; export const getGetAdminUserDependentMessagesQueryOptions = < TData = Awaited>, TError = ErrorType, >( id: number, params?: GetAdminUserDependentMessagesParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ) => { const { query: queryOptions, request: requestOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getGetAdminUserDependentMessagesQueryKey(id, params); const queryFn: QueryFunction< Awaited> > = ({ signal }) => getAdminUserDependentMessages(id, params, { signal, ...requestOptions }); return { queryKey, queryFn, enabled: !!id, ...queryOptions, } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: QueryKey }; }; export type GetAdminUserDependentMessagesQueryResult = NonNullable< Awaited> >; export type GetAdminUserDependentMessagesQueryError = ErrorType; /** * @summary List messages sent by a user */ export function useGetAdminUserDependentMessages< TData = Awaited>, TError = ErrorType, >( id: number, params?: GetAdminUserDependentMessagesParams, options?: { query?: UseQueryOptions< Awaited>, TError, TData >; request?: SecondParameter; }, ): UseQueryResult & { queryKey: QueryKey } { const queryOptions = getGetAdminUserDependentMessagesQueryOptions( id, params, options, ); const query = useQuery(queryOptions) as UseQueryResult & { queryKey: QueryKey; }; return { ...query, queryKey: queryOptions.queryKey }; }