94 lines
7.4 KiB
JavaScript

'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _isStream = require('is-stream');
var _isStream2 = _interopRequireDefault(_isStream);
var _bluebird = require('bluebird');
var _bluebird2 = _interopRequireDefault(_bluebird);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var AttachmentManager = function () {
function AttachmentManager(onAttachment) {
(0, _classCallCheck3.default)(this, AttachmentManager);
this.onAttachment = onAttachment;
}
(0, _createClass3.default)(AttachmentManager, [{
key: 'create',
value: function create(data, mediaType, callback) {
if (Buffer.isBuffer(data)) {
if (!mediaType) {
throw Error('Buffer attachments must specify a media type');
}
this.createBufferAttachment(data, mediaType);
} else if (_isStream2.default.readable(data)) {
if (!mediaType) {
throw Error('Stream attachments must specify a media type');
}
return this.createStreamAttachment(data, mediaType, callback);
} else if (typeof data === 'string') {
if (!mediaType) {
mediaType = 'text/plain';
}
this.createStringAttachment(data, { type: mediaType });
} else {
throw Error('Invalid attachment data: must be a buffer, readable stream, or string');
}
}
}, {
key: 'createBufferAttachment',
value: function createBufferAttachment(data, mediaType) {
this.createStringAttachment(data.toString('base64'), {
encoding: 'base64',
type: mediaType
});
}
}, {
key: 'createStreamAttachment',
value: function createStreamAttachment(data, mediaType, callback) {
var _this = this;
var promise = new _bluebird2.default(function (resolve, reject) {
var buffers = [];
data.on('data', function (chunk) {
buffers.push(chunk);
});
data.on('end', function () {
_this.createBufferAttachment(Buffer.concat(buffers), mediaType);
resolve();
});
data.on('error', reject);
});
if (callback) {
promise.then(callback, callback);
} else {
return promise;
}
}
}, {
key: 'createStringAttachment',
value: function createStringAttachment(data, media) {
this.onAttachment({ data: data, media: media });
}
}]);
return AttachmentManager;
}();
exports.default = AttachmentManager;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW50aW1lL2F0dGFjaG1lbnRfbWFuYWdlci9pbmRleC5qcyJdLCJuYW1lcyI6WyJBdHRhY2htZW50TWFuYWdlciIsIm9uQXR0YWNobWVudCIsImRhdGEiLCJtZWRpYVR5cGUiLCJjYWxsYmFjayIsIkJ1ZmZlciIsImlzQnVmZmVyIiwiRXJyb3IiLCJjcmVhdGVCdWZmZXJBdHRhY2htZW50IiwicmVhZGFibGUiLCJjcmVhdGVTdHJlYW1BdHRhY2htZW50IiwiY3JlYXRlU3RyaW5nQXR0YWNobWVudCIsInR5cGUiLCJ0b1N0cmluZyIsImVuY29kaW5nIiwicHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJidWZmZXJzIiwib24iLCJwdXNoIiwiY2h1bmsiLCJjb25jYXQiLCJ0aGVuIiwibWVkaWEiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7QUFDQTs7Ozs7O0lBRXFCQSxpQjtBQUNuQiw2QkFBWUMsWUFBWixFQUEwQjtBQUFBOztBQUN4QixTQUFLQSxZQUFMLEdBQW9CQSxZQUFwQjtBQUNEOzs7OzJCQUVNQyxJLEVBQU1DLFMsRUFBV0MsUSxFQUFVO0FBQ2hDLFVBQUlDLE9BQU9DLFFBQVAsQ0FBZ0JKLElBQWhCLENBQUosRUFBMkI7QUFDekIsWUFBSSxDQUFDQyxTQUFMLEVBQWdCO0FBQ2QsZ0JBQU1JLE1BQU0sOENBQU4sQ0FBTjtBQUNEO0FBQ0QsYUFBS0Msc0JBQUwsQ0FBNEJOLElBQTVCLEVBQWtDQyxTQUFsQztBQUNELE9BTEQsTUFLTyxJQUFJLG1CQUFTTSxRQUFULENBQWtCUCxJQUFsQixDQUFKLEVBQTZCO0FBQ2xDLFlBQUksQ0FBQ0MsU0FBTCxFQUFnQjtBQUNkLGdCQUFNSSxNQUFNLDhDQUFOLENBQU47QUFDRDtBQUNELGVBQU8sS0FBS0csc0JBQUwsQ0FBNEJSLElBQTVCLEVBQWtDQyxTQUFsQyxFQUE2Q0MsUUFBN0MsQ0FBUDtBQUNELE9BTE0sTUFLQSxJQUFJLE9BQU9GLElBQVAsS0FBZ0IsUUFBcEIsRUFBOEI7QUFDbkMsWUFBSSxDQUFDQyxTQUFMLEVBQWdCO0FBQ2RBLHNCQUFZLFlBQVo7QUFDRDtBQUNELGFBQUtRLHNCQUFMLENBQTRCVCxJQUE1QixFQUFrQyxFQUFFVSxNQUFNVCxTQUFSLEVBQWxDO0FBQ0QsT0FMTSxNQUtBO0FBQ0wsY0FBTUksTUFDSix1RUFESSxDQUFOO0FBR0Q7QUFDRjs7OzJDQUVzQkwsSSxFQUFNQyxTLEVBQVc7QUFDdEMsV0FBS1Esc0JBQUwsQ0FBNEJULEtBQUtXLFFBQUwsQ0FBYyxRQUFkLENBQTVCLEVBQXFEO0FBQ25EQyxrQkFBVSxRQUR5QztBQUVuREYsY0FBTVQ7QUFGNkMsT0FBckQ7QUFJRDs7OzJDQUVzQkQsSSxFQUFNQyxTLEVBQVdDLFEsRUFBVTtBQUFBOztBQUNoRCxVQUFNVyxVQUFVLHVCQUFZLFVBQUNDLE9BQUQsRUFBVUMsTUFBVixFQUFxQjtBQUMvQyxZQUFNQyxVQUFVLEVBQWhCO0FBQ0FoQixhQUFLaUIsRUFBTCxDQUFRLE1BQVIsRUFBZ0IsaUJBQVM7QUFDdkJELGtCQUFRRSxJQUFSLENBQWFDLEtBQWI7QUFDRCxTQUZEO0FBR0FuQixhQUFLaUIsRUFBTCxDQUFRLEtBQVIsRUFBZSxZQUFNO0FBQ25CLGdCQUFLWCxzQkFBTCxDQUE0QkgsT0FBT2lCLE1BQVAsQ0FBY0osT0FBZCxDQUE1QixFQUFvRGYsU0FBcEQ7QUFDQWE7QUFDRCxTQUhEO0FBSUFkLGFBQUtpQixFQUFMLENBQVEsT0FBUixFQUFpQkYsTUFBakI7QUFDRCxPQVZlLENBQWhCO0FBV0EsVUFBSWIsUUFBSixFQUFjO0FBQ1pXLGdCQUFRUSxJQUFSLENBQWFuQixRQUFiLEVBQXVCQSxRQUF2QjtBQUNELE9BRkQsTUFFTztBQUNMLGVBQU9XLE9BQVA7QUFDRDtBQUNGOzs7MkNBRXNCYixJLEVBQU1zQixLLEVBQU87QUFDbEMsV0FBS3ZCLFlBQUwsQ0FBa0IsRUFBRUMsVUFBRixFQUFRc0IsWUFBUixFQUFsQjtBQUNEOzs7OztrQkF4RGtCeEIsaUIiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaXNTdHJlYW0gZnJvbSAnaXMtc3RyZWFtJ1xuaW1wb3J0IFByb21pc2UgZnJvbSAnYmx1ZWJpcmQnXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEF0dGFjaG1lbnRNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3Iob25BdHRhY2htZW50KSB7XG4gICAgdGhpcy5vbkF0dGFjaG1lbnQgPSBvbkF0dGFjaG1lbnRcbiAgfVxuXG4gIGNyZWF0ZShkYXRhLCBtZWRpYVR5cGUsIGNhbGxiYWNrKSB7XG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgICAgaWYgKCFtZWRpYVR5cGUpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0J1ZmZlciBhdHRhY2htZW50cyBtdXN0IHNwZWNpZnkgYSBtZWRpYSB0eXBlJylcbiAgICAgIH1cbiAgICAgIHRoaXMuY3JlYXRlQnVmZmVyQXR0YWNobWVudChkYXRhLCBtZWRpYVR5cGUpXG4gICAgfSBlbHNlIGlmIChpc1N0cmVhbS5yZWFkYWJsZShkYXRhKSkge1xuICAgICAgaWYgKCFtZWRpYVR5cGUpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ1N0cmVhbSBhdHRhY2htZW50cyBtdXN0IHNwZWNpZnkgYSBtZWRpYSB0eXBlJylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVN0cmVhbUF0dGFjaG1lbnQoZGF0YSwgbWVkaWFUeXBlLCBjYWxsYmFjaylcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKCFtZWRpYVR5cGUpIHtcbiAgICAgICAgbWVkaWFUeXBlID0gJ3RleHQvcGxhaW4nXG4gICAgICB9XG4gICAgICB0aGlzLmNyZWF0ZVN0cmluZ0F0dGFjaG1lbnQoZGF0YSwgeyB0eXBlOiBtZWRpYVR5cGUgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdJbnZhbGlkIGF0dGFjaG1lbnQgZGF0YTogbXVzdCBiZSBhIGJ1ZmZlciwgcmVhZGFibGUgc3RyZWFtLCBvciBzdHJpbmcnXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgY3JlYXRlQnVmZmVyQXR0YWNobWVudChkYXRhLCBtZWRpYVR5cGUpIHtcbiAgICB0aGlzLmNyZWF0ZVN0cmluZ0F0dGFjaG1lbnQoZGF0YS50b1N0cmluZygnYmFzZTY0JyksIHtcbiAgICAgIGVuY29kaW5nOiAnYmFzZTY0JyxcbiAgICAgIHR5cGU6IG1lZGlhVHlwZSxcbiAgICB9KVxuICB9XG5cbiAgY3JlYXRlU3RyZWFtQXR0YWNobWVudChkYXRhLCBtZWRpYVR5cGUsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJ1ZmZlcnMgPSBbXVxuICAgICAgZGF0YS5vbignZGF0YScsIGNodW5rID0+IHtcbiAgICAgICAgYnVmZmVycy5wdXNoKGNodW5rKVxuICAgICAgfSlcbiAgICAgIGRhdGEub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgdGhpcy5jcmVhdGVCdWZmZXJBdHRhY2htZW50KEJ1ZmZlci5jb25jYXQoYnVmZmVycyksIG1lZGlhVHlwZSlcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9KVxuICAgICAgZGF0YS5vbignZXJyb3InLCByZWplY3QpXG4gICAgfSlcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHByb21pc2UudGhlbihjYWxsYmFjaywgY2FsbGJhY2spXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwcm9taXNlXG4gICAgfVxuICB9XG5cbiAgY3JlYXRlU3RyaW5nQXR0YWNobWVudChkYXRhLCBtZWRpYSkge1xuICAgIHRoaXMub25BdHRhY2htZW50KHsgZGF0YSwgbWVkaWEgfSlcbiAgfVxufVxuIl19