namespace Tiku.Application.Storage; public interface IObjectStorageService { string ConfiguredDefaultProvider(); string ConfiguredDefaultBucket(); string NormalizeProvider(string? value, string? fallback = null); string ValidateObjectKey(Guid tenantId, string objectKey); string ValidateMimeType(string mimeType); long? ValidateFileSize(long? fileSizeBytes); void AssertUploadProvider(string provider); void AssertWritableLocation(StorageAssetLocation location); Task SignUploadAsync( ObjectStorageUploadSignRequest request, CancellationToken cancellationToken = default); Task SignDownloadAsync( ObjectStorageDownloadSignRequest request, CancellationToken cancellationToken = default); Task WriteObjectAsync( ObjectStorageWriteRequest request, CancellationToken cancellationToken = default); Task HeadObjectAsync( ObjectStorageHeadRequest request, CancellationToken cancellationToken = default); Task OpenReadAsync( ObjectStorageReadRequest request, CancellationToken cancellationToken = default) => Task.FromException(new NotSupportedException("Object storage read streaming is not configured.")); }