commits
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- fix use-after-free in jwt payload parsing (dupe strings)
- fix crypto.sign.ecdsa path for zig 0.15
- fix test token to have correct 64-byte signature
- use arena allocator in extractAt tests to avoid leaks
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- jwt.zig: parse and verify ES256/ES256K tokens
- multibase.zig: base58btc decoding for DID document keys
- multicodec.zig: parse secp256k1/p256 key types from prefix
follows atproto.com/specs/xrpc service auth spec
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- DidDocument: parse did documents from json
- DidResolver: resolve did:plc and did:web
- XrpcClient: call AT Protocol endpoints
- json helpers: navigate nested json with paths
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Handle: domain-based identifiers (max 253 chars, 2+ segments, TLD rules)
- Nsid: namespaced identifiers (3+ segments, domain + name validation)
- Rkey: record keys (1-512 chars, restricted charset, no . or ..)
enhanced existing modules:
- Did: generic method support, spec-compliant charset validation
- AtUri: fragment/query rejection, proper path parsing
- Tid: first-char high bit check per atproto spec
all validation rules derived from atproto.com/specs and MarshalX/atproto
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- add minimal README with install/usage
- tid: first char must have high bit 0x40 unset (only 2-7 allowed)
- add test for rejecting tids starting with a-z
ref: MarshalX/atproto string_formats.py
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
internal APIs for TID, AtUri, and Did parsing.
- Tid: parse/generate timestamp identifiers (base32-sortable)
- AtUri: parse at://did/collection/rkey URIs
- Did: parse did:plc and did:web identifiers
all APIs start in internal module, promoted to root when stable.
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- fix use-after-free in jwt payload parsing (dupe strings)
- fix crypto.sign.ecdsa path for zig 0.15
- fix test token to have correct 64-byte signature
- use arena allocator in extractAt tests to avoid leaks
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- jwt.zig: parse and verify ES256/ES256K tokens
- multibase.zig: base58btc decoding for DID document keys
- multicodec.zig: parse secp256k1/p256 key types from prefix
follows atproto.com/specs/xrpc service auth spec
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Handle: domain-based identifiers (max 253 chars, 2+ segments, TLD rules)
- Nsid: namespaced identifiers (3+ segments, domain + name validation)
- Rkey: record keys (1-512 chars, restricted charset, no . or ..)
enhanced existing modules:
- Did: generic method support, spec-compliant charset validation
- AtUri: fragment/query rejection, proper path parsing
- Tid: first-char high bit check per atproto spec
all validation rules derived from atproto.com/specs and MarshalX/atproto
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- add minimal README with install/usage
- tid: first char must have high bit 0x40 unset (only 2-7 allowed)
- add test for rejecting tids starting with a-z
ref: MarshalX/atproto string_formats.py
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
internal APIs for TID, AtUri, and Did parsing.
- Tid: parse/generate timestamp identifiers (base32-sortable)
- AtUri: parse at://did/collection/rkey URIs
- Did: parse did:plc and did:web identifiers
all APIs start in internal module, promoted to root when stable.
馃 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>