import { S3Client } from '../aws/s3';
export * from './migrate';
export type ObjectStorageProvider = 'aws' | 'backblaze' | 'hetzner';
export interface ObjectStorageCredentials {
    accessKeyId: string;
    secretAccessKey: string;
    sessionToken?: string;
}
export interface ObjectStorageConfig {
    /** Storage provider. Defaults to `OBJECT_STORAGE_PROVIDER`/`STORAGE_PROVIDER` env, then `'aws'`. */
    provider?: ObjectStorageProvider;
    /** Region / location slug. Provider-specific default if omitted (see {@link resolveObjectStorage}). */
    region?: string;
    /** Endpoint host override (no scheme). Defaults to the provider's standard endpoint for the region. */
    endpoint?: string;
    /** Force path-style addressing. Defaults to virtual-hosted, which all three providers support. */
    forcePathStyle?: boolean;
    /** Explicit credentials. When omitted, resolved from provider-specific env vars (see below). */
    credentials?: ObjectStorageCredentials;
    /** AWS named profile (AWS provider only) — ignored by B2/Hetzner. */
    profile?: string;
}
export interface ResolvedObjectStorage {
    provider: ObjectStorageProvider;
    region: string;
    /** Endpoint host (no scheme), or undefined for AWS S3 (uses the default AWS endpoint). */
    endpoint?: string;
    forcePathStyle: boolean;
    credentials?: ObjectStorageCredentials;
    profile?: string;
    /** Public HTTPS base URL for a bucket (no trailing slash). */
    publicBaseUrl: (bucket: string) => string;
}
/** Standard endpoint host for a provider+region (undefined ⇒ use AWS default). */
export declare function providerEndpoint(provider: ObjectStorageProvider, region: string): string | undefined;
/**
 * Resolve a full object-storage configuration from explicit values + environment.
 * Pure and side-effect free — useful for diagnostics and for building both the
 * client and the public URLs consistently.
 */
export declare function resolveObjectStorage(config?: ObjectStorageConfig): ResolvedObjectStorage;
/**
 * Create an {@link S3Client} for any supported provider. AWS S3 with no config
 * behaves exactly as `new S3Client()` did before.
 */
export declare function createObjectStorageClient(config?: ObjectStorageConfig): S3Client;
