@n8n/backend-network 1.1.3 → 1.2.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 (49) hide show
  1. package/dist/build.tsbuildinfo +1 -1
  2. package/dist/http/axios/invoke.d.ts +2 -0
  3. package/dist/http/axios/invoke.js +30 -0
  4. package/dist/http/axios/invoke.js.map +1 -0
  5. package/dist/http/axios/legacy.d.ts +2 -0
  6. package/dist/http/axios/legacy.js +14 -9
  7. package/dist/http/axios/legacy.js.map +1 -1
  8. package/dist/http/axios/redirect.d.ts +14 -0
  9. package/dist/http/axios/redirect.js +120 -0
  10. package/dist/http/axios/redirect.js.map +1 -0
  11. package/dist/http/axios/request.d.ts +0 -1
  12. package/dist/http/axios/request.js +16 -31
  13. package/dist/http/axios/request.js.map +1 -1
  14. package/dist/http/axios/utils.d.ts +7 -2
  15. package/dist/http/axios/utils.js +32 -0
  16. package/dist/http/axios/utils.js.map +1 -1
  17. package/dist/http/binary-buffer.d.ts +1 -1
  18. package/dist/http/binary-buffer.js +47 -9
  19. package/dist/http/binary-buffer.js.map +1 -1
  20. package/dist/http/client-default-headers.d.ts +4 -0
  21. package/dist/http/client-default-headers.js +24 -0
  22. package/dist/http/client-default-headers.js.map +1 -0
  23. package/dist/http/client-options.d.ts +7 -0
  24. package/dist/http/client-options.js +3 -0
  25. package/dist/http/client-options.js.map +1 -0
  26. package/dist/http/client-request-error.d.ts +11 -0
  27. package/dist/http/client-request-error.js +37 -0
  28. package/dist/http/client-request-error.js.map +1 -0
  29. package/dist/http/http-proxy.d.ts +1 -0
  30. package/dist/http/http-proxy.js +6 -5
  31. package/dist/http/http-proxy.js.map +1 -1
  32. package/dist/http/index.d.ts +5 -2
  33. package/dist/http/index.js +6 -1
  34. package/dist/http/index.js.map +1 -1
  35. package/dist/http/legacy-request.js +12 -2
  36. package/dist/http/legacy-request.js.map +1 -1
  37. package/dist/http/node-agents.d.ts +1 -1
  38. package/dist/http/node-agents.js +3 -1
  39. package/dist/http/node-agents.js.map +1 -1
  40. package/dist/http/outbound-http.d.ts +4 -5
  41. package/dist/http/outbound-http.js +25 -6
  42. package/dist/http/outbound-http.js.map +1 -1
  43. package/dist/http/undici/transport.d.ts +18 -1
  44. package/dist/http/undici/transport.js +47 -7
  45. package/dist/http/undici/transport.js.map +1 -1
  46. package/dist/transport.d.ts +4 -0
  47. package/dist/transport.js +10 -0
  48. package/dist/transport.js.map +1 -0
  49. package/package.json +19 -11
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withClientDefaults = withClientDefaults;
4
+ function withClientDefaults(requestOptions, baseURL, headers) {
5
+ if (baseURL === undefined && headers === undefined) {
6
+ return requestOptions;
7
+ }
8
+ const merged = { ...requestOptions };
9
+ if (baseURL !== undefined && merged.baseURL === undefined) {
10
+ merged.baseURL = baseURL;
11
+ }
12
+ if (headers !== undefined) {
13
+ const defaults = typeof headers === 'function' ? headers() : headers;
14
+ const combined = { ...defaults, ...requestOptions.headers };
15
+ for (const key of Object.keys(combined)) {
16
+ if (combined[key] === undefined) {
17
+ delete combined[key];
18
+ }
19
+ }
20
+ merged.headers = combined;
21
+ }
22
+ return merged;
23
+ }
24
+ //# sourceMappingURL=client-default-headers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-default-headers.js","sourceRoot":"","sources":["../../src/http/client-default-headers.ts"],"names":[],"mappings":";;AAgBA,gDA2BC;AA3BD,SAAgB,kBAAkB,CACjC,cAAmC,EACnC,OAA4C,EAC5C,OAA4C;IAE5C,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACpD,OAAO,cAAc,CAAC;IACvB,CAAC;IAED,MAAM,MAAM,GAAwB,EAAE,GAAG,cAAc,EAAE,CAAC;IAE1D,IAAI,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC3D,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,OAAO,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACrE,MAAM,QAAQ,GAA4B,EAAE,GAAG,QAAQ,EAAE,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC;QACrF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzC,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBACjC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;YACtB,CAAC;QACF,CAAC;QACD,MAAM,CAAC,OAAO,GAAG,QAA0C,CAAC;IAC7D,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { HttpRequestDefaultHeaders } from './client-default-headers';
2
+ import type { SsrfOption } from './node-agents';
3
+ export interface HttpRequestClientOptions {
4
+ ssrf?: SsrfOption;
5
+ baseURL?: string;
6
+ headers?: HttpRequestDefaultHeaders | (() => HttpRequestDefaultHeaders);
7
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=client-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-options.js","sourceRoot":"","sources":["../../src/http/client-options.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ export declare function isConnectionRefusedError(error: unknown): boolean;
2
+ export declare function httpStatusFromError(error: unknown): number | undefined;
3
+ export interface HttpRequestError extends Error {
4
+ code?: string;
5
+ response?: {
6
+ status?: number;
7
+ data?: unknown;
8
+ };
9
+ }
10
+ export declare function markHttpRequestError<E>(error: E): E;
11
+ export declare function isHttpRequestError(error: unknown): error is HttpRequestError;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isConnectionRefusedError = isConnectionRefusedError;
4
+ exports.httpStatusFromError = httpStatusFromError;
5
+ exports.markHttpRequestError = markHttpRequestError;
6
+ exports.isHttpRequestError = isHttpRequestError;
7
+ function isConnectionRefusedError(error) {
8
+ return (typeof error === 'object' &&
9
+ error !== null &&
10
+ 'code' in error &&
11
+ error.code === 'ECONNREFUSED');
12
+ }
13
+ function httpStatusFromError(error) {
14
+ if (typeof error === 'object' && error !== null && 'response' in error) {
15
+ const response = error.response;
16
+ if (response && typeof response.status === 'number') {
17
+ return response.status;
18
+ }
19
+ }
20
+ return undefined;
21
+ }
22
+ const HTTP_REQUEST_ERROR = Symbol.for('n8n.backend-network.http-request-error');
23
+ function markHttpRequestError(error) {
24
+ if (typeof error === 'object' && error !== null) {
25
+ Object.defineProperty(error, HTTP_REQUEST_ERROR, {
26
+ value: true,
27
+ enumerable: false,
28
+ configurable: true,
29
+ });
30
+ }
31
+ return error;
32
+ }
33
+ function isHttpRequestError(error) {
34
+ return (error instanceof Error &&
35
+ error[HTTP_REQUEST_ERROR] === true);
36
+ }
37
+ //# sourceMappingURL=client-request-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-request-error.js","sourceRoot":"","sources":["../../src/http/client-request-error.ts"],"names":[],"mappings":";;AAYA,4DAOC;AAKD,kDAQC;AAuBD,oDASC;AAOD,gDAKC;AAhED,SAAgB,wBAAwB,CAAC,KAAc;IACtD,OAAO,CACN,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACd,KAA4B,CAAC,IAAI,KAAK,cAAc,CACrD,CAAC;AACH,CAAC;AAKD,SAAgB,mBAAmB,CAAC,KAAc;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;QACxE,MAAM,QAAQ,GAAI,KAA6C,CAAC,QAAQ,CAAC;QACzE,IAAI,QAAQ,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO,QAAQ,CAAC,MAAM,CAAC;QACxB,CAAC;IACF,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAgBD,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;AAOhF,SAAgB,oBAAoB,CAAI,KAAQ;IAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjD,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,kBAAkB,EAAE;YAChD,KAAK,EAAE,IAAI;YACX,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,IAAI;SAClB,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAOD,SAAgB,kBAAkB,CAAC,KAAc;IAChD,OAAO,CACN,KAAK,YAAY,KAAK;QACrB,KAA4C,CAAC,kBAAkB,CAAC,KAAK,IAAI,CAC1E,CAAC;AACH,CAAC"}
@@ -3,5 +3,6 @@ import https from 'https';
3
3
  export declare function resolveProxyUrl(targetUrl: string): string | undefined;
4
4
  export declare function createHttpProxyAgent(customProxyUrl: string | null | undefined, targetUrl: string, options?: http.AgentOptions): http.Agent;
5
5
  export declare function createHttpsProxyAgent(customProxyUrl: string | null | undefined, targetUrl: string, options?: https.AgentOptions): https.Agent;
6
+ export declare function hasProxyEnvironmentVariables(): boolean;
6
7
  export declare function installGlobalProxyAgent(): void;
7
8
  export declare function uninstallGlobalProxyAgent(): void;
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.resolveProxyUrl = resolveProxyUrl;
7
7
  exports.createHttpProxyAgent = createHttpProxyAgent;
8
8
  exports.createHttpsProxyAgent = createHttpsProxyAgent;
9
+ exports.hasProxyEnvironmentVariables = hasProxyEnvironmentVariables;
9
10
  exports.installGlobalProxyAgent = installGlobalProxyAgent;
10
11
  exports.uninstallGlobalProxyAgent = uninstallGlobalProxyAgent;
11
12
  const http_1 = __importDefault(require("http"));
@@ -34,11 +35,11 @@ function createHttpsProxyAgent(customProxyUrl = null, targetUrl, options) {
34
35
  return new https_1.default.Agent(options);
35
36
  }
36
37
  function hasProxyEnvironmentVariables() {
37
- return Boolean(process.env.HTTP_PROXY ??
38
- process.env.http_proxy ??
39
- process.env.HTTPS_PROXY ??
40
- process.env.https_proxy ??
41
- process.env.ALL_PROXY ??
38
+ return Boolean(process.env.HTTP_PROXY ||
39
+ process.env.http_proxy ||
40
+ process.env.HTTPS_PROXY ||
41
+ process.env.https_proxy ||
42
+ process.env.ALL_PROXY ||
42
43
  process.env.all_proxy);
43
44
  }
44
45
  function installGlobalProxyAgent() {
@@ -1 +1 @@
1
- {"version":3,"file":"http-proxy.js","sourceRoot":"","sources":["../../src/http/http-proxy.ts"],"names":[],"mappings":";;;;;AAiBA,0CAEC;AAED,oDAYC;AAED,sDAYC;AAaD,0DAcC;AAED,8DAGC;AA/ED,gDAAwB;AACxB,uDAAkD;AAClD,kDAA0B;AAC1B,yDAAoD;AACpD,+CAA2C;AAC3C,mDAAgD;AAEhD,iEAA2D;AAC3D,mEAA6D;AAS7D,SAAgB,eAAe,CAAC,SAAiB;IAChD,OAAO,IAAA,+BAAc,EAAC,SAAS,CAAC,IAAI,SAAS,CAAC;AAC/C,CAAC;AAED,SAAgB,oBAAoB,CACnC,iBAAgC,IAAI,EACpC,SAAiB,EACjB,OAA2B;IAE3B,MAAM,QAAQ,GAAG,cAAc,IAAI,IAAA,+BAAc,EAAC,SAAS,CAAC,CAAC;IAE7D,IAAI,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,iCAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,IAAI,cAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,SAAgB,qBAAqB,CACpC,iBAAgC,IAAI,EACpC,SAAiB,EACjB,OAA4B;IAE5B,MAAM,QAAQ,GAAG,cAAc,IAAI,IAAA,+BAAc,EAAC,SAAS,CAAC,CAAC;IAE7D,IAAI,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,mCAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,IAAI,eAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,4BAA4B;IACpC,OAAO,OAAO,CACb,OAAO,CAAC,GAAG,CAAC,UAAU;QACrB,OAAO,CAAC,GAAG,CAAC,UAAU;QACtB,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,OAAO,CAAC,GAAG,CAAC,SAAS;QACrB,OAAO,CAAC,GAAG,CAAC,SAAS,CACtB,CAAC;AACH,CAAC;AAED,SAAgB,uBAAuB;IACtC,IAAI,4BAA4B,EAAE,EAAE,CAAC;QACpC,0BAAW,CAAC,KAAK,CAAC,qCAAqC,EAAE;YACxD,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU;YAC5D,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW;YAC/D,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ;YACtD,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS;SACzD,CAAC,CAAC;QAIH,cAAI,CAAC,WAAW,GAAG,IAAI,wCAAiB,EAAE,CAAC;QAC3C,eAAK,CAAC,WAAW,GAAG,IAAI,0CAAkB,EAAE,CAAC;IAC9C,CAAC;AACF,CAAC;AAED,SAAgB,yBAAyB;IACxC,cAAI,CAAC,WAAW,GAAG,IAAI,cAAI,CAAC,KAAK,EAAE,CAAC;IACpC,eAAK,CAAC,WAAW,GAAG,IAAI,eAAK,CAAC,KAAK,EAAE,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"http-proxy.js","sourceRoot":"","sources":["../../src/http/http-proxy.ts"],"names":[],"mappings":";;;;;AAiBA,0CAEC;AAED,oDAYC;AAED,sDAYC;AAGD,oEASC;AAED,0DAcC;AAED,8DAGC;AAhFD,gDAAwB;AACxB,uDAAkD;AAClD,kDAA0B;AAC1B,yDAAoD;AACpD,+CAA2C;AAC3C,mDAAgD;AAEhD,iEAA2D;AAC3D,mEAA6D;AAS7D,SAAgB,eAAe,CAAC,SAAiB;IAChD,OAAO,IAAA,+BAAc,EAAC,SAAS,CAAC,IAAI,SAAS,CAAC;AAC/C,CAAC;AAED,SAAgB,oBAAoB,CACnC,iBAAgC,IAAI,EACpC,SAAiB,EACjB,OAA2B;IAE3B,MAAM,QAAQ,GAAG,cAAc,IAAI,IAAA,+BAAc,EAAC,SAAS,CAAC,CAAC;IAE7D,IAAI,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,iCAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,IAAI,cAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,SAAgB,qBAAqB,CACpC,iBAAgC,IAAI,EACpC,SAAiB,EACjB,OAA4B;IAE5B,MAAM,QAAQ,GAAG,cAAc,IAAI,IAAA,+BAAc,EAAC,SAAS,CAAC,CAAC;IAE7D,IAAI,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,mCAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,IAAI,eAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAGD,SAAgB,4BAA4B;IAC3C,OAAO,OAAO,CACb,OAAO,CAAC,GAAG,CAAC,UAAU;QACrB,OAAO,CAAC,GAAG,CAAC,UAAU;QACtB,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,OAAO,CAAC,GAAG,CAAC,SAAS;QACrB,OAAO,CAAC,GAAG,CAAC,SAAS,CACtB,CAAC;AACH,CAAC;AAED,SAAgB,uBAAuB;IACtC,IAAI,4BAA4B,EAAE,EAAE,CAAC;QACpC,0BAAW,CAAC,KAAK,CAAC,qCAAqC,EAAE;YACxD,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU;YAC5D,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW;YAC/D,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ;YACtD,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS;SACzD,CAAC,CAAC;QAIH,cAAI,CAAC,WAAW,GAAG,IAAI,wCAAiB,EAAE,CAAC;QAC3C,eAAK,CAAC,WAAW,GAAG,IAAI,0CAAkB,EAAE,CAAC;IAC9C,CAAC;AACF,CAAC;AAED,SAAgB,yBAAyB;IACxC,cAAI,CAAC,WAAW,GAAG,IAAI,cAAI,CAAC,KAAK,EAAE,CAAC;IACpC,eAAK,CAAC,WAAW,GAAG,IAAI,eAAK,CAAC,KAAK,EAAE,CAAC;AACvC,CAAC"}
@@ -6,6 +6,9 @@ export { parseIncomingMessage } from './parse-incoming-message';
6
6
  export { binaryToBuffer, streamToBuffer } from './binary-buffer';
7
7
  export { binaryToString } from './binary-string';
8
8
  export type { NodeAgentOptions, ProxyOption, ProxyUrl, SsrfOption } from './node-agents';
9
- export type { CustomFetch } from './undici/transport';
10
- export { OutboundHttp, type HttpRequestClient, type HttpRequestClientOptions, type HttpTransport, type HttpTransportOptions, } from './outbound-http';
9
+ export type { CustomFetch, RequestAuthorizer } from './undici/transport';
10
+ export { OutboundHttp, type HttpRequestClient, type HttpTransport, type HttpTransportOptions, } from './outbound-http';
11
+ export { httpStatusFromError, isConnectionRefusedError, isHttpRequestError, markHttpRequestError, type HttpRequestError, } from './client-request-error';
12
+ export type { HttpRequestDefaultHeaders } from './client-default-headers';
13
+ export type { HttpRequestClientOptions } from './client-options';
11
14
  export type { LegacyRequestCallbacks } from './legacy-request';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OutboundHttp = exports.binaryToString = exports.streamToBuffer = exports.binaryToBuffer = exports.parseIncomingMessage = exports.removeEmptyBody = exports.httpRequest = exports.tryParseUrl = exports.configureGlobalAxiosDefaults = exports.resolveProxyUrl = exports.installGlobalProxyAgent = exports.createHttpsProxyAgent = exports.createHttpProxyAgent = void 0;
3
+ exports.markHttpRequestError = exports.isHttpRequestError = exports.isConnectionRefusedError = exports.httpStatusFromError = exports.OutboundHttp = exports.binaryToString = exports.streamToBuffer = exports.binaryToBuffer = exports.parseIncomingMessage = exports.removeEmptyBody = exports.httpRequest = exports.tryParseUrl = exports.configureGlobalAxiosDefaults = exports.resolveProxyUrl = exports.installGlobalProxyAgent = exports.createHttpsProxyAgent = exports.createHttpProxyAgent = void 0;
4
4
  var http_proxy_1 = require("./http-proxy");
5
5
  Object.defineProperty(exports, "createHttpProxyAgent", { enumerable: true, get: function () { return http_proxy_1.createHttpProxyAgent; } });
6
6
  Object.defineProperty(exports, "createHttpsProxyAgent", { enumerable: true, get: function () { return http_proxy_1.createHttpsProxyAgent; } });
@@ -22,4 +22,9 @@ var binary_string_1 = require("./binary-string");
22
22
  Object.defineProperty(exports, "binaryToString", { enumerable: true, get: function () { return binary_string_1.binaryToString; } });
23
23
  var outbound_http_1 = require("./outbound-http");
24
24
  Object.defineProperty(exports, "OutboundHttp", { enumerable: true, get: function () { return outbound_http_1.OutboundHttp; } });
25
+ var client_request_error_1 = require("./client-request-error");
26
+ Object.defineProperty(exports, "httpStatusFromError", { enumerable: true, get: function () { return client_request_error_1.httpStatusFromError; } });
27
+ Object.defineProperty(exports, "isConnectionRefusedError", { enumerable: true, get: function () { return client_request_error_1.isConnectionRefusedError; } });
28
+ Object.defineProperty(exports, "isHttpRequestError", { enumerable: true, get: function () { return client_request_error_1.isHttpRequestError; } });
29
+ Object.defineProperty(exports, "markHttpRequestError", { enumerable: true, get: function () { return client_request_error_1.markHttpRequestError; } });
25
30
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/http/index.ts"],"names":[],"mappings":";;;AAAA,2CAKsB;AAJrB,kHAAA,oBAAoB,OAAA;AACpB,mHAAA,qBAAqB,OAAA;AACrB,qHAAA,uBAAuB,OAAA;AACvB,6GAAA,eAAe,OAAA;AAEhB,yCAA8D;AAArD,sHAAA,4BAA4B,OAAA;AACrC,uCAA4C;AAAnC,oGAAA,WAAW,OAAA;AACpB,2CAA+D;AAAtD,sGAAA,WAAW,OAAA;AAAE,0GAAA,eAAe,OAAA;AACrC,mEAAgE;AAAvD,8HAAA,oBAAoB,OAAA;AAC7B,iDAAiE;AAAxD,+GAAA,cAAc,OAAA;AAAE,+GAAA,cAAc,OAAA;AACvC,iDAAiD;AAAxC,+GAAA,cAAc,OAAA;AAGvB,iDAMyB;AALxB,6GAAA,YAAY,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/http/index.ts"],"names":[],"mappings":";;;AAAA,2CAKsB;AAJrB,kHAAA,oBAAoB,OAAA;AACpB,mHAAA,qBAAqB,OAAA;AACrB,qHAAA,uBAAuB,OAAA;AACvB,6GAAA,eAAe,OAAA;AAEhB,yCAA8D;AAArD,sHAAA,4BAA4B,OAAA;AACrC,uCAA4C;AAAnC,oGAAA,WAAW,OAAA;AACpB,2CAA+D;AAAtD,sGAAA,WAAW,OAAA;AAAE,0GAAA,eAAe,OAAA;AACrC,mEAAgE;AAAvD,8HAAA,oBAAoB,OAAA;AAC7B,iDAAiE;AAAxD,+GAAA,cAAc,OAAA;AAAE,+GAAA,cAAc,OAAA;AACvC,iDAAiD;AAAxC,+GAAA,cAAc,OAAA;AAGvB,iDAKyB;AAJxB,6GAAA,YAAY,OAAA;AAKb,+DAMgC;AAL/B,2HAAA,mBAAmB,OAAA;AACnB,gIAAA,wBAAwB,OAAA;AACxB,0HAAA,kBAAkB,OAAA;AAClB,4HAAA,oBAAoB,OAAA"}
@@ -4,8 +4,9 @@ exports.executeLegacyRequest = executeLegacyRequest;
4
4
  const n8n_workflow_1 = require("n8n-workflow");
5
5
  const node_http_1 = require("node:http");
6
6
  const node_stream_1 = require("node:stream");
7
+ const invoke_1 = require("./axios/invoke");
7
8
  const legacy_1 = require("./axios/legacy");
8
- const request_1 = require("./axios/request");
9
+ const redirect_1 = require("./axios/redirect");
9
10
  const utils_1 = require("./axios/utils");
10
11
  const binary_string_1 = require("./binary-string");
11
12
  const parse_incoming_message_1 = require("./parse-incoming-message");
@@ -19,7 +20,16 @@ async function executeLegacyRequest(requestObject, ssrfBridge, logger, callbacks
19
20
  axiosConfig = Object.assign(axiosConfig, await (0, legacy_1.buildAxiosConfigFromLegacyRequest)(requestObject, ssrfBridge));
20
21
  (0, utils_1.throwIfDomainNotAllowed)(axiosConfig, requestObject.allowedDomains);
21
22
  try {
22
- const response = await (0, request_1.invokeAxios)(axiosConfig, requestObject.auth);
23
+ const response = (0, redirect_1.shouldFollowRedirectsManually)(axiosConfig, requestObject.proxy, ssrfBridge)
24
+ ? await (0, redirect_1.followSsrfRedirects)(axiosConfig, {
25
+ ssrf: ssrfBridge,
26
+ proxyConfig: requestObject.proxy,
27
+ agentOptions: (0, legacy_1.buildLegacyAgentOptions)(requestObject),
28
+ allowedDomains: requestObject.allowedDomains,
29
+ sendCredentialsOnCrossOriginRedirect: requestObject.sendCredentialsOnCrossOriginRedirect ?? true,
30
+ authSendImmediately: requestObject.auth?.sendImmediately,
31
+ })
32
+ : await (0, invoke_1.invokeAxios)(axiosConfig, requestObject.auth?.sendImmediately);
23
33
  let body = response.data;
24
34
  if (body instanceof node_http_1.IncomingMessage && axiosConfig.responseType === 'stream') {
25
35
  (0, parse_incoming_message_1.parseIncomingMessage)(body);
@@ -1 +1 @@
1
- {"version":3,"file":"legacy-request.js","sourceRoot":"","sources":["../../src/http/legacy-request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"legacy-request.js","sourceRoot":"","sources":["../../src/http/legacy-request.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import http from 'node:http';
2
2
  import https from 'node:https';
3
3
  import type { SsrfBridge } from '../ssrf';
4
4
  export type ProxyUrl = `${'http' | 'https'}://${string}`;
5
- export declare function isSupportedProxyUrl(value: string): value is ProxyUrl;
5
+ export declare function isSupportedProxyUrl(value: string | null | undefined): value is ProxyUrl;
6
6
  export type ProxyOption = 'env' | ProxyUrl | false;
7
7
  export type SsrfOption = SsrfBridge | 'disabled';
8
8
  export type NodeAgentOptions = https.AgentOptions;
@@ -14,7 +14,9 @@ const node_https_1 = __importDefault(require("node:https"));
14
14
  const env_proxy_http_agent_1 = require("./env-proxy-http-agent");
15
15
  const env_proxy_https_agent_1 = require("./env-proxy-https-agent");
16
16
  function isSupportedProxyUrl(value) {
17
- return value.startsWith('http://') || value.startsWith('https://');
17
+ return (value !== null &&
18
+ value !== undefined &&
19
+ (value.startsWith('http://') || value.startsWith('https://')));
18
20
  }
19
21
  function buildNodeAgents(proxy, ssrf, agentOptions) {
20
22
  if (agentOptions?.lookup) {
@@ -1 +1 @@
1
- {"version":3,"file":"node-agents.js","sourceRoot":"","sources":["../../src/http/node-agents.ts"],"names":[],"mappings":";;;;;AAsBA,kDAEC;AAsCD,0CAuCC;AA+BD,wDAmBC;AAvJD,uDAAkD;AAClD,yDAAoD;AACpD,+CAA+C;AAC/C,0DAA6B;AAC7B,4DAA+B;AAG/B,iEAA2D;AAC3D,mEAA6D;AAc7D,SAAgB,mBAAmB,CAAC,KAAa;IAChD,OAAO,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AACpE,CAAC;AAsCD,SAAgB,eAAe,CAC9B,KAAkB,EAClB,IAAgB,EAChB,YAA+B;IAE/B,IAAI,YAAY,EAAE,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,8BAAe,CACxB,sHAAsH,CACtH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GACX,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAE7D,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACrB,OAAO,oBAAoB,CAC1B;YACC,SAAS,EAAE,IAAI,mBAAI,CAAC,KAAK,CAAC,EAAE,GAAG,YAAY,EAAE,MAAM,EAAE,CAAC;YACtD,UAAU,EAAE,IAAI,oBAAK,CAAC,KAAK,CAAC,EAAE,GAAG,YAAY,EAAE,MAAM,EAAE,CAAC;SACxD,EACD,IAAI,CACJ,CAAC;IACH,CAAC;IAED,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACrB,OAAO,oBAAoB,CAC1B;YACC,SAAS,EAAE,IAAI,wCAAiB,CAAC,MAAM,EAAE,YAAY,CAAC;YACtD,UAAU,EAAE,IAAI,0CAAkB,CAAC,MAAM,EAAE,YAAY,CAAC;SACxD,EACD,IAAI,CACJ,CAAC;IACH,CAAC;IAGD,OAAO;QACN,SAAS,EAAE,IAAI,iCAAc,CAAC,KAAe,EAAE,EAAE,GAAG,YAAY,EAAE,CAAC;QACnE,UAAU,EAAE,IAAI,mCAAe,CAAC,KAAe,EAAE,EAAE,GAAG,YAAY,EAAE,CAAC;KACrE,CAAC;AACH,CAAC;AAgBD,SAAS,oBAAoB,CAC5B,MAA0D,EAC1D,IAAgB;IAEhB,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACzB,sBAAsB,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC/C,sBAAsB,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAMD,SAAgB,sBAAsB,CACrC,MAA8C,EAC9C,IAAgB;IAEhB,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,CAAC,gBAAgB,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE;QAChD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC;QAC3D,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBAChB,IAAI,SAAS,EAAE,CAAC;oBACf,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACxB,OAAO,SAAS,CAAC;gBAClB,CAAC;gBACD,MAAM,MAAM,CAAC,KAAK,CAAC;YACpB,CAAC;QACF,CAAC;QACD,OAAO,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC7C,CAAC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"node-agents.js","sourceRoot":"","sources":["../../src/http/node-agents.ts"],"names":[],"mappings":";;;;;AAsBA,kDAMC;AAsCD,0CAuCC;AA+BD,wDAmBC;AA3JD,uDAAkD;AAClD,yDAAoD;AACpD,+CAA+C;AAC/C,0DAA6B;AAC7B,4DAA+B;AAG/B,iEAA2D;AAC3D,mEAA6D;AAc7D,SAAgB,mBAAmB,CAAC,KAAgC;IACnE,OAAO,CACN,KAAK,KAAK,IAAI;QACd,KAAK,KAAK,SAAS;QACnB,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAC7D,CAAC;AACH,CAAC;AAsCD,SAAgB,eAAe,CAC9B,KAAkB,EAClB,IAAgB,EAChB,YAA+B;IAE/B,IAAI,YAAY,EAAE,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,8BAAe,CACxB,sHAAsH,CACtH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GACX,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAE7D,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACrB,OAAO,oBAAoB,CAC1B;YACC,SAAS,EAAE,IAAI,mBAAI,CAAC,KAAK,CAAC,EAAE,GAAG,YAAY,EAAE,MAAM,EAAE,CAAC;YACtD,UAAU,EAAE,IAAI,oBAAK,CAAC,KAAK,CAAC,EAAE,GAAG,YAAY,EAAE,MAAM,EAAE,CAAC;SACxD,EACD,IAAI,CACJ,CAAC;IACH,CAAC;IAED,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACrB,OAAO,oBAAoB,CAC1B;YACC,SAAS,EAAE,IAAI,wCAAiB,CAAC,MAAM,EAAE,YAAY,CAAC;YACtD,UAAU,EAAE,IAAI,0CAAkB,CAAC,MAAM,EAAE,YAAY,CAAC;SACxD,EACD,IAAI,CACJ,CAAC;IACH,CAAC;IAGD,OAAO;QACN,SAAS,EAAE,IAAI,iCAAc,CAAC,KAAe,EAAE,EAAE,GAAG,YAAY,EAAE,CAAC;QACnE,UAAU,EAAE,IAAI,mCAAe,CAAC,KAAe,EAAE,EAAE,GAAG,YAAY,EAAE,CAAC;KACrE,CAAC;AACH,CAAC;AAgBD,SAAS,oBAAoB,CAC5B,MAA0D,EAC1D,IAAgB;IAEhB,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACzB,sBAAsB,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC/C,sBAAsB,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAMD,SAAgB,sBAAsB,CACrC,MAA8C,EAC9C,IAAgB;IAEhB,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,CAAC,gBAAgB,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE;QAChD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC;QAC3D,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBAChB,IAAI,SAAS,EAAE,CAAC;oBACf,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACxB,OAAO,SAAS,CAAC;gBAClB,CAAC;gBACD,MAAM,MAAM,CAAC,KAAK,CAAC;YACpB,CAAC;QACF,CAAC;QACD,OAAO,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC7C,CAAC,CAAC;AACH,CAAC"}
@@ -3,17 +3,16 @@ import type { IHttpRequestOptions, IN8nHttpFullResponse, IN8nHttpResponse, IRequ
3
3
  import type http from 'node:http';
4
4
  import type https from 'node:https';
5
5
  import type { Dispatcher } from 'undici';
6
+ import { SsrfProtectionService } from '../ssrf';
7
+ import { HttpRequestClientOptions } from './client-options';
6
8
  import { type LegacyRequestCallbacks } from './legacy-request';
7
9
  import type { NodeAgentOptions, ProxyOption, SsrfOption } from './node-agents';
8
- import { SsrfProtectionService } from '../ssrf';
9
- import { type CustomFetch, type TransportTimeoutOptions } from './undici/transport';
10
- export interface HttpRequestClientOptions {
11
- ssrf?: SsrfOption;
12
- }
10
+ import { type CustomFetch, type RequestAuthorizer, type TransportTimeoutOptions } from './undici/transport';
13
11
  export interface HttpTransportOptions {
14
12
  proxy?: ProxyOption;
15
13
  ssrf?: SsrfOption;
16
14
  timeouts?: TransportTimeoutOptions;
15
+ authorize?: RequestAuthorizer;
17
16
  }
18
17
  export interface HttpRequestClient {
19
18
  request(options: IHttpRequestOptions & {
@@ -12,10 +12,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.OutboundHttp = void 0;
13
13
  const backend_common_1 = require("@n8n/backend-common");
14
14
  const di_1 = require("@n8n/di");
15
+ const ssrf_1 = require("../ssrf");
15
16
  const request_1 = require("./axios/request");
17
+ const client_default_headers_1 = require("./client-default-headers");
18
+ const client_request_error_1 = require("./client-request-error");
16
19
  const legacy_request_1 = require("./legacy-request");
17
20
  const node_agents_1 = require("./node-agents");
18
- const ssrf_1 = require("../ssrf");
19
21
  const transport_1 = require("./undici/transport");
20
22
  let OutboundHttp = class OutboundHttp {
21
23
  constructor(ssrfProtection, logger) {
@@ -25,20 +27,37 @@ let OutboundHttp = class OutboundHttp {
25
27
  requests(options) {
26
28
  const ssrf = options?.ssrf ?? this.ssrfProtection;
27
29
  const ssrfBridge = ssrf === 'disabled' ? undefined : ssrf;
30
+ const applyDefaults = (requestOptions) => (0, client_default_headers_1.withClientDefaults)(requestOptions, options?.baseURL, options?.headers);
31
+ async function request(requestOptions) {
32
+ try {
33
+ return await (0, request_1.httpRequest)(applyDefaults(requestOptions), ssrfBridge);
34
+ }
35
+ catch (error) {
36
+ throw (0, client_request_error_1.markHttpRequestError)(error);
37
+ }
38
+ }
28
39
  return {
29
- request: (async (requestOptions) => await (0, request_1.httpRequest)(requestOptions, ssrfBridge)),
30
- requestLegacy: async (requestOptions, callbacks) => await (0, legacy_request_1.executeLegacyRequest)(requestOptions, ssrfBridge, this.logger, callbacks),
40
+ request,
41
+ requestLegacy: async (requestOptions, callbacks) => {
42
+ try {
43
+ return await (0, legacy_request_1.executeLegacyRequest)(requestOptions, ssrfBridge, this.logger, callbacks);
44
+ }
45
+ catch (error) {
46
+ throw (0, client_request_error_1.markHttpRequestError)(error);
47
+ }
48
+ },
31
49
  };
32
50
  }
33
51
  transport(options) {
34
52
  const proxy = options?.proxy ?? 'env';
35
53
  const ssrf = options?.ssrf ?? this.ssrfProtection;
36
54
  const timeouts = options?.timeouts;
37
- const lazyDispatcher = lazy(() => (0, transport_1.buildDispatcher)(proxy, ssrf, timeouts));
55
+ const authorize = options?.authorize;
56
+ const dispatcherTransport = (0, transport_1.createDispatcherTransport)({ proxy, ssrf, timeouts, authorize });
38
57
  const lazyNodeAgents = lazy(() => (0, node_agents_1.buildNodeAgents)(proxy, ssrf));
39
58
  return {
40
- asCustomFetch: () => async (input, init) => await (0, transport_1.dispatchedFetch)(lazyDispatcher(), input, init),
41
- getDispatcher: () => lazyDispatcher(),
59
+ asCustomFetch: () => dispatcherTransport.asCustomFetch(),
60
+ getDispatcher: () => dispatcherTransport.getDispatcher(),
42
61
  getNodeAgent: (agentOptions) => agentOptions !== undefined ? (0, node_agents_1.buildNodeAgents)(proxy, ssrf, agentOptions) : lazyNodeAgents(),
43
62
  };
44
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"outbound-http.js","sourceRoot":"","sources":["../../src/http/outbound-http.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wDAA6C;AAC7C,gCAAkC;AAWlC,6CAA8C;AAC9C,qDAAqF;AACrF,+CAAgD;AAEhD,kCAAgD;AAChD,kDAK4B;AA8GrB,IAAM,YAAY,GAAlB,MAAM,YAAY;IACxB,YACkB,cAAqC,EACrC,MAAc;QADd,mBAAc,GAAd,cAAc,CAAuB;QACrC,WAAM,GAAN,MAAM,CAAQ;IAC7B,CAAC;IAMJ,QAAQ,CAAC,OAAkC;QAC1C,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QAE1D,OAAO;YACN,OAAO,EAAE,CAAC,KAAK,EAAE,cAAmC,EAAE,EAAE,CACvD,MAAM,IAAA,qBAAW,EAAC,cAAc,EAAE,UAAU,CAAC,CAAiC;YAC/E,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,CAClD,MAAM,IAAA,qCAAoB,EAAC,cAAc,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;SAC/E,CAAC;IACH,CAAC;IAKD,SAAS,CAAC,OAA8B;QACvC,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC;QACtC,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC;QAClD,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC;QAEnC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAA,2BAAe,EAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC1E,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAA,6BAAe,EAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;QAEhE,OAAO;YACN,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAC1C,MAAM,IAAA,2BAAe,EAAC,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;YACrD,aAAa,EAAE,GAAG,EAAE,CAAC,cAAc,EAAE;YACrC,YAAY,EAAE,CAAC,YAAY,EAAE,EAAE,CAC9B,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,IAAA,6BAAe,EAAC,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE;SAC3F,CAAC;IACH,CAAC;CACD,CAAA;AAzCY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,YAAO,GAAE;qCAGyB,4BAAqB;QAC7B,uBAAM;GAHpB,YAAY,CAyCxB;AAED,SAAS,IAAI,CAAI,OAAgB;IAChC,IAAI,MAAgC,CAAC;IACrC,OAAO,GAAG,EAAE,CAAC,CAAC,MAAM,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"outbound-http.js","sourceRoot":"","sources":["../../src/http/outbound-http.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wDAA6C;AAC7C,gCAAkC;AAWlC,kCAAgD;AAChD,6CAA8C;AAC9C,qEAA8D;AAE9D,iEAA8D;AAC9D,qDAAqF;AAErF,+CAAgD;AAChD,kDAK4B;AAsHrB,IAAM,YAAY,GAAlB,MAAM,YAAY;IACxB,YACkB,cAAqC,EACrC,MAAc;QADd,mBAAc,GAAd,cAAc,CAAuB;QACrC,WAAM,GAAN,MAAM,CAAQ;IAC7B,CAAC;IAMJ,QAAQ,CAAC,OAAkC;QAC1C,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QAE1D,MAAM,aAAa,GAAG,CAAC,cAAmC,EAAuB,EAAE,CAClF,IAAA,2CAAkB,EAAC,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAWxE,KAAK,UAAU,OAAO,CAAC,cAAmC;YACzD,IAAI,CAAC;gBACJ,OAAO,MAAM,IAAA,qBAAW,EAAC,aAAa,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,CAAC;YACrE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAEhB,MAAM,IAAA,2CAAoB,EAAC,KAAK,CAAC,CAAC;YACnC,CAAC;QACF,CAAC;QAED,OAAO;YACN,OAAO;YACP,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE;gBAClD,IAAI,CAAC;oBACJ,OAAO,MAAM,IAAA,qCAAoB,EAAC,cAAc,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBACvF,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,MAAM,IAAA,2CAAoB,EAAC,KAAK,CAAC,CAAC;gBACnC,CAAC;YACF,CAAC;SACD,CAAC;IACH,CAAC;IAKD,SAAS,CAAC,OAA8B;QACvC,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC;QACtC,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC;QAClD,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC;QACnC,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;QAKrC,MAAM,mBAAmB,GAAG,IAAA,qCAAyB,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QAC5F,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAA,6BAAe,EAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;QAEhE,OAAO;YACN,aAAa,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,aAAa,EAAE;YACxD,aAAa,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,aAAa,EAAE;YACxD,YAAY,EAAE,CAAC,YAAY,EAAE,EAAE,CAC9B,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,IAAA,6BAAe,EAAC,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE;SAC3F,CAAC;IACH,CAAC;CACD,CAAA;AArEY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,YAAO,GAAE;qCAGyB,4BAAqB;QAC7B,uBAAM;GAHpB,YAAY,CAqExB;AAED,SAAS,IAAI,CAAI,OAAgB;IAChC,IAAI,MAAgC,CAAC;IACrC,OAAO,GAAG,EAAE,CAAC,CAAC,MAAM,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC;AACtD,CAAC"}
@@ -2,11 +2,28 @@ import type { Dispatcher } from 'undici';
2
2
  import type { SsrfBridge } from '../../ssrf';
3
3
  import type { ProxyOption, SsrfOption } from '../node-agents';
4
4
  export type CustomFetch = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;
5
+ export type RequestAuthorizer = (url: URL) => Promise<void>;
5
6
  export interface TransportTimeoutOptions {
6
7
  headersTimeout?: number;
7
8
  bodyTimeout?: number;
8
9
  connectTimeout?: number;
9
10
  }
10
- export declare function buildDispatcher(proxy: ProxyOption, ssrf: SsrfOption, timeouts?: TransportTimeoutOptions): Dispatcher;
11
+ export interface CreateDispatcherTransportOptions {
12
+ proxy?: ProxyOption;
13
+ ssrf?: SsrfOption;
14
+ timeouts?: TransportTimeoutOptions;
15
+ authorize?: RequestAuthorizer;
16
+ }
17
+ export interface DispatcherTransport {
18
+ asCustomFetch(): CustomFetch;
19
+ getDispatcher(): Dispatcher;
20
+ }
21
+ export interface BuildDispatcherOptions {
22
+ timeouts?: TransportTimeoutOptions;
23
+ authorize?: RequestAuthorizer;
24
+ }
25
+ export declare function buildDispatcher(proxy: ProxyOption, ssrf: SsrfOption, options?: BuildDispatcherOptions): Dispatcher;
26
+ export declare function createDispatcherTransport(options?: CreateDispatcherTransportOptions): DispatcherTransport;
11
27
  export declare function createSsrfInterceptor(bridge: SsrfBridge): Dispatcher.DispatcherComposeInterceptor;
28
+ export declare function createAuthorizationInterceptor(authorize: RequestAuthorizer): Dispatcher.DispatcherComposeInterceptor;
12
29
  export declare function dispatchedFetch(dispatcher: Dispatcher, input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
@@ -1,33 +1,60 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildDispatcher = buildDispatcher;
4
+ exports.createDispatcherTransport = createDispatcherTransport;
4
5
  exports.createSsrfInterceptor = createSsrfInterceptor;
6
+ exports.createAuthorizationInterceptor = createAuthorizationInterceptor;
5
7
  exports.dispatchedFetch = dispatchedFetch;
6
8
  const n8n_workflow_1 = require("n8n-workflow");
7
9
  const undici_1 = require("undici");
8
- function buildDispatcher(proxy, ssrf, timeouts) {
9
- const dispatcher = buildDispatcherFromProxy(proxy, timeouts);
10
- return ssrf === 'disabled' ? dispatcher : dispatcher.compose(createSsrfInterceptor(ssrf));
10
+ function buildDispatcher(proxy, ssrf, options = {}) {
11
+ let dispatcher = buildDispatcherFromProxy(proxy, ssrf, options?.timeouts);
12
+ if (options?.authorize) {
13
+ dispatcher = dispatcher.compose(createAuthorizationInterceptor(options?.authorize));
14
+ }
15
+ if (ssrf !== 'disabled') {
16
+ dispatcher = dispatcher.compose(createSsrfInterceptor(ssrf));
17
+ }
18
+ return dispatcher;
11
19
  }
12
- function buildDispatcherFromProxy(proxy, timeouts) {
20
+ function buildDispatcherFromProxy(proxy, ssrf, timeouts) {
13
21
  const agentOptions = toAgentTimeoutOptions(timeouts);
14
22
  if (proxy === false) {
15
- return new undici_1.Agent(agentOptions);
23
+ return new undici_1.Agent({ ...agentOptions, ...secureConnect(ssrf) });
16
24
  }
17
25
  if (proxy === 'env') {
18
- return new undici_1.EnvHttpProxyAgent(agentOptions);
26
+ return new undici_1.EnvHttpProxyAgent({ ...agentOptions, ...secureConnect(ssrf) });
19
27
  }
20
28
  return new undici_1.ProxyAgent({ uri: proxy, ...agentOptions });
21
29
  }
30
+ function secureConnect(ssrf) {
31
+ return ssrf === 'disabled' ? {} : { connect: { lookup: ssrf.createSecureLookup() } };
32
+ }
22
33
  function toAgentTimeoutOptions(timeouts) {
23
- if (!timeouts)
34
+ if (!timeouts) {
24
35
  return {};
36
+ }
25
37
  return {
26
38
  ...(timeouts.headersTimeout !== undefined && { headersTimeout: timeouts.headersTimeout }),
27
39
  ...(timeouts.bodyTimeout !== undefined && { bodyTimeout: timeouts.bodyTimeout }),
28
40
  ...(timeouts.connectTimeout !== undefined && { connectTimeout: timeouts.connectTimeout }),
29
41
  };
30
42
  }
43
+ function createDispatcherTransport(options) {
44
+ const proxy = options?.proxy ?? 'env';
45
+ const ssrf = options?.ssrf ?? 'disabled';
46
+ const timeouts = options?.timeouts;
47
+ const authorize = options?.authorize;
48
+ const lazyDispatcher = lazyValue(() => buildDispatcher(proxy, ssrf, { timeouts, authorize }));
49
+ return {
50
+ asCustomFetch: () => async (input, init) => await dispatchedFetch(lazyDispatcher(), input, init),
51
+ getDispatcher: () => lazyDispatcher(),
52
+ };
53
+ }
54
+ function lazyValue(factory) {
55
+ let cached;
56
+ return () => (cached ??= { value: factory() }).value;
57
+ }
31
58
  function createSsrfInterceptor(bridge) {
32
59
  return (dispatch) => (opts, handler) => {
33
60
  let targetUrl;
@@ -48,6 +75,19 @@ function createSsrfInterceptor(bridge) {
48
75
  return true;
49
76
  };
50
77
  }
78
+ function createAuthorizationInterceptor(authorize) {
79
+ return (dispatch) => (opts, handler) => {
80
+ let targetUrl;
81
+ try {
82
+ targetUrl = new URL(opts.path, opts.origin?.toString());
83
+ authorize(targetUrl).then(() => dispatch(opts, handler), (error) => failDispatch(handler, (0, n8n_workflow_1.ensureError)(error)));
84
+ }
85
+ catch (error) {
86
+ failDispatch(handler, (0, n8n_workflow_1.ensureError)(error));
87
+ }
88
+ return true;
89
+ };
90
+ }
51
91
  function failDispatch(handler, error) {
52
92
  if (handler.onResponseError) {
53
93
  handler.onResponseError(null, error);
@@ -1 +1 @@
1
- {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/http/undici/transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/http/undici/transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { buildDispatcher, createSsrfInterceptor, createAuthorizationInterceptor, createDispatcherTransport, dispatchedFetch, } from './http/undici/transport';
2
+ export type { CustomFetch, DispatcherTransport, CreateDispatcherTransportOptions, RequestAuthorizer, TransportTimeoutOptions, } from './http/undici/transport';
3
+ export type { ProxyOption, ProxyUrl, SsrfOption } from './http/node-agents';
4
+ export type { SsrfBridge } from './ssrf/ssrf-protection.service';
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dispatchedFetch = exports.createDispatcherTransport = exports.createAuthorizationInterceptor = exports.createSsrfInterceptor = exports.buildDispatcher = void 0;
4
+ var transport_1 = require("./http/undici/transport");
5
+ Object.defineProperty(exports, "buildDispatcher", { enumerable: true, get: function () { return transport_1.buildDispatcher; } });
6
+ Object.defineProperty(exports, "createSsrfInterceptor", { enumerable: true, get: function () { return transport_1.createSsrfInterceptor; } });
7
+ Object.defineProperty(exports, "createAuthorizationInterceptor", { enumerable: true, get: function () { return transport_1.createAuthorizationInterceptor; } });
8
+ Object.defineProperty(exports, "createDispatcherTransport", { enumerable: true, get: function () { return transport_1.createDispatcherTransport; } });
9
+ Object.defineProperty(exports, "dispatchedFetch", { enumerable: true, get: function () { return transport_1.dispatchedFetch; } });
10
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":";;;AAgBA,qDAMiC;AALhC,4GAAA,eAAe,OAAA;AACf,kHAAA,qBAAqB,OAAA;AACrB,2HAAA,8BAA8B,OAAA;AAC9B,sHAAA,yBAAyB,OAAA;AACzB,4GAAA,eAAe,OAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@n8n/backend-network",
3
- "version": "1.1.3",
3
+ "version": "1.2.1",
4
4
  "main": "dist/index.js",
5
5
  "module": "src/index.ts",
6
6
  "types": "dist/index.d.ts",
@@ -14,42 +14,50 @@
14
14
  "types": "./dist/testing.d.ts",
15
15
  "import": "./src/testing.ts",
16
16
  "require": "./dist/testing.js"
17
+ },
18
+ "./transport": {
19
+ "types": "./dist/transport.d.ts",
20
+ "import": "./src/transport.ts",
21
+ "require": "./dist/transport.js"
17
22
  }
18
23
  },
19
24
  "typesVersions": {
20
25
  "*": {
21
26
  "testing": [
22
27
  "dist/testing.d.ts"
28
+ ],
29
+ "transport": [
30
+ "dist/transport.d.ts"
23
31
  ]
24
32
  }
25
33
  },
26
34
  "files": [
27
35
  "dist/**/*",
28
- "LICENSE.md",
29
- "LICENSE_EE.md"
36
+ "LICENSE_EE.md",
37
+ "LICENSE.md"
30
38
  ],
31
39
  "dependencies": {
32
- "axios": "1.16.1",
40
+ "axios": "1.18.0",
33
41
  "cache-manager": "5.2.3",
34
- "form-data": "4.0.4",
42
+ "form-data": "4.0.6",
35
43
  "http-proxy-agent": "7.0.2",
36
44
  "https-proxy-agent": "7.0.6",
37
45
  "iconv-lite": "0.6.3",
38
46
  "proxy-from-env": "^1.1.0",
39
47
  "qs": "6.15.2",
40
48
  "reflect-metadata": "0.2.2",
41
- "undici": "^7.26.0",
49
+ "undici": "^7.28.0",
42
50
  "zod": "3.25.67",
43
- "@n8n/backend-common": "1.27.3",
44
- "@n8n/config": "2.25.1",
45
- "@n8n/constants": "0.27.0",
51
+ "@n8n/backend-common": "1.28.1",
52
+ "@n8n/config": "2.26.0",
46
53
  "@n8n/di": "0.14.0",
47
- "n8n-workflow": "2.27.2"
54
+ "n8n-workflow": "2.28.1",
55
+ "@n8n/constants": "0.28.0"
48
56
  },
49
57
  "devDependencies": {
50
58
  "@types/proxy-from-env": "^1.0.4",
51
59
  "@vitest/coverage-v8": "4.1.1",
52
- "nock": "^14.0.14",
60
+ "nock": "14.0.14",
53
61
  "vitest": "^4.1.1",
54
62
  "vitest-mock-extended": "^3.1.0",
55
63
  "@n8n/typescript-config": "1.6.1",