Files
psf-memo/psf-memo-db
Chris Troutner bdf2c3015e Implement profile ordering by last post
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.
2026-09-20 14:36:08 -07:00
..
2026-08-26 09:20:10 -07:00
2026-08-26 09:20:10 -07:00
2026-08-26 12:05:01 -07:00

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 snapshot
  • POST /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