Hookway

Core — production-local/core

# 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:
  local:
    namespace: local-production
    memory: {}
destinations:
  primary:
    type: rabbitmq
    rabbitmq:
      url: "${RABBITMQ_URL}"
      exchange: hookway.webhooks
      exchange_type: direct
      durable: true
      publish_timeout: 5s
      declare_queues: true
flows:
  github_events:
    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: local}
      - {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}
    edges: [in>limit, limit>body, body>auth, auth>env, env>out]