Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
e23c0fa
feat: import full platform codebase from sprint96 branch
devin-ai-integration[bot] May 19, 2026
f33ee26
feat: security hardening, circuit breakers, and integration tests
devin-ai-integration[bot] May 19, 2026
878d00e
style: fix Prettier formatting across all files to pass CI check
devin-ai-integration[bot] May 19, 2026
5a34564
fix: restore original pnpm-lock.yaml to fix frozen lockfile CI check
devin-ai-integration[bot] May 19, 2026
cb4e93a
chore: remove @ts-nocheck from 121 security-critical files, fix all t…
devin-ai-integration[bot] May 19, 2026
d19d8a5
fix: resolve remaining test failures — roleNavAccess, camera tip, ann…
devin-ai-integration[bot] May 20, 2026
c8443d6
fix: format 3 files missed by prettier check
devin-ai-integration[bot] May 20, 2026
eed2798
fix: resolve CI failures — remove duplicate geofencing router, fix AD…
devin-ai-integration[bot] May 20, 2026
aaf53dc
fix: remove dead geofencing import causing esbuild failure
devin-ai-integration[bot] May 20, 2026
cde0e40
fix: add test fixtures for CI and setup step for absolute path tests
devin-ai-integration[bot] May 20, 2026
6c03c53
security: enforce all 13 secrets at startup, fail-closed for financia…
devin-ai-integration[bot] May 20, 2026
a3a128b
fix: enforce fail-closed at Kafka/TigerBeetle return-value boundary
devin-ai-integration[bot] May 20, 2026
8a04203
feat: add 100+ missing router procedures, align page-router API, remo…
devin-ai-integration[bot] May 20, 2026
421fe0b
feat: Fluvio fail-closed for critical events, mTLS in resilientFetch,…
devin-ai-integration[bot] May 20, 2026
ec3f497
feat: implement DB-backed geoFencing, receiptTemplates, guideFeedback…
devin-ai-integration[bot] May 20, 2026
19276bf
feat: Full e-commerce stack — Go catalog, Rust cart/checkout, Python …
devin-ai-integration[bot] May 20, 2026
7b4564d
chore: remove Rust target/ directory from git, add .gitignore
devin-ai-integration[bot] May 20, 2026
ae2ddb6
style: fix prettier formatting for e-commerce files
devin-ai-integration[bot] May 20, 2026
e25da66
feat: E-commerce expansion + Supply Chain modules
devin-ai-integration[bot] May 20, 2026
5112c2f
fix: register e-commerce/supply-chain routers + fix receiptTemplates …
devin-ai-integration[bot] May 20, 2026
4108738
feat: storefront templates + remove compiled binary
devin-ai-integration[bot] May 20, 2026
b856460
style: format storefront template files
devin-ai-integration[bot] May 20, 2026
b7a504d
feat: KYC/KYB enforcement services — goAML, fail-closed gateway, AML …
devin-ai-integration[bot] May 20, 2026
08a9c87
style: format accountOpening.ts and kycEnforcement.ts with prettier
devin-ai-integration[bot] May 20, 2026
1378bec
feat: eliminate 116 scaffold routers — replace auditLog-only CRUD wit…
devin-ai-integration[bot] May 20, 2026
d35a49c
fix: restore tested routers, add missing procedures to bulkOperations
devin-ai-integration[bot] May 20, 2026
5beeebe
style: format bulkOperations.ts with prettier
devin-ai-integration[bot] May 20, 2026
357ef19
fix: remove @ts-nocheck from all 146 pages — 0 TypeScript errors
devin-ai-integration[bot] May 20, 2026
446fe6f
fix: pass all structural tests — annotate @ts-expect-error, add missi…
devin-ai-integration[bot] May 20, 2026
c0d1719
style: prettier formatting on 71 files
devin-ai-integration[bot] May 20, 2026
a3aff9c
fix: resolve 18 TypeScript errors from prettier reformatting
devin-ai-integration[bot] May 20, 2026
5dbacbb
feat: Mobile UX + POS tile customization (P0→P3)
devin-ai-integration[bot] May 21, 2026
b9cc9ef
fix: regenerate lockfile with pnpm 10.4.1 matching CI version
devin-ai-integration[bot] May 21, 2026
0d9e9d8
fix: format index.css with prettier
devin-ai-integration[bot] May 21, 2026
9c6a097
fix: update i18n test expectations to match new exports (changeLangua…
devin-ai-integration[bot] May 21, 2026
4dd6dbd
fix: guard localStorage access in i18n for Node.js test environment
devin-ai-integration[bot] May 21, 2026
1285bec
feat: Agent-level e-commerce system — store registration, discovery, …
devin-ai-integration[bot] May 21, 2026
a300ee4
style: format agent store files with prettier
devin-ai-integration[bot] May 21, 2026
66c34f8
fix: replace Math.random with crypto.randomBytes in agentStore, updat…
devin-ai-integration[bot] May 21, 2026
5f33799
feat: integrate e-commerce into dashboard with role-based access
devin-ai-integration[bot] May 21, 2026
23fd01b
style: format e-commerce dashboard integration files with prettier
devin-ai-integration[bot] May 21, 2026
162d6d0
feat: seed Nigerian data across platform, add dark/light mode toggle
devin-ai-integration[bot] May 21, 2026
2b62d53
style: format seed script with prettier
devin-ai-integration[bot] May 21, 2026
d5581a8
fix: rebrand RemitFlow → 54Link across dashboard and partner onboarding
devin-ai-integration[bot] May 21, 2026
dbff618
style: format PartnerOnboarding with prettier
devin-ai-integration[bot] May 21, 2026
b7f2382
feat: production hardening — scaffold elimination, security fixes, mo…
devin-ai-integration[bot] May 21, 2026
c4096d7
style: format production documentation (Prettier)
devin-ai-integration[bot] May 21, 2026
c363967
fix: update router count to 457 (added serviceHealthAggregator)
devin-ai-integration[bot] May 21, 2026
d62ebfd
feat: implement 69 scaffold pages with domain-specific UI + fix 84 ge…
devin-ai-integration[bot] May 21, 2026
1c9ac3e
style: format all transformed pages and routers with prettier
devin-ai-integration[bot] May 21, 2026
d93f9e5
feat: implement all 20 future-proofing features
devin-ai-integration[bot] May 22, 2026
48d7570
fix: prettier formatting for App.tsx and DashboardLayout.tsx
devin-ai-integration[bot] May 22, 2026
6c1793d
fix: update router count test from 457 to 477 (20 future-proofing rou…
devin-ai-integration[bot] May 22, 2026
78ac972
fix: close all 5 production readiness gaps for 20 future features
devin-ai-integration[bot] May 22, 2026
1629e38
style: format routers and tests with prettier
devin-ai-integration[bot] May 22, 2026
59a4d45
fix: add Go future-feature microservices (force-add past gitignore)
devin-ai-integration[bot] May 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
22 changes: 22 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
node_modules
.pnpm-store
dist
.git
.github
coverage
*.log
.env*
.DS_Store
Thumbs.db
tb-sidecar/tb-sidecar
tb-sidecar/vendor
offline-queue
analytics-service/__pycache__
analytics-service/.venv
resilience-agent/vendor
k6
tests/integration
docs
archives
*.tar.gz
*.zip
103 changes: 103 additions & 0 deletions .env.production.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
# ─────────────────────────────────────────────────────────────────────────────
# 54Link Agency Banking Platform — Production Environment Variables
# Copy to .env.production and fill in all values before deploying
# NEVER commit .env.production to version control
# ─────────────────────────────────────────────────────────────────────────────

# ── Domain ────────────────────────────────────────────────────────────────────
DOMAIN=54link.ng
KEYCLOAK_HOSTNAME=keycloak.54link.ng
GRAFANA_DOMAIN=grafana.54link.ng
ALERTMANAGER_DOMAIN=alerts.54link.ng

# ── PostgreSQL ────────────────────────────────────────────────────────────────
POSTGRES_DB=54link
POSTGRES_USER=54link
POSTGRES_PASSWORD=CHANGE_ME_STRONG_PASSWORD_32CHARS
POSTGRES_PORT=5432
DATABASE_URL=postgresql://54link:CHANGE_ME_STRONG_PASSWORD_32CHARS@postgres:5432/54link

# ── Redis ─────────────────────────────────────────────────────────────────────
REDIS_PASSWORD=CHANGE_ME_REDIS_PASSWORD_24CHARS
REDIS_PORT=6379
REDIS_URL=redis://:CHANGE_ME_REDIS_PASSWORD_24CHARS@redis:6379

# ── Kafka ─────────────────────────────────────────────────────────────────────
KAFKA_PORT=9092
KAFKA_UI_USER=admin
KAFKA_UI_PASSWORD=CHANGE_ME_KAFKA_UI_PASSWORD

# ── TigerBeetle ───────────────────────────────────────────────────────────────
TIGERBEETLE_PORT=3001

# ── Temporal ──────────────────────────────────────────────────────────────────
TEMPORAL_PORT=7233

# ── Keycloak ──────────────────────────────────────────────────────────────────
KEYCLOAK_PORT=8080
KEYCLOAK_ADMIN=admin
KEYCLOAK_ADMIN_PASSWORD=CHANGE_ME_KEYCLOAK_ADMIN_PASSWORD
KEYCLOAK_REALM=54link
KEYCLOAK_CLIENT_ID=pos-shell
KEYCLOAK_CLIENT_SECRET=CHANGE_ME_KEYCLOAK_CLIENT_SECRET

# ── Permify ───────────────────────────────────────────────────────────────────
PERMIFY_PORT=3476

# ── APISIX ────────────────────────────────────────────────────────────────────
APISIX_ADMIN_KEY=CHANGE_ME_APISIX_ADMIN_KEY_32CHARS
APISIX_VIEWER_KEY=CHANGE_ME_APISIX_VIEWER_KEY_32CHARS

# ── HashiCorp Vault ───────────────────────────────────────────────────────────
VAULT_PORT=8200
VAULT_ROOT_TOKEN=CHANGE_ME_VAULT_ROOT_TOKEN
VAULT_APP_TOKEN=CHANGE_ME_VAULT_APP_TOKEN

# ── Application ───────────────────────────────────────────────────────────────
NODE_ENV=production
JWT_SECRET=CHANGE_ME_JWT_SECRET_64CHARS_MINIMUM_FOR_HS512
LOG_LEVEL=info

# ── Manus OAuth (dev/staging only) ────────────────────────────────────────────
VITE_APP_ID=your-manus-app-id
OAUTH_SERVER_URL=https://api.manus.im
VITE_OAUTH_PORTAL_URL=https://manus.im
VITE_FRONTEND_FORGE_API_KEY=your-forge-api-key
VITE_FRONTEND_FORGE_API_URL=https://api.manus.im
BUILT_IN_FORGE_API_KEY=your-built-in-forge-api-key
BUILT_IN_FORGE_API_URL=https://api.manus.im

# ── AWS (S3 for firmware OTA) ─────────────────────────────────────────────────
AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
AWS_REGION=us-east-1
S3_BUCKET=54link-firmware

# ── FIDO2 ─────────────────────────────────────────────────────────────────────
FIDO2_RP_ID=54link.ng
FIDO2_RP_NAME=54Link POS
FIDO2_ORIGIN=https://54link.ng

# ── SMTP ──────────────────────────────────────────────────────────────────────
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=alerts@54link.ng
SMTP_PASS=CHANGE_ME_SMTP_PASSWORD
SMTP_FROM=noreply@54link.ng

# ── Grafana ───────────────────────────────────────────────────────────────────
GRAFANA_USER=admin
GRAFANA_PASSWORD=CHANGE_ME_GRAFANA_PASSWORD

# ── WhatsApp Business API ─────────────────────────────────────────────────────
WHATSAPP_TOKEN=CHANGE_ME_WHATSAPP_TOKEN
WHATSAPP_PHONE_ID=CHANGE_ME_WHATSAPP_PHONE_ID

# ── Slack (Alertmanager notifications) ───────────────────────────────────────
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/CHANGE_ME

# ── PagerDuty (escalation) ────────────────────────────────────────────────────
PAGERDUTY_INTEGRATION_KEY=CHANGE_ME_PAGERDUTY_KEY

# ── Workflow Orchestrator ─────────────────────────────────────────────────────
KEYCLOAK_CLIENT_SECRET_WORKFLOW=CHANGE_ME_WORKFLOW_CLIENT_SECRET
36 changes: 36 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# 54Link POS Shell — Code Owners
# These owners are automatically requested for review on PRs.

# Global owners (required for all PRs)
* @54link/platform-team

# Security-sensitive files require security team review
server/_core/ @54link/security-team @54link/platform-team
.github/workflows/ @54link/security-team @54link/platform-team
.gitleaks.toml @54link/security-team
scripts/rotate-secrets.sh @54link/security-team
scripts/bootstrap-production.sh @54link/security-team

# Financial logic requires fintech team review
server/routers/transactions.ts @54link/fintech-team @54link/platform-team
server/routers/settlement.ts @54link/fintech-team @54link/platform-team
server/routers/agentManagement.ts @54link/fintech-team

# CBN compliance requires compliance team review
services/python/cbn-reporting-engine/ @54link/compliance-team @54link/platform-team
server/routers/cbnReporting.ts @54link/compliance-team

# MDM requires device team review
server/routers/mdm.ts @54link/device-team @54link/platform-team
services/go/mdm-compliance-engine/ @54link/device-team
android-native/ @54link/device-team

# Database schema changes require DBA review
drizzle/schema.ts @54link/dba-team @54link/platform-team
drizzle/ @54link/dba-team

# Infrastructure changes require DevOps review
docker-compose*.yml @54link/devops-team
infra/ @54link/devops-team
monitoring/ @54link/devops-team
nginx.conf @54link/devops-team
104 changes: 104 additions & 0 deletions .github/branch-protection.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
{
"_comment": "GitHub Branch Protection Rules for 54Link POS Shell",
"_description": "Apply via: scripts/setup-branch-protection.sh",
"_docs": "https://docs.github.com/en/rest/branches/branch-protection",

"main": {
"required_status_checks": {
"strict": true,
"contexts": [
"Secret Scanning (Gitleaks)",
"Snyk CVE Scan",
"Type check",
"Lint",
"Unit tests (Vitest)",
"Production build",
"Go services build & test",
"Python services test",
"Playwright Tests (1/3)",
"Playwright Tests (2/3)",
"Playwright Tests (3/3)",
"OWASP ZAP DAST Scan",
"Prometheus alert lint"
]
},
"enforce_admins": true,
"required_pull_request_reviews": {
"dismiss_stale_reviews": true,
"require_code_owner_reviews": true,
"required_approving_review_count": 2,
"require_last_push_approval": true
},
"restrictions": null,
"allow_force_pushes": false,
"allow_deletions": false,
"block_creations": false,
"required_conversation_resolution": true,
"lock_branch": false,
"allow_fork_syncing": false,
"required_linear_history": true,
"required_signatures": false
},

"develop": {
"required_status_checks": {
"strict": true,
"contexts": [
"Secret Scanning (Gitleaks)",
"Type check",
"Lint",
"Unit tests (Vitest)",
"Production build"
]
},
"enforce_admins": false,
"required_pull_request_reviews": {
"dismiss_stale_reviews": true,
"require_code_owner_reviews": false,
"required_approving_review_count": 1,
"require_last_push_approval": false
},
"restrictions": null,
"allow_force_pushes": false,
"allow_deletions": false,
"block_creations": false,
"required_conversation_resolution": true,
"lock_branch": false,
"allow_fork_syncing": true,
"required_linear_history": false,
"required_signatures": false
},

"release/*": {
"required_status_checks": {
"strict": true,
"contexts": [
"Secret Scanning (Gitleaks)",
"Snyk CVE Scan",
"Type check",
"Lint",
"Unit tests (Vitest)",
"Production build",
"Playwright Tests (1/3)",
"Playwright Tests (2/3)",
"Playwright Tests (3/3)"
]
},
"enforce_admins": true,
"required_pull_request_reviews": {
"dismiss_stale_reviews": true,
"require_code_owner_reviews": true,
"required_approving_review_count": 2,
"require_last_push_approval": true
},
"restrictions": null,
"allow_force_pushes": false,
"allow_deletions": false,
"block_creations": false,
"required_conversation_resolution": true,
"lock_branch": false,
"allow_fork_syncing": false,
"required_linear_history": true,
"required_signatures": false
}
}
Loading
Loading