[claude] Nostr relay account whitelist — access-tier API + NIP-11 (#37) #65

Merged
claude merged 1 commits from claude/issue-37 into main 2026-03-23 20:52:19 +00:00
Collaborator

Fixes #37

What was done

Schema

  • Added elite access level to relay_accounts (none/read/write/elite)
  • Added trust_tier column to relay_accounts for synced tier tracking
  • Created migration 0007_relay_account_whitelist.sql with relay_accounts + relay_event_queue tables (idempotent CREATE TABLE IF NOT EXISTS + ALTER TABLE ADD COLUMN IF NOT EXISTS)

Admin API

  • POST /api/admin/relay/accounts — grant access (body: {pubkey, level?, notes?})
  • DELETE /api/admin/relay/accounts/:pubkey — revoke access
  • GET /api/admin/relay/accounts was already implemented (kept)
  • Legacy :pubkey/grant and :pubkey/revoke routes kept for backward compat

Relay Policy

  • elite access level → direct strfry inject + accept (bypasses moderation queue)
  • write + elite tier → same behavior (legacy path preserved)
  • Unknown pubkeys → reject

Trust Tier Sync

  • syncFromTrustTier now stores trust_tier on the relay account row
  • Elite tier now maps to elite access level (was write)
  • Called from TrustService.recordSuccess/recordFailure on every interaction

NIP-11

  • GET / with Accept: application/nostr+json returns relay info document
  • Fields: name, description, pubkey (Timmys hex pubkey), contact, supported_nips, software, version
  • All fields env-var overridable (RELAY_NAME, RELAY_DESCRIPTION, RELAY_CONTACT, RELAY_VERSION)
Fixes #37 ## What was done ### Schema - Added `elite` access level to `relay_accounts` (`none/read/write/elite`) - Added `trust_tier` column to `relay_accounts` for synced tier tracking - Created migration `0007_relay_account_whitelist.sql` with `relay_accounts` + `relay_event_queue` tables (idempotent `CREATE TABLE IF NOT EXISTS` + `ALTER TABLE ADD COLUMN IF NOT EXISTS`) ### Admin API - `POST /api/admin/relay/accounts` — grant access (body: `{pubkey, level?, notes?}`) - `DELETE /api/admin/relay/accounts/:pubkey` — revoke access - `GET /api/admin/relay/accounts` was already implemented (kept) - Legacy `:pubkey/grant` and `:pubkey/revoke` routes kept for backward compat ### Relay Policy - `elite` access level → direct strfry inject + accept (bypasses moderation queue) - `write` + elite tier → same behavior (legacy path preserved) - Unknown pubkeys → `reject` ### Trust Tier Sync - `syncFromTrustTier` now stores `trust_tier` on the relay account row - Elite tier now maps to `elite` access level (was `write`) - Called from `TrustService.recordSuccess/recordFailure` on every interaction ### NIP-11 - `GET /` with `Accept: application/nostr+json` returns relay info document - Fields: `name`, `description`, `pubkey` (Timmys hex pubkey), `contact`, `supported_nips`, `software`, `version` - All fields env-var overridable (`RELAY_NAME`, `RELAY_DESCRIPTION`, `RELAY_CONTACT`, `RELAY_VERSION`)
claude added 1 commit 2026-03-23 20:51:22 +00:00
feat: relay account whitelist — access-tier API + NIP-11 self-description
Some checks failed
CI / Typecheck & Lint (pull_request) Failing after 0s
03e651c727
- Add `elite` access level to relay_accounts schema (none/read/write/elite)
- Add `trust_tier` column to relay_accounts for synced tier tracking
- Create migration 0007: relay_accounts + relay_event_queue tables
- Add POST /api/admin/relay/accounts (body: pubkey, level, notes)
- Add DELETE /api/admin/relay/accounts/:pubkey
- Update relay policy to handle `elite` access level (direct inject, skip moderation)
- Map elite trust tier → elite access level in syncFromTrustTier
- Add NIP-11 GET / with Accept: application/nostr+json (relay info endpoint)

Fixes #37

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
claude merged commit 677c79bd14 into main 2026-03-23 20:52:19 +00:00
This repo is archived. You cannot comment on pull requests.