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]
})
class MyApp implements OnStart {
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
class FooProvider {
constructor(private _minio: MinioService) {}
createBucketIfNotExists(bucketName: string): Observable<boolean> {
return this
._minio
.bucketExists(bucketName)
.switchMap(
_ => !!_ ?
Observable.of(false) :
this._minio.makeBucket(bucketName)
);
}
}
NOTES:
- All functions in the api return
rxjs
Observable - We followed the
minio
nodejs
lib, so for more information, please refer to the official documentation
/* Get a new Copy Condition instance */
public newMinioCopyCondition(): minio.CopyConditions;
/* Get a new Post Policy instance */
public newMinioPostPolicy(): minio.PostPolicy;
/* Create a bucket */
public makeBucket(bucketName: string, region?: minio.Region): Observable<boolean>;
/* Check if a bucket already exists */
public bucketExists(bucketName: string): Observable<boolean>;
/* List all buckets */
public listBuckets(): Observable<minio.BucketItemFromList[]>;
/* Remove a bucket given a bucketName */
public removeBucket(bucketName: string): Observable<boolean>;
/* Lists all objects in a bucket */
public listObjects(bucketName: string, prefix: string = '', recursive: boolean = false): Observable<minio.BucketItem>;
/* Lists all objects in a bucket using S3 listing objects V2 API */
public listObjectsV2(bucketName: string, prefix: string = '', recursive: boolean = false): Observable<minio.BucketItem>;
/* Lists partially uploaded objects in a bucket */
public listIncompleteUploads(bucketName: string, prefix: string = '', recursive: boolean = false):
Observable<minio.IncompleteUploadedBucketItem>;
/* Downloads an object as a stream */
public getObject(bucketName: string, objectName: string): Observable<Stream>;
/* Downloads the specified range bytes of an object as a stream */
public getPartialObject(bucketName: string, objectName: string, offset: number, length: number = 0):
Observable<Stream>;
/* Downloads and saves the object as a file in the local filesystem */
public fGetObject(bucketName: string, objectName: string, filePath: string): Observable<boolean>;
/* Uploads an object from a stream/Buffer */
public putObject(bucketName: string, objectName: string, stream: Stream | string | Buffer, size?: number, metadata?: minio.ItemBucketMetadata | string): Observable<string>;
/* Uploads contents from a file to objectName */
public fPutObject(bucketName: string, objectName: string, filePath: string, metadata?: minio.ItemBucketMetadata | string): Observable<string>;
/* Copy a source object into a new object in the specied bucket */
public copyObject(bucketName: string, objectName: string, sourceObject: string, conditions: minio.CopyConditions):
Observable<minio.BucketItemCopy>;
/* Gets metadata of an object */
public statObject(bucketName: string, objectName: string): Observable<minio.BucketItemStat>;
/* Removes an object */
public removeObject(bucketName: string, objectName: string): Observable<boolean>;
/* Remove multiple objects of a bucket */
public removeObjects(bucketName: string, objectNames: string[]): Observable<boolean>;
/* Removes a partially uploaded object */
public removeIncompleteUpload(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.
*/
public presignedUrl(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
*/
public presignedGetObject(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
*/
public presignedPutObject(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
*/
public presignedPostPolicy(policy: minio.PostPolicy): Observable<minio.PostPolicyResult>;
/*
* Fetch the notification configuration stored in the S3 provider and that belongs to
* the specified bucket name
*/
public getBucketNotification(bucketName: string): Observable<minio.NotificationConfig>;
/*
* Upload a user-created notification configuration and associate it to the specified bucket name
*/
public setBucketNotification(bucketName: string, bucketNotificationConfig: any): Observable<boolean>;
/*
* Remove the bucket notification configuration associated to the specified bucket
*/
public removeAllBucketNotification(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
*/
public listenBucketNotification(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.
*/
public getBucketPolicy(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
*/
public setBucketPolicy(bucketName: string, bucketPolicy: string): Observable<boolean>;
To set up your development environment:
- clone the repo to your workspace,
- in the shell
cd
to 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)
MinIO
module implementation- Related tests
- Documentation
Julien Fauville | Antoine Gomez | Sébastien Ritz | Nicolas Jessel | Florent Bennani |
Copyright (c) 2017 Hapiness Licensed under the MIT license.