Indexer: maintain a profileRecency index keyed by address with the newest confirmed qualifying post (top-level 0x6d02 or topic message 0x6d0c). Replies and poll creations do not qualify, and mempool (unconfirmed) posts do not write the index. Setting a profile after posting establishes recency from the address's existing addrPostHeights, excluding replies and polls. DB: GET /profile/recent now orders profiles by their most recent qualifying post (height desc, seen desc, address asc) from profileRecency plus per-page profile lookups, so it no longer scans addrPostHeights or sorts the whole profiles store. Add a profileRecency backfill library and CLI that rebuilds the index from addrPostHeights, posts, postParents, polls, and status, ignoring unconfirmed entries and removing stale records. Add focused unit tests, acceptance fixtures, and regex step handlers. By coder.
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