import type { Readable } from "node:stream"; import { type OpenFileLimits } from "../contracts.js"; import { type ResolvedSourceFile, type StoredFileMetadata } from "../storage/repository.js"; export interface UploadServiceOptions { readonly resolveWorkspace: (sessionId: string) => Promise; readonly limits?: Readonly; readonly createUploadId?: () => string; readonly createFileId?: () => string; readonly now?: () => Date; } export interface PreparedUpload { readonly uploadId: string; readonly fileId: string; readonly size: number; } export interface StreamedUpload { readonly received: number; readonly sourceSha256: string; } export declare class UploadService { readonly limits: Readonly; private readonly resolveWorkspace; private readonly createUploadId; private readonly createFileId; private readonly now; private readonly activeWrites; constructor(options: UploadServiceOptions); prepare(input: { readonly sessionId: string; readonly name: string; readonly size: number; readonly declaredType?: string | null; }): Promise; write(input: { readonly sessionId: string; readonly uploadId: string; readonly bytes: Readable; readonly signal?: AbortSignal; }): Promise; commit(input: { readonly sessionId: string; readonly uploadId: string; readonly expectedSha256?: string; }): Promise; cancel(input: { readonly sessionId: string; readonly uploadId: string; }): Promise; adopt(input: { readonly sessionId: string; readonly fileId: string; }): Promise; resolve(input: { readonly sessionId: string; readonly fileRef: string; }): Promise; resolveSource(input: { readonly sessionId: string; readonly fileRef: string; }): Promise; private repository; private recordPath; private loadRecord; private saveRecord; private assertRecordSession; private listRecords; }