Repository navigation
Version Packages - #265
Merged
Merged
Version Packages#265
Conversation
github-actions
Bot
force-pushed
the
changeset-release/main
branch
2 times, most recently
from
November 1, 2026 23:55
0ca5baf to
8fbbe59
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
November 2, 2026 00:44
8fbbe59 to
6fd23cd
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
@seamless-auth/core@0.24.0
Minor Changes
bdf2160: Passthrough routes come from the auth API's adapter manifest, and guard and not-found responses match the Go, Python and Rust adapters.
Breaking response changes:
requireAuthanswers401 {"error":"unauthenticated"}for a missing, invalid or expired session and for an ephemeral token. It used to answer"Failed to find authentication token required"or"Invalid or expired session".requireRoleanswers403 {"error":"insufficient_role"}when no listed role is granted, including for a user with no roles. The body no longer carriesrequiredandactual, so a client never sees the user's roles. A request no guard authenticated gets401 {"error":"unauthenticated"}.404 {"error":"not_found"}instead of callingnext(). Fastify and Next.js already did.POST /users/updateis no longer served. The auth API has no such route, so it only ever answered the API's 404.The static passthrough tables are gone. Organizations, step-up, TOTP, credentials, OAuth provider configuration, admin organizations, enrollment, review accounts, the auth event export and integrity check, and the coverage report are served from the manifest, like any other route the adapter has no handler for. In cookie transport their bodies no longer carry
tokenorrefreshToken. A dot segment in one of their path parameters answers404 not_foundrather than400 bad_request, and no upstream call is made either way. A recovery session that enrolls an authenticator app is still rotated right away.OTP verification, magic link polling and verification, and organization switching also drop tokens from a cookie-transport body when the auth API's answer is not a complete session.
setSeamlessLoggerand theSeamlessLoggertype are exported from@seamless-auth/express,@seamless-auth/fastifyand@seamless-auth/nextjs, and every warning and error those packages log goes through it.82687e6: Next.js: add
requireAuth(handler, options)andrequireRole(roles, handler, options)to guard App Router route handlers. They accept the access cookie or the auth API's access token inAuthorization: Bearer, verify the token against the auth API's key set (so roles come from a token the API signed), refuse recovery sessions unlessallowRecoverySessionis set, apply the origin check to cookie requests, and never refresh. Refusals answer401 {"error":"unauthenticated"},403 {"error":"enrollment_required"},403 {"error":"cross_site_request_blocked"}or403 {"error":"insufficient_role"}, without naming any roles. The user handed to the route carriesorganizationIdfrom the token'sorg_id. A role guard with no roles throws at setup.Next.js: add a
trustedProxiesoption (addresses or CIDR ranges) that reads the client IP fromX-Forwarded-For, walking from the right past your proxies, whenresolveClientIpis not given. Nothing is forwarded when neither is set, as before, but the handler now logs one warning at startup saying so.getSeamlessSessiontakes the requestheaderswithtrustedProxiesorresolveClientIpand forwards the client IP, and reads the user agent from them whenuserAgentis not given.Core:
authenticateBearerandauthenticateRequest(with bearer verification on) setorganizationIdon the user from the verified access token'sorg_id. The newGuardUsertype describes it.3096144: Calls to the auth API now behave the same as in the Go, Python and Rust adapters.
POST. TheGETroutes they called are deprecated in the auth API and missing from its adapter manifest.timeoutMsonauthFetch). An auth API that cannot be reached or does not answer in time gets502 {"error":"upstream_unavailable"}instead of a hung request or500 internal_error.authServerUrlwith its path kept, so an auth API mounted under a prefix such ashttps://example.com/auth-apiis verified against its own keys./registration/registerverifies the registration token (issuer, audience,typephemeral, and asubmatching the body) before it sets the registration cookie or returns the token to a bearer client, and answers502 {"error":"invalid_upstream_session"}when it fails.Breaking for code that calls
registerHandlerfrom@seamless-auth/coredirectly:RegisterOptionsnow requiresaudienceand acceptsauthServerIssuer, likeLoginOptions. The express, fastify and nextjs adapters pass both already.Patch Changes
verifyRefreshCookieaccepts only a refresh cookie: a signed payload with a non-emptysubandrefreshTokenand no upstreamtoken. Every adapter cookie is signed with the same secret, so before this a pre-auth, registration or access cookie placed in the refresh cookie slot verified too, andhasSeamlessSessionin@seamless-auth/nextjsreported a session for it. Refresh cookies issued by earlier versions already have this shape and keep working.@seamless-auth/express@0.24.0
Minor Changes
bdf2160: Passthrough routes come from the auth API's adapter manifest, and guard and not-found responses match the Go, Python and Rust adapters.
Breaking response changes:
requireAuthanswers401 {"error":"unauthenticated"}for a missing, invalid or expired session and for an ephemeral token. It used to answer"Failed to find authentication token required"or"Invalid or expired session".requireRoleanswers403 {"error":"insufficient_role"}when no listed role is granted, including for a user with no roles. The body no longer carriesrequiredandactual, so a client never sees the user's roles. A request no guard authenticated gets401 {"error":"unauthenticated"}.404 {"error":"not_found"}instead of callingnext(). Fastify and Next.js already did.POST /users/updateis no longer served. The auth API has no such route, so it only ever answered the API's 404.The static passthrough tables are gone. Organizations, step-up, TOTP, credentials, OAuth provider configuration, admin organizations, enrollment, review accounts, the auth event export and integrity check, and the coverage report are served from the manifest, like any other route the adapter has no handler for. In cookie transport their bodies no longer carry
tokenorrefreshToken. A dot segment in one of their path parameters answers404 not_foundrather than400 bad_request, and no upstream call is made either way. A recovery session that enrolls an authenticator app is still rotated right away.OTP verification, magic link polling and verification, and organization switching also drop tokens from a cookie-transport body when the auth API's answer is not a complete session.
setSeamlessLoggerand theSeamlessLoggertype are exported from@seamless-auth/express,@seamless-auth/fastifyand@seamless-auth/nextjs, and every warning and error those packages log goes through it.Patch Changes
3096144: Calls to the auth API now behave the same as in the Go, Python and Rust adapters.
POST. TheGETroutes they called are deprecated in the auth API and missing from its adapter manifest.timeoutMsonauthFetch). An auth API that cannot be reached or does not answer in time gets502 {"error":"upstream_unavailable"}instead of a hung request or500 internal_error.authServerUrlwith its path kept, so an auth API mounted under a prefix such ashttps://example.com/auth-apiis verified against its own keys./registration/registerverifies the registration token (issuer, audience,typephemeral, and asubmatching the body) before it sets the registration cookie or returns the token to a bearer client, and answers502 {"error":"invalid_upstream_session"}when it fails.Breaking for code that calls
registerHandlerfrom@seamless-auth/coredirectly:RegisterOptionsnow requiresaudienceand acceptsauthServerIssuer, likeLoginOptions. The express, fastify and nextjs adapters pass both already.Updated dependencies [bdf2160]
Updated dependencies [82687e6]
Updated dependencies [241a207]
Updated dependencies [3096144]
@seamless-auth/fastify@0.15.0
Minor Changes
bdf2160: Passthrough routes come from the auth API's adapter manifest, and guard and not-found responses match the Go, Python and Rust adapters.
Breaking response changes:
requireAuthanswers401 {"error":"unauthenticated"}for a missing, invalid or expired session and for an ephemeral token. It used to answer"Failed to find authentication token required"or"Invalid or expired session".requireRoleanswers403 {"error":"insufficient_role"}when no listed role is granted, including for a user with no roles. The body no longer carriesrequiredandactual, so a client never sees the user's roles. A request no guard authenticated gets401 {"error":"unauthenticated"}.404 {"error":"not_found"}instead of callingnext(). Fastify and Next.js already did.POST /users/updateis no longer served. The auth API has no such route, so it only ever answered the API's 404.The static passthrough tables are gone. Organizations, step-up, TOTP, credentials, OAuth provider configuration, admin organizations, enrollment, review accounts, the auth event export and integrity check, and the coverage report are served from the manifest, like any other route the adapter has no handler for. In cookie transport their bodies no longer carry
tokenorrefreshToken. A dot segment in one of their path parameters answers404 not_foundrather than400 bad_request, and no upstream call is made either way. A recovery session that enrolls an authenticator app is still rotated right away.OTP verification, magic link polling and verification, and organization switching also drop tokens from a cookie-transport body when the auth API's answer is not a complete session.
setSeamlessLoggerand theSeamlessLoggertype are exported from@seamless-auth/express,@seamless-auth/fastifyand@seamless-auth/nextjs, and every warning and error those packages log goes through it.Patch Changes
3096144: Calls to the auth API now behave the same as in the Go, Python and Rust adapters.
POST. TheGETroutes they called are deprecated in the auth API and missing from its adapter manifest.timeoutMsonauthFetch). An auth API that cannot be reached or does not answer in time gets502 {"error":"upstream_unavailable"}instead of a hung request or500 internal_error.authServerUrlwith its path kept, so an auth API mounted under a prefix such ashttps://example.com/auth-apiis verified against its own keys./registration/registerverifies the registration token (issuer, audience,typephemeral, and asubmatching the body) before it sets the registration cookie or returns the token to a bearer client, and answers502 {"error":"invalid_upstream_session"}when it fails.Breaking for code that calls
registerHandlerfrom@seamless-auth/coredirectly:RegisterOptionsnow requiresaudienceand acceptsauthServerIssuer, likeLoginOptions. The express, fastify and nextjs adapters pass both already.Updated dependencies [bdf2160]
Updated dependencies [82687e6]
Updated dependencies [241a207]
Updated dependencies [3096144]
@seamless-auth/nextjs@0.8.0
Minor Changes
bdf2160: Passthrough routes come from the auth API's adapter manifest, and guard and not-found responses match the Go, Python and Rust adapters.
Breaking response changes:
requireAuthanswers401 {"error":"unauthenticated"}for a missing, invalid or expired session and for an ephemeral token. It used to answer"Failed to find authentication token required"or"Invalid or expired session".requireRoleanswers403 {"error":"insufficient_role"}when no listed role is granted, including for a user with no roles. The body no longer carriesrequiredandactual, so a client never sees the user's roles. A request no guard authenticated gets401 {"error":"unauthenticated"}.404 {"error":"not_found"}instead of callingnext(). Fastify and Next.js already did.POST /users/updateis no longer served. The auth API has no such route, so it only ever answered the API's 404.The static passthrough tables are gone. Organizations, step-up, TOTP, credentials, OAuth provider configuration, admin organizations, enrollment, review accounts, the auth event export and integrity check, and the coverage report are served from the manifest, like any other route the adapter has no handler for. In cookie transport their bodies no longer carry
tokenorrefreshToken. A dot segment in one of their path parameters answers404 not_foundrather than400 bad_request, and no upstream call is made either way. A recovery session that enrolls an authenticator app is still rotated right away.OTP verification, magic link polling and verification, and organization switching also drop tokens from a cookie-transport body when the auth API's answer is not a complete session.
setSeamlessLoggerand theSeamlessLoggertype are exported from@seamless-auth/express,@seamless-auth/fastifyand@seamless-auth/nextjs, and every warning and error those packages log goes through it.82687e6: Next.js: add
requireAuth(handler, options)andrequireRole(roles, handler, options)to guard App Router route handlers. They accept the access cookie or the auth API's access token inAuthorization: Bearer, verify the token against the auth API's key set (so roles come from a token the API signed), refuse recovery sessions unlessallowRecoverySessionis set, apply the origin check to cookie requests, and never refresh. Refusals answer401 {"error":"unauthenticated"},403 {"error":"enrollment_required"},403 {"error":"cross_site_request_blocked"}or403 {"error":"insufficient_role"}, without naming any roles. The user handed to the route carriesorganizationIdfrom the token'sorg_id. A role guard with no roles throws at setup.Next.js: add a
trustedProxiesoption (addresses or CIDR ranges) that reads the client IP fromX-Forwarded-For, walking from the right past your proxies, whenresolveClientIpis not given. Nothing is forwarded when neither is set, as before, but the handler now logs one warning at startup saying so.getSeamlessSessiontakes the requestheaderswithtrustedProxiesorresolveClientIpand forwards the client IP, and reads the user agent from them whenuserAgentis not given.Core:
authenticateBearerandauthenticateRequest(with bearer verification on) setorganizationIdon the user from the verified access token'sorg_id. The newGuardUsertype describes it.Patch Changes
241a207:
verifyRefreshCookieaccepts only a refresh cookie: a signed payload with a non-emptysubandrefreshTokenand no upstreamtoken. Every adapter cookie is signed with the same secret, so before this a pre-auth, registration or access cookie placed in the refresh cookie slot verified too, andhasSeamlessSessionin@seamless-auth/nextjsreported a session for it. Refresh cookies issued by earlier versions already have this shape and keep working.3096144: Calls to the auth API now behave the same as in the Go, Python and Rust adapters.
POST. TheGETroutes they called are deprecated in the auth API and missing from its adapter manifest.timeoutMsonauthFetch). An auth API that cannot be reached or does not answer in time gets502 {"error":"upstream_unavailable"}instead of a hung request or500 internal_error.authServerUrlwith its path kept, so an auth API mounted under a prefix such ashttps://example.com/auth-apiis verified against its own keys./registration/registerverifies the registration token (issuer, audience,typephemeral, and asubmatching the body) before it sets the registration cookie or returns the token to a bearer client, and answers502 {"error":"invalid_upstream_session"}when it fails.Breaking for code that calls
registerHandlerfrom@seamless-auth/coredirectly:RegisterOptionsnow requiresaudienceand acceptsauthServerIssuer, likeLoginOptions. The express, fastify and nextjs adapters pass both already.Updated dependencies [bdf2160]
Updated dependencies [82687e6]
Updated dependencies [241a207]
Updated dependencies [3096144]