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### Added
10
11- **Granular OAuth scope enforcement** on repo and blob endpoints
12 - `parseRepoScope()` parses `repo:collection?action=create&action=update` format
13 - `parseBlobScope()` parses `blob:image/*` format with MIME wildcards
14 - `ScopePermissions` class for checking repo/blob permissions
15 - Enforced on createRecord, putRecord, deleteRecord, applyWrites, uploadBlob
16- **Consent page permissions table** displaying scopes in human-readable format
17 - Identity-only: "wants to uniquely identify you" message
18 - Granular scopes: Table with Collection + Create/Update/Delete columns
19 - Full access: Warning banner for `transition:generic`
20- `parseScopesForDisplay()` helper for consent page rendering
21- E2E tests for scope enforcement and consent page display
22
23## [0.2.0] - 2026-01-07
24
25### Added
26
27- **OAuth 2.0 authorization server** with full AT Protocol support
28 - Discovery endpoints (AS metadata, protected resource, JWKS)
29 - Pushed Authorization Requests (PAR)
30 - Authorization endpoint with dark-themed consent UI
31 - Token endpoint (authorization_code + refresh_token grants)
32 - Token revocation (RFC 7009)
33 - DPoP proof validation and token binding
34 - PKCE with S256 code challenge
35 - Client metadata fetching and validation
36 - Loopback client support for development
37- DPoP JTI tracking to prevent replay attacks
38- Comprehensive OAuth e2e tests
39
40### Changed
41
42- **BREAKING:** Normalized SQL schema to snake_case convention
43 - Tables: `blob` → `blobs`, `record_blob` → `record_blobs`
44 - Columns: `mimeType` → `mime_type`, `createdAt` → `created_at`, `blobCid` → `blob_cid`, `recordUri` → `record_uri`
45 - Existing Durable Objects require storage reset
46- Consolidated error responses to use `errorResponse` helper
47- Moved OAuth types to TYPES & CONSTANTS section
48
49## [0.1.0] - 2025-01-07
50
51Initial experimental release.
52
53### Added
54
55- **Repo operations:** createRecord, getRecord, putRecord, deleteRecord, applyWrites, listRecords
56- **Sync endpoints:** getRepo (CAR export), subscribeRepos (WebSocket firehose), getLatestCommit
57- **Authentication:** createSession, getSession, refreshSession with JWT tokens
58- **Blob storage:** uploadBlob, getBlob, listBlobs with R2 backend
59 - MIME type sniffing (JPEG, PNG, GIF, WebP, MP4, AVIF, HEIC)
60 - Automatic orphaned blob cleanup via DO alarms
61 - Blob-record association tracking
62- **Identity:** Handle resolution, PLC directory registration
63- **Federation:** Relay notification (requestCrawl), AppView proxy for app.bsky.* endpoints
64- **Infrastructure:**
65 - Merkle Search Tree (MST) for repo structure
66 - DAG-CBOR encoding with CID generation
67 - P-256 ECDSA signing via Web Crypto
68 - TypeScript checking via JSDoc annotations
69 - Setup script for key generation and PLC registration