Skip to content

feat: implement issues #931-#934 (sunset tracking, staking NFTs, delegated governance, multi-currency analytics) - #973

Open
TheHalalHunter wants to merge 6 commits into
accesslayerorg:mainfrom
TheHalalHunter:feat/issues-931-934-key-analytics-and-governance
Open

TheHalalHunter wants to merge 6 commits into
accesslayerorg:mainfrom
TheHalalHunter:feat/issues-931-934-key-analytics-and-governance

Conversation

@TheHalalHunter

@TheHalalHunter TheHalalHunter commented Sep 26, 2026 •

Copy link
Copy Markdown

Summary

Implements four issues:

#931 — Sunset tracking endpoint

  • sunsetFlaggedAt on CreatorProfile + migration
  • KEY_SUNSET_FLAGGED ActivityType value
  • key-sunset-watch.service.ts with near-threshold + exceeded logic
  • processSunsetFlaggedEvents() indexer handler (idempotent)
  • GET /keys/sunset-watch (admin-only, sorted by inactivity desc)
  • KEY_SUNSET_INACTIVITY_THRESHOLD_DAYS env var (default 30)

#932 — Staking NFT position endpoints

  • StakingNft + StakingNftTransfer schema + migration
  • STAKE_NFT_MINTED / STAKE_NFT_TRANSFERRED ActivityType values
  • staking.service.ts read-model with Redis caching
  • staking-indexer.service.ts both handlers idempotent
  • GET /staking/nfts (auth), GET /staking/nfts/:id (public), GET /staking/nfts/:id/transfers (public)

#933 — Delegated governance voting

  • VoteDelegation + VoteDelegationHistory schema + migration
  • GOVERNANCE_VOTE_CAST / DELEGATION_SET / DELEGATION_REVOKED ActivityType values
  • governance-delegation.service.ts + indexer service with ledger guard
  • castKeyProposalVote updated: weight = own balance + sum of active delegators balances
  • GET /governance/delegation/:wallet, history, and GET /governance/delegators/:wallet

#934 — Multi-currency payment analytics

  • paymentAsset String @default(XLM) on Trade + migration + indexes; existing rows default to XLM
  • Threaded through both indexer paths
  • key-analytics.service.ts per-key and platform-wide breakdowns, Redis-cached
  • GET /keys/:keyId/analytics (public), GET /keys/analytics/payment-assets (admin)

Migrations (run in order)

  1. 20260925000100_add_key_sunset_flagged_at
  2. 20260925000200_add_staking_nfts
  3. 20260925000300_add_governance_delegation
  4. 20260925000400_add_trade_payment_asset

All TypeScript files have zero diagnostics. Run pnpm prisma generate && pnpm build after merging.

Closes #931, Closes #932, Closes #933, Closes #934

accesslayerorg#931 Add sunset tracking endpoint for keys approaching inactivity threshold
- sunsetFlaggedAt on CreatorProfile + migration
- KEY_SUNSET_FLAGGED ActivityType value
- key-sunset-watch.service.ts (inactivity + near-threshold logic)
- processSunsetFlaggedEvents() indexer handler
- GET /keys/sunset-watch (admin-only, sorted by inactivity desc)
- KEY_SUNSET_INACTIVITY_THRESHOLD_DAYS env var (default 30)

accesslayerorg#932 Build staking NFT position endpoints for tradeable stake receipt tracking
- StakingNft + StakingNftTransfer schema + migration
- STAKE_NFT_MINTED/TRANSFERRED ActivityType values
- staking.service.ts read-model with Redis caching
- staking-indexer.service.ts (processStakeNftMintedEvents, processStakeNftTransferredEvents)
- GET /staking/nfts (auth), GET /staking/nfts/:id (public), GET /staking/nfts/:id/transfers (public)

accesslayerorg#933 Implement delegated governance voting endpoints with delegation tracking
- VoteDelegation + VoteDelegationHistory schema + migration
- GOVERNANCE_VOTE_CAST/DELEGATION_SET/DELEGATION_REVOKED ActivityType values
- governance-delegation.service.ts read-model
- governance-delegation-indexer.service.ts (processDelegationSetEvents, processDelegationRevokedEvents)
- castKeyProposalVote updated: weight = own balance + sum of active delegators balances
- GET /governance/delegation/:wallet, GET /governance/delegation/:wallet/history
- GET /governance/delegators/:wallet

accesslayerorg#934 Add multi-currency payment support tracking for key purchase analytics
- paymentAsset String @default("XLM") on Trade model + migration + indexes
- payment_asset threaded through indexer-pipeline.service.ts Activity payload
- payment_asset threaded through trade-indexer.service.ts db.trade.create
- key-analytics.service.ts (getKeyPaymentAssetAnalytics, getPlatformPaymentAssetDistribution)
- GET /keys/:keyId/analytics (public), GET /keys/analytics/payment-assets (admin)
@drips-wave

drips-wave Bot commented Sep 26, 2026

Copy link
Copy Markdown

@TheHalalHunter 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

@TheHalalHunter
TheHalalHunter force-pushed the feat/issues-931-934-key-analytics-and-governance branch 2 times, most recently from bb82022 to 747d311 Compare September 26, 2026 19:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant