n8n-nodes-alterlab 0.2.1 → 0.3.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.
- package/README.md +197 -99
- package/dist/credentials/AlterLabOAuth2Api.credentials.d.ts +2 -1
- package/dist/credentials/AlterLabOAuth2Api.credentials.d.ts.map +1 -1
- package/dist/credentials/AlterLabOAuth2Api.credentials.js +7 -0
- package/dist/credentials/AlterLabOAuth2Api.credentials.js.map +1 -1
- package/dist/nodes/AlterLab/AlterLab.node.d.ts +1 -1
- package/dist/nodes/AlterLab/AlterLab.node.d.ts.map +1 -1
- package/dist/nodes/AlterLab/AlterLab.node.js +379 -257
- package/dist/nodes/AlterLab/AlterLab.node.js.map +1 -1
- package/dist/nodes/AlterLab/AlterLab.node.json +33 -30
- package/dist/nodes/AlterLab/alterlab.svg +10 -3
- package/package.json +60 -62
package/README.md
CHANGED
|
@@ -1,54 +1,69 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="assets/logo.png" alt="AlterLab Logo" width="120" />
|
|
3
|
+
</p>
|
|
2
4
|
|
|
3
|
-
|
|
5
|
+
<h1 align="center">n8n-nodes-alterlab</h1>
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
<p align="center">
|
|
8
|
+
<strong>Web scraping node for n8n with anti-bot bypass, JavaScript rendering, and structured data extraction.</strong>
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="https://www.npmjs.com/package/n8n-nodes-alterlab"><img src="https://img.shields.io/npm/v/n8n-nodes-alterlab.svg" alt="npm version" /></a>
|
|
13
|
+
<a href="https://www.npmjs.com/package/n8n-nodes-alterlab"><img src="https://img.shields.io/npm/dm/n8n-nodes-alterlab.svg" alt="npm downloads" /></a>
|
|
14
|
+
<a href="https://github.com/RapierCraft/n8n-nodes-alterlab/actions/workflows/ci.yml"><img src="https://github.com/RapierCraft/n8n-nodes-alterlab/actions/workflows/ci.yml/badge.svg" alt="CI" /></a>
|
|
15
|
+
<a href="https://github.com/RapierCraft/n8n-nodes-alterlab/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/n8n-nodes-alterlab.svg" alt="license" /></a>
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
<p align="center">
|
|
19
|
+
<a href="https://app.alterlab.io/signin?redirect=/dashboard/keys&source=n8n&utm_source=n8n&utm_medium=integration&utm_campaign=community_node"><strong>Get Started Free →</strong></a> $1 free balance on signup — up to 5,000 scrapes.
|
|
20
|
+
</p>
|
|
6
21
|
|
|
7
22
|
---
|
|
8
23
|
|
|
9
|
-
|
|
24
|
+
<p align="center">
|
|
25
|
+
<img src="assets/hero-banner.png" alt="AlterLab web scraping platform — scrape any website from n8n workflows" width="700" />
|
|
26
|
+
</p>
|
|
10
27
|
|
|
11
|
-
|
|
28
|
+
## Why Use AlterLab Instead of the HTTP Request Node?
|
|
12
29
|
|
|
13
|
-
|
|
30
|
+
The n8n HTTP Request node works for simple APIs but fails on real-world websites. It cannot bypass Cloudflare, DataDome, PerimeterX, or Akamai. It cannot render JavaScript. It cannot solve CAPTCHAs.
|
|
14
31
|
|
|
15
|
-
|
|
16
|
-
- **JavaScript rendering** — Full headless Chromium for SPAs and dynamic content
|
|
17
|
-
- **Smart tier escalation** — Starts with the cheapest method, automatically upgrades only if the site blocks it
|
|
18
|
-
- **Structured extraction** — Returns clean JSON for products, articles, job listings, recipes, events
|
|
19
|
-
- **Markdown output** — LLM-ready content, ideal for AI agent workflows
|
|
32
|
+
AlterLab replaces chains of Browserless, proxy rotators, and custom retry logic with **one node**:
|
|
20
33
|
|
|
21
|
-
|
|
34
|
+
| Capability | HTTP Request Node | AlterLab Node |
|
|
35
|
+
|---|---|---|
|
|
36
|
+
| Anti-bot bypass (Cloudflare, DataDome, Akamai) | No | Yes — automatic |
|
|
37
|
+
| JavaScript rendering (React, Angular, Vue SPAs) | No | Yes — full Chromium |
|
|
38
|
+
| Structured data extraction (JSON, Schema.org) | No | Yes — built-in profiles |
|
|
39
|
+
| Smart tier escalation (cheapest method first) | N/A | Yes — saves 60-80% vs browser-only |
|
|
40
|
+
| Residential proxy rotation | No | Yes — 195+ countries |
|
|
41
|
+
| Screenshot and PDF capture | No | Yes |
|
|
42
|
+
| OCR text extraction from images | No | Yes |
|
|
22
43
|
|
|
23
|
-
|
|
44
|
+
## How Does AlterLab Web Scraping Work?
|
|
24
45
|
|
|
25
|
-
|
|
26
|
-
|--------|----------------|--------------|
|
|
27
|
-
| Curl | $0.0002 | Static pages, RSS feeds, APIs |
|
|
28
|
-
| HTTP | $0.0003 | TLS fingerprinting for moderately protected sites |
|
|
29
|
-
| Stealth | $0.0005 | Browser impersonation for Cloudflare/DataDome |
|
|
30
|
-
| Light JS | $0.0007 | JSON extraction from server-rendered HTML |
|
|
31
|
-
| Browser | $0.001 | Full Chromium for JavaScript-heavy SPAs |
|
|
46
|
+
AlterLab uses a multi-tier scraping architecture that automatically selects the cheapest method capable of fetching each URL:
|
|
32
47
|
|
|
33
|
-
|
|
48
|
+
1. **Curl** ($0.0002/req) — Direct HTTP for static pages, RSS feeds, public APIs
|
|
49
|
+
2. **HTTP** ($0.0003/req) — TLS fingerprint rotation for moderately protected sites
|
|
50
|
+
3. **Stealth** ($0.0005/req) — Browser impersonation for Cloudflare/DataDome-protected sites
|
|
51
|
+
4. **Light JS** ($0.0007/req) — Lightweight JS extraction from server-rendered HTML
|
|
52
|
+
5. **Browser** ($0.001/req) — Full headless Chromium for JavaScript-heavy SPAs
|
|
34
53
|
|
|
35
|
-
|
|
54
|
+
Auto mode starts at Tier 1 and escalates only when blocked. Most websites resolve at Tiers 1-2, so **$1 gets you 1,000 to 5,000 scrapes** depending on the sites you target.
|
|
36
55
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
| Screenshot | +$0.0002 | Full-page PNG capture |
|
|
41
|
-
| PDF Export | +$0.0004 | Rendered page as downloadable PDF |
|
|
42
|
-
| OCR | +$0.001 | Text extraction from images |
|
|
43
|
-
| Premium Proxy | +$0.0002 | Residential proxy for geo-targeting |
|
|
56
|
+
<p align="center">
|
|
57
|
+
<img src="assets/platform-dashboard.png" alt="AlterLab Cortex — intelligent web scraping platform with anti-bot bypass" width="650" />
|
|
58
|
+
</p>
|
|
44
59
|
|
|
45
|
-
##
|
|
60
|
+
## Installation
|
|
46
61
|
|
|
47
|
-
### Install
|
|
62
|
+
### Install from n8n UI
|
|
48
63
|
|
|
49
|
-
In your n8n instance: **Settings → Community Nodes → `n8n-nodes-alterlab
|
|
64
|
+
In your n8n instance: **Settings → Community Nodes → Install → `n8n-nodes-alterlab`**
|
|
50
65
|
|
|
51
|
-
|
|
66
|
+
### Install via CLI
|
|
52
67
|
|
|
53
68
|
```bash
|
|
54
69
|
npm install n8n-nodes-alterlab
|
|
@@ -59,128 +74,211 @@ npm install n8n-nodes-alterlab
|
|
|
59
74
|
**Option A — One-click OAuth (recommended):**
|
|
60
75
|
1. Add an AlterLab node to your workflow
|
|
61
76
|
2. Click the credential dropdown → **Create New → AlterLab OAuth2 API**
|
|
62
|
-
3. Click **Connect** → sign in → done
|
|
77
|
+
3. Click **Connect** → sign in → done. No API key copy-paste needed.
|
|
63
78
|
|
|
64
79
|
**Option B — API key:**
|
|
65
|
-
1. [Sign up](https://app.alterlab.io/signin?redirect=/dashboard/keys&source=n8n&utm_source=n8n&utm_medium=integration&utm_campaign=community_node) and copy your API key
|
|
80
|
+
1. [Sign up free](https://app.alterlab.io/signin?redirect=/dashboard/keys&source=n8n&utm_source=n8n&utm_medium=integration&utm_campaign=community_node) and copy your API key
|
|
66
81
|
2. In n8n: **Credentials → New → AlterLab API** → paste key
|
|
67
82
|
|
|
68
|
-
|
|
83
|
+
## Quick Start — Scrape a Page in 30 Seconds
|
|
84
|
+
|
|
85
|
+
1. Add the **AlterLab** node to any workflow
|
|
86
|
+
2. Enter a URL (e.g., `https://www.amazon.com/dp/B0BSHF7WHW`)
|
|
87
|
+
3. Run
|
|
69
88
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
89
|
+
The node returns markdown, structured JSON, raw HTML, and metadata in a flat JSON object — ready for the next node in your workflow:
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
{{ $json.markdown }} → Clean markdown (best for LLMs and AI agents)
|
|
93
|
+
{{ $json.text }} → Plain text
|
|
94
|
+
{{ $json.json }} → Structured data (Schema.org, extracted fields)
|
|
95
|
+
{{ $json.html }} → Raw HTML
|
|
96
|
+
{{ $json.title }} → Page title
|
|
97
|
+
{{ $json.filteredContent }} → Custom schema extraction results
|
|
98
|
+
{{ $json.billing.cost }} → Amount charged from your balance
|
|
99
|
+
{{ $json.billing.tier }} → Scraping method used (curl, http, stealth, etc.)
|
|
100
|
+
{{ $json.billing.suggestion }} → Cost optimization tip
|
|
101
|
+
{{ $json.screenshotUrl }} → Screenshot URL (if enabled)
|
|
102
|
+
{{ $json.pdfUrl }} → PDF URL (if enabled)
|
|
103
|
+
```
|
|
73
104
|
|
|
74
|
-
|
|
105
|
+
## What Can You Scrape with AlterLab?
|
|
75
106
|
|
|
76
|
-
|
|
107
|
+
### E-Commerce Product Data (Amazon, Walmart, Shopify)
|
|
77
108
|
|
|
78
|
-
|
|
79
|
-
Scrape Amazon, Walmart, Target, Best Buy, Shopify stores, and any product page. The **Product** extraction profile returns structured data: name, price, currency, rating, review count, availability, images.
|
|
109
|
+
Scrape Amazon, Walmart, Target, Best Buy, Shopify stores, and any product page. The **Product** extraction profile returns structured JSON: product name, price, currency, rating, review count, availability, image URLs, and description.
|
|
80
110
|
|
|
81
|
-
### News
|
|
82
|
-
Scrape news sites, blogs, and publications. The **Article** profile extracts: title, author, published date, body text as markdown, and featured image.
|
|
111
|
+
### News Articles and Blog Content
|
|
83
112
|
|
|
84
|
-
|
|
85
|
-
Scrape Indeed, LinkedIn job posts, Glassdoor, and company career pages. The **Job Posting** profile returns: title, company, location, salary range, description, requirements.
|
|
113
|
+
Scrape news sites, blogs, and publications. The **Article** extraction profile returns: title, author, published date, body text as clean markdown, and featured image URL. Markdown output is optimized for LLM context windows.
|
|
86
114
|
|
|
87
|
-
###
|
|
88
|
-
|
|
115
|
+
### Job Board Listings (Indeed, LinkedIn, Glassdoor)
|
|
116
|
+
|
|
117
|
+
Scrape Indeed, LinkedIn job posts, Glassdoor, and company career pages. The **Job Posting** profile returns: job title, company, location, salary range, description, and requirements as structured JSON.
|
|
118
|
+
|
|
119
|
+
### Any Website with Custom Extraction
|
|
120
|
+
|
|
121
|
+
Define a JSON Schema for your exact output structure, or write a natural language extraction prompt like *"extract the price, title, and all review texts as an array"*. AlterLab maps page content to your schema automatically.
|
|
122
|
+
|
|
123
|
+
<p align="center">
|
|
124
|
+
<img src="assets/api-terminal.png" alt="AlterLab API terminal — web scraping infrastructure for developers" width="400" />
|
|
125
|
+
</p>
|
|
89
126
|
|
|
90
127
|
## n8n Workflow Examples
|
|
91
128
|
|
|
92
129
|
### Price Monitoring Automation
|
|
93
|
-
**Schedule → AlterLab (Product profile) → Compare to Google Sheet → IF price dropped → Slack notification**
|
|
94
130
|
|
|
95
|
-
|
|
131
|
+
```
|
|
132
|
+
Schedule → AlterLab (Product profile) → Compare to Google Sheet → IF price dropped → Slack notification
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Monitor competitor prices daily. AlterLab handles anti-bot protection on e-commerce sites. Compare extracted prices against stored values and alert your team when prices change.
|
|
96
136
|
|
|
97
137
|
### AI-Powered Content Pipeline
|
|
98
|
-
**Schedule → AlterLab (Article profile, Markdown output) → OpenAI Summarize → Notion Database**
|
|
99
138
|
|
|
100
|
-
|
|
139
|
+
```
|
|
140
|
+
Schedule → AlterLab (Article profile, Markdown output) → OpenAI Summarize → Notion Database
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Scrape industry news sources, get clean markdown (not messy HTML), summarize with GPT-4, and store in your knowledge base. AlterLab's markdown output is token-efficient for LLM processing.
|
|
101
144
|
|
|
102
145
|
### Lead Generation from Job Boards
|
|
103
|
-
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
Schedule → AlterLab (Job Posting profile) → Filter by keywords → Airtable → Email notification
|
|
149
|
+
```
|
|
104
150
|
|
|
105
151
|
Monitor job boards for roles that match your product. Extract structured listings, filter for relevant titles, and push qualified leads to your CRM.
|
|
106
152
|
|
|
107
153
|
### Competitor Intelligence Dashboard
|
|
108
|
-
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
Schedule → AlterLab (Custom schema) → Compare to previous scrape → Google Sheets → Looker Studio
|
|
157
|
+
```
|
|
109
158
|
|
|
110
159
|
Scrape competitor pages weekly. Define a custom schema for the data points you care about (pricing, features, team size). Track changes over time in a dashboard.
|
|
111
160
|
|
|
112
|
-
### Real Estate
|
|
113
|
-
|
|
161
|
+
### Real Estate Listing Monitor
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
Schedule → AlterLab (Custom schema) → IF new listing → Telegram notification
|
|
165
|
+
```
|
|
114
166
|
|
|
115
167
|
Monitor property listing sites for new entries matching your criteria. Extract price, location, square footage, and images. Get notified the moment a matching property appears.
|
|
116
168
|
|
|
117
|
-
##
|
|
169
|
+
## Pricing — Pay-As-You-Go Web Scraping
|
|
118
170
|
|
|
119
|
-
|
|
171
|
+
No subscriptions. No monthly minimums. Add balance and use it whenever you need it.
|
|
120
172
|
|
|
121
|
-
|
|
122
|
-
|-----------|----------|-------------|
|
|
123
|
-
| **URL** | Yes | The page to scrape |
|
|
124
|
-
| **Mode** | No | `auto` (default), `html`, `js`, `pdf`, `ocr` |
|
|
173
|
+
### Base Scraping Costs
|
|
125
174
|
|
|
126
|
-
|
|
175
|
+
| Tier | Cost per Request | Use Case |
|
|
176
|
+
|---|---|---|
|
|
177
|
+
| Curl | $0.0002 | Static pages, RSS feeds, public APIs |
|
|
178
|
+
| HTTP | $0.0003 | Sites with basic TLS fingerprinting |
|
|
179
|
+
| Stealth | $0.0005 | Cloudflare, DataDome, PerimeterX protected sites |
|
|
180
|
+
| Light JS | $0.0007 | Server-rendered pages needing JSON extraction |
|
|
181
|
+
| Browser | $0.001 | Full JavaScript SPAs (React, Angular, Vue) |
|
|
127
182
|
|
|
128
|
-
|
|
183
|
+
### Optional Add-Ons
|
|
129
184
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
185
|
+
| Add-On | Extra Cost per Request | Description |
|
|
186
|
+
|---|---|---|
|
|
187
|
+
| JavaScript Rendering | +$0.0006 | Headless Chromium for dynamic content |
|
|
188
|
+
| Screenshot Capture | +$0.0002 | Full-page PNG screenshot |
|
|
189
|
+
| PDF Export | +$0.0004 | Rendered page as downloadable PDF |
|
|
190
|
+
| OCR Text Extraction | +$0.001 | Extract text from images on the page |
|
|
191
|
+
| Premium Residential Proxy | +$0.0002 | Geo-targeted proxy (US, DE, GB, JP, and 190+ more) |
|
|
192
|
+
|
|
193
|
+
## Node Reference
|
|
194
|
+
|
|
195
|
+
### Input Parameters
|
|
196
|
+
|
|
197
|
+
| Parameter | Required | Default | Description |
|
|
198
|
+
|---|---|---|---|
|
|
199
|
+
| **URL** | Yes | — | The webpage URL to scrape |
|
|
200
|
+
| **Mode** | No | `auto` | Scraping mode: `auto`, `html`, `js`, `pdf`, `ocr` |
|
|
143
201
|
|
|
144
202
|
### Advanced Options
|
|
145
203
|
|
|
146
204
|
| Option | Description |
|
|
147
|
-
|
|
205
|
+
|---|---|
|
|
148
206
|
| **Extraction Profile** | Pre-built schemas: Product, Article, Job Posting, FAQ, Recipe, Event |
|
|
149
|
-
| **Extraction Prompt** | Natural language instructions for custom extraction |
|
|
150
|
-
| **Extraction Schema** | JSON Schema for structured output |
|
|
151
|
-
| **
|
|
152
|
-
| **
|
|
153
|
-
| **
|
|
207
|
+
| **Extraction Prompt** | Natural language instructions for custom data extraction |
|
|
208
|
+
| **Extraction Schema** | JSON Schema definition for structured output |
|
|
209
|
+
| **Render JavaScript** | Enable full Chromium rendering for SPAs and dynamic content |
|
|
210
|
+
| **Screenshot** | Capture a full-page PNG screenshot |
|
|
211
|
+
| **PDF Export** | Generate a PDF of the rendered page |
|
|
212
|
+
| **OCR** | Extract text from images on the page |
|
|
213
|
+
| **Proxy** | Route through residential proxies with country targeting |
|
|
214
|
+
| **Cache** | Cache responses from 60 seconds to 24 hours |
|
|
215
|
+
| **Cost Controls** | Set maximum spend per request, force specific tiers, prefer cost or speed |
|
|
154
216
|
|
|
155
217
|
## Frequently Asked Questions
|
|
156
218
|
|
|
157
|
-
### How does AlterLab
|
|
158
|
-
|
|
219
|
+
### How does AlterLab bypass anti-bot protection like Cloudflare?
|
|
220
|
+
|
|
221
|
+
AlterLab uses a multi-tier system that automatically escalates scraping methods. It starts with a simple HTTP request. If the site blocks it, AlterLab retries with TLS fingerprint rotation, then browser impersonation, then a full headless Chromium browser — all transparently. You send a URL and get content back. The anti-bot bypass is fully automatic.
|
|
222
|
+
|
|
223
|
+
### Can AlterLab scrape JavaScript-heavy websites (React, Angular, Vue)?
|
|
224
|
+
|
|
225
|
+
Yes. Set the mode to `js` or enable "Render JavaScript" in the Advanced Options. AlterLab spins up a full headless Chromium browser, renders the page including all JavaScript, waits for dynamic content to load, then extracts content from the fully rendered DOM.
|
|
226
|
+
|
|
227
|
+
### How is AlterLab different from Apify, Browserless, or ScrapingBee?
|
|
228
|
+
|
|
229
|
+
AlterLab starts at $0.0002 per request — 20x cheaper than most scraping APIs — because it only uses expensive browser rendering when a site actually requires it. Most scraping APIs charge browser-tier prices for every request. AlterLab's smart tier escalation means you only pay for what each site requires. No subscriptions, no monthly minimums.
|
|
159
230
|
|
|
160
|
-
###
|
|
161
|
-
Yes. Set mode to `js` or enable "Render JavaScript" in Advanced Options. AlterLab runs a full Chromium browser to render the page, then extracts content from the rendered DOM.
|
|
231
|
+
### Can I scrape Amazon, Walmart, and other e-commerce sites?
|
|
162
232
|
|
|
163
|
-
|
|
164
|
-
Yes. The Stealth and Browser tiers handle Cloudflare, DataDome, PerimeterX, Akamai, and other anti-bot services. AlterLab's auto mode detects protection and escalates automatically.
|
|
233
|
+
Yes. AlterLab handles all major e-commerce anti-bot protection including Cloudflare, DataDome, PerimeterX, and Akamai. The Product extraction profile returns structured JSON with product name, price, rating, availability, and images — ready for price monitoring or catalog building.
|
|
165
234
|
|
|
166
|
-
###
|
|
167
|
-
AlterLab starts at $0.0002/request (20x cheaper than most alternatives) because it only uses expensive browser rendering when actually needed. Most scraping APIs charge browser prices for every request. AlterLab's smart escalation means you only pay for what each site requires.
|
|
235
|
+
### Does AlterLab work with n8n Cloud and self-hosted n8n?
|
|
168
236
|
|
|
169
|
-
|
|
170
|
-
Yes. The node processes input items in a loop, so you can feed it hundreds of URLs from a spreadsheet, database query, or previous node. Use the Cache and Cost Controls options to manage spend at scale.
|
|
237
|
+
Yes, both. Install via **Settings → Community Nodes** on n8n Cloud, or `npm install n8n-nodes-alterlab` for self-hosted. OAuth2 authentication works on both — click Connect, sign in, done.
|
|
171
238
|
|
|
172
239
|
### Is there rate limiting?
|
|
173
|
-
Free tier has rate limits. Adding any balance removes them. Concurrent request limits scale with your balance.
|
|
174
240
|
|
|
175
|
-
|
|
176
|
-
|
|
241
|
+
Free-tier accounts have rate limits. Adding any balance to your account removes rate limits. Concurrent request limits scale with your balance.
|
|
242
|
+
|
|
243
|
+
### What output format is best for AI and LLM workflows?
|
|
244
|
+
|
|
245
|
+
Use markdown format (the default). It preserves document structure — headings, tables, lists, links — while being token-efficient. GPT-4, Claude, and other LLMs process markdown significantly better than raw HTML. AlterLab's markdown output is optimized for AI agent context windows.
|
|
246
|
+
|
|
247
|
+
### Can I use AlterLab for large-scale scraping (thousands of URLs)?
|
|
248
|
+
|
|
249
|
+
Yes. The n8n node processes input items in a loop, so you can feed it thousands of URLs from a spreadsheet, database query, or upstream node. Enable caching and cost controls to manage spend at scale. Async job polling handles long-running scrapes automatically.
|
|
250
|
+
|
|
251
|
+
## Contributing
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
git clone https://github.com/RapierCraft/n8n-nodes-alterlab.git
|
|
255
|
+
cd n8n-nodes-alterlab
|
|
256
|
+
npm install
|
|
257
|
+
npm run build
|
|
258
|
+
npm run lint
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
## CI/CD
|
|
262
|
+
|
|
263
|
+
This project uses GitHub Actions for automation:
|
|
264
|
+
|
|
265
|
+
- **CI** — Runs on every push and PR to `main`. Builds and type-checks across Node.js 18, 20, and 22. Verifies all dist output files are present.
|
|
266
|
+
- **Publish** — Automatically publishes to npm when a GitHub Release is created. Uses npm provenance for supply-chain security.
|
|
267
|
+
- **Dependabot** — Automated weekly dependency updates for npm packages and GitHub Actions.
|
|
268
|
+
|
|
269
|
+
### Required GitHub Secrets
|
|
270
|
+
|
|
271
|
+
| Secret | Description | Where to Get It |
|
|
272
|
+
|---|---|---|
|
|
273
|
+
| `NPM_TOKEN` | npm automation token for publishing | [npmjs.com → Access Tokens → Generate](https://www.npmjs.com/settings/~/tokens) — use "Automation" type |
|
|
177
274
|
|
|
178
275
|
## Support
|
|
179
276
|
|
|
180
277
|
- [API Documentation](https://docs.alterlab.io/api?utm_source=n8n&utm_medium=integration&utm_campaign=community_node)
|
|
181
|
-
- [Dashboard &
|
|
278
|
+
- [Dashboard & Usage](https://app.alterlab.io/dashboard?utm_source=n8n&utm_medium=integration&utm_campaign=community_node)
|
|
279
|
+
- [GitHub Issues](https://github.com/RapierCraft/n8n-nodes-alterlab/issues)
|
|
182
280
|
- [support@alterlab.io](mailto:support@alterlab.io)
|
|
183
281
|
|
|
184
282
|
## License
|
|
185
283
|
|
|
186
|
-
MIT
|
|
284
|
+
[MIT](LICENSE)
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import type { ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
1
|
+
import type { ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
2
|
export declare class AlterLabOAuth2Api implements ICredentialType {
|
|
3
3
|
name: string;
|
|
4
4
|
displayName: string;
|
|
5
5
|
documentationUrl: string;
|
|
6
6
|
extends: string[];
|
|
7
7
|
properties: INodeProperties[];
|
|
8
|
+
test: ICredentialTestRequest;
|
|
8
9
|
}
|
|
9
10
|
//# sourceMappingURL=AlterLabOAuth2Api.credentials.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AlterLabOAuth2Api.credentials.d.ts","sourceRoot":"","sources":["../../credentials/AlterLabOAuth2Api.credentials.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,eAAe,EACf,eAAe,EACf,MAAM,cAAc,CAAC;AAEtB,qBAAa,iBAAkB,YAAW,eAAe;IACxD,IAAI,SAAuB;IAC3B,WAAW,SAAyB;IACpC,gBAAgB,SACkF;IAElG,OAAO,WAAiB;IAExB,UAAU,EAAE,eAAe,EAAE,CAiD3B;CACF"}
|
|
1
|
+
{"version":3,"file":"AlterLabOAuth2Api.credentials.d.ts","sourceRoot":"","sources":["../../credentials/AlterLabOAuth2Api.credentials.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,MAAM,cAAc,CAAC;AAEtB,qBAAa,iBAAkB,YAAW,eAAe;IACxD,IAAI,SAAuB;IAC3B,WAAW,SAAyB;IACpC,gBAAgB,SACkF;IAElG,OAAO,WAAiB;IAExB,UAAU,EAAE,eAAe,EAAE,CAiD3B;IAEF,IAAI,EAAE,sBAAsB,CAM1B;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AlterLabOAuth2Api.credentials.js","sourceRoot":"","sources":["../../credentials/AlterLabOAuth2Api.credentials.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"AlterLabOAuth2Api.credentials.js","sourceRoot":"","sources":["../../credentials/AlterLabOAuth2Api.credentials.ts"],"names":[],"mappings":";;;AAMA,MAAa,iBAAiB;IAA9B;QACC,SAAI,GAAG,mBAAmB,CAAC;QAC3B,gBAAW,GAAG,qBAAqB,CAAC;QACpC,qBAAgB,GACf,gGAAgG,CAAC;QAElG,YAAO,GAAG,CAAC,WAAW,CAAC,CAAC;QAExB,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,YAAY;gBACzB,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,mBAAmB;aAC5B;YACD;gBACC,WAAW,EAAE,mBAAmB;gBAChC,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,yCAAyC;aAClD;YACD;gBACC,WAAW,EAAE,kBAAkB;gBAC/B,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,4CAA4C;aACrD;YACD;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,oBAAoB;aAC7B;YACD;gBACC,WAAW,EAAE,eAAe;gBAC5B,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,sCAAsC;aAC/C;YACD;gBACC,WAAW,EAAE,OAAO;gBACpB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,QAAQ;aACjB;YACD;gBACC,WAAW,EAAE,2BAA2B;gBACxC,IAAI,EAAE,qBAAqB;gBAC3B,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;aACX;YACD;gBACC,WAAW,EAAE,gBAAgB;gBAC7B,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,MAAM;aACf;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,yBAAyB;gBAClC,GAAG,EAAE,eAAe;gBACpB,MAAM,EAAE,KAAK;aACb;SACD,CAAC;IACH,CAAC;CAAA;AAlED,8CAkEC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from
|
|
1
|
+
import type { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from "n8n-workflow";
|
|
2
2
|
export declare class AlterLab implements INodeType {
|
|
3
3
|
description: INodeTypeDescription;
|
|
4
4
|
execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AlterLab.node.d.ts","sourceRoot":"","sources":["../../../nodes/AlterLab/AlterLab.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"AlterLab.node.d.ts","sourceRoot":"","sources":["../../../nodes/AlterLab/AlterLab.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,oBAAoB,EAErB,MAAM,cAAc,CAAC;AAatB,qBAAa,QAAS,YAAW,SAAS;IACxC,WAAW,EAAE,oBAAoB,CA8a/B;IAEI,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;CAkYxE"}
|