import type { CinemaQueueMoney, CinemaQueueTaskKind } from './cinema-queue-types.js'; import type { CinemaContractValidation, CinemaSha256 } from './cinema-types.js'; export type CinemaProviderMediaKind = 'image' | 'video' | 'audio'; export type CinemaProviderAccountClass = | 'subscription-unlimited' | 'provider-credits' | 'api-credits' | 'free' | 'local'; export type CinemaProviderDiscoveryKind = | 'static-registry' | 'official-cli' | 'transport-probe' | 'fake-transport'; export interface CinemaProviderCapabilitySnapshotArtifact { schemaVersion: 1; snapshotId: string; projectSlug: string; routeId: string; transportId: string; accountClass: CinemaProviderAccountClass; discoveredAt: string; expiresAt: string; discovery: { kind: CinemaProviderDiscoveryKind; version: string; authenticated: boolean; sourceEvidenceIds: string[]; }; capabilities: { mediaKinds: CinemaProviderMediaKind[]; operations: string[]; models: string[]; workflows: string[]; maximumReferenceImages: number; /** Widest per-model video / audio reference caps; absent (older snapshots) means the route takes none. */ maximumReferenceVideos?: number; maximumReferenceAudio?: number; maximumConcurrentJobs: number | null; parameterSchema: Record; }; contentHash: CinemaSha256; } export interface CinemaQuotedGenerationJob { jobId: string; taskKind: CinemaQueueTaskKind; payloadHash: CinemaSha256; sourceHashes: CinemaSha256[]; providerArgumentsHash: CinemaSha256; quantity: number; unitCost: CinemaQueueMoney; maximumCost: CinemaQueueMoney; } export interface CinemaGenerationQuoteArtifact { schemaVersion: 1; quoteId: string; projectSlug: string; routeId: string; accountClass: CinemaProviderAccountClass; capabilitySnapshotId: string; capabilitySnapshotHash: CinemaSha256; createdAt: string; expiresAt: string; jobs: CinemaQuotedGenerationJob[]; totalCost: CinemaQueueMoney; maximumBalanceDebit: CinemaQueueMoney; balanceEnvelope: { observedBefore: CinemaQueueMoney; minimumBefore: CinemaQueueMoney; maximumBefore: CinemaQueueMoney; }; contentHash: CinemaSha256; } export interface CinemaGenerationAuthorizationArtifact { schemaVersion: 1; authorizationId: string; projectSlug: string; quoteId: string; quoteHash: CinemaSha256; capabilitySnapshotId: string; capabilitySnapshotHash: CinemaSha256; routeId: string; approvedAt: string; expiresAt: string; approverId: string; decision: 'approved'; authorizedJobIds: string[]; maximumSpend: CinemaQueueMoney; complianceEvidenceIds: string[]; contentHash: CinemaSha256; } export interface CinemaProviderContractBundle { snapshot: CinemaProviderCapabilitySnapshotArtifact; quote: CinemaGenerationQuoteArtifact; authorization: CinemaGenerationAuthorizationArtifact; } export interface CinemaPaidTaskAuthorizationRequest { projectSlug: string; taskId: string; taskKind: CinemaQueueTaskKind; routeId: string; payloadHash: CinemaSha256; estimatedCost: CinemaQueueMoney; spendAuthorizationId: string; now: string; queueAuthorizationUses: Array<{ taskId: string; payloadHash: CinemaSha256; status: string; estimatedCost: CinemaQueueMoney; actualCost: CinemaQueueMoney; }>; } export interface CinemaSpendAuthorizationPort { verifyPaidTask(request: CinemaPaidTaskAuthorizationRequest): void; } export type CinemaProviderContractValidation = CinemaContractValidation;