A zero-dependency AT Protocol Personal Data Server written in JavaScript
atproto pds
1# PDS Endpoint Comparison: pds.js vs atproto/packages/pds 2 3Comparison of endpoints and parameters between this implementation and the official AT Protocol PDS. 4 5--- 6 7## Endpoints Missing from pds.js 8 9### com.atproto.admin.* (entire namespace missing) 10 11| Endpoint | Params | 12|----------|--------| 13| deleteAccount | did | 14| disableAccountInvites | account, note | 15| disableInviteCodes | accounts, codes | 16| enableAccountInvites | account, note | 17| getAccountInfo | did | 18| getAccountInfos | dids | 19| getInviteCodes | cursor, limit, sort | 20| getSubjectStatus | blob, did, uri | 21| searchAccounts | cursor, email, limit | 22| sendEmail | comment, content, recipientDid, senderDid, subject | 23| updateAccountEmail | account, email | 24| updateAccountHandle | did, handle | 25| updateAccountPassword | did, password | 26| updateAccountSigningKey | did, signingKey | 27| updateSubjectStatus | deactivated, subject, takedown | 28 29### com.atproto.identity.* (mostly missing) 30 31| Endpoint | Params | Notes | 32|----------|--------|-------| 33| getRecommendedDidCredentials | (none) | | 34| refreshIdentity | identifier | | 35| requestPlcOperationSignature | (none) | | 36| resolveDid | did | | 37| resolveIdentity | identifier | | 38| signPlcOperation | alsoKnownAs, rotationKeys, services, token, verificationMethods | | 39| submitPlcOperation | operation | | 40| updateHandle | handle | | 41 42*pds.js only implements: resolveHandle* 43 44### com.atproto.server.* (many missing) 45 46| Endpoint | Params | 47|----------|--------| 48| activateAccount | (none) | 49| checkAccountStatus | (none) | 50| confirmEmail | email, token | 51| createAccount | did, email, handle, inviteCode, password, plcOp, recoveryKey, verificationCode, verificationPhone | 52| createAppPassword | name, privileged | 53| createInviteCode | forAccount, useCount | 54| createInviteCodes | codeCount, forAccounts, useCount | 55| deactivateAccount | deleteAfter | 56| deleteAccount | did, password, token | 57| deleteSession | (none) | 58| getAccountInviteCodes | createAvailable, includeUsed | 59| getServiceAuth | aud, exp, lxm | 60| listAppPasswords | (none) | 61| requestAccountDelete | (none) | 62| requestEmailConfirmation | (none) | 63| requestEmailUpdate | (none) | 64| requestPasswordReset | email | 65| reserveSigningKey | did | 66| resetPassword | password, token | 67| revokeAppPassword | name | 68| updateEmail | email, emailAuthFactor, token | 69 70*pds.js implements: createSession, getSession, refreshSession, describeServer* 71 72### com.atproto.sync.* (some missing) 73 74| Endpoint | Params | 75|----------|--------| 76| getBlocks | cids, did | 77| getHostStatus | hostname | 78| listHosts | cursor, limit | 79| listReposByCollection | collection, cursor, limit | 80| notifyOfUpdate | hostname | 81| requestCrawl | hostname | 82 83*pds.js implements: listRepos, getLatestCommit, getRepoStatus, getRepo, getRecord, getBlob, listBlobs, subscribeRepos* 84 85### com.atproto.repo.* (some missing) 86 87| Endpoint | Params | 88|----------|--------| 89| importRepo | (binary) | 90| listMissingBlobs | cursor, limit | 91 92*pds.js implements: createRecord, deleteRecord, putRecord, applyWrites, getRecord, describeRepo, listRecords, uploadBlob* 93 94### com.atproto.moderation.* 95 96| Endpoint | Params | 97|----------|--------| 98| createReport | modTool, reason, reasonType, subject | 99 100### com.atproto.temp.* (entire namespace missing) 101 102| Endpoint | Params | 103|----------|--------| 104| addReservedHandle | handle | 105| checkHandleAvailability | birthDate, email, handle | 106| checkSignupQueue | (none) | 107| dereferenceScope | scope | 108| fetchLabels | limit, since | 109| requestPhoneVerification | phoneNumber | 110| revokeAccountCredentials | account | 111 112--- 113 114## Missing Parameters in Shared Endpoints 115 116Endpoints that exist in both implementations, but pds.js is missing parameters: 117 118| Endpoint | pds.js has | Missing from pds.js | 119|----------|------------|---------------------| 120| repo.createRecord | collection, record, rkey | **repo**, **validate**, swapCommit | 121| repo.deleteRecord | collection, rkey | **repo**, swapCommit, swapRecord | 122| repo.putRecord | collection, rkey, record | **repo**, **validate**, swapCommit, swapRecord | 123| repo.applyWrites | writes | **repo**, validate, swapCommit | 124| sync.getRepo | did | since | 125| sync.listBlobs | did, cursor, limit | since | 126| sync.listRepos | (none) | cursor, limit | 127| server.createSession | identifier, password | allowTakendown, authFactorToken | 128 129**Bold** = likely important for compatibility 130 131--- 132 133## app.bsky.* Coverage 134 135Both implementations handle app.bsky.* the same way: 136 137| Category | Endpoints | Notes | 138|----------|-----------|-------| 139| Native (stored in PDS) | actor.getPreferences, actor.putPreferences | Both implementations | 140| Proxied to AppView | ~87 endpoints | feed.*, graph.*, notification.*, etc. | 141 142--- 143 144## Extra in pds.js (not in atproto spec) 145 146Custom endpoints specific to this implementation: 147 148| Endpoint | Purpose | 149|----------|---------| 150| `POST /init` | Initialize PDS with DID/keys | 151| `GET /status` | Health check | 152| `POST /register-did` | Register a DID | 153| `GET /get-registered-dids` | List registered DIDs | 154| `POST /register-handle` | Register a handle | 155| `GET /resolve-handle` | Resolve handle (non-XRPC path) | 156| `POST /forward-event` | Forward sync events to other instances | 157| `GET /repo-info` | Get repository info | 158| `GET /oauth-public-key` | Get OAuth public key | 159| `POST /check-dpop-jti` | DPoP replay protection | 160 161### OAuth 2.0 Stack (full implementation) 162 163| Endpoint | Purpose | 164|----------|---------| 165| `GET /.well-known/oauth-authorization-server` | OAuth server metadata | 166| `GET /.well-known/oauth-protected-resource` | Protected resource metadata | 167| `GET /oauth/jwks` | JSON Web Key Set | 168| `POST /oauth/par` | Pushed Authorization Request | 169| `GET/POST /oauth/authorize` | Authorization endpoint | 170| `POST /oauth/token` | Token endpoint (with DPoP) | 171| `POST /oauth/revoke` | Token revocation | 172 173--- 174 175## Summary 176 177| Category | pds.js | atproto PDS | 178|----------|--------|-------------| 179| com.atproto.admin.* | 0 | 15 | 180| com.atproto.identity.* | 1 | 9 | 181| com.atproto.moderation.* | 0 | 1 | 182| com.atproto.repo.* | 8 | 10 | 183| com.atproto.server.* | 4 | 25 | 184| com.atproto.sync.* | 8 | 14 | 185| com.atproto.temp.* | 0 | 7 | 186| app.bsky.* (native) | 2 | 2 | 187| app.bsky.* (proxied) | ~87 | ~87 | 188| **Total XRPC (native)** | **23** | **85** | 189| Custom endpoints | 10 | 0 | 190| OAuth endpoints | 7 | 7 (via @atproto/oauth-provider) |