@n8n/ai-utilities 0.31.1 → 0.32.0

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,7 @@
1
1
  export interface FollowRedirectsOptions {
2
- onBeforeHop?: (url: string) => void | Promise<void>;
2
+ onBeforeHop?: (url: string, info: {
3
+ crossedOrigin: boolean;
4
+ }) => void | Promise<void>;
3
5
  maxRedirects?: number;
4
6
  }
5
7
  export declare function fetchFollowingRedirects(fetcher: (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>, url: string | URL, init?: RequestInit, options?: FollowRedirectsOptions): Promise<Response>;
@@ -3,15 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.fetchFollowingRedirects = fetchFollowingRedirects;
4
4
  const n8n_workflow_1 = require("n8n-workflow");
5
5
  const DEFAULT_MAX_REDIRECTS = 20;
6
+ const CREDENTIAL_HEADERS = ['authorization', 'cookie', 'proxy-authorization'];
6
7
  async function fetchFollowingRedirects(fetcher, url, init, options) {
7
8
  const maxRedirects = options?.maxRedirects ?? DEFAULT_MAX_REDIRECTS;
8
9
  let currentInput = url;
9
10
  let currentInit = { ...init };
10
11
  let hops = 0;
12
+ let crossedOrigin = false;
11
13
  while (true) {
12
14
  const currentUrlString = currentInput instanceof URL ? currentInput.href : currentInput;
13
15
  if (options?.onBeforeHop) {
14
- await options.onBeforeHop(currentUrlString);
16
+ await options.onBeforeHop(currentUrlString, { crossedOrigin });
15
17
  }
16
18
  const response = await fetcher(currentInput, {
17
19
  ...currentInit,
@@ -30,6 +32,13 @@ async function fetchFollowingRedirects(fetcher, url, init, options) {
30
32
  }
31
33
  await response.body?.cancel().catch(() => { });
32
34
  currentInput = new URL(location, currentUrlString);
35
+ if (currentInput.origin !== new URL(currentUrlString).origin) {
36
+ crossedOrigin = true;
37
+ const headers = new Headers(currentInit.headers);
38
+ for (const header of CREDENTIAL_HEADERS)
39
+ headers.delete(header);
40
+ currentInit = { ...currentInit, headers };
41
+ }
33
42
  const method = (currentInit.method ?? 'GET').toUpperCase();
34
43
  const isUnsafe = method !== 'GET' && method !== 'HEAD';
35
44
  if (response.status === 303 ||
@@ -1 +1 @@
1
- {"version":3,"file":"follow-redirects.js","sourceRoot":"","sources":["../../../src/utils/follow-redirects.ts"],"names":[],"mappings":";;;AAAA,+CAAgD;AAEhD,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAY1B,KAAK,kCACX,OAA4E,EAC5E,GAAiB,EACjB,IAAkB,EAClB,OAAgC;IAEhC,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,qBAAqB,CAAC;IACpE,IAAI,YAAY,GAAiB,GAAG,CAAC;IACrC,IAAI,WAAW,GAAgB,EAAE,GAAG,IAAI,EAAE,CAAC;IAC3C,IAAI,IAAI,GAAG,CAAC,CAAC;IAEb,OAAO,IAAI,EAAE,CAAC;QACb,MAAM,gBAAgB,GAAG,YAAY,YAAY,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;QACxF,IAAI,OAAO,EAAE,WAAW,EAAE,CAAC;YAC1B,MAAM,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE;YAC5C,GAAG,WAAW;YACd,QAAQ,EAAE,QAAQ;SAClB,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;YACrD,OAAO,QAAQ,CAAC;QACjB,CAAC;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,OAAO,QAAQ,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,CAAC;QACV,IAAI,IAAI,GAAG,YAAY,EAAE,CAAC;YACzB,MAAM,IAAI,+BAAgB,CAAC,2BAA2B,YAAY,GAAG,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAE9C,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QAEnD,MAAM,MAAM,GAAG,CAAC,WAAW,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3D,MAAM,QAAQ,GAAG,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,CAAC;QACvD,IACC,QAAQ,CAAC,MAAM,KAAK,GAAG;YACvB,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,QAAQ,CAAC,EACjE,CAAC;YACF,WAAW,GAAG,EAAE,GAAG,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAClE,CAAC;IACF,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"follow-redirects.js","sourceRoot":"","sources":["../../../src/utils/follow-redirects.ts"],"names":[],"mappings":";;;AAAA,+CAAgD;AAEhD,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAajC,MAAM,kBAAkB,GAAG,CAAC,eAAe,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC;AAOvE,KAAK,kCACX,OAA4E,EAC5E,GAAiB,EACjB,IAAkB,EAClB,OAAgC;IAEhC,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,qBAAqB,CAAC;IACpE,IAAI,YAAY,GAAiB,GAAG,CAAC;IACrC,IAAI,WAAW,GAAgB,EAAE,GAAG,IAAI,EAAE,CAAC;IAC3C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B,OAAO,IAAI,EAAE,CAAC;QACb,MAAM,gBAAgB,GAAG,YAAY,YAAY,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;QACxF,IAAI,OAAO,EAAE,WAAW,EAAE,CAAC;YAC1B,MAAM,OAAO,CAAC,WAAW,CAAC,gBAAgB,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE;YAC5C,GAAG,WAAW;YACd,QAAQ,EAAE,QAAQ;SAClB,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;YACrD,OAAO,QAAQ,CAAC;QACjB,CAAC;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,OAAO,QAAQ,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,CAAC;QACV,IAAI,IAAI,GAAG,YAAY,EAAE,CAAC;YACzB,MAAM,IAAI,+BAAgB,CAAC,2BAA2B,YAAY,GAAG,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAE9C,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QAEnD,IAAI,YAAY,CAAC,MAAM,KAAK,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,MAAM,EAAE,CAAC;YAC9D,aAAa,GAAG,IAAI,CAAC;YACrB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACjD,KAAK,MAAM,MAAM,IAAI,kBAAkB;gBAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAChE,WAAW,GAAG,EAAE,GAAG,WAAW,EAAE,OAAO,EAAE,CAAC;QAC3C,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,WAAW,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3D,MAAM,QAAQ,GAAG,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,CAAC;QACvD,IACC,QAAQ,CAAC,MAAM,KAAK,GAAG;YACvB,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,QAAQ,CAAC,EACjE,CAAC;YACF,WAAW,GAAG,EAAE,GAAG,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAClE,CAAC;IACF,CAAC;AACF,CAAC"}
@@ -29,9 +29,17 @@ function getProxyAgent(targetUrl, timeoutOptions, lookup = node_dns_1.lookup) {
29
29
  return new undici_1.Agent({ ...agentOptions, connect: { lookup } });
30
30
  }
31
31
  async function proxyFetch({ input, init, timeoutOptions, lookup, }) {
32
- const targetUrl = input instanceof Request ? input.url : input.toString();
32
+ const isRequest = typeof input !== 'string' && !(input instanceof URL);
33
+ const targetUrl = isRequest ? input.url : input.toString();
33
34
  const dispatcher = getProxyAgent(targetUrl, timeoutOptions, lookup);
34
- return (await (0, undici_1.fetch)(input, {
35
+ return (await (0, undici_1.fetch)(targetUrl, {
36
+ ...(isRequest && {
37
+ method: input.method,
38
+ headers: [...input.headers],
39
+ body: input.body === null ? undefined : await input.arrayBuffer(),
40
+ signal: input.signal,
41
+ redirect: input.redirect,
42
+ }),
35
43
  ...init,
36
44
  dispatcher,
37
45
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"http-proxy-agent.js","sourceRoot":"","sources":["../../../src/utils/http-proxy-agent.ts"],"names":[],"mappings":";;;;;AAkBA,sDAAoF;AACpF,uCAAmD;AAInD,mCAAiE;AAejE,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,SAAS,EAAE,EAAE,CAAC,CAAC;AAMlF,MAAM,qBAAqB,GAAG,8BAA8B,CAAC;AAO7D,IAAI,WAA8B,CAAC;AAkBnC,uBACC,SAAkB,EAClB,cAAoC,EACpC,MAAM,GAAmB,iBAAa;IAEtC,MAAM,QAAQ,GAAG,IAAA,uBAAe,EAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;IAEnE,MAAM,YAAY,GAAG;QACpB,cAAc,EAAE,cAAc,EAAE,cAAc,IAAI,eAAe;QACjE,WAAW,EAAE,cAAc,EAAE,WAAW,IAAI,eAAe;QAC3D,GAAG,CAAC,cAAc,EAAE,cAAc,KAAK,SAAS,IAAI;YACnD,cAAc,EAAE,cAAc,CAAC,cAAc;SAC7C,CAAC;KACF,CAAC;IAEF,IAAI,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,mBAAU,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,aAAa,GAClB,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,MAAM,KAAK,iBAAa,CAAC;IAEhF,IAAI,aAAa,EAAE,CAAC;QACnB,WAAW,KAAK,IAAI,cAAK,CAAC,EAAE,GAAG,YAAY,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACpE,OAAO,WAAW,CAAC;IACpB,CAAC;IAED,OAAO,IAAI,cAAK,CAAC,EAAE,GAAG,YAAY,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;AAC5D,CAAC;AAoBM,KAAK,qBAAqB,EAChC,KAAK,EACL,IAAI,EACJ,cAAc,EACd,MAAM,GACa;IACnB,MAAM,SAAS,GAAG,KAAK,YAAY,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC1E,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;IAIpE,OAAO,CAAC,MAAM,IAAA,cAAW,EAAC,KAA0C,EAAE;QACrE,GAAI,IAA0C;QAC9C,UAAU;KACV,CAAC,CAAwB,CAAC;AAC5B,CAAC;AAUD,2BAAkC,SAAkB,EAAE,YAA2B;IAChF,MAAM,QAAQ,GAAG,IAAA,uBAAe,EAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;IAEnE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,OAAO,IAAA,6BAAqB,EAAC,SAAS,IAAI,qBAAqB,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;AAC1F,CAAC"}
1
+ {"version":3,"file":"http-proxy-agent.js","sourceRoot":"","sources":["../../../src/utils/http-proxy-agent.ts"],"names":[],"mappings":";;;;;AAkBA,sDAAoF;AACpF,uCAAmD;AAInD,mCAAiE;AAejE,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,SAAS,EAAE,EAAE,CAAC,CAAC;AAMlF,MAAM,qBAAqB,GAAG,8BAA8B,CAAC;AAO7D,IAAI,WAA8B,CAAC;AAkBnC,uBACC,SAAkB,EAClB,cAAoC,EACpC,MAAM,GAAmB,iBAAa;IAEtC,MAAM,QAAQ,GAAG,IAAA,uBAAe,EAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;IAEnE,MAAM,YAAY,GAAG;QACpB,cAAc,EAAE,cAAc,EAAE,cAAc,IAAI,eAAe;QACjE,WAAW,EAAE,cAAc,EAAE,WAAW,IAAI,eAAe;QAC3D,GAAG,CAAC,cAAc,EAAE,cAAc,KAAK,SAAS,IAAI;YACnD,cAAc,EAAE,cAAc,CAAC,cAAc;SAC7C,CAAC;KACF,CAAC;IAEF,IAAI,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,mBAAU,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,aAAa,GAClB,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,MAAM,KAAK,iBAAa,CAAC;IAEhF,IAAI,aAAa,EAAE,CAAC;QACnB,WAAW,KAAK,IAAI,cAAK,CAAC,EAAE,GAAG,YAAY,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACpE,OAAO,WAAW,CAAC;IACpB,CAAC;IAED,OAAO,IAAI,cAAK,CAAC,EAAE,GAAG,YAAY,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;AAC5D,CAAC;AAoBM,KAAK,qBAAqB,EAChC,KAAK,EACL,IAAI,EACJ,cAAc,EACd,MAAM,GACa;IAGnB,MAAM,SAAS,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,YAAY,GAAG,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC3D,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;IAOpE,OAAO,CAAC,MAAM,IAAA,cAAW,EAAC,SAAS,EAAE;QACpC,GAAG,CAAC,SAAS,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;YAC3B,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE;YACjE,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACxB,CAAC;QACF,GAAI,IAA0C;QAC9C,UAAU;KACV,CAAC,CAAwB,CAAC;AAC5B,CAAC;AAUD,2BAAkC,SAAkB,EAAE,YAA2B;IAChF,MAAM,QAAQ,GAAG,IAAA,uBAAe,EAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;IAEnE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,OAAO,IAAA,6BAAqB,EAAC,SAAS,IAAI,qBAAqB,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;AAC1F,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface RefreshingAuthFetchOptions {
2
+ baseFetch: typeof fetch;
3
+ initialHeaders?: HeadersInit;
4
+ refreshHeaders?: (current: Headers) => Promise<HeadersInit | null>;
5
+ shouldRefresh?: () => boolean;
6
+ assertAllowedUrl?: (url: string) => void | Promise<void>;
7
+ }
8
+ export declare function createRefreshingAuthFetch({ baseFetch, initialHeaders, refreshHeaders, shouldRefresh, assertAllowedUrl, }: RefreshingAuthFetchOptions): typeof fetch;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createRefreshingAuthFetch = createRefreshingAuthFetch;
4
+ const follow_redirects_1 = require("./follow-redirects");
5
+ function mergeHeaders(requestHeaders, authHeaders) {
6
+ const merged = new Headers(requestHeaders);
7
+ authHeaders.forEach((value, name) => merged.set(name, value));
8
+ return merged;
9
+ }
10
+ function getInputHeaders(input, init) {
11
+ return init?.headers ?? (input instanceof Request ? input.headers : undefined);
12
+ }
13
+ function createRefreshingAuthFetch({ baseFetch, initialHeaders, refreshHeaders, shouldRefresh, assertAllowedUrl, }) {
14
+ let authHeaders = new Headers(initialHeaders);
15
+ let authVersion = 0;
16
+ let refreshInFlight;
17
+ const refresh = async () => {
18
+ refreshInFlight ??= (async () => {
19
+ const refreshed = await refreshHeaders?.(new Headers(authHeaders));
20
+ if (!refreshed)
21
+ return false;
22
+ authHeaders = new Headers(refreshed);
23
+ authVersion += 1;
24
+ return true;
25
+ })();
26
+ try {
27
+ return await refreshInFlight;
28
+ }
29
+ finally {
30
+ refreshInFlight = undefined;
31
+ }
32
+ };
33
+ return async (input, init) => {
34
+ let retried = false;
35
+ let sendAuth = true;
36
+ const authedFetch = async (requestInput, requestInit) => {
37
+ if (sendAuth && refreshHeaders && shouldRefresh?.()) {
38
+ await refresh();
39
+ }
40
+ const requestAuthVersion = authVersion;
41
+ const execute = async () => await baseFetch(requestInput instanceof Request ? requestInput.clone() : requestInput, {
42
+ ...requestInit,
43
+ headers: sendAuth
44
+ ? mergeHeaders(getInputHeaders(requestInput, requestInit), authHeaders)
45
+ : getInputHeaders(requestInput, requestInit),
46
+ });
47
+ const response = await execute();
48
+ if (response.status !== 401 || !refreshHeaders || retried || !sendAuth)
49
+ return response;
50
+ retried = true;
51
+ const canRetry = authVersion !== requestAuthVersion || (await refresh());
52
+ if (!canRetry)
53
+ return response;
54
+ await response.body?.cancel().catch(() => { });
55
+ return await execute();
56
+ };
57
+ if (!assertAllowedUrl)
58
+ return await authedFetch(input, init);
59
+ const startUrl = input instanceof Request ? input.url : input;
60
+ return await (0, follow_redirects_1.fetchFollowingRedirects)(authedFetch, startUrl, init, {
61
+ onBeforeHop: async (hopUrl, { crossedOrigin }) => {
62
+ sendAuth = !crossedOrigin;
63
+ await assertAllowedUrl(hopUrl);
64
+ },
65
+ });
66
+ };
67
+ }
68
+ //# sourceMappingURL=refreshing-auth-fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refreshing-auth-fetch.js","sourceRoot":"","sources":["../../../src/utils/refreshing-auth-fetch.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.31.1",
3
+ "version": "0.32.0",
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",
@@ -104,6 +104,7 @@
104
104
  ],
105
105
  "devDependencies": {
106
106
  "@types/json-schema": "^7.0.15",
107
+ "@n8n/vitest-config": "1.21.0",
107
108
  "@vitest/coverage-v8": "4.1.9",
108
109
  "vite": "^8.0.2",
109
110
  "vitest": "^4.1.9",
@@ -115,8 +116,7 @@
115
116
  "tsx": "^4.19.3",
116
117
  "typescript": "7.0.2",
117
118
  "axios": "1.18.0",
118
- "nock": "14.0.14",
119
- "@n8n/vitest-config": "1.21.0"
119
+ "nock": "14.0.14"
120
120
  },
121
121
  "dependencies": {
122
122
  "zod": "3.25.76",
@@ -128,17 +128,17 @@
128
128
  "@langchain/openai": "1.4.4",
129
129
  "langchain": "1.2.30",
130
130
  "lodash": "4.18.1",
131
+ "@n8n/api-types": "1.39.0",
132
+ "@n8n/backend-network": "1.13.0",
133
+ "@n8n/config": "2.37.0",
134
+ "@n8n/typescript-config": "1.11.0",
135
+ "@n8n/utils": "1.47.0",
136
+ "n8n-workflow": "2.39.0",
131
137
  "tmp-promise": "3.0.3",
132
138
  "js-tiktoken": "1.0.21",
133
139
  "@thednp/dommatrix": "^3.1.1",
134
140
  "pdf-parse": "2.4.5",
135
- "undici": "^7.29.0",
136
- "@n8n/api-types": "1.38.1",
137
- "@n8n/typescript-config": "1.11.0",
138
- "@n8n/backend-network": "1.12.1",
139
- "@n8n/config": "2.36.1",
140
- "n8n-workflow": "2.38.1",
141
- "@n8n/utils": "1.46.1"
141
+ "undici": "^7.29.0"
142
142
  },
143
143
  "license": "SEE LICENSE IN LICENSE.md",
144
144
  "homepage": "https://n8n.io",