@n8n/ai-utilities 0.35.0 → 0.35.2

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.
@@ -1,5 +1,6 @@
1
1
  import { type TransportSsrfPolicy } from '@n8n/backend-network/transport';
2
2
  import type { AgentOptions } from 'node:https';
3
+ import { type Readable, Transform } from 'node:stream';
3
4
  import type { Dispatcher } from 'undici';
4
5
  export interface AgentTimeoutOptions {
5
6
  headersTimeout?: number;
@@ -15,4 +16,7 @@ export interface ProxyFetchOptions {
15
16
  egressFilter: EgressFilter;
16
17
  }
17
18
  export declare function proxyFetch({ input, init, timeoutOptions, egressFilter, }: ProxyFetchOptions): Promise<Response>;
19
+ export declare function aiClientFetch(...args: Parameters<typeof fetch>): Promise<Response>;
18
20
  export declare function getNodeProxyAgent(targetUrl?: string, agentOptions?: AgentOptions): import("https").Agent | undefined;
21
+ export declare function createResponseStreamLimit(maxBytes: number): Transform;
22
+ export declare function limitAiResponseStream(body: Readable): Readable;
@@ -2,11 +2,33 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getProxyAgent = getProxyAgent;
4
4
  exports.proxyFetch = proxyFetch;
5
+ exports.aiClientFetch = aiClientFetch;
5
6
  exports.getNodeProxyAgent = getNodeProxyAgent;
7
+ exports.createResponseStreamLimit = createResponseStreamLimit;
8
+ exports.limitAiResponseStream = limitAiResponseStream;
6
9
  const egress_1 = require("@n8n/backend-network/egress");
7
10
  const proxy_1 = require("@n8n/backend-network/proxy");
8
11
  const transport_1 = require("@n8n/backend-network/transport");
12
+ const node_stream_1 = require("node:stream");
13
+ const n8n_workflow_1 = require("n8n-workflow");
9
14
  const DEFAULT_TIMEOUT = parseInt(process.env.N8N_AI_TIMEOUT_MAX ?? '3600000', 10);
15
+ const DEFAULT_MAX_RESPONSE_SIZE = 100 * 1024 * 1024;
16
+ function resolveMaxResponseSize() {
17
+ const configured = process.env.N8N_AI_MAX_RESPONSE_SIZE?.trim();
18
+ if (!configured)
19
+ return DEFAULT_MAX_RESPONSE_SIZE;
20
+ const parsed = Number(configured);
21
+ const isValid = Number.isSafeInteger(parsed) && parsed >= 0;
22
+ return isValid ? parsed : DEFAULT_MAX_RESPONSE_SIZE;
23
+ }
24
+ const MAX_RESPONSE_SIZE = resolveMaxResponseSize();
25
+ function responseSizeError(maxBytes) {
26
+ return new n8n_workflow_1.OperationalError(`Response body exceeded the maximum allowed size of ${maxBytes} bytes`);
27
+ }
28
+ const responseSizeLimit = {
29
+ maxBytes: MAX_RESPONSE_SIZE,
30
+ createError: responseSizeError,
31
+ };
10
32
  const PROXY_FALLBACK_TARGET = 'https://example.nonexistent/';
11
33
  let sharedDispatcher;
12
34
  function toSsrfOption(egressFilter) {
@@ -37,7 +59,7 @@ async function proxyFetch({ input, init, timeoutOptions, egressFilter, }) {
37
59
  const targetUrl = isRequest ? input.url : input.toString();
38
60
  const dispatcher = getProxyAgent(targetUrl, timeoutOptions, egressFilter);
39
61
  if (!isRequest)
40
- return await (0, transport_1.dispatchedFetch)(dispatcher, input, init);
62
+ return await (0, transport_1.dispatchedFetch)(dispatcher, input, init, responseSizeLimit);
41
63
  return await (0, transport_1.dispatchedFetch)(dispatcher, targetUrl, {
42
64
  method: input.method,
43
65
  headers: [...input.headers],
@@ -45,7 +67,10 @@ async function proxyFetch({ input, init, timeoutOptions, egressFilter, }) {
45
67
  signal: input.signal,
46
68
  redirect: input.redirect,
47
69
  ...init,
48
- });
70
+ }, responseSizeLimit);
71
+ }
72
+ async function aiClientFetch(...args) {
73
+ return (0, transport_1.limitResponseBody)(await fetch(...args), responseSizeLimit);
49
74
  }
50
75
  function getNodeProxyAgent(targetUrl, agentOptions) {
51
76
  const proxyUrl = (0, proxy_1.resolveProxyUrl)(targetUrl, PROXY_FALLBACK_TARGET);
@@ -54,4 +79,19 @@ function getNodeProxyAgent(targetUrl, agentOptions) {
54
79
  }
55
80
  return (0, proxy_1.createHttpsProxyAgent)(targetUrl ?? PROXY_FALLBACK_TARGET, proxyUrl, agentOptions);
56
81
  }
82
+ function createResponseStreamLimit(maxBytes) {
83
+ let received = 0;
84
+ return new node_stream_1.Transform({
85
+ transform(chunk, _encoding, done) {
86
+ received += chunk.length;
87
+ done(received > maxBytes ? responseSizeError(maxBytes) : null, chunk);
88
+ },
89
+ });
90
+ }
91
+ function limitAiResponseStream(body) {
92
+ if (MAX_RESPONSE_SIZE === 0)
93
+ return body;
94
+ return (0, node_stream_1.pipeline)(body, createResponseStreamLimit(MAX_RESPONSE_SIZE), () => {
95
+ });
96
+ }
57
97
  //# sourceMappingURL=http-proxy-agent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"http-proxy-agent.js","sourceRoot":"","sources":["../../../src/utils/http-proxy-agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http-proxy-agent.js","sourceRoot":"","sources":["../../../src/utils/http-proxy-agent.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@n8n/ai-utilities",
3
- "version": "0.35.0",
3
+ "version": "0.35.2",
4
4
  "description": "Utilities for building AI nodes in n8n",
5
5
  "types": "dist/esm/index.d.ts",
6
6
  "module": "dist/esm/index.js",
@@ -115,8 +115,8 @@
115
115
  },
116
116
  "files": [
117
117
  "dist",
118
- "LICENSE_EE.md",
119
- "LICENSE.md"
118
+ "LICENSE.md",
119
+ "LICENSE_EE.md"
120
120
  ],
121
121
  "devDependencies": {
122
122
  "@types/json-schema": "^7.0.15",
@@ -143,11 +143,11 @@
143
143
  "@langchain/openai": "1.4.4",
144
144
  "langchain": "1.2.30",
145
145
  "lodash": "4.18.1",
146
- "@n8n/api-types": "1.42.0",
147
- "@n8n/backend-network": "1.16.0",
146
+ "@n8n/api-types": "1.42.2",
147
+ "@n8n/backend-network": "1.16.2",
148
148
  "@n8n/typescript-config": "1.12.0",
149
149
  "@n8n/utils": "1.49.0",
150
- "n8n-workflow": "2.42.0",
150
+ "n8n-workflow": "2.42.2",
151
151
  "tmp-promise": "3.0.3",
152
152
  "js-tiktoken": "1.0.21",
153
153
  "@thednp/dommatrix": "^3.1.1",