Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenPay Congo

Prototype status — not production-ready. The checked-in Flutter client and Go wallet server are incomplete experiments. They do not yet implement the canonical sync contract, authentication, encryption-at-rest, secure secret storage, release signing, or a deployable server image. Do not process real payments or real SMS data with this repository.

OpenPay Congo is being specified as a mobile local-first payment inbox and outbox. The mobile device records payment events while offline; a backend later replicates an immutable ledger and derives balances. The public interoperability contract is additive planning material, not evidence that this behavior is implemented.

Repository map

  • android-client/ — Flutter prototype for Android; it currently parses a narrow Orange SMS format and has incomplete flows.
  • wallet-plugin-go/ — Go/SQLite wallet-server prototype; its current routes are legacy and are not the canonical v1 contract.
  • docs/ — canonical contract, PRDs, ADRs, reliability notes, and the Docker-only contract validator.
  • .github/workflows/ci.yml — current baseline CI; it needs the planned release and supply-chain hardening described in the documentation.

Current prerequisites

  • Git.
  • Docker Desktop for all reproducible CI checks below.
  • Flutter 3.44.9 with Dart 3.12.2 for the Android CI image.
  • Go 1.26.5 for the Go prototype (go.mod requests that toolchain).
  • No Docker deployment image release process exists yet.

Optional host-only exploration

The commands below exercise only the present prototypes; they do not establish CI or production readiness.

# Flutter prototype
cd android-client
flutter pub get
flutter analyze
flutter test
flutter run

# Go prototype (creates/uses a local wallet.db in this directory)
cd ../wallet-plugin-go
go test ./...
go run ./cmd/server

# Canonical public-contract validation — Docker only
cd ..
docker build --target test -f docs/Dockerfile .

The contract build uses no bind mounts or named volumes; its dependencies are image-internal. The Android prototype requests SMS/biometric capabilities; use only test messages and a test device.

Reproducible Docker CI commands

Run these commands from the repository root for reproducible CI evidence:

# Canonical public contract and delivery-policy validation
docker build --target test -f docs/Dockerfile .

# Go public tests, vet, race detector, and runtime image
docker build --target test -f wallet-plugin-go/Dockerfile wallet-plugin-go
docker build --target runtime -t openpaycongo-wallet:local -f wallet-plugin-go/Dockerfile wallet-plugin-go

# Flutter analysis, tests, and a non-production debug APK
docker build --target analyze -f android-client/Dockerfile.ci android-client
docker build --target test -f android-client/Dockerfile.ci android-client
docker build --target artifact --output type=local,dest=android-client/build/ci \
  -f android-client/Dockerfile.ci android-client

# Admin UI health and browser journey against its Compose fake upstream
docker compose -f admin-ui/compose.test.yaml up --build --abort-on-container-exit --exit-code-from browser
docker compose -f admin-ui/compose.test.yaml down --volumes --remove-orphans

android-client/build/ci/app-debug.apk is debug-signed CI output, not a distributable release. The admin Compose journey uses a checked-in fake upstream and is browser/health evidence for the UI boundary, not live backend integration evidence. The Dockerfiles make prototype checks reproducible; they do not add deployment configuration, database configurability, signing, SBOMs, provenance, or a production image release process.

Supported today vs planned

Area Current state Planned contract
Mobile inbox Keystore-encrypted trusted-SMS evidence and append-only local decisions; no canonical sync Offline inbox/outbox, explicit server delivery state, proven recovery UX
Backend ledger Prototype Go/SQLite endpoints Authenticated immutable replicated ledger and derived balance
Sync Not implemented POST /v1/sync/push, GET /v1/sync/pull, POST /v1/sync/ack
Merchant integration Not implemented One canonical event push with idempotency semantics
Releases No signed Android or container release Signed/mobile release, SBOM, provenance, scan, rollback evidence

Security and operational notes

The older French material records product intent, not implemented controls. Treat API keys/HMAC, encryption, parser sharing, and retry behavior there as unimplemented until a release says otherwise. Raw SMS is deliberately excluded from the canonical public event payload. Never commit credentials, production SMS, or wallet databases.

The canonical API specifies OAuth-style scopes, RFC 9457 problem responses, idempotency, and storage parity. Implementation, threat modeling, key management, retention, replay defense, and operational approval remain required.

Documentation

Screenshots

Android truth note: the current slice requests RECEIVE_SMS, receives platform broadcasts while the process is absent, enforces an encrypted exact sender allowlist, and records trusted evidence locally for review. It does not use READ_SMS, claim default-handler status, guarantee zero loss, provide server reconciliation, or establish Google Play exception approval. Biometric authentication remains an authenticator result, not a runtime permission.

There are no real-app screenshots in this repository. Screenshots will be added only after capture from the actual app running a documented, reproducible test journey; no mockups or fabricated product evidence will be substituted.

About

Le système de paiement distribué a pour objectif de permettre aux développeurs Congolais d'accepter les paiements mobiles sans avoir à créer un compte marchand avec les compagnies de télécommunications.

Resources

Stars

9 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages