n8n-nodes-deep-research 1.1.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/LICENSE +21 -0
- package/README.md +190 -0
- package/dist/nodes/DeepResearch/DeepResearch.dark.svg +10 -0
- package/dist/nodes/DeepResearch/DeepResearch.node.d.ts +5 -0
- package/dist/nodes/DeepResearch/DeepResearch.node.js +1130 -0
- package/dist/nodes/DeepResearch/DeepResearch.node.js.map +1 -0
- package/dist/nodes/DeepResearch/DeepResearch.svg +10 -0
- package/dist/package.json +72 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +71 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Deep Research Node
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# n8n-nodes-deep-research
|
|
2
|
+
|
|
3
|
+
> **Free, zero-API-key research node for n8n** — search the web, Reddit, Hacker News, Wikipedia, news feeds, scrape any page, and run deep multi-source research, all at zero cost.
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+

|
|
7
|
+

|
|
8
|
+
|
|
9
|
+
## Features
|
|
10
|
+
|
|
11
|
+
| Operation | Source | Auth Required | Description |
|
|
12
|
+
|-----------|--------|---------------|-------------|
|
|
13
|
+
| **Web Search** | DuckDuckGo | No | General web search |
|
|
14
|
+
| **Reddit Search** | Reddit JSON API | No | Search posts with sort & time filters |
|
|
15
|
+
| **Hacker News** | HN Algolia API | No | Search stories, comments, Ask/Show HN |
|
|
16
|
+
| **Wikipedia** | Wikipedia API | No | Search articles, get extracts, any language |
|
|
17
|
+
| **News / RSS** | Google News, BBC, TechCrunch, Custom | No | Search news via RSS feeds |
|
|
18
|
+
| **GitHub** | GitHub Public API | No | Search repos, issues, code, users |
|
|
19
|
+
| **Scrape Web Page** | Any URL | No | Fetch page, extract text, links, metadata |
|
|
20
|
+
| **Deep Research** | ALL sources combined | No | Aggregates from every source in parallel |
|
|
21
|
+
|
|
22
|
+
## Install
|
|
23
|
+
|
|
24
|
+
### Option 1: Install via npm (recommended)
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# In your n8n custom nodes directory
|
|
28
|
+
cd ~/.n8n/custom
|
|
29
|
+
npm install n8n-nodes-deep-research
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Then restart n8n.
|
|
33
|
+
|
|
34
|
+
### Option 2: Install globally and link
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
# Clone or download this repo
|
|
38
|
+
git clone https://github.com/your-username/n8n-nodes-deep-research.git
|
|
39
|
+
cd n8n-nodes-deep-research
|
|
40
|
+
npm install
|
|
41
|
+
npm run build
|
|
42
|
+
|
|
43
|
+
# Link globally
|
|
44
|
+
npm link
|
|
45
|
+
|
|
46
|
+
# In your n8n custom nodes directory
|
|
47
|
+
cd ~/.n8n/custom
|
|
48
|
+
npm link n8n-nodes-deep-research
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Option 3: Docker
|
|
52
|
+
|
|
53
|
+
Add to your `docker-compose.yml`:
|
|
54
|
+
|
|
55
|
+
```yaml
|
|
56
|
+
volumes:
|
|
57
|
+
- ./n8n-nodes-deep-research:/usr/local/lib/node_modules/n8n-nodes-deep-research
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Or in your Dockerfile:
|
|
61
|
+
|
|
62
|
+
```dockerfile
|
|
63
|
+
COPY n8n-nodes-deep-research /usr/local/lib/node_modules/n8n-nodes-deep-research
|
|
64
|
+
RUN cd /usr/local/lib/node_modules/n8n-nodes-deep-research && npm install && npm run build
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Option 4: n8n Community Install (if published to npm)
|
|
68
|
+
|
|
69
|
+
In n8n, go to **Settings → Community Nodes → Install** and search for `deep-research`.
|
|
70
|
+
|
|
71
|
+
## Usage
|
|
72
|
+
|
|
73
|
+
1. Open any n8n workflow
|
|
74
|
+
2. Add a **Deep Research** node
|
|
75
|
+
3. Select your operation from the dropdown
|
|
76
|
+
4. Enter your search query
|
|
77
|
+
5. Configure any source-specific options (sort, time filter, etc.)
|
|
78
|
+
6. Run the workflow
|
|
79
|
+
|
|
80
|
+
### Example: Search Reddit for product feedback
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
Operation: Reddit Search
|
|
84
|
+
Query: "best mechanical keyboard 2025"
|
|
85
|
+
Max Results: 15
|
|
86
|
+
Sort By: Top
|
|
87
|
+
Time Filter: Past Month
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Example: Deep Research on a topic
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
Operation: Deep Research
|
|
94
|
+
Query: "quantum computing applications healthcare"
|
|
95
|
+
Max Results: 25
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
This will run searches across DuckDuckGo, Reddit, Hacker News, Wikipedia, and Google News simultaneously and return all results.
|
|
99
|
+
|
|
100
|
+
### Example: Scrape a web page
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
Operation: Scrape Web Page
|
|
104
|
+
URL: https://example.com/article
|
|
105
|
+
Extract Links: true
|
|
106
|
+
Max Text Length: 20000
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Output Format
|
|
110
|
+
|
|
111
|
+
Each result is returned as a separate item with these common fields:
|
|
112
|
+
|
|
113
|
+
```json
|
|
114
|
+
{
|
|
115
|
+
"title": "Result Title",
|
|
116
|
+
"url": "https://example.com/page",
|
|
117
|
+
"snippet": "Brief description or excerpt...",
|
|
118
|
+
"source": "duckduckgo|reddit|hackernews|wikipedia|news-google|github"
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Source-specific extra fields:
|
|
123
|
+
|
|
124
|
+
**Reddit**: `redditScore`, `redditAuthor`, `redditSubreddit`, `redditNumComments`, `redditCreatedUtc`
|
|
125
|
+
|
|
126
|
+
**Hacker News**: `hnPoints`, `hnAuthor`, `hnNumComments`, `hnCreated`, `hnObjectId`
|
|
127
|
+
|
|
128
|
+
**Wikipedia**: `wikiWordcount`, `wikiTimestamp`
|
|
129
|
+
|
|
130
|
+
**GitHub**: `githubStars`, `githubForks`, `githubLanguage`, `githubTopics`
|
|
131
|
+
|
|
132
|
+
**News/RSS**: `publishedAt`, `author`
|
|
133
|
+
|
|
134
|
+
**Scrape**: `description`, `ogTitle`, `ogDescription`, `ogImage`, `textContent`, `textLength`, `links`, `linksCount`
|
|
135
|
+
|
|
136
|
+
### Return as Single Item
|
|
137
|
+
|
|
138
|
+
Enable **Additional Fields → Return as Single Item** to get all results wrapped in a single item:
|
|
139
|
+
|
|
140
|
+
```json
|
|
141
|
+
{
|
|
142
|
+
"operation": "deepResearch",
|
|
143
|
+
"totalResults": 25,
|
|
144
|
+
"results": [
|
|
145
|
+
{ "title": "...", "url": "...", "source": "..." },
|
|
146
|
+
...
|
|
147
|
+
]
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## Development
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
# Install dependencies
|
|
155
|
+
npm install
|
|
156
|
+
|
|
157
|
+
# Start development with hot reload
|
|
158
|
+
npm run dev
|
|
159
|
+
|
|
160
|
+
# Build for production
|
|
161
|
+
npm run build
|
|
162
|
+
|
|
163
|
+
# Lint code
|
|
164
|
+
npm run lint
|
|
165
|
+
|
|
166
|
+
# Lint and auto-fix
|
|
167
|
+
npm run lint:fix
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## How It Works (No API Keys Needed)
|
|
171
|
+
|
|
172
|
+
- **DuckDuckGo**: Parses their HTML search page (no API key needed)
|
|
173
|
+
- **Reddit**: Uses the public `reddit.com/search.json` endpoint
|
|
174
|
+
- **Hacker News**: Uses the Algolia HN API (`hn.algolia.com`)
|
|
175
|
+
- **Wikipedia**: Uses the MediaWiki Action API
|
|
176
|
+
- **News**: Parses RSS/Atom feeds from news sites
|
|
177
|
+
- **GitHub**: Uses the unauthenticated public Search API (60 requests/hour)
|
|
178
|
+
- **Scraping**: Fetches raw HTML and extracts content
|
|
179
|
+
|
|
180
|
+
## Limitations
|
|
181
|
+
|
|
182
|
+
- DuckDuckGo HTML parsing may break if DDG changes their page structure
|
|
183
|
+
- Reddit's public API has rate limits (without OAuth)
|
|
184
|
+
- GitHub unauthenticated API: 60 requests/hour
|
|
185
|
+
- Web scraping depends on the target page's structure
|
|
186
|
+
- No authentication means some rate-limited APIs may be slower
|
|
187
|
+
|
|
188
|
+
## License
|
|
189
|
+
|
|
190
|
+
MIT
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" fill="none">
|
|
2
|
+
<circle cx="24" cy="24" r="22" stroke="#718096" stroke-width="2.5" fill="#1A202C"/>
|
|
3
|
+
<circle cx="20" cy="20" r="9" stroke="#63B3ED" stroke-width="2.5" fill="none"/>
|
|
4
|
+
<line x1="27" y1="27" x2="36" y2="36" stroke="#63B3ED" stroke-width="2.5" stroke-linecap="round"/>
|
|
5
|
+
<circle cx="20" cy="20" r="4" fill="#63B3ED"/>
|
|
6
|
+
<path d="M14 32 Q18 36 24 38 Q30 36 34 32" stroke="#63B3ED" stroke-width="1.5" fill="none" stroke-dasharray="2 2"/>
|
|
7
|
+
<circle cx="14" cy="30" r="2" fill="#90CDF4"/>
|
|
8
|
+
<circle cx="34" cy="30" r="2" fill="#90CDF4"/>
|
|
9
|
+
<circle cx="24" cy="38" r="2" fill="#90CDF4"/>
|
|
10
|
+
</svg>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type IExecuteFunctions, type INodeExecutionData, type INodeType, type INodeTypeDescription } from 'n8n-workflow';
|
|
2
|
+
export declare class DeepResearch implements INodeType {
|
|
3
|
+
description: INodeTypeDescription;
|
|
4
|
+
execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
|
|
5
|
+
}
|