Merge pull request #23647 from barinbritva/minio-publish

Add typings for minio
This commit is contained in:
Daniel Rosenwasser
2018-02-15 11:36:33 -08:00
committed by GitHub
4 changed files with 369 additions and 0 deletions
+230
View File
@@ -0,0 +1,230 @@
// Type definitions for minio 4.0
// Project: https://github.com/minio/minio-js#readme
// Definitions by: Barin Britva <https://github.com/barinbritva>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
/// <reference types="node" />
// Import from dependencies
import { Stream } from 'stream';
import EventEmitter = NodeJS.EventEmitter;
// Exports only from typings
export type Region = 'us-east-1'|'us-west-1'|'us-west-2'|'eu-west-1'|'eu-central-1'|'ap-southeast-1'|'ap-northeast-1'|'ap-southeast-2'|'sa-east-1'|'cn-north-1';
export type PolicyValue = 'none'|'readonly'|'writeonly'|'readwrite';
export type NoResultCallback = (error: Error|null) => void;
export type ResultCallback<T> = (error: Error|null, result: T) => void;
export interface ClientOptions {
endPoint: string;
accessKey: string;
secretKey: string;
secure?: boolean;
port?: number;
region?: Region;
}
export interface BucketItemFromList {
name: string;
creationDate: Date;
}
export interface BucketItemCopy {
etag: string;
lastModified: Date;
}
export interface BucketItem {
name: string;
prefix: string;
size: number;
etag: string;
lastModified: Date;
}
export interface BucketItemStat {
size: number;
contentType: string;
etag: string;
// In documentation in this case string. Is it doc error?
lastModified: Date|string;
}
export interface IncompleteUploadedBucketItem {
key: string;
uploadId: string;
size: number;
}
export interface BucketStream<T> extends Stream {
on(event: 'data', listener: (item: T) => void): this;
}
export interface PostPolicyResult {
postURL: string;
formData: {
[key: string]: any;
};
}
// No need to export this. But without it - linter error.
export class TargetConfig {
setId(id: any): void;
addEvent(newEvent: any): void;
addFilterSuffix(suffix: any): void;
addFilterPrefix(prefix: any): void;
}
// Exports from library
export class Client {
constructor(options: ClientOptions);
// Bucket operations
makeBucket(bucketName: string, callback: NoResultCallback): void;
makeBucket(bucketName: string, region: Region, callback: NoResultCallback): void;
makeBucket(bucketName: string, region?: Region): Promise<void>;
listBuckets(callback: ResultCallback<BucketItemFromList[]>): void;
listBuckets(): Promise<BucketItemFromList>;
// Doc contains error - no boolean value in result
bucketExists(bucketName: string, callback: NoResultCallback): void;
bucketExists(bucketName: string): Promise<void>;
removeBucket(bucketName: string, callback: NoResultCallback): void;
removeBucket(bucketName: string): Promise<void>;
listObjects(bucketName: string, prefix?: string, recursive?: boolean): BucketStream<BucketItem>;
listObjectsV2(bucketName: string, prefix?: string, recursive?: boolean): BucketStream<BucketItem>;
listIncompleteUploads(bucketName: string, prefix?: string, recursive?: boolean): BucketStream<IncompleteUploadedBucketItem>;
// Object operations
getObject(bucketName: string, objectName: string, callback: ResultCallback<Stream>): void;
getObject(bucketName: string, objectName: string): Promise<Stream>;
getPartialObject(bucketName: string, objectName: string, offset: number, callback: ResultCallback<Stream>): void;
getPartialObject(bucketName: string, objectName: string, offset: number, length: number, callback: ResultCallback<Stream>): void;
getPartialObject(bucketName: string, objectName: string, offset: number, length?: number): Promise<Stream>;
fGetObject(bucketName: string, objectName: string, filePath: string, callback: NoResultCallback): void;
fGetObject(bucketName: string, objectName: string, filePath: string): Promise<void>;
putObject(bucketName: string, objectName: string, stream: Stream|Buffer|string, callback: ResultCallback<string>): void;
putObject(bucketName: string, objectName: string, stream: Stream|Buffer|string, size: number, callback: ResultCallback<string>): void;
putObject(bucketName: string, objectName: string, stream: Stream|Buffer|string, size: number, cotentType: string, callback: ResultCallback<string>): void;
putObject(bucketName: string, objectName: string, stream: Stream|Buffer|string, size?: number, cotentType?: string): Promise<string>;
fPutObject(bucketName: string, objectName: string, filePath: string, contentType: string, callback: ResultCallback<string>): void;
fPutObject(bucketName: string, objectName: string, filePath: string, contentType: string): Promise<string>;
copyObject(bucketName: string, objectName: string, sourceObject: string, conditions: CopyConditions, callback: ResultCallback<BucketItemCopy>): void;
copyObject(bucketName: string, objectName: string, sourceObject: string, conditions: CopyConditions): Promise<BucketItemCopy>;
statObject(bucketName: string, objectName: string, callback: ResultCallback<BucketItemStat>): void;
statObject(bucketName: string, objectName: string): Promise<BucketItemStat>;
removeObject(bucketName: string, objectName: string, callback: NoResultCallback): void;
removeObject(bucketName: string, objectName: string): Promise<void>;
removeIncompleteUpload(bucketName: string, objectName: string, callback: NoResultCallback): void;
removeIncompleteUpload(bucketName: string, objectName: string): Promise<void>;
// Presigned operations
presignedUrl(httpMethod: string, bucketName: string, objectName: string, callback: ResultCallback<string>): void;
presignedUrl(httpMethod: string, bucketName: string, objectName: string, expiry: number, callback: ResultCallback<string>): void;
presignedUrl(httpMethod: string, bucketName: string, objectName: string, expiry: number, reqParams: { [key: string]: any; }, callback: ResultCallback<string>): void;
presignedUrl(httpMethod: string, bucketName: string, objectName: string, expiry?: number, reqParams?: { [key: string]: any; }): Promise<string>;
presignedGetObject(bucketName: string, objectName: string, callback: ResultCallback<string>): void;
presignedGetObject(bucketName: string, objectName: string, expiry: number, callback: ResultCallback<string>): void;
presignedGetObject(bucketName: string, objectName: string, expiry?: number): Promise<string>;
presignedPutObject(bucketName: string, objectName: string, callback: ResultCallback<string>): void;
presignedPutObject(bucketName: string, objectName: string, expiry: number, callback: ResultCallback<string>): void;
presignedPutObject(bucketName: string, objectName: string, expiry?: number): Promise<string>;
presignedPostPolicy(policy: PostPolicy, callback: ResultCallback<PostPolicyResult>): void;
presignedPostPolicy(policy: PostPolicy): Promise<PostPolicyResult>;
// Bucket Policy & Notification operations
getBucketNotification(bucketName: string, callback: ResultCallback<NotificationConfig>): void;
getBucketNotification(bucketName: string): Promise<NotificationConfig>;
setBucketNotification(bucketName: string, bucketNotificationConfig: NotificationConfig, callback: NoResultCallback): void;
setBucketNotification(bucketName: string, bucketNotificationConfig: NotificationConfig): Promise<void>;
removeAllBucketNotification(bucketName: string, callback: NoResultCallback): void;
removeAllBucketNotification(bucketName: string): Promise<void>;
// todo #low Specify events
listenBucketNotification(bucketName: string, prefix: string, suffix: string, events: string[]): EventEmitter;
getBucketPolicy(bucketName: string, objectPrefix: string, callback: ResultCallback<PolicyValue>): void;
getBucketPolicy(bucketName: string, objectPrefix: string): Promise<PolicyValue>;
setBucketPolicy(bucketName: string, objectPrefix: string, bucketPolice: PolicyValue, callback: NoResultCallback): void;
setBucketPolicy(bucketName: string, objectPrefix: string, bucketPolice: PolicyValue): Promise<void>;
// Other
newPostPolicy(): PostPolicy;
}
export namespace Policy {
const NONE: 'none';
const READONLY: 'readonly';
const WRITEONLY: 'writeonly';
const READWRITE: 'readwrite';
}
export class CopyConditions {
setModified(date: Date): void;
setUnmodified(date: Date): void;
setMatchETag(etag: string): void;
setMatchETagExcept(etag: string): void;
}
export class PostPolicy {
setExpires(date: Date): void;
setKey(objectName: string): void;
setKeyStartsWith(prefix: string): void;
setBucket(bucketName: string): void;
setContentType(type: string): void;
setContentLengthRange(min: number, max: number): void;
}
export class NotificationPoller extends EventEmitter {
stop(): void;
start(): void;
// must to be public?
checkForChanges(): void;
}
export class NotificationConfig {
add(target: TopicConfig|QueueConfig|CloudFunctionConfig): void;
}
export class TopicConfig extends TargetConfig {
constructor(arn: string);
}
export class QueueConfig extends TargetConfig {
constructor(arn: string);
}
export class CloudFunctionConfig extends TargetConfig {
constructor(arn: string);
}
export function buildARN(partition: string, service: string, region: string, accountId: string, resource: string): string;
export const ObjectCreatedAll: string; // s3:ObjectCreated:*'
export const ObjectCreatedPut: string; // s3:ObjectCreated:Put
export const ObjectCreatedPost: string; // s3:ObjectCreated:Post
export const ObjectCreatedCopy: string; // s3:ObjectCreated:Copy
export const ObjectCreatedCompleteMultipartUpload: string; // sh:ObjectCreated:CompleteMultipartUpload
export const ObjectRemovedAll: string; // s3:ObjectRemoved:*
export const ObjectRemovedDelete: string; // s3:ObjectRemoved:Delete
export const ObjectRemovedDeleteMarkerCreated: string; // s3:ObjectRemoved:DeleteMarkerCreated
export const ObjectReducedRedundancyLostObject: string; // s3:ReducedRedundancyLostObject
+114
View File
@@ -0,0 +1,114 @@
import { Stream } from 'stream';
import Minio = require('minio');
const minio = new Minio.Client({
endPoint: 'localhost',
port: 9000,
secure: false,
accessKey: 'iV7RAFOtxF',
secretKey: 'Go1hhOkXnl',
});
minio.makeBucket('testBucket', (error: Error|null) => { console.log(error); });
minio.makeBucket('testBucket', 'ap-southeast-2', (error: Error|null) => { console.log(error); });
minio.makeBucket('testBucket');
minio.makeBucket('testBucket', 'eu-west-1');
minio.listBuckets((error: Error|null, bucketList: Minio.BucketItemFromList[]) => { console.log(error, bucketList); });
minio.listBuckets();
minio.bucketExists('testBucket', (error: Error|null) => { console.log(error); });
minio.bucketExists('testBucket');
minio.removeBucket('testBucket', (error: Error|null) => { console.log(error); });
minio.removeBucket('testBucket');
minio.listObjects('testBucket');
minio.listObjects('testBucket', 'image_');
minio.listObjects('testBucket', 'audio_', true);
minio.listObjectsV2('testBucket');
minio.listObjectsV2('testBucket', 'image_');
minio.listObjectsV2('testBucket', 'audio_', true);
minio.listIncompleteUploads('testBucket');
minio.listIncompleteUploads('testBucket', 'image_');
minio.listIncompleteUploads('testBucket', 'audio_', true);
minio.getObject('testBucket', 'hello.jpg', (error: Error|null, objectStream: Stream) => { console.log(error, objectStream); });
minio.getObject('testBucket', 'hello.jpg');
minio.getPartialObject('testBucket', 'hello.jpg', 10, (error: Error|null, objectStream: Stream) => { console.log(error, objectStream); });
minio.getPartialObject('testBucket', 'hello.jpg', 10, 20, (error: Error|null, objectStream: Stream) => { console.log(error, objectStream); });
minio.getPartialObject('testBucket', 'hello.jpg', 10);
minio.getPartialObject('testBucket', 'hello.jpg', 10, 20);
minio.fGetObject('testBucket', 'hello.jpg', 'file/path', (error: Error|null) => { console.log(error); });
minio.fGetObject('testBucket', 'hello.jpg', 'file/path');
minio.putObject('testBucket', 'hello.jpg', new Stream(), (error: Error|null, etag: string) => { console.log(error, etag); });
minio.putObject('testBucket', 'hello.jpg', new Buffer('string'), 100, (error: Error|null, etag: string) => { console.log(error, etag); });
minio.putObject('testBucket', 'hello.txt', 'hello.txt content', 100, 'text/plain', (error: Error|null, etag: string) => { console.log(error, etag); });
minio.putObject('testBucket', 'hello.jpg', new Stream());
minio.putObject('testBucket', 'hello.jpg', new Buffer('string'), 100);
minio.putObject('testBucket', 'hello.txt', 'hello.txt content', 100, 'text/plain');
minio.fPutObject('testBucket', 'hello.jpg', 'file/path', 'image/jpg', (error: Error|null, etag: string) => { console.log(error, etag); });
minio.fPutObject('testBucket', 'hello.jpg', 'file/path', 'image/jpg');
const conditions = new Minio.CopyConditions();
conditions.setMatchETag('bd891862ea3e22c93ed53a098218791d');
minio.copyObject('testBucket', 'copy-of-hello.jpg', 'hello.jpg', conditions, (error: Error|null, item: Minio.BucketItemCopy) => { console.log(error, item); });
minio.copyObject('testBucket', 'copy-of-hello.jpg', 'hello.jpg', conditions);
minio.statObject('testBucket', 'hello.jpg', (error: Error|null, stat: Minio.BucketItemStat) => { console.log(error, stat); });
minio.statObject('testBucket', 'hello.jpg');
minio.removeObject('testBucket', 'hello.jpg', (error: Error|null) => { console.log(error); });
minio.removeObject('testBucket', 'hello.jpg');
minio.removeIncompleteUpload('testBucket', 'hello.jpg', (error: Error|null) => { console.log(error); });
minio.removeIncompleteUpload('testBucket', 'hello.jpg');
minio.presignedUrl('GET', 'testBucket', 'hello.jpg', (error: Error|null, url: string) => { console.log(error, url); });
minio.presignedUrl('GET', 'testBucket', 'hello.jpg', 84600, (error: Error|null, url: string) => { console.log(error, url); });
minio.presignedUrl('GET', 'testBucket', 'hello.jpg', 84600, { prefix: 'data', 'max-keys': 1000 }, (error: Error|null, url: string) => { console.log(error, url); });
minio.presignedUrl('GET', 'testBucket', 'hello.jpg');
minio.presignedUrl('GET', 'testBucket', 'hello.jpg', 84600);
minio.presignedUrl('GET', 'testBucket', 'hello.jpg', 84600, { prefix: 'data', 'max-keys': 1000 });
minio.presignedGetObject('testBucket', 'hello.jpg', (error: Error|null, url: string) => { console.log(error, url); });
minio.presignedGetObject('testBucket', 'hello.jpg', 84600, (error: Error|null, url: string) => { console.log(error, url); });
minio.presignedGetObject('testBucket', 'hello.jpg');
minio.presignedGetObject('testBucket', 'hello.jpg', 84600);
minio.presignedPutObject('testBucket', 'hello.jpg', (error: Error|null, url: string) => { console.log(error, url); });
minio.presignedPutObject('testBucket', 'hello.jpg', 84600, (error: Error|null, url: string) => { console.log(error, url); });
minio.presignedPutObject('testBucket', 'hello.jpg');
minio.presignedPutObject('testBucket', 'hello.jpg', 84600);
const policy = minio.newPostPolicy();
policy.setBucket('testBucket');
policy.setKey('hello.jpg');
minio.presignedPostPolicy(policy, (error: Error|null, data: Minio.PostPolicyResult) => { console.log(error, data); });
minio.presignedPostPolicy(policy);
minio.getBucketNotification('testBucket', (error: Error|null, config: Minio.NotificationConfig) => { console.log(error, config); });
minio.getBucketNotification('testBucket');
const notificationConfig = new Minio.NotificationConfig();
const arn: string = Minio.buildARN('aws', 'sns', 'us-west-2', '408065449417', 'resource');
const topic = new Minio.TopicConfig(arn);
notificationConfig.add(topic);
minio.setBucketNotification('testBucket', notificationConfig, (error: Error|null) => { console.log(error); });
minio.setBucketNotification('testBucket', notificationConfig);
minio.removeAllBucketNotification('testBucket', (error: Error|null) => { console.log(error); });
minio.removeAllBucketNotification('testBucket');
minio.listenBucketNotification('testBucket', 'pref_', '_suf', [ Minio.ObjectCreatedAll ]);
minio.getBucketPolicy('testBucket', 'pref_', (error: Error|null, policy: Minio.PolicyValue) => { console.log(error, policy); });
minio.getBucketPolicy('testBucket', '');
minio.setBucketPolicy('testBucket', '', Minio.Policy.READWRITE, (error: Error|null) => { console.log(error); });
minio.setBucketPolicy('testBucket', 'pref_', Minio.Policy.WRITEONLY);
+24
View File
@@ -0,0 +1,24 @@
{
"compilerOptions": {
"module": "commonjs",
"lib": [
"es6"
],
"noImplicitAny": true,
"noImplicitThis": true,
"strictNullChecks": true,
"baseUrl": "../",
"typeRoots": [
"../"
],
"types": [],
"noEmit": true,
"forceConsistentCasingInFileNames": true,
"esModuleInterop": true,
"strictFunctionTypes": true
},
"files": [
"index.d.ts",
"minio-tests.ts"
]
}
+1
View File
@@ -0,0 +1 @@
{ "extends": "dtslint/dt.json" }