UNPKG

deep-package-manager

Version:
111 lines (89 loc) 2.99 kB
/** * Created by CCristi on 2/17/17. */ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.S3Service = undefined; var _AbstractService = require('./AbstractService'); var _deepCore = require('deep-core'); var _deepCore2 = _interopRequireDefault(_deepCore); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } class S3Service extends _AbstractService.AbstractService { /** * @param {Object[]} args */ constructor(...args) { super(...args); this._s3 = null; } /** * @returns {String} */ name() { return _deepCore2.default.AWS.Service.SIMPLE_STORAGE_SERVICE; } /** * @param {Object} s3 */ set s3(s3) { this._s3 = s3; } /** * @param {String} bucketName * @returns {Promise} */ addReplicationLambdaNotification(bucketName) { let lambdaService = this.replication.lambdaService; let s3ReplicationFuncName = lambdaService.s3ReplicationFunctionName; let payload = { Bucket: bucketName, NotificationConfiguration: { LambdaFunctionConfigurations: [{ Id: `Replication_${this.replication.hashCode}_${bucketName}`, Events: ['s3:ObjectCreated:Put', 's3:ObjectCreated:Post', 's3:ObjectCreated:Copy', 's3:ObjectRemoved:Delete'], LambdaFunctionArn: lambdaService.generateLambdaArn(s3ReplicationFuncName) }] } }; return this._retryableRequest(this._s3.putBucketNotificationConfiguration(payload), ['InvalidArgument']).promise(); } /** * @param {String} bucketName * @returns {Promise} */ removeBucketReplicationNotification(bucketName) { let lambdaService = this.replication.lambdaService; let s3ReplicationFuncArn = lambdaService.generateLambdaArn(lambdaService.s3ReplicationFunctionName); return this._s3.getBucketNotificationConfiguration({ Bucket: bucketName }).promise().then(configurationObj => { configurationObj.LambdaFunctionConfigurations = configurationObj.LambdaFunctionConfigurations.filter(lambdaCfg => lambdaCfg.LambdaFunctionArn !== s3ReplicationFuncArn); let updatePayload = { Bucket: bucketName, NotificationConfiguration: configurationObj }; return this._retryableRequest(this._s3.putBucketNotificationConfiguration(updatePayload), ['InvalidArgument']).promise(); }); } /** * @returns {Object} */ buildBucketReplicationMap() { let replMap = {}; let blueBuckets = this.blueConfig().buckets; let greenBuckets = this.greenConfig().buckets; for (let type in blueBuckets) { if (!blueBuckets.hasOwnProperty(type)) { continue; } let blueAwsName = blueBuckets[type].name; let greenAwsName = greenBuckets[type].name; replMap[blueAwsName.replace(/\./g, '_')] = greenAwsName; replMap[greenAwsName.replace(/\./g, '_')] = blueAwsName; } return replMap; } } exports.S3Service = S3Service;