/** * This Source Code is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * Copyright (c) Infonomic Company Limited */ import type { AbilityRegistry } from '@byline/auth'; import { type CollectionDefinition, type MultiCollectionDefinition, type SingletonDefinition } from '../@types/index.js'; /** The ability suffixes that every collection contributes. Exposed for contract tests. */ export declare const COLLECTION_ABILITY_VERBS: readonly ['read', 'create', 'update', 'delete', 'publish', 'changeStatus', 'reindex']; /** The smaller ability family contributed by every singleton. */ export declare const SINGLETON_ABILITY_VERBS: readonly ['read', 'update', 'publish', 'changeStatus']; export type CollectionAbilityVerb = (typeof COLLECTION_ABILITY_VERBS)[number]; export type SingletonAbilityVerb = (typeof SINGLETON_ABILITY_VERBS)[number]; /** Minimal explicit descriptor for collection ability checks. */ export interface CollectionAbilityResourceDescriptor { kind: 'collection'; path: string; } /** Minimal explicit descriptor for singleton ability checks. */ export interface SingletonAbilityResourceDescriptor { kind: 'singleton'; path: string; } export type CollectionAbilityResource = MultiCollectionDefinition | CollectionAbilityResourceDescriptor; export type SingletonAbilityResource = SingletonDefinition | SingletonAbilityResourceDescriptor; export type DocumentAbilityResource = CollectionAbilityResource | SingletonAbilityResource; /** Correlate the permitted verb family with the resource kind. */ export type DocumentAbilityVerbFor = Resource extends SingletonAbilityResource ? SingletonAbilityVerb : CollectionAbilityVerb; /** * Compute a document-resource ability key from a kind-bearing descriptor. * * TypeScript callers cannot pair a known singleton with collection-only verbs. * Runtime validation preserves the same boundary for untyped JavaScript callers * and for union-typed definitions whose concrete kind is known only at runtime. */ export declare function documentAbilityKey(resource: Resource, verb: DocumentAbilityVerbFor): string; /** @deprecated Use {@link documentAbilityKey} with a kind-bearing resource descriptor. */ export declare function collectionAbilityKey(path: string, verb: CollectionAbilityVerb): string; /** Auto-register the seven abilities contributed by a multi-document collection. */ export declare function registerCollectionAbilities(registry: AbilityRegistry, definition: MultiCollectionDefinition): void; /** Auto-register the four read, update, and workflow abilities for a singleton. */ export declare function registerSingletonAbilities(registry: AbilityRegistry, definition: SingletonDefinition): void; /** Register the correct ability family for either document-resource kind. */ export declare function registerDocumentAbilities(registry: AbilityRegistry, definition: CollectionDefinition): void;