import { type FirestoreDocument } from './../../firestore'; import { AbstractModelPermissionService, type GrantedRoleMap, type InContextModelPermissionService, type InModelContextModelPermissionService, type ModelPermissionService } from '@dereekb/model'; import { type Maybe, type PromiseOrValue } from '@dereekb/util'; import { type FirebaseModelLoader, type InModelContextFirebaseModelLoader } from '../model/model.loader'; import { type FirebaseModelContext } from '../context'; import { type FirebasePermissionServiceModel } from './permission'; /** * Permission service interface for a single Firebase model type, specialized from {@link ModelPermissionService}. */ export type FirebaseModelPermissionService = FirestoreDocument, R extends string = string> = ModelPermissionService>; /** * Delegate that provides model loading and role mapping for a {@link FirebaseModelPermissionServiceInstance}. * * The `roleMapForModel` function is the core of the permission system — it examines the loaded model data * and context to produce a {@link GrantedRoleMap} of what the current user can do. */ export interface FirebasePermissionServiceInstanceDelegate = FirestoreDocument, R extends string = string> extends FirebaseModelLoader { roleMapForModel(output: FirebasePermissionServiceModel, context: C, model: D): PromiseOrValue>; } /** * Concrete permission service implementation for Firebase models. * * Loads the document snapshot, checks existence, and delegates role computation to the configured delegate. * Used internally by {@link firebaseModelPermissionService}. */ export declare class FirebaseModelPermissionServiceInstance = FirestoreDocument, R extends string = string> extends AbstractModelPermissionService> implements FirebaseModelPermissionService { private readonly _delegate; constructor(delegate: FirebasePermissionServiceInstanceDelegate); get delegate(): FirebasePermissionServiceInstanceDelegate; roleMapForModel(output: FirebasePermissionServiceModel, context: C, model: D): PromiseOrValue>; protected outputForModel(document: D): Promise>>; protected isUsableOutputForRoles(output: FirebasePermissionServiceModel): boolean; } /** * Creates a {@link FirebaseModelPermissionServiceInstance} from a delegate. * * @param delegate - provides model loading and role computation * @returns a {@link FirebaseModelPermissionServiceInstance} configured with the given delegate */ export declare function firebaseModelPermissionService = FirestoreDocument, R extends string = string>(delegate: FirebasePermissionServiceInstanceDelegate): FirebaseModelPermissionServiceInstance; /** * Context-bound permission service — evaluates roles for any model by key or document. */ export type InContextFirebaseModelPermissionService = FirestoreDocument, R extends string = string> = InContextModelPermissionService>; /** * Fully bound permission service for a specific model and context — provides the computed role map. */ export type InModelContextFirebaseModelPermissionService = FirestoreDocument, R extends string = string> = InModelContextModelPermissionService> & InModelContextFirebaseModelLoader;