DefinitelyTyped/types/pkgcloud/index.d.ts
Daniel Friesen 35b155efcc Partial implementation of pkgcloud types
This includes the storage API with config for amazon and azure.
2019-02-14 22:15:30 -08:00

132 lines
3.0 KiB
TypeScript

// Type definitions for pkgcloud 1.7
// Project: https://github.com/pkgcloud/pkgcloud#readme
// Definitions by: Daniel Friesen <https://github.com/dantman>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.1
/// <reference types="node" />
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;
}