A fan-initiated request to pay for VIP content access — the spine of the
unlock flow. Settlement is polymorphic on the chosen payment method's kind
(peer_app: memo-matched manual confirm; crypto: BTCPay webhook in M2).
confirmUnlockIntent is atomic and returns { transitioned }: the UPDATE only
fires while the row is still awaiting_payment, so concurrent confirms (manual +
future webhook) cannot double-settle, and the caller gates the paid-ledger
insert on the transition so it runs exactly once. Includes idempotent
re-confirm, close (expire/cancel), and a bulk stale-expiry sweep.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
||
|---|---|---|
| .. | ||
| admin | ||
| adult-therapy-tours | ||
| age-verification | ||
| api | ||
| client-intel | ||
| clients/frontend-public | ||
| cocotte-tech | ||
| cocotte-web | ||
| comm-newsletter | ||
| db-monitor | ||
| demimonde | ||
| edge-purge | ||
| event-scrapers | ||
| futa-waifu-tour | ||
| image-protection | ||
| landing | ||
| merchant/backend-api | ||
| messages | ||
| my | ||
| platform-seed | ||
| provider-website | ||
| quinn-ai | ||
| quinn-messenger/mcp | ||
| sansonnet-web | ||
| score-refresh | ||
| sso | ||
| user-data | ||
| vip | ||
| waitlist | ||