chadtmiller.com/pds.js
An atproto PDS in JavaScript, for Cloudflare Workers and Node
0
0
---
'@pdsjs/spaces': patch
'@pdsjs/core': minor
'@pdsjs/storage-sqlite': patch
'@pdsjs/cloudflare': patch
---
Spaces follow the reference's `0.0.0-spaces-alpha-20261029171913`.
`com.atproto.simplespace.*` is gone, with every older spelling it accepted.
- **Policies.** A space holds one policy:
`com.atproto.personalspace.policy`, `com.atproto.memberspace.policy`
(`publicRead`, `publicWrite`, `allowedApps`, `publishPolicy`,
`publishMembers`) or `com.atproto.managedspace.policy` (`managingApp`,
`publishPolicy`). `com.atproto.space.createSpace`, `updateSpace`,
`deleteSpace` and `getSpace` manage it; `updateSpace` replaces it whole and
a change of type drops every member. The authority is no longer a member of
its own space and is always admitted.
- **Members.** `com.atproto.memberspace.putMember` (`read` and `write`
required), `removeMember` and `listMembers` answer `PolicyMismatch` outside a
memberspace. Removing a member, or taking its `write`, drops it from the
writer set, as `com.atproto.space.removeWriter` does for any writer.
- **Credentials.** `getSpaceCredential` checks the user before the app. A user
the policy refuses gets `SpaceNotFound`; an app the space does not allow gets
`AppNotAuthorized`. A managedspace asks its app through
`com.atproto.managedspace.checkUserAccess`.
- **Published records.** `publishPolicy` writes `com.atproto.space.policy/self`
and `publishMembers` writes one `com.atproto.memberspace.member` per member
into the authority's repo in the space. Direct writes to either collection are
refused.
- **clearRecords.** `com.atproto.space.clearRecords` deletes every record the
caller holds in a space.
- **Storage.** `SpaceRow` carries `policy` in place of the six read, write and
app fields, and `SpaceStoragePort` gains `removeAllMembers` and
`removeSpaceWriter`. SQLite and Durable Object storage convert existing spaces
on start: one with a managing app becomes a managedspace and loses its
members, and any other becomes a memberspace that keeps them.
- Account migration of spaces (`importRepo`, `exportSpaceMeta`,
`importSpaceMeta`) is not implemented.