211 lines
6.6 KiB
JavaScript
211 lines
6.6 KiB
JavaScript
'use strict';
|
|
|
|
const Client = require('./lib/dispatcher/client');
|
|
const Dispatcher = require('./lib/dispatcher/dispatcher');
|
|
const Pool = require('./lib/dispatcher/pool');
|
|
const BalancedPool = require('./lib/dispatcher/balanced-pool');
|
|
const Agent = require('./lib/dispatcher/agent');
|
|
const ProxyAgent = require('./lib/dispatcher/proxy-agent');
|
|
const EnvHttpProxyAgent = require('./lib/dispatcher/env-http-proxy-agent');
|
|
const RetryAgent = require('./lib/dispatcher/retry-agent');
|
|
const errors = require('./lib/core/errors');
|
|
const util = require('./lib/core/util');
|
|
const { InvalidArgumentError } = errors;
|
|
const api = require('./lib/api');
|
|
const buildConnector = require('./lib/core/connect');
|
|
const MockClient = require('./lib/mock/mock-client');
|
|
const {
|
|
MockCallHistory,
|
|
MockCallHistoryLog,
|
|
} = require('./lib/mock/mock-call-history');
|
|
const MockAgent = require('./lib/mock/mock-agent');
|
|
const MockPool = require('./lib/mock/mock-pool');
|
|
const mockErrors = require('./lib/mock/mock-errors');
|
|
const RetryHandler = require('./lib/handler/retry-handler');
|
|
const { getGlobalDispatcher, setGlobalDispatcher } = require('./lib/global');
|
|
const DecoratorHandler = require('./lib/handler/decorator-handler');
|
|
const RedirectHandler = require('./lib/handler/redirect-handler');
|
|
|
|
Object.assign(Dispatcher.prototype, api);
|
|
|
|
module.exports.Dispatcher = Dispatcher;
|
|
module.exports.Client = Client;
|
|
module.exports.Pool = Pool;
|
|
module.exports.BalancedPool = BalancedPool;
|
|
module.exports.Agent = Agent;
|
|
module.exports.ProxyAgent = ProxyAgent;
|
|
module.exports.EnvHttpProxyAgent = EnvHttpProxyAgent;
|
|
module.exports.RetryAgent = RetryAgent;
|
|
module.exports.RetryHandler = RetryHandler;
|
|
|
|
module.exports.DecoratorHandler = DecoratorHandler;
|
|
module.exports.RedirectHandler = RedirectHandler;
|
|
module.exports.interceptors = {
|
|
redirect: require('./lib/interceptor/redirect'),
|
|
responseError: require('./lib/interceptor/response-error'),
|
|
retry: require('./lib/interceptor/retry'),
|
|
dump: require('./lib/interceptor/dump'),
|
|
dns: require('./lib/interceptor/dns'),
|
|
cache: require('./lib/interceptor/cache'),
|
|
};
|
|
|
|
module.exports.cacheStores = {
|
|
MemoryCacheStore: require('./lib/cache/memory-cache-store'),
|
|
};
|
|
|
|
const SqliteCacheStore = require('./lib/cache/sqlite-cache-store');
|
|
module.exports.cacheStores.SqliteCacheStore = SqliteCacheStore;
|
|
|
|
module.exports.buildConnector = buildConnector;
|
|
module.exports.errors = errors;
|
|
module.exports.util = {
|
|
parseHeaders: util.parseHeaders,
|
|
headerNameToString: util.headerNameToString,
|
|
};
|
|
|
|
function makeDispatcher(fn) {
|
|
return (url, opts, handler) => {
|
|
if (typeof opts === 'function') {
|
|
handler = opts;
|
|
opts = null;
|
|
}
|
|
|
|
if (
|
|
!url ||
|
|
(typeof url !== 'string' &&
|
|
typeof url !== 'object' &&
|
|
!(url instanceof URL))
|
|
) {
|
|
throw new InvalidArgumentError('invalid url');
|
|
}
|
|
|
|
if (opts != null && typeof opts !== 'object') {
|
|
throw new InvalidArgumentError('invalid opts');
|
|
}
|
|
|
|
if (opts && opts.path != null) {
|
|
if (typeof opts.path !== 'string') {
|
|
throw new InvalidArgumentError('invalid opts.path');
|
|
}
|
|
|
|
let path = opts.path;
|
|
if (!opts.path.startsWith('/')) {
|
|
path = `/${path}`;
|
|
}
|
|
|
|
url = new URL(util.parseOrigin(url).origin + path);
|
|
} else {
|
|
if (!opts) {
|
|
opts = typeof url === 'object' ? url : {};
|
|
}
|
|
|
|
url = util.parseURL(url);
|
|
}
|
|
|
|
const { agent, dispatcher = getGlobalDispatcher() } = opts;
|
|
|
|
if (agent) {
|
|
throw new InvalidArgumentError(
|
|
'unsupported opts.agent. Did you mean opts.client?'
|
|
);
|
|
}
|
|
|
|
return fn.call(
|
|
dispatcher,
|
|
{
|
|
...opts,
|
|
origin: url.origin,
|
|
path: url.search ? `${url.pathname}${url.search}` : url.pathname,
|
|
method: opts.method || (opts.body ? 'PUT' : 'GET'),
|
|
},
|
|
handler
|
|
);
|
|
};
|
|
}
|
|
|
|
module.exports.setGlobalDispatcher = setGlobalDispatcher;
|
|
module.exports.getGlobalDispatcher = getGlobalDispatcher;
|
|
|
|
const fetchImpl = require('./lib/web/fetch').fetch;
|
|
module.exports.fetch = async function fetch(init, options = undefined) {
|
|
try {
|
|
return await fetchImpl(init, options);
|
|
} catch (err) {
|
|
if (err && typeof err === 'object') {
|
|
Error.captureStackTrace(err);
|
|
}
|
|
|
|
throw err;
|
|
}
|
|
};
|
|
module.exports.Headers = require('./lib/web/fetch/headers').Headers;
|
|
module.exports.Response = require('./lib/web/fetch/response').Response;
|
|
module.exports.Request = require('./lib/web/fetch/request').Request;
|
|
module.exports.FormData = require('./lib/web/fetch/formdata').FormData;
|
|
|
|
const { setGlobalOrigin, getGlobalOrigin } = require('./lib/web/fetch/global');
|
|
|
|
module.exports.setGlobalOrigin = setGlobalOrigin;
|
|
module.exports.getGlobalOrigin = getGlobalOrigin;
|
|
|
|
const { CacheStorage } = require('./lib/web/cache/cachestorage');
|
|
const { kConstruct } = require('./lib/core/symbols');
|
|
|
|
// Cache & CacheStorage are tightly coupled with fetch. Even if it may run
|
|
// in an older version of Node, it doesn't have any use without fetch.
|
|
module.exports.caches = new CacheStorage(kConstruct);
|
|
|
|
const {
|
|
deleteCookie,
|
|
getCookies,
|
|
getSetCookies,
|
|
setCookie,
|
|
parseCookie,
|
|
} = require('./lib/web/cookies');
|
|
|
|
module.exports.deleteCookie = deleteCookie;
|
|
module.exports.getCookies = getCookies;
|
|
module.exports.getSetCookies = getSetCookies;
|
|
module.exports.setCookie = setCookie;
|
|
module.exports.parseCookie = parseCookie;
|
|
|
|
const {
|
|
parseMIMEType,
|
|
serializeAMimeType,
|
|
} = require('./lib/web/fetch/data-url');
|
|
|
|
module.exports.parseMIMEType = parseMIMEType;
|
|
module.exports.serializeAMimeType = serializeAMimeType;
|
|
|
|
const {
|
|
CloseEvent,
|
|
ErrorEvent,
|
|
MessageEvent,
|
|
} = require('./lib/web/websocket/events');
|
|
module.exports.WebSocket = require('./lib/web/websocket/websocket').WebSocket;
|
|
module.exports.CloseEvent = CloseEvent;
|
|
module.exports.ErrorEvent = ErrorEvent;
|
|
module.exports.MessageEvent = MessageEvent;
|
|
|
|
module.exports.WebSocketStream =
|
|
require('./lib/web/websocket/stream/websocketstream').WebSocketStream;
|
|
module.exports.WebSocketError =
|
|
require('./lib/web/websocket/stream/websocketerror').WebSocketError;
|
|
|
|
module.exports.request = makeDispatcher(api.request);
|
|
module.exports.stream = makeDispatcher(api.stream);
|
|
module.exports.pipeline = makeDispatcher(api.pipeline);
|
|
module.exports.connect = makeDispatcher(api.connect);
|
|
module.exports.upgrade = makeDispatcher(api.upgrade);
|
|
|
|
module.exports.MockClient = MockClient;
|
|
module.exports.MockCallHistory = MockCallHistory;
|
|
module.exports.MockCallHistoryLog = MockCallHistoryLog;
|
|
module.exports.MockPool = MockPool;
|
|
module.exports.MockAgent = MockAgent;
|
|
module.exports.mockErrors = mockErrors;
|
|
|
|
const { EventSource } = require('./lib/web/eventsource/eventsource');
|
|
|
|
module.exports.EventSource = EventSource;
|