Email freclean7@gmail.com with details. Do not open a public issue for unpatched vulnerabilities.
- Never holds a private key or seed phrase.
Web3CeloAdapter.refund()deliberately does not send an on-chain transaction itself — it records a refund request and relies on FreClean's multi-signature treasury process (seefreclean-docs) to execute it. Automating outbound transfers from this service would require storing a signing key here, which this repo intentionally does not do. FRECLEAN_TREASURY_WALLETis a public address, safe to commit — it is where FreClean receives funds, not a credential.FRECLEAN_API_WORKER_TOKENandCELOHT_WEBHOOK_SECRETare real secrets and must only ever live in environment variables / a secret manager, never in the repo..envis git-ignored.
src/webhook/celoHtWebhook.ts verifies every inbound CeloHT webhook with an HMAC signature check using crypto.timingSafeEqual, and refuses to parse the payload if verification fails or the secret isn't configured. The exact payload shape is a placeholder until CeloHT documents its real webhook format — see the comment in that file.
- The verification worker (
src/worker/verify.ts) only ever pushes a forward status transition or a terminal failure — seeisForwardTransition/isTerminalFailureinsrc/core/types.ts. It cannot skip a payment straight toconfirmed. - A payment can only reach
verified/confirmedafterMIN_CONFIRMATIONSblocks have passed (default 3), reducing the risk of acting on a transaction that gets reorganized out of the chain. - Amount matching for a detected transfer is done against the token's on-chain decimals — see
Web3CeloAdapter.checkStatus()— not against a client-supplied string.
CELO_RPC_URLdefaults to a public endpoint (forno.celo.org). Move to a dedicated/rate-limited RPC provider before production traffic.- No retry/backoff or dead-letter handling yet if
freclean-apiis unreachable when pushing a transition — failures are logged and picked up again on the next poll.