Phase 2: Dynamic field mapping via lexicon resolution
New modules:
- src/nodes/Atproto/lexicon.ts — Lexicon resolution from PDS endpoint
(with XRPC validation bypass via error.responseBody) or DNS-based
@atproto/lexicon-resolver fallback. In-memory cache, full lexicon
document parsing with type inference, and ref resolution helpers.
- src/nodes/Atproto/fieldMapping.ts — Lexicon schema → ResourceMapperField[]
conversion with type mapping, createdAt auto-default, recursive ref
flattening (depth cap 3), inline object unwrapping with dotted prefix.
- tests/mockLexicons.ts — 5 realistic mock lexicon documents covering
records, primitives, inline objects, deeply nested refs, and queries.
Updated modules:
- src/nodes/Atproto/Atproto.node.ts — Added resourceMapper property for
Record Data (Create/Put), methods.resourceMapping.getRecordFields,
and buildRecordFromNodeParams helper for both resourceMapper and raw JSON.
- tests/setup.ts — Added com.atproto.lexicon.resolveLexicon mock handler
and catch-all bypass for unhandled requests (DID resolution, etc.).
- tsconfig.json — Added skippedLibCheck (already set) for ESM package compat.
- TODO.md — Marked Phase 0, 1, and 2 items as complete.
Tests: 71 total (35 Phase 1 + 36 Phase 2), all passing.