interfax
Version:
A wrapper around the InterFAX REST API for sending and receiving faxes.
149 lines (122 loc) • 12.3 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
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 _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _mime = require('mime');
var _mime2 = _interopRequireDefault(_mime);
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 File = function () {
function File(documents, location, options) {
_classCallCheck(this, File);
this._documents = documents;
this.ready = false;
this._callbacks = [];
options = options || {};
this._chunkSize = options.chunkSize || 1024 * 1024;
if (options.mimeType) {
this.initializeBinary(location, options.mimeType);
} else if (location.startsWith('http://') || location.startsWith('https://')) {
this.initializeUrl(location);
} else {
this.initializePath(location);
}
}
_createClass(File, [{
key: 'onReady',
value: function onReady(callback) {
if (this.ready) return callback(this.ready);
this._callbacks.push(callback);
}
}, {
key: 'initializeBinary',
value: function initializeBinary(data, mimeType) {
if (data.length > this._chunkSize) {
return this.initializeDocument(data, mimeType);
}
this.header = 'Content-Type: ' + mimeType;
this.body = data;
this._triggerReady(true);
}
}, {
key: 'initializeUrl',
value: function initializeUrl(url) {
this.header = 'Content-Location: ' + url;
this.body = null;
this._triggerReady(true);
}
}, {
key: 'initializePath',
value: function initializePath(path) {
var data = _fs2.default.readFileSync(path);
var mimeType = _mime2.default.lookup(path);
this.initializeBinary(data, mimeType);
}
}, {
key: 'initializeDocument',
value: function initializeDocument(data, mimeType) {
var extension = _mime2.default.extension(mimeType);
var filename = 'upload-' + Date.now() + '.' + extension;
this._documents.create(filename, data.length).then(this._startUpload(data).bind(this)).catch(this._triggerReady.bind(this));
}
}, {
key: '_startUpload',
value: function _startUpload(data) {
var _this = this;
return function (document) {
_this.header = 'Content-Location: ' + document.url;
_this.body = null;
_this._upload(0, document, data)();
};
}
}, {
key: '_upload',
value: function _upload(cursor, document, data) {
var _this2 = this;
var finished = cursor >= data.length;
return function () {
if (finished) {
return _this2._triggerReady(true);
}
var chunk = data.slice(cursor, cursor + _this2._chunkSize);
var nextCursor = cursor + Buffer.byteLength(chunk);
return _this2._documents.upload(document.id, cursor, nextCursor - 1, chunk).then(_this2._upload(nextCursor, document, data).bind(_this2)).catch(_this2._triggerReady.bind(_this2));
};
}
}, {
key: '_triggerReady',
value: function _triggerReady(response) {
this.ready = response === true;
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = this._callbacks[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var callback = _step.value;
callback(response);
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return this.ready;
}
}]);
return File;
}();
exports.default = File;
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9maWxlLmpzIl0sIm5hbWVzIjpbIkZpbGUiLCJkb2N1bWVudHMiLCJsb2NhdGlvbiIsIm9wdGlvbnMiLCJfZG9jdW1lbnRzIiwicmVhZHkiLCJfY2FsbGJhY2tzIiwiX2NodW5rU2l6ZSIsImNodW5rU2l6ZSIsIm1pbWVUeXBlIiwiaW5pdGlhbGl6ZUJpbmFyeSIsInN0YXJ0c1dpdGgiLCJpbml0aWFsaXplVXJsIiwiaW5pdGlhbGl6ZVBhdGgiLCJjYWxsYmFjayIsInB1c2giLCJkYXRhIiwibGVuZ3RoIiwiaW5pdGlhbGl6ZURvY3VtZW50IiwiaGVhZGVyIiwiYm9keSIsIl90cmlnZ2VyUmVhZHkiLCJ1cmwiLCJwYXRoIiwiZnMiLCJyZWFkRmlsZVN5bmMiLCJtaW1lIiwibG9va3VwIiwiZXh0ZW5zaW9uIiwiZmlsZW5hbWUiLCJEYXRlIiwibm93IiwiY3JlYXRlIiwidGhlbiIsIl9zdGFydFVwbG9hZCIsImJpbmQiLCJjYXRjaCIsImRvY3VtZW50IiwiX3VwbG9hZCIsImN1cnNvciIsImZpbmlzaGVkIiwiY2h1bmsiLCJzbGljZSIsIm5leHRDdXJzb3IiLCJCdWZmZXIiLCJieXRlTGVuZ3RoIiwidXBsb2FkIiwiaWQiLCJyZXNwb25zZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7OztBQUNBOzs7Ozs7OztJQUVNQSxJO0FBQ0osZ0JBQVlDLFNBQVosRUFBdUJDLFFBQXZCLEVBQWlDQyxPQUFqQyxFQUEwQztBQUFBOztBQUN4QyxTQUFLQyxVQUFMLEdBQWtCSCxTQUFsQjtBQUNBLFNBQUtJLEtBQUwsR0FBYSxLQUFiO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQixFQUFsQjs7QUFFQUgsY0FBVUEsV0FBVyxFQUFyQjtBQUNBLFNBQUtJLFVBQUwsR0FBa0JKLFFBQVFLLFNBQVIsSUFBcUIsT0FBSyxJQUE1Qzs7QUFFQSxRQUFJTCxRQUFRTSxRQUFaLEVBQXNCO0FBQ3BCLFdBQUtDLGdCQUFMLENBQXNCUixRQUF0QixFQUFnQ0MsUUFBUU0sUUFB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QW1CYyxJQUFuQixDQUF3QixNQUF4QixDQUZGLENBQVA7QUFHRCxPQVREO0FBVUQ7OztrQ0FFYWEsUSxFQUFVO0FBQ3RCLFdBQUszQyxLQUFMLEdBQWMyQyxhQUFhLElBQTNCO0FBRHNCO0FBQUE7QUFBQTs7QUFBQTtBQUV0Qiw2QkFBcUIsS0FBSzFDLFVBQTFCLDhIQUFzQztBQUFBLGNBQTdCUSxRQUE2Qjs7QUFDcENBLG1CQUFTa0MsUUFBVDtBQUNEO0FBSnFCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBS3RCLGFBQU8sS0FBSzNDLEtBQVo7QUFDRDs7Ozs7O2tCQUdZTCxJIiwiZmlsZSI6ImZpbGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgICBmcm9tICdmcyc7XHJcbmltcG9ydCBtaW1lIGZyb20gJ21pbWUnO1xyXG5cclxuY2xhc3MgRmlsZSB7XHJcbiAgY29uc3RydWN0b3IoZG9jdW1lbnRzLCBsb2NhdGlvbiwgb3B0aW9ucykge1xyXG4gICAgdGhpcy5fZG9jdW1lbnRzID0gZG9jdW1lbnRzO1xyXG4gICAgdGhpcy5yZWFkeSA9IGZhbHNlO1xyXG4gICAgdGhpcy5fY2FsbGJhY2tzID0gW107XHJcblxyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICB0aGlzLl9jaHVua1NpemUgPSBvcHRpb25zLmNodW5rU2l6ZSB8fCAxMDI0KjEwMjQ7XHJcblxyXG4gICAgaWYgKG9wdGlvbnMubWltZVR5cGUpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplQmluYXJ5KGxvY2F0aW9uLCBvcHRpb25zLm1pbWVUeXBlKTtcclxuICAgIH0gZWxzZSBpZiAobG9jYXRpb24uc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IGxvY2F0aW9uLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplVXJsKGxvY2F0aW9uKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVBhdGgobG9jYXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25SZWFkeShjYWxsYmFjaykge1xyXG4gICAgaWYgKHRoaXMucmVhZHkpIHJldHVybiBjYWxsYmFjayh0aGlzLnJlYWR5KTtcclxuICAgIHRoaXMuX2NhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVCaW5hcnkoZGF0YSwgbWltZVR5cGUpIHtcclxuICAgIGlmIChkYXRhLmxlbmd0aCA+IHRoaXMuX2NodW5rU2l6ZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplRG9jdW1lbnQoZGF0YSwgbWltZVR5cGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaGVhZGVyID0gYENvbnRlbnQtVHlwZTogJHttaW1lVHlwZX1gO1xyXG4gICAgdGhpcy5ib2R5ICAgPSBkYXRhO1xyXG4gICAgdGhpcy5fdHJpZ2dlclJlYWR5KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZVVybCh1cmwpIHtcclxuICAgIHRoaXMuaGVhZGVyID0gYENvbnRlbnQtTG9jYXRpb246ICR7dXJsfWA7XHJcbiAgICB0aGlzLmJvZHkgICA9IG51bGw7XHJcbiAgICB0aGlzLl90cmlnZ2VyUmVhZHkodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplUGF0aChwYXRoKSB7XHJcbiAgICBsZXQgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoKTtcclxuICAgIGxldCBtaW1lVHlwZSA9IG1pbWUubG9va3VwKHBhdGgpO1xyXG5cclxuICAgIHRoaXMuaW5pdGlhbGl6ZUJpbmFyeShkYXRhLCBtaW1lVHlwZSk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplRG9jdW1lbnQoZGF0YSwgbWltZVR5cGUpIHtcclxuICAgIGxldCBleHRlbnNpb24gPSBtaW1lLmV4dGVuc2lvbihtaW1lVHlwZSk7XHJcbiAgICBsZXQgZmlsZW5hbWUgPSBgdXBsb2FkLSR7RGF0ZS5ub3coKX0uJHtleHRlbnNpb259YDtcclxuXHJcbiAgICB0aGlzLl9kb2N1bWVudHMuY3JlYXRlKGZpbGVuYW1lLCBkYXRhLmxlbmd0aClcclxuICAgICAgLnRoZW4odGhpcy5fc3RhcnRVcGxvYWQoZGF0YSkuYmluZCh0aGlzKSlcclxuICAgICAgLmNhdGNoKHRoaXMuX3RyaWdnZXJSZWFkeS5iaW5kKHRoaXMpKTtcclxuICB9XHJcblxyXG4gIF9zdGFydFVwbG9hZChkYXRhKSB7XHJcbiAgICByZXR1cm4gKGRvY3VtZW50KSA9PiB7XHJcbiAgICAgIHRoaXMuaGVhZGVyID0gYENvbnRlbnQtTG9jYXRpb246ICR7ZG9jdW1lbnQudXJsfWA7XHJcbiAgICAgIHRoaXMuYm9keSA9IG51bGw7XHJcblxyXG4gICAgICB0aGlzLl91cGxvYWQoMCwgZG9jdW1lbnQsIGRhdGEpKCk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgX3VwbG9hZChjdXJzb3IsIGRvY3VtZW50LCBkYXRhKSB7XHJcbiAgICBsZXQgZmluaXNoZWQgPSAoY3Vyc29yID49IGRhdGEubGVuZ3RoKTtcclxuXHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICBpZiAoZmluaXNoZWQpIHsgcmV0dXJuIHRoaXMuX3RyaWdnZXJSZWFkeSh0cnVlKTsgfVxyXG5cclxuICAgICAgbGV0IGNodW5rID0gZGF0YS5zbGljZShjdXJzb3IsIGN1cnNvcit0aGlzLl9jaHVua1NpemUpO1xyXG4gICAgICBsZXQgbmV4dEN1cnNvciA9IGN1cnNvcitCdWZmZXIuYnl0ZUxlbmd0aChjaHVuayk7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnRzLnVwbG9hZChkb2N1bWVudC5pZCwgY3Vyc29yLCBuZXh0Q3Vyc29yLTEsIGNodW5rKVxyXG4gICAgICAgIC50aGVuKHRoaXMuX3VwbG9hZChuZXh0Q3Vyc29yLCBkb2N1bWVudCwgZGF0YSkuYmluZCh0aGlzKSlcclxuICAgICAgICAuY2F0Y2godGhpcy5fdHJpZ2dlclJlYWR5LmJpbmQodGhpcykpO1xyXG4gICAgfTtcclxuICB9XHJcbiAgXHJcbiAgX3RyaWdnZXJSZWFkeShyZXNwb25zZSkge1xyXG4gICAgdGhpcy5yZWFkeSA9IChyZXNwb25zZSA9PT0gdHJ1ZSk7XHJcbiAgICBmb3IgKGxldCBjYWxsYmFjayBvZiB0aGlzLl9jYWxsYmFja3MpIHtcclxuICAgICAgY2FsbGJhY2socmVzcG9uc2UpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMucmVhZHk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBGaWxlO1xyXG4iXX0=