flowchart LR
UI["Browser UI"] --> API["Loopback HTTP API"]
API --> FLOW["Flow orchestrator"]
FLOW --> EXTRACT["Checkout extractor"]
FLOW --> PAY["Payment adapter"]
FLOW --> VERIFY["Final state verifier"]
FLOW --> FP["Local fingerprint store"]
static/renders the local control panel and mounts the browser-side payment component.server.pyvalidates API payloads, runs tasks and exposes redacted status.standalone_flow.pyseparates proxy roles, performs read-only preflight and coordinates the state machine.standalone_core/contains transport, checkout, payment, fingerprint and parsing helpers.
The task result distinguishes these outcomes:
- preflight or validation failure;
- checkout created;
- payment confirmation requested;
- action required, including 3DS or redirect;
- remote request accepted but final state pending;
- final subscription or bound-card state verified;
- terminal failure with the precise stage recorded.
Mutating requests use a no-replay boundary: once the remote mutation may have started, a transport disconnect is reported as ambiguous rather than retried.
- Secrets enter from the local browser at runtime.
- The service does not use a project database.
- Local configuration, fingerprint cache, captures and logs are ignored by Git.
- Status output stores identifiers required for flow continuity but must remain redacted before publication.
- The static UI may persist drafts in localStorage; clearing repository files does not clear browser storage.