ci: release#159
Merged
Merged
Conversation
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
atproto-pds | c4f33ec | May 04 2026, 10:31 PM |
commit: |
ef4c2bc to
840876f
Compare
840876f to
c4f33ec
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@getcirrus/oauth-provider@0.4.0
Minor Changes
#158
ec935b1Thanks @ascorbic! - Support granular OAuth permissions and permission sets per the atproto permission spec.repo:,rpc:,blob:,account:,identity:scopes are parsed and enforced (via@atproto/oauth-scopes);transition:generic/transition:email/transition:chat.bskykeep working through the transitional shim.verifyAccessTokennow accepts a(perms) => p.assertRepo({ collection, action })-style check callback in addition to the legacy required-scope string.createRecord,putRecord,deleteRecord,applyWrites,uploadBlob) assert the matching scope before dispatching.include:NSID?aud=...permission-set scopes are resolved via@atcute/lexicon-resolverand expanded inline at code-issuance time, so resource-server checks never need network access. The PDS caches resolved permission sets in DO SQLite with the spec's stale-while-revalidate semantics (24h soft / 90d hard).<details>disclosure, so a 30-scope client like tangled.org renders as a few audit-friendly lines instead of a wall of text.include:scopes render the resolved bundle's title/detail.Note on legacy auth: session JWTs (from
createSession/ app-password flow), service JWTs, and the staticAUTH_TOKENcontinue to bypass scope checks at resource handlers — they're treated as fully-trusted callers per their original semantics (app-password equivalents). The newrpc:proxy enforcement only applies to OAuth (DPoP) tokens; legacy clients can still call any AppView method via the proxy regardless of granular scopes.Patch Changes
d1a7074Thanks @a-lavis! - Fix two OAuth token refresh bugs that prevented spec-compliant clients (e.g. tangled.org via indigo) from refreshing their session after the access token expired.TokenData(accessExpiresAt/refreshExpiresAt) instead of a singleexpiresAt.cleanup()now prunes byrefreshExpiresAt, so a row isn't deleted while its refresh token is still valid. The PDS SQLite store migrates legacyoauth_tokensrows in place, derivingrefresh_expires_atasMAX(expires_at, issued_at + REFRESH_TOKEN_TTL).WWW-Authenticate: DPoP error="invalid_token"on 401 responses for invalid/expired OAuth access tokens, as required by the atproto XRPC spec. Clients that gate refresh on this header (indigo, and others) will now refresh automatically instead of staying logged-in-but-broken until the user signs out.@getcirrus/pds@0.14.0
Minor Changes
#158
ec935b1Thanks @ascorbic! - Support granular OAuth permissions and permission sets per the atproto permission spec.repo:,rpc:,blob:,account:,identity:scopes are parsed and enforced (via@atproto/oauth-scopes);transition:generic/transition:email/transition:chat.bskykeep working through the transitional shim.verifyAccessTokennow accepts a(perms) => p.assertRepo({ collection, action })-style check callback in addition to the legacy required-scope string.createRecord,putRecord,deleteRecord,applyWrites,uploadBlob) assert the matching scope before dispatching.include:NSID?aud=...permission-set scopes are resolved via@atcute/lexicon-resolverand expanded inline at code-issuance time, so resource-server checks never need network access. The PDS caches resolved permission sets in DO SQLite with the spec's stale-while-revalidate semantics (24h soft / 90d hard).<details>disclosure, so a 30-scope client like tangled.org renders as a few audit-friendly lines instead of a wall of text.include:scopes render the resolved bundle's title/detail.Note on legacy auth: session JWTs (from
createSession/ app-password flow), service JWTs, and the staticAUTH_TOKENcontinue to bypass scope checks at resource handlers — they're treated as fully-trusted callers per their original semantics (app-password equivalents). The newrpc:proxy enforcement only applies to OAuth (DPoP) tokens; legacy clients can still call any AppView method via the proxy regardless of granular scopes.Patch Changes
#153
6e4d81dThanks @georgemblack! - Fixcom.atproto.server.checkAccountStatusresponse to be lexicon-compliant:privateStateValuesis a requiredinteger(not nullable), so return0instead ofnullin both the activated and not-activated branches.#155
d1a7074Thanks @a-lavis! - Fix two OAuth token refresh bugs that prevented spec-compliant clients (e.g. tangled.org via indigo) from refreshing their session after the access token expired.TokenData(accessExpiresAt/refreshExpiresAt) instead of a singleexpiresAt.cleanup()now prunes byrefreshExpiresAt, so a row isn't deleted while its refresh token is still valid. The PDS SQLite store migrates legacyoauth_tokensrows in place, derivingrefresh_expires_atasMAX(expires_at, issued_at + REFRESH_TOKEN_TTL).WWW-Authenticate: DPoP error="invalid_token"on 401 responses for invalid/expired OAuth access tokens, as required by the atproto XRPC spec. Clients that gate refresh on this header (indigo, and others) will now refresh automatically instead of staying logged-in-but-broken until the user signs out.Updated dependencies [
ec935b1,d1a7074]: