import { AuthupError } from "@authup/errors";
import { Container, ContainerOptions } from "validup";
import { DecisionStrategy, ObjectLiteral } from "@authup/kit";
import { JWKType, JWTAlgorithm, OAuth2SubKind } from "@authup/specs";

//#region src/constants.d.ts
declare enum ValidatorGroup {
  CREATE = "create",
  UPDATE = "update"
}
//#endregion
//#region src/domains/realm/constants.d.ts
declare const REALM_MASTER_NAME = "master";
declare const REALM_NAME_REGEX: RegExp;
//#endregion
//#region src/domains/realm/entity.d.ts
interface Realm {
  id: string;
  name: string;
  display_name: string | null;
  description: string | null;
  built_in: boolean;
  created_at: string;
  updated_at: string;
}
//#endregion
//#region src/helpers/name-valid.d.ts
type NameValidOptions = {
  throwOnFailure?: boolean;
};
declare function isNameValid(input: string, options?: NameValidOptions): boolean;
//#endregion
//#region src/domains/realm/helpers.d.ts
declare function isRealmNameValid(name: string, options?: NameValidOptions): boolean;
//#endregion
//#region src/domains/realm/validator.d.ts
declare class RealmValidator extends Container<Realm> {
  protected initialize(): void;
}
//#endregion
//#region src/domains/key/type.d.ts
interface Key {
  id: string;
  /**
   * OCT, RSA or EC
   */
  type: `${JWKType}`;
  /**
   * Algorithm for signing and verifying
   */
  signature_algorithm: `${JWTAlgorithm}`;
  /**
   * Usage priority.
   */
  priority: number;
  /**
   * aka private key
   */
  decryption_key?: string | null;
  /**
   * aka public key
   */
  encryption_key: string | null;
  created_at: Date | string;
  updated_at: Date | string;
  realm_id: Realm['id'];
  realm: Realm;
}
//#endregion
//#region src/domains/client/entity.d.ts
interface Client {
  id: string;
  active: boolean;
  built_in: boolean;
  is_confidential: boolean;
  name: string;
  display_name: string | null;
  description: string | null;
  secret: string | null;
  secret_hashed: boolean;
  secret_encrypted: boolean;
  redirect_uri: string | null;
  grant_types: string | null;
  scope: string | null;
  /**
   * Default redirect URL.
   */
  base_url: string | null;
  /**
   * URL prepended to relative URLs.
   */
  root_url: string | null;
  created_at: string;
  updated_at: string;
  realm_id: Realm['id'];
  realm: Realm;
}
//#endregion
//#region src/domains/client/error.d.ts
declare class ClientError extends AuthupError {
  static credentialsInvalid(): ClientError;
  static invalid(): ClientError;
  static notFound(): ClientError;
  static inactive(): ClientError;
}
//#endregion
//#region src/domains/client/helpers.d.ts
declare function isClientNameValid(name: string, options?: NameValidOptions): boolean;
//#endregion
//#region src/domains/client/validator.d.ts
declare class ClientValidator extends Container<Client> {
  protected initialize(): void;
}
//#endregion
//#region src/domains/authorization-code/entity.d.ts
interface OAuth2AuthorizationCode {
  id: string;
  code_challenge?: string | null;
  code_challenge_method?: string | null;
  scope?: string | null;
  redirect_uri?: string | null;
  id_token?: string | null;
  nonce?: string | null;
  client_id?: Client['id'] | null;
  sub: string;
  sub_kind: `${OAuth2SubKind}`;
  realm_id: Realm['id'];
  realm_name: Realm['name'];
}
type OAuth2AuthorizationCodeRequest = {
  response_type: string;
  client_id?: string;
  realm_id?: string;
  redirect_uri?: string;
  scope?: string;
  state?: string;
  nonce?: string;
  code_challenge?: string;
  code_challenge_method?: string;
};
//#endregion
//#region src/domains/attempt-activation/entity.d.ts
interface AttemptActivation {
  id: string;
  ip_address: string;
  user_agent: string;
  token: string | null;
  created_at: Date | string;
  updated_at: Date | string;
}
//#endregion
//#region src/domains/user/entity.d.ts
interface User {
  id: string;
  name: string;
  name_locked: boolean;
  first_name: string | null;
  last_name: string | null;
  display_name: string | null;
  email: string;
  password: string | null;
  avatar: string | null;
  cover: string | null;
  reset_hash: string | null;
  reset_at: string | null;
  reset_expires: string | null;
  status: string | null;
  status_message: string | null;
  active: boolean;
  activate_hash: string | null;
  created_at: Date;
  updated_at: Date;
  client_id: Client['id'] | null;
  client: Client | null;
  realm_id: Realm['id'];
  realm: Realm;
  [key: string]: any;
}
//#endregion
//#region src/domains/user/error.d.ts
declare class UserError extends AuthupError {
  static credentialsInvalid(): UserError;
  static notFound(): UserError;
  static inactive(): UserError;
}
//#endregion
//#region src/domains/user/utils.d.ts
declare function isUserNameValid(input: string, options?: NameValidOptions): boolean;
declare function isValidUserEmail(input: string): boolean;
declare function buildUserFakeEmail(input: string): string;
declare function isUserFakeEmail(input: string): boolean;
//#endregion
//#region src/domains/user/validator.d.ts
declare class UserValidator extends Container<User> {
  protected initialize(): void;
}
//#endregion
//#region src/domains/attempt-login/entity.d.ts
interface AttemptLogin {
  id: string;
  ip_address: string;
  user_agent: string;
  email: string;
  success: boolean;
  user: User;
  user_id: User['id'];
  created_at: Date | string;
  updated_at: Date | string;
}
//#endregion
//#region src/domains/attempt-reset/entity.d.ts
interface AttemptReset {
  id: string;
  ip_address: string;
  user_agent: string;
  email: string;
  token: string | null;
  created_at: Date | string;
  updated_at: Date | string;
}
//#endregion
//#region src/domains/role/constants.d.ts
declare const ROLE_ADMIN_NAME = "admin";
declare const ROLE_REALM_ADMIN_NAME = "realm_admin";
//#endregion
//#region src/domains/role/entity.d.ts
interface Role {
  id: string;
  built_in: boolean;
  name: string;
  display_name: string | null;
  target: string | null;
  description: string | null;
  client_id: Client['id'] | null;
  client: Client | null;
  realm_id: Realm['id'] | null;
  realm: Realm | null;
  created_at: string;
  updated_at: string;
}
//#endregion
//#region src/domains/role/utils.d.ts
declare function isRoleNameValid(name: string, options?: NameValidOptions): boolean;
//#endregion
//#region src/domains/role/validator.d.ts
declare class RoleValidator extends Container<Role> {
  protected initialize(): void;
}
//#endregion
//#region src/domains/client-role/entity.d.ts
interface ClientRole {
  id: string;
  client_id: string;
  role_id: string;
  role: Role;
  role_realm_id: Realm['id'] | null;
  role_realm: Realm | null;
  client: Client;
  client_realm_id: Realm['id'] | null;
  client_realm: Realm | null;
  created_at: string;
  updated_at: string;
}
//#endregion
//#region src/domains/client-role/validator.d.ts
declare class ClientRoleValidator extends Container<ClientRole> {
  protected initialize(): void;
}
//#endregion
//#region src/domains/permission/constants.d.ts
declare enum PermissionName {
  CLIENT_CREATE = "client_create",
  CLIENT_DELETE = "client_delete",
  CLIENT_UPDATE = "client_update",
  CLIENT_READ = "client_read",
  CLIENT_SELF_MANAGE = "client_self_manage",
  CLIENT_PERMISSION_CREATE = "client_permission_create",
  CLIENT_PERMISSION_DELETE = "client_permission_delete",
  CLIENT_PERMISSION_READ = "client_permission_read",
  CLIENT_PERMISSION_UPDATE = "client_permission_update",
  CLIENT_ROLE_CREATE = "client_role_create",
  CLIENT_ROLE_DELETE = "client_role_delete",
  CLIENT_ROLE_UPDATE = "client_role_update",
  CLIENT_ROLE_READ = "client_role_read",
  CLIENT_SCOPE_CREATE = "client_scope_create",
  CLIENT_SCOPE_DELETE = "client_scope_delete",
  CLIENT_SCOPE_READ = "client_scope_read",
  IDENTITY_PROVIDER_CREATE = "identity_provider_create",
  IDENTITY_PROVIDER_DELETE = "identity_provider_delete",
  IDENTITY_PROVIDER_UPDATE = "identity_provider_update",
  IDENTITY_PROVIDER_READ = "identity_provider_read",
  IDENTITY_PROVIDER_ROLE_CREATE = "identity_provider_role_create",
  IDENTITY_PROVIDER_ROLE_DELETE = "identity_provider_role_delete",
  IDENTITY_PROVIDER_ROLE_UPDATE = "identity_provider_role_update",
  IDENTITY_PROVIDER_ROLE_READ = "identity_provider_role_read",
  PERMISSION_CREATE = "permission_create",
  PERMISSION_DELETE = "permission_delete",
  PERMISSION_UPDATE = "permission_update",
  PERMISSION_READ = "permission_read",
  REALM_CREATE = "realm_create",
  REALM_DELETE = "realm_delete",
  REALM_UPDATE = "realm_update",
  REALM_READ = "realm_read",
  ROBOT_CREATE = "robot_create",
  ROBOT_DELETE = "robot_delete",
  ROBOT_UPDATE = "robot_update",
  ROBOT_READ = "robot_read",
  ROBOT_SELF_MANAGE = "robot_self_manage",
  ROBOT_PERMISSION_CREATE = "robot_permission_create",
  ROBOT_PERMISSION_DELETE = "robot_permission_delete",
  ROBOT_PERMISSION_READ = "robot_permission_read",
  ROBOT_PERMISSION_UPDATE = "robot_permission_update",
  ROBOT_ROLE_CREATE = "robot_role_create",
  ROBOT_ROLE_DELETE = "robot_role_delete",
  ROBOT_ROLE_UPDATE = "robot_role_update",
  ROBOT_ROLE_READ = "robot_role_read",
  ROLE_CREATE = "role_create",
  ROLE_DELETE = "role_delete",
  ROLE_UPDATE = "role_update",
  ROLE_READ = "role_read",
  ROLE_PERMISSION_CREATE = "role_permission_create",
  ROLE_PERMISSION_DELETE = "role_permission_delete",
  ROLE_PERMISSION_READ = "role_permission_read",
  ROLE_PERMISSION_UPDATE = "role_permission_update",
  SCOPE_CREATE = "scope_create",
  SCOPE_DELETE = "scope_delete",
  SCOPE_UPDATE = "scope_update",
  SCOPE_READ = "scope_read",
  USER_CREATE = "user_create",
  USER_DELETE = "user_delete",
  USER_UPDATE = "user_update",
  USER_READ = "user_read",
  USER_SELF_MANAGE = "user_self_manage",
  USER_PERMISSION_CREATE = "user_permission_create",
  USER_PERMISSION_DELETE = "user_permission_delete",
  USER_PERMISSION_READ = "user_permission_read",
  USER_PERMISSION_UPDATE = "user_permission_update",
  USER_ROLE_CREATE = "user_role_create",
  USER_ROLE_DELETE = "user_role_delete",
  USER_ROLE_UPDATE = "user_role_update",
  USER_ROLE_READ = "user_role_read"
}
//#endregion
//#region src/domains/policy/entity.d.ts
type PolicyWithType<R extends Record<string, any> = Record<string, any>, T = string> = R & {
  type: T;
};
interface Policy {
  id: string;
  built_in: boolean;
  type: string;
  name: string;
  display_name: string | null;
  description: string | null;
  invert: boolean;
  children: PolicyWithType<Policy>[];
  parent_id: Policy['id'] | null;
  parent: PolicyWithType<Policy> | null;
  realm_id: Realm['id'] | null;
  realm: Realm | null;
  created_at: string;
  updated_at: string;
}
//#endregion
//#region src/domains/policy/helpers.d.ts
declare function isPolicyNameValid(name: string, options?: NameValidOptions): boolean;
declare function isPolicy(input: Record<string, any>): input is Policy;
//#endregion
//#region src/domains/policy/validator.d.ts
declare class PolicyValidator extends Container<Policy> {
  protected initialize(): void;
}
//#endregion
//#region src/domains/permission/entity.d.ts
interface PermissionRelation {
  policy_id: Policy['id'] | null;
  policy: Policy | null;
  permission_id: Permission['id'];
  permission: Permission;
  permission_realm_id: Realm['id'] | null;
  permission_realm: Realm | null;
}
interface Permission {
  id: string;
  built_in: boolean;
  name: string;
  display_name: string | null;
  description: string | null;
  decision_strategy: `${DecisionStrategy}` | null;
  client_id: Client['id'] | null;
  client: Client | null;
  realm_id: Realm['id'] | null;
  realm: Realm | null;
  created_at: string;
  updated_at: string;
}
//#endregion
//#region src/domains/permission/helpers.d.ts
declare function isPermissionNameValid(name: string, options?: NameValidOptions): boolean;
//#endregion
//#region src/domains/permission/validator.d.ts
declare class PermissionValidator extends Container<Permission> {
  protected initialize(): void;
}
//#endregion
//#region src/domains/client-permission/entity.d.ts
interface ClientPermission extends PermissionRelation {
  id: string;
  created_at: Date;
  updated_at: Date;
  client_id: string;
  client: Client;
  client_realm_id: Realm['id'] | null;
  client_realm: Realm | null;
}
//#endregion
//#region src/domains/client-permission/validator.d.ts
declare class ClientPermissionValidator extends Container<ClientPermission> {
  protected initialize(): void;
}
//#endregion
//#region src/domains/scope/constants.d.ts
declare enum ScopeName {
  /**
   * Full permissions
   */
  GLOBAL = "global",
  /**
   * for Openid usage (id-token)
   */
  OPEN_ID = "openid",
  /**
   * /users/@me with email (userinfo & id-token)
   */
  EMAIL = "email",
  /**
   * Roles array (id-token)
   */
  ROLES = "roles",
  /**
   * /users/@me without email (userinfo & id-token)
   */
  IDENTITY = "identity"
}
//#endregion
//#region src/domains/scope/entity.d.ts
interface Scope {
  id: string;
  built_in: boolean;
  name: string;
  display_name: string | null;
  description: string | null;
  realm_id: Realm['id'] | null;
  realm: Realm | null;
  created_at: string;
  updated_at: string;
}
//#endregion
//#region src/domains/scope/utils.d.ts
declare function isScopeNameValid(name: string, options?: NameValidOptions): boolean;
//#endregion
//#region src/domains/scope/validator.d.ts
declare class ScopeValidator extends Container<Scope> {
  protected initialize(): void;
}
//#endregion
//#region src/domains/client-scope/entity.d.ts
interface ClientScope {
  id: string;
  default: boolean;
  client_id: Client['id'];
  client: Client;
  client_realm_id: Realm['id'] | null;
  client_realm: Realm | null;
  scope_id: Scope['id'];
  scope: Scope;
  scope_realm_id: Realm['id'] | null;
  scope_realm: Realm | null;
}
//#endregion
//#region src/domains/client-scope/validator.d.ts
declare class ClientScopeValidator extends Container<ClientScope> {
  protected initialize(): void;
}
//#endregion
//#region src/domains/identity/constants.d.ts
declare enum IdentityType {
  CLIENT = "client",
  ROBOT = "robot",
  USER = "user"
}
//#endregion
//#region src/domains/robot/entity.d.ts
interface Robot {
  id: string;
  secret: string;
  name: string;
  display_name: string | null;
  description: string;
  active: boolean;
  created_at: Date;
  updated_at: Date;
  user_id: User['id'] | null;
  user: User | null;
  client_id: Client['id'] | null;
  client: Client | null;
  realm_id: Realm['id'];
  realm: Realm;
}
//#endregion
//#region src/domains/robot/helpers.d.ts
declare function isRobotNameValid(name: string, options?: NameValidOptions): boolean;
//#endregion
//#region src/domains/robot/error.d.ts
declare class RobotError extends AuthupError {
  static credentialsInvalid(): RobotError;
  static notFound(): RobotError;
  static inactive(): RobotError;
}
//#endregion
//#region src/domains/robot/validator.d.ts
declare class RobotValidator extends Container<Robot> {
  protected initialize(): void;
}
//#endregion
//#region src/domains/identity/types.d.ts
type ClientIdentity = {
  type: `${IdentityType.CLIENT}`;
  data: Client;
};
type RobotIdentity = {
  type: `${IdentityType.ROBOT}`;
  data: Robot;
};
type UserIdentity = {
  type: `${IdentityType.USER}`;
  data: User;
};
type Identity = ClientIdentity | RobotIdentity | UserIdentity;
//#endregion
//#region src/domains/identity-provider/attributes-validator.d.ts
declare class IdentityProviderAttributesValidator extends Container<ObjectLiteral> {
  constructor(options?: ContainerOptions<ObjectLiteral>);
  protected initialize(): void;
}
//#endregion
//#region src/domains/identity-provider/constants.d.ts
declare enum IdentityProviderProtocol {
  LDAP = "ldap",
  OAUTH2 = "oauth2",
  OIDC = "oidc"
}
declare enum IdentityProviderMappingSyncMode {
  /**
   * Synchronize on initial user login.
   */
  ONCE = "once",
  /**
   * Synchronize on every user login.
   */
  ALWAYS = "always",
  /**
   * Synchronize based on idp configuration.
   */
  INHERIT = "inherit"
}
//#endregion
//#region src/domains/identity-provider/preset/constants.d.ts
declare enum IdentityProviderPreset {
  FACEBOOK = "facebook",
  GITHUB = "github",
  GITLAB = "gitlab",
  GOOGLE = "google",
  PAYPAL = "paypal",
  INSTAGRAM = "instagram",
  STACKOVERFLOW = "stackoverflow",
  TWITTER = "twitter"
}
//#endregion
//#region src/domains/identity-provider/preset/utils.d.ts
declare function getIdentityProviderProtocolForPreset(id: string): `${IdentityProviderProtocol}` | null;
//#endregion
//#region src/domains/identity-provider/entity.d.ts
interface IdentityProvider {
  id: string;
  name: string;
  display_name: string | null;
  protocol: `${IdentityProviderProtocol}` | null;
  preset: `${IdentityProviderPreset}` | null;
  enabled: boolean;
  created_at: string;
  updated_at: string;
  realm_id: Realm['id'];
  realm: Realm;
}
interface IdentityProviderBaseMapping {
  name: string | null;
  value: string | null;
  value_is_regex: boolean;
  synchronization_mode: `${IdentityProviderMappingSyncMode}` | null;
  provider_id: IdentityProvider['id'];
  provider: IdentityProvider;
  provider_realm_id: Realm['id'];
  provider_realm: Realm;
}
//#endregion
//#region src/domains/identity-provider/utils.d.ts
declare function buildIdentityProviderAuthorizeCallbackPath(id: string | number): string;
declare function buildIdentityProviderAuthorizePath(id: string | number): string;
declare function isIdentityProviderNameValid(input: string, options?: NameValidOptions): boolean;
//#endregion
//#region src/domains/identity-provider/ldap/types.d.ts
interface LdapIdentityProvider extends IdentityProvider {
  protocol: IdentityProviderProtocol.LDAP | `${IdentityProviderProtocol.LDAP}`;
  /**
   * The LDAP URL which consists of a scheme, address, and port.
   * Format is <scheme>://<address>:<port> or <scheme>://<address> where scheme is either ldap or ldaps.
   */
  url: string;
  /**
   * The timeout for dialing an LDAP connection.
   *
   * @default infinity
   */
  timeout?: number;
  /**
   * Enables use of the LDAP StartTLS process which is not commonly used.
   */
  start_tls?: boolean;
  /**
   * Controls the TLS connection validation process.
   */
  tls?: Record<string, any>;
  /**
   * Sets the base distinguished name container for all LDAP queries.
   */
  base_dn: string;
  /**
   * The DN of the administrator.
   *
   * @example cn=read-only-admin,dc=example,dc=com
   */
  user?: string;
  /**
   * The password of the administrator.
   */
  password?: string;
  /**
   * The ldap base DN to search the user.
   * @example dc=example,dc=com
   */
  user_base_dn?: string;
  /**
   * The LDAP filter to narrow down which users are valid
   */
  user_filter?: string;
  /**
   *  It will be used with the value in username to
   *  construct a ldap filter as ({attribute}={username}) to find the user and get user details in LDAP
   */
  user_name_attribute?: string;
  /**
   * The attribute to retrieve which contains the users email addresses.
   */
  user_mail_attribute?: string;
  /**
   * The attribute to retrieve which is shown on the Web UI to the user when they log in.
   */
  user_display_name_attribute?: string;
  /**
   * Ff specified with groupClass, will serve as search base for authenticated user groups
   */
  group_base_dn?: string;
  /**
   * Similar to user_filter, but it applies to group searches.
   */
  group_filter?: string;
  /**
   * The LDAP attribute that is used to determine the group name.
   */
  group_name_attribute?: string;
  /**
   * If specified with groupsSearchBase, will be used as objectClass in search filter for authenticated user groups
   */
  group_class?: string;
  /**
   * if specified with groupClass and groupsSearchBase,
   * will be used as member name (if not specified this defaults to member) in search filter for authenticated user groups
   */
  group_member_attribute?: string;
  /**
   * if specified with groupClass and groupsSearchBase,
   * will be used as the attribute on the user object (if not specified this defaults to dn) in search filter for authenticated user groups
   */
  group_member_user_attribute?: string;
}
//#endregion
//#region src/domains/identity-provider/ldap/check.d.ts
declare function isLdapIdentityProvider(input: IdentityProvider): input is LdapIdentityProvider;
//#endregion
//#region src/domains/identity-provider/ldap/validator.d.ts
declare class IdentityProviderLDAPAttributesValidator extends Container<LdapIdentityProvider> {
  protected initialize(): void;
}
//#endregion
//#region src/domains/identity-provider/oauth2/types.d.ts
interface OAuth2IdentityProviderBase {
  client_id: string;
  client_secret: string;
  token_url: string;
  token_revoke_url?: string | null;
  authorize_url: string;
  user_info_url?: string | null;
  scope?: string;
}
interface OAuth2IdentityProvider extends IdentityProvider, OAuth2IdentityProviderBase {
  protocol: `${IdentityProviderProtocol.OAUTH2}`;
}
//#endregion
//#region src/domains/identity-provider/oauth2/check.d.ts
declare function isOAuth2IdentityProvider(input: IdentityProvider): input is OAuth2IdentityProvider;
//#endregion
//#region src/domains/identity-provider/oauth2/preset-validator.d.ts
declare class IdentityProviderOAuth2PresetAttributesValidator extends Container<OAuth2IdentityProvider> {
  protected initialize(): void;
}
//#endregion
//#region src/domains/identity-provider/oauth2/validator.d.ts
declare class IdentityProviderOAuth2AttributesValidator extends Container<OAuth2IdentityProvider> {
  protected initialize(): void;
}
//#endregion
//#region src/domains/identity-provider/oidc/types.d.ts
interface OpenIDIdentityProvider extends IdentityProvider, OAuth2IdentityProviderBase {
  protocol: `${IdentityProviderProtocol.OIDC}`;
}
//#endregion
//#region src/domains/identity-provider/oidc/check.d.ts
declare function isOpenIDIdentityProvider(input: IdentityProvider): input is OpenIDIdentityProvider;
//#endregion
//#region src/domains/identity-provider/validator.d.ts
declare class IdentityProviderValidator extends Container<IdentityProvider> {
  protected initialize(): void;
}
//#endregion
//#region src/domains/identity-provider-attribute/entity.d.ts
interface IdentityProviderAttribute {
  id: string;
  name: string;
  value: string | null;
  provider_id: IdentityProvider['id'];
  provider: IdentityProvider;
  realm_id: Realm['id'] | null;
  realm: Realm | null;
  created_at: string;
  updated_at: string;
}
//#endregion
//#region src/domains/identity-provider-account/entity.d.ts
interface IdentityProviderAccount {
  id: string;
  provider_user_id: string;
  provider_user_name: string;
  provider_user_email: string;
  created_at: Date;
  updated_at: Date;
  user_id: string;
  user: User;
  user_realm_id: Realm['id'] | null;
  user_realm: Realm | null;
  provider_id: IdentityProvider['id'];
  provider: IdentityProvider;
  provider_realm_id: Realm['id'] | null;
  provider_realm: Realm | null;
}
//#endregion
//#region src/domains/identity-provider-attribute-mapping/entity.d.ts
interface IdentityProviderAttributeMapping extends IdentityProviderBaseMapping {
  id: string;
  target_name: string;
  target_value: string | null;
  created_at: Date;
  updated_at: Date;
}
//#endregion
//#region src/domains/identity-provider-permission-mapping/entity.d.ts
interface IdentityProviderPermissionMapping extends IdentityProviderBaseMapping {
  id: string;
  created_at: Date;
  updated_at: Date;
  permission_id: string;
  permission: Role;
  permission_realm_id: Realm['id'] | null;
  permission_realm: Realm | null;
}
//#endregion
//#region src/domains/identity-provider-role-mapping/entity.d.ts
interface IdentityProviderRoleMapping extends IdentityProviderBaseMapping {
  id: string;
  created_at: Date;
  updated_at: Date;
  role_id: string;
  role: Role;
  role_realm_id: Realm['id'] | null;
  role_realm: Realm | null;
}
//#endregion
//#region src/domains/identity-provider-role-mapping/validator.d.ts
declare class IdentityProviderRoleMappingValidator extends Container<IdentityProviderRoleMapping> {
  protected initialize(): void;
}
//#endregion
//#region src/domains/permission-policy/entity.d.ts
interface PermissionPolicy {
  id: string;
  permission_id: Permission['id'];
  permission: Permission;
  permission_realm_id: Realm['id'] | null;
  permission_realm: Realm | null;
  policy_id: Policy['id'];
  policy: Policy;
  policy_realm_id: Realm['id'] | null;
  policy_realm: Realm | null;
  created_at: string;
  updated_at: string;
}
//#endregion
//#region src/domains/permission-policy/validator.d.ts
declare class PermissionPolicyValidator extends Container<PermissionPolicy> {
  protected initialize(): void;
}
//#endregion
//#region src/domains/policy-attribute/entity.d.ts
interface PolicyAttribute {
  id: string;
  name: string;
  value: string | null;
  realm_id: Policy['id'] | null;
  realm: Realm | null;
  policy_id: Policy['id'];
  policy: Policy;
  created_at: Date;
  updated_at: Date;
}
//#endregion
//#region src/domains/robot-permission/entity.d.ts
interface RobotPermission extends PermissionRelation {
  id: string;
  created_at: Date;
  updated_at: Date;
  robot_id: string;
  robot: Robot;
  robot_realm_id: Realm['id'] | null;
  robot_realm: Realm | null;
}
//#endregion
//#region src/domains/robot-permission/validator.d.ts
declare class RobotPermissionValidator extends Container<RobotPermission> {
  protected initialize(): void;
}
//#endregion
//#region src/domains/robot-role/entity.d.ts
interface RobotRole {
  id: string;
  robot_id: string;
  role_id: string;
  role: Role;
  role_realm_id: Realm['id'] | null;
  role_realm: Realm | null;
  robot: Robot;
  robot_realm_id: Realm['id'] | null;
  robot_realm: Realm | null;
  created_at: string;
  updated_at: string;
}
//#endregion
//#region src/domains/robot-role/validator.d.ts
declare class RobotRoleValidator extends Container<RobotRole> {
  protected initialize(): void;
}
//#endregion
//#region src/domains/role-attribute/entity.d.ts
interface RoleAttribute {
  id: string;
  name: string;
  value: string | null;
  role_id: Role['id'];
  role: Role;
  realm_id: Realm['id'] | null;
  realm: Realm | null;
  created_at: string;
  updated_at: string;
}
//#endregion
//#region src/domains/role-permission/entity.d.ts
interface RolePermission extends PermissionRelation {
  id: string;
  created_at: Date;
  updated_at: Date;
  role_id: string;
  role: Role;
  role_realm_id: Realm['id'] | null;
  role_realm: Realm | null;
}
//#endregion
//#region src/domains/role-permission/validator.d.ts
declare class RolePermissionValidator extends Container<RolePermission> {
  protected initialize(): void;
}
//#endregion
//#region src/domains/session/entity.d.ts
interface Session {
  /**
   * Public ID
   */
  id: string;
  /**
   * Subject ID
   */
  sub: string;
  /**
   * Subject kind (e.g. user, robot, client)
   */
  sub_kind: string;
  /**
   * Last used ip address.
   */
  ip_address: string;
  /**
   * Last used user agent.
   */
  user_agent: string;
  /**
   * Expiration date (iso)
   */
  expires_at: string;
  /**
   * Time session was renewed.
   */
  refreshed_at: string | null;
  /**
   * Last time subject was seen.
   */
  seen_at: string | null;
  /**
   * Last time new access-token, refresh-token created for session.
   */
  updated_at: string;
  /**
   * Creation date of session
   */
  created_at: string;
  client_id: Client['id'] | null;
  client: Client | null;
  user_id: User['id'] | null;
  user: User | null;
  robot_id: Robot['id'] | null;
  robot: Robot | null;
  realm_id: Realm['id'];
  realm: Realm;
}
//#endregion
//#region src/domains/user-attribute/entity.d.ts
interface UserAttribute {
  id: string;
  name: string;
  value: string | null;
  user_id: User['id'];
  user: User;
  realm_id: Realm['id'];
  realm: Realm;
  created_at: string;
  updated_at: string;
}
//#endregion
//#region src/domains/user-permission/entity.d.ts
interface UserPermission extends PermissionRelation {
  id: string;
  created_at: Date;
  updated_at: Date;
  user_id: User['id'];
  user: User;
  user_realm_id: Realm['id'] | null;
  user_realm: Realm | null;
}
//#endregion
//#region src/domains/user-permission/validator.d.ts
declare class UserPermissionValidator extends Container<UserPermission> {
  protected initialize(): void;
}
//#endregion
//#region src/domains/user-role/entity.d.ts
interface UserRole {
  id: string;
  role_id: Role['id'];
  role: Role;
  role_realm_id: Realm['id'] | null;
  role_realm: Realm | null;
  user_id: User['id'];
  user: User;
  user_realm_id: Realm['id'] | null;
  user_realm: Realm | null;
  created_at: string;
  updated_at: string;
}
//#endregion
//#region src/domains/user-role/validator.d.ts
declare class UserRoleValidator extends Container<UserRole> {
  protected initialize(): void;
}
//#endregion
//#region src/domains/contstants.d.ts
declare enum EntityType {
  CLIENT = "client",
  CLIENT_PERMISSION = "clientPermission",
  CLIENT_ROLE = "clientRole",
  CLIENT_SCOPE = "clientScope",
  IDENTITY_PROVIDER = "identityProvider",
  IDENTITY_PROVIDER_ACCOUNT = "identityProviderAccount",
  IDENTITY_PROVIDER_ATTRIBUTE = "identityProviderAttribute",
  IDENTITY_PROVIDER_ATTRIBUTE_MAPPING = "identityProviderAttributeMapping",
  IDENTITY_PROVIDER_PERMISSION_MAPPING = "identityProviderPermissionMapping",
  IDENTITY_PROVIDER_ROLE_MAPPING = "identityProviderRoleMapping",
  KEY = "key",
  POLICY = "policy",
  POLICY_ATTRIBUTE = "policyAttribute",
  PERMISSION = "permission",
  PERMISSION_POLICY = "permissionPolicy",
  REALM = "realm",
  ROBOT = "robot",
  ROBOT_PERMISSION = "robotPermission",
  ROBOT_ROLE = "robotRole",
  ROLE = "role",
  ROLE_ATTRIBUTE = "roleAttribute",
  ROLE_PERMISSION = "rolePermission",
  SCOPE = "scope",
  // todo: add
  USER = "user",
  USER_ATTRIBUTE = "userAttribute",
  USER_PERMISSION = "userPermission",
  USER_ROLE = "userRole"
}
declare enum EntityDefaultEventName {
  CREATED = "created",
  DELETED = "deleted",
  UPDATED = "updated"
}
//#endregion
//#region src/domains/helpers.d.ts
declare function buildEntityChannelName(entity: string, id?: string | number): string;
declare function buildEntityNamespaceName(id: string): string;
//#endregion
//#region src/domains/types.d.ts
type EntityTypeMapRaw = {
  [EntityType.CLIENT]: Client;
  [EntityType.CLIENT_PERMISSION]: ClientPermission;
  [EntityType.CLIENT_ROLE]: ClientRole;
  [EntityType.CLIENT_SCOPE]: ClientScope;
  [EntityType.IDENTITY_PROVIDER]: IdentityProvider;
  [EntityType.IDENTITY_PROVIDER_ACCOUNT]: IdentityProviderAccount;
  [EntityType.IDENTITY_PROVIDER_ATTRIBUTE]: IdentityProviderAttribute;
  [EntityType.IDENTITY_PROVIDER_ROLE_MAPPING]: IdentityProviderRoleMapping;
  [EntityType.POLICY]: Policy;
  [EntityType.POLICY_ATTRIBUTE]: PolicyAttribute;
  [EntityType.PERMISSION]: Permission;
  [EntityType.PERMISSION_POLICY]: PermissionPolicy;
  [EntityType.REALM]: Realm;
  [EntityType.ROBOT]: Robot;
  [EntityType.ROBOT_PERMISSION]: RobotPermission;
  [EntityType.ROBOT_ROLE]: RobotRole;
  [EntityType.ROLE]: Role;
  [EntityType.ROLE_ATTRIBUTE]: RoleAttribute;
  [EntityType.ROLE_PERMISSION]: RolePermission;
  [EntityType.SCOPE]: Scope;
  [EntityType.USER]: User;
  [EntityType.USER_ATTRIBUTE]: UserAttribute;
  [EntityType.USER_PERMISSION]: UserPermission;
  [EntityType.USER_ROLE]: UserRole;
};
type EntityTypeMap = { [K in keyof EntityTypeMapRaw as `${K}`]: EntityTypeMapRaw[K] };
type EventRecord<T extends string, D extends Record<string, any>> = {
  type: T;
  data: D;
  event: string;
};
//#endregion
export { AttemptActivation, AttemptLogin, AttemptReset, Client, ClientError, ClientIdentity, ClientPermission, ClientPermissionValidator, ClientRole, ClientRoleValidator, ClientScope, ClientScopeValidator, ClientValidator, EntityDefaultEventName, EntityType, EntityTypeMap, EventRecord, Identity, IdentityProvider, IdentityProviderAccount, IdentityProviderAttribute, IdentityProviderAttributeMapping, IdentityProviderAttributesValidator, IdentityProviderBaseMapping, IdentityProviderLDAPAttributesValidator, IdentityProviderMappingSyncMode, IdentityProviderOAuth2AttributesValidator, IdentityProviderOAuth2PresetAttributesValidator, IdentityProviderPermissionMapping, IdentityProviderPreset, IdentityProviderProtocol, IdentityProviderRoleMapping, IdentityProviderRoleMappingValidator, IdentityProviderValidator, IdentityType, Key, LdapIdentityProvider, NameValidOptions, OAuth2AuthorizationCode, OAuth2AuthorizationCodeRequest, OAuth2IdentityProvider, OAuth2IdentityProviderBase, OpenIDIdentityProvider, Permission, PermissionName, PermissionPolicy, PermissionPolicyValidator, PermissionRelation, PermissionValidator, Policy, PolicyAttribute, PolicyValidator, PolicyWithType, REALM_MASTER_NAME, REALM_NAME_REGEX, ROLE_ADMIN_NAME, ROLE_REALM_ADMIN_NAME, Realm, RealmValidator, Robot, RobotError, RobotIdentity, RobotPermission, RobotPermissionValidator, RobotRole, RobotRoleValidator, RobotValidator, Role, RoleAttribute, RolePermission, RolePermissionValidator, RoleValidator, Scope, ScopeName, ScopeValidator, Session, User, UserAttribute, UserError, UserIdentity, UserPermission, UserPermissionValidator, UserRole, UserRoleValidator, UserValidator, ValidatorGroup, buildEntityChannelName, buildEntityNamespaceName, buildIdentityProviderAuthorizeCallbackPath, buildIdentityProviderAuthorizePath, buildUserFakeEmail, getIdentityProviderProtocolForPreset, isClientNameValid, isIdentityProviderNameValid, isLdapIdentityProvider, isNameValid, isOAuth2IdentityProvider, isOpenIDIdentityProvider, isPermissionNameValid, isPolicy, isPolicyNameValid, isRealmNameValid, isRobotNameValid, isRoleNameValid, isScopeNameValid, isUserFakeEmail, isUserNameValid, isValidUserEmail };
//# sourceMappingURL=index.d.mts.map