n8n-nodes-linea 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.
Files changed (170) hide show
  1. package/COMMERCIAL_LICENSE.md +31 -0
  2. package/LICENSE +46 -0
  3. package/LICENSING_FAQ.md +18 -0
  4. package/README.md +267 -0
  5. package/dist/credentials/LineaApi.credentials.d.ts +16 -0
  6. package/dist/credentials/LineaApi.credentials.d.ts.map +1 -0
  7. package/dist/credentials/LineaApi.credentials.js +116 -0
  8. package/dist/credentials/LineaApi.credentials.js.map +1 -0
  9. package/dist/credentials/LineaNetwork.credentials.d.ts +16 -0
  10. package/dist/credentials/LineaNetwork.credentials.d.ts.map +1 -0
  11. package/dist/credentials/LineaNetwork.credentials.js +146 -0
  12. package/dist/credentials/LineaNetwork.credentials.js.map +1 -0
  13. package/dist/index.d.ts +13 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +35 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/nodes/Linea/Linea.node.d.ts +18 -0
  18. package/dist/nodes/Linea/Linea.node.d.ts.map +1 -0
  19. package/dist/nodes/Linea/Linea.node.js +1376 -0
  20. package/dist/nodes/Linea/Linea.node.js.map +1 -0
  21. package/dist/nodes/Linea/LineaTrigger.node.d.ts +18 -0
  22. package/dist/nodes/Linea/LineaTrigger.node.d.ts.map +1 -0
  23. package/dist/nodes/Linea/LineaTrigger.node.js +448 -0
  24. package/dist/nodes/Linea/LineaTrigger.node.js.map +1 -0
  25. package/dist/nodes/Linea/actions/account/index.d.ts +9 -0
  26. package/dist/nodes/Linea/actions/account/index.d.ts.map +1 -0
  27. package/dist/nodes/Linea/actions/account/index.js +160 -0
  28. package/dist/nodes/Linea/actions/account/index.js.map +1 -0
  29. package/dist/nodes/Linea/actions/accountAbstraction/index.d.ts +9 -0
  30. package/dist/nodes/Linea/actions/accountAbstraction/index.d.ts.map +1 -0
  31. package/dist/nodes/Linea/actions/accountAbstraction/index.js +165 -0
  32. package/dist/nodes/Linea/actions/accountAbstraction/index.js.map +1 -0
  33. package/dist/nodes/Linea/actions/analytics/index.d.ts +10 -0
  34. package/dist/nodes/Linea/actions/analytics/index.d.ts.map +1 -0
  35. package/dist/nodes/Linea/actions/analytics/index.js +202 -0
  36. package/dist/nodes/Linea/actions/analytics/index.js.map +1 -0
  37. package/dist/nodes/Linea/actions/attestation/index.d.ts +9 -0
  38. package/dist/nodes/Linea/actions/attestation/index.d.ts.map +1 -0
  39. package/dist/nodes/Linea/actions/attestation/index.js +185 -0
  40. package/dist/nodes/Linea/actions/attestation/index.js.map +1 -0
  41. package/dist/nodes/Linea/actions/block/index.d.ts +9 -0
  42. package/dist/nodes/Linea/actions/block/index.d.ts.map +1 -0
  43. package/dist/nodes/Linea/actions/block/index.js +246 -0
  44. package/dist/nodes/Linea/actions/block/index.js.map +1 -0
  45. package/dist/nodes/Linea/actions/bridge/index.d.ts +9 -0
  46. package/dist/nodes/Linea/actions/bridge/index.d.ts.map +1 -0
  47. package/dist/nodes/Linea/actions/bridge/index.js +220 -0
  48. package/dist/nodes/Linea/actions/bridge/index.js.map +1 -0
  49. package/dist/nodes/Linea/actions/contract/index.d.ts +10 -0
  50. package/dist/nodes/Linea/actions/contract/index.d.ts.map +1 -0
  51. package/dist/nodes/Linea/actions/contract/index.js +305 -0
  52. package/dist/nodes/Linea/actions/contract/index.js.map +1 -0
  53. package/dist/nodes/Linea/actions/coordinator/index.d.ts +10 -0
  54. package/dist/nodes/Linea/actions/coordinator/index.d.ts.map +1 -0
  55. package/dist/nodes/Linea/actions/coordinator/index.js +180 -0
  56. package/dist/nodes/Linea/actions/coordinator/index.js.map +1 -0
  57. package/dist/nodes/Linea/actions/defi/index.d.ts +10 -0
  58. package/dist/nodes/Linea/actions/defi/index.d.ts.map +1 -0
  59. package/dist/nodes/Linea/actions/defi/index.js +342 -0
  60. package/dist/nodes/Linea/actions/defi/index.js.map +1 -0
  61. package/dist/nodes/Linea/actions/event/index.d.ts +9 -0
  62. package/dist/nodes/Linea/actions/event/index.d.ts.map +1 -0
  63. package/dist/nodes/Linea/actions/event/index.js +244 -0
  64. package/dist/nodes/Linea/actions/event/index.js.map +1 -0
  65. package/dist/nodes/Linea/actions/gas/index.d.ts +9 -0
  66. package/dist/nodes/Linea/actions/gas/index.d.ts.map +1 -0
  67. package/dist/nodes/Linea/actions/gas/index.js +192 -0
  68. package/dist/nodes/Linea/actions/gas/index.js.map +1 -0
  69. package/dist/nodes/Linea/actions/lxp/index.d.ts +9 -0
  70. package/dist/nodes/Linea/actions/lxp/index.d.ts.map +1 -0
  71. package/dist/nodes/Linea/actions/lxp/index.js +118 -0
  72. package/dist/nodes/Linea/actions/lxp/index.js.map +1 -0
  73. package/dist/nodes/Linea/actions/messageService/index.d.ts +9 -0
  74. package/dist/nodes/Linea/actions/messageService/index.d.ts.map +1 -0
  75. package/dist/nodes/Linea/actions/messageService/index.js +139 -0
  76. package/dist/nodes/Linea/actions/messageService/index.js.map +1 -0
  77. package/dist/nodes/Linea/actions/multicall/index.d.ts +10 -0
  78. package/dist/nodes/Linea/actions/multicall/index.d.ts.map +1 -0
  79. package/dist/nodes/Linea/actions/multicall/index.js +206 -0
  80. package/dist/nodes/Linea/actions/multicall/index.js.map +1 -0
  81. package/dist/nodes/Linea/actions/nft/index.d.ts +9 -0
  82. package/dist/nodes/Linea/actions/nft/index.d.ts.map +1 -0
  83. package/dist/nodes/Linea/actions/nft/index.js +311 -0
  84. package/dist/nodes/Linea/actions/nft/index.js.map +1 -0
  85. package/dist/nodes/Linea/actions/subgraph/index.d.ts +12 -0
  86. package/dist/nodes/Linea/actions/subgraph/index.d.ts.map +1 -0
  87. package/dist/nodes/Linea/actions/subgraph/index.js +265 -0
  88. package/dist/nodes/Linea/actions/subgraph/index.js.map +1 -0
  89. package/dist/nodes/Linea/actions/token/index.d.ts +9 -0
  90. package/dist/nodes/Linea/actions/token/index.d.ts.map +1 -0
  91. package/dist/nodes/Linea/actions/token/index.js +308 -0
  92. package/dist/nodes/Linea/actions/token/index.js.map +1 -0
  93. package/dist/nodes/Linea/actions/transaction/index.d.ts +9 -0
  94. package/dist/nodes/Linea/actions/transaction/index.d.ts.map +1 -0
  95. package/dist/nodes/Linea/actions/transaction/index.js +273 -0
  96. package/dist/nodes/Linea/actions/transaction/index.js.map +1 -0
  97. package/dist/nodes/Linea/actions/utility/index.d.ts +12 -0
  98. package/dist/nodes/Linea/actions/utility/index.d.ts.map +1 -0
  99. package/dist/nodes/Linea/actions/utility/index.js +329 -0
  100. package/dist/nodes/Linea/actions/utility/index.js.map +1 -0
  101. package/dist/nodes/Linea/actions/voyage/index.d.ts +10 -0
  102. package/dist/nodes/Linea/actions/voyage/index.d.ts.map +1 -0
  103. package/dist/nodes/Linea/actions/voyage/index.js +276 -0
  104. package/dist/nodes/Linea/actions/voyage/index.js.map +1 -0
  105. package/dist/nodes/Linea/constants/bridges.d.ts +156 -0
  106. package/dist/nodes/Linea/constants/bridges.d.ts.map +1 -0
  107. package/dist/nodes/Linea/constants/bridges.js +169 -0
  108. package/dist/nodes/Linea/constants/bridges.js.map +1 -0
  109. package/dist/nodes/Linea/constants/contracts.d.ts +176 -0
  110. package/dist/nodes/Linea/constants/contracts.d.ts.map +1 -0
  111. package/dist/nodes/Linea/constants/contracts.js +236 -0
  112. package/dist/nodes/Linea/constants/contracts.js.map +1 -0
  113. package/dist/nodes/Linea/constants/index.d.ts +6 -0
  114. package/dist/nodes/Linea/constants/index.d.ts.map +1 -0
  115. package/dist/nodes/Linea/constants/index.js +28 -0
  116. package/dist/nodes/Linea/constants/index.js.map +1 -0
  117. package/dist/nodes/Linea/constants/networks.d.ts +72 -0
  118. package/dist/nodes/Linea/constants/networks.d.ts.map +1 -0
  119. package/dist/nodes/Linea/constants/networks.js +114 -0
  120. package/dist/nodes/Linea/constants/networks.js.map +1 -0
  121. package/dist/nodes/Linea/constants/tokens.d.ts +39 -0
  122. package/dist/nodes/Linea/constants/tokens.d.ts.map +1 -0
  123. package/dist/nodes/Linea/constants/tokens.js +162 -0
  124. package/dist/nodes/Linea/constants/tokens.js.map +1 -0
  125. package/dist/nodes/Linea/constants/voyage.d.ts +184 -0
  126. package/dist/nodes/Linea/constants/voyage.d.ts.map +1 -0
  127. package/dist/nodes/Linea/constants/voyage.js +204 -0
  128. package/dist/nodes/Linea/constants/voyage.js.map +1 -0
  129. package/dist/nodes/Linea/linea.svg +23 -0
  130. package/dist/nodes/Linea/transport/bridgeClient.d.ts +141 -0
  131. package/dist/nodes/Linea/transport/bridgeClient.d.ts.map +1 -0
  132. package/dist/nodes/Linea/transport/bridgeClient.js +333 -0
  133. package/dist/nodes/Linea/transport/bridgeClient.js.map +1 -0
  134. package/dist/nodes/Linea/transport/lineaClient.d.ts +161 -0
  135. package/dist/nodes/Linea/transport/lineaClient.d.ts.map +1 -0
  136. package/dist/nodes/Linea/transport/lineaClient.js +303 -0
  137. package/dist/nodes/Linea/transport/lineaClient.js.map +1 -0
  138. package/dist/nodes/Linea/transport/messageClient.d.ts +99 -0
  139. package/dist/nodes/Linea/transport/messageClient.d.ts.map +1 -0
  140. package/dist/nodes/Linea/transport/messageClient.js +262 -0
  141. package/dist/nodes/Linea/transport/messageClient.js.map +1 -0
  142. package/dist/nodes/Linea/transport/veraxClient.d.ts +99 -0
  143. package/dist/nodes/Linea/transport/veraxClient.d.ts.map +1 -0
  144. package/dist/nodes/Linea/transport/veraxClient.js +230 -0
  145. package/dist/nodes/Linea/transport/veraxClient.js.map +1 -0
  146. package/dist/nodes/Linea/utils/addressUtils.d.ts +67 -0
  147. package/dist/nodes/Linea/utils/addressUtils.d.ts.map +1 -0
  148. package/dist/nodes/Linea/utils/addressUtils.js +158 -0
  149. package/dist/nodes/Linea/utils/addressUtils.js.map +1 -0
  150. package/dist/nodes/Linea/utils/bridgeUtils.d.ts +96 -0
  151. package/dist/nodes/Linea/utils/bridgeUtils.d.ts.map +1 -0
  152. package/dist/nodes/Linea/utils/bridgeUtils.js +184 -0
  153. package/dist/nodes/Linea/utils/bridgeUtils.js.map +1 -0
  154. package/dist/nodes/Linea/utils/encodingUtils.d.ts +118 -0
  155. package/dist/nodes/Linea/utils/encodingUtils.d.ts.map +1 -0
  156. package/dist/nodes/Linea/utils/encodingUtils.js +257 -0
  157. package/dist/nodes/Linea/utils/encodingUtils.js.map +1 -0
  158. package/dist/nodes/Linea/utils/gasUtils.d.ts +119 -0
  159. package/dist/nodes/Linea/utils/gasUtils.d.ts.map +1 -0
  160. package/dist/nodes/Linea/utils/gasUtils.js +192 -0
  161. package/dist/nodes/Linea/utils/gasUtils.js.map +1 -0
  162. package/dist/nodes/Linea/utils/index.d.ts +6 -0
  163. package/dist/nodes/Linea/utils/index.d.ts.map +1 -0
  164. package/dist/nodes/Linea/utils/index.js +28 -0
  165. package/dist/nodes/Linea/utils/index.js.map +1 -0
  166. package/dist/nodes/Linea/utils/messageUtils.d.ts +97 -0
  167. package/dist/nodes/Linea/utils/messageUtils.d.ts.map +1 -0
  168. package/dist/nodes/Linea/utils/messageUtils.js +193 -0
  169. package/dist/nodes/Linea/utils/messageUtils.js.map +1 -0
  170. package/package.json +98 -0
@@ -0,0 +1,31 @@
1
+ # Commercial License
2
+
3
+ Velocity BPA, LLC offers commercial licenses for its n8n community nodes.
4
+
5
+ ## When a Commercial License Is Required
6
+
7
+ A commercial license is required if you:
8
+ - Use this node within a SaaS, PaaS, or hosted platform that is sold or monetized
9
+ - Offer this node as part of a managed services or consulting engagement
10
+ - Bundle or redistribute this node with a paid product
11
+ - Resell, sublicense, or white-label this node
12
+ - Embed this node into a commercial automation or integration platform
13
+
14
+ ## What the Commercial License Provides
15
+
16
+ - Legal authorization for commercial deployment
17
+ - Organization-wide usage rights
18
+ - Rights to deploy across multiple environments
19
+ - Optional priority support and maintenance
20
+ - Optional custom development or feature extensions
21
+
22
+ ## Licensing Model
23
+
24
+ Licenses are issued on a per-organization basis.
25
+
26
+ Enterprise, OEM, and platform licensing terms are available upon request.
27
+
28
+ ## Contact
29
+
30
+ Email: licensing@velobpa.com
31
+ Website: https://velobpa.com
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/
@@ -0,0 +1,18 @@
1
+ ## Licensing FAQ
2
+
3
+ ### Is internal SaaS infrastructure considered internal use?
4
+ No. If the infrastructure supports a revenue-generating service,
5
+ it is considered commercial use.
6
+
7
+ ### What if customers never see the node?
8
+ Visibility is irrelevant. Revenue enablement constitutes commercial use.
9
+
10
+ ### What if we are a startup?
11
+ Startups are commercial entities and require a commercial license.
12
+
13
+ ### What if we only use one workflow?
14
+ Scope does not change license requirements.
15
+
16
+ ### Do proof-of-concepts require a license?
17
+ Internal, non-customer-facing POCs are permitted.
18
+ Production SaaS deployments require a license.
package/README.md ADDED
@@ -0,0 +1,267 @@
1
+ # n8n-nodes-linea
2
+
3
+ Community n8n node for interacting with the Linea blockchain network.
4
+
5
+ ## License
6
+
7
+ **SPDX-License-Identifier: BSL-1.1**
8
+
9
+ Copyright (c) 2025 Velocity Business Partners Alliance
10
+
11
+ This software is licensed under the Business Source License 1.1 (BSL 1.1).
12
+
13
+ - **Change Date**: December 30, 2029
14
+ - **Change License**: Apache License, Version 2.0
15
+
16
+ After the Change Date, this software will be available under the Apache 2.0 license.
17
+
18
+ For commercial licensing options before the Change Date, please contact the Licensor.
19
+
20
+ See [LICENSE](./LICENSE), [COMMERCIAL_LICENSE.md](./COMMERCIAL_LICENSE.md), and [LICENSING_FAQ.md](./LICENSING_FAQ.md) for details.
21
+
22
+ ## Features
23
+
24
+ ### Supported Operations (150+)
25
+
26
+ | Resource | Operations |
27
+ |----------|------------|
28
+ | **Account** | getBalance, getTransactionCount, getCode, getHistory, isContract, getTokenBalances, getENS, getStorageAt, getNonce |
29
+ | **Transaction** | getTransaction, getReceipt, wait, send, sendETH, estimateGas, getGasPrice, getMaxPriorityFee, getL1Fee, getPending, decode, cancel, speedUp, getByBlock, getRaw |
30
+ | **Token** | getBalance, getTokenInfo, getAllowance, transfer, approve, transferFrom, getTransferEvents, getKnownTokens, lookupToken, getTotalSupply |
31
+ | **NFT** | getOwner, getBalance, getTokenURI, getApproved, isApprovedForAll, transfer, approve, setApprovalForAll |
32
+ | **Contract** | call, execute, getCode, getStorageAt, getABI, getSourceCode, verify, deploy, estimateGas, encodeFunction, decodeFunction, getCreationInfo |
33
+ | **Block** | getBlock, getLatestBlock, getBlockNumber, getBlockRange, getBlockTransactionCount, getBlockByTimestamp, getBlockReward, getBlockCountdown, getBlocksPerDay |
34
+ | **Event** | getLogs, getEventsBySignature, decodeEvent, watchEvents, getTransferEvents, encodeEventTopic |
35
+ | **Bridge** | depositETH, withdrawETH, depositToken, withdrawToken, getStatus, getDepositStatus, getWithdrawalStatus, claimWithdrawal, getMessageProof, estimateFee, getTransactions, getEstimatedTime, getTokenMapping, getBridgeContracts |
36
+ | **Message Service** | sendMessage, createL1Message, claimMessage, getStatus, getPendingMessages, getMinimumFee, computeMessageHash, canClaimMessage |
37
+ | **Coordinator** | getStatus, getFinalizationStatus, getProofStatus, getConflationInfo, getSequencerStatus, getL1DataCost, getNetworkMetrics |
38
+ | **Gas** | estimateGas, getGasPrice, getGasPriceTiers, estimateL1DataFee, estimateTotalFee, getBaseFee, getL1GasPrice, getDefaultGasLimits, calculateTransactionCost, getGasHistory |
39
+ | **DeFi** | getQuote, swap, getDexList, getLendingProtocols, getPoolInfo, getTokenPrice, getTVL, getProtocolTVL, getYieldOpportunities |
40
+ | **Voyage** | getXP, getTasks, getTaskStatus, getLeaderboard, getStats, getTaskCategories, getXPTiers |
41
+ | **LXP** | getBalance, getTokenInfo, getTotalSupply, getTierForBalance, checkEligibility |
42
+ | **Account Abstraction** | getNonce, getDeposit, getDepositInfo, deposit, withdraw, computeAccountAddress, createAccount, getUserOpHash, getEntryPointAddress |
43
+ | **Multicall** | aggregate, tryAggregate, blockAndAggregate, getEthBalance |
44
+ | **Attestation** | createAttestation, getAttestation, getAttestationBySchema, revokeAttestation, createSchema, getSchema, verifyAttestation |
45
+ | **Analytics** | getNetworkStats, getTransactionVolume, getActiveAddresses, getGasAnalytics, getTopContracts, getTopTokens, getDeFiStats, getBridgeStats, getHistoricalData, compareNetworks |
46
+ | **Subgraph** | query, getSchema, getEntities, subscribe |
47
+ | **Utility** | checksumAddress, isValidAddress, toWei, fromWei, encodeABI, decodeABI, keccak256, signMessage, verifySignature, generateWallet |
48
+
49
+ ### Trigger Node
50
+
51
+ The **Linea Trigger** node supports real-time event monitoring:
52
+
53
+ - New Block
54
+ - Pending Transaction
55
+ - Contract Event (custom events)
56
+ - ERC20 Transfer
57
+ - ERC721 Transfer
58
+ - Address Activity
59
+
60
+ ## Installation
61
+
62
+ ### From npm (recommended)
63
+
64
+ ```bash
65
+ npm install n8n-nodes-linea
66
+ ```
67
+
68
+ ### Local Development
69
+
70
+ ```bash
71
+ # Clone the repository
72
+ git clone https://github.com/your-org/n8n-nodes-linea.git
73
+ cd n8n-nodes-linea
74
+
75
+ # Install dependencies
76
+ npm install
77
+
78
+ # Build the project
79
+ npm run build
80
+
81
+ # Link for local n8n development
82
+ npm link
83
+ cd ~/.n8n
84
+ npm link n8n-nodes-linea
85
+ ```
86
+
87
+ ## Configuration
88
+
89
+ ### Linea Network Credentials
90
+
91
+ Configure your Linea network connection:
92
+
93
+ | Field | Description |
94
+ |-------|-------------|
95
+ | Network | Select mainnet or Sepolia testnet |
96
+ | Custom RPC URL | Optional custom RPC endpoint |
97
+ | Private Key | For signing transactions (optional) |
98
+
99
+ ### Linea API Credentials
100
+
101
+ For enhanced features (Lineascan, analytics):
102
+
103
+ | Field | Description |
104
+ |-------|-------------|
105
+ | API Key | Your Lineascan API key |
106
+ | API URL | Base URL for the API |
107
+
108
+ ## Usage Examples
109
+
110
+ ### Get Account Balance
111
+
112
+ ```javascript
113
+ // Node configuration
114
+ {
115
+ "resource": "account",
116
+ "operation": "getBalance",
117
+ "address": "0x742d35Cc6634C0532925a3b844Bc9e7595f..."
118
+ }
119
+ ```
120
+
121
+ ### Send ETH
122
+
123
+ ```javascript
124
+ // Node configuration
125
+ {
126
+ "resource": "transaction",
127
+ "operation": "sendETH",
128
+ "to": "0x742d35Cc6634C0532925a3b844Bc9e7595f...",
129
+ "amount": "0.1" // ETH
130
+ }
131
+ ```
132
+
133
+ ### Bridge ETH to L1
134
+
135
+ ```javascript
136
+ // Node configuration
137
+ {
138
+ "resource": "bridge",
139
+ "operation": "withdrawETH",
140
+ "amount": "1.0" // ETH
141
+ }
142
+ ```
143
+
144
+ ### Monitor ERC20 Transfers (Trigger)
145
+
146
+ ```javascript
147
+ // Trigger configuration
148
+ {
149
+ "event": "erc20Transfer",
150
+ "contractAddress": "0xA219439258ca9da29E9Cc4cE5596924745e12B93", // USDC on Linea
151
+ "toAddress": "0xYourAddress..." // Filter to your address
152
+ }
153
+ ```
154
+
155
+ ### Query Subgraph
156
+
157
+ ```javascript
158
+ // Node configuration
159
+ {
160
+ "resource": "subgraph",
161
+ "operation": "query",
162
+ "subgraphUrl": "https://api.studio.thegraph.com/query/...",
163
+ "query": "{ pairs(first: 10) { id token0 { symbol } token1 { symbol } } }"
164
+ }
165
+ ```
166
+
167
+ ## Linea-Specific Features
168
+
169
+ ### L1 Data Fees
170
+
171
+ Linea, as a zkEVM L2, charges L1 data fees in addition to L2 execution fees. This node automatically calculates total fees:
172
+
173
+ ```javascript
174
+ // Node configuration
175
+ {
176
+ "resource": "gas",
177
+ "operation": "estimateTotalFee",
178
+ "to": "0x...",
179
+ "data": "0x..."
180
+ }
181
+ ```
182
+
183
+ ### ZK Proof Finalization
184
+
185
+ L2→L1 withdrawals require ZK proof finalization (8-16 hours):
186
+
187
+ ```javascript
188
+ // Check withdrawal status
189
+ {
190
+ "resource": "bridge",
191
+ "operation": "getWithdrawalStatus",
192
+ "transactionHash": "0x..."
193
+ }
194
+ ```
195
+
196
+ ### Linea Voyage & LXP
197
+
198
+ Track Linea Voyage XP and tasks:
199
+
200
+ ```javascript
201
+ // Get Voyage XP
202
+ {
203
+ "resource": "voyage",
204
+ "operation": "getXP",
205
+ "address": "0x..."
206
+ }
207
+
208
+ // Get LXP balance
209
+ {
210
+ "resource": "lxp",
211
+ "operation": "getBalance",
212
+ "address": "0x..."
213
+ }
214
+ ```
215
+
216
+ ## Supported Networks
217
+
218
+ | Network | Chain ID | RPC URL |
219
+ |---------|----------|---------|
220
+ | Linea Mainnet | 59144 | https://rpc.linea.build |
221
+ | Linea Sepolia | 59141 | https://rpc.sepolia.linea.build |
222
+
223
+ ## API Integrations
224
+
225
+ - **Lineascan API**: Block explorer data, contract verification
226
+ - **DeFi Llama API**: Token prices, TVL, yield data
227
+ - **The Graph**: Subgraph queries
228
+ - **Verax**: Attestation registry
229
+
230
+ ## Development
231
+
232
+ ### Build
233
+
234
+ ```bash
235
+ npm run build
236
+ ```
237
+
238
+ ### Test
239
+
240
+ ```bash
241
+ npm test
242
+ ```
243
+
244
+ ### Lint
245
+
246
+ ```bash
247
+ npm run lint
248
+ ```
249
+
250
+ ## Support
251
+
252
+ For issues and feature requests, please open an issue on GitHub.
253
+
254
+ ## Contributing
255
+
256
+ Contributions are welcome! Please read our contributing guidelines before submitting PRs.
257
+
258
+ ## Changelog
259
+
260
+ ### v1.0.0
261
+
262
+ - Initial release with 150+ operations
263
+ - Trigger node for event monitoring
264
+ - Full bridge support
265
+ - DeFi integrations
266
+ - Voyage/LXP tracking
267
+ - Account abstraction (ERC-4337)
@@ -0,0 +1,16 @@
1
+ import type { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ /**
3
+ * Linea API Credentials
4
+ *
5
+ * Provides API credentials for Linea ecosystem services including
6
+ * Lineascan block explorer, Bridge API, and Subgraph endpoints.
7
+ */
8
+ export declare class LineaApi implements ICredentialType {
9
+ name: string;
10
+ displayName: string;
11
+ documentationUrl: string;
12
+ properties: INodeProperties[];
13
+ authenticate: IAuthenticateGeneric;
14
+ test: ICredentialTestRequest;
15
+ }
16
+ //# sourceMappingURL=LineaApi.credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LineaApi.credentials.d.ts","sourceRoot":"","sources":["../../credentials/LineaApi.credentials.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,EACf,eAAe,EAChB,MAAM,cAAc,CAAC;AAEtB;;;;;GAKG;AACH,qBAAa,QAAS,YAAW,eAAe;IAC9C,IAAI,SAAc;IAClB,WAAW,SAAe;IAC1B,gBAAgB,SAA+B;IAC/C,UAAU,EAAE,eAAe,EAAE,CA8E3B;IAEF,YAAY,EAAE,oBAAoB,CAOhC;IAEF,IAAI,EAAE,sBAAsB,CAW1B;CACH"}
@@ -0,0 +1,116 @@
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.LineaApi = void 0;
10
+ /**
11
+ * Linea API Credentials
12
+ *
13
+ * Provides API credentials for Linea ecosystem services including
14
+ * Lineascan block explorer, Bridge API, and Subgraph endpoints.
15
+ */
16
+ class LineaApi {
17
+ constructor() {
18
+ this.name = 'lineaApi';
19
+ this.displayName = 'Linea API';
20
+ this.documentationUrl = 'https://docs.linea.build/';
21
+ this.properties = [
22
+ {
23
+ displayName: 'Network',
24
+ name: 'network',
25
+ type: 'options',
26
+ default: 'mainnet',
27
+ options: [
28
+ {
29
+ name: 'Linea Mainnet',
30
+ value: 'mainnet',
31
+ description: 'Linea production network APIs',
32
+ },
33
+ {
34
+ name: 'Linea Sepolia Testnet',
35
+ value: 'sepolia',
36
+ description: 'Linea test network APIs',
37
+ },
38
+ ],
39
+ description: 'Select the network for API access',
40
+ },
41
+ {
42
+ displayName: 'Lineascan API Endpoint',
43
+ name: 'lineascanEndpoint',
44
+ type: 'string',
45
+ default: '',
46
+ placeholder: 'https://api.lineascan.build/api',
47
+ description: 'Lineascan API endpoint. Leave empty for default based on network.',
48
+ },
49
+ {
50
+ displayName: 'Lineascan API Key',
51
+ name: 'lineascanApiKey',
52
+ type: 'string',
53
+ typeOptions: {
54
+ password: true,
55
+ },
56
+ default: '',
57
+ required: true,
58
+ placeholder: 'Your Lineascan API key',
59
+ description: 'API key for Lineascan block explorer. Get one at https://lineascan.build/myapikey',
60
+ },
61
+ {
62
+ displayName: 'Bridge API Endpoint',
63
+ name: 'bridgeApiEndpoint',
64
+ type: 'string',
65
+ default: '',
66
+ placeholder: 'https://bridge.linea.build/api',
67
+ description: 'Linea Bridge API endpoint for bridge status and transactions',
68
+ },
69
+ {
70
+ displayName: 'Subgraph URL',
71
+ name: 'subgraphUrl',
72
+ type: 'string',
73
+ default: '',
74
+ placeholder: 'https://api.studio.thegraph.com/query/...',
75
+ description: 'The Graph subgraph URL for indexed Linea data queries',
76
+ },
77
+ {
78
+ displayName: 'Voyage API Endpoint',
79
+ name: 'voyageApiEndpoint',
80
+ type: 'string',
81
+ default: '',
82
+ placeholder: 'https://voyage.linea.build/api',
83
+ description: 'Linea Voyage API endpoint for XP and task tracking',
84
+ },
85
+ {
86
+ displayName: 'Verax API Endpoint',
87
+ name: 'veraxApiEndpoint',
88
+ type: 'string',
89
+ default: '',
90
+ placeholder: 'https://api.verax.dev',
91
+ description: 'Verax attestation registry API endpoint',
92
+ },
93
+ ];
94
+ this.authenticate = {
95
+ type: 'generic',
96
+ properties: {
97
+ qs: {
98
+ apikey: '={{$credentials.lineascanApiKey}}',
99
+ },
100
+ },
101
+ };
102
+ this.test = {
103
+ request: {
104
+ baseURL: '={{$credentials.network === "mainnet" ? "https://api.lineascan.build/api" : "https://api-sepolia.lineascan.build/api"}}',
105
+ url: '',
106
+ qs: {
107
+ module: 'stats',
108
+ action: 'ethprice',
109
+ apikey: '={{$credentials.lineascanApiKey}}',
110
+ },
111
+ },
112
+ };
113
+ }
114
+ }
115
+ exports.LineaApi = LineaApi;
116
+ //# sourceMappingURL=LineaApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LineaApi.credentials.js","sourceRoot":"","sources":["../../credentials/LineaApi.credentials.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AASH;;;;;GAKG;AACH,MAAa,QAAQ;IAArB;QACE,SAAI,GAAG,UAAU,CAAC;QAClB,gBAAW,GAAG,WAAW,CAAC;QAC1B,qBAAgB,GAAG,2BAA2B,CAAC;QAC/C,eAAU,GAAsB;YAC9B;gBACE,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,SAAS;gBAClB,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,eAAe;wBACrB,KAAK,EAAE,SAAS;wBAChB,WAAW,EAAE,+BAA+B;qBAC7C;oBACD;wBACE,IAAI,EAAE,uBAAuB;wBAC7B,KAAK,EAAE,SAAS;wBAChB,WAAW,EAAE,yBAAyB;qBACvC;iBACF;gBACD,WAAW,EAAE,mCAAmC;aACjD;YACD;gBACE,WAAW,EAAE,wBAAwB;gBACrC,IAAI,EAAE,mBAAmB;gBACzB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,iCAAiC;gBAC9C,WAAW,EACT,mEAAmE;aACtE;YACD;gBACE,WAAW,EAAE,mBAAmB;gBAChC,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE;oBACX,QAAQ,EAAE,IAAI;iBACf;gBACD,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,wBAAwB;gBACrC,WAAW,EACT,mFAAmF;aACtF;YACD;gBACE,WAAW,EAAE,qBAAqB;gBAClC,IAAI,EAAE,mBAAmB;gBACzB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,gCAAgC;gBAC7C,WAAW,EACT,8DAA8D;aACjE;YACD;gBACE,WAAW,EAAE,cAAc;gBAC3B,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,2CAA2C;gBACxD,WAAW,EACT,uDAAuD;aAC1D;YACD;gBACE,WAAW,EAAE,qBAAqB;gBAClC,IAAI,EAAE,mBAAmB;gBACzB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,gCAAgC;gBAC7C,WAAW,EACT,oDAAoD;aACvD;YACD;gBACE,WAAW,EAAE,oBAAoB;gBACjC,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,uBAAuB;gBACpC,WAAW,EACT,yCAAyC;aAC5C;SACF,CAAC;QAEF,iBAAY,GAAyB;YACnC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACV,EAAE,EAAE;oBACF,MAAM,EAAE,mCAAmC;iBAC5C;aACF;SACF,CAAC;QAEF,SAAI,GAA2B;YAC7B,OAAO,EAAE;gBACP,OAAO,EACL,yHAAyH;gBAC3H,GAAG,EAAE,EAAE;gBACP,EAAE,EAAE;oBACF,MAAM,EAAE,OAAO;oBACf,MAAM,EAAE,UAAU;oBAClB,MAAM,EAAE,mCAAmC;iBAC5C;aACF;SACF,CAAC;IACJ,CAAC;CAAA;AAzGD,4BAyGC"}
@@ -0,0 +1,16 @@
1
+ import type { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ /**
3
+ * Linea Network Credentials
4
+ *
5
+ * Provides connection credentials for Linea zkEVM blockchain networks.
6
+ * Supports Mainnet, Sepolia Testnet, and custom endpoints.
7
+ */
8
+ export declare class LineaNetwork implements ICredentialType {
9
+ name: string;
10
+ displayName: string;
11
+ documentationUrl: string;
12
+ properties: INodeProperties[];
13
+ authenticate: IAuthenticateGeneric;
14
+ test: ICredentialTestRequest;
15
+ }
16
+ //# sourceMappingURL=LineaNetwork.credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LineaNetwork.credentials.d.ts","sourceRoot":"","sources":["../../credentials/LineaNetwork.credentials.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,EACf,eAAe,EAChB,MAAM,cAAc,CAAC;AAEtB;;;;;GAKG;AACH,qBAAa,YAAa,YAAW,eAAe;IAClD,IAAI,SAAkB;IACtB,WAAW,SAAmB;IAC9B,gBAAgB,SAA+B;IAC/C,UAAU,EAAE,eAAe,EAAE,CA4G3B;IAEF,YAAY,EAAE,oBAAoB,CAGhC;IAEF,IAAI,EAAE,sBAAsB,CAc1B;CACH"}
@@ -0,0 +1,146 @@
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.LineaNetwork = void 0;
10
+ /**
11
+ * Linea Network Credentials
12
+ *
13
+ * Provides connection credentials for Linea zkEVM blockchain networks.
14
+ * Supports Mainnet, Sepolia Testnet, and custom endpoints.
15
+ */
16
+ class LineaNetwork {
17
+ constructor() {
18
+ this.name = 'lineaNetwork';
19
+ this.displayName = 'Linea Network';
20
+ this.documentationUrl = 'https://docs.linea.build/';
21
+ this.properties = [
22
+ {
23
+ displayName: 'Network',
24
+ name: 'network',
25
+ type: 'options',
26
+ default: 'mainnet',
27
+ options: [
28
+ {
29
+ name: 'Linea Mainnet',
30
+ value: 'mainnet',
31
+ description: 'Linea production network (Chain ID: 59144)',
32
+ },
33
+ {
34
+ name: 'Linea Sepolia Testnet',
35
+ value: 'sepolia',
36
+ description: 'Linea test network (Chain ID: 59141)',
37
+ },
38
+ {
39
+ name: 'Custom Endpoint',
40
+ value: 'custom',
41
+ description: 'Use a custom RPC endpoint',
42
+ },
43
+ ],
44
+ description: 'Select the Linea network to connect to',
45
+ },
46
+ {
47
+ displayName: 'RPC Endpoint URL',
48
+ name: 'rpcUrl',
49
+ type: 'string',
50
+ default: '',
51
+ placeholder: 'https://rpc.linea.build',
52
+ description: 'Custom RPC endpoint URL. Leave empty to use default endpoints.',
53
+ displayOptions: {
54
+ show: {
55
+ network: ['custom'],
56
+ },
57
+ },
58
+ },
59
+ {
60
+ displayName: 'Private Key',
61
+ name: 'privateKey',
62
+ type: 'string',
63
+ typeOptions: {
64
+ password: true,
65
+ },
66
+ default: '',
67
+ placeholder: '0x...',
68
+ description: 'Private key for signing transactions (optional for read-only operations). Never share your private key!',
69
+ },
70
+ {
71
+ displayName: 'Chain ID',
72
+ name: 'chainId',
73
+ type: 'number',
74
+ default: 59144,
75
+ description: 'Chain ID (59144 for Mainnet, 59141 for Sepolia). Auto-populated based on network selection.',
76
+ displayOptions: {
77
+ show: {
78
+ network: ['custom'],
79
+ },
80
+ },
81
+ },
82
+ {
83
+ displayName: 'Lineascan API Key',
84
+ name: 'lineascanApiKey',
85
+ type: 'string',
86
+ typeOptions: {
87
+ password: true,
88
+ },
89
+ default: '',
90
+ placeholder: 'Your Lineascan API key',
91
+ description: 'API key for Lineascan block explorer (optional, for enhanced API access)',
92
+ },
93
+ {
94
+ displayName: 'WebSocket Endpoint',
95
+ name: 'wsUrl',
96
+ type: 'string',
97
+ default: '',
98
+ placeholder: 'wss://rpc.linea.build',
99
+ description: 'WebSocket endpoint for real-time subscriptions (optional)',
100
+ },
101
+ {
102
+ displayName: 'Infura Project ID',
103
+ name: 'infuraProjectId',
104
+ type: 'string',
105
+ typeOptions: {
106
+ password: true,
107
+ },
108
+ default: '',
109
+ placeholder: 'Your Infura Project ID',
110
+ description: 'Infura Project ID for premium RPC access (optional)',
111
+ },
112
+ {
113
+ displayName: 'ConsenSys API Key',
114
+ name: 'consensysApiKey',
115
+ type: 'string',
116
+ typeOptions: {
117
+ password: true,
118
+ },
119
+ default: '',
120
+ placeholder: 'Your ConsenSys API key',
121
+ description: 'ConsenSys API key for enhanced Linea features (optional)',
122
+ },
123
+ ];
124
+ this.authenticate = {
125
+ type: 'generic',
126
+ properties: {},
127
+ };
128
+ this.test = {
129
+ request: {
130
+ baseURL: '={{$credentials.network === "mainnet" ? "https://rpc.linea.build" : $credentials.network === "sepolia" ? "https://rpc.sepolia.linea.build" : $credentials.rpcUrl}}',
131
+ method: 'POST',
132
+ headers: {
133
+ 'Content-Type': 'application/json',
134
+ },
135
+ body: JSON.stringify({
136
+ jsonrpc: '2.0',
137
+ method: 'eth_chainId',
138
+ params: [],
139
+ id: 1,
140
+ }),
141
+ },
142
+ };
143
+ }
144
+ }
145
+ exports.LineaNetwork = LineaNetwork;
146
+ //# sourceMappingURL=LineaNetwork.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LineaNetwork.credentials.js","sourceRoot":"","sources":["../../credentials/LineaNetwork.credentials.ts"],"names":[],"mappings":"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"}