export type AssetStatus = "pending" | "published" | "unpublished" | "removed"; export type SubmissionStatus = "draft" | "pending" | "approved" | "rejected" | "withdrawn"; export type FileAction = "add" | "replace" | "remove"; export type ContentLicense = "PD" | "WC" | "CC0" | "CC-BY" | "CC-BY-SA" | "CC-BY-NC" | "CC-BY-NC-SA"; export type RejectReason = "quality" | "duplicate" | "licensing" | "offtopic" | "incomplete" | "other"; export type ReportReason = "copyright" | "policy" | "quality" | "other"; export type ReportResolution = "upheld" | "dismissed" | "duplicate"; export type RemovedReason = "copyright" | "policy" | "publisher"; export type CommonsProduct = "worshipcommons" | "freeshow" | "lessons" | "b1"; export interface CommonsAssetInterface { id?: string; assetType?: string; name?: string; description?: string; tags?: string; language?: string; license?: ContentLicense; publisherUserId?: string; publisherChurchId?: string; publisherName?: string; status?: AssetStatus; featured?: boolean; downloadCount?: number; ratingCount?: number; ratingAverage?: number; version?: number; removedReason?: RemovedReason; publishedAt?: string; createdAt?: string; modifiedAt?: string; files?: CommonsFileInterface[]; fileUrls?: Record; detail?: Record; myRating?: number | null; mySaved?: boolean; hasPendingSubmission?: boolean; } export interface CommonsFileInterface { id?: string; name?: string; role?: string; action?: FileAction; sizeBytes?: number; contentHash?: string; uploadedBy?: string; uploadedByName?: string; url?: string; } export interface CommonsSubmissionPayload { name?: string; description?: string; tags?: string; language?: string; license?: ContentLicense; publisherChurchId?: string; detail?: Record; } export interface CommonsSubmissionInterface { id?: string; assetId?: string; assetType?: string; assetName?: string; assetStatus?: AssetStatus; isNewAsset?: boolean; isThirdParty?: boolean; submittedBy?: string; submittedByName?: string; status?: SubmissionStatus; payload?: CommonsSubmissionPayload; note?: string; triageScore?: number; files?: CommonsFileInterface[]; reviewedBy?: string; reviewedAt?: string; reviewReason?: RejectReason; reviewNote?: string; createdAt?: string; submittedAt?: string; } export interface CommonsHistoryEntryInterface { submissionId?: string; submittedBy?: string; submittedByName?: string; submittedAt?: string; approvedAt?: string; note?: string; filesChanged?: { name: string; action: FileAction; }[]; fieldsChanged?: string[]; } export interface CommonsReportInterface { id?: string; assetId?: string; assetName?: string; contentText?: string; reason?: ReportReason; reporterUserId?: string; reporterRole?: string; details?: string; name?: string; email?: string; signature?: string; status?: "open" | "reviewing" | "resolved"; resolution?: ReportResolution; resolutionNote?: string; reviewedBy?: string; reviewedAt?: string; createdAt?: string; } export interface CommonsRatingInterface { assetId?: string; stars?: number | null; saved?: boolean; } export interface AssetFileRole { role: string; namePattern: string; extensions: string[]; required?: boolean; maxBytes?: number; multiple?: boolean; generated?: boolean; } export interface AssetDetailField { key: string; label: string; type: "text" | "textarea" | "number" | "select" | "boolean"; options?: string[]; required?: boolean; maxLength?: number; } export interface AssetAttestation { key: string; label: string; requiredWhenRole?: string; } export interface AssetTypeDefinition { key: string; label: string; product: CommonsProduct; licenses: ContentLicense[]; defaultLicense: ContentLicense; files: AssetFileRole[]; detailFields?: AssetDetailField[]; attestations?: AssetAttestation[]; maxTotalBytes: number; previewUrl?: string; hasSatellite?: boolean; } export declare const COMMONS_PRODUCT_LABELS: Record; export declare const ASSET_TYPES: Record; /** Alias map for conventional names whose role is not basename-minus-extension. */ export declare const FILE_ROLE_ALIASES: Record; export declare const fileRole: (name: string) => string; /** Conventional storage name for a role given the uploaded file's extension, or null when the extension is not allowed. */ export declare function conventionalFileName(def: AssetTypeDefinition, role: string, originalName: string): string | null; //# sourceMappingURL=Commons.d.ts.map