Skip to content

Route delivery receipts through proxy Queue instead of direct HTTP #168

@vrknetha

Description

@vrknetha

Problem

Currently, when Alice's connector processes Bob's message, it POSTs the delivery receipt directly to Bob's proxy via HTTP. This has issues:

Current Flow

Alice's connector → HTTP POST → Bob's proxy → stores in DO → nobody reads it

Proposed Flow

Alice's connector → HTTP POST → Alice's proxy → Queue → Bob's proxy DO → WebSocket → Bob's connector

Why route through Alice's proxy?

  • Connector stays dumb — only talks to its own proxy (WebSocket + HTTP)
  • Connector doesn't need to know about Cloudflare Queues
  • Proxy is the only component touching CF infrastructure
  • Alice's proxy validates the receipt, publishes to Queue
  • Bob's proxy consumes from Queue, stores in DO, pushes to Bob's connector via WebSocket (Delivery receipts are stored but never consumed by sender #165)

Architecture

  • Alice's connector POSTs receipt to Alice's proxy (new endpoint or existing receipt path)
  • Alice's proxy validates + publishes to receipt Queue
  • Bob's proxy has Queue consumer → routes to Bob's DO
  • Bob's DO stores receipt + pushes via WebSocket if connector is connected
  • If connector is offline, receipt is stored in DO for delivery on reconnect

Benefits

  • Decouples receipt delivery from connector-to-proxy connectivity
  • Receipts are durable (Queue retries on failure)
  • Solves Delivery receipts are stored but never consumed by sender #165 naturally — receipts flow all the way to sender's connector
  • Dead letter receipts (dead_lettered status) follow the same path — sender's agent can act on failures
  • Connector interface unchanged — still just HTTP POST to its own proxy

Dependencies

Impact

  • Free plan: 10K Queue ops/day (receipts are low volume)
  • No connector changes needed

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions