/** * Storage instance options */ import { ICredentials } from '@aws-amplify/core'; import { StorageProvider, StorageProviderApi, AWSS3Provider, StorageProviderWithCopy, S3ProviderGetOuput, S3ProviderRemoveOutput, S3ProviderListOutput, S3ProviderCopyOutput, S3ProviderPutOutput } from '../'; declare type Tail = ((...t: T) => void) extends (h: any, ...r: infer R) => void ? R : never; declare type Last = T[Exclude>]; declare type LastParameter any> = Last>; export interface StorageOptions { credentials?: ICredentials; region?: string; level?: StorageAccessLevel; bucket?: string; provider?: string; /** * Custom mapping of your prefixes. * For example, customPrefix: { public: 'myPublicPrefix' } will make public level operations access 'myPublicPrefix/' * instead of the default 'public/'. */ customPrefix?: CustomPrefix; /** * if set to true, automatically sends Storage Events to Amazon Pinpoint **/ track?: boolean; dangerouslyConnectToHttpEndpointForTesting?: boolean; } export declare type StorageAccessLevel = 'public' | 'protected' | 'private'; export declare type CustomPrefix = { [key in StorageAccessLevel]?: string; }; export declare type StorageCopyTarget = { key: string; level?: string; identityId?: string; }; export declare type StorageCopySource = StorageCopyTarget; export declare type StorageCopyDestination = Omit; /** * If provider is AWSS3, provider doesn't have to be specified since it's the default, else it has to be passed into * config. */ declare type StorageOperationConfig = ReturnType extends 'AWSS3' ? LastParameter : T extends StorageProviderWithCopy ? LastParameter & { provider: ReturnType; } : LastParameter]> & { provider: ReturnType; }; export declare type StorageGetConfig = T extends StorageProvider ? StorageOperationConfig : StorageOperationConfigMap, T>; export declare type StoragePutConfig = T extends StorageProvider ? StorageOperationConfig : StorageOperationConfigMap, T>; export declare type StorageRemoveConfig = T extends StorageProvider ? StorageOperationConfig : StorageOperationConfigMap, T>; export declare type StorageListConfig = T extends StorageProvider ? StorageOperationConfig : StorageOperationConfigMap, T>; export declare type StorageCopyConfig = T extends StorageProviderWithCopy ? StorageOperationConfig : StorageOperationConfigMap, T>; /** * Utility type for checking if the generic type is a provider or a Record that has the key 'provider'. * If it's a provider, check if it's the S3 Provider, use the default type else use the generic's 'get' method * return type. * If it's a Record, check if provider is 'AWSS3', use the default type else use any. */ declare type PickProviderOutput = T extends StorageProvider ? T['getProviderName'] extends 'AWSS3' ? DefaultOutput : T extends StorageProviderWithCopy ? ReturnType : ReturnType]> : T extends { provider: string; } ? T extends { provider: 'AWSS3'; } ? DefaultOutput : Promise : DefaultOutput; export declare type StorageGetOutput> = PickProviderOutput>, T, 'get'>; export declare type StoragePutOutput = PickProviderOutput, T, 'put'>; export declare type StorageRemoveOutput = PickProviderOutput, T, 'remove'>; export declare type StorageListOutput = PickProviderOutput, T, 'list'>; export declare type StorageCopyOutput = PickProviderOutput, T, 'copy'>; /** * Utility type to allow custom provider to use any config keys, if provider is set to AWSS3 then it should use * AWSS3Provider's config. */ export declare type StorageOperationConfigMap> = T extends { provider: string; } ? T extends { provider: 'AWSS3'; } ? Default : T & { provider: string; } : Default; export {};