A zero-dependency AT Protocol Personal Data Server written in JavaScript
atproto pds
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.2.0] - 2026-01-07 10 11### Added 12 13- **OAuth 2.0 authorization server** with full AT Protocol support 14 - Discovery endpoints (AS metadata, protected resource, JWKS) 15 - Pushed Authorization Requests (PAR) 16 - Authorization endpoint with dark-themed consent UI 17 - Token endpoint (authorization_code + refresh_token grants) 18 - Token revocation (RFC 7009) 19 - DPoP proof validation and token binding 20 - PKCE with S256 code challenge 21 - Client metadata fetching and validation 22 - Loopback client support for development 23- DPoP JTI tracking to prevent replay attacks 24- Comprehensive OAuth e2e tests 25 26### Changed 27 28- **BREAKING:** Normalized SQL schema to snake_case convention 29 - Tables: `blob``blobs`, `record_blob``record_blobs` 30 - Columns: `mimeType``mime_type`, `createdAt``created_at`, `blobCid``blob_cid`, `recordUri``record_uri` 31 - Existing Durable Objects require storage reset 32- Consolidated error responses to use `errorResponse` helper 33- Moved OAuth types to TYPES & CONSTANTS section 34 35## [0.1.0] - 2025-01-07 36 37Initial experimental release. 38 39### Added 40 41- **Repo operations:** createRecord, getRecord, putRecord, deleteRecord, applyWrites, listRecords 42- **Sync endpoints:** getRepo (CAR export), subscribeRepos (WebSocket firehose), getLatestCommit 43- **Authentication:** createSession, getSession, refreshSession with JWT tokens 44- **Blob storage:** uploadBlob, getBlob, listBlobs with R2 backend 45 - MIME type sniffing (JPEG, PNG, GIF, WebP, MP4, AVIF, HEIC) 46 - Automatic orphaned blob cleanup via DO alarms 47 - Blob-record association tracking 48- **Identity:** Handle resolution, PLC directory registration 49- **Federation:** Relay notification (requestCrawl), AppView proxy for app.bsky.* endpoints 50- **Infrastructure:** 51 - Merkle Search Tree (MST) for repo structure 52 - DAG-CBOR encoding with CID generation 53 - P-256 ECDSA signing via Web Crypto 54 - TypeScript checking via JSDoc annotations 55 - Setup script for key generation and PLC registration