Core replay shared — production-local/core-replay-shared
# Persistent local deployment. Credentials come from the private .env file.
server:
addr: ":8080"
max_body_bytes: 1048576
max_inflight_requests: 32
read_timeout: 5s
write_timeout: 15s
publish_timeout: 10s
shutdown_timeout: 15s
shutdown_total_timeout: 60s
metrics:
enabled: true
addr: ":9090"
path: /metrics
security:
api_key: "${HOOKWAY_API_KEY}"
trusted_proxy_headers: false
forwarded_header_allowlist: [Content-Type, X-Request-ID, X-GitHub-Event]
state_stores:
shared:
namespace: local-production
timeout: 250ms
startup_timeout: 30s
redis:
url: "${PROTECTION_REDIS_URL}"
pool_size: 5
replay:
url: "http://replay:8080"
capture_token: "${REPLAY_CAPTURE_TOKEN}"
max_record_bytes: 2097152
control:
addr: ":9092"
token: "${REPLAY_CONTROL_TOKEN}"
max_concurrent: 2
destinations:
primary:
type: rabbitmq
rabbitmq:
url: "${RABBITMQ_URL}"
exchange: hookway.webhooks
exchange_type: direct
durable: true
publish_timeout: 5s
declare_queues: true
notify:
type: webhook
webhook:
url: "http://notify-sink:8080/github"
delivery_mode: sync
flows:
github_events:
delivery_failure_policy: skip_failed
nodes:
- {id: in, type: http_trigger, path: /webhooks/github, methods: [POST]}
- {id: limit, type: rate_limit, rpm: 600, burst: 100, key_by: source_ip, store: shared}
- {id: body, type: read_body, max_bytes: 1048576}
- {id: auth, type: auth, scheme: hmac_sha256_hex, secret: "${GITHUB_WEBHOOK_SECRET}", signature_header: X-Hub-Signature-256}
- {id: env, type: envelope, body_format: json}
- {id: out, type: publish, destination: primary, target: github-webhooks, create: true}
- {id: notify, type: publish, destination: notify, target: github}
edges: [in>limit, limit>body, body>auth, auth>env, env>out, env>notify]