n8n-nodes-dynamicfeed 0.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 +127 -0
- package/dist/nodes/DynamicFeed/dynamicfeed.svg +7 -0
- package/index.js +3 -0
- package/package.json +65 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Dynamic Feed (dynamicfeed.ai)
|
|
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,127 @@
|
|
|
1
|
+
# n8n-nodes-dynamicfeed
|
|
2
|
+
|
|
3
|
+
An [n8n](https://n8n.io) community node for **[Dynamic Feed](https://dynamicfeed.ai)** — the live, verifiable data layer for AI: 56 tools across 18 verticals, every datapoint carrying a freshness + provenance envelope (source, licence, timestamp, age), and tamper-evident Ed25519-signed proof endpoints.
|
|
4
|
+
|
|
5
|
+
Use it to pull live ground truth into any n8n workflow: weather, earthquakes, hazard scans around a point, CVE lookups, anti-hallucination reality checks, parametric trigger attestations, and signed compliance receipts.
|
|
6
|
+
|
|
7
|
+
- Website: https://dynamicfeed.ai
|
|
8
|
+
- Feed catalog: https://dynamicfeed.ai/feeds
|
|
9
|
+
- Proof / verification: https://dynamicfeed.ai/proof
|
|
10
|
+
|
|
11
|
+
## Installation
|
|
12
|
+
|
|
13
|
+
### In the n8n GUI (recommended)
|
|
14
|
+
|
|
15
|
+
1. Open **Settings → Community Nodes**.
|
|
16
|
+
2. Click **Install**.
|
|
17
|
+
3. Enter `n8n-nodes-dynamicfeed` and confirm.
|
|
18
|
+
4. The **Dynamic Feed** node appears in the node picker.
|
|
19
|
+
|
|
20
|
+
(Community nodes require a self-hosted n8n instance, or n8n Cloud plans that allow verified community nodes.)
|
|
21
|
+
|
|
22
|
+
### Manually (self-hosted)
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# in your n8n installation directory (e.g. ~/.n8n/nodes)
|
|
26
|
+
npm install n8n-nodes-dynamicfeed
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Restart n8n afterwards. For Docker, install into the `/home/node/.n8n/nodes` volume.
|
|
30
|
+
|
|
31
|
+
## Credentials (optional)
|
|
32
|
+
|
|
33
|
+
The node has an **optional** `Dynamic Feed API` credential — a single API key sent as the `X-API-Key` header.
|
|
34
|
+
|
|
35
|
+
- **Keyless operations** (no credential needed): *Nearby Hazards*, *Parametric Attest*, *Signed Receipt*. These are the signed `/v1/*` proof endpoints.
|
|
36
|
+
- **Key-gated operations** (credential required): *Current Weather*, *Weather Forecast*, *Earthquakes*, *Reality Check*, *CVE / Vulnerability Check*.
|
|
37
|
+
|
|
38
|
+
Get a free API key at https://dynamicfeed.ai (free tier, paid plans for higher quotas).
|
|
39
|
+
|
|
40
|
+
## Operations
|
|
41
|
+
|
|
42
|
+
| Operation | Endpoint | Key needed | What it returns |
|
|
43
|
+
|---|---|---|---|
|
|
44
|
+
| Current Weather | `GET /weather?city=` | Yes | Live temperature, feels-like, wind, humidity, precipitation, conditions (Open-Meteo) |
|
|
45
|
+
| Weather Forecast | `GET /forecast?city=&days=` | Yes | Multi-day forecast, up to 16 days |
|
|
46
|
+
| Earthquakes | `GET /earthquakes?min_magnitude=&limit=` | Yes | Recent quakes worldwide (USGS) — magnitude, depth, PAGER alert, tsunami flag |
|
|
47
|
+
| Nearby Hazards | `GET /v1/nearby?lat=&lon=&radius_km=` | **No** | **Ed25519-signed** scan of live hazards near a point — USGS quakes, NASA EONET events, GDACS disasters (+ live bushfire hotspots in Australia), nearest first |
|
|
48
|
+
| Reality Check | `GET /reality-check?claim=` | Yes | Fact-check a statement against live data — verdict + current value + source (the anti-hallucination check) |
|
|
49
|
+
| CVE / Vulnerability Check | `GET /advisories?q=&limit=` | Yes | Recent security advisories matching a package name or CVE/GHSA id — severity, CVSS, patched version |
|
|
50
|
+
| Parametric Attest | `GET /v1/attest?metric=&op=&threshold=&lat=&lon=` | **No** | **Ed25519-signed** MET / NOT-MET attestation of "metric op threshold" against the live measurement — the dispute-proof record a parametric payout can settle against |
|
|
51
|
+
| Signed Receipt | `POST /v1/receipt` (`{"data": <any JSON>}`) | **No** | **Ed25519-signed**, timestamped receipt of arbitrary JSON — provable evidence of what an AI was told (or asserted), and when |
|
|
52
|
+
|
|
53
|
+
## Verifying signatures
|
|
54
|
+
|
|
55
|
+
Dynamic Feed responses carry verifiable provenance: every datapoint ships a freshness + provenance envelope, and the proof endpoints used by *Nearby Hazards*, *Parametric Attest* and *Signed Receipt* return a detached **Ed25519 `signature`** field. Verify any signed envelope against the published public keys at:
|
|
56
|
+
|
|
57
|
+
**https://dynamicfeed.ai/.well-known/keys**
|
|
58
|
+
|
|
59
|
+
To verify: remove the `signature` field, canonicalize the remaining JSON (sorted keys, compact separators), and check the Ed25519 signature against the key id in the envelope. An in-browser verifier and reference scripts live at https://dynamicfeed.ai/proof. Signed envelopes can additionally be anchored to Bitcoin via `POST /v1/anchor` for independent proof of *when*.
|
|
60
|
+
|
|
61
|
+
## Example workflow
|
|
62
|
+
|
|
63
|
+
A minimal workflow that runs a signed hazard scan around Tokyo (keyless — no credential needed). Paste into n8n via **Workflow → Import from File/Clipboard**:
|
|
64
|
+
|
|
65
|
+
```json
|
|
66
|
+
{
|
|
67
|
+
"name": "Dynamic Feed — signed hazard scan",
|
|
68
|
+
"nodes": [
|
|
69
|
+
{
|
|
70
|
+
"parameters": {},
|
|
71
|
+
"id": "9a1d6c2e-0001-4a7b-8f10-000000000001",
|
|
72
|
+
"name": "When clicking 'Execute workflow'",
|
|
73
|
+
"type": "n8n-nodes-base.manualTrigger",
|
|
74
|
+
"typeVersion": 1,
|
|
75
|
+
"position": [0, 0]
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"parameters": {
|
|
79
|
+
"operation": "nearbyHazards",
|
|
80
|
+
"lat": 35.6762,
|
|
81
|
+
"lon": 139.6503,
|
|
82
|
+
"radiusKm": 300
|
|
83
|
+
},
|
|
84
|
+
"id": "9a1d6c2e-0002-4a7b-8f10-000000000002",
|
|
85
|
+
"name": "Dynamic Feed",
|
|
86
|
+
"type": "n8n-nodes-dynamicfeed.dynamicFeed",
|
|
87
|
+
"typeVersion": 1,
|
|
88
|
+
"position": [220, 0]
|
|
89
|
+
}
|
|
90
|
+
],
|
|
91
|
+
"connections": {
|
|
92
|
+
"When clicking 'Execute workflow'": {
|
|
93
|
+
"main": [
|
|
94
|
+
[
|
|
95
|
+
{
|
|
96
|
+
"node": "Dynamic Feed",
|
|
97
|
+
"type": "main",
|
|
98
|
+
"index": 0
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
]
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"settings": {}
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
The output is a signed `nearby/v1` envelope — `hazards[]` sorted nearest-first, plus the `signature` you can verify against https://dynamicfeed.ai/.well-known/keys.
|
|
109
|
+
|
|
110
|
+
The node is also flagged `usableAsTool`, so on recent n8n versions you can hand it to an AI Agent node as a tool.
|
|
111
|
+
|
|
112
|
+
## Compatibility
|
|
113
|
+
|
|
114
|
+
- Requires n8n 1.x (declarative/routing-style node, `n8nNodesApiVersion` 1)
|
|
115
|
+
- Node.js >= 20.15
|
|
116
|
+
|
|
117
|
+
## Development
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
npm install
|
|
121
|
+
npm run build # tsc + copy icons to dist/
|
|
122
|
+
npm run lint
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## License
|
|
126
|
+
|
|
127
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 60">
|
|
2
|
+
<rect width="60" height="60" rx="12" fill="#0b1220"/>
|
|
3
|
+
<path d="M30 5.5 L51.2 17.75 V42.25 L30 54.5 L8.8 42.25 V17.75 Z"
|
|
4
|
+
fill="none" stroke="#46e6da" stroke-width="2.6" stroke-linejoin="round" opacity="0.9"/>
|
|
5
|
+
<path d="M33.5 14.5 L20.5 33 H28.2 L26.5 45.5 L39.5 27 H31.8 Z"
|
|
6
|
+
fill="#46e6da"/>
|
|
7
|
+
</svg>
|
package/index.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "n8n-nodes-dynamicfeed",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "n8n community node for Dynamic Feed (dynamicfeed.ai) — live, verifiable data for AI workflows: weather, earthquakes, signed hazard scans, CVE checks, reality checks, parametric attestations and Ed25519-signed receipts.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"n8n-community-node-package",
|
|
7
|
+
"dynamicfeed",
|
|
8
|
+
"live-data",
|
|
9
|
+
"weather",
|
|
10
|
+
"earthquakes",
|
|
11
|
+
"hazards",
|
|
12
|
+
"cve",
|
|
13
|
+
"ed25519",
|
|
14
|
+
"signed-data",
|
|
15
|
+
"parametric",
|
|
16
|
+
"oracle"
|
|
17
|
+
],
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"homepage": "https://dynamicfeed.ai",
|
|
20
|
+
"author": {
|
|
21
|
+
"name": "Dynamic Feed",
|
|
22
|
+
"email": "hello@dynamicfeed.ai"
|
|
23
|
+
},
|
|
24
|
+
"repository": {
|
|
25
|
+
"type": "git",
|
|
26
|
+
"url": "https://github.com/dynamicfeed/n8n-nodes-dynamicfeed.git"
|
|
27
|
+
},
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=20.15"
|
|
30
|
+
},
|
|
31
|
+
"main": "index.js",
|
|
32
|
+
"scripts": {
|
|
33
|
+
"build": "rimraf dist && tsc && gulp build:icons",
|
|
34
|
+
"dev": "tsc --watch",
|
|
35
|
+
"format": "prettier nodes credentials --write",
|
|
36
|
+
"lint": "eslint nodes credentials package.json",
|
|
37
|
+
"lintfix": "eslint nodes credentials package.json --fix",
|
|
38
|
+
"prepublishOnly": "npm run build && eslint -c .eslintrc.prepublish.js nodes credentials package.json"
|
|
39
|
+
},
|
|
40
|
+
"files": [
|
|
41
|
+
"dist"
|
|
42
|
+
],
|
|
43
|
+
"n8n": {
|
|
44
|
+
"n8nNodesApiVersion": 1,
|
|
45
|
+
"credentials": [
|
|
46
|
+
"dist/credentials/DynamicFeedApi.credentials.js"
|
|
47
|
+
],
|
|
48
|
+
"nodes": [
|
|
49
|
+
"dist/nodes/DynamicFeed/DynamicFeed.node.js"
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@typescript-eslint/parser": "~8.32.0",
|
|
54
|
+
"eslint": "^8.57.0",
|
|
55
|
+
"eslint-plugin-n8n-nodes-base": "^1.16.3",
|
|
56
|
+
"gulp": "^5.0.0",
|
|
57
|
+
"n8n-workflow": "*",
|
|
58
|
+
"prettier": "^3.5.3",
|
|
59
|
+
"rimraf": "^5.0.10",
|
|
60
|
+
"typescript": "^5.8.2"
|
|
61
|
+
},
|
|
62
|
+
"peerDependencies": {
|
|
63
|
+
"n8n-workflow": "*"
|
|
64
|
+
}
|
|
65
|
+
}
|