// Type definitions for pkgcloud 1.7 // Project: https://github.com/pkgcloud/pkgcloud#readme // Definitions by: Daniel Friesen // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.1 /// export const version: string; export interface ClientError extends Error { provider?: Providers; method?: string; failCode?: string; statusCode?: number; href?: string; headers?: { [headerName: string]: string }; result?: any; } export type Providers = | 'amazon' | 'azure' | 'digitalocean' | 'google' | 'hp' | 'iriscouch' | 'joyent' | 'mongohq' | 'mongolab' | 'oneandone' | 'openstack' | 'rackspace' | 'redistogo' | 'telefonic'; export interface BaseProviderOptions { provider: Providers; } export interface AmazonProviderOptions { provider: 'amazon'; keyId: string; key: string; region?: string; } export interface AzureProviderOptions { provider: 'azure'; storageAccount: string; storageAccessKey: string; location?: string; } export type ProviderOptions = BaseProviderOptions & Partial< | AmazonProviderOptions | AzureProviderOptions >; /** * Storage */ export namespace storage { interface StorageUploadOptions { container: string; remote: string; } interface StorageDownloadOptions { container: string; remote: string; } interface Client { provider: string; config: ProviderOptions; protocol: string; getContainers( callback: (err: ClientError, containers: Container[]) => any, ): void; createContainer( options: any, callback: (err: ClientError, container: Container) => any, ): void; destroyContainer( containerName: string, callback: (err: ClientError) => any, ): void; getContainer( containerName: string, callback: (err: ClientError, container: Container) => any, ): void; upload(options: StorageUploadOptions): NodeJS.WriteStream; download(options: StorageDownloadOptions): NodeJS.ReadStream; getFiles( containerName: string, callback: (err: ClientError, files: File[]) => any, ): void; getFile( containerName: string, file: string, callback: (err: ClientError, file: File) => any, ): void; removeFile( containerName: string, file: string, callback: (err: ClientError) => any, ): void; // Logs on( eventName: string, callback: (message: string, object?: any) => any, ): void; } interface Container { // files: ? client: Client; } interface File { container: string; name: string; size: number; client: Client; } function createClient(options: ProviderOptions): Client; }