@n8n/ai-utilities 0.17.0 → 0.18.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.
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.js +5 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/typecheck.tsbuildinfo +1 -1
- package/dist/cjs/web-search/brave-search.d.ts +8 -0
- package/dist/cjs/web-search/brave-search.js +52 -0
- package/dist/cjs/web-search/brave-search.js.map +1 -0
- package/dist/cjs/web-search/index.d.ts +3 -0
- package/dist/cjs/web-search/index.js +18 -0
- package/dist/cjs/web-search/index.js.map +1 -0
- package/dist/cjs/web-search/searxng-search.d.ts +2 -0
- package/dist/cjs/web-search/searxng-search.js +49 -0
- package/dist/cjs/web-search/searxng-search.js.map +1 -0
- package/dist/cjs/web-search/types.d.ts +15 -0
- package/dist/cjs/web-search/types.js +13 -0
- package/dist/cjs/web-search/types.js.map +1 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +5 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/typecheck.tsbuildinfo +1 -1
- package/dist/esm/web-search/brave-search.d.ts +8 -0
- package/dist/esm/web-search/brave-search.js +42 -0
- package/dist/esm/web-search/brave-search.js.map +1 -0
- package/dist/esm/web-search/index.d.ts +3 -0
- package/dist/esm/web-search/index.js +8 -0
- package/dist/esm/web-search/index.js.map +1 -0
- package/dist/esm/web-search/searxng-search.d.ts +2 -0
- package/dist/esm/web-search/searxng-search.js +39 -0
- package/dist/esm/web-search/searxng-search.js.map +1 -0
- package/dist/esm/web-search/types.d.ts +15 -0
- package/dist/esm/web-search/types.js +3 -0
- package/dist/esm/web-search/types.js.map +1 -0
- package/package.json +13 -5
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { WebSearchOptions, WebSearchResponse } from './types';
|
|
2
|
+
export interface BraveSearchOptions extends WebSearchOptions {
|
|
3
|
+
proxyConfig?: {
|
|
4
|
+
apiUrl: string;
|
|
5
|
+
getAuthHeaders: () => Promise<Record<string, string>>;
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export declare function braveSearch(apiKey: string, query: string, options: BraveSearchOptions): Promise<WebSearchResponse>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.braveSearch = braveSearch;
|
|
4
|
+
const BRAVE_SEARCH_PATH = '/res/v1/web/search';
|
|
5
|
+
const BRAVE_SEARCH_URL = `https://api.search.brave.com${BRAVE_SEARCH_PATH}`;
|
|
6
|
+
async function braveSearch(apiKey, query, options) {
|
|
7
|
+
let searchQuery = query;
|
|
8
|
+
if (options.includeDomains?.length) {
|
|
9
|
+
const siteFilter = options.includeDomains.map((d) => `site:${d}`).join(' OR ');
|
|
10
|
+
searchQuery = `${query} (${siteFilter})`;
|
|
11
|
+
}
|
|
12
|
+
if (options.excludeDomains?.length) {
|
|
13
|
+
searchQuery += options.excludeDomains.map((d) => ` -site:${d}`).join('');
|
|
14
|
+
}
|
|
15
|
+
const params = new URLSearchParams({
|
|
16
|
+
q: searchQuery,
|
|
17
|
+
count: String(options.maxResults ?? 5),
|
|
18
|
+
});
|
|
19
|
+
const proxyConfig = options.proxyConfig;
|
|
20
|
+
const baseUrl = proxyConfig ? `${proxyConfig.apiUrl}${BRAVE_SEARCH_PATH}` : BRAVE_SEARCH_URL;
|
|
21
|
+
const proxyHeaders = proxyConfig ? await proxyConfig.getAuthHeaders() : undefined;
|
|
22
|
+
const headers = {
|
|
23
|
+
Accept: 'application/json',
|
|
24
|
+
'Accept-Encoding': 'gzip',
|
|
25
|
+
...(proxyHeaders ?? { 'X-Subscription-Token': apiKey }),
|
|
26
|
+
};
|
|
27
|
+
const response = await fetch(`${baseUrl}?${params}`, { headers });
|
|
28
|
+
if (!response.ok) {
|
|
29
|
+
throw new Error(`Brave search failed: ${response.status} ${response.statusText}`);
|
|
30
|
+
}
|
|
31
|
+
const data = (await response.json());
|
|
32
|
+
return {
|
|
33
|
+
query,
|
|
34
|
+
results: (data.web?.results ?? []).map((r) => ({
|
|
35
|
+
title: r.title,
|
|
36
|
+
url: r.url,
|
|
37
|
+
snippet: r.description,
|
|
38
|
+
...(r.age ? { publishedDate: r.age } : {}),
|
|
39
|
+
})),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=brave-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brave-search.js","sourceRoot":"","sources":["../../../src/web-search/brave-search.ts"],"names":[],"mappings":";;AAgCA,kCA+CC;AA7ED,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;AAC/C,MAAM,gBAAgB,GAAG,+BAA+B,iBAAiB,EAAE,CAAC;AA6BrE,KAAK,UAAU,WAAW,CAChC,MAAc,EACd,KAAa,EACb,OAA2B;IAE3B,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,IAAI,OAAO,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;QACpC,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/E,WAAW,GAAG,GAAG,KAAK,KAAK,UAAU,GAAG,CAAC;IAC1C,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;QACpC,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QAClC,CAAC,EAAE,WAAW;QACd,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;KACtC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACxC,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAC7F,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAClF,MAAM,OAAO,GAA2B;QACvC,MAAM,EAAE,kBAAkB;QAC1B,iBAAiB,EAAE,MAAM;QACzB,GAAG,CAAC,YAAY,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,CAAC;KACvD,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,IAAI,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAElE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA2B,CAAC;IAE/D,OAAO;QACN,KAAK;QACL,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9C,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,OAAO,EAAE,CAAC,CAAC,WAAW;YACtB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1C,CAAC,CAAC;KACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.searxngSearch = exports.braveSearch = void 0;
|
|
4
|
+
var brave_search_1 = require("./brave-search");
|
|
5
|
+
Object.defineProperty(exports, "braveSearch", { enumerable: true, get: function () { return brave_search_1.braveSearch; } });
|
|
6
|
+
var searxng_search_1 = require("./searxng-search");
|
|
7
|
+
Object.defineProperty(exports, "searxngSearch", { enumerable: true, get: function () { return searxng_search_1.searxngSearch; } });
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/web-search/index.ts"],"names":[],"mappings":";;;AAAA,+CAAsE;AAA7D,2GAAA,WAAW,OAAA;AACpB,mDAAiD;AAAxC,+GAAA,aAAa,OAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.searxngSearch = searxngSearch;
|
|
4
|
+
async function searxngSearch(baseUrl, query, options) {
|
|
5
|
+
let searchQuery = query;
|
|
6
|
+
if (options.includeDomains?.length) {
|
|
7
|
+
const siteFilter = options.includeDomains.map((d) => `site:${d}`).join(' OR ');
|
|
8
|
+
searchQuery = `${query} (${siteFilter})`;
|
|
9
|
+
}
|
|
10
|
+
if (options.excludeDomains?.length) {
|
|
11
|
+
searchQuery += options.excludeDomains.map((d) => ` -site:${d}`).join('');
|
|
12
|
+
}
|
|
13
|
+
const normalizedUrl = baseUrl.replace(/\/+$/, '');
|
|
14
|
+
const params = new URLSearchParams({
|
|
15
|
+
q: searchQuery,
|
|
16
|
+
format: 'json',
|
|
17
|
+
pageno: '1',
|
|
18
|
+
});
|
|
19
|
+
const response = await fetch(`${normalizedUrl}/search?${params}`, {
|
|
20
|
+
headers: {
|
|
21
|
+
Accept: 'application/json',
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
if (!response.ok) {
|
|
25
|
+
throw new Error(`SearXNG search failed: ${response.status} ${response.statusText}`);
|
|
26
|
+
}
|
|
27
|
+
const data = (await response.json());
|
|
28
|
+
const maxResults = options.maxResults ?? 5;
|
|
29
|
+
return {
|
|
30
|
+
query,
|
|
31
|
+
results: (data.results ?? []).slice(0, maxResults).map((r) => ({
|
|
32
|
+
title: r.title,
|
|
33
|
+
url: r.url,
|
|
34
|
+
snippet: r.content,
|
|
35
|
+
...(r.publishedDate ? { publishedDate: r.publishedDate } : {}),
|
|
36
|
+
})),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=searxng-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searxng-search.js","sourceRoot":"","sources":["../../../src/web-search/searxng-search.ts"],"names":[],"mappings":";;AAqBA,sCA8CC;AA9CM,KAAK,UAAU,aAAa,CAClC,OAAe,EACf,KAAa,EACb,OAAyB;IAEzB,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,IAAI,OAAO,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;QACpC,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/E,WAAW,GAAG,GAAG,KAAK,KAAK,UAAU,GAAG,CAAC;IAC1C,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;QACpC,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAElD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QAClC,CAAC,EAAE,WAAW;QACd,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,GAAG;KACX,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,aAAa,WAAW,MAAM,EAAE,EAAE;QACjE,OAAO,EAAE;YACR,MAAM,EAAE,kBAAkB;SAC1B;KACD,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAuB,CAAC;IAC3D,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;IAE3C,OAAO;QACN,KAAK;QACL,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9D,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9D,CAAC,CAAC;KACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface WebSearchResult {
|
|
2
|
+
title: string;
|
|
3
|
+
url: string;
|
|
4
|
+
snippet: string;
|
|
5
|
+
publishedDate?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface WebSearchResponse {
|
|
8
|
+
query: string;
|
|
9
|
+
results: WebSearchResult[];
|
|
10
|
+
}
|
|
11
|
+
export interface WebSearchOptions {
|
|
12
|
+
maxResults?: number;
|
|
13
|
+
includeDomains?: string[];
|
|
14
|
+
excludeDomains?: string[];
|
|
15
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/web-search/types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@n8n/ai-utilities",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.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",
|
|
@@ -18,6 +18,9 @@
|
|
|
18
18
|
],
|
|
19
19
|
"http-proxy-agent": [
|
|
20
20
|
"dist/esm/utils/http-proxy-agent.d.ts"
|
|
21
|
+
],
|
|
22
|
+
"web-search": [
|
|
23
|
+
"dist/esm/web-search/index.d.ts"
|
|
21
24
|
]
|
|
22
25
|
}
|
|
23
26
|
},
|
|
@@ -47,6 +50,11 @@
|
|
|
47
50
|
"import": "./dist/esm/utils/http-proxy-agent.js",
|
|
48
51
|
"require": "./dist/cjs/utils/http-proxy-agent.js"
|
|
49
52
|
},
|
|
53
|
+
"./web-search": {
|
|
54
|
+
"types": "./dist/esm/web-search/index.d.ts",
|
|
55
|
+
"import": "./dist/esm/web-search/index.js",
|
|
56
|
+
"require": "./dist/cjs/web-search/index.js"
|
|
57
|
+
},
|
|
50
58
|
"./*": "./*"
|
|
51
59
|
},
|
|
52
60
|
"files": [
|
|
@@ -60,7 +68,7 @@
|
|
|
60
68
|
"@types/mime-types": "3.0.1",
|
|
61
69
|
"tsx": "^4.19.3",
|
|
62
70
|
"axios": "1.16.1",
|
|
63
|
-
"n8n-workflow": "2.
|
|
71
|
+
"n8n-workflow": "2.24.0"
|
|
64
72
|
},
|
|
65
73
|
"dependencies": {
|
|
66
74
|
"zod": "3.25.67",
|
|
@@ -77,9 +85,9 @@
|
|
|
77
85
|
"pdf-parse": "2.4.5",
|
|
78
86
|
"proxy-from-env": "^1.1.0",
|
|
79
87
|
"undici": "^6.21.0",
|
|
80
|
-
"@n8n/config": "2.
|
|
81
|
-
"@n8n/
|
|
82
|
-
"@n8n/
|
|
88
|
+
"@n8n/config": "2.23.0",
|
|
89
|
+
"@n8n/utils": "1.33.0",
|
|
90
|
+
"@n8n/typescript-config": "1.4.0"
|
|
83
91
|
},
|
|
84
92
|
"peerDependencies": {
|
|
85
93
|
"n8n-workflow": "*"
|