UNPKG

dcard

Version:

👫 Unofficial Dcard API wrapper for Node.js developers.

110 lines (81 loc) • 3.13 kB
'use strict'; 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; }() }; };