| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 | # ===============================================# AUTHENTICATION# ===============================================extend type Query {  apiKeys: [AuthenticationApiKey]  apiState: Boolean  authStrategies: [AuthenticationStrategy]  authActiveStrategies(    enabledOnly: Boolean  ): [AuthenticationActiveStrategy]  authSiteStrategies(    siteId: UUID!    visibleOnly: Boolean  ): [AuthenticationSiteStrategy]}extend type Mutation {  createApiKey(    name: String!    expiration: String!    groups: [UUID]!  ): AuthenticationCreateApiKeyResponse  login(    username: String!    password: String!    strategyId: UUID!    siteId: UUID!  ): AuthenticationAuthResponse @rateLimit(limit: 5, duration: 60)  loginTFA(    continuationToken: String!    securityCode: String!    strategyId: UUID!    siteId: UUID!    setup: Boolean  ): AuthenticationAuthResponse @rateLimit(limit: 5, duration: 60)  setupTFA(    strategyId: UUID!    siteId: UUID!  ): AuthenticationSetupTFAResponse  deactivateTFA(    strategyId: UUID!  ): DefaultResponse  setupPasskey(    siteId: UUID!  ): AuthenticationSetupPasskeyResponse  finalizePasskey(    registrationResponse: JSON!    name: String!  ): DefaultResponse  deactivatePasskey(    id: UUID!  ): DefaultResponse  authenticatePasskeyGenerate(    email: String!    siteId: UUID!  ): AuthenticationPasskeyResponse @rateLimit(limit: 5, duration: 60)  authenticatePasskeyVerify(    authResponse: JSON!  ): AuthenticationAuthResponse @rateLimit(limit: 5, duration: 60)  changePassword(    continuationToken: String    currentPassword: String    newPassword: String!    strategyId: UUID!    siteId: UUID!  ): AuthenticationAuthResponse @rateLimit(limit: 5, duration: 60)  forgotPassword(    email: String!  ): DefaultResponse @rateLimit(limit: 3, duration: 60)  register(    email: String!    password: String!    name: String!  ): AuthenticationAuthResponse @rateLimit(limit: 5, duration: 60)  refreshToken(    token: String!  ): AuthenticationTokenResponse @rateLimit(limit: 30, duration: 60)  revokeApiKey(    id: UUID!  ): DefaultResponse  setApiState(    enabled: Boolean!  ): DefaultResponse  updateAuthStrategies(    strategies: [AuthenticationStrategyInput]!  ): DefaultResponse  regenerateCertificates: DefaultResponse  resetGuestUser: DefaultResponse}# -----------------------------------------------# TYPES# -----------------------------------------------type AuthenticationStrategy {  key: String  props: JSON  refs: JSON  title: String  description: String  isAvailable: Boolean  useForm: Boolean  usernameType: String  logo: String  color: String  vendor: String  website: String  icon: String}type AuthenticationActiveStrategy {  id: UUID  strategy: AuthenticationStrategy  displayName: String  isEnabled: Boolean  config: JSON  registration: Boolean  allowedEmailRegex: String  autoEnrollGroups: [UUID]}type AuthenticationSiteStrategy {  id: UUID  activeStrategy: AuthenticationActiveStrategy  isVisible: Boolean}type AuthenticationAuthResponse {  operation: Operation  jwt: String  nextAction: AuthenticationNextAction  continuationToken: String  redirect: String  tfaQRImage: String}type AuthenticationTokenResponse {  operation: Operation  jwt: String}type AuthenticationSetupTFAResponse {  operation: Operation  continuationToken: String  tfaQRImage: String}type AuthenticationSetupPasskeyResponse {  operation: Operation  registrationOptions: JSON}type AuthenticationPasskeyResponse {  operation: Operation  authOptions: JSON}input AuthenticationStrategyInput {  key: String!  strategyKey: String!  config: JSON!  displayName: String!  order: Int!  isEnabled: Boolean!  registration: Boolean!  allowedEmailRegex: String!  autoEnrollGroups: [UUID]!}type AuthenticationApiKey {  id: UUID  name: String  keyShort: String  expiration: Date  createdAt: Date  updatedAt: Date  isRevoked: Boolean}type AuthenticationCreateApiKeyResponse {  operation: Operation  key: String}enum AuthenticationNextAction {  changePassword  setupTfa  provideTfa  redirect}
 |