dcard
Version:
👫 Unofficial Dcard API wrapper for Node.js developers.
151 lines (109 loc) • 4.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.api = exports.parseJSON = exports.filterError = undefined;
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _stringify = require('babel-runtime/core-js/json/stringify');
var _stringify2 = _interopRequireDefault(_stringify);
var _typeof2 = require('babel-runtime/helpers/typeof');
var _typeof3 = _interopRequireDefault(_typeof2);
/**
* @private
* The api function that make call to the Dcard server.
* Normally you won't be using this function directly.
*/
var api = exports.api = function () {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(url, options, customApiPrefix) {
var csrfToken, headers, fetchUrl, res;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.t0 = CLIENT.csrfToken;
if (_context.t0) {
_context.next = 5;
break;
}
_context.next = 4;
return CLIENT.init();
case 4:
_context.t0 = _context.sent.csrfToken;
case 5:
csrfToken = _context.t0;
headers = {
Cookie: CLIENT.cookie,
'x-csrf-token': csrfToken
};
fetchUrl = customApiPrefix ? HOST + '/' + customApiPrefix + '/' + url : HOST + '/' + _constants2.default.apiV1 + '/' + url;
console.log(fetchUrl);
_context.next = 11;
return (0, _isomorphicFetch2.default)(fetchUrl, (0, _lodash.merge)(setupRequestOptions(options), { headers: headers }));
case 11:
res = _context.sent;
csrfToken = res.headers.get('x-csrf-token');
if (csrfToken) {
CLIENT.updateCSRFToken(csrfToken);
}
CLIENT.updateCookies(res.headers.getAll('set-cookie').join(';'));
return _context.abrupt('return', res);
case 16:
case 'end':
return _context.stop();
}
}
}, _callee, this);
}));
return function api(_x2, _x3, _x4) {
return _ref.apply(this, arguments);
};
}();
var _filterError = require('./filterError');
Object.defineProperty(exports, 'filterError', {
enumerable: true,
get: function get() {
return _interopRequireDefault(_filterError).default;
}
});
var _parseJSON = require('./parseJSON');
Object.defineProperty(exports, 'parseJSON', {
enumerable: true,
get: function get() {
return _interopRequireDefault(_parseJSON).default;
}
});
var _isomorphicFetch = require('isomorphic-fetch');
var _isomorphicFetch2 = _interopRequireDefault(_isomorphicFetch);
var _lodash = require('lodash');
var _constants = require('./constants');
var _constants2 = _interopRequireDefault(_constants);
var _dcardClient = require('./dcardClient');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var HOST = _constants2.default.host;
var CLIENT = new _dcardClient.DcardClient();
/**
* @private
* Setup the fetch request options.
*/
function setupRequestOptions() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var option = (0, _lodash.merge)({
method: 'GET',
headers: {
Accept: 'application/json'
}
}, options);
// only browser has FormData
if (typeof FormData !== 'undefined' && options.body instanceof FormData) {
return option;
}
var type = (0, _typeof3.default)(options.body);
if (type === 'object' || type === 'boolean') {
option.body = (0, _stringify2.default)(option.body) || '';
option.headers['Content-Type'] = 'application/json';
}
return option;
}