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.6.0] - 2026-01-09
10
11### Added
12
13- **Profile card on OAuth consent page** showing authorizing user's identity
14 - Displays avatar, display name, and handle from Bluesky public API
15 - Fetches profile client-side using `login_hint` parameter
16 - Graceful degradation if fetch fails (shows handle only)
17
18## [0.5.0] - 2026-01-08
19
20### Added
21
22- **Direct OAuth authorization** without requiring Pushed Authorization Requests (PAR)
23 - `/oauth/authorize` now accepts direct query parameters (client_id, redirect_uri, code_challenge, etc.)
24 - Creates authorization request record on-the-fly, same as PAR flow
25 - DPoP binding deferred to token exchange time for direct auth flows
26 - Matches official AT Protocol PDS behavior
27
28### Changed
29
30- AS metadata: `require_pushed_authorization_requests` now `false`
31- Extracted `validateAuthorizationParameters()` helper shared between PAR and direct auth
32
33## [0.4.0] - 2026-01-08
34
35### Added
36
37- **Foreign DID proxying** via `atproto-proxy` header
38 - `parseAtprotoProxyHeader()` parses `did:web:api.bsky.app#bsky_appview` format
39 - `getKnownServiceUrl()` maps known service DIDs to URLs
40 - `proxyToService()` generic proxy utility with header forwarding
41 - Repo endpoints (getRecord, listRecords, describeRepo) support explicit proxying
42 - Returns appropriate errors for malformed headers or unknown services
43- Unit tests for proxy utilities
44- E2E tests for foreign DID proxying behavior
45
46### Changed
47
48- Refactored `handleAppViewProxy` to use shared `proxyToService` utility
49
50## [0.3.0] - 2026-01-08
51
52### Added
53
54- **Granular OAuth scope enforcement** on repo and blob endpoints
55 - `parseRepoScope()` parses `repo:collection?action=create&action=update` format
56 - `parseBlobScope()` parses `blob:image/*` format with MIME wildcards
57 - `ScopePermissions` class for checking repo/blob permissions
58 - Enforced on createRecord, putRecord, deleteRecord, applyWrites, uploadBlob
59- **Consent page permissions table** displaying scopes in human-readable format
60 - Identity-only: "wants to uniquely identify you" message
61 - Granular scopes: Table with Collection + Create/Update/Delete columns
62 - Full access: Warning banner for `transition:generic`
63- `parseScopesForDisplay()` helper for consent page rendering
64- E2E tests for scope enforcement and consent page display
65
66## [0.2.0] - 2026-01-07
67
68### Added
69
70- **OAuth 2.0 authorization server** with full AT Protocol support
71 - Discovery endpoints (AS metadata, protected resource, JWKS)
72 - Pushed Authorization Requests (PAR)
73 - Authorization endpoint with dark-themed consent UI
74 - Token endpoint (authorization_code + refresh_token grants)
75 - Token revocation (RFC 7009)
76 - DPoP proof validation and token binding
77 - PKCE with S256 code challenge
78 - Client metadata fetching and validation
79 - Loopback client support for development
80- DPoP JTI tracking to prevent replay attacks
81- Comprehensive OAuth e2e tests
82
83### Changed
84
85- **BREAKING:** Normalized SQL schema to snake_case convention
86 - Tables: `blob` → `blobs`, `record_blob` → `record_blobs`
87 - Columns: `mimeType` → `mime_type`, `createdAt` → `created_at`, `blobCid` → `blob_cid`, `recordUri` → `record_uri`
88 - Existing Durable Objects require storage reset
89- Consolidated error responses to use `errorResponse` helper
90- Moved OAuth types to TYPES & CONSTANTS section
91
92## [0.1.0] - 2025-01-07
93
94Initial experimental release.
95
96### Added
97
98- **Repo operations:** createRecord, getRecord, putRecord, deleteRecord, applyWrites, listRecords
99- **Sync endpoints:** getRepo (CAR export), subscribeRepos (WebSocket firehose), getLatestCommit
100- **Authentication:** createSession, getSession, refreshSession with JWT tokens
101- **Blob storage:** uploadBlob, getBlob, listBlobs with R2 backend
102 - MIME type sniffing (JPEG, PNG, GIF, WebP, MP4, AVIF, HEIC)
103 - Automatic orphaned blob cleanup via DO alarms
104 - Blob-record association tracking
105- **Identity:** Handle resolution, PLC directory registration
106- **Federation:** Relay notification (requestCrawl), AppView proxy for app.bsky.* endpoints
107- **Infrastructure:**
108 - Merkle Search Tree (MST) for repo structure
109 - DAG-CBOR encoding with CID generation
110 - P-256 ECDSA signing via Web Crypto
111 - TypeScript checking via JSDoc annotations
112 - Setup script for key generation and PLC registration