/**
 * Pure resolver for matching an upload's MIME type (and optional file
 * extension) to a registered Artifact Type. Has no entity dependency — takes
 * a list of plain matcher records, returns the chosen ID (or undefined when
 * nothing matches).
 *
 * Resolution algorithm (per plans/artifact-attachment-unification.md §6):
 *   1. Filter to types whose ContentType pattern matches the upload MIME.
 *   2. Bucket by specificity: exact > subtype-wildcard (e.g. `image/*`).
 *   3. Within the highest-specificity bucket, sort by Priority desc.
 *   4. Tiebreaker if priorities are equal:
 *        a. SystemSupplied = false beats SystemSupplied = true
 *        b. otherwise lowest ID wins (deterministic).
 *
 * Octet-stream uploads also consider a file-extension hint when given.
 *
 * Conflict detection: callers can pass the same list to
 * `FindArtifactTypeConflicts` to surface ambiguous registrations at engine
 * boot, where two types share the same (ContentType, Priority, SystemSupplied)
 * triple — almost always a configuration mistake.
 */
export interface ArtifactTypeMatcher {
    /** Stable identifier (UUID) — used as the final tiebreaker. */
    id: string;
    /** Display name — for logging only. */
    name: string;
    /** MIME pattern: either an exact MIME or a subtype wildcard like `text/*`. */
    contentType: string;
    /** Higher wins within a specificity tier. */
    priority: number;
    /** System-shipped defaults rank below organization customizations at equal priority. */
    systemSupplied: boolean;
    /** Optional list of file extensions (no leading dot) that map to this type. */
    fileExtensions?: string[];
}
export type ArtifactTypeConflict = {
    contentType: string;
    priority: number;
    systemSupplied: boolean;
    matcherIds: string[];
    matcherNames: string[];
};
export declare function ResolveArtifactTypeByMime(matchers: ReadonlyArray<ArtifactTypeMatcher>, mimeType: string | null | undefined, fileExtension?: string | null): ArtifactTypeMatcher | undefined;
export declare function FindArtifactTypeConflicts(matchers: ReadonlyArray<ArtifactTypeMatcher>): ArtifactTypeConflict[];
//# sourceMappingURL=artifact-mime-resolver.d.ts.map