/** One listed object, in the shape the CLI's JSON gives and the callers read. */ export interface S3ObjectMeta { Key: string; Size?: number; LastModified?: string; } /** The subset of S3Client the reads use, so a test can stand one in. */ export interface S3SendClient { send(command: unknown): Promise; } type ClientFactory = (region: string | undefined) => S3SendClient; /** Test seam: replace the SDK client. Pass null to restore the real one. */ export declare function setS3ClientFactoryForTests(factory: ClientFactory | null): void; /** * List every object under `prefix`. The CLI auto-paginates; the SDK path * follows ContinuationToken itself. A bucket that does not exist throws an * error whose message carries `NoSuchBucket`, whichever side ran, so callers * that match on that text keep working. */ export declare function s3ListObjects(bucket: string, prefix: string, opts?: { maxBuffer?: number; timeout?: number; }): Promise; /** One object's body as text (`aws s3 cp s3://bucket/key -`). */ export declare function s3GetObjectText(bucket: string, key: string, opts?: { maxBuffer?: number; timeout?: number; }): Promise; /** Names of the buckets the credentials can list (`aws s3api list-buckets`). */ export declare function s3ListBuckets(opts?: { timeout?: number; }): Promise; export {};