urllib 4.3.1 → 4.5.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -2
- package/dist/commonjs/FetchOpaqueInterceptor.d.ts +8 -0
- package/dist/commonjs/FetchOpaqueInterceptor.js +18 -0
- package/dist/commonjs/FormData.d.ts +4 -0
- package/dist/commonjs/FormData.js +38 -0
- package/dist/commonjs/HttpAgent.d.ts +3 -3
- package/dist/commonjs/HttpAgent.js +6 -5
- package/dist/commonjs/HttpClient.d.ts +31 -0
- package/dist/commonjs/HttpClient.js +62 -98
- package/dist/commonjs/Request.d.ts +5 -0
- package/dist/commonjs/diagnosticsChannel.js +11 -4
- package/dist/commonjs/fetch.d.ts +24 -0
- package/dist/commonjs/fetch.js +221 -0
- package/dist/commonjs/index.d.ts +2 -1
- package/dist/commonjs/index.js +7 -2
- package/dist/commonjs/utils.d.ts +4 -0
- package/dist/commonjs/utils.js +57 -1
- package/dist/esm/FetchOpaqueInterceptor.d.ts +8 -0
- package/dist/esm/FetchOpaqueInterceptor.js +12 -0
- package/dist/esm/FormData.d.ts +4 -0
- package/dist/esm/FormData.js +31 -0
- package/dist/esm/HttpAgent.d.ts +3 -3
- package/dist/esm/HttpAgent.js +6 -5
- package/dist/esm/HttpClient.d.ts +31 -0
- package/dist/esm/HttpClient.js +59 -95
- package/dist/esm/Request.d.ts +5 -0
- package/dist/esm/diagnosticsChannel.js +11 -4
- package/dist/esm/fetch.d.ts +24 -0
- package/dist/esm/fetch.js +214 -0
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.js +3 -2
- package/dist/esm/utils.d.ts +4 -0
- package/dist/esm/utils.js +52 -1
- package/dist/package.json +1 -1
- package/package.json +7 -5
- package/src/FetchOpaqueInterceptor.ts +41 -0
- package/src/FormData.ts +32 -0
- package/src/HttpAgent.ts +9 -7
- package/src/HttpClient.ts +92 -100
- package/src/Request.ts +6 -0
- package/src/diagnosticsChannel.ts +13 -3
- package/src/fetch.ts +263 -0
- package/src/index.ts +3 -0
- package/src/utils.ts +54 -0
@@ -0,0 +1,214 @@
|
|
1
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
2
|
+
import { fetch as UndiciFetch, Request, Agent, getGlobalDispatcher, } from 'undici';
|
3
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
4
|
+
// @ts-ignore
|
5
|
+
import undiciSymbols from 'undici/lib/core/symbols.js';
|
6
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
7
|
+
// @ts-ignore
|
8
|
+
import { getResponseState } from 'undici/lib/web/fetch/response.js';
|
9
|
+
import { channels, } from './HttpClient.js';
|
10
|
+
import { HttpAgent, } from './HttpAgent.js';
|
11
|
+
import { initDiagnosticsChannel } from './diagnosticsChannel.js';
|
12
|
+
import { convertHeader, globalId, performanceTime, updateSocketInfo } from './utils.js';
|
13
|
+
import symbols from './symbols.js';
|
14
|
+
import { fetchOpaqueInterceptor } from './FetchOpaqueInterceptor.js';
|
15
|
+
export class FetchFactory {
|
16
|
+
static #dispatcher;
|
17
|
+
static #opaqueLocalStorage = new AsyncLocalStorage();
|
18
|
+
static getDispatcher() {
|
19
|
+
return FetchFactory.#dispatcher ?? getGlobalDispatcher();
|
20
|
+
}
|
21
|
+
static setDispatcher(dispatcher) {
|
22
|
+
FetchFactory.#dispatcher = dispatcher;
|
23
|
+
}
|
24
|
+
static setClientOptions(clientOptions) {
|
25
|
+
let dispatcherOption = {
|
26
|
+
interceptors: {
|
27
|
+
Agent: [
|
28
|
+
fetchOpaqueInterceptor({
|
29
|
+
opaqueLocalStorage: FetchFactory.#opaqueLocalStorage,
|
30
|
+
}),
|
31
|
+
],
|
32
|
+
Client: [],
|
33
|
+
},
|
34
|
+
};
|
35
|
+
let dispatcherClazz = Agent;
|
36
|
+
if (clientOptions?.lookup || clientOptions?.checkAddress) {
|
37
|
+
dispatcherOption = {
|
38
|
+
...dispatcherOption,
|
39
|
+
lookup: clientOptions.lookup,
|
40
|
+
checkAddress: clientOptions.checkAddress,
|
41
|
+
connect: clientOptions.connect,
|
42
|
+
allowH2: clientOptions.allowH2,
|
43
|
+
};
|
44
|
+
dispatcherClazz = HttpAgent;
|
45
|
+
}
|
46
|
+
else if (clientOptions?.connect) {
|
47
|
+
dispatcherOption = {
|
48
|
+
...dispatcherOption,
|
49
|
+
connect: clientOptions.connect,
|
50
|
+
allowH2: clientOptions.allowH2,
|
51
|
+
};
|
52
|
+
dispatcherClazz = Agent;
|
53
|
+
}
|
54
|
+
else if (clientOptions?.allowH2) {
|
55
|
+
// Support HTTP2
|
56
|
+
dispatcherOption = {
|
57
|
+
...dispatcherOption,
|
58
|
+
allowH2: clientOptions.allowH2,
|
59
|
+
};
|
60
|
+
dispatcherClazz = Agent;
|
61
|
+
}
|
62
|
+
FetchFactory.#dispatcher = new dispatcherClazz(dispatcherOption);
|
63
|
+
initDiagnosticsChannel();
|
64
|
+
}
|
65
|
+
static getDispatcherPoolStats() {
|
66
|
+
const agent = FetchFactory.getDispatcher();
|
67
|
+
// origin => Pool Instance
|
68
|
+
const clients = Reflect.get(agent, undiciSymbols.kClients);
|
69
|
+
const poolStatsMap = {};
|
70
|
+
if (!clients) {
|
71
|
+
return poolStatsMap;
|
72
|
+
}
|
73
|
+
for (const [key, ref] of clients) {
|
74
|
+
const pool = typeof ref.deref === 'function' ? ref.deref() : ref;
|
75
|
+
const stats = pool?.stats;
|
76
|
+
if (!stats)
|
77
|
+
continue;
|
78
|
+
poolStatsMap[key] = {
|
79
|
+
connected: stats.connected,
|
80
|
+
free: stats.free,
|
81
|
+
pending: stats.pending,
|
82
|
+
queued: stats.queued,
|
83
|
+
running: stats.running,
|
84
|
+
size: stats.size,
|
85
|
+
};
|
86
|
+
}
|
87
|
+
return poolStatsMap;
|
88
|
+
}
|
89
|
+
static async fetch(input, init) {
|
90
|
+
const requestStartTime = performance.now();
|
91
|
+
init = init ?? {};
|
92
|
+
init.dispatcher = init.dispatcher ?? FetchFactory.#dispatcher;
|
93
|
+
const request = new Request(input, init);
|
94
|
+
const requestId = globalId('HttpClientRequest');
|
95
|
+
// https://developer.chrome.com/docs/devtools/network/reference/?utm_source=devtools#timing-explanation
|
96
|
+
const timing = {
|
97
|
+
// socket assigned
|
98
|
+
queuing: 0,
|
99
|
+
// dns lookup time
|
100
|
+
// dnslookup: 0,
|
101
|
+
// socket connected
|
102
|
+
connected: 0,
|
103
|
+
// request headers sent
|
104
|
+
requestHeadersSent: 0,
|
105
|
+
// request sent, including headers and body
|
106
|
+
requestSent: 0,
|
107
|
+
// Time to first byte (TTFB), the response headers have been received
|
108
|
+
waiting: 0,
|
109
|
+
// the response body and trailers have been received
|
110
|
+
contentDownload: 0,
|
111
|
+
};
|
112
|
+
// using opaque to diagnostics channel, binding request and socket
|
113
|
+
const internalOpaque = {
|
114
|
+
[symbols.kRequestId]: requestId,
|
115
|
+
[symbols.kRequestStartTime]: requestStartTime,
|
116
|
+
[symbols.kEnableRequestTiming]: !!(init.timing ?? true),
|
117
|
+
[symbols.kRequestTiming]: timing,
|
118
|
+
// [symbols.kRequestOriginalOpaque]: originalOpaque,
|
119
|
+
};
|
120
|
+
const reqMeta = {
|
121
|
+
requestId,
|
122
|
+
url: request.url,
|
123
|
+
args: {
|
124
|
+
method: request.method,
|
125
|
+
type: request.method,
|
126
|
+
data: request.body,
|
127
|
+
headers: convertHeader(request.headers),
|
128
|
+
},
|
129
|
+
retries: 0,
|
130
|
+
};
|
131
|
+
const fetchMeta = {
|
132
|
+
requestId,
|
133
|
+
request,
|
134
|
+
};
|
135
|
+
const socketInfo = {
|
136
|
+
id: 0,
|
137
|
+
localAddress: '',
|
138
|
+
localPort: 0,
|
139
|
+
remoteAddress: '',
|
140
|
+
remotePort: 0,
|
141
|
+
remoteFamily: '',
|
142
|
+
bytesWritten: 0,
|
143
|
+
bytesRead: 0,
|
144
|
+
handledRequests: 0,
|
145
|
+
handledResponses: 0,
|
146
|
+
};
|
147
|
+
channels.request.publish({
|
148
|
+
request: reqMeta,
|
149
|
+
});
|
150
|
+
channels.fetchRequest.publish({
|
151
|
+
fetch: fetchMeta,
|
152
|
+
});
|
153
|
+
let res;
|
154
|
+
// keep urllib createCallbackResponse style
|
155
|
+
const resHeaders = {};
|
156
|
+
const urllibResponse = {
|
157
|
+
status: -1,
|
158
|
+
statusCode: -1,
|
159
|
+
statusText: '',
|
160
|
+
statusMessage: '',
|
161
|
+
headers: resHeaders,
|
162
|
+
size: 0,
|
163
|
+
aborted: false,
|
164
|
+
rt: 0,
|
165
|
+
keepAliveSocket: true,
|
166
|
+
requestUrls: [
|
167
|
+
request.url,
|
168
|
+
],
|
169
|
+
timing,
|
170
|
+
socket: socketInfo,
|
171
|
+
retries: 0,
|
172
|
+
socketErrorRetries: 0,
|
173
|
+
};
|
174
|
+
try {
|
175
|
+
await FetchFactory.#opaqueLocalStorage.run(internalOpaque, async () => {
|
176
|
+
res = await UndiciFetch(input, init);
|
177
|
+
});
|
178
|
+
}
|
179
|
+
catch (e) {
|
180
|
+
channels.response.publish({
|
181
|
+
fetch: fetchMeta,
|
182
|
+
error: e,
|
183
|
+
});
|
184
|
+
channels.fetchResponse.publish({
|
185
|
+
request: reqMeta,
|
186
|
+
response: urllibResponse,
|
187
|
+
error: e,
|
188
|
+
});
|
189
|
+
throw e;
|
190
|
+
}
|
191
|
+
// get undici internal response
|
192
|
+
const state = getResponseState(res);
|
193
|
+
updateSocketInfo(socketInfo, internalOpaque /* , rawError */);
|
194
|
+
urllibResponse.headers = convertHeader(res.headers);
|
195
|
+
urllibResponse.status = urllibResponse.statusCode = res.status;
|
196
|
+
urllibResponse.statusMessage = res.statusText;
|
197
|
+
if (urllibResponse.headers['content-length']) {
|
198
|
+
urllibResponse.size = parseInt(urllibResponse.headers['content-length']);
|
199
|
+
}
|
200
|
+
urllibResponse.rt = performanceTime(requestStartTime);
|
201
|
+
channels.fetchResponse.publish({
|
202
|
+
fetch: fetchMeta,
|
203
|
+
timingInfo: state.timingInfo,
|
204
|
+
response: res,
|
205
|
+
});
|
206
|
+
channels.response.publish({
|
207
|
+
request: reqMeta,
|
208
|
+
response: urllibResponse,
|
209
|
+
});
|
210
|
+
return res;
|
211
|
+
}
|
212
|
+
}
|
213
|
+
export const fetch = FetchFactory.fetch;
|
214
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmV0Y2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckQsT0FBTyxFQUNMLEtBQUssSUFBSSxXQUFXLEVBR3BCLE9BQU8sRUFFUCxLQUFLLEVBQ0wsbUJBQW1CLEdBRXBCLE1BQU0sUUFBUSxDQUFDO0FBQ2hCLDZEQUE2RDtBQUM3RCxhQUFhO0FBQ2IsT0FBTyxhQUFhLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsNkRBQTZEO0FBQzdELGFBQWE7QUFDYixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsUUFBUSxHQU1ULE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUNMLFNBQVMsR0FFVixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN4RixPQUFPLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFNbkMsT0FBTyxFQUFlLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFvQmxGLE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLE1BQU0sQ0FBQyxXQUFXLENBQVE7SUFDMUIsTUFBTSxDQUFDLG1CQUFtQixHQUFHLElBQUksaUJBQWlCLEVBQWUsQ0FBQztJQUVsRSxNQUFNLENBQUMsYUFBYTtRQUNsQixPQUFPLFlBQVksQ0FBQyxXQUFXLElBQUksbUJBQW1CLEVBQUUsQ0FBQztJQUMzRCxDQUFDO0lBRUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxVQUFpQjtRQUNwQyxZQUFZLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsTUFB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
|
package/dist/esm/index.d.ts
CHANGED
@@ -3,13 +3,14 @@ import { RequestOptions, RequestURL } from './Request.js';
|
|
3
3
|
export declare function getDefaultHttpClient(): HttpClient;
|
4
4
|
export declare function request<T = any>(url: RequestURL, options?: RequestOptions): Promise<import("./Response.js").HttpClientResponse<T>>;
|
5
5
|
export declare function curl<T = any>(url: RequestURL, options?: RequestOptions): Promise<import("./Response.js").HttpClientResponse<T>>;
|
6
|
-
export { MockAgent, ProxyAgent, Agent, Dispatcher, setGlobalDispatcher, getGlobalDispatcher, } from 'undici';
|
6
|
+
export { MockAgent, ProxyAgent, Agent, Dispatcher, setGlobalDispatcher, getGlobalDispatcher, Request, RequestInfo, RequestInit, Response, } from 'undici';
|
7
7
|
export { HttpClient, HttpClient as HttpClient2, HEADER_USER_AGENT as USER_AGENT, RequestDiagnosticsMessage, ResponseDiagnosticsMessage, ClientOptions, } from './HttpClient.js';
|
8
8
|
export { RequestOptions, RequestOptions as RequestOptions2, RequestURL, HttpMethod, FixJSONCtlCharsHandler, FixJSONCtlChars, } from './Request.js';
|
9
9
|
export { CheckAddressFunction } from './HttpAgent.js';
|
10
10
|
export { SocketInfo, Timing, RawResponseWithMeta, HttpClientResponse, } from './Response.js';
|
11
11
|
export { IncomingHttpHeaders, } from './IncomingHttpHeaders.js';
|
12
12
|
export * from './HttpClientError.js';
|
13
|
+
export { FetchFactory, fetch } from './fetch.js';
|
13
14
|
declare const _default: {
|
14
15
|
request: typeof request;
|
15
16
|
curl: typeof curl;
|
package/dist/esm/index.js
CHANGED
@@ -29,13 +29,14 @@ export async function request(url, options) {
|
|
29
29
|
export async function curl(url, options) {
|
30
30
|
return await request(url, options);
|
31
31
|
}
|
32
|
-
export { MockAgent, ProxyAgent, Agent, Dispatcher, setGlobalDispatcher, getGlobalDispatcher, } from 'undici';
|
32
|
+
export { MockAgent, ProxyAgent, Agent, Dispatcher, setGlobalDispatcher, getGlobalDispatcher, Request, Response, } from 'undici';
|
33
33
|
// HttpClient2 is keep compatible with urllib@2 HttpClient2
|
34
34
|
export { HttpClient, HttpClient as HttpClient2, HEADER_USER_AGENT as USER_AGENT, } from './HttpClient.js';
|
35
35
|
export * from './HttpClientError.js';
|
36
|
+
export { FetchFactory, fetch } from './fetch.js';
|
36
37
|
export default {
|
37
38
|
request,
|
38
39
|
curl,
|
39
40
|
USER_AGENT: HEADER_USER_AGENT,
|
40
41
|
};
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQixPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHaEUsSUFBSSxVQUFzQixDQUFDO0FBQzNCLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFNUMsTUFBTSxVQUFVLG9CQUFvQjtJQUNsQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsVUFBVSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLE9BQU8sQ0FBVSxHQUFlLEVBQUUsT0FBd0I7SUFDOUUsSUFBSSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDeEIsSUFBSSxzQkFBc0IsR0FBRyx1QkFBdUIsQ0FBQyxHQUFHLENBQWEsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQzVCLHNCQUFzQixHQUFHLElBQUksVUFBVSxDQUFDO2dCQUN0QyxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRTthQUM1QyxDQUFDLENBQUM7WUFDSCx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFDRCxPQUFPLE1BQU0sc0JBQXNCLENBQUMsT0FBTyxDQUFJLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsT0FBTyxNQUFNLG9CQUFvQixFQUFFLENBQUMsT0FBTyxDQUFJLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQsMkRBQTJEO0FBQzNELFFBQVE7QUFDUixvQ0FBb0M7QUFDcEMsb0JBQW9CO0FBQ3BCLE1BQU07QUFDTixNQUFNLENBQUMsS0FBSyxVQUFVLElBQUksQ0FBVSxHQUFlLEVBQUUsT0FBd0I7SUFDM0UsT0FBTyxNQUFNLE9BQU8sQ0FBSSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE9BQU8sRUFDTCxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQ3hDLG1CQUFtQixFQUFFLG1CQUFtQixFQUN4QyxPQUFPLEVBQ1AsUUFBUSxHQUNULE1BQU0sUUFBUSxDQUFDO0FBQ2hCLDJEQUEyRDtBQUMzRCxPQUFPLEVBQ0wsVUFBVSxFQUFFLFVBQVUsSUFBSSxXQUFXLEVBQUUsaUJBQWlCLElBQUksVUFBVSxHQUV2RSxNQUFNLGlCQUFpQixDQUFDO0FBZXpCLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFakQsZUFBZTtJQUNiLE9BQU87SUFDUCxJQUFJO0lBQ0osVUFBVSxFQUFFLGlCQUFpQjtDQUM5QixDQUFDIn0=
|
package/dist/esm/utils.d.ts
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
import type { FixJSONCtlChars } from './Request.js';
|
2
|
+
import { SocketInfo } from './Response.js';
|
3
|
+
import { IncomingHttpHeaders } from './IncomingHttpHeaders.js';
|
2
4
|
export declare function parseJSON(data: string, fixJSONCtlChars?: FixJSONCtlChars): string;
|
3
5
|
export declare function digestAuthHeader(method: string, uri: string, wwwAuthenticate: string, userpass: string): string;
|
4
6
|
export declare function globalId(category: string): number;
|
5
7
|
export declare function performanceTime(startTime: number, now?: number): number;
|
6
8
|
export declare function isReadable(stream: any): boolean;
|
9
|
+
export declare function updateSocketInfo(socketInfo: SocketInfo, internalOpaque: any, err?: any): void;
|
10
|
+
export declare function convertHeader(headers: Headers): IncomingHttpHeaders;
|
package/dist/esm/utils.js
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
import { randomBytes, createHash } from 'node:crypto';
|
2
2
|
import { Readable } from 'node:stream';
|
3
3
|
import { performance } from 'node:perf_hooks';
|
4
|
+
import symbols from './symbols.js';
|
4
5
|
const JSONCtlCharsMap = {
|
5
6
|
'"': '\\"', // \u0022
|
6
7
|
'\\': '\\\\', // \u005c
|
@@ -139,4 +140,54 @@ export function isReadable(stream) {
|
|
139
140
|
&& typeof stream._read === 'function'
|
140
141
|
&& typeof stream._readableState === 'object';
|
141
142
|
}
|
142
|
-
|
143
|
+
export function updateSocketInfo(socketInfo, internalOpaque, err) {
|
144
|
+
const socket = internalOpaque[symbols.kRequestSocket] ?? err?.[symbols.kErrorSocket];
|
145
|
+
if (socket) {
|
146
|
+
socketInfo.id = socket[symbols.kSocketId];
|
147
|
+
socketInfo.handledRequests = socket[symbols.kHandledRequests];
|
148
|
+
socketInfo.handledResponses = socket[symbols.kHandledResponses];
|
149
|
+
if (socket[symbols.kSocketLocalAddress]) {
|
150
|
+
socketInfo.localAddress = socket[symbols.kSocketLocalAddress];
|
151
|
+
socketInfo.localPort = socket[symbols.kSocketLocalPort];
|
152
|
+
}
|
153
|
+
if (socket.remoteAddress) {
|
154
|
+
socketInfo.remoteAddress = socket.remoteAddress;
|
155
|
+
socketInfo.remotePort = socket.remotePort;
|
156
|
+
socketInfo.remoteFamily = socket.remoteFamily;
|
157
|
+
}
|
158
|
+
socketInfo.bytesRead = socket.bytesRead;
|
159
|
+
socketInfo.bytesWritten = socket.bytesWritten;
|
160
|
+
if (socket[symbols.kSocketConnectErrorTime]) {
|
161
|
+
socketInfo.connectErrorTime = socket[symbols.kSocketConnectErrorTime];
|
162
|
+
if (Array.isArray(socket.autoSelectFamilyAttemptedAddresses)) {
|
163
|
+
socketInfo.attemptedRemoteAddresses = socket.autoSelectFamilyAttemptedAddresses;
|
164
|
+
}
|
165
|
+
socketInfo.connectProtocol = socket[symbols.kSocketConnectProtocol];
|
166
|
+
socketInfo.connectHost = socket[symbols.kSocketConnectHost];
|
167
|
+
socketInfo.connectPort = socket[symbols.kSocketConnectPort];
|
168
|
+
}
|
169
|
+
if (socket[symbols.kSocketConnectedTime]) {
|
170
|
+
socketInfo.connectedTime = socket[symbols.kSocketConnectedTime];
|
171
|
+
}
|
172
|
+
if (socket[symbols.kSocketRequestEndTime]) {
|
173
|
+
socketInfo.lastRequestEndTime = socket[symbols.kSocketRequestEndTime];
|
174
|
+
}
|
175
|
+
socket[symbols.kSocketRequestEndTime] = new Date();
|
176
|
+
}
|
177
|
+
}
|
178
|
+
export function convertHeader(headers) {
|
179
|
+
const res = {};
|
180
|
+
for (const [key, value] of headers.entries()) {
|
181
|
+
if (res[key]) {
|
182
|
+
if (!Array.isArray(res[key])) {
|
183
|
+
res[key] = [res[key]];
|
184
|
+
}
|
185
|
+
res[key].push(value);
|
186
|
+
}
|
187
|
+
else {
|
188
|
+
res[key] = value;
|
189
|
+
}
|
190
|
+
}
|
191
|
+
return res;
|
192
|
+
}
|
193
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHOUMsT0FBTyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBR25DLE1BQU0sZUFBZSxHQUEyQjtJQUM5QyxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVM7SUFDckIsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTO0lBQ3ZCLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUztJQUN0QixJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVM7SUFDdEIsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTO0lBQ3RCLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUztJQUN0QixJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVM7Q0FDdkIsQ0FBQztBQUNGLG1DQUFtQztBQUNuQyxNQUFNLGNBQWMsR0FBRyx3QkFBd0IsQ0FBQztBQUVoRCxTQUFTLGNBQWMsQ0FBQyxDQUFTO0lBQy9CLE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RixDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxLQUFhO0lBQ3hDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTLENBQUMsSUFBWSxFQUFFLGVBQWlDO0lBQ3ZFLElBQUksT0FB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LENBQUM7SUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQztJQUN6QixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzFDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRTNDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RCLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQzNDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFOUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNqRCxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNsRCxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDL0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNSLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLENBQUMsSUFBSSxJQUFJLEVBQUUsSUFBSSxNQUFNLElB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
|
package/dist/package.json
CHANGED
package/package.json
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
{
|
2
2
|
"name": "urllib",
|
3
|
-
"version": "4.
|
3
|
+
"version": "4.5.0-beta.1",
|
4
4
|
"publishConfig": {
|
5
|
-
"tag": "
|
5
|
+
"tag": "beta"
|
6
6
|
},
|
7
7
|
"description": "Help in opening URLs (mostly HTTP) in a complex world — basic and digest authentication, redirections, timeout and more. Base undici API.",
|
8
8
|
"keywords": [
|
@@ -44,21 +44,22 @@
|
|
44
44
|
"prepublishOnly": "npm run build"
|
45
45
|
},
|
46
46
|
"dependencies": {
|
47
|
+
"form-data": "^4.0.1",
|
47
48
|
"formstream": "^1.5.1",
|
48
49
|
"mime-types": "^2.1.35",
|
49
50
|
"qs": "^6.12.1",
|
50
51
|
"type-fest": "^4.20.1",
|
51
|
-
"undici": "^
|
52
|
+
"undici": "^7.0.0",
|
52
53
|
"ylru": "^2.0.0"
|
53
54
|
},
|
54
55
|
"devDependencies": {
|
55
|
-
"@arethetypeswrong/cli": "^0.
|
56
|
+
"@arethetypeswrong/cli": "^0.17.0",
|
56
57
|
"@eggjs/tsconfig": "^1.3.3",
|
57
58
|
"@tsconfig/node18": "^18.2.1",
|
58
59
|
"@tsconfig/strictest": "^2.0.2",
|
59
60
|
"@types/busboy": "^1.5.0",
|
60
61
|
"@types/mime-types": "^2.1.1",
|
61
|
-
"@types/node": "^
|
62
|
+
"@types/node": "^22.0.0",
|
62
63
|
"@types/proxy": "^1.0.4",
|
63
64
|
"@types/qs": "^6.9.7",
|
64
65
|
"@types/selfsigned": "^2.0.1",
|
@@ -68,6 +69,7 @@
|
|
68
69
|
"cross-env": "^7.0.3",
|
69
70
|
"eslint": "8",
|
70
71
|
"eslint-config-egg": "14",
|
72
|
+
"https-pem": "^3.0.0",
|
71
73
|
"iconv-lite": "^0.6.3",
|
72
74
|
"proxy": "^1.0.2",
|
73
75
|
"selfsigned": "^2.0.1",
|
@@ -0,0 +1,41 @@
|
|
1
|
+
// const { AsyncLocalStorage } = require('node:async_hooks');
|
2
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
3
|
+
import symbols from './symbols.js';
|
4
|
+
import { Dispatcher } from 'undici';
|
5
|
+
|
6
|
+
// const RedirectHandler = require('../handler/redirect-handler')
|
7
|
+
|
8
|
+
export interface FetchOpaque {
|
9
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
10
|
+
// @ts-ignore
|
11
|
+
[symbols.kRequestId]: number;
|
12
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
13
|
+
// @ts-ignore
|
14
|
+
[symbols.kRequestStartTime]: number;
|
15
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
16
|
+
// @ts-ignore
|
17
|
+
[symbols.kEnableRequestTiming]: number;
|
18
|
+
}
|
19
|
+
|
20
|
+
// const internalOpaque = {
|
21
|
+
// [symbols.kRequestId]: requestId,
|
22
|
+
// [symbols.kRequestStartTime]: requestStartTime,
|
23
|
+
// [symbols.kEnableRequestTiming]: !!(init.timing ?? true),
|
24
|
+
// [symbols.kRequestTiming]: timing,
|
25
|
+
// // [symbols.kRequestOriginalOpaque]: originalOpaque,
|
26
|
+
// };
|
27
|
+
|
28
|
+
export interface OpaqueInterceptorOptions {
|
29
|
+
opaqueLocalStorage: AsyncLocalStorage<FetchOpaque>;
|
30
|
+
}
|
31
|
+
|
32
|
+
export function fetchOpaqueInterceptor(opts: OpaqueInterceptorOptions) {
|
33
|
+
const opaqueLocalStorage = opts?.opaqueLocalStorage;
|
34
|
+
return (dispatch: Dispatcher['dispatch']): Dispatcher['dispatch'] => {
|
35
|
+
return function redirectInterceptor(opts: Dispatcher.DispatchOptions, handler: Dispatcher.DispatchHandler) {
|
36
|
+
const opaque = opaqueLocalStorage?.getStore();
|
37
|
+
(handler as any).opaque = opaque;
|
38
|
+
return dispatch(opts, handler);
|
39
|
+
};
|
40
|
+
};
|
41
|
+
}
|
package/src/FormData.ts
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
import path from 'node:path';
|
2
|
+
import _FormData from 'form-data';
|
3
|
+
|
4
|
+
export class FormData extends _FormData {
|
5
|
+
_getContentDisposition(value: any, options: any) {
|
6
|
+
// support non-ascii filename
|
7
|
+
// https://github.com/form-data/form-data/pull/571
|
8
|
+
let filename;
|
9
|
+
let contentDisposition;
|
10
|
+
|
11
|
+
if (typeof options.filepath === 'string') {
|
12
|
+
// custom filepath for relative paths
|
13
|
+
filename = path.normalize(options.filepath).replace(/\\/g, '/');
|
14
|
+
} else if (options.filename || value.name || value.path) {
|
15
|
+
// custom filename take precedence
|
16
|
+
// formidable and the browser add a name property
|
17
|
+
// fs- and request- streams have path property
|
18
|
+
filename = path.basename(options.filename || value.name || value.path);
|
19
|
+
} else if (value.readable && value.hasOwnProperty('httpVersion')) {
|
20
|
+
// or try http response
|
21
|
+
filename = path.basename(value.client._httpMessage.path || '');
|
22
|
+
}
|
23
|
+
|
24
|
+
if (filename) {
|
25
|
+
// https://datatracker.ietf.org/doc/html/rfc6266#section-4.1
|
26
|
+
// support non-ascii filename
|
27
|
+
contentDisposition = 'filename="' + filename + '"; filename*=UTF-8\'\'' + encodeURIComponent(filename);
|
28
|
+
}
|
29
|
+
|
30
|
+
return contentDisposition;
|
31
|
+
}
|
32
|
+
}
|
package/src/HttpAgent.ts
CHANGED
@@ -8,12 +8,12 @@ import {
|
|
8
8
|
|
9
9
|
export type CheckAddressFunction = (ip: string, family: number | string, hostname: string) => boolean;
|
10
10
|
|
11
|
-
export
|
11
|
+
export interface HttpAgentOptions extends Agent.Options {
|
12
12
|
lookup?: LookupFunction;
|
13
13
|
checkAddress?: CheckAddressFunction;
|
14
14
|
connect?: buildConnector.BuildOptions,
|
15
15
|
allowH2?: boolean;
|
16
|
-
}
|
16
|
+
}
|
17
17
|
|
18
18
|
class IllegalAddressError extends Error {
|
19
19
|
hostname: string;
|
@@ -36,9 +36,10 @@ export class HttpAgent extends Agent {
|
|
36
36
|
|
37
37
|
constructor(options: HttpAgentOptions) {
|
38
38
|
/* eslint node/prefer-promises/dns: off*/
|
39
|
-
const
|
40
|
-
|
41
|
-
|
39
|
+
const { lookup = dns.lookup, ...baseOpts } = options;
|
40
|
+
|
41
|
+
const lookupFunction: LookupFunction = (hostname, dnsOptions, callback) => {
|
42
|
+
lookup(hostname, dnsOptions, (err, ...args: any[]) => {
|
42
43
|
// address will be array on Node.js >= 20
|
43
44
|
const address = args[0];
|
44
45
|
const family = args[1];
|
@@ -63,12 +64,13 @@ export class HttpAgent extends Agent {
|
|
63
64
|
});
|
64
65
|
};
|
65
66
|
super({
|
66
|
-
|
67
|
+
...baseOpts,
|
68
|
+
connect: { ...options.connect, lookup: lookupFunction, allowH2: options.allowH2 },
|
67
69
|
});
|
68
70
|
this.#checkAddress = options.checkAddress;
|
69
71
|
}
|
70
72
|
|
71
|
-
dispatch(options: Agent.DispatchOptions, handler: Dispatcher.
|
73
|
+
dispatch(options: Agent.DispatchOptions, handler: Dispatcher.DispatchHandler): boolean {
|
72
74
|
if (this.#checkAddress && options.origin) {
|
73
75
|
const originUrl = typeof options.origin === 'string' ? new URL(options.origin) : options.origin;
|
74
76
|
let hostname = originUrl.hostname;
|