this repo has no description
1# Changelog
2
3All notable changes to this project will be documented in this file.
4
5The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
7## [Unreleased]
8
9## [0.4.0] - 2026-01-08
10
11### Added
12
13- **Foreign DID proxying** via `atproto-proxy` header
14 - `parseAtprotoProxyHeader()` parses `did:web:api.bsky.app#bsky_appview` format
15 - `getKnownServiceUrl()` maps known service DIDs to URLs
16 - `proxyToService()` generic proxy utility with header forwarding
17 - Repo endpoints (getRecord, listRecords, describeRepo) support explicit proxying
18 - Returns appropriate errors for malformed headers or unknown services
19- Unit tests for proxy utilities
20- E2E tests for foreign DID proxying behavior
21
22### Changed
23
24- Refactored `handleAppViewProxy` to use shared `proxyToService` utility
25- Added caching for registered DIDs lookup (30s TTL)
26
27## [0.3.0] - 2026-01-08
28
29### Added
30
31- **Granular OAuth scope enforcement** on repo and blob endpoints
32 - `parseRepoScope()` parses `repo:collection?action=create&action=update` format
33 - `parseBlobScope()` parses `blob:image/*` format with MIME wildcards
34 - `ScopePermissions` class for checking repo/blob permissions
35 - Enforced on createRecord, putRecord, deleteRecord, applyWrites, uploadBlob
36- **Consent page permissions table** displaying scopes in human-readable format
37 - Identity-only: "wants to uniquely identify you" message
38 - Granular scopes: Table with Collection + Create/Update/Delete columns
39 - Full access: Warning banner for `transition:generic`
40- `parseScopesForDisplay()` helper for consent page rendering
41- E2E tests for scope enforcement and consent page display
42
43## [0.2.0] - 2026-01-07
44
45### Added
46
47- **OAuth 2.0 authorization server** with full AT Protocol support
48 - Discovery endpoints (AS metadata, protected resource, JWKS)
49 - Pushed Authorization Requests (PAR)
50 - Authorization endpoint with dark-themed consent UI
51 - Token endpoint (authorization_code + refresh_token grants)
52 - Token revocation (RFC 7009)
53 - DPoP proof validation and token binding
54 - PKCE with S256 code challenge
55 - Client metadata fetching and validation
56 - Loopback client support for development
57- DPoP JTI tracking to prevent replay attacks
58- Comprehensive OAuth e2e tests
59
60### Changed
61
62- **BREAKING:** Normalized SQL schema to snake_case convention
63 - Tables: `blob` → `blobs`, `record_blob` → `record_blobs`
64 - Columns: `mimeType` → `mime_type`, `createdAt` → `created_at`, `blobCid` → `blob_cid`, `recordUri` → `record_uri`
65 - Existing Durable Objects require storage reset
66- Consolidated error responses to use `errorResponse` helper
67- Moved OAuth types to TYPES & CONSTANTS section
68
69## [0.1.0] - 2025-01-07
70
71Initial experimental release.
72
73### Added
74
75- **Repo operations:** createRecord, getRecord, putRecord, deleteRecord, applyWrites, listRecords
76- **Sync endpoints:** getRepo (CAR export), subscribeRepos (WebSocket firehose), getLatestCommit
77- **Authentication:** createSession, getSession, refreshSession with JWT tokens
78- **Blob storage:** uploadBlob, getBlob, listBlobs with R2 backend
79 - MIME type sniffing (JPEG, PNG, GIF, WebP, MP4, AVIF, HEIC)
80 - Automatic orphaned blob cleanup via DO alarms
81 - Blob-record association tracking
82- **Identity:** Handle resolution, PLC directory registration
83- **Federation:** Relay notification (requestCrawl), AppView proxy for app.bsky.* endpoints
84- **Infrastructure:**
85 - Merkle Search Tree (MST) for repo structure
86 - DAG-CBOR encoding with CID generation
87 - P-256 ECDSA signing via Web Crypto
88 - TypeScript checking via JSDoc annotations
89 - Setup script for key generation and PLC registration