import { AuthorizationHeader, Client as Client$1, ClientError, RequestBaseOptions, RequestOptions, setHeader, unsetHeader } from "hapic";
import { BuildInput } from "rapiq";
import { Client as Client$2, ClientPermission, ClientRole, ClientScope, IdentityProvider, IdentityProviderRoleMapping, OAuth2AuthorizationCodeRequest, Permission, PermissionPolicy, Policy, Realm, Robot, RobotPermission, RobotRole, Role, RoleAttribute, RolePermission, Scope, User, UserAttribute, UserPermission, UserRole } from "@authup/core-kit";
import { AuthorizeAPI, TokenAPI, TokenGrantResponse, UserInfoAPI } from "@hapic/oauth2";
import { ObjectLiteral } from "@authup/kit";
import { OAuth2JsonWebKey, OpenIDProviderMetadata } from "@authup/specs";
import { EventEmitter } from "@posva/event-emitter";
import { BuiltInPolicies } from "@authup/access";

//#region src/cookies.d.ts
declare enum CookieName {
  ACCESS_TOKEN = "access_token",
  ACCESS_TOKEN_EXPIRE_DATE = "access_token_expire_date",
  REFRESH_TOKEN = "refresh_token",
  USER = "user",
  REALM = "realm",
  REALM_MANAGEMENT = "realm_management"
}
//#endregion
//#region src/client/helper.d.ts
declare function isClientError(input: unknown): input is ClientError;
//#endregion
//#region src/domains/types-base.d.ts
type EntityRecordResponse<R> = R;
type EntityCollectionResponse<R> = {
  data: R[];
  meta: {
    limit: number;
    offset: number;
    total: number;
  };
};
type DomainEntityWithID = {
  [key: string]: any;
  id: any;
};
type DomainEntityID<T> = T extends DomainEntityWithID ? T['id'] : never;
interface EntityAPISlim<T extends ObjectLiteral> {
  getMany(record?: BuildInput<T>): Promise<EntityCollectionResponse<T>>;
  getOne(id: DomainEntityID<T>, record?: BuildInput<T>): Promise<EntityRecordResponse<T>>;
  delete(id: DomainEntityID<T>): Promise<EntityRecordResponse<T>>;
  create(data: Partial<T>): Promise<EntityRecordResponse<T>>;
}
interface EntityAPI<T extends ObjectLiteral> extends EntityAPISlim<T> {
  update(id: DomainEntityID<T>, data: Partial<T>): Promise<EntityRecordResponse<T>>;
}
type BaseAPIContext = {
  client?: Client$1 | RequestBaseOptions;
};
//#endregion
//#region src/domains/base.d.ts
declare class BaseAPI {
  protected client: Client$1;
  constructor(context?: BaseAPIContext);
  setClient(input?: Client$1 | RequestBaseOptions): void;
}
//#endregion
//#region src/domains/entities/client/module.d.ts
declare class ClientAPI extends BaseAPI implements EntityAPI<Client$2> {
  getMany(options?: BuildInput<Client$2>): Promise<EntityCollectionResponse<Client$2>>;
  getOne(id: Client$2['id'], options?: BuildInput<Client$2>): Promise<EntityRecordResponse<Client$2>>;
  delete(id: Client$2['id']): Promise<EntityRecordResponse<Client$2>>;
  create(data: Partial<Client$2>): Promise<EntityRecordResponse<Client$2>>;
  update(id: Client$2['id'], data: Partial<Client$2>): Promise<EntityRecordResponse<Client$2>>;
  createOrUpdate(idOrName: string, data: Partial<Client$2>): Promise<EntityRecordResponse<Client$2>>;
}
//#endregion
//#region src/domains/entities/client-permission/module.d.ts
declare class ClientPermissionAPI extends BaseAPI implements EntityAPI<ClientPermission> {
  getMany(data?: BuildInput<ClientPermission>): Promise<EntityCollectionResponse<ClientPermission>>;
  getOne(id: ClientPermission['id'], data?: BuildInput<ClientPermission>): Promise<EntityRecordResponse<ClientPermission>>;
  delete(id: ClientPermission['id']): Promise<EntityRecordResponse<ClientPermission>>;
  create(data: Partial<ClientPermission>): Promise<EntityRecordResponse<ClientPermission>>;
  update(id: ClientPermission['id'], data: Partial<ClientPermission>): Promise<EntityRecordResponse<ClientPermission>>;
}
//#endregion
//#region src/domains/entities/client-role/module.d.ts
declare class ClientRoleAPI extends BaseAPI implements EntityAPISlim<ClientRole> {
  getMany(data?: BuildInput<ClientRole>): Promise<EntityCollectionResponse<ClientRole>>;
  getOne(id: ClientRole['id']): Promise<EntityRecordResponse<ClientRole>>;
  delete(id: ClientRole['id']): Promise<EntityRecordResponse<ClientRole>>;
  create(data: Partial<ClientRole>): Promise<EntityRecordResponse<ClientRole>>;
}
//#endregion
//#region src/domains/entities/client-scope/module.d.ts
declare class ClientScopeAPI extends BaseAPI implements EntityAPISlim<ClientScope> {
  getMany(data?: BuildInput<ClientScope>): Promise<EntityCollectionResponse<ClientScope>>;
  getOne(id: ClientScope['id']): Promise<EntityRecordResponse<ClientScope>>;
  delete(id: ClientScope['id']): Promise<EntityRecordResponse<ClientScope>>;
  create(data: Partial<ClientScope>): Promise<EntityRecordResponse<ClientScope>>;
}
//#endregion
//#region src/domains/entities/identity-provider/module.d.ts
declare class IdentityProviderAPI extends BaseAPI implements EntityAPI<IdentityProvider> {
  getAuthorizeUri(id: IdentityProvider['id']): string;
  getMany(record?: BuildInput<IdentityProvider>): Promise<EntityCollectionResponse<IdentityProvider>>;
  getOne(id: IdentityProvider['id'], record?: BuildInput<IdentityProvider>): Promise<EntityRecordResponse<IdentityProvider>>;
  delete(id: IdentityProvider['id']): Promise<EntityRecordResponse<IdentityProvider>>;
  create(data: Partial<IdentityProvider>): Promise<EntityRecordResponse<IdentityProvider>>;
  update(id: IdentityProvider['id'], data: Partial<IdentityProvider>): Promise<EntityRecordResponse<IdentityProvider>>;
  createOrUpdate(idOrName: string, data: Partial<IdentityProvider>): Promise<EntityRecordResponse<IdentityProvider>>;
}
//#endregion
//#region src/domains/entities/identity-provider-role-mapping/module.d.ts
declare class IdentityProviderRoleMappingAPI extends BaseAPI implements EntityAPI<IdentityProviderRoleMapping> {
  getMany(data: BuildInput<IdentityProviderRoleMapping>): Promise<EntityCollectionResponse<IdentityProviderRoleMapping>>;
  getOne(id: IdentityProviderRoleMapping['id']): Promise<EntityRecordResponse<IdentityProviderRoleMapping>>;
  delete(id: IdentityProviderRoleMapping['id']): Promise<EntityRecordResponse<IdentityProviderRoleMapping>>;
  create(data: Partial<IdentityProviderRoleMapping>): Promise<EntityRecordResponse<IdentityProviderRoleMapping>>;
  update(id: IdentityProviderRoleMapping['id'], data: Partial<IdentityProviderRoleMapping>): Promise<EntityRecordResponse<IdentityProviderRoleMapping>>;
}
//#endregion
//#region src/domains/entities/policy/types.d.ts
type PolicyAPICheckResponse = {
  status: 'success' | 'error';
  data?: Record<string, any>;
};
type PolicyResponse = Policy & Record<string, any>;
type BuiltInPolicyResponse<T extends Record<string, any> = Record<string, any>> = Omit<Policy, 'type'> & BuiltInPolicies<T>;
type PolicyCreateSubset = Pick<Policy, 'name'> & Partial<Pick<Policy, 'display_name' | 'description' | 'invert'>> & {
  parent_id?: string | null;
};
type PolicyCreateRequest = PolicyCreateSubset & Record<string, any>;
type BuiltInPolicyCreateRequest<T extends Record<string, any> = Record<string, any>> = PolicyCreateSubset & BuiltInPolicies<T>;
type PolicyUpdateSubset = Partial<PolicyCreateSubset>;
type PolicyUpdateRequest = PolicyUpdateSubset & Record<string, any>;
type BuiltInPolicyUpdateRequest<T extends Record<string, any> = Record<string, any>> = PolicyUpdateSubset & BuiltInPolicies<T>;
//#endregion
//#region src/domains/entities/policy/module.d.ts
declare class PolicyAPI extends BaseAPI implements EntityAPI<Policy> {
  getMany<OUTPUT extends PolicyResponse = PolicyResponse>(data?: BuildInput<Policy & {
    parent_id?: string | null;
  }>): Promise<EntityCollectionResponse<OUTPUT>>;
  delete<OUTPUT extends PolicyResponse = PolicyResponse>(id: Policy['id']): Promise<EntityRecordResponse<OUTPUT>>;
  getOne<OUTPUT extends PolicyResponse = PolicyResponse>(id: Policy['id'], record?: BuildInput<Policy>): Promise<EntityRecordResponse<OUTPUT>>;
  getOneExpanded<OUTPUT extends PolicyResponse = PolicyResponse>(id: Policy['id'], record?: BuildInput<Policy>): Promise<EntityRecordResponse<OUTPUT>>;
  create<INPUT extends PolicyCreateRequest = PolicyCreateRequest, OUTPUT extends PolicyResponse = PolicyResponse>(data: INPUT): Promise<EntityRecordResponse<OUTPUT>>;
  createBuiltIn(data: BuiltInPolicyCreateRequest): Promise<EntityRecordResponse<BuiltInPolicyResponse>>;
  update<INPUT extends PolicyUpdateRequest = PolicyUpdateRequest, OUTPUT extends PolicyResponse = PolicyResponse>(id: Policy['id'], data: INPUT): Promise<EntityRecordResponse<OUTPUT>>;
  updateBuiltIn(id: Policy['id'], data: BuiltInPolicyUpdateRequest): Promise<EntityRecordResponse<BuiltInPolicyResponse>>;
  createOrUpdate<INPUT extends PolicyCreateRequest = PolicyCreateRequest, OUTPUT extends PolicyResponse = PolicyResponse>(idOrName: string, data: INPUT): Promise<EntityRecordResponse<OUTPUT>>;
  createOrUpdateBuiltin(idOrName: string, data: BuiltInPolicyCreateRequest): Promise<EntityRecordResponse<BuiltInPolicyResponse>>;
  check(idOrName: string, data?: Record<string, any>): Promise<PolicyAPICheckResponse>;
}
//#endregion
//#region src/domains/entities/permission/types.d.ts
type PermissionAPICheckResponse = {
  status: 'success' | 'error';
  data?: Record<string, any>;
};
//#endregion
//#region src/domains/entities/permission/module.d.ts
declare class PermissionAPI extends BaseAPI implements EntityAPI<Permission> {
  getMany(data?: BuildInput<Permission>): Promise<EntityCollectionResponse<Permission>>;
  delete(id: Permission['id']): Promise<EntityRecordResponse<Permission>>;
  getOne(id: Permission['id'], record?: BuildInput<Permission>): Promise<any>;
  create(data: Partial<Permission>): Promise<EntityRecordResponse<Permission>>;
  update(id: Permission['id'], data: Partial<Permission>): Promise<EntityRecordResponse<Permission>>;
  createOrUpdate(idOrName: string, data: Partial<Permission>): Promise<EntityRecordResponse<Permission>>;
  check(idOrName: string, data?: Record<string, any>): Promise<PermissionAPICheckResponse>;
}
//#endregion
//#region src/domains/entities/permission-policy/module.d.ts
declare class PermissionPolicyAPI extends BaseAPI implements EntityAPISlim<PermissionPolicy> {
  getMany(data?: BuildInput<PermissionPolicy>): Promise<EntityCollectionResponse<PermissionPolicy>>;
  getOne(id: PermissionPolicy['id']): Promise<EntityRecordResponse<PermissionPolicy>>;
  delete(id: PermissionPolicy['id']): Promise<EntityRecordResponse<PermissionPolicy>>;
  create(data: Partial<PermissionPolicy>): Promise<EntityRecordResponse<PermissionPolicy>>;
}
//#endregion
//#region src/domains/entities/realm/module.d.ts
declare class RealmAPI extends BaseAPI implements EntityAPI<Realm> {
  getMany(data?: BuildInput<Realm>): Promise<EntityCollectionResponse<Realm>>;
  getOne(id: Realm['id']): Promise<EntityRecordResponse<Realm>>;
  delete(id: Realm['id']): Promise<EntityRecordResponse<Realm>>;
  create(data: Partial<Realm>): Promise<EntityRecordResponse<Realm>>;
  update(realmId: Realm['id'], data: Partial<Realm>): Promise<EntityRecordResponse<Realm>>;
  createOrUpdate(idOrName: string, data: Partial<Realm>): Promise<EntityRecordResponse<Realm>>;
}
//#endregion
//#region src/domains/entities/robot/module.d.ts
declare class RobotAPI extends BaseAPI implements EntityAPI<Robot> {
  getMany(options?: BuildInput<Robot>): Promise<EntityCollectionResponse<Robot>>;
  getOne(id: Robot['id'], options?: BuildInput<Robot>): Promise<EntityRecordResponse<Robot>>;
  delete(id: Robot['id']): Promise<EntityRecordResponse<Robot>>;
  create(data: Partial<Robot>): Promise<EntityRecordResponse<Robot>>;
  update(id: Robot['id'], data: Partial<Robot>): Promise<EntityRecordResponse<Robot>>;
  createOrUpdate(idOrName: string, data: Partial<Robot>): Promise<EntityRecordResponse<Robot>>;
  integrity(id: Robot['id'] | Robot['name']): Promise<EntityRecordResponse<Robot>>;
}
//#endregion
//#region src/domains/entities/robot-permission/module.d.ts
declare class RobotPermissionAPI extends BaseAPI implements EntityAPI<RobotPermission> {
  getMany(data?: BuildInput<RobotPermission>): Promise<EntityCollectionResponse<RobotPermission>>;
  getOne(id: RobotPermission['id'], data?: BuildInput<RobotPermission>): Promise<EntityRecordResponse<RobotPermission>>;
  delete(id: RobotPermission['id']): Promise<EntityRecordResponse<RobotPermission>>;
  create(data: Partial<RobotPermission>): Promise<EntityRecordResponse<RobotPermission>>;
  update(id: RobotPermission['id'], data: Partial<RobotPermission>): Promise<EntityRecordResponse<RobotPermission>>;
}
//#endregion
//#region src/domains/entities/robot-role/module.d.ts
declare class RobotRoleAPI extends BaseAPI implements EntityAPISlim<RobotRole> {
  getMany(data?: BuildInput<RobotRole>): Promise<EntityCollectionResponse<RobotRole>>;
  getOne(id: RobotRole['id']): Promise<EntityRecordResponse<RobotRole>>;
  delete(id: RobotRole['id']): Promise<EntityRecordResponse<RobotRole>>;
  create(data: Partial<RobotRole>): Promise<EntityRecordResponse<RobotRole>>;
}
//#endregion
//#region src/domains/entities/role/module.d.ts
declare class RoleAPI extends BaseAPI implements EntityAPI<Role> {
  getMany(data?: BuildInput<Role>): Promise<EntityCollectionResponse<Role>>;
  getOne(roleId: Role['id']): Promise<EntityRecordResponse<Role>>;
  delete(roleId: Role['id']): Promise<EntityRecordResponse<Role>>;
  create(data: Partial<Role>): Promise<EntityRecordResponse<Role>>;
  update(id: Role['id'], data: Partial<Role>): Promise<EntityRecordResponse<Role>>;
  createOrUpdate(idOrName: string, data: Partial<Role>): Promise<EntityRecordResponse<Role>>;
}
//#endregion
//#region src/domains/entities/role-attribute/module.d.ts
declare class RoleAttributeAPI extends BaseAPI implements EntityAPI<RoleAttribute> {
  getMany(data?: BuildInput<RoleAttribute>): Promise<EntityCollectionResponse<RoleAttribute>>;
  getOne(roleId: RoleAttribute['id']): Promise<EntityRecordResponse<RoleAttribute>>;
  delete(roleId: RoleAttribute['id']): Promise<EntityRecordResponse<RoleAttribute>>;
  create(data: Partial<RoleAttribute>): Promise<EntityRecordResponse<RoleAttribute>>;
  update(id: RoleAttribute['id'], data: Partial<RoleAttribute>): Promise<EntityRecordResponse<RoleAttribute>>;
}
//#endregion
//#region src/domains/entities/role-permission/module.d.ts
declare class RolePermissionAPI extends BaseAPI implements EntityAPI<RolePermission> {
  getMany(data?: BuildInput<RolePermission>): Promise<EntityCollectionResponse<RolePermission>>;
  getOne(id: RolePermission['id']): Promise<EntityRecordResponse<RolePermission>>;
  delete(id: RolePermission['id']): Promise<EntityRecordResponse<RolePermission>>;
  create(data: Partial<RolePermission>): Promise<EntityRecordResponse<RolePermission>>;
  update(id: RolePermission['id'], data: Partial<RolePermission>): Promise<EntityRecordResponse<RolePermission>>;
}
//#endregion
//#region src/domains/entities/scope/module.d.ts
declare class ScopeAPI extends BaseAPI implements EntityAPI<Scope> {
  getMany(data?: BuildInput<Scope>): Promise<EntityCollectionResponse<Scope>>;
  getOne(id: Scope['id']): Promise<EntityRecordResponse<Scope>>;
  delete(id: Scope['id']): Promise<EntityRecordResponse<Scope>>;
  create(data: Partial<Scope>): Promise<EntityRecordResponse<Scope>>;
  update(id: Scope['id'], data: Partial<Scope>): Promise<EntityRecordResponse<Scope>>;
  createOrUpdate(idOrName: string, data: Partial<Scope>): Promise<EntityRecordResponse<Scope>>;
}
//#endregion
//#region src/domains/entities/user/module.d.ts
type PasswordForgotResponse = {
  reset_expires: string;
};
type PasswordResetResponse = {
  reset_at: string;
};
type RegisterResponse = {
  active: true;
};
declare class UserAPI extends BaseAPI implements EntityAPI<User> {
  getMany(options?: BuildInput<User>): Promise<EntityCollectionResponse<User>>;
  getOne(id: User['id'], options?: BuildInput<User>): Promise<EntityRecordResponse<User>>;
  delete(id: User['id']): Promise<EntityRecordResponse<User>>;
  create(data: Partial<User>): Promise<EntityRecordResponse<User>>;
  update(id: User['id'], data: Partial<User> & {
    password_repeat?: User['password'];
  }): Promise<EntityRecordResponse<User>>;
  createOrUpdate(idOrName: string, data: Partial<User> & {
    password_repeat?: User['password'];
  }): Promise<EntityRecordResponse<User>>;
  activate(token: string): Promise<User>;
  register(data: Partial<Pick<User, 'email' | 'name' | 'password' | 'realm_id'>>): Promise<RegisterResponse>;
  passwordForgot(data: Partial<Pick<User, 'email' | 'name' | 'realm_id'>>): Promise<PasswordForgotResponse>;
  passwordReset(data: Partial<Pick<User, 'email' | 'name' | 'realm_id'>> & {
    token: string;
    password: string;
  }): Promise<PasswordResetResponse>;
}
//#endregion
//#region src/domains/entities/user-attribute/module.d.ts
declare class UserAttributeAPI extends BaseAPI implements EntityAPI<UserAttribute> {
  getMany(data?: BuildInput<UserAttribute>): Promise<EntityCollectionResponse<UserAttribute>>;
  getOne(roleId: UserAttribute['id']): Promise<EntityRecordResponse<UserAttribute>>;
  delete(roleId: UserAttribute['id']): Promise<EntityRecordResponse<UserAttribute>>;
  create(data: Partial<UserAttribute>): Promise<EntityRecordResponse<UserAttribute>>;
  update(id: UserAttribute['id'], data: Partial<UserAttribute>): Promise<EntityRecordResponse<UserAttribute>>;
}
//#endregion
//#region src/domains/entities/user-permission/module.d.ts
declare class UserPermissionAPI extends BaseAPI implements EntityAPI<UserPermission> {
  getMany(data?: BuildInput<UserPermission>): Promise<EntityCollectionResponse<UserPermission>>;
  getOne(id: UserPermission['id']): Promise<EntityRecordResponse<UserPermission>>;
  delete(id: UserPermission['id']): Promise<EntityRecordResponse<UserPermission>>;
  create(data: Partial<UserPermission>): Promise<EntityRecordResponse<UserPermission>>;
  update(id: UserPermission['id'], data: Partial<UserPermission>): Promise<EntityRecordResponse<UserPermission>>;
}
//#endregion
//#region src/domains/entities/user-role/module.d.ts
declare class UserRoleAPI extends BaseAPI implements EntityAPISlim<UserRole> {
  getMany(data?: BuildInput<UserRole>): Promise<EntityCollectionResponse<UserRole>>;
  getOne(id: UserRole['id']): Promise<EntityRecordResponse<UserRole>>;
  delete(id: UserRole['id']): Promise<EntityRecordResponse<UserRole>>;
  create(data: Partial<UserRole>): Promise<EntityRecordResponse<UserRole>>;
}
//#endregion
//#region src/domains/workflows/oauth2/authorize/module.d.ts
declare class OAuth2AuthorizeAPI extends AuthorizeAPI {
  confirm(data: OAuth2AuthorizationCodeRequest): Promise<{
    url: string;
  }>;
}
//#endregion
//#region src/domains/workflows/oauth2/token/module.d.ts
declare class OAuth2TokenAPI extends TokenAPI {}
//#endregion
//#region src/domains/workflows/oauth2/user-info/module.d.ts
declare class OAuth2UserInfoAPI extends UserInfoAPI {}
//#endregion
//#region src/client/type.d.ts
type ClientOptions = RequestBaseOptions;
//#endregion
//#region src/client/module.d.ts
declare class Client extends Client$1 {
  readonly token: OAuth2TokenAPI;
  readonly authorize: OAuth2AuthorizeAPI;
  readonly client: ClientAPI;
  readonly clientPermission: ClientPermissionAPI;
  readonly clientRole: ClientRoleAPI;
  readonly clientScope: ClientScopeAPI;
  readonly identityProvider: IdentityProviderAPI;
  readonly identityProviderRoleMapping: IdentityProviderRoleMappingAPI;
  readonly policy: PolicyAPI;
  readonly permission: PermissionAPI;
  readonly permissionPolicy: PermissionPolicyAPI;
  readonly realm: RealmAPI;
  readonly robot: RobotAPI;
  readonly robotPermission: RobotPermissionAPI;
  readonly robotRole: RobotRoleAPI;
  readonly role: RoleAPI;
  readonly roleAttribute: RoleAttributeAPI;
  readonly rolePermission: RolePermissionAPI;
  readonly scope: ScopeAPI;
  readonly user: UserAPI;
  readonly userInfo: OAuth2UserInfoAPI;
  readonly userAttribute: UserAttributeAPI;
  readonly userPermission: UserPermissionAPI;
  readonly userRole: UserRoleAPI;
  constructor(config?: ClientOptions);
  getJwks(): Promise<OAuth2JsonWebKey[]>;
  getJwk(id: string): Promise<OAuth2JsonWebKey>;
  getWellKnownOpenIDConfiguration(): Promise<OpenIDProviderMetadata>;
}
//#endregion
//#region src/helpers/error-code.d.ts
declare function getClientErrorCode(err: unknown): string | null;
//#endregion
//#region src/hook/constants.d.ts
declare enum ClientAuthenticationHookEventName {
  REFRESH_FINISHED = "refreshFinished",
  REFRESH_FAILED = "refreshFailed",
  HEADER_SET = "headerSet",
  HEADER_UNSET = "headerRemoved"
}
//#endregion
//#region src/token-creator/type.d.ts
type TokenCreator = () => Promise<TokenGrantResponse>;
//#endregion
//#region src/token-creator/presets/client.d.ts
type ClientTokenCreatorOptions = {
  client?: ClientOptions;
};
type ClientTokenCreatorCredentials = {
  id: string;
  secret: string;
};
/**
 * Create token creator based on client credentials flow.
 *
 * @param credentials
 * @param options
 */
declare function createClientTokenCreator(credentials: ClientTokenCreatorCredentials, options?: ClientTokenCreatorOptions): TokenCreator;
//#endregion
//#region src/token-creator/presets/robot.d.ts
type RobotTokenCreatorOptions = {
  client?: ClientOptions;
};
type RobotTokenCreatorCredentials = {
  id: string;
  secret: string;
};
/**
 * Create token creator based on robot credentials flow.
 *
 * @param credentials
 * @param options
 */
declare function createRobotTokenCreator(credentials: RobotTokenCreatorCredentials, options?: RobotTokenCreatorOptions): TokenCreator;
//#endregion
//#region src/token-creator/presets/user.d.ts
type UserTokenCreatorOptions = {
  client?: ClientOptions;
};
type UserTokenCreatorCredentials = {
  name: string;
  password: string;
  realmId?: string;
  realmName?: string;
};
/**
 * Create token creator based on password flow.
 *
 * @param credentials
 * @param options
 */
declare function createUserTokenCreator(credentials: UserTokenCreatorCredentials, options?: UserTokenCreatorOptions): TokenCreator;
//#endregion
//#region src/hook/types.d.ts
type ClientAuthenticationHookOptions = {
  /**
   * The URL of the api service.
   *
   * default: client.baseURL
   */
  baseURL?: string;
  /**
   * Whether to set a timer to refresh the access token?
   *
   * default: true
   */
  timer?: boolean;
  /**
   * Fn to create a new token, if the previous token expired.
   */
  tokenCreator: TokenCreator;
};
type ClientAuthenticationHookEvents = {
  [ClientAuthenticationHookEventName.REFRESH_FINISHED]: TokenGrantResponse;
  [ClientAuthenticationHookEventName.REFRESH_FAILED]: ClientError | null;
  [ClientAuthenticationHookEventName.HEADER_SET]: [];
  [ClientAuthenticationHookEventName.HEADER_UNSET]: [];
};
//#endregion
//#region src/hook/module.d.ts
declare const HOOK_SYMBOL: unique symbol;
declare class ClientAuthenticationHook extends EventEmitter<{ [K in keyof ClientAuthenticationHookEvents as `${K}`]: ClientAuthenticationHookEvents[K] }> {
  protected isActive: boolean;
  protected authorizationHeader: AuthorizationHeader | undefined;
  protected clients: Client$1[];
  protected creator: TokenCreator;
  protected options: ClientAuthenticationHookOptions;
  protected timer: ReturnType<typeof setTimeout> | undefined;
  protected refreshPromise?: Promise<TokenGrantResponse>;
  constructor(options: ClientAuthenticationHookOptions);
  enable(): void;
  disable(): void;
  setAuthorizationHeader(value: AuthorizationHeader): void;
  unsetAuthorizationHeader(): void;
  isAttached(client: Client$1): client is Client$1 & Record<typeof HOOK_SYMBOL, unknown>;
  attach(client: Client$1): void;
  detach(client: Client$1): void;
  setTimer(expiresIn: number): void;
  clearTimer(): void;
  /**
   * Refresh token
   *
   * @throws ClientError
   */
  refresh(): Promise<TokenGrantResponse>;
}
//#endregion
//#region src/hook/utils.d.ts
type RetryState = {
  retryCount: number;
};
declare function getClientRequestRetryState(config: Partial<RequestOptions> & {
  retry?: Partial<RetryState>;
}): RetryState;
//#endregion
export { BaseAPI, BaseAPIContext, BuiltInPolicyCreateRequest, BuiltInPolicyResponse, BuiltInPolicyUpdateRequest, Client, ClientAPI, ClientAuthenticationHook, ClientAuthenticationHookEventName, ClientAuthenticationHookEvents, ClientAuthenticationHookOptions, ClientOptions, ClientPermissionAPI, ClientRoleAPI, ClientScopeAPI, ClientTokenCreatorCredentials, ClientTokenCreatorOptions, CookieName, DomainEntityID, DomainEntityWithID, EntityAPI, EntityAPISlim, EntityCollectionResponse, EntityRecordResponse, IdentityProviderAPI, IdentityProviderRoleMappingAPI, OAuth2AuthorizeAPI, OAuth2TokenAPI, OAuth2UserInfoAPI, PasswordForgotResponse, PasswordResetResponse, PermissionAPI, PermissionAPICheckResponse, PermissionPolicyAPI, PolicyAPI, PolicyAPICheckResponse, PolicyCreateRequest, PolicyResponse, PolicyUpdateRequest, RealmAPI, RegisterResponse, RobotAPI, RobotPermissionAPI, RobotRoleAPI, RobotTokenCreatorCredentials, RobotTokenCreatorOptions, RoleAPI, RoleAttributeAPI, RolePermissionAPI, ScopeAPI, TokenCreator, UserAPI, UserAttributeAPI, UserPermissionAPI, UserRoleAPI, UserTokenCreatorCredentials, UserTokenCreatorOptions, createClientTokenCreator, createRobotTokenCreator, createUserTokenCreator, getClientErrorCode, getClientRequestRetryState, isClientError, setHeader, unsetHeader };
//# sourceMappingURL=index.d.mts.map