import { type FirestoreDocument } from '../../firestore/accessor/document'; import { type GrantedRole, type GrantedRoleMap, type GrantedRoleMapReader, type GrantedRoleTruthMap, type GrantedRoleTruthMapObject } from '@dereekb/model'; import { type InModelContextFirebaseModelPermissionService } from './permission.service'; import { type SetIncludesMode, type ArrayOrValue } from '@dereekb/util'; import { type FirebasePermissionErrorContext } from './permission.context'; import { type FirebaseContextGrantedModelRoles, type FirebasePermissionServiceModel } from './permission'; /** * Reads and asserts granted roles for a specific model in a given context. * * Combines the computed {@link GrantedRoleMap} with the model's data and provides methods to * check and assert roles. Used as the primary interface for permission-guarded operations. * * Chainable assertion methods (`assertExists`, `assertHasRole`, `assertHasRoles`) return `this` * for fluent usage. */ export interface ContextGrantedModelRolesReader = FirestoreDocument, R extends GrantedRole = GrantedRole> extends GrantedRoleMapReader, FirebasePermissionServiceModel { readonly roleMap: GrantedRoleMap; readonly contextGrantedModelRoles: FirebaseContextGrantedModelRoles; assertExists(): this; assertHasRole(role: R): this; assertHasRoles(setIncludes: SetIncludesMode, roles: ArrayOrValue): this; assertContainsRoles(setIncludes: SetIncludesMode, roles: ArrayOrValue): this; throwPermissionError(role?: R): never; } /** * Default implementation of {@link ContextGrantedModelRolesReader}. * * Wraps a {@link FirebaseContextGrantedModelRoles} result and delegates role reading * to a {@link GrantedRoleMapReader}. Throws context-specific errors via the permission error context. */ export declare class ContextGrantedModelRolesReaderInstance = FirestoreDocument, R extends GrantedRole = GrantedRole> implements ContextGrantedModelRolesReader { private readonly _contextGrantedModelRoles; private readonly _roleReader; constructor(contextGrantedModelRoles: FirebaseContextGrantedModelRoles); get contextGrantedModelRoles(): FirebaseContextGrantedModelRoles; get permissionServiceModel(): FirebasePermissionServiceModel; get data(): import("@dereekb/util").Maybe; get document(): D; get snapshot(): import("../..").DocumentSnapshot; get exists(): boolean; get roleMap(): GrantedRoleMap; truthMap>(input: M): GrantedRoleTruthMap; hasNoAccess(): boolean; hasRole(role: R): boolean; hasRoles(setIncludes: SetIncludesMode, roles: ArrayOrValue): boolean; containsRoles(setIncludes: SetIncludesMode, roles: ArrayOrValue): boolean; assertExists(): this; assertHasRole(role: R): this; assertHasRoles(setIncludes: SetIncludesMode, roles: ArrayOrValue): this; assertContainsRoles(setIncludes: SetIncludesMode, roles: ArrayOrValue): this; throwDoesNotExistError(): never; throwPermissionError(role?: ArrayOrValue): never; } /** * Creates a new ContextGrantedModelRolesReader for the input model. * * @param service - In-model-context permission service whose role map is fetched. * @returns Resolves with a {@link ContextGrantedModelRolesReader} bound to that model. */ export declare function contextGrantedModelRolesReader = FirestoreDocument, R extends GrantedRole = GrantedRole>(service: InModelContextFirebaseModelPermissionService): Promise>; /** * Creates the default permission error message. * * @param contextGrantedModelRoles - The granted model roles context to generate the message from. * @param roles - The required role(s) that were not satisfied. * @returns A human-readable permission error message string. */ export declare function contextGrantedModelRolesReaderPermissionErrorMessage(contextGrantedModelRoles: FirebaseContextGrantedModelRoles, roles?: ArrayOrValue): string; /** * Creates the default does not exist error message. * * @param contextGrantedModelRoles - The granted model roles context to generate the message from. * @returns A human-readable does-not-exist error message string. */ export declare function contextGrantedModelRolesReaderDoesNotExistErrorMessage(contextGrantedModelRoles: FirebaseContextGrantedModelRoles): string;