chadtmiller.com/pds.js
An atproto PDS in JavaScript, for Cloudflare Workers and Node
0
0
# PDS File Reorganization Implementation Plan
> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
**Goal:** Reorganize pds.js into logical domain sections with box-style headers for improved readability.
**Architecture:** Reorder existing code into 12 logical domains without changing functionality. Add Unicode box-style section headers. Group related utilities that are currently scattered.
**Tech Stack:** JavaScript, JSDoc
---
## Box Header Format
All section headers use this format (80 chars wide):
```javascript
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
// โ SECTION NAME โ
// โ Brief description of what this section contains โ
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
---
### Task 1: Types & Constants Section
**Files:**
- Modify: `src/pds.js` (lines 17-84, plus scattered constants)
**Step 1: Create the new section header and gather all types/constants**
Move these items to the top (after the file header comment):
- `CBOR_FALSE`, `CBOR_TRUE`, `CBOR_NULL`, `CBOR_TAG_CID` (from lines 19-24)
- `CODEC_DAG_CBOR`, `CODEC_RAW` (from lines 480-481)
- `TID_CHARS`, `clockId`, `lastTimestamp` (from lines 563-566)
- `P256_N`, `P256_N_DIV_2` (from lines 638-641)
- All typedefs: `Env`, `BlockRow`, `RecordRow`, `CommitRow`, `SeqEventRow`, `BlobRow`, `JwtPayload`
Add header:
```javascript
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
// โ TYPES & CONSTANTS โ
// โ Environment bindings, SQL row types, protocol constants โ
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
**Step 2: Run typecheck to verify no breakage**
Run: `npm run typecheck`
Expected: 0 errors
**Step 3: Commit**
```bash
git add src/pds.js
git commit -m "refactor: consolidate types and constants section"
```
---
### Task 2: Utilities Section
**Files:**
- Modify: `src/pds.js`
**Step 1: Create utilities section after types/constants**
Move these functions together:
- `errorResponse()` (from line 92)
- `bytesToHex()` (from line 990)
- `hexToBytes()` (from line 1001)
- `bytesToBigInt()` (from line 647)
- `bigIntToBytes()` (from line 660)
- `base32Encode()` (from line 538)
- `base32Decode()` (from line 1237)
- `base64UrlEncode()` (from line 745)
- `base64UrlDecode()` (from line 759)
- `varint()` (from line 1211)
Add header:
```javascript
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
// โ UTILITIES โ
// โ Error responses, byte conversion, base encoding โ
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
**Step 2: Run typecheck**
Run: `npm run typecheck`
Expected: 0 errors
**Step 3: Commit**
```bash
git add src/pds.js
git commit -m "refactor: consolidate utilities section"
```
---
### Task 3: CBOR Encoding Section
**Files:**
- Modify: `src/pds.js`
**Step 1: Create CBOR section**
Keep together (already grouped, just add new header):
- `encodeHead()`
- `cborEncode()`
- `cborEncodeDagCbor()`
- `cborDecode()`
Replace `// === CBOR ENCODING ===` with:
```javascript
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
// โ CBOR ENCODING โ
// โ RFC 8949 CBOR and DAG-CBOR for content-addressed data โ
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
**Step 2: Run typecheck**
Run: `npm run typecheck`
Expected: 0 errors
**Step 3: Commit**
```bash
git add src/pds.js
git commit -m "refactor: add CBOR encoding section header"
```
---
### Task 4: Content Identifiers Section
**Files:**
- Modify: `src/pds.js`
**Step 1: Create CID/TID section**
Group together:
- `class CID` (from line 238)
- `createCidWithCodec()` (from line 489)
- `createCid()` (from line 510)
- `createBlobCid()` (from line 519)
- `cidToString()` (from line 528)
- `cidToBytes()` (from line 1226)
- `createTid()` (from line 572)
Add header:
```javascript
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
// โ CONTENT IDENTIFIERS โ
// โ CIDs (content hashes) and TIDs (timestamp IDs) โ
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
**Step 2: Run typecheck**
Run: `npm run typecheck`
Expected: 0 errors
**Step 3: Commit**
```bash
git add src/pds.js
git commit -m "refactor: consolidate content identifiers section"
```
---
### Task 5: Cryptography Section
**Files:**
- Modify: `src/pds.js`
**Step 1: Create cryptography section**
Group together:
- `sha256()` (from line 1016)
- `importPrivateKey()` (from line 606)
- `generateKeyPair()` (from line 705)
- `compressPublicKey()` (from line 728)
- `sign()` (from line 675)
Add header:
```javascript
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
// โ CRYPTOGRAPHY โ
// โ P-256 signing with low-S normalization, key management โ
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
**Step 2: Run typecheck**
Run: `npm run typecheck`
Expected: 0 errors
**Step 3: Commit**
```bash
git add src/pds.js
git commit -m "refactor: create cryptography section"
```
---
### Task 6: Authentication Section
**Files:**
- Modify: `src/pds.js`
**Step 1: Create authentication section**
Group together:
- `hmacSign()` (from line 777)
- `createAccessJwt()` (from line 800)
- `createRefreshJwt()` (from line 829)
- `verifyJwt()` (from line 876)
- `verifyAccessJwt()` (from line 919)
- `verifyRefreshJwt()` (from line 931)
- `createServiceJwt()` (from line 952)
Add header:
```javascript
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
// โ AUTHENTICATION โ
// โ JWT creation/verification for sessions and service auth โ
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
**Step 2: Run typecheck**
Run: `npm run typecheck`
Expected: 0 errors
**Step 3: Commit**
```bash
git add src/pds.js
git commit -m "refactor: create authentication section"
```
---
### Task 7: Merkle Search Tree Section
**Files:**
- Modify: `src/pds.js`
**Step 1: Update MST section header**
Keep together (already grouped):
- `keyDepthCache`
- `getKeyDepth()`
- `commonPrefixLen()`
- `class MST`
Replace `// === MERKLE SEARCH TREE ===` with:
```javascript
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
// โ MERKLE SEARCH TREE โ
// โ MST for ATProto repository structure โ
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
**Step 2: Run typecheck**
Run: `npm run typecheck`
Expected: 0 errors
**Step 3: Commit**
```bash
git add src/pds.js
git commit -m "refactor: update MST section header"
```
---
### Task 8: CAR Files Section
**Files:**
- Modify: `src/pds.js`
**Step 1: Update CAR section**
Keep only:
- `buildCarFile()`
(Note: `varint()`, `cidToBytes()`, `base32Decode()` moved to earlier sections)
Replace `// === CAR FILE BUILDER ===` with:
```javascript
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
// โ CAR FILES โ
// โ Content Addressable aRchive format for repo sync โ
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
**Step 2: Run typecheck**
Run: `npm run typecheck`
Expected: 0 errors
**Step 3: Commit**
```bash
git add src/pds.js
git commit -m "refactor: update CAR files section"
```
---
### Task 9: Blob Handling Section
**Files:**
- Modify: `src/pds.js`
**Step 1: Create blob handling section**
Group together:
- `sniffMimeType()` (from line 105)
- `findBlobRefs()` (from line 181)
- `CRAWL_NOTIFY_THRESHOLD`, `lastCrawlNotify` (from lines 207-208)
- `notifyCrawlers()` (from line 214)
Add header:
```javascript
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
// โ BLOB HANDLING โ
// โ MIME detection, blob reference scanning, crawler notification โ
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
**Step 2: Run typecheck**
Run: `npm run typecheck`
Expected: 0 errors
**Step 3: Commit**
```bash
git add src/pds.js
git commit -m "refactor: create blob handling section"
```
---
### Task 10: Routing Section
**Files:**
- Modify: `src/pds.js`
**Step 1: Add routing section header**
Before `RouteHandler` callback typedef, add:
```javascript
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
// โ ROUTING โ
// โ XRPC endpoint definitions โ
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
This section contains:
- `RouteHandler` (callback typedef)
- `Route` (typedef)
- `pdsRoutes`
**Step 2: Run typecheck**
Run: `npm run typecheck`
Expected: 0 errors
**Step 3: Commit**
```bash
git add src/pds.js
git commit -m "refactor: add routing section header"
```
---
### Task 11: Personal Data Server Section
**Files:**
- Modify: `src/pds.js`
**Step 1: Add PDS class section header**
Before `class PersonalDataServer`, add:
```javascript
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
// โ PERSONAL DATA SERVER โ
// โ Durable Object class implementing ATProto PDS โ
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
**Step 2: Run typecheck**
Run: `npm run typecheck`
Expected: 0 errors
**Step 3: Commit**
```bash
git add src/pds.js
git commit -m "refactor: add PDS class section header"
```
---
### Task 12: Workers Entry Point Section
**Files:**
- Modify: `src/pds.js`
**Step 1: Add workers entry point section header**
Before `corsHeaders`, add:
```javascript
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
// โ WORKERS ENTRY POINT โ
// โ Request handling, CORS, auth middleware โ
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
This section contains:
- `corsHeaders`
- `addCorsHeaders()`
- `getSubdomain()`
- `requireAuth()`
- `handleAuthenticatedBlobUpload()`
- `handleAuthenticatedRepoWrite()`
- `handleRequest()`
- `default export`
**Step 2: Run typecheck**
Run: `npm run typecheck`
Expected: 0 errors
**Step 3: Commit**
```bash
git add src/pds.js
git commit -m "refactor: add workers entry point section header"
```
---
### Task 13: Final Verification
**Step 1: Run full typecheck**
Run: `npm run typecheck`
Expected: 0 errors
**Step 2: Run tests**
Run: `npm test`
Expected: All tests pass
**Step 3: Run e2e tests if available**
Run: `npm run test:e2e`
Expected: All tests pass
**Step 4: Final commit if any cleanup needed**
```bash
git add src/pds.js
git commit -m "refactor: complete pds.js reorganization with box headers"
```
---
## Section Order Summary
Final file structure (top to bottom):
1. File header comment
2. TYPES & CONSTANTS
3. UTILITIES
4. CBOR ENCODING
5. CONTENT IDENTIFIERS
6. CRYPTOGRAPHY
7. AUTHENTICATION
8. MERKLE SEARCH TREE
9. CAR FILES
10. BLOB HANDLING
11. ROUTING
12. PERSONAL DATA SERVER
13. WORKERS ENTRY POINT