n8n-nodes-iota 1.0.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 +46 -0
- package/README.md +407 -0
- package/dist/credentials/Chronicle.credentials.d.ts +23 -0
- package/dist/credentials/Chronicle.credentials.d.ts.map +1 -0
- package/dist/credentials/Chronicle.credentials.js +84 -0
- package/dist/credentials/Chronicle.credentials.js.map +1 -0
- package/dist/credentials/IotaNetwork.credentials.d.ts +22 -0
- package/dist/credentials/IotaNetwork.credentials.d.ts.map +1 -0
- package/dist/credentials/IotaNetwork.credentials.js +158 -0
- package/dist/credentials/IotaNetwork.credentials.js.map +1 -0
- package/dist/credentials/ShimmerEvm.credentials.d.ts +20 -0
- package/dist/credentials/ShimmerEvm.credentials.d.ts.map +1 -0
- package/dist/credentials/ShimmerEvm.credentials.js +145 -0
- package/dist/credentials/ShimmerEvm.credentials.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/nodes/Iota/Iota.node.d.ts +24 -0
- package/dist/nodes/Iota/Iota.node.d.ts.map +1 -0
- package/dist/nodes/Iota/Iota.node.js +1227 -0
- package/dist/nodes/Iota/Iota.node.js.map +1 -0
- package/dist/nodes/Iota/IotaTrigger.node.d.ts +19 -0
- package/dist/nodes/Iota/IotaTrigger.node.d.ts.map +1 -0
- package/dist/nodes/Iota/IotaTrigger.node.js +340 -0
- package/dist/nodes/Iota/IotaTrigger.node.js.map +1 -0
- package/dist/nodes/Iota/actions/alias/index.d.ts +3 -0
- package/dist/nodes/Iota/actions/alias/index.d.ts.map +1 -0
- package/dist/nodes/Iota/actions/alias/index.js +15 -0
- package/dist/nodes/Iota/actions/alias/index.js.map +1 -0
- package/dist/nodes/Iota/actions/block/index.d.ts +3 -0
- package/dist/nodes/Iota/actions/block/index.d.ts.map +1 -0
- package/dist/nodes/Iota/actions/block/index.js +15 -0
- package/dist/nodes/Iota/actions/block/index.js.map +1 -0
- package/dist/nodes/Iota/actions/identity/index.d.ts +3 -0
- package/dist/nodes/Iota/actions/identity/index.d.ts.map +1 -0
- package/dist/nodes/Iota/actions/identity/index.js +15 -0
- package/dist/nodes/Iota/actions/identity/index.js.map +1 -0
- package/dist/nodes/Iota/actions/indexer/index.d.ts +3 -0
- package/dist/nodes/Iota/actions/indexer/index.d.ts.map +1 -0
- package/dist/nodes/Iota/actions/indexer/index.js +15 -0
- package/dist/nodes/Iota/actions/indexer/index.js.map +1 -0
- package/dist/nodes/Iota/actions/nativeToken/index.d.ts +3 -0
- package/dist/nodes/Iota/actions/nativeToken/index.d.ts.map +1 -0
- package/dist/nodes/Iota/actions/nativeToken/index.js +15 -0
- package/dist/nodes/Iota/actions/nativeToken/index.js.map +1 -0
- package/dist/nodes/Iota/actions/nft/index.d.ts +3 -0
- package/dist/nodes/Iota/actions/nft/index.d.ts.map +1 -0
- package/dist/nodes/Iota/actions/nft/index.js +15 -0
- package/dist/nodes/Iota/actions/nft/index.js.map +1 -0
- package/dist/nodes/Iota/actions/node/index.d.ts +3 -0
- package/dist/nodes/Iota/actions/node/index.d.ts.map +1 -0
- package/dist/nodes/Iota/actions/node/index.js +15 -0
- package/dist/nodes/Iota/actions/node/index.js.map +1 -0
- package/dist/nodes/Iota/actions/output/index.d.ts +3 -0
- package/dist/nodes/Iota/actions/output/index.d.ts.map +1 -0
- package/dist/nodes/Iota/actions/output/index.js +15 -0
- package/dist/nodes/Iota/actions/output/index.js.map +1 -0
- package/dist/nodes/Iota/actions/participation/index.d.ts +3 -0
- package/dist/nodes/Iota/actions/participation/index.d.ts.map +1 -0
- package/dist/nodes/Iota/actions/participation/index.js +15 -0
- package/dist/nodes/Iota/actions/participation/index.js.map +1 -0
- package/dist/nodes/Iota/actions/shimmerEvm/index.d.ts +3 -0
- package/dist/nodes/Iota/actions/shimmerEvm/index.d.ts.map +1 -0
- package/dist/nodes/Iota/actions/shimmerEvm/index.js +246 -0
- package/dist/nodes/Iota/actions/shimmerEvm/index.js.map +1 -0
- package/dist/nodes/Iota/actions/streams/index.d.ts +3 -0
- package/dist/nodes/Iota/actions/streams/index.d.ts.map +1 -0
- package/dist/nodes/Iota/actions/streams/index.js +15 -0
- package/dist/nodes/Iota/actions/streams/index.js.map +1 -0
- package/dist/nodes/Iota/actions/stronghold/index.d.ts +3 -0
- package/dist/nodes/Iota/actions/stronghold/index.d.ts.map +1 -0
- package/dist/nodes/Iota/actions/stronghold/index.js +15 -0
- package/dist/nodes/Iota/actions/stronghold/index.js.map +1 -0
- package/dist/nodes/Iota/actions/transaction/index.d.ts +3 -0
- package/dist/nodes/Iota/actions/transaction/index.d.ts.map +1 -0
- package/dist/nodes/Iota/actions/transaction/index.js +15 -0
- package/dist/nodes/Iota/actions/transaction/index.js.map +1 -0
- package/dist/nodes/Iota/actions/utility/index.d.ts +3 -0
- package/dist/nodes/Iota/actions/utility/index.d.ts.map +1 -0
- package/dist/nodes/Iota/actions/utility/index.js +15 -0
- package/dist/nodes/Iota/actions/utility/index.js.map +1 -0
- package/dist/nodes/Iota/actions/wallet/index.d.ts +3 -0
- package/dist/nodes/Iota/actions/wallet/index.d.ts.map +1 -0
- package/dist/nodes/Iota/actions/wallet/index.js +222 -0
- package/dist/nodes/Iota/actions/wallet/index.js.map +1 -0
- package/dist/nodes/Iota/constants/networks.d.ts +48 -0
- package/dist/nodes/Iota/constants/networks.d.ts.map +1 -0
- package/dist/nodes/Iota/constants/networks.js +120 -0
- package/dist/nodes/Iota/constants/networks.js.map +1 -0
- package/dist/nodes/Iota/constants/protocols.d.ts +127 -0
- package/dist/nodes/Iota/constants/protocols.d.ts.map +1 -0
- package/dist/nodes/Iota/constants/protocols.js +147 -0
- package/dist/nodes/Iota/constants/protocols.js.map +1 -0
- package/dist/nodes/Iota/constants/schemas.d.ts +113 -0
- package/dist/nodes/Iota/constants/schemas.d.ts.map +1 -0
- package/dist/nodes/Iota/constants/schemas.js +104 -0
- package/dist/nodes/Iota/constants/schemas.js.map +1 -0
- package/dist/nodes/Iota/constants/units.d.ts +71 -0
- package/dist/nodes/Iota/constants/units.d.ts.map +1 -0
- package/dist/nodes/Iota/constants/units.js +143 -0
- package/dist/nodes/Iota/constants/units.js.map +1 -0
- package/dist/nodes/Iota/iota.svg +24 -0
- package/dist/nodes/Iota/transport/chronicleClient.d.ts +187 -0
- package/dist/nodes/Iota/transport/chronicleClient.d.ts.map +1 -0
- package/dist/nodes/Iota/transport/chronicleClient.js +314 -0
- package/dist/nodes/Iota/transport/chronicleClient.js.map +1 -0
- package/dist/nodes/Iota/transport/evmClient.d.ts +192 -0
- package/dist/nodes/Iota/transport/evmClient.d.ts.map +1 -0
- package/dist/nodes/Iota/transport/evmClient.js +293 -0
- package/dist/nodes/Iota/transport/evmClient.js.map +1 -0
- package/dist/nodes/Iota/transport/indexerClient.d.ts +179 -0
- package/dist/nodes/Iota/transport/indexerClient.d.ts.map +1 -0
- package/dist/nodes/Iota/transport/indexerClient.js +261 -0
- package/dist/nodes/Iota/transport/indexerClient.js.map +1 -0
- package/dist/nodes/Iota/transport/iotaClient.d.ts +336 -0
- package/dist/nodes/Iota/transport/iotaClient.d.ts.map +1 -0
- package/dist/nodes/Iota/transport/iotaClient.js +363 -0
- package/dist/nodes/Iota/transport/iotaClient.js.map +1 -0
- package/dist/nodes/Iota/transport/mqttClient.d.ts +172 -0
- package/dist/nodes/Iota/transport/mqttClient.d.ts.map +1 -0
- package/dist/nodes/Iota/transport/mqttClient.js +315 -0
- package/dist/nodes/Iota/transport/mqttClient.js.map +1 -0
- package/dist/nodes/Iota/utils/addressUtils.d.ts +84 -0
- package/dist/nodes/Iota/utils/addressUtils.d.ts.map +1 -0
- package/dist/nodes/Iota/utils/addressUtils.js +210 -0
- package/dist/nodes/Iota/utils/addressUtils.js.map +1 -0
- package/dist/nodes/Iota/utils/outputUtils.d.ts +139 -0
- package/dist/nodes/Iota/utils/outputUtils.d.ts.map +1 -0
- package/dist/nodes/Iota/utils/outputUtils.js +184 -0
- package/dist/nodes/Iota/utils/outputUtils.js.map +1 -0
- package/dist/nodes/Iota/utils/storageDeposit.d.ts +89 -0
- package/dist/nodes/Iota/utils/storageDeposit.d.ts.map +1 -0
- package/dist/nodes/Iota/utils/storageDeposit.js +216 -0
- package/dist/nodes/Iota/utils/storageDeposit.js.map +1 -0
- package/dist/nodes/Iota/utils/streamsUtils.d.ts +138 -0
- package/dist/nodes/Iota/utils/streamsUtils.d.ts.map +1 -0
- package/dist/nodes/Iota/utils/streamsUtils.js +192 -0
- package/dist/nodes/Iota/utils/streamsUtils.js.map +1 -0
- package/dist/nodes/Iota/utils/unitConverter.d.ts +80 -0
- package/dist/nodes/Iota/utils/unitConverter.d.ts.map +1 -0
- package/dist/nodes/Iota/utils/unitConverter.js +180 -0
- package/dist/nodes/Iota/utils/unitConverter.js.map +1 -0
- package/package.json +90 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
Business Source License 1.1
|
|
2
|
+
|
|
3
|
+
License text copyright (c) 2017 MariaDB Corporation Ab.
|
|
4
|
+
|
|
5
|
+
Licensor:
|
|
6
|
+
Velocity BPA, LLC
|
|
7
|
+
https://velobpa.com
|
|
8
|
+
|
|
9
|
+
Licensed Work:
|
|
10
|
+
This repository and all source code, documentation, and associated artifacts
|
|
11
|
+
contained herein, including all n8n community nodes published by Velocity BPA.
|
|
12
|
+
|
|
13
|
+
Additional Use Grant:
|
|
14
|
+
You may use, modify, and run the Licensed Work free of charge for:
|
|
15
|
+
- Personal use
|
|
16
|
+
- Educational use
|
|
17
|
+
- Research use
|
|
18
|
+
- Internal business use, provided such use does not involve resale,
|
|
19
|
+
redistribution, or offering the Licensed Work as part of a commercial
|
|
20
|
+
product or service.
|
|
21
|
+
|
|
22
|
+
Commercial Use Restriction:
|
|
23
|
+
Commercial Use of the Licensed Work is prohibited without a valid
|
|
24
|
+
Commercial License issued by the Licensor.
|
|
25
|
+
|
|
26
|
+
Commercial Use includes, but is not limited to:
|
|
27
|
+
- Use of the Licensed Work within any Software-as-a-Service (SaaS),
|
|
28
|
+
Platform-as-a-Service (PaaS), or hosted application that is sold,
|
|
29
|
+
licensed, or monetized in any form
|
|
30
|
+
- Offering the Licensed Work as part of a managed services engagement
|
|
31
|
+
- Bundling or redistributing the Licensed Work with a paid product
|
|
32
|
+
- Reselling, sublicensing, or white-labeling the Licensed Work
|
|
33
|
+
- Embedding the Licensed Work into any commercial automation platform,
|
|
34
|
+
integration product, or solution offering
|
|
35
|
+
|
|
36
|
+
Change Date:
|
|
37
|
+
January 1, 2030
|
|
38
|
+
|
|
39
|
+
Change License:
|
|
40
|
+
Apache License, Version 2.0
|
|
41
|
+
|
|
42
|
+
For commercial licensing inquiries:
|
|
43
|
+
licensing@velobpa.com
|
|
44
|
+
|
|
45
|
+
Business Source License 1.1 full text:
|
|
46
|
+
https://mariadb.com/bsl11/
|
package/README.md
ADDED
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
# n8n-nodes-iota
|
|
2
|
+
|
|
3
|
+
> [!IMPORTANT]
|
|
4
|
+
> **[Velocity BPA Licensing Notice]**
|
|
5
|
+
>
|
|
6
|
+
> This n8n node is licensed under the Business Source License 1.1 (BSL 1.1).
|
|
7
|
+
>
|
|
8
|
+
> Use of this node by for-profit organizations in production environments requires a commercial license from Velocity BPA.
|
|
9
|
+
>
|
|
10
|
+
> For licensing information, visit https://velobpa.com/licensing or contact licensing@velobpa.com.
|
|
11
|
+
|
|
12
|
+
A comprehensive n8n community node package for the IOTA/Shimmer blockchain ecosystem. This package provides feeless blockchain automation with support for native tokens, NFTs, DIDs, encrypted data streams, and ShimmerEVM smart contracts.
|
|
13
|
+
|
|
14
|
+

|
|
15
|
+

|
|
16
|
+

|
|
17
|
+

|
|
18
|
+
|
|
19
|
+
## Features
|
|
20
|
+
|
|
21
|
+
- **Feeless Transactions**: Send IOTA/SMR with zero fees
|
|
22
|
+
- **Native Tokens**: Create and manage L1 tokens via Foundries (IRC-30)
|
|
23
|
+
- **NFTs**: Mint, transfer, and manage L1 NFTs (IRC-27)
|
|
24
|
+
- **Decentralized Identity**: W3C DID standard with verifiable credentials
|
|
25
|
+
- **Encrypted Streams**: Machine-to-machine encrypted data channels
|
|
26
|
+
- **Alias Outputs**: Smart contract chain anchors and organizational accounts
|
|
27
|
+
- **ShimmerEVM**: EVM-compatible smart contract interactions
|
|
28
|
+
- **Real-time Events**: MQTT-based triggers for blockchain events
|
|
29
|
+
- **Multi-network**: IOTA Mainnet, Shimmer, Testnets, and Private Tangles
|
|
30
|
+
|
|
31
|
+
## Supported Networks
|
|
32
|
+
|
|
33
|
+
| Network | HRP | Coin Type | Status |
|
|
34
|
+
|---------|-----|-----------|--------|
|
|
35
|
+
| IOTA Mainnet | `iota` | 4218 | ✅ Production |
|
|
36
|
+
| Shimmer Mainnet | `smr` | 4219 | ✅ Production |
|
|
37
|
+
| IOTA Testnet | `atoi` | 4218 | ✅ Testing |
|
|
38
|
+
| Shimmer Testnet | `rms` | 4219 | ✅ Testing |
|
|
39
|
+
| Private Tangle | Custom | Custom | ✅ Development |
|
|
40
|
+
|
|
41
|
+
## Installation
|
|
42
|
+
|
|
43
|
+
### Via npm (Recommended)
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npm install n8n-nodes-iota
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Manual Installation
|
|
50
|
+
|
|
51
|
+
1. Navigate to your n8n custom nodes directory:
|
|
52
|
+
```bash
|
|
53
|
+
cd ~/.n8n/custom
|
|
54
|
+
# Or for Docker: /home/node/.n8n/custom
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
2. Install the package:
|
|
58
|
+
```bash
|
|
59
|
+
npm install n8n-nodes-iota
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
3. Restart n8n:
|
|
63
|
+
```bash
|
|
64
|
+
n8n start
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### From Source
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Clone the repository
|
|
71
|
+
git clone https://github.com/Velocity-BPA/n8n-nodes-iota.git
|
|
72
|
+
cd n8n-nodes-iota
|
|
73
|
+
|
|
74
|
+
# Install dependencies
|
|
75
|
+
npm install
|
|
76
|
+
|
|
77
|
+
# Build the package
|
|
78
|
+
npm run build
|
|
79
|
+
|
|
80
|
+
# Link for local development
|
|
81
|
+
npm link
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Credentials
|
|
85
|
+
|
|
86
|
+
### IOTA Network
|
|
87
|
+
Configure your IOTA/Shimmer network connection:
|
|
88
|
+
- **Network**: Select from predefined networks or custom
|
|
89
|
+
- **Node URL**: IOTA node REST API endpoint
|
|
90
|
+
- **Mnemonic**: 24-word BIP39 seed phrase (stored securely)
|
|
91
|
+
- **Stronghold Password**: Optional encryption for key management
|
|
92
|
+
- **MQTT URL**: For real-time event subscriptions
|
|
93
|
+
|
|
94
|
+
### ShimmerEVM
|
|
95
|
+
For smart contract interactions:
|
|
96
|
+
- **RPC URL**: ShimmerEVM JSON-RPC endpoint
|
|
97
|
+
- **Private Key**: Ethereum-style private key
|
|
98
|
+
- **Chain ID**: 148 (mainnet) or 1073 (testnet)
|
|
99
|
+
|
|
100
|
+
### Chronicle
|
|
101
|
+
For historical data queries:
|
|
102
|
+
- **API Endpoint**: Chronicle permanode URL
|
|
103
|
+
- **API Key**: Optional authentication
|
|
104
|
+
|
|
105
|
+
## Resources & Operations
|
|
106
|
+
|
|
107
|
+
### Wallet
|
|
108
|
+
| Operation | Description |
|
|
109
|
+
|-----------|-------------|
|
|
110
|
+
| Get Balance | Get total wallet balance |
|
|
111
|
+
| Generate Address | Create new receiving address |
|
|
112
|
+
| Get Transaction History | List past transactions |
|
|
113
|
+
| Sync Wallet | Synchronize with Tangle |
|
|
114
|
+
| Validate Address | Check Bech32 address validity |
|
|
115
|
+
|
|
116
|
+
### Transaction
|
|
117
|
+
| Operation | Description |
|
|
118
|
+
|-----------|-------------|
|
|
119
|
+
| Send | Basic IOTA/SMR transfer |
|
|
120
|
+
| Send Multiple | Multi-recipient transaction |
|
|
121
|
+
| Get Transaction | Retrieve transaction details |
|
|
122
|
+
| Get Status | Check confirmation status |
|
|
123
|
+
|
|
124
|
+
### Native Token (Foundry)
|
|
125
|
+
| Operation | Description |
|
|
126
|
+
|-----------|-------------|
|
|
127
|
+
| Create Foundry | Initialize token issuance |
|
|
128
|
+
| Mint Tokens | Create new tokens |
|
|
129
|
+
| Melt Tokens | Burn/destroy tokens |
|
|
130
|
+
| Send Tokens | Transfer native tokens |
|
|
131
|
+
| Get Token Info | IRC-30 metadata |
|
|
132
|
+
|
|
133
|
+
### NFT
|
|
134
|
+
| Operation | Description |
|
|
135
|
+
|-----------|-------------|
|
|
136
|
+
| Mint NFT | Create new NFT (IRC-27) |
|
|
137
|
+
| Transfer NFT | Send NFT to address |
|
|
138
|
+
| Burn NFT | Destroy NFT permanently |
|
|
139
|
+
| Get NFT | Retrieve NFT details |
|
|
140
|
+
| Get Collection | List NFTs by issuer |
|
|
141
|
+
|
|
142
|
+
### Identity (DID)
|
|
143
|
+
| Operation | Description |
|
|
144
|
+
|-----------|-------------|
|
|
145
|
+
| Create DID | New decentralized identity |
|
|
146
|
+
| Resolve DID | Fetch DID Document |
|
|
147
|
+
| Create Credential | Issue verifiable credential |
|
|
148
|
+
| Verify Credential | Validate VC signature |
|
|
149
|
+
| Revoke Credential | Mark credential as revoked |
|
|
150
|
+
|
|
151
|
+
### Streams
|
|
152
|
+
| Operation | Description |
|
|
153
|
+
|-----------|-------------|
|
|
154
|
+
| Create Channel | Initialize encrypted channel |
|
|
155
|
+
| Publish Message | Send encrypted message |
|
|
156
|
+
| Subscribe | Request channel access |
|
|
157
|
+
| Read Messages | Decrypt and read messages |
|
|
158
|
+
|
|
159
|
+
### ShimmerEVM
|
|
160
|
+
| Operation | Description |
|
|
161
|
+
|-----------|-------------|
|
|
162
|
+
| Get Balance | EVM account balance |
|
|
163
|
+
| Send Transaction | Transfer SMR on EVM |
|
|
164
|
+
| Call Contract | Read contract state |
|
|
165
|
+
| Execute Contract | Write to contract |
|
|
166
|
+
| Deploy Contract | Deploy new contract |
|
|
167
|
+
|
|
168
|
+
## Trigger Events
|
|
169
|
+
|
|
170
|
+
The IOTA Trigger node monitors real-time blockchain events:
|
|
171
|
+
|
|
172
|
+
- **Funds Received**: New outputs at an address
|
|
173
|
+
- **Transaction Confirmed**: Transaction reaches finality
|
|
174
|
+
- **NFT Received**: NFT transferred to address
|
|
175
|
+
- **Alias State Changed**: Alias output updated
|
|
176
|
+
- **New Milestone**: Network milestone issued
|
|
177
|
+
- **Block Confirmed**: Block reaches finality
|
|
178
|
+
|
|
179
|
+
## Usage Examples
|
|
180
|
+
|
|
181
|
+
### Send IOTA Tokens
|
|
182
|
+
```json
|
|
183
|
+
{
|
|
184
|
+
"resource": "transaction",
|
|
185
|
+
"operation": "send",
|
|
186
|
+
"recipientAddress": "iota1qp...",
|
|
187
|
+
"amount": "1000000",
|
|
188
|
+
"tag": "payment"
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Mint an NFT
|
|
193
|
+
```json
|
|
194
|
+
{
|
|
195
|
+
"resource": "nft",
|
|
196
|
+
"operation": "mintNft",
|
|
197
|
+
"name": "My NFT",
|
|
198
|
+
"description": "A unique digital asset",
|
|
199
|
+
"uri": "ipfs://Qm...",
|
|
200
|
+
"mediaType": "image/png"
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Create a DID
|
|
205
|
+
```json
|
|
206
|
+
{
|
|
207
|
+
"resource": "identity",
|
|
208
|
+
"operation": "createDidDocument",
|
|
209
|
+
"controller": "self"
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Monitor Address for Payments
|
|
214
|
+
Use the IOTA Trigger node:
|
|
215
|
+
1. Event: "Funds Received"
|
|
216
|
+
2. Address: Your Bech32 address
|
|
217
|
+
3. Options: Set minimum amount filter
|
|
218
|
+
|
|
219
|
+
## IOTA Concepts
|
|
220
|
+
|
|
221
|
+
### The Tangle
|
|
222
|
+
IOTA uses a Directed Acyclic Graph (DAG) called the Tangle instead of a traditional blockchain. This enables:
|
|
223
|
+
- **Feeless transactions**: No gas fees
|
|
224
|
+
- **Parallel processing**: High throughput
|
|
225
|
+
- **Decentralization**: No miners needed
|
|
226
|
+
|
|
227
|
+
### Stardust Protocol
|
|
228
|
+
Current IOTA protocol version featuring:
|
|
229
|
+
- **UTXO Model**: Unspent Transaction Outputs
|
|
230
|
+
- **Native Tokens**: L1 token issuance via Foundries
|
|
231
|
+
- **NFTs**: L1 native non-fungible tokens
|
|
232
|
+
- **Alias Outputs**: Organizational accounts
|
|
233
|
+
- **Storage Deposit**: Rent to prevent ledger bloat
|
|
234
|
+
|
|
235
|
+
### Storage Deposit
|
|
236
|
+
Outputs require a minimum deposit (rent) based on data size:
|
|
237
|
+
- Prevents ledger bloat
|
|
238
|
+
- Returned when output is consumed
|
|
239
|
+
- Calculated per virtual byte
|
|
240
|
+
|
|
241
|
+
### Unlock Conditions
|
|
242
|
+
Outputs can have conditions that control spending:
|
|
243
|
+
- **Timelock**: Locked until timestamp
|
|
244
|
+
- **Expiration**: Reverts after timestamp
|
|
245
|
+
- **Storage Deposit Return**: Requires deposit return
|
|
246
|
+
- **State Controller**: Alias state changes
|
|
247
|
+
- **Governor**: Alias governance changes
|
|
248
|
+
|
|
249
|
+
## Local Testing
|
|
250
|
+
|
|
251
|
+
### Using Docker
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
# Pull n8n Docker image
|
|
255
|
+
docker pull n8nio/n8n
|
|
256
|
+
|
|
257
|
+
# Run with custom nodes mounted
|
|
258
|
+
docker run -it --rm \
|
|
259
|
+
--name n8n \
|
|
260
|
+
-p 5678:5678 \
|
|
261
|
+
-v ~/.n8n:/home/node/.n8n \
|
|
262
|
+
-v $(pwd):/home/node/.n8n/custom/n8n-nodes-iota \
|
|
263
|
+
n8nio/n8n
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Using npx
|
|
267
|
+
|
|
268
|
+
```bash
|
|
269
|
+
# Start n8n with custom extensions path
|
|
270
|
+
N8N_CUSTOM_EXTENSIONS="./dist" npx n8n start
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
## Build from Source
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
# Install dependencies
|
|
277
|
+
npm install
|
|
278
|
+
|
|
279
|
+
# Build TypeScript
|
|
280
|
+
npm run build
|
|
281
|
+
|
|
282
|
+
# Run linter
|
|
283
|
+
npm run lint
|
|
284
|
+
|
|
285
|
+
# Format code
|
|
286
|
+
npm run format
|
|
287
|
+
|
|
288
|
+
# Create distributable package
|
|
289
|
+
npm pack
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
## Project Structure
|
|
293
|
+
|
|
294
|
+
```
|
|
295
|
+
n8n-nodes-iota/
|
|
296
|
+
├── credentials/
|
|
297
|
+
│ ├── IotaNetwork.credentials.ts
|
|
298
|
+
│ ├── ShimmerEvm.credentials.ts
|
|
299
|
+
│ └── Chronicle.credentials.ts
|
|
300
|
+
├── nodes/
|
|
301
|
+
│ └── Iota/
|
|
302
|
+
│ ├── Iota.node.ts
|
|
303
|
+
│ ├── IotaTrigger.node.ts
|
|
304
|
+
│ ├── iota.svg
|
|
305
|
+
│ ├── actions/
|
|
306
|
+
│ │ ├── wallet/
|
|
307
|
+
│ │ ├── transaction/
|
|
308
|
+
│ │ ├── output/
|
|
309
|
+
│ │ ├── nativeToken/
|
|
310
|
+
│ │ ├── nft/
|
|
311
|
+
│ │ ├── alias/
|
|
312
|
+
│ │ ├── streams/
|
|
313
|
+
│ │ ├── identity/
|
|
314
|
+
│ │ ├── stronghold/
|
|
315
|
+
│ │ ├── indexer/
|
|
316
|
+
│ │ ├── participation/
|
|
317
|
+
│ │ ├── shimmerEvm/
|
|
318
|
+
│ │ ├── node/
|
|
319
|
+
│ │ ├── block/
|
|
320
|
+
│ │ └── utility/
|
|
321
|
+
│ ├── transport/
|
|
322
|
+
│ │ ├── iotaClient.ts
|
|
323
|
+
│ │ ├── mqttClient.ts
|
|
324
|
+
│ │ ├── indexerClient.ts
|
|
325
|
+
│ │ ├── evmClient.ts
|
|
326
|
+
│ │ └── chronicleClient.ts
|
|
327
|
+
│ ├── constants/
|
|
328
|
+
│ │ ├── networks.ts
|
|
329
|
+
│ │ ├── protocols.ts
|
|
330
|
+
│ │ ├── schemas.ts
|
|
331
|
+
│ │ └── units.ts
|
|
332
|
+
│ └── utils/
|
|
333
|
+
│ ├── addressUtils.ts
|
|
334
|
+
│ ├── outputUtils.ts
|
|
335
|
+
│ ├── storageDeposit.ts
|
|
336
|
+
│ ├── streamsUtils.ts
|
|
337
|
+
│ └── unitConverter.ts
|
|
338
|
+
├── package.json
|
|
339
|
+
├── tsconfig.json
|
|
340
|
+
├── gulpfile.js
|
|
341
|
+
├── index.ts
|
|
342
|
+
├── README.md
|
|
343
|
+
└── LICENSE
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
## Dependencies
|
|
347
|
+
|
|
348
|
+
| Package | Version | Purpose |
|
|
349
|
+
|---------|---------|---------|
|
|
350
|
+
| @iota/sdk | ^1.1.4 | IOTA SDK for Tangle interactions |
|
|
351
|
+
| ethers | ^6.9.0 | ShimmerEVM smart contracts |
|
|
352
|
+
| mqtt | ^5.3.0 | Real-time event subscriptions |
|
|
353
|
+
| axios | ^1.6.2 | REST API client |
|
|
354
|
+
|
|
355
|
+
## Security
|
|
356
|
+
|
|
357
|
+
- **Never share your mnemonic** - 24-word seed phrase must be kept secret
|
|
358
|
+
- **Use Stronghold** - Secure encrypted storage for keys
|
|
359
|
+
- **Validate addresses** - Always verify Bech32 format and network HRP
|
|
360
|
+
- **Test on testnet first** - Use IOTA/Shimmer testnets before mainnet
|
|
361
|
+
|
|
362
|
+
## Contributing
|
|
363
|
+
|
|
364
|
+
1. Fork the repository
|
|
365
|
+
2. Create a feature branch: `git checkout -b feature/amazing-feature`
|
|
366
|
+
3. Commit changes: `git commit -m 'Add amazing feature'`
|
|
367
|
+
4. Push to branch: `git push origin feature/amazing-feature`
|
|
368
|
+
5. Open a Pull Request
|
|
369
|
+
|
|
370
|
+
## Resources
|
|
371
|
+
|
|
372
|
+
- [IOTA Documentation](https://wiki.iota.org/)
|
|
373
|
+
- [Shimmer Documentation](https://wiki.shimmer.network/)
|
|
374
|
+
- [n8n Documentation](https://docs.n8n.io/)
|
|
375
|
+
- [IOTA SDK GitHub](https://github.com/iotaledger/iota-sdk)
|
|
376
|
+
- [IRC-27 NFT Standard](https://github.com/iotaledger/tips/blob/main/tips/TIP-0027/tip-0027.md)
|
|
377
|
+
- [IRC-30 Token Standard](https://github.com/iotaledger/tips/blob/main/tips/TIP-0030/tip-0030.md)
|
|
378
|
+
|
|
379
|
+
## Author
|
|
380
|
+
|
|
381
|
+
**Velocity BPA, LLC**
|
|
382
|
+
- Website: [velobpa.com](https://velobpa.com)
|
|
383
|
+
- Licensing: [licensing@velobpa.com](mailto:licensing@velobpa.com)
|
|
384
|
+
|
|
385
|
+
## Licensing
|
|
386
|
+
|
|
387
|
+
This n8n community node is licensed under the **Business Source License 1.1**.
|
|
388
|
+
|
|
389
|
+
### Free Use
|
|
390
|
+
Permitted for personal, educational, research, and internal business use.
|
|
391
|
+
|
|
392
|
+
### Commercial Use
|
|
393
|
+
Use of this node within any SaaS, PaaS, hosted platform, managed service,
|
|
394
|
+
or paid automation offering requires a commercial license.
|
|
395
|
+
|
|
396
|
+
For licensing inquiries: **licensing@velobpa.com**
|
|
397
|
+
|
|
398
|
+
See also:
|
|
399
|
+
- [LICENSE](LICENSE)
|
|
400
|
+
- [COMMERCIAL_LICENSE.md](COMMERCIAL_LICENSE.md)
|
|
401
|
+
- [LICENSING_FAQ.md](LICENSING_FAQ.md)
|
|
402
|
+
|
|
403
|
+
## Acknowledgments
|
|
404
|
+
|
|
405
|
+
- [IOTA Foundation](https://www.iota.org/) for the revolutionary DLT
|
|
406
|
+
- [n8n](https://n8n.io/) for the amazing workflow automation platform
|
|
407
|
+
- The IOTA community for continuous innovation
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ICredentialType, INodeProperties, ICredentialTestRequest } from 'n8n-workflow';
|
|
2
|
+
/**
|
|
3
|
+
* Chronicle Credentials
|
|
4
|
+
*
|
|
5
|
+
* Chronicle is IOTA's permanode solution that stores
|
|
6
|
+
* the complete history of the Tangle. Unlike regular nodes
|
|
7
|
+
* that may prune old data, Chronicle maintains all historical
|
|
8
|
+
* transactions and outputs for querying.
|
|
9
|
+
*
|
|
10
|
+
* Use cases:
|
|
11
|
+
* - Historical transaction queries
|
|
12
|
+
* - Output history tracking
|
|
13
|
+
* - Analytics and reporting
|
|
14
|
+
* - Audit trails
|
|
15
|
+
*/
|
|
16
|
+
export declare class Chronicle implements ICredentialType {
|
|
17
|
+
name: string;
|
|
18
|
+
displayName: string;
|
|
19
|
+
documentationUrl: string;
|
|
20
|
+
properties: INodeProperties[];
|
|
21
|
+
test: ICredentialTestRequest;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=Chronicle.credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Chronicle.credentials.d.ts","sourceRoot":"","sources":["../../credentials/Chronicle.credentials.ts"],"names":[],"mappings":"AAOA,OAAO,EACN,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,MAAM,cAAc,CAAC;AAEtB;;;;;;;;;;;;;GAaG;AACH,qBAAa,SAAU,YAAW,eAAe;IAChD,IAAI,SAAe;IACnB,WAAW,SAA2B;IACtC,gBAAgB,SAAsC;IACtD,UAAU,EAAE,eAAe,EAAE,CAyC3B;IAEF,IAAI,EAAE,sBAAsB,CAS1B;CACF"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) Velocity BPA, LLC
|
|
4
|
+
* Licensed under the Business Source License 1.1
|
|
5
|
+
* Commercial use requires a separate commercial license.
|
|
6
|
+
* See LICENSE file for details.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.Chronicle = void 0;
|
|
10
|
+
/**
|
|
11
|
+
* Chronicle Credentials
|
|
12
|
+
*
|
|
13
|
+
* Chronicle is IOTA's permanode solution that stores
|
|
14
|
+
* the complete history of the Tangle. Unlike regular nodes
|
|
15
|
+
* that may prune old data, Chronicle maintains all historical
|
|
16
|
+
* transactions and outputs for querying.
|
|
17
|
+
*
|
|
18
|
+
* Use cases:
|
|
19
|
+
* - Historical transaction queries
|
|
20
|
+
* - Output history tracking
|
|
21
|
+
* - Analytics and reporting
|
|
22
|
+
* - Audit trails
|
|
23
|
+
*/
|
|
24
|
+
class Chronicle {
|
|
25
|
+
constructor() {
|
|
26
|
+
this.name = 'chronicle';
|
|
27
|
+
this.displayName = 'Chronicle (Permanode)';
|
|
28
|
+
this.documentationUrl = 'https://wiki.iota.org/chronicle/';
|
|
29
|
+
this.properties = [
|
|
30
|
+
{
|
|
31
|
+
displayName: 'Chronicle Endpoint',
|
|
32
|
+
name: 'chronicleUrl',
|
|
33
|
+
type: 'string',
|
|
34
|
+
default: 'https://chronicle.testnet.shimmer.network',
|
|
35
|
+
placeholder: 'https://chronicle.testnet.shimmer.network',
|
|
36
|
+
required: true,
|
|
37
|
+
description: 'URL of the Chronicle permanode API',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
displayName: 'API Key',
|
|
41
|
+
name: 'apiKey',
|
|
42
|
+
type: 'string',
|
|
43
|
+
typeOptions: {
|
|
44
|
+
password: true,
|
|
45
|
+
},
|
|
46
|
+
default: '',
|
|
47
|
+
description: 'API key for Chronicle access (if required by the provider)',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
displayName: 'Request Timeout (ms)',
|
|
51
|
+
name: 'timeout',
|
|
52
|
+
type: 'number',
|
|
53
|
+
default: 30000,
|
|
54
|
+
description: 'Request timeout in milliseconds (historical queries can be slow)',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
displayName: 'Max Results Per Query',
|
|
58
|
+
name: 'maxResults',
|
|
59
|
+
type: 'number',
|
|
60
|
+
default: 1000,
|
|
61
|
+
description: 'Maximum number of results to return per query',
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
displayName: 'Include Metadata',
|
|
65
|
+
name: 'includeMetadata',
|
|
66
|
+
type: 'boolean',
|
|
67
|
+
default: true,
|
|
68
|
+
description: 'Include additional metadata in query results',
|
|
69
|
+
},
|
|
70
|
+
];
|
|
71
|
+
this.test = {
|
|
72
|
+
request: {
|
|
73
|
+
baseURL: '={{$credentials.chronicleUrl}}',
|
|
74
|
+
url: '/api/core/v2/info',
|
|
75
|
+
method: 'GET',
|
|
76
|
+
headers: {
|
|
77
|
+
'Authorization': '={{$credentials.apiKey ? "Bearer " + $credentials.apiKey : ""}}',
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.Chronicle = Chronicle;
|
|
84
|
+
//# sourceMappingURL=Chronicle.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Chronicle.credentials.js","sourceRoot":"","sources":["../../credentials/Chronicle.credentials.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAQH;;;;;;;;;;;;;GAaG;AACH,MAAa,SAAS;IAAtB;QACC,SAAI,GAAG,WAAW,CAAC;QACnB,gBAAW,GAAG,uBAAuB,CAAC;QACtC,qBAAgB,GAAG,kCAAkC,CAAC;QACtD,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,oBAAoB;gBACjC,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,2CAA2C;gBACpD,WAAW,EAAE,2CAA2C;gBACxD,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,oCAAoC;aACjD;YACD;gBACC,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,4DAA4D;aACzE;YACD;gBACC,WAAW,EAAE,sBAAsB;gBACnC,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,kEAAkE;aAC/E;YACD;gBACC,WAAW,EAAE,uBAAuB;gBACpC,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,+CAA+C;aAC5D;YACD;gBACC,WAAW,EAAE,kBAAkB;gBAC/B,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,8CAA8C;aAC3D;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,gCAAgC;gBACzC,GAAG,EAAE,mBAAmB;gBACxB,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACR,eAAe,EAAE,iEAAiE;iBAClF;aACD;SACD,CAAC;IACH,CAAC;CAAA;AAzDD,8BAyDC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ICredentialType, INodeProperties, ICredentialTestRequest } from 'n8n-workflow';
|
|
2
|
+
/**
|
|
3
|
+
* IOTA Network Credentials
|
|
4
|
+
*
|
|
5
|
+
* Supports multiple IOTA/Shimmer networks:
|
|
6
|
+
* - IOTA Mainnet: Production network for IOTA token
|
|
7
|
+
* - Shimmer Mainnet: Canary network with EVM support
|
|
8
|
+
* - IOTA Testnet: Testing network for IOTA
|
|
9
|
+
* - Shimmer Testnet: Public testnet with faucet
|
|
10
|
+
* - Private Tangle: Custom network deployments
|
|
11
|
+
*
|
|
12
|
+
* The Tangle is a DAG (Directed Acyclic Graph) structure,
|
|
13
|
+
* not a traditional blockchain. Transactions are feeless.
|
|
14
|
+
*/
|
|
15
|
+
export declare class IotaNetwork implements ICredentialType {
|
|
16
|
+
name: string;
|
|
17
|
+
displayName: string;
|
|
18
|
+
documentationUrl: string;
|
|
19
|
+
properties: INodeProperties[];
|
|
20
|
+
test: ICredentialTestRequest;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=IotaNetwork.credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IotaNetwork.credentials.d.ts","sourceRoot":"","sources":["../../credentials/IotaNetwork.credentials.ts"],"names":[],"mappings":"AAOA,OAAO,EACN,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,MAAM,cAAc,CAAC;AAEtB;;;;;;;;;;;;GAYG;AACH,qBAAa,WAAY,YAAW,eAAe;IAClD,IAAI,SAAiB;IACrB,WAAW,SAAkB;IAC7B,gBAAgB,SAA4B;IAC5C,UAAU,EAAE,eAAe,EAAE,CAsH3B;IAGF,IAAI,EAAE,sBAAsB,CAM1B;CACF"}
|