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 - the in-model-context permission service to read roles from * @returns a promise resolving to a {@link ContextGrantedModelRolesReader} for the 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;