dcard
Version:
👫 Unofficial Dcard API wrapper for Node.js developers.
110 lines (81 loc) • 3.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.DcardClient = undefined;
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _lodash = require('lodash');
var _cookie = require('cookie');
var _constants = require('./constants');
var _constants2 = _interopRequireDefault(_constants);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var HOST = _constants2.default.host;
var CSRFTokenUrl = _constants2.default.ping;
/**
* @private
* The Dcard api wrapper client for handling the csrf token and cookies.
* Normally you won't be using this function directly.
*/
var DcardClient = exports.DcardClient = function DcardClient() {
var csrfToken = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var cookie = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
return {
csrfToken: csrfToken,
cookie: cookie,
updateCookies: function updateCookies(cookies) {
this.cookie = (0, _lodash.toPairs)((0, _extends3.default)({}, (0, _cookie.parse)(this.cookie), (0, _cookie.parse)(cookies))).map(function (c) {
return c.join('=');
}).join(';');
return this;
},
updateCSRFToken: function updateCSRFToken(token) {
this.csrfToken = token;
return this;
},
/**
* @private
* Initial the client by getting the first cookie and csrk token
* after the first fetch to the server.
*/
init: function () {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {
var res, responseHeader, xcsrfToken;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return fetch(HOST + '/' + CSRFTokenUrl);
case 2:
res = _context.sent;
responseHeader = res.headers._headers;
xcsrfToken = responseHeader['x-csrf-token'][0];
console.log(xcsrfToken);
if (xcsrfToken) {
_context.next = 8;
break;
}
throw new Error('No CSRF Token found!');
case 8:
this.updateCSRFToken(xcsrfToken);
this.updateCookies(res.headers.getAll('set-cookie').join(';'));
return _context.abrupt('return', this);
case 11:
case 'end':
return _context.stop();
}
}
}, _callee, this);
}));
function init() {
return _ref.apply(this, arguments);
}
return init;
}()
};
};