UNPKG

superagent

Version:

elegant & feature rich browser / node HTTP with a fluent API

105 lines (98 loc) 11.1 kB
"use strict"; /** * Module dependencies. */ const { CookieJar } = require('cookiejar'); const { CookieAccessInfo } = require('cookiejar'); const methods = require('methods'); const request = require('../..'); const AgentBase = require('../agent-base'); function defaultCookiePath(pathname) { const lastSlash = pathname.lastIndexOf('/'); return lastSlash > 0 ? pathname.slice(0, lastSlash) : '/'; } /** * Initialize a new `Agent`. * * @api public */ class Agent extends AgentBase { constructor(options) { super(); this.jar = new CookieJar(); if (options) { if (options.ca) { this.ca(options.ca); } if (options.key) { this.key(options.key); } if (options.pfx) { this.pfx(options.pfx); } if (options.cert) { this.cert(options.cert); } if (options.rejectUnauthorized === false) { this.disableTLSCerts(); } } } /** * Save the cookies in the given `res` to * the agent's cookie jar for persistence. * * @param {Response} res * @api private */ _saveCookies(res) { const cookies = res.headers['set-cookie']; if (cookies) { const url = new URL(res.request && res.request.url || ''); this.jar.setCookies(cookies, url.hostname, defaultCookiePath(url.pathname)); } } /** * Attach cookies when available to the given `req`. * * @param {Request} req * @api private */ _attachCookies(request_) { const url = new URL(request_.url); const access = new CookieAccessInfo(url.hostname, url.pathname, url.protocol === 'https:'); const cookies = this.jar.getCookies(access).toValueString(); request_.cookies = cookies; } } for (const name of methods) { const method = name.toUpperCase(); if (method === 'QUERY') continue; Agent.prototype[name] = function (url, fn) { const request_ = new request.Request(method, url); request_.on('response', this._saveCookies.bind(this)); request_.on('pre-redirect', this._saveCookies.bind(this)); request_.on('redirect', this._attachCookies.bind(this, request_)); this._setDefaults(request_); this._attachCookies(request_); if (fn) { request_.end(fn); } return request_; }; } Agent.prototype.del = Agent.prototype.delete; // create a Proxy that can instantiate a new Agent without using `new` keyword // (for backward compatibility and chaining) const proxyAgent = new Proxy(Agent, { apply(target, thisArgument, argumentsList) { // eslint-disable-next-line new-cap return new target(...argumentsList); } }); module.exports = proxyAgent; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb29raWVKYXIiLCJyZXF1aXJlIiwiQ29va2llQWNjZXNzSW5mbyIsIm1ldGhvZHMiLCJyZXF1ZXN0IiwiQWdlbnRCYXNlIiwiZGVmYXVsdENvb2tpZVBhdGgiLCJwYXRobmFtZSIsImxhc3RTbGFzaCIsImxhc3RJbmRleE9mIiwic2xpY2UiLCJBZ2VudCIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImphciIsImNhIiwia2V5IiwicGZ4IiwiY2VydCIsInJlamVjdFVuYXV0aG9yaXplZCIsImRpc2FibGVUTFNDZXJ0cyIsIl9zYXZlQ29va2llcyIsInJlcyIsImNvb2tpZXMiLCJoZWFkZXJzIiwidXJsIiwiVVJMIiwic2V0Q29va2llcyIsImhvc3RuYW1lIiwiX2F0dGFjaENvb2tpZXMiLCJyZXF1ZXN0XyIsImFjY2VzcyIsInByb3RvY29sIiwiZ2V0Q29va2llcyIsInRvVmFsdWVTdHJpbmciLCJuYW1lIiwibWV0aG9kIiwidG9VcHBlckNhc2UiLCJwcm90b3R5cGUiLCJmbiIsIlJlcXVlc3QiLCJvbiIsImJpbmQiLCJfc2V0RGVmYXVsdHMiLCJlbmQiLCJkZWwiLCJkZWxldGUiLCJwcm94eUFnZW50IiwiUHJveHkiLCJhcHBseSIsInRhcmdldCIsInRoaXNBcmd1bWVudCIsImFyZ3VtZW50c0xpc3QiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL25vZGUvYWdlbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbmNvbnN0IHsgQ29va2llSmFyIH0gPSByZXF1aXJlKCdjb29raWVqYXInKTtcbmNvbnN0IHsgQ29va2llQWNjZXNzSW5mbyB9ID0gcmVxdWlyZSgnY29va2llamFyJyk7XG5jb25zdCBtZXRob2RzID0gcmVxdWlyZSgnbWV0aG9kcycpO1xuY29uc3QgcmVxdWVzdCA9IHJlcXVpcmUoJy4uLy4uJyk7XG5jb25zdCBBZ2VudEJhc2UgPSByZXF1aXJlKCcuLi9hZ2VudC1iYXNlJyk7XG5cbmZ1bmN0aW9uIGRlZmF1bHRDb29raWVQYXRoKHBhdGhuYW1lKSB7XG4gIGNvbnN0IGxhc3RTbGFzaCA9IHBhdGhuYW1lLmxhc3RJbmRleE9mKCcvJyk7XG4gIHJldHVybiBsYXN0U2xhc2ggPiAwID8gcGF0aG5hbWUuc2xpY2UoMCwgbGFzdFNsYXNoKSA6ICcvJztcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplIGEgbmV3IGBBZ2VudGAuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5jbGFzcyBBZ2VudCBleHRlbmRzIEFnZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5qYXIgPSBuZXcgQ29va2llSmFyKCk7XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMuY2EpIHtcbiAgICAgICAgdGhpcy5jYShvcHRpb25zLmNhKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMua2V5KSB7XG4gICAgICAgIHRoaXMua2V5KG9wdGlvbnMua2V5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucGZ4KSB7XG4gICAgICAgIHRoaXMucGZ4KG9wdGlvbnMucGZ4KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY2VydCkge1xuICAgICAgICB0aGlzLmNlcnQob3B0aW9ucy5jZXJ0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucmVqZWN0VW5hdXRob3JpemVkID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLmRpc2FibGVUTFNDZXJ0cygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIHRoZSBjb29raWVzIGluIHRoZSBnaXZlbiBgcmVzYCB0b1xuICAgKiB0aGUgYWdlbnQncyBjb29raWUgamFyIGZvciBwZXJzaXN0ZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZXNwb25zZX0gcmVzXG4gICAqIEBhcGkgcHJpdmF0ZVxuICAgKi9cbiAgX3NhdmVDb29raWVzKHJlcykge1xuICAgIGNvbnN0IGNvb2tpZXMgPSByZXMuaGVhZGVyc1snc2V0LWNvb2tpZSddO1xuICAgIGlmIChjb29raWVzKSB7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKChyZXMucmVxdWVzdCAmJiByZXMucmVxdWVzdC51cmwpIHx8ICcnKTtcbiAgICAgIHRoaXMuamFyLnNldENvb2tpZXMoY29va2llcywgdXJsLmhvc3RuYW1lLCBkZWZhdWx0Q29va2llUGF0aCh1cmwucGF0aG5hbWUpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXR0YWNoIGNvb2tpZXMgd2hlbiBhdmFpbGFibGUgdG8gdGhlIGdpdmVuIGByZXFgLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlcXVlc3R9IHJlcVxuICAgKiBAYXBpIHByaXZhdGVcbiAgICovXG4gIF9hdHRhY2hDb29raWVzKHJlcXVlc3RfKSB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXF1ZXN0Xy51cmwpO1xuICAgIGNvbnN0IGFjY2VzcyA9IG5ldyBDb29raWVBY2Nlc3NJbmZvKFxuICAgICAgdXJsLmhvc3RuYW1lLFxuICAgICAgdXJsLnBhdGhuYW1lLFxuICAgICAgdXJsLnByb3RvY29sID09PSAnaHR0cHM6J1xuICAgICk7XG4gICAgY29uc3QgY29va2llcyA9IHRoaXMuamFyLmdldENvb2tpZXMoYWNjZXNzKS50b1ZhbHVlU3RyaW5nKCk7XG4gICAgcmVxdWVzdF8uY29va2llcyA9IGNvb2tpZXM7XG4gIH1cbn1cblxuZm9yIChjb25zdCBuYW1lIG9mIG1ldGhvZHMpIHtcbiAgY29uc3QgbWV0aG9kID0gbmFtZS50b1VwcGVyQ2FzZSgpO1xuICBpZiAobWV0aG9kID09PSAnUVVFUlknKSBjb250aW51ZTtcbiAgQWdlbnQucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24gKHVybCwgZm4pIHtcbiAgICBjb25zdCByZXF1ZXN0XyA9IG5ldyByZXF1ZXN0LlJlcXVlc3QobWV0aG9kLCB1cmwpO1xuXG4gICAgcmVxdWVzdF8ub24oJ3Jlc3BvbnNlJywgdGhpcy5fc2F2ZUNvb2tpZXMuYmluZCh0aGlzKSk7XG4gICAgcmVxdWVzdF8ub24oJ3ByZS1yZWRpcmVjdCcsIHRoaXMuX3NhdmVDb29raWVzLmJpbmQodGhpcykpO1xuICAgIHJlcXVlc3RfLm9uKCdyZWRpcmVjdCcsIHRoaXMuX2F0dGFjaENvb2tpZXMuYmluZCh0aGlzLCByZXF1ZXN0XykpO1xuICAgIHRoaXMuX3NldERlZmF1bHRzKHJlcXVlc3RfKTtcbiAgICB0aGlzLl9hdHRhY2hDb29raWVzKHJlcXVlc3RfKTtcblxuICAgIGlmIChmbikge1xuICAgICAgcmVxdWVzdF8uZW5kKGZuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVxdWVzdF87XG4gIH07XG59XG5cbkFnZW50LnByb3RvdHlwZS5kZWwgPSBBZ2VudC5wcm90b3R5cGUuZGVsZXRlO1xuXG4vLyBjcmVhdGUgYSBQcm94eSB0aGF0IGNhbiBpbnN0YW50aWF0ZSBhIG5ldyBBZ2VudCB3aXRob3V0IHVzaW5nIGBuZXdgIGtleXdvcmRcbi8vIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhbmQgY2hhaW5pbmcpXG5jb25zdCBwcm94eUFnZW50ID0gbmV3IFByb3h5KEFnZW50LCB7XG4gIGFwcGx5KHRhcmdldCwgdGhpc0FyZ3VtZW50LCBhcmd1bWVudHNMaXN0KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5ldy1jYXBcbiAgICByZXR1cm4gbmV3IHRhcmdldCguLi5hcmd1bWVudHNMaXN0KTtcbiAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gcHJveHlBZ2VudDtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTTtFQUFFQTtBQUFVLENBQUMsR0FBR0MsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUMxQyxNQUFNO0VBQUVDO0FBQWlCLENBQUMsR0FBR0QsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUNqRCxNQUFNRSxPQUFPLEdBQUdG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