Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
82e9f90
implement HTTP action capability without deduplication. pending unit …
jinhoonbang Jun 4, 2025
f2f533d
unit tests wip
jinhoonbang Jun 4, 2025
a462604
add unit tests for gateway outbound proxy test
jinhoonbang Jun 5, 2025
380bb9d
self-review
jinhoonbang Jun 5, 2025
b23c9e2
Update http/action/action.go
jinhoonbang Jun 5, 2025
eaa8b1e
Update http/gateway/gateway_outbound_proxy_test.go
jinhoonbang Jun 5, 2025
4e645cf
remove unnecessary sleep in test
jinhoonbang Jun 5, 2025
85aaee8
update according to interface changes in common
jinhoonbang Jun 9, 2025
e699865
add integration tests
jinhoonbang Jun 9, 2025
3602021
fix linting
jinhoonbang Jun 9, 2025
43ebbd2
use jsonrpc.Request instead of api.Message. address comments
jinhoonbang Jun 16, 2025
1efaadd
apply chainlink-common changes
jinhoonbang Jun 23, 2025
4a2fb3c
Merge remote-tracking branch 'origin/main' into PRODCRE-412-implement…
jinhoonbang Jun 25, 2025
b9c1c88
remove http integration test
jinhoonbang Jun 25, 2025
e9a8f1e
revert integration test changes
jinhoonbang Jun 25, 2025
b0a6584
self-review
jinhoonbang Jun 25, 2025
2c06d02
Merge branch 'main' into PRODCRE-412-implement-http-action-capability…
jinhoonbang Jun 26, 2025
74cbfe4
integration test. waiting for chainlink handler
jinhoonbang Jun 25, 2025
929ce38
address comments. add safeurl for http direct client
jinhoonbang Jun 27, 2025
061b6a8
go mod tidy
jinhoonbang Jun 27, 2025
c59f4e1
remove http integration test for now
jinhoonbang Jun 27, 2025
f6a8c05
regenerate modgraph
jinhoonbang Jun 27, 2025
a760545
add project.json
jinhoonbang Jun 27, 2025
643062b
rename module as http_action. add rate limiting for direct proxy
jinhoonbang Jun 27, 2025
49e575c
fix lint
jinhoonbang Jun 27, 2025
aa4ba5b
minor changes to README
jinhoonbang Jun 27, 2025
30945db
Merge remote-tracking branch 'origin/main' into PRODCRE-412-implement…
jinhoonbang Jun 27, 2025
cb26d32
make modgraph
jinhoonbang Jun 27, 2025
da262f4
update to latest chainlink-common
jinhoonbang Jun 30, 2025
be2825b
Merge remote-tracking branch 'origin/main' into PRODCRE-412-implement…
jinhoonbang Jul 1, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 44 additions & 45 deletions go.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,64 +3,70 @@
flowchart LR

capabilities/chain_capabilities/evm --> capabilities/libs/loopserver
capabilities/chain_capabilities/evm --> chainlink-common/pkg/values
capabilities/chain_capabilities/evm --> chainlink-evm
capabilities/chain_capabilities/evm --> chainlink-framework/chains
click capabilities/chain_capabilities/evm href "https://github.com/smartcontractkit/capabilities"
capabilities/cron --> capabilities/libs
capabilities/cron --> chainlink-common
click capabilities/cron href "https://github.com/smartcontractkit/capabilities"
capabilities/devenv --> chainlink-automation
capabilities/devenv --> chainlink-ccip
capabilities/devenv --> chainlink-data-streams
capabilities/devenv --> chainlink-evm
capabilities/devenv --> chainlink-framework/chains
capabilities/devenv --> chainlink-framework/metrics
capabilities/devenv --> chainlink-framework/multinode
capabilities/devenv --> chainlink-protos/svr
capabilities/devenv --> chainlink-protos/workflows/go
capabilities/devenv --> chainlink-tron/relayer
capabilities/devenv --> chainlink/v2
capabilities/devenv --> freeport
capabilities/devenv --> grpc-proxy
capabilities/devenv --> tdh2/go/ocr2/decryptionplugin
capabilities/devenv --> wsrpc
click capabilities/devenv href "https://github.com/smartcontractkit/capabilities"
capabilities/http_action --> capabilities/libs
capabilities/http_action --> chainlink-common
capabilities/http_action --> chainlink-common/pkg/values
capabilities/http_action --> freeport
capabilities/http_action --> grpc-proxy
capabilities/http_action --> libocr
click capabilities/http_action href "https://github.com/smartcontractkit/capabilities"
capabilities/http_trigger --> capabilities/libs
capabilities/http_trigger --> chainlink-common
capabilities/http_trigger --> chainlink-common/pkg/values
capabilities/http_trigger --> freeport
capabilities/http_trigger --> grpc-proxy
capabilities/http_trigger --> libocr
click capabilities/http_trigger href "https://github.com/smartcontractkit/capabilities"
capabilities/integration_tests --> capabilities/loadtestwritetarget
capabilities/integration_tests --> chain-selectors
capabilities/integration_tests --> chainlink-aptos
capabilities/integration_tests --> chainlink-automation
capabilities/integration_tests --> chainlink-data-streams
capabilities/integration_tests --> chainlink-evm
capabilities/integration_tests --> chainlink-feeds
capabilities/integration_tests --> chainlink-framework/capabilities
capabilities/integration_tests --> chainlink-framework/chains
capabilities/integration_tests --> chainlink-protos/orchestrator
capabilities/integration_tests --> chainlink-protos/rmn/v1.6/go
capabilities/integration_tests --> chainlink-protos/svr
capabilities/integration_tests --> chainlink-solana
capabilities/integration_tests --> chainlink-tron/relayer
capabilities/integration_tests --> chainlink/v2
capabilities/integration_tests --> tdh2/go/ocr2/decryptionplugin
capabilities/integration_tests --> tdh2/go/tdh2
click capabilities/integration_tests href "https://github.com/smartcontractkit/capabilities"
capabilities/kvstore --> capabilities/libs/loopserver
capabilities/kvstore --> capabilities/libs/testutils
click capabilities/kvstore href "https://github.com/smartcontractkit/capabilities"
capabilities/libs --> chainlink-common
capabilities/libs --> freeport
capabilities/libs --> grpc-proxy
capabilities/libs --> libocr
click capabilities/libs href "https://github.com/smartcontractkit/capabilities"
capabilities/libs/loopserver --> chainlink-common
capabilities/libs/loopserver --> grpc-proxy
capabilities/libs/loopserver --> libocr
click capabilities/libs/loopserver href "https://github.com/smartcontractkit/capabilities"
capabilities/libs/testutils --> chainlink-common
capabilities/libs/testutils --> libocr
click capabilities/libs/testutils href "https://github.com/smartcontractkit/capabilities"
capabilities/loadtestwritetarget --> capabilities/libs/loopserver
capabilities/loadtestwritetarget --> chainlink-common
capabilities/loadtestwritetarget --> grpc-proxy
capabilities/loadtestwritetarget --> libocr
click capabilities/loadtestwritetarget href "https://github.com/smartcontractkit/capabilities"
capabilities/mock --> capabilities/libs/loopserver
capabilities/mock --> capabilities/libs/testutils
capabilities/mock --> chainlink-common
capabilities/mock --> freeport
capabilities/mock --> grpc-proxy
capabilities/mock --> libocr
click capabilities/mock href "https://github.com/smartcontractkit/capabilities"
capabilities/readcontract --> capabilities/libs
capabilities/readcontract --> chainlink-common
click capabilities/readcontract href "https://github.com/smartcontractkit/capabilities"
capabilities/workflowevent --> capabilities/libs/loopserver
capabilities/workflowevent --> capabilities/libs/testutils
click capabilities/workflowevent href "https://github.com/smartcontractkit/capabilities"
capabilities/workflows --> chainlink-common
capabilities/workflows --> libocr
click capabilities/workflows href "https://github.com/smartcontractkit/capabilities"
capabilities/workflows/readbalancesgen --> chainlink-common
click capabilities/workflows/readbalancesgen href "https://github.com/smartcontractkit/capabilities"
Expand All @@ -69,17 +75,17 @@ flowchart LR
chainlink-aptos --> chainlink-common
click chainlink-aptos href "https://github.com/smartcontractkit/chainlink-aptos"
chainlink-automation --> chainlink-common
chainlink-automation --> libocr
click chainlink-automation href "https://github.com/smartcontractkit/chainlink-automation"
chainlink-ccip --> chain-selectors
chainlink-ccip --> chainlink-common
chainlink-ccip --> chainlink-protos/rmn/v1.6/go
chainlink-ccip --> libocr
click chainlink-ccip href "https://github.com/smartcontractkit/chainlink-ccip"
chainlink-ccip/chains/solana --> chainlink-ccip
chainlink-ccip/chains/solana --> chainlink-common
click chainlink-ccip/chains/solana href "https://github.com/smartcontractkit/chainlink-ccip"
chainlink-common --> chainlink-common/pkg/values
chainlink-common --> chainlink-protos/billing/go
chainlink-common --> chainlink-protos/workflows/go
chainlink-common --> freeport
chainlink-common --> grpc-proxy
chainlink-common --> libocr
Expand All @@ -89,30 +95,24 @@ flowchart LR
chainlink-common/pkg/values
click chainlink-common/pkg/values href "https://github.com/smartcontractkit/chainlink-common"
chainlink-data-streams --> chainlink-common
chainlink-data-streams --> grpc-proxy
chainlink-data-streams --> libocr
click chainlink-data-streams href "https://github.com/smartcontractkit/chainlink-data-streams"
chainlink-evm --> chainlink-common/pkg/values
chainlink-evm --> chainlink-common
chainlink-evm --> chainlink-framework/capabilities
chainlink-evm --> chainlink-framework/chains
chainlink-evm --> chainlink-framework/metrics
chainlink-evm --> chainlink-framework/multinode
chainlink-evm --> chainlink-protos/svr
chainlink-evm --> chainlink-tron/relayer
click chainlink-evm href "https://github.com/smartcontractkit/chainlink-evm"
chainlink-feeds --> chainlink-common
chainlink-feeds --> grpc-proxy
chainlink-feeds --> libocr
click chainlink-feeds href "https://github.com/smartcontractkit/chainlink-feeds"
chainlink-framework/capabilities --> chainlink-common
click chainlink-framework/capabilities href "https://github.com/smartcontractkit/chainlink-framework"
chainlink-framework/chains --> chainlink-framework/multinode
chainlink-framework/chains --> freeport
click chainlink-framework/chains href "https://github.com/smartcontractkit/chainlink-framework"
chainlink-framework/metrics --> chainlink-common
chainlink-framework/metrics --> libocr
click chainlink-framework/metrics href "https://github.com/smartcontractkit/chainlink-framework"
chainlink-framework/multinode --> chainlink-common
chainlink-framework/multinode --> chainlink-framework/metrics
chainlink-framework/multinode --> libocr
click chainlink-framework/multinode href "https://github.com/smartcontractkit/chainlink-framework"
chainlink-protos/billing/go --> chainlink-protos/workflows/go
click chainlink-protos/billing/go href "https://github.com/smartcontractkit/chainlink-protos"
Expand All @@ -126,33 +126,31 @@ flowchart LR
click chainlink-protos/workflows/go href "https://github.com/smartcontractkit/chainlink-protos"
chainlink-solana --> chainlink-ccip
chainlink-solana --> chainlink-ccip/chains/solana
chainlink-solana --> chainlink-common
chainlink-solana --> chainlink-common/pkg/monitoring
chainlink-solana --> chainlink-framework/metrics
chainlink-solana --> chainlink-framework/multinode
chainlink-solana --> freeport
chainlink-solana --> grpc-proxy
chainlink-solana --> libocr
click chainlink-solana href "https://github.com/smartcontractkit/chainlink-solana"
chainlink-tron/relayer --> chainlink-evm
chainlink-tron/relayer --> grpc-proxy
click chainlink-tron/relayer href "https://github.com/smartcontractkit/chainlink-tron"
chainlink/v2 --> chain-selectors
chainlink/v2 --> chainlink-aptos
chainlink/v2 --> chainlink-automation
chainlink/v2 --> chainlink-ccip
chainlink/v2 --> chainlink-ccip/chains/solana
chainlink/v2 --> chainlink-common/pkg/values
chainlink/v2 --> chainlink-data-streams
chainlink/v2 --> chainlink-evm
chainlink/v2 --> chainlink-feeds
chainlink/v2 --> chainlink-framework/capabilities
chainlink/v2 --> chainlink-framework/chains
chainlink/v2 --> chainlink-framework/multinode
chainlink/v2 --> chainlink-protos/billing/go
chainlink/v2 --> chainlink-protos/orchestrator
chainlink/v2 --> chainlink-protos/rmn/v1.6/go
chainlink/v2 --> chainlink-protos/svr
chainlink/v2 --> chainlink-solana
chainlink/v2 --> chainlink-tron/relayer
chainlink/v2 --> freeport
chainlink/v2 --> grpc-proxy
chainlink/v2 --> tdh2/go/ocr2/decryptionplugin
chainlink/v2 --> tdh2/go/tdh2
click chainlink/v2 href "https://github.com/smartcontractkit/chainlink"
freeport
click freeport href "https://github.com/smartcontractkit/freeport"
Expand All @@ -172,6 +170,7 @@ flowchart LR
capabilities/chain_capabilities/evm
capabilities/cron
capabilities/devenv
capabilities/http_action
capabilities/http_trigger
capabilities/integration_tests
capabilities/kvstore
Expand Down
71 changes: 71 additions & 0 deletions http_action/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# HTTP Action Capability

> A capability module that enables CRE workflows ((V2 / NoDAG engine)) to perform outbound HTTP requests to offchain systems.

---

## ✨ Overview

The **HTTP Action Capability** allows CRE workflows to interact with external HTTP APIs to retrieve data or perform actions (e.g. POST updates, fetch records, trigger webhooks). It is modeled as a **standard capability** and supports both **direct** and **gateway-proxied** request modes.

## 📦 Features

- Supports following HTTP methods: `GET`, `POST`, `PUT`, `DELETE`, `PATCH`
- Configurable limits for timeouts, headers, and body size
- Two outbound proxy modes:
- `direct`: Calls made via the local HTTP client
- `gateway`: Calls routed through gateway nodes with at-least-once delivery and deduplication
- Input validation with default fallback values


🧪 Configuration

### 🛠️ Configuration Example

```json
{
"incomingRateLimiter": {
"globalRPS": 100.0,
"globalBurst": 100,
"perSenderRPS": 100.0,
"perSenderBurst": 100,
},
"outgoingRateLimiter": {
"globalRPS": 100.0,
"globalBurst": 100,
"perSenderRPS": 100.0,
"perSenderBurst": 100,
},
"limits": {
"maxTimeoutMs": 10000,
"maxResponseBytes": 1048576,
"maxHeaderCount": 50,
"maxHeaderKeyLength": 256,
"maxHeaderValueLength": 1024,
"maxRequestBytes": 1048576
},
"proxyMode": "gateway",
"gatewayConnection": {
"initialIntervalMs": 100,
"maxElapsedTimeMs": 10000,
"multiplier": 2.0
},
"httpClient": {
"blockedIPs": [],
"blockedIPsCIDR": [],
"allowedPorts": [80, 443],
"allowedSchemes": ["http", "https"],
"allowedIPs": [],
"allowedIPsCIDR": []
}
}
```

> **See also:** [Default values in `action/validate.go`](./action/validate.go)

### Run all tests:

```
cd http
go test ./... -v
```
Loading
Loading