- Extract shared runUseCase and listPostsForAddr in the posts controller to remove the duplicated try/catch error wrapper (CRAP 14.7 -> 4.0) and DRY the addr-scoped handlers. - Add error-path unit tests for the posts controller covering both branches of handleError. - Consolidate ListFollowingFeed onto the shared ListUseCase constructor to remove constructor duplication across list use cases. - Add property tests for scanFollowingFeedTxidsAndCount (ordering, reply/ viewer/membership exclusion, pagination conservation) and for the client FollowingFeedPage.load state invariants. By refactorer.
psf-memo-db
LevelDB REST API for the Memo protocol indexer. Architecture mirrors psf-slp-db.
Database-focused architecture notes live in the indexer repo: psf-memo-indexer/dev-docs/psf-memo-db.md.
Requirements
- node ^20
- npm ^10
Installation
cd psf-memo-db
npm install
cp .env-example .env # optional
npm start
Default port: 5021
API documentation is served at the root URL (http://localhost:5021/). Regenerate with npm run docs.
API
All indexer data is exposed under /level/* with CRUD routes per entity (post, like, name, profile, status, etc.) plus:
GET /profile/recent— paginated list of profiles, sorted by block height (newest first)GET /posts/recent— paginated list of posts, sorted by block height (newest first)POST /level/backup— zip database snapshotPOST /level/restore— restore from snapshot (exits process)GET /health— health check
List recent profiles
# First page (default limit 100)
curl -sS "http://localhost:5021/profile/recent"
# Page size and offset
curl -sS "http://localhost:5021/profile/recent?limit=50&offset=50"
Query parameters: limit (default 100, max 100), offset (default 0). Block height is read from the stored profile document (blockHeight field, set at indexing time).
List recent posts
curl -sS "http://localhost:5021/posts/recent"
curl -sS "http://localhost:5021/posts/recent?limit=50&offset=50"
Same query parameters as /profile/recent.
Tests
npm test
Production (Docker)
The production Docker setup is in psf-memo-indexer/production/docker. Compose builds memo-db by copying this package from the monorepo root.
License
MIT