fromGatewayId from the message envelopecrypto.sign() with Ed25519 keys — native bindings to OpenSSL/LibreSSL are faster and better maintained than pure-JS alternatives.HTTPS provides transport encryption, but the Doorman verifies end-to-end message authenticity independent of TLS.
fromGatewayId in the peer registry?approved? Not pending, not rejected, not removed.removed with a timestamp, and the federation state machine transitions the peer to a dedicated tombstoned lifecycle state.init-state pending record — it doesn't silently reuse the old one./.well-known/ogp--rate / at approve or grant time429 Too Many Requests with Retry-After headerMap<string, { timestamps: number[]; windowStart: number }> keyed by {peerId}:{intent}.429 and a calculated Retry-After based on when the oldest in-window request will age out.checkAccess() method follows six precise steps:403 unknown-peer or 403 not-approved403 scope-violation with the offending intent type429 rate-limited with Retry-After: NcheckAccess() returns. That separation matters:The subtle one. Imagine Alice is federated with Bob formessageintents. Bob's agent is compromised.
message intents only. Bob's agent gets compromised.project.query to Alice's gateway, claiming to query on behalf of Carol.project.query scope. Rejected at step 4 — before the agent ever sees the request.
checkAccess() is correct.The Doorman is OGP's most important component — and the one most people overlook. Five layers of no means five independent chances to catch a mistake before it becomes a breach.
npm install -g @dp-pcs/ogp@latest
ogp setup
ogp whoami # confirm identity & keypair
ogp start --background
ogp status # shows your gateway URLsrc/daemon/doorman.ts or install it: npm install -g @dp-pcs/ogp