Minio module for the Hapiness framework.
$ npm install --save @hapiness/core @hapiness/minio rxjs
or
$ yarn add @hapiness/core @hapiness/minio rxjs"dependencies": {"@hapiness/core": "^1.3.0","@hapiness/minio": "^1.0.0","rxjs": "^5.5.5"//...}//...This module provide an Hapiness extension for Minio.
To use it, simply register it during the bootstrap step of your project and provide the MinioExt with its config
@HapinessModule({version: '1.0.0',providers: [],declarations: [],imports: [MinioModule]})classMyAppimplementsOnStart{constructor(){}onStart(){}}Hapiness.bootstrap(MyApp,[/* ... */MinioExt.setConfig({connection: {endPoint: 'minio.mydomain.com',port: 443,useSSL: true,accessKey: 'access_key',secretKey: 'secret_key',region: 'us-east-1'},})]).catch(err=>{/* ... */});You need to provide the connection information under the connection key in the config object. If you dont provide a region in the connection object, nor when calling functions that could use one, the value us-east-1 will be used.
Allowed region values are:
- us-east-1
- us-west-1
- us-west-2
- eu-west-1
- eu-central-1
- ap-southeast-1
- ap-southeast-2
- ap-northeast-1
- sa-east-1
- cn-north-1
To use minio, you need to inject inside your providers the MinioService.
NOTE: all functions in the api return rxjs Observable
classFooProvider{constructor(private_minio: MinioService){}createBucketIfNotExists(bucketName: string): Observable<boolean>{returnthis._minio.bucketExists(bucketName).switchMap(_=>!!_ ?
Observable.of(false) :
this._minio.makeBucket(bucketName));}}NOTES:
- All functions in the api return
rxjsObservable - We followed the
minionodejslib, so for more information, please refer to the official documentation
/* Get a new Copy Condition instance */publicnewMinioCopyCondition(): minio.CopyConditions;/* Get a new Post Policy instance */publicnewMinioPostPolicy(): minio.PostPolicy;/* Create a bucket */publicmakeBucket(bucketName: string,region?: minio.Region): Observable<boolean>;/* Check if a bucket already exists */publicbucketExists(bucketName: string): Observable<boolean>;/* List all buckets */publiclistBuckets(): Observable<minio.BucketItemFromList[]>;/* Remove a bucket given a bucketName */publicremoveBucket(bucketName: string): Observable<boolean>;/* Lists all objects in a bucket */publiclistObjects(bucketName: string,prefix: string='',recursive: boolean=false): Observable<minio.BucketItem>;/* Lists all objects in a bucket using S3 listing objects V2 API */publiclistObjectsV2(bucketName: string,prefix: string='',recursive: boolean=false): Observable<minio.BucketItem>;/* Lists partially uploaded objects in a bucket */publiclistIncompleteUploads(bucketName: string,prefix: string='',recursive: boolean=false):
Observable<minio.IncompleteUploadedBucketItem>;/* Downloads an object as a stream */publicgetObject(bucketName: string,objectName: string): Observable<Stream>;/* Downloads the specified range bytes of an object as a stream */publicgetPartialObject(bucketName: string,objectName: string,offset: number,length: number=0):
Observable<Stream>;/* Downloads and saves the object as a file in the local filesystem */publicfGetObject(bucketName: string,objectName: string,filePath: string): Observable<boolean>;/* Uploads an object from a stream/Buffer */publicputObject(bucketName: string,objectName: string,stream: Stream|string|Buffer,size?: number,metadata?: minio.ItemBucketMetadata|string): Observable<string>;/* Uploads contents from a file to objectName */publicfPutObject(bucketName: string,objectName: string,filePath: string,metadata?: minio.ItemBucketMetadata|string): Observable<string>;/* Copy a source object into a new object in the specied bucket */publiccopyObject(bucketName: string,objectName: string,sourceObject: string,conditions: minio.CopyConditions):
Observable<minio.BucketItemCopy>;/* Gets metadata of an object */publicstatObject(bucketName: string,objectName: string): Observable<minio.BucketItemStat>;/* Removes an object */publicremoveObject(bucketName: string,objectName: string): Observable<boolean>;/* Remove multiple objects of a bucket */publicremoveObjects(bucketName: string,objectNames: string[]): Observable<boolean>;/* Removes a partially uploaded object */publicremoveIncompleteUpload(bucketName: string,objectName: string): Observable<boolean>;/* * Generate a presigned URLs for temporary download/upload access to private objects. * Generates a presigned URL for the provided HTTP method, 'httpMethod'. * Browsers/Mobile clients may point to this URL to directly download objects even if the bucket is private. * This presigned URL can have an associated expiration time in seconds after which the URL is no longer valid. * The default value is 7 days. */publicpresignedUrl(httpMethod: string,bucketName: string,objectName: string,expiry: number=604800,reqParams?: {[key: string]: any;}): Observable<string>;/* * Generates a presigned URL for HTTP GET operations. * Browsers/Mobile clients may point to this URL to directly download objects even if the bucket is private. * This presigned URL can have an associated expiration time in seconds after which the URL is no longer valid. * The default expiry is set to 7 days */publicpresignedGetObject(bucketName: string,objectName: string,expiry: number=604800): Observable<string>;/* * Generates a presigned URL for HTTP PUT operations. * Browsers/Mobile clients may point to this URL to upload objects directly to a bucket even if it is private. * This presigned URL can have an associated expiration time in seconds after which the URL is no longer valid. * The default expiry is set to 7 days */publicpresignedPutObject(bucketName: string,objectName: string,expiry: number=604800): Observable<string>;/* * Allows setting policy conditions to a presigned URL for POST operations. * Policies such as bucket name to receive object uploads, key name prefixes, expiry policy may be set */publicpresignedPostPolicy(policy: minio.PostPolicy): Observable<minio.PostPolicyResult>;/* * Fetch the notification configuration stored in the S3 provider and that belongs to * the specified bucket name */publicgetBucketNotification(bucketName: string): Observable<minio.NotificationConfig>;/* * Upload a user-created notification configuration and associate it to the specified bucket name */publicsetBucketNotification(bucketName: string,bucketNotificationConfig: any): Observable<boolean>;/* * Remove the bucket notification configuration associated to the specified bucket */publicremoveAllBucketNotification(bucketName: string): Observable<boolean>;/* * Listen for notifications on a bucket. * Additionally one can provider filters for prefix, suffix and events. * There is no prior set bucket notification needed to use this API. * This is an Minio extension API where unique identifiers are regitered and unregistered * by the server automatically based on incoming requests */publiclistenBucketNotification(bucketName: string,prefix: string,suffix: string,events: string[]): EventEmitter;/* * Get the bucket policy associated with the specified bucket. * If objectPrefix is not empty, the bucket policy will be filtered based on object permissions as well. */publicgetBucketPolicy(bucketName: string): Observable<string>;/* * Set the bucket policy associated with the specified bucket. * If objectPrefix is not empty, the bucket policy will only be assigned to objects that fit the given prefix */publicsetBucketPolicy(bucketName: string,bucketPolicy: string): Observable<boolean>;To set up your development environment:
- clone the repo to your workspace,
- in the shell
cdto the main folder, - hit
npm or yarn install, - run
npm or yarn run test.- It will lint the code and execute all tests.
- The test coverage report can be viewed from
./coverage/lcov-report/index.html.
- v2.0.3 (2020-11-04)
- Update the supported region enums
- v2.0.2 (2019-02-14 🌹)
- Update input types of putObject to Stream
- v2.0.1 (2019-01-29)
- fixed 'content-type' key in metadata.
- v2.0.0 (2018-10-16)
- Upgraded minio to 7.0.1
- Now use "useSSL" instead of "secure"
- Integrated minio's types
- Added Functions:
- removeBucket()
- removeObjects()
- PresignedUrl()
- Renamed newMinioPostPolicy() to newPostPolicy()
- Updated README
- v1.0.0 (2017-12-14)
MinIOmodule implementation- Related tests
- Documentation
| Julien Fauville | Antoine Gomez | Sébastien Ritz | Nicolas Jessel | Florent Bennani |
Copyright (c) 2017 Hapiness Licensed under the MIT license.

