import type { TodosS3StorageConfig } from "./config.js";
export interface TodosAwsCredentials {
    accessKeyId: string;
    secretAccessKey: string;
    sessionToken?: string;
}
export interface TodosS3ArtifactStoreOptions {
    config: TodosS3StorageConfig;
    credentials: TodosAwsCredentials;
    fetch?: typeof fetch;
    now?: () => Date;
}
export interface PutTodosS3ObjectInput {
    key: string;
    body: BodyInit | Uint8Array | string;
    contentType?: string;
    metadata?: Record<string, string>;
}
export interface TodosS3ObjectRef {
    bucket: string;
    key: string;
    url: string;
    etag?: string;
}
export interface TodosS3ArtifactStore {
    objectKey(relativePath: string): string;
    objectUrl(relativePath: string): URL;
    putObject(input: PutTodosS3ObjectInput): Promise<TodosS3ObjectRef>;
    getObject(relativePath: string): Promise<Response>;
    deleteObject(relativePath: string): Promise<void>;
}
export declare function createTodosS3ArtifactStore(options: TodosS3ArtifactStoreOptions): TodosS3ArtifactStore;
export declare function buildS3ObjectKey(config: Pick<TodosS3StorageConfig, "prefix">, relativePath: string): string;
export declare function buildS3ObjectUrl(config: TodosS3StorageConfig, key: string): URL;
export interface SignAwsV4RequestInput {
    method: string;
    url: URL;
    region: string;
    service: string;
    headers?: Record<string, string>;
    body?: Uint8Array;
    credentials: TodosAwsCredentials;
    now: Date;
}
export interface SignedAwsV4Request {
    headers: Record<string, string>;
    canonicalRequest: string;
    stringToSign: string;
}
export declare function signAwsV4Request(input: SignAwsV4RequestInput): SignedAwsV4Request;
//# sourceMappingURL=s3-artifacts.d.ts.map