Skip to content

feat(treasury): add durable audit events for treasury multisig state changes #187 - #253

Merged
K1NGD4VID merged 2 commits into
mergepay:mainfrom
Andreas2410:feat/treasury-multisig-audit-events
Sep 2, 2026
Merged

feat(treasury): add durable audit events for treasury multisig state changes #187#253
K1NGD4VID merged 2 commits into
mergepay:mainfrom
Andreas2410:feat/treasury-multisig-audit-events

Conversation

@Andreas2410

Copy link
Copy Markdown

Overview

This PR adds durable audit events for treasury multisig state changes, ensuring every treasury multisig state transition produces an audit event as required by issue #187.

Related Issue

Closes #187

Changes

Audit Events

  • [ADD] src/routes/treasury.ts

    • Added treasury.deposit.created audit event when a deposit TreasuryTransaction is created.
    • Added treasury.withdrawal.created audit event when a withdrawal TreasuryTransaction is created.
    • Both events include groupId, userId, entityType, entityId, and safe metadata (amount, asset, destination, status).
    • Auth checks (requireMembership/requireAdmin) gate audit writes.
  • [ADD] src/services/treasury-proposals.ts

    • Added treasury.proposal.failed audit event in the mergeAndSubmit() catch block when Stellar submission fails.
    • Uses the existing best-effort audit() helper (swallows errors to avoid blocking the request).

Tests

  • [ADD] tests/treasury.test.ts

    • writes an audit event when a deposit is created — verifies treasury.deposit.created audit log entry.
    • writes an audit event when a withdrawal is created — verifies treasury.withdrawal.created audit log entry.
  • [ADD] tests/treasury-proposals.test.ts

    • writes an audit event when Stellar submission fails — verifies treasury.proposal.failed audit log entry.

Verification Results

npm run lint — ✅ passes cleanly
npx vitest run tests/treasury.test.ts — ✅ 9/9 passed
npx vitest run tests/treasury-proposals.test.ts — ✅ 13/13 passed
npx vitest run — ✅ 698/718 passed (20 pre-existing failures unrelated to this change)

Acceptance Criteria

Criterion Status
Deposit creation emits audit event treasury.deposit.created
Withdrawal creation emits audit event treasury.withdrawal.created
Proposal submission failure emits audit event treasury.proposal.failed
No private keys, JWTs, or full signed XDRs in metadata ✅ Only safe fields logged
Auth checks gate audit writes requireMembership/requireAdmin already enforced
Best-effort audit does not block requests ✅ Uses audit() helper

…changes

- Add treasury.deposit.created audit event on deposit creation
- Add treasury.withdrawal.created audit event on withdrawal creation
- Add treasury.proposal.failed audit event when Stellar submission fails
- Add tests for all three audit event paths

Closes mergepay#187
@drips-wave

drips-wave Bot commented Aug 26, 2026

Copy link
Copy Markdown

@Andreas2410 Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

@mergekeeper

mergekeeper Bot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Needs review

Linked to #187, but the diff does not match the issue scope.

The PR implements some deposit, withdrawal, and failure audit logging but is incomplete as it misses signature updates, submissions, confirmations, and rejections required by the issue.

Reviewed commit: 500a9dd7c26c49a6573466fb75d8153f6d0ee201.

@K1NGD4VID
K1NGD4VID merged commit ace73ef into mergepay:main Sep 2, 2026
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add durable audit events for treasury multisig state changes

2 participants