| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 | # ===============================================# USERS# ===============================================extend type Query {  users (    page: Int    pageSize: Int    orderBy: UserOrderBy    orderByDirection: OrderByDirection    # Filter by name / email    filter: String  ): [UserMinimal]  userById(    id: UUID!  ): User  userDefaults: UserDefaults  lastLogins: [UserLastLogin]  userPermissions: [String]  userPermissionsAtPath(    siteId: UUID!    path: String!  ): [String]}extend type Mutation {  createUser(    email: String!    name: String!    password: String!    groups: [UUID]!    mustChangePassword: Boolean!    sendWelcomeEmail: Boolean!  ): UserResponse  updateUser(    id: UUID!    patch: UserUpdateInput!  ): DefaultResponse  deleteUser(    id: UUID!    replaceId: UUID!  ): DefaultResponse  verifyUser(    id: UUID!  ): DefaultResponse  activateUser(    id: UUID!  ): DefaultResponse  deactivateUser(    id: UUID!  ): DefaultResponse  enableUserTFA(    id: UUID!  ): DefaultResponse  disableUserTFA(    id: UUID!  ): DefaultResponse  changeUserPassword(    id: UUID!    newPassword: String!    mustChangePassword: Boolean  ): DefaultResponse  updateProfile(    name: String    location: String    jobTitle: String    pronouns: String    timezone: String    dateFormat: String    timeFormat: String    appearance: UserSiteAppearance    cvd: UserCvdChoices  ): DefaultResponse  uploadUserAvatar(    id: UUID!    image: Upload!  ): DefaultResponse  clearUserAvatar(    id: UUID!  ): DefaultResponse  updateUserDefaults(    timezone: String!    dateFormat: String!    timeFormat: String!  ): DefaultResponse}# -----------------------------------------------# TYPES# -----------------------------------------------type UserResponse {  operation: Operation  user: User}type UserLastLogin {  id: UUID  name: String  lastLoginAt: Date}type UserMinimal {  id: UUID  name: String  email: String  isSystem: Boolean  isActive: Boolean  createdAt: Date  lastLoginAt: Date}type User {  id: UUID  name: String  email: String  auth: [UserAuth]  hasAvatar: Boolean  isSystem: Boolean  isActive: Boolean  isVerified: Boolean  meta: JSON  prefs: JSON  createdAt: Date  updatedAt: Date  lastLoginAt: Date  groups: [Group]}type UserAuth {  authId: UUID  authName: String  strategyKey: String  strategyIcon: String  config: JSON}type UserDefaults {  timezone: String  dateFormat: String  timeFormat: String}type UserTokenResponse {  operation: Operation  jwt: String}enum UserOrderBy {  id  email  name  createdAt  updatedAt  lastLoginAt}enum UserSiteAppearance {  site  light  dark}enum UserCvdChoices {  none  protanopia  deuteranopia  tritanopia}input UserUpdateInput {  email: String  name: String  groups: [UUID!]  isActive: Boolean  isVerified: Boolean  meta: JSON  prefs: JSON}
 |