A zero-dependency AT Protocol Personal Data Server written in JavaScript
atproto pds

feat: add SQLite schema for PDS storage

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

Changed files
+39
src
+39
src/pds.js
··· 142 142 constructor(state, env) { 143 143 this.state = state 144 144 this.sql = state.storage.sql 145 + this.env = env 146 + 147 + // Initialize schema 148 + this.sql.exec(` 149 + CREATE TABLE IF NOT EXISTS blocks ( 150 + cid TEXT PRIMARY KEY, 151 + data BLOB NOT NULL 152 + ); 153 + 154 + CREATE TABLE IF NOT EXISTS records ( 155 + uri TEXT PRIMARY KEY, 156 + cid TEXT NOT NULL, 157 + collection TEXT NOT NULL, 158 + rkey TEXT NOT NULL, 159 + value BLOB NOT NULL 160 + ); 161 + 162 + CREATE TABLE IF NOT EXISTS commits ( 163 + seq INTEGER PRIMARY KEY AUTOINCREMENT, 164 + cid TEXT NOT NULL, 165 + rev TEXT NOT NULL, 166 + prev TEXT 167 + ); 168 + 169 + CREATE TABLE IF NOT EXISTS seq_events ( 170 + seq INTEGER PRIMARY KEY AUTOINCREMENT, 171 + did TEXT NOT NULL, 172 + commit_cid TEXT NOT NULL, 173 + evt BLOB NOT NULL 174 + ); 175 + 176 + CREATE INDEX IF NOT EXISTS idx_records_collection ON records(collection, rkey); 177 + `) 145 178 } 146 179 147 180 async fetch(request) { ··· 160 193 if (url.pathname === '/test/tid') { 161 194 const tids = [createTid(), createTid(), createTid()] 162 195 return Response.json({ tids }) 196 + } 197 + if (url.pathname === '/test/schema') { 198 + const tables = this.sql.exec(` 199 + SELECT name FROM sqlite_master WHERE type='table' ORDER BY name 200 + `).toArray() 201 + return Response.json({ tables: tables.map(t => t.name) }) 163 202 } 164 203 return new Response('pds running', { status: 200 }) 165 204 }