UNPKG

interfax-kevin

Version:

A wrapper around the InterFAX REST API for sending and receiving faxes.

202 lines (169 loc) 16.6 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _file = require('./file'); var _file2 = _interopRequireDefault(_file); var _events = require('events'); var _events2 = _interopRequireDefault(_events); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var Delivery = function () { function Delivery(client, documents) { _classCallCheck(this, Delivery); console.log('----->in constructor<-----'); this._client = client; this._documents = documents; this._boundary = '43e578690a6d14bf1d776cd55e7d7e29'; this._emitter = new _events2.default(); } _createClass(Delivery, [{ key: 'deliver', value: function deliver(params, callback) { console.log('----->in deliver<-----', params); var _validateParams2 = this._validateParams(params), _validateParams3 = _slicedToArray(_validateParams2, 2), validatedParams = _validateParams3[0], files = _validateParams3[1]; var promise = this._promise(callback); this._generateFileObjects(files, this._deliverFiles(validatedParams).bind(this)); return promise; } }, { key: '_deliverFiles', value: function _deliverFiles(validatedParams) { var _this = this; console.log('----->in deliver files<-----'); return function (error, fileObjects) { console.log('----->in _deliverFiles<-----', error, fileObjects); if (error) { return _this._emitDeliveryFailure(error); } var body = _this._bodyFor(fileObjects); var length = _this._lengthFor(body); var headers = { 'Content-Type': 'multipart/mixed; boundary=' + _this._boundary, 'Content-Length': length }; return _this._client.request('POST', '/outbound/faxes', headers, body, validatedParams).then(_this._emitDeliverySuccess.bind(_this)).catch(_this._emitDeliveryFailure.bind(_this)); }; } }, { key: '_emitDeliverySuccess', value: function _emitDeliverySuccess(result) { this._emitter.emit('resolve', result); } }, { key: '_emitDeliveryFailure', value: function _emitDeliveryFailure(error) { this._emitter.emit('reject', error); } }, { key: '_validateParams', value: function _validateParams(params) { if (!params.faxNumber) throw new Error('Missing argument: faxNumber'); if (!params.file && !params.files) throw new Error('Missing argument: file or files'); var files = [params.file || params.files]; files = this._flatten(files); delete params['file']; delete params['files']; return [params, files]; } }, { key: '_generateFileObjects', value: function _generateFileObjects(files, callback) { var _this2 = this; var objects = []; var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { var _loop = function _loop() { var file = _step.value; var object = file; if (typeof file === 'string') { object = new _file2.default(_this2._documents, file); } object.onReady(function (response) { if (!object.ready) { callback(response, null); } objects.push(object); if (objects.length == files.length) { callback(null, objects); } }); }; for (var _iterator = files[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { _loop(); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } return null; } }, { key: '_bodyFor', value: function _bodyFor(files) { var _this3 = this; var parts = files.map(function (file) { var elements = ['--' + _this3._boundary, '\r\n', file.header, '\r\n\r\n']; if (file.body) { elements.push(file.body); elements.push('\r\n\r\n'); } return elements; }); parts.push('--' + this._boundary + '--'); return this._flatten(parts); } }, { key: '_lengthFor', value: function _lengthFor(parts) { return parts.reduce(function (prev, cur) { return prev + Buffer.byteLength(cur); }, 0); } }, { key: '_flatten', value: function _flatten(list) { return [].concat.apply([], list); } }, { key: '_promise', value: function _promise(callback) { var _this4 = this; return new Promise(function (resolve, reject) { _this4._emitter.on('resolve', function (response) { if (callback) { callback(null, response); } resolve(response); }); _this4._emitter.on('reject', function (error) { if (callback) { callback(error, null); } reject(error); }); }); } }]); return Delivery; }(); exports.default = Delivery; module.exports = exports['default']; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWxpdmVyeS5qcyJdLCJuYW1lcyI6WyJEZWxpdmVyeSIsImNsaWVudCIsImRvY3VtZW50cyIsImNvbnNvbGUiLCJsb2ciLCJfY2xpZW50IiwiX2RvY3VtZW50cyIsIl9ib3VuZGFyeSIsIl9lbWl0dGVyIiwicGFyYW1zIiwiY2FsbGJhY2siLCJfdmFsaWRhdGVQYXJhbXMiLCJ2YWxpZGF0ZWRQYXJhbXMiLCJmaWxlcyIsInByb21pc2UiLCJfcHJvbWlzZSIsIl9nZW5lcmF0ZUZpbGVPYmplY3RzIiwiX2RlbGl2ZXJGaWxlcyIsImJpbmQiLCJlcnJvciIsImZpbGVPYmplY3RzIiwiX2VtaXREZWxpdmVyeUZhaWx1cmUiLCJib2R5IiwiX2JvZHlGb3IiLCJsZW5ndGgiLCJfbGVuZ3RoRm9yIiwiaGVhZGVycyIsInJlcXVlc3QiLCJ0aGVuIiwiX2VtaXREZWxpdmVyeVN1Y2Nlc3MiLCJjYXRjaCIsInJlc3VsdCIsImVtaXQiLCJmYXhOdW1iZXIiLCJFcnJvciIsImZpbGUiLCJfZmxhdHRlbiIsIm9iamVjdHMiLCJvYmplY3QiLCJvblJlYWR5IiwicmVzcG9uc2UiLCJyZWFkeSIsInB1c2giLCJwYXJ0cyIsIm1hcCIsImVsZW1lbnRzIiwiaGVhZGVyIiwicmVkdWNlIiwicHJldiIsImN1ciIsIkJ1ZmZlciIsImJ5dGVMZW5ndGgiLCJsaXN0IiwiY29uY2F0IiwiYXBwbHkiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7Ozs7QUFDQTs7Ozs7Ozs7SUFFTUEsUTtBQUVKLG9CQUFZQyxNQUFaLEVBQW9CQyxTQUFwQixFQUErQjtBQUFBOztBQUM3QkMsWUFBUUMsR0FBUixDQUFZLDRCQUFaO0FBQ0EsU0FBS0MsT0FBTCxHQUFrQkosTUFBbEI7QUFDQSxTQUFLSyxVQUFMLEdBQWtCSixTQUFsQjtBQUNBLFNBQUtLLFNBQUwsR0FBa0Isa0NBQWxCO0FBQ0EsU0FBS0MsUUFBTCxHQUFtQixz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Q0FBY2tELEVBQWQsQ0FBaUIsU0FBakIsRUFBNEIsVUFBQ2xCLFFBQUQsRUFBYztBQUN4QyxjQUFJOUIsUUFBSixFQUFjO0FBQUVBLHFCQUFTLElBQVQsRUFBZThCLFFBQWY7QUFBMkI7QUFDM0NnQixrQkFBUWhCLFFBQVI7QUFDRCxTQUhEO0FBSUEsZUFBS2hDLFFBQUwsQ0FBY2tELEVBQWQsQ0FBaUIsUUFBakIsRUFBMkIsVUFBQ3ZDLEtBQUQsRUFBVztBQUNwQyxjQUFJVCxRQUFKLEVBQWM7QUFBRUEscUJBQVNTLEtBQVQsRUFBZ0IsSUFBaEI7QUFBd0I7QUFDeENzQyxpQkFBT3RDLEtBQVA7QUFDRCxTQUhEO0FBSUQsT0FUTSxDQUFQO0FBVUQ7Ozs7OztrQkFHWW5CLFEiLCJmaWxlIjoiZGVsaXZlcnkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRmlsZSBmcm9tICcuL2ZpbGUnO1xuaW1wb3J0IEV2ZW50RW1pdHRlciAgICAgZnJvbSAnZXZlbnRzJztcblxuY2xhc3MgRGVsaXZlcnkge1xuXG4gIGNvbnN0cnVjdG9yKGNsaWVudCwgZG9jdW1lbnRzKSB7XG4gICAgY29uc29sZS5sb2coJy0tLS0tPmluIGNvbnN0cnVjdG9yPC0tLS0tJyk7XG4gICAgdGhpcy5fY2xpZW50ICAgID0gY2xpZW50O1xuICAgIHRoaXMuX2RvY3VtZW50cyA9IGRvY3VtZW50cztcbiAgICB0aGlzLl9ib3VuZGFyeSAgPSAnNDNlNTc4NjkwYTZkMTRiZjFkNzc2Y2Q1NWU3ZDdlMjknO1xuICAgIHRoaXMuX2VtaXR0ZXIgICAgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIH1cblxuICBkZWxpdmVyKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICBjb25zb2xlLmxvZygnLS0tLS0+aW4gZGVsaXZlcjwtLS0tLScsIHBhcmFtcyk7XG4gICAgbGV0IFt2YWxpZGF0ZWRQYXJhbXMsIGZpbGVzXSA9IHRoaXMuX3ZhbGlkYXRlUGFyYW1zKHBhcmFtcyk7XG4gICAgbGV0IHByb21pc2UgPSB0aGlzLl9wcm9taXNlKGNhbGxiYWNrKTtcblxuICAgIHRoaXMuX2dlbmVyYXRlRmlsZU9iamVjdHMoZmlsZXMsIHRoaXMuX2RlbGl2ZXJGaWxlcyh2YWxpZGF0ZWRQYXJhbXMpLmJpbmQodGhpcykpO1xuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBfZGVsaXZlckZpbGVzKHZhbGlkYXRlZFBhcmFtcykge1xuICAgIGNvbnNvbGUubG9nKCctLS0tLT5pbiBkZWxpdmVyIGZpbGVzPC0tLS0tJyk7XG4gICAgcmV0dXJuIChlcnJvciwgZmlsZU9iamVjdHMpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCctLS0tLT5pbiBfZGVsaXZlckZpbGVzPC0tLS0tJywgZXJyb3IsIGZpbGVPYmplY3RzKTtcbiAgICAgIGlmIChlcnJvcikgeyByZXR1cm4gdGhpcy5fZW1pdERlbGl2ZXJ5RmFpbHVyZShlcnJvcik7IH1cblxuICAgICAgbGV0IGJvZHkgICAgPSB0aGlzLl9ib2R5Rm9yKGZpbGVPYmplY3RzKTtcbiAgICAgIGxldCBsZW5ndGggID0gdGhpcy5fbGVuZ3RoRm9yKGJvZHkpO1xuICAgICAgbGV0IGhlYWRlcnMgPSB7XG4gICAgICAgICdDb250ZW50LVR5cGUnIDogYG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9JHt0aGlzLl9ib3VuZGFyeX1gLFxuICAgICAgICAnQ29udGVudC1MZW5ndGgnIDogbGVuZ3RoXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gdGhpcy5fY2xpZW50LnJlcXVlc3QoJ1BPU1QnLCAnL291dGJvdW5kL2ZheGVzJywgaGVhZGVycywgYm9keSwgdmFsaWRhdGVkUGFyYW1zKVxuICAgICAgICAudGhlbih0aGlzLl9lbWl0RGVsaXZlcnlTdWNjZXNzLmJpbmQodGhpcykpXG4gICAgICAgIC5jYXRjaCh0aGlzLl9lbWl0RGVsaXZlcnlGYWlsdXJlLmJpbmQodGhpcykpO1xuICAgIH07XG4gIH1cblxuICBfZW1pdERlbGl2ZXJ5U3VjY2VzcyhyZXN1bHQpIHtcbiAgICB0aGlzLl9lbWl0dGVyLmVtaXQoJ3Jlc29sdmUnLCByZXN1bHQpO1xuICB9XG5cbiAgX2VtaXREZWxpdmVyeUZhaWx1cmUoZXJyb3IpIHtcbiAgICB0aGlzLl9lbWl0dGVyLmVtaXQoJ3JlamVjdCcsIGVycm9yKTtcbiAgfVxuXG4gIF92YWxpZGF0ZVBhcmFtcyhwYXJhbXMpIHtcbiAgICBpZiAoIXBhcmFtcy5mYXhOdW1iZXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgYXJndW1lbnQ6IGZheE51bWJlcicpO1xuXG4gICAgaWYgKCFwYXJhbXMuZmlsZSAmJiAhcGFyYW1zLmZpbGVzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGFyZ3VtZW50OiBmaWxlIG9yIGZpbGVzJyk7XG5cbiAgICBsZXQgZmlsZXMgPSBbcGFyYW1zLmZpbGUgfHwgcGFyYW1zLmZpbGVzXTtcbiAgICBmaWxlcyA9IHRoaXMuX2ZsYXR0ZW4oZmlsZXMpO1xuXG4gICAgZGVsZXRlIHBhcmFtc1snZmlsZSddO1xuICAgIGRlbGV0ZSBwYXJhbXNbJ2ZpbGVzJ107XG5cbiAgICByZXR1cm4gW3BhcmFtcywgZmlsZXNdO1xuICB9XG5cbiAgX2dlbmVyYXRlRmlsZU9iamVjdHMoZmlsZXMsIGNhbGxiYWNrKSB7XG4gICAgbGV0IG9iamVjdHMgPSBbXTtcblxuICAgIGZvciAobGV0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIGxldCBvYmplY3QgPSBmaWxlO1xuICAgICAgaWYgKHR5cGVvZihmaWxlKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgb2JqZWN0ID0gbmV3IEZpbGUodGhpcy5fZG9jdW1lbnRzLCBmaWxlKTtcbiAgICAgIH1cbiAgICAgIG9iamVjdC5vblJlYWR5KChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoIW9iamVjdC5yZWFkeSkgeyBjYWxsYmFjayhyZXNwb25zZSwgbnVsbCk7IH1cbiAgICAgICAgb2JqZWN0cy5wdXNoKG9iamVjdCk7XG4gICAgICAgIGlmIChvYmplY3RzLmxlbmd0aCA9PSBmaWxlcy5sZW5ndGgpIHsgY2FsbGJhY2sobnVsbCwgb2JqZWN0cyk7IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIF9ib2R5Rm9yKGZpbGVzKSB7XG4gICAgbGV0IHBhcnRzID0gZmlsZXMubWFwKGZpbGUgPT4ge1xuICAgICAgbGV0IGVsZW1lbnRzID0gW2AtLSR7dGhpcy5fYm91bmRhcnl9YCwgJ1xcclxcbicsIGZpbGUuaGVhZGVyLCAnXFxyXFxuXFxyXFxuJ107XG4gICAgICBpZiAoZmlsZS5ib2R5KSB7XG4gICAgICAgIGVsZW1lbnRzLnB1c2goZmlsZS5ib2R5KTtcbiAgICAgICAgZWxlbWVudHMucHVzaCgnXFxyXFxuXFxyXFxuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZWxlbWVudHM7XG4gICAgfSk7XG4gICAgcGFydHMucHVzaChgLS0ke3RoaXMuX2JvdW5kYXJ5fS0tYCk7XG4gICAgcmV0dXJuIHRoaXMuX2ZsYXR0ZW4ocGFydHMpO1xuICB9XG5cbiAgX2xlbmd0aEZvcihwYXJ0cykge1xuICAgIHJldHVybiBwYXJ0cy5yZWR1Y2UoKHByZXYsIGN1cikgPT4ge1xuICAgICAgcmV0dXJuIHByZXYgKyBCdWZmZXIuYnl0ZUxlbmd0aChjdXIpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgX2ZsYXR0ZW4obGlzdCkge1xuICAgIHJldHVybiBbXS5jb25jYXQuYXBwbHkoW10sIGxpc3QpO1xuICB9XG5cbiAgX3Byb21pc2UoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fZW1pdHRlci5vbigncmVzb2x2ZScsIChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoY2FsbGJhY2spIHsgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UpOyB9XG4gICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9lbWl0dGVyLm9uKCdyZWplY3QnLCAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7IGNhbGxiYWNrKGVycm9yLCBudWxsKTsgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGVsaXZlcnk7XG4iXX0=