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.
Files changed (44) hide show
  1. package/README.md +0 -2
  2. package/dist/commonjs/FetchOpaqueInterceptor.d.ts +8 -0
  3. package/dist/commonjs/FetchOpaqueInterceptor.js +18 -0
  4. package/dist/commonjs/FormData.d.ts +4 -0
  5. package/dist/commonjs/FormData.js +38 -0
  6. package/dist/commonjs/HttpAgent.d.ts +3 -3
  7. package/dist/commonjs/HttpAgent.js +6 -5
  8. package/dist/commonjs/HttpClient.d.ts +31 -0
  9. package/dist/commonjs/HttpClient.js +62 -98
  10. package/dist/commonjs/Request.d.ts +5 -0
  11. package/dist/commonjs/diagnosticsChannel.js +11 -4
  12. package/dist/commonjs/fetch.d.ts +24 -0
  13. package/dist/commonjs/fetch.js +221 -0
  14. package/dist/commonjs/index.d.ts +2 -1
  15. package/dist/commonjs/index.js +7 -2
  16. package/dist/commonjs/utils.d.ts +4 -0
  17. package/dist/commonjs/utils.js +57 -1
  18. package/dist/esm/FetchOpaqueInterceptor.d.ts +8 -0
  19. package/dist/esm/FetchOpaqueInterceptor.js +12 -0
  20. package/dist/esm/FormData.d.ts +4 -0
  21. package/dist/esm/FormData.js +31 -0
  22. package/dist/esm/HttpAgent.d.ts +3 -3
  23. package/dist/esm/HttpAgent.js +6 -5
  24. package/dist/esm/HttpClient.d.ts +31 -0
  25. package/dist/esm/HttpClient.js +59 -95
  26. package/dist/esm/Request.d.ts +5 -0
  27. package/dist/esm/diagnosticsChannel.js +11 -4
  28. package/dist/esm/fetch.d.ts +24 -0
  29. package/dist/esm/fetch.js +214 -0
  30. package/dist/esm/index.d.ts +2 -1
  31. package/dist/esm/index.js +3 -2
  32. package/dist/esm/utils.d.ts +4 -0
  33. package/dist/esm/utils.js +52 -1
  34. package/dist/package.json +1 -1
  35. package/package.json +7 -5
  36. package/src/FetchOpaqueInterceptor.ts +41 -0
  37. package/src/FormData.ts +32 -0
  38. package/src/HttpAgent.ts +9 -7
  39. package/src/HttpClient.ts +92 -100
  40. package/src/Request.ts +6 -0
  41. package/src/diagnosticsChannel.ts +13 -3
  42. package/src/fetch.ts +263 -0
  43. package/src/index.ts +3 -0
  44. 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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
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQixPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHaEUsSUFBSSxVQUFzQixDQUFDO0FBQzNCLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFNUMsTUFBTSxVQUFVLG9CQUFvQjtJQUNsQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsVUFBVSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLE9BQU8sQ0FBVSxHQUFlLEVBQUUsT0FBd0I7SUFDOUUsSUFBSSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDeEIsSUFBSSxzQkFBc0IsR0FBRyx1QkFBdUIsQ0FBQyxHQUFHLENBQWEsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQzVCLHNCQUFzQixHQUFHLElBQUksVUFBVSxDQUFDO2dCQUN0QyxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRTthQUM1QyxDQUFDLENBQUM7WUFDSCx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFDRCxPQUFPLE1BQU0sc0JBQXNCLENBQUMsT0FBTyxDQUFJLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsT0FBTyxNQUFNLG9CQUFvQixFQUFFLENBQUMsT0FBTyxDQUFJLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQsMkRBQTJEO0FBQzNELFFBQVE7QUFDUixvQ0FBb0M7QUFDcEMsb0JBQW9CO0FBQ3BCLE1BQU07QUFDTixNQUFNLENBQUMsS0FBSyxVQUFVLElBQUksQ0FBVSxHQUFlLEVBQUUsT0FBd0I7SUFDM0UsT0FBTyxNQUFNLE9BQU8sQ0FBSSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE9BQU8sRUFDTCxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQ3hDLG1CQUFtQixFQUFFLG1CQUFtQixHQUN6QyxNQUFNLFFBQVEsQ0FBQztBQUNoQiwyREFBMkQ7QUFDM0QsT0FBTyxFQUNMLFVBQVUsRUFBRSxVQUFVLElBQUksV0FBVyxFQUFFLGlCQUFpQixJQUFJLFVBQVUsR0FFdkUsTUFBTSxpQkFBaUIsQ0FBQztBQWV6QixjQUFjLHNCQUFzQixDQUFDO0FBRXJDLGVBQWU7SUFDYixPQUFPO0lBQ1AsSUFBSTtJQUNKLFVBQVUsRUFBRSxpQkFBaUI7Q0FDOUIsQ0FBQyJ9
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQixPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHaEUsSUFBSSxVQUFzQixDQUFDO0FBQzNCLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFNUMsTUFBTSxVQUFVLG9CQUFvQjtJQUNsQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsVUFBVSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLE9BQU8sQ0FBVSxHQUFlLEVBQUUsT0FBd0I7SUFDOUUsSUFBSSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDeEIsSUFBSSxzQkFBc0IsR0FBRyx1QkFBdUIsQ0FBQyxHQUFHLENBQWEsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQzVCLHNCQUFzQixHQUFHLElBQUksVUFBVSxDQUFDO2dCQUN0QyxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRTthQUM1QyxDQUFDLENBQUM7WUFDSCx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFDRCxPQUFPLE1BQU0sc0JBQXNCLENBQUMsT0FBTyxDQUFJLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsT0FBTyxNQUFNLG9CQUFvQixFQUFFLENBQUMsT0FBTyxDQUFJLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQsMkRBQTJEO0FBQzNELFFBQVE7QUFDUixvQ0FBb0M7QUFDcEMsb0JBQW9CO0FBQ3BCLE1BQU07QUFDTixNQUFNLENBQUMsS0FBSyxVQUFVLElBQUksQ0FBVSxHQUFlLEVBQUUsT0FBd0I7SUFDM0UsT0FBTyxNQUFNLE9BQU8sQ0FBSSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE9BQU8sRUFDTCxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQ3hDLG1CQUFtQixFQUFFLG1CQUFtQixFQUN4QyxPQUFPLEVBQ1AsUUFBUSxHQUNULE1BQU0sUUFBUSxDQUFDO0FBQ2hCLDJEQUEyRDtBQUMzRCxPQUFPLEVBQ0wsVUFBVSxFQUFFLFVBQVUsSUFBSSxXQUFXLEVBQUUsaUJBQWlCLElBQUksVUFBVSxHQUV2RSxNQUFNLGlCQUFpQixDQUFDO0FBZXpCLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFakQsZUFBZTtJQUNiLE9BQU87SUFDUCxJQUFJO0lBQ0osVUFBVSxFQUFFLGlCQUFpQjtDQUM5QixDQUFDIn0=
@@ -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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHOUMsTUFBTSxlQUFlLEdBQTJCO0lBQzlDLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUztJQUNyQixJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVM7SUFDdkIsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTO0lBQ3RCLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUztJQUN0QixJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVM7SUFDdEIsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTO0lBQ3RCLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUztDQUN2QixDQUFDO0FBQ0YsbUNBQW1DO0FBQ25DLE1BQU0sY0FBYyxHQUFHLHdCQUF3QixDQUFDO0FBRWhELFNBQVMsY0FBYyxDQUFDLENBQVM7SUFDL0IsT0FBTyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdGLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLEtBQWE7SUFDeEMsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxJQUFZLEVBQUUsZUFBaUM7SUFDdkUsSUFBSSxPQUFPLGVBQWUsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUMx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
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
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "name": "urllib",
3
- "version": "4.3.1"
3
+ "version": "4.5.0-beta.1"
4
4
  }
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "urllib",
3
- "version": "4.3.1",
3
+ "version": "4.5.0-beta.1",
4
4
  "publishConfig": {
5
- "tag": "latest"
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": "^6.19.2",
52
+ "undici": "^7.0.0",
52
53
  "ylru": "^2.0.0"
53
54
  },
54
55
  "devDependencies": {
55
- "@arethetypeswrong/cli": "^0.16.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": "^20.2.1",
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
+ }
@@ -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 type HttpAgentOptions = {
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 _lookup = options.lookup ?? dns.lookup;
40
- const lookup: LookupFunction = (hostname, dnsOptions, callback) => {
41
- _lookup(hostname, dnsOptions, (err, ...args: any[]) => {
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
- connect: { ...options.connect, lookup, allowH2: options.allowH2 },
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.DispatchHandlers): boolean {
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;