Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
244 commits
Select commit Hold shift + click to select a range
2509871
feat: add webhook delivery dead-letter queue (#435)
Philzwrist07 Apr 26, 2026
284c4e3
fix: cooldown boundary test, batch size config, daily limit event, he…
ambermartin681 Apr 26, 2026
59fda95
feat: db indexes, admin audit log, repository pattern, OpenTelemetry
joel-metal Apr 26, 2026
c877c4f
feat: multi-currency anchor filter, proof hash display, tx search/fil…
hman38705 Apr 26, 2026
187a967
feat: add CSP and security headers to frontend (#448)
David-Ochee Apr 26, 2026
12db16f
feat: add per-group rate limiting with Retry-After and Prometheus cou…
David-Ochee Apr 26, 2026
b433c0e
security: validate anchor domain against stellar.toml before acceptin…
David-Ochee Apr 26, 2026
d04e36f
feat: add database migration runner with version tracking (#451)
David-Ochee Apr 26, 2026
198d5f0
fix: close AnchorSelector dropdown on outside tap on mobile (#445)
Gloriachinedu Apr 26, 2026
e0ef9d2
feat: add KYC status auto-polling to KycStatusBadge (#444)
Gloriachinedu Apr 26, 2026
7caadb7
feat: add FX rate preview on review step in SendMoneyFlow (#446)
Gloriachinedu Apr 26, 2026
b2ab079
feat: add transaction receipt download (PDF/JSON) to TransactionHisto…
Gloriachinedu Apr 26, 2026
6ae2a94
feat: Add error boundary component #443
Gina-georgina Apr 26, 2026
fd347b0
feat/fix: SDK events, FX 429 fallback, FX staleness metrics, SEP-24 a…
devSoniia Apr 26, 2026
55cd522
fix: FX rate cache graceful 429 handling with stale fallback
devSoniia Apr 26, 2026
4c9fada
feat: FX rate staleness metrics and Prometheus alert rules
devSoniia Apr 26, 2026
6ed6d9f
fix: SEP-24 poller anchor timeout on pending_anchor status
devSoniia Apr 26, 2026
83f0455
feat: SDK subscribeToRemittanceEvents for real-time updates
devSoniia Apr 26, 2026
f80a9e6
feat: WebSocket server for real-time remittance status updates
Emmanard Apr 26, 2026
27f3193
feat: add WebhookSubscriptions admin page (#436)
jessicanath Apr 26, 2026
879278a
feat: add AnchorManagement admin page (#437)
jessicanath Apr 26, 2026
a194f87
feat: add DisputeResolution admin page (#438)
jessicanath Apr 26, 2026
4f51ef4
feat: add AgentManagement admin page (#439)
jessicanath Apr 26, 2026
2e76255
feat(sdk): add retry logic with exponential backoff for RPC failures …
Magada06 Apr 26, 2026
016fc49
feat: add SEP-24 expired transaction refund flow (#434)
Philzwrist07 Apr 26, 2026
7ba226d
feat(sdk): add governance proposal methods (#427)
Magada06 Apr 26, 2026
64ff3b4
feat: add DB connection pool health check to /health endpoint (#432)
Philzwrist07 Apr 26, 2026
9a8ba48
fix(abuse_protection): prune timestamps on early return, cap Vec size…
Magada06 Apr 26, 2026
e10c08f
fix(circuit_breaker): scope vote count to pause sequence (#424)
Magada06 Apr 26, 2026
f8893b1
feat: add on-chain agent performance metrics (#425)
Magada06 Apr 26, 2026
df88848
fix: address #467 - bounty contribution ($500.0)
carycooper777 Apr 26, 2026
ed32cdd
fix: scope unpause vote count to pause sequence (#424)
Philzwrist07 Apr 26, 2026
323deb1
Merge pull request #488 from Philzwrist07/feat/webhook-dead-letter-queue
Haroldwonder Apr 26, 2026
24c2fba
Merge branch 'main' into feat/db-indexes-audit-log-repositories-otel
Haroldwonder Apr 26, 2026
ed0b287
Merge pull request #489 from joel-metal/feat/db-indexes-audit-log-rep…
Haroldwonder Apr 26, 2026
5f9e10b
Merge pull request #490 from hman38705/feat/multi-currency-anchor-pro…
Haroldwonder Apr 26, 2026
21fdc3b
Merge pull request #491 from ambermartin681/fix/cooldown-batch-limit-…
Haroldwonder Apr 26, 2026
31bdbf7
Merge pull request #492 from David-Ochee/feat/448-csp-headers
Haroldwonder Apr 26, 2026
56fea4c
Merge branch 'main' into feat/449-rate-limiting
Haroldwonder Apr 26, 2026
79cf8f7
Merge pull request #493 from David-Ochee/feat/449-rate-limiting
Haroldwonder Apr 26, 2026
33549bc
Merge pull request #494 from David-Ochee/feat/450-anchor-toml-validation
Haroldwonder Apr 26, 2026
c7153bf
feat: add Freighter wallet transaction signing flow to SendMoneyFlow …
soma-enyi Apr 26, 2026
6a4d7aa
feat: add WalletConnection session persistence across page reloads (#…
soma-enyi Apr 26, 2026
26d1b13
feat: add i18n internationalization support to frontend components (#…
soma-enyi Apr 26, 2026
d6ebc88
feat: add remittance amount limits display in SendMoneyFlow (#467)
soma-enyi Apr 26, 2026
ba46b75
fix(#468): pass VITE_HORIZON_URL to HorizonService singleton
summer-0ma Apr 26, 2026
c9d905f
feat(#469): add contract_events table, event persistence, and GET /ap…
summer-0ma Apr 26, 2026
1c53c82
feat(#470): expand AgentPanel with payout confirmation, mark-failed, …
summer-0ma Apr 26, 2026
72bcdae
feat(#471): add cancel flow with confirmation dialog and refund tx ha…
summer-0ma Apr 26, 2026
5e57a95
feat: add GET /api/remittances endpoint with agent filter and paginat…
Guddy0101 Apr 27, 2026
4edc697
feat: add GET /api/admin/fees endpoint with fee breakdown and admin a…
Guddy0101 Apr 27, 2026
1ed5520
refactor: replace magic numbers in abuse_protection.rs with named con…
Guddy0101 Apr 27, 2026
321fb07
refactor: add emit_event! macro to reduce event emission boilerplate …
Guddy0101 Apr 27, 2026
97e8c4e
feat(#476): add extend_storage_ttl admin function and TTL scheduler job
blessedcodey-boy Apr 27, 2026
7eeb17d
feat(#477): add BatchCreateEntry currency/country fields, MAX_BATCH_S…
blessedcodey-boy Apr 27, 2026
a83ed26
feat(#478): add getDailyLimitStatus SDK method and display in SendMon…
blessedcodey-boy Apr 27, 2026
da3292f
fix(#479): respect content_type from subscriber config in webhook dis…
blessedcodey-boy Apr 27, 2026
2817288
Merge branch 'main' into feat/451-migration-runner
Haroldwonder Apr 27, 2026
9d43018
Merge pull request #495 from David-Ochee/feat/451-migration-runner
Haroldwonder Apr 27, 2026
09e9ab0
Merge pull request #498 from Gloriachinedu/feat/446-fx-rate-preview
Haroldwonder Apr 27, 2026
641f816
Merge pull request #497 from Gloriachinedu/feat/444-kyc-status-polling
Haroldwonder Apr 27, 2026
034f897
Merge pull request #496 from Gloriachinedu/fix/445-anchor-selector-mo…
Haroldwonder Apr 27, 2026
73cd981
Merge branch 'main' into feat/447-transaction-receipt-download
Haroldwonder Apr 27, 2026
d053019
Merge pull request #499 from Gloriachinedu/feat/447-transaction-recei…
Haroldwonder Apr 27, 2026
314fbd8
Merge branch 'main' into feat/issues-429-430-431-433
Haroldwonder Apr 27, 2026
94adb53
Merge pull request #500 from devSoniia/feat/issues-429-430-431-433
Haroldwonder Apr 27, 2026
a305b55
Merge pull request #501 from devSoniia/fix/430-fx-rate-429-handling
Haroldwonder Apr 27, 2026
af04b7f
Merge branch 'main' into feat/431-fx-staleness-metrics
Haroldwonder Apr 27, 2026
25cea0a
Merge pull request #502 from devSoniia/feat/431-fx-staleness-metrics
Haroldwonder Apr 27, 2026
0790f3b
Merge pull request #503 from devSoniia/fix/433-sep24-anchor-timeout
Haroldwonder Apr 27, 2026
59639ea
Merge pull request #504 from devSoniia/feat/429-sdk-event-subscription
Haroldwonder Apr 27, 2026
3038a46
Merge branch 'main' into feat/websocket-remittance-status
Haroldwonder Apr 27, 2026
a676197
Merge pull request #505 from Emmanard/feat/websocket-remittance-status
Haroldwonder Apr 27, 2026
e66d746
Merge pull request #506 from jessicanath/feat/webhook-subscriptions-a…
Haroldwonder Apr 27, 2026
348bd3a
Merge pull request #507 from jessicanath/feat/anchor-catalog-admin-437
Haroldwonder Apr 27, 2026
7786fcc
Merge pull request #508 from jessicanath/feat/dispute-resolution-admi…
Haroldwonder Apr 27, 2026
f6963ff
Merge pull request #509 from jessicanath/feat/agent-management-admin-439
Haroldwonder Apr 27, 2026
955dffc
Merge branch 'main' into feat/428-sdk-retry-backoff
Haroldwonder Apr 27, 2026
26e9fcb
Merge pull request #510 from Magada06/feat/428-sdk-retry-backoff
Haroldwonder Apr 27, 2026
8b21c68
Merge branch 'main' into feat/sep24-expired-refund-flow
Haroldwonder Apr 27, 2026
f9c8389
Merge pull request #511 from Philzwrist07/feat/sep24-expired-refund-flow
Haroldwonder Apr 27, 2026
5d8c8a6
Merge branch 'main' into feat/427-sdk-governance-proposals
Haroldwonder Apr 27, 2026
d2814d9
Merge pull request #512 from Magada06/feat/427-sdk-governance-proposals
Haroldwonder Apr 27, 2026
4de81b6
Merge branch 'main' into feat/health-db-probe
Haroldwonder Apr 27, 2026
d863d99
Merge pull request #513 from Philzwrist07/feat/health-db-probe
Haroldwonder Apr 27, 2026
1617f3d
Merge pull request #514 from Magada06/fix/426-prune-timestamps-on-ear…
Haroldwonder Apr 27, 2026
fb43163
Merge pull request #515 from Magada06/fix/424-circuit-breaker-vote-cy…
Haroldwonder Apr 27, 2026
ec88b0f
Merge pull request #516 from Magada06/feat/425-agent-performance-metrics
Haroldwonder Apr 27, 2026
f7e4178
Merge pull request #517 from carycooper777/bounty/1777239619
Haroldwonder Apr 27, 2026
a1e4a50
Merge branch 'main' into feat/issues-464-465-466-467
Haroldwonder Apr 27, 2026
7d0838d
Merge pull request #518 from soma-enyi/feat/issues-464-465-466-467
Haroldwonder Apr 27, 2026
f635633
Merge pull request #519 from summer-0ma/feat/issues-468-469-470-471
Haroldwonder Apr 27, 2026
8cff084
Merge branch 'main' into feat/issues-472-473-474-475
Haroldwonder Apr 27, 2026
b5642d3
Merge pull request #520 from Guddy0101/feat/issues-472-473-474-475
Haroldwonder Apr 27, 2026
8ff89b8
Merge branch 'main' into feat/issues-476-477-478-479
Haroldwonder Apr 27, 2026
32fcc4c
Merge pull request #521 from blessedcodey-boy/feat/issues-476-477-478…
Haroldwonder Apr 27, 2026
c135b29
feat: Enhance ErrorBoundary component with styling and error reporting
Gina-georgina Apr 27, 2026
479bafb
Merge branch 'main' into fix/circuit-breaker-vote-count-seq
Haroldwonder Apr 27, 2026
21298e8
Merge pull request #522 from Philzwrist07/fix/circuit-breaker-vote-co…
Haroldwonder Apr 27, 2026
def0ee7
feat: Add ARIA live region for transaction status updates
Gina-georgina Apr 27, 2026
d88fa0a
feat: Enhance loading skeleton states for TransactionHistory
Gina-georgina Apr 27, 2026
bb46b27
feat: Add mobile-responsive layout to SendMoneyFlow component
Gina-georgina Apr 27, 2026
9d30c63
feat: implement Freighter signing, wallet persistence, and i18n (#464…
soma-enyi Apr 27, 2026
f1d6505
Merge branch 'main' into feature/issue-443-error-boundary
Haroldwonder Apr 27, 2026
cfb1415
Merge pull request #523 from Gina-georgina/feature/issue-443-error-bo…
Haroldwonder Apr 27, 2026
3fbafba
Merge pull request #524 from Gina-georgina/feature/issue-442-aria-liv…
Haroldwonder Apr 27, 2026
a945dd3
Merge pull request #525 from Gina-georgina/feature/issue-441-loading-…
Haroldwonder Apr 27, 2026
c8bfb2e
Merge pull request #526 from Gina-georgina/feature/issue-440-mobile-r…
Haroldwonder Apr 27, 2026
42c5253
Merge pull request #527 from soma-enyi/feat/issues-464-465-466-467
Haroldwonder Apr 27, 2026
15b0806
feat: implement issues #538, #539, #540, #541
Austinaminu2 Apr 28, 2026
1b39eae
feat: implement issues #534, #535, #536, #537
Austinaminu2 Apr 28, 2026
7428aa1
Merge pull request #548 from PrettyEmerald001/feat/issues-538-539-540…
Haroldwonder Apr 28, 2026
a9d5ac9
Merge pull request #549 from The-moving-man/feat/issues-534-535-536-537
Haroldwonder Apr 28, 2026
e73e725
Add property-based testing for fee calculations and update toolchain …
Mmesolove Apr 28, 2026
44c38d3
feat: Add comprehensive property-based testing for fee calculations
Mmesolove Apr 28, 2026
e293f1d
Resolve merge conflict in PROPERTY_BASED_TESTING.md
Mmesolove Apr 28, 2026
b33922e
feat: Add comprehensive testnet setup documentation and automation
Mmesolove Apr 28, 2026
7eaefcd
feat: cursor pagination, benchmarks, and stellar.toml completion
Markodiba Apr 28, 2026
5cb5884
Merge pull request #550 from Mmesolove/feature/property-based-fee-tes…
Haroldwonder Apr 28, 2026
e207dee
Merge pull request #551 from Mmesolove/feature/testnet-setup-document…
Haroldwonder Apr 28, 2026
bdfebab
Merge pull request #552 from Markodiba6399/feat/security-pagination-b…
Haroldwonder Apr 28, 2026
1a868e0
feat: KYC expiry notifications, admin confirmation, corridor analytic…
Apr 28, 2026
6e31910
Merge pull request #553 from Markadrian6399/feat/480-481-482-484-kyc-…
Haroldwonder Apr 28, 2026
3bdea90
fix: Verify withdraw_integrator_fees returns NoFeesToWithdraw when ba…
Nonso-Eze Apr 28, 2026
a559035
feat: Add dark mode support with CSS custom properties and theme toggle
Nonso-Eze Apr 28, 2026
0416c07
docs: Add CHANGELOG.md and automated release workflow
Nonso-Eze Apr 28, 2026
f2d16da
feat: Propagate correlation ID from API request through to webhook de…
Nonso-Eze Apr 28, 2026
ae399ca
Merge fix/543: Verify withdraw_integrator_fees zero balance guard
Nonso-Eze Apr 28, 2026
197f34c
Merge feat/542: Add dark mode support
Nonso-Eze Apr 28, 2026
f8d30cd
Merge docs/544: Add CHANGELOG and release workflow
Nonso-Eze Apr 28, 2026
261e7c6
Merge feat/545: Propagate correlation ID end-to-end
Nonso-Eze Apr 28, 2026
071acc3
fix: Correct rust-toolchain.toml syntax and use platform-agnostic sta…
Nonso-Eze Apr 28, 2026
62b768b
docs: Add comprehensive PR summary for issues #542, #543, #544, #545
Nonso-Eze Apr 28, 2026
609730d
fix(#555): Add TTL-based cleanup for stale sliding window entries
famvilianity-eng Apr 28, 2026
9d854ec
fix(#559): Replace O(n²) pop_front loop with O(n) filter in abuse_pro…
chukwudiikeh Apr 28, 2026
0db1b5d
fix(#554): Add overflow protection in fee accumulation
famvilianity-eng Apr 28, 2026
b200dd6
fix(#558): Add migration state flag and checkpoint/resume semantics
chukwudiikeh Apr 28, 2026
d8c6c26
fix(#557): Auto-delete expired governance proposals on expiry
chukwudiikeh Apr 28, 2026
e2724e1
fix(#546): Add request body validation and sanitization to admin API
famvilianity-eng Apr 28, 2026
138a24e
feat(#547): Implement multi-currency support
famvilianity-eng Apr 28, 2026
14e4c0f
fix(#556): Add batch size validation to compute_net_settlements
chukwudiikeh Apr 28, 2026
bbb0a52
fix: include integrator_fee in FeeBreakdown validation
goldemaverick-ui Apr 28, 2026
fa9103a
feat: add property-based tests for state machine transition invariant…
fejilaup-cloud Apr 28, 2026
003d830
Merge pull request #576 from Christopherdominic/pr/multi-issue-fixes-…
Haroldwonder Apr 28, 2026
31d9086
Merge pull request #577 from famvilianity-eng/fix/issues-554-555-546-547
Haroldwonder Apr 28, 2026
295d2dc
Merge pull request #578 from goldemaverick-ui/fix/issue-560-integrato…
Haroldwonder Apr 28, 2026
5f7f04b
Merge pull request #579 from chukwudiikeh/fix/performance-and-safety-…
Haroldwonder Apr 28, 2026
d309334
Merge pull request #580 from fejilaup-cloud/feature/property-based-te…
Haroldwonder Apr 28, 2026
dd33a6d
fix/feat: runbook, pause banner, dispute events, is_terminal docs (#4…
Apr 28, 2026
cfc8f01
fix: remove validate_address no-op and document rationale (#218)
GhostStylez Apr 28, 2026
ea17cca
Merge remote-tracking branch 'markadrian/main' into fix/483-485-528-5…
Apr 28, 2026
1a2254b
fix: resolve issues #378, #379, #365
GhostStylez Apr 28, 2026
727d941
Merge branch 'main' into fix/issues-365-378-379
GhostStylez Apr 28, 2026
90db28b
Merge branch 'main' into fix/483-485-528-529-runbook-pause-banner-dis…
Markodiba Apr 28, 2026
b6cb364
feat: add Toast component, validate anchor TOML in SEP-24, add webhoo…
king-aj-the-first Apr 28, 2026
a8bdbd3
fix ci linting and stellar/url asset config
miss-yusrah Apr 28, 2026
4be670f
Harden wallet sessions and type dispute flow
success-OG Apr 28, 2026
71f2ec4
feat: add GitHub Actions CI pipeline for backend (#78)
Apr 28, 2026
49693d5
Merge branch 'main' into fix/483-485-528-529-runbook-pause-banner-dis…
Haroldwonder Apr 28, 2026
378d75d
Merge pull request #581 from Markodiba6399/fix/483-485-528-529-runboo…
Haroldwonder Apr 28, 2026
e6c50ff
Merge branch 'main' into fix/validate-address-no-op-218
Haroldwonder Apr 28, 2026
aa350cc
Merge pull request #582 from GhostStylez/fix/validate-address-no-op-218
Haroldwonder Apr 28, 2026
1c46812
Merge pull request #583 from GhostStylez/fix/issues-365-378-379
Haroldwonder Apr 28, 2026
383bcfb
Merge pull request #584 from Markodiba/fix/483-485-528-529-runbook-pa…
Haroldwonder Apr 28, 2026
effea6a
Merge pull request #585 from king-aj-the-first/feat/database
Haroldwonder Apr 28, 2026
e5c4778
Merge pull request #586 from miss-yusrah/feat/transaction
Haroldwonder Apr 28, 2026
be40c46
Merge pull request #587 from success-OG/feat/wallet-connection
Haroldwonder Apr 28, 2026
9f09133
Merge pull request #588 from Gina-georgina/feat/backend-ci-pipeline
Haroldwonder Apr 28, 2026
777e667
Fix compilation errors: missing error variants, type mismatches, wron…
Haroldwonder Apr 29, 2026
83197bc
Merge pull request #593 from Haroldwonder/fix/compilation-errors
Haroldwonder Apr 29, 2026
f5fe185
Fix Ledger::get/set -> with_mut for Soroban SDK 25.x compatibility
Haroldwonder Apr 29, 2026
6b7a8ff
fix(fx-rate-cache): include stale_age_seconds and warn on stale rate age
had3sgames Apr 29, 2026
00b5a9e
fix(database): avoid connection leak when initDatabase fails and guar…
had3sgames Apr 29, 2026
2434e1d
Fix compilation errors: SDK API updates, type mismatches, test rewrites
Haroldwonder Apr 29, 2026
1c120a5
Merge pull request #596 from Haroldwonder/fix/compilation-errors
Haroldwonder Apr 29, 2026
2462241
fix: resolve 10 failing tests after refactor
Realericky Apr 29, 2026
f647658
feat: implement issues #589-#592 (multi-currency, batch, reputation, …
Realericky Apr 29, 2026
6418c20
Merge pull request #594 from had3sgames/fix/fx-rate-cache-stale-age
Haroldwonder Apr 29, 2026
dbc93c2
Merge pull request #595 from had3sgames/fix/database-init-connection-…
Haroldwonder Apr 29, 2026
4a8b2c4
Merge branch 'main' into fix/failing-tests-after-refactor
Haroldwonder Apr 29, 2026
55c4ca0
Merge pull request #597 from Realericky/fix/failing-tests-after-refactor
Haroldwonder Apr 29, 2026
97fb675
fix: adaptive rate limiting with exponential backoff for KYC polling
May 26, 2026
b91dd83
fix: DB-backed idempotency check for duplicate webhook deliveries
May 26, 2026
c497ca0
Merge pull request #598 from Happybello365/fix/kyc-adaptive-rate-limi…
Haroldwonder May 26, 2026
b13a34c
Merge pull request #599 from Happybello365/fix/webhook-idempotency-check
Haroldwonder May 26, 2026
2157d83
fix: add validation to migrate_recipient_hashes function
GazzyLee May 30, 2026
75ff754
fix: verify caller is assigned agent in confirm_payout, validate with…
observerr411 May 31, 2026
606e610
fix: validate WASM hash is non-null in simulate_upgrade
abore9769 May 31, 2026
9d159f3
fix: enforce MAX_VEC_SIZE > max per-window limit with compile-time as…
abore9769 May 31, 2026
53fe513
fix: extend per-agent persistent key TTLs in extend_critical_ttls
abore9769 May 31, 2026
ae728a4
fix: reject votes in do_vote_unpause when quorum already reached
abore9769 May 31, 2026
3388663
fix: extend RollbackSnapshot to capture AgentStats and AgentDailyCap
Mozez155 May 31, 2026
604dfe6
fix: return skipped IDs from compute_net_settlements for Failed/Dispu…
Mozez155 May 31, 2026
162c1a7
fix: replace hardcoded 86400 with DAILY_LIMIT_WINDOW_SECONDS in storage
Mozez155 May 31, 2026
6d1d165
fix: clear active_fee_proposal marker in cleanup_expired_proposals
Mozez155 May 31, 2026
3829777
fix: auto-refund on mark_failed, fee overflow safety, escrow TTL exte…
ussyalfaks May 31, 2026
99eca8d
fix(tracker,frontend,sdk): live-region stability, polling timers, web…
unixfundz May 31, 2026
a77a13a
fix: apply MIN_FEE floor to FeeStrategy::Flat branch
joshuagit706 May 31, 2026
a53a27b
test: verify process_expired_remittances enforces MAX_EXPIRED_BATCH_SIZE
joshuagit706 May 31, 2026
124ca9c
fix: document AlreadyPaused variant and add circuit-breaker test cove…
joshuagit706 May 31, 2026
c734e38
docs: update README state machine to include Failed and Disputed states
joshuagit706 May 31, 2026
e31f080
fix: resolve issues #633 #634 #635 #636 (Stellar Wave batch)
Idaonoli May 31, 2026
1f53915
Merge pull request #722 from GazzyLee/fix/recipient-hash-validation
Haroldwonder May 31, 2026
2003782
Merge pull request #723 from observerr411/main
Haroldwonder May 31, 2026
49c7a4e
Merge pull request #724 from abore9769/main
Haroldwonder May 31, 2026
7af6eb4
Merge pull request #725 from Mozez155/fix/issues-604-605-606-607
Haroldwonder May 31, 2026
64983c7
Merge pull request #726 from ussyalfaks/fix/issues
Haroldwonder May 31, 2026
6dc5c52
Merge pull request #727 from unixfundz/fix/transaction-status-tracker…
Haroldwonder May 31, 2026
8a20a42
Merge pull request #729 from joshuagit706/fix/issues-600-601-602-603
Haroldwonder May 31, 2026
0205dee
Merge pull request #730 from Idaonoli/fix/issues-633-634-635-636
Haroldwonder May 31, 2026
c64f6fa
fix: implement sender remittance index and enforce max page size in g…
joshuagit706 Jun 1, 2026
92cdd90
fix: reject zero as a valid daily limit in set_daily_limit
joshuagit706 Jun 1, 2026
a61d388
test: add explicit tests verifying dispute_resolved event payload dis…
joshuagit706 Jun 1, 2026
6a7b707
test: add test proving timelock is enforced for single-admin proposal…
joshuagit706 Jun 1, 2026
d08d357
fix(backend): restore prototype chain on ValidationError for correct …
AnnabelJoe Jun 1, 2026
f379e61
fix(frontend): add retry/backoff and fallback cache for fetchRemittan…
AnnabelJoe Jun 1, 2026
3403e96
fix(frontend): add FX rate countdown and expiry warning on review ste…
AnnabelJoe Jun 1, 2026
d622d54
fix(sdk): document DailyLimitStatus units in stroops and add stroopsT…
AnnabelJoe Jun 1, 2026
b15c3bc
fix(#655): validate SIGNING_KEY and NETWORK_PASSPHRASE in fetchAnchor…
Vera3289 Jun 1, 2026
394082a
fix(#664): add pagination to fetchDisputes in DisputeResolution
Vera3289 Jun 1, 2026
725c604
fix(#663): add expired visual state to KycStatusBadge
Vera3289 Jun 1, 2026
505e2fb
fix(#672): use Object.values check for numeric ErrorCode enum in pars…
Vera3289 Jun 1, 2026
07bca44
fix: resolve issues #685 #686 #687 #688
Good-Coded Jun 1, 2026
704dcfc
fix(#678): prevent self-transfer in isValidRecipient
jessicanath Jun 1, 2026
17626d7
fix(#680): clear localStorage session on network mismatch
jessicanath Jun 1, 2026
5da9a8c
fix(#683): trap focus within AnchorSelector dropdown
jessicanath Jun 1, 2026
b8b55aa
fix(#677): add Content Security Policy headers in vite.config.js
jessicanath Jun 1, 2026
5540412
Merge pull request #731 from Akashi099/fix/issues-617-618-619-620
Haroldwonder Jun 1, 2026
575cba0
Merge pull request #732 from AnnabelJoe/fix/656-validation-error-export
Haroldwonder Jun 1, 2026
1f28dd9
Merge pull request #733 from AnnabelJoe/fix/667-horizon-rate-limit-retry
Haroldwonder Jun 1, 2026
c6bcc98
Merge pull request #734 from AnnabelJoe/fix/670-fx-rate-countdown
Haroldwonder Jun 1, 2026
b20a217
Merge pull request #735 from AnnabelJoe/fix/676-daily-limit-status-docs
Haroldwonder Jun 1, 2026
412c322
Merge pull request #736 from Vera3289/fix/655-anchor-toml-field-valid…
Haroldwonder Jun 1, 2026
cfb358d
Merge pull request #737 from Vera3289/fix/664-dispute-pagination
Haroldwonder Jun 1, 2026
27a36aa
Merge pull request #738 from Vera3289/fix/663-kyc-expired-state
Haroldwonder Jun 1, 2026
b069dd4
Merge pull request #739 from Vera3289/fix/672-error-code-validation
Haroldwonder Jun 1, 2026
139e555
Merge branch 'main' into fix/685-686-687-688-toast-dispute-governance…
Haroldwonder Jun 1, 2026
33328ef
Merge pull request #740 from Good-Coded/fix/685-686-687-688-toast-dis…
Haroldwonder Jun 1, 2026
17ad74f
Merge branch 'main' into fix/678-self-transfer-check
Haroldwonder Jun 1, 2026
b75ed8b
Merge pull request #741 from jessicanath/fix/678-self-transfer-check
Haroldwonder Jun 1, 2026
0cf7615
Merge branch 'main' into fix/680-clear-session-network-mismatch
Haroldwonder Jun 1, 2026
a8e117b
Merge pull request #742 from jessicanath/fix/680-clear-session-networ…
Haroldwonder Jun 1, 2026
542d0fe
Merge pull request #743 from jessicanath/fix/683-focus-trap-dropdown
Haroldwonder Jun 1, 2026
8f39509
Merge branch 'main' into fix/677-csp-headers
Haroldwonder Jun 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file added .codex
Empty file.
86 changes: 86 additions & 0 deletions .github/workflows/backend-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
name: Backend CI

on:
pull_request:
branches: [main, develop]
paths:
- "backend/**"
- ".github/workflows/backend-ci.yml"

defaults:
run:
working-directory: backend

jobs:
lint:
name: Lint
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: "20"
cache: npm
cache-dependency-path: backend/package-lock.json

- run: npm ci
- run: npm run lint

test:
name: Test & Coverage
runs-on: ubuntu-latest
timeout-minutes: 5

services:
postgres:
image: postgres:15-alpine
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: swiftremit_test
ports: ["5432:5432"]
options: >-
--health-cmd pg_isready
--health-interval 5s
--health-timeout 5s
--health-retries 5

steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: "20"
cache: npm
cache-dependency-path: backend/package-lock.json

- run: npm ci

- name: Run migrations
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/swiftremit_test
run: psql $DATABASE_URL -f migrations/webhook_schema.sql

- name: Run tests with coverage
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/swiftremit_test
NODE_ENV: test
run: npx vitest run --coverage --reporter=verbose

- name: Upload coverage report artifact
if: always()
uses: actions/upload-artifact@v4
with:
name: backend-coverage
path: backend/coverage/
retention-days: 7

- name: Post coverage summary as PR comment
if: always() && github.event_name == 'pull_request'
uses: davelosert/vitest-coverage-report-action@v2
with:
json-summary-path: backend/coverage/coverage-summary.json
github-token: ${{ secrets.GITHUB_TOKEN }}
name: Backend Coverage
18 changes: 17 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ jobs:
cache-dependency-path: backend/package-lock.json
- run: npm ci
working-directory: backend
- run: npm run lint || echo "Linter not configured yet"
- run: npm run lint
working-directory: backend

backend-test:
Expand Down Expand Up @@ -141,6 +141,21 @@ jobs:


# -- Frontend coverage --
frontend-lint:
name: Frontend lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20.x
cache: npm
cache-dependency-path: frontend/package-lock.json
- run: npm ci
working-directory: frontend
- run: npm run lint
working-directory: frontend

frontend-coverage:
name: Frontend coverage (vitest >= 95%)
runs-on: ubuntu-latest
Expand Down Expand Up @@ -181,6 +196,7 @@ jobs:
- backend-test
- api-lint
- api-test
- frontend-lint
- frontend-coverage
if: always()
steps:
Expand Down
112 changes: 112 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
name: Release

on:
push:
tags:
- 'v*'

permissions:
contents: write
packages: write

jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
registry-url: 'https://registry.npmjs.org'

- name: Extract version from tag
id: version
run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT

- name: Verify CHANGELOG entry
run: |
if ! grep -q "## \[${{ steps.version.outputs.VERSION }}\]" CHANGELOG.md; then
echo "Error: No CHANGELOG entry found for version ${{ steps.version.outputs.VERSION }}"
exit 1
fi

- name: Install SDK dependencies
working-directory: sdk
run: npm ci

- name: Build SDK
working-directory: sdk
run: npm run build

- name: Update SDK package version
working-directory: sdk
run: npm version ${{ steps.version.outputs.VERSION }} --no-git-tag-version

- name: Publish SDK to npm
working-directory: sdk
run: npm publish --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

- name: Generate release notes
id: release_notes
run: |
gh release create ${{ github.ref_name }} \
--title "Release ${{ steps.version.outputs.VERSION }}" \
--generate-notes \
--verify-tag
env:
GH_TOKEN: ${{ github.token }}

- name: Extract changelog for this version
id: changelog
run: |
VERSION="${{ steps.version.outputs.VERSION }}"
CHANGELOG=$(awk "/## \[$VERSION\]/,/## \[/" CHANGELOG.md | sed '$d' | tail -n +2)
echo "CHANGELOG<<EOF" >> $GITHUB_OUTPUT
echo "$CHANGELOG" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT

- name: Update release with changelog
run: |
gh release edit ${{ github.ref_name }} \
--notes "${{ steps.changelog.outputs.CHANGELOG }}"
env:
GH_TOKEN: ${{ github.token }}

build-artifacts:
runs-on: ubuntu-latest
needs: release
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
target: wasm32-unknown-unknown

- name: Install Soroban CLI
run: |
cargo install --locked soroban-cli --features opt

- name: Build contract
run: |
cargo build --target wasm32-unknown-unknown --release
soroban contract optimize \
--wasm target/wasm32-unknown-unknown/release/swiftremit.wasm \
--wasm-out swiftremit-optimized.wasm

- name: Upload contract artifact
run: |
gh release upload ${{ github.ref_name }} \
swiftremit-optimized.wasm \
--clobber
env:
GH_TOKEN: ${{ github.token }}
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,7 @@ backend/node_modules/

.kiro
.env.testnet.local

# Test artifacts
test_snapshots/
proptest-regressions/
57 changes: 57 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

### Added
- Dark mode support with CSS custom properties and theme toggle component
- Correlation ID propagation from API through to webhook delivery
- CHANGELOG.md following Keep a Changelog format
- Automated release workflow with GitHub Actions

### Fixed
- `withdraw_integrator_fees` correctly returns `NoFeesToWithdraw` when balance is zero

## [1.0.0] - 2024-01-15

### Added
- Escrow-based remittance system with USDC on Stellar/Soroban
- Agent network registration and management
- Automated fee collection and withdrawal
- Lifecycle state management (Pending, Processing, Completed, Cancelled)
- Role-based access control for all operations
- Comprehensive event emission for off-chain monitoring
- Cancellation support with full refund capability
- Admin controls for platform fee management
- Daily send limits per currency/country with rolling 24h windows
- Off-chain proof commitments with optional validation
- Asset verification via Stellar Expert API and stellar.toml
- Circuit breaker for emergency pause functionality
- Rate limiting and abuse protection
- Webhook system with HMAC signature verification
- Webhook delivery retry with exponential backoff
- Dead-letter queue for failed webhook deliveries
- KYC integration with anchor services
- FX rate caching and currency conversion API
- Transaction state machine with enforced transitions
- Health check endpoints for monitoring
- OpenAPI documentation
- Property-based testing for fee calculations
- Integration tests for contract upgrade scenarios
- Frontend React application with Stellar wallet integration
- TypeScript SDK for contract interaction
- PostgreSQL backend for off-chain data
- Docker containerization for all services
- CI/CD pipeline with GitHub Actions

### Security
- HMAC-SHA256 webhook signature verification
- XSS sanitization for user inputs
- Admin audit logging
- Blacklist functionality for malicious actors
- Token whitelist for approved assets

15 changes: 15 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,21 @@ name = "settlement_storage"
harness = false
required-features = ["benchmarks"]

[[bench]]
name = "fee_calculation"
harness = false
required-features = ["benchmarks"]

[[bench]]
name = "batch_expiry"
harness = false
required-features = ["benchmarks"]

[[bench]]
name = "abuse_protection"
harness = false
required-features = ["benchmarks"]

[profile.release]
opt-level = "z"
overflow-checks = true
Expand Down
53 changes: 53 additions & 0 deletions DEPLOYMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -330,6 +330,59 @@ stellar contract build

---

## Storage TTL Management

Soroban contracts use two storage tiers with different TTL behaviours:

| Storage type | Scope | Default TTL | Risk if expired |
|---|---|---|---|
| **Instance** | Contract-wide config (admin, fee, counters) | ~1 month | Contract becomes unusable |
| **Persistent** | Per-entity data (remittances, agents, limits) | ~1 month | Individual records lost |
| **Temporary** | Rate-limit windows, sliding windows | Short (hours) | Resets automatically — acceptable |

### Key audit

| Key | Storage | TTL strategy |
|---|---|---|
| `Admin`, `UsdcToken`, `PlatformFeeBps`, `RemittanceCounter`, `AccumulatedFees` | Instance | Extended by `extend_storage_ttl` |
| `Remittance(id)` | Persistent | Extended by `extend_storage_ttl` for all IDs up to counter |
| `AgentRegistered(addr)` | Persistent | Extended by `extend_storage_ttl` |
| `DailyLimit(currency, country)` | Persistent | Extended by `extend_storage_ttl` |
| `RateLimitEntry(addr)` | Temporary | Self-managed (TTL = window + 1 h) |
| `SlidingWindowEntry(addr, tag)` | Temporary | Self-managed (TTL = 2 × window) |

### Extending TTLs manually

```bash
stellar contract invoke \
--id $CONTRACT_ID \
--source admin \
--network testnet \
-- \
extend_storage_ttl \
--caller $ADMIN_ADDRESS \
--extend_by_ledgers 518400
```

`518400` ledgers ≈ 30 days at 5-second ledger time.

### Automated TTL extension (backend scheduler)

The backend scheduler runs `extendContractStorageTtl()` daily at midnight UTC.
Configure the following environment variables in `backend/.env`:

```env
CONTRACT_ID=your_contract_id
SOROBAN_RPC_URL=https://soroban-testnet.stellar.org
NETWORK_PASSPHRASE=Test SDF Network ; September 2015
ADMIN_SECRET_KEY=your_admin_secret_key
```

The job extends TTLs by **518 400 ledgers (~30 days)** each run, providing a
comfortable buffer before the next scheduled execution.

---

## Support

- **Documentation**: See README.md files in each directory
Expand Down
Loading
Loading