Repository navigation
Version Packages - #252
Merged
Merged
Version Packages#252
Conversation
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
November 1, 2026 04:35
d550ba8 to
0f917c8
Compare
This was referenced Nov 1, 2026
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
November 1, 2026 05:18
0f917c8 to
29ca56d
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
November 1, 2026 05:27
29ca56d to
6d40d18
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.23.0
Minor Changes
6b8e205:
EmailMessagecarries an optionalheadersrecord, taken from@seamless-auth/types0.34.0, so an override or a custom transport can send headers such asList-UnsubscribeandList-Unsubscribe-Post. Core passes an override's headers to the email transport untouched;@seamless-auth/messaging-awssends them through SES v2 and validates the names and values.SendEnrollmentInviteEmailInputnow comes from@seamless-auth/typesrather than being declared in core, and the Express, Fastify and Next.js adapters export it alongside the other messaging types.397d74d: Rotate a recovery session right after it enrolls a factor. In cookie transport, a 2xx from
POST /webAuthn/register/finishorPOST /totp/enroll/verifymade with a recovery session (recovery: trueon the access token) now refreshes the session and sets new access and refresh cookies on the same response, sorequireAuthstops answeringenrollment_requiredat once, as the Go, Python and Rust adapters already do. When a silent refresh earlier in the request already rotated the session, the refresh token it issued is the one used, so the auth API never sees a replay; the cookies from that silent refresh are replaced rather than sent twice. If the refresh fails the enrollment answer is unchanged. Bearer transport is unchanged. Core exportsrefreshAfterRecoveryEnrollmentandrefreshSessionToken.bec9b80: Add verify-only resource servers for APIs that receive the OpenID Provider's access tokens (RFC 9068).
createResourceServer({ issuer, audience })needs no cookie secret, service secret or auth routes: it finds the provider's keys through discovery (orjwksUri/jwks), checksiss,aud, theat+jwtheader and the token's claims, and refuses a sender-constrained (cnf) token unless aconfirmhook accepts it.Express and Fastify get
requireAuth(),requireScope(),requireRole()andrequireStepUp()guards; Next.js getsprotect(handler, { scopes, roles, stepUp })andauthenticate(request).requireStepUp({ acrValues: ["phr"], maxAge: 300 })answers with the RFC 9470insufficient_user_authenticationchallenge. The verified user carriesclientId,scopes,sid,orgId,acr,amrandauthTime, andrequest.useris widened with those as optional fields.GuardRejectiongains optionalheaders.Every Seamless adapter (these, Go, Python and Rust) answers the same signed vectors in
packages/core/tests/fixtures/verify-onlythe same way.Patch Changes
POST /system-config/oauth-providers/{id}/discoveryfrom the bundled manifest, so an adapter that cannot fetch the live manifest still reaches the auth API route that reads an OAuth provider's discovery document again. Account notice deliveries accept theapplication_noticenotice from@seamless-auth/types0.34, andSendAccountNoticeEmailInputandSendAccountNoticeSmsInputcarry the optionalapplication(clientIdandname) the auth API sends with it, for a handler or override that renders its own template.AccountNoticeApplicationis re-exported./admin/applicationsand/admin/resources), so the admin console reaches them through every adapter even when the live manifest cannot be fetched. Express, Fastify and Next.js serve them from the manifest with no hand registration, and parity tests hold the three adapters together on path, method, body, access token and step-up refusals.ensureCookiesrefreshed the session butcheckProxyIdentitystill looked for the access cookie on the incoming request and answered 401access session required, so the first request after the access cookie expired failed and only the retry worked. A session refreshed earlier in the request now satisfies theaccessidentity, for passthrough routes and manifest routes in Express, Fastify and Next.js. A refreshed session still never stands in for a pre-auth or registration cookie. TheuserthatensureCookiesreturns carriesrefreshed: trueafter a silent refresh.@seamless-auth/types^0.34.0, the stable release, instead of the 0.34.0 prerelease.@seamless-auth/express@0.23.0
Minor Changes
6b8e205:
EmailMessagecarries an optionalheadersrecord, taken from@seamless-auth/types0.34.0, so an override or a custom transport can send headers such asList-UnsubscribeandList-Unsubscribe-Post. Core passes an override's headers to the email transport untouched;@seamless-auth/messaging-awssends them through SES v2 and validates the names and values.SendEnrollmentInviteEmailInputnow comes from@seamless-auth/typesrather than being declared in core, and the Express, Fastify and Next.js adapters export it alongside the other messaging types.397d74d: Rotate a recovery session right after it enrolls a factor. In cookie transport, a 2xx from
POST /webAuthn/register/finishorPOST /totp/enroll/verifymade with a recovery session (recovery: trueon the access token) now refreshes the session and sets new access and refresh cookies on the same response, sorequireAuthstops answeringenrollment_requiredat once, as the Go, Python and Rust adapters already do. When a silent refresh earlier in the request already rotated the session, the refresh token it issued is the one used, so the auth API never sees a replay; the cookies from that silent refresh are replaced rather than sent twice. If the refresh fails the enrollment answer is unchanged. Bearer transport is unchanged. Core exportsrefreshAfterRecoveryEnrollmentandrefreshSessionToken.bec9b80: Add verify-only resource servers for APIs that receive the OpenID Provider's access tokens (RFC 9068).
createResourceServer({ issuer, audience })needs no cookie secret, service secret or auth routes: it finds the provider's keys through discovery (orjwksUri/jwks), checksiss,aud, theat+jwtheader and the token's claims, and refuses a sender-constrained (cnf) token unless aconfirmhook accepts it.Express and Fastify get
requireAuth(),requireScope(),requireRole()andrequireStepUp()guards; Next.js getsprotect(handler, { scopes, roles, stepUp })andauthenticate(request).requireStepUp({ acrValues: ["phr"], maxAge: 300 })answers with the RFC 9470insufficient_user_authenticationchallenge. The verified user carriesclientId,scopes,sid,orgId,acr,amrandauthTime, andrequest.useris widened with those as optional fields.GuardRejectiongains optionalheaders.Every Seamless adapter (these, Go, Python and Rust) answers the same signed vectors in
packages/core/tests/fixtures/verify-onlythe same way.Patch Changes
ensureCookiesrefreshed the session butcheckProxyIdentitystill looked for the access cookie on the incoming request and answered 401access session required, so the first request after the access cookie expired failed and only the retry worked. A session refreshed earlier in the request now satisfies theaccessidentity, for passthrough routes and manifest routes in Express, Fastify and Next.js. A refreshed session still never stands in for a pre-auth or registration cookie. TheuserthatensureCookiesreturns carriesrefreshed: trueafter a silent refresh.@seamless-auth/fastify@0.14.0
Minor Changes
6b8e205:
EmailMessagecarries an optionalheadersrecord, taken from@seamless-auth/types0.34.0, so an override or a custom transport can send headers such asList-UnsubscribeandList-Unsubscribe-Post. Core passes an override's headers to the email transport untouched;@seamless-auth/messaging-awssends them through SES v2 and validates the names and values.SendEnrollmentInviteEmailInputnow comes from@seamless-auth/typesrather than being declared in core, and the Express, Fastify and Next.js adapters export it alongside the other messaging types.397d74d: Rotate a recovery session right after it enrolls a factor. In cookie transport, a 2xx from
POST /webAuthn/register/finishorPOST /totp/enroll/verifymade with a recovery session (recovery: trueon the access token) now refreshes the session and sets new access and refresh cookies on the same response, sorequireAuthstops answeringenrollment_requiredat once, as the Go, Python and Rust adapters already do. When a silent refresh earlier in the request already rotated the session, the refresh token it issued is the one used, so the auth API never sees a replay; the cookies from that silent refresh are replaced rather than sent twice. If the refresh fails the enrollment answer is unchanged. Bearer transport is unchanged. Core exportsrefreshAfterRecoveryEnrollmentandrefreshSessionToken.bec9b80: Add verify-only resource servers for APIs that receive the OpenID Provider's access tokens (RFC 9068).
createResourceServer({ issuer, audience })needs no cookie secret, service secret or auth routes: it finds the provider's keys through discovery (orjwksUri/jwks), checksiss,aud, theat+jwtheader and the token's claims, and refuses a sender-constrained (cnf) token unless aconfirmhook accepts it.Express and Fastify get
requireAuth(),requireScope(),requireRole()andrequireStepUp()guards; Next.js getsprotect(handler, { scopes, roles, stepUp })andauthenticate(request).requireStepUp({ acrValues: ["phr"], maxAge: 300 })answers with the RFC 9470insufficient_user_authenticationchallenge. The verified user carriesclientId,scopes,sid,orgId,acr,amrandauthTime, andrequest.useris widened with those as optional fields.GuardRejectiongains optionalheaders.Every Seamless adapter (these, Go, Python and Rust) answers the same signed vectors in
packages/core/tests/fixtures/verify-onlythe same way.Patch Changes
ensureCookiesrefreshed the session butcheckProxyIdentitystill looked for the access cookie on the incoming request and answered 401access session required, so the first request after the access cookie expired failed and only the retry worked. A session refreshed earlier in the request now satisfies theaccessidentity, for passthrough routes and manifest routes in Express, Fastify and Next.js. A refreshed session still never stands in for a pre-auth or registration cookie. TheuserthatensureCookiesreturns carriesrefreshed: trueafter a silent refresh.@seamless-auth/nextjs@0.7.0
Minor Changes
6b8e205:
EmailMessagecarries an optionalheadersrecord, taken from@seamless-auth/types0.34.0, so an override or a custom transport can send headers such asList-UnsubscribeandList-Unsubscribe-Post. Core passes an override's headers to the email transport untouched;@seamless-auth/messaging-awssends them through SES v2 and validates the names and values.SendEnrollmentInviteEmailInputnow comes from@seamless-auth/typesrather than being declared in core, and the Express, Fastify and Next.js adapters export it alongside the other messaging types.397d74d: Rotate a recovery session right after it enrolls a factor. In cookie transport, a 2xx from
POST /webAuthn/register/finishorPOST /totp/enroll/verifymade with a recovery session (recovery: trueon the access token) now refreshes the session and sets new access and refresh cookies on the same response, sorequireAuthstops answeringenrollment_requiredat once, as the Go, Python and Rust adapters already do. When a silent refresh earlier in the request already rotated the session, the refresh token it issued is the one used, so the auth API never sees a replay; the cookies from that silent refresh are replaced rather than sent twice. If the refresh fails the enrollment answer is unchanged. Bearer transport is unchanged. Core exportsrefreshAfterRecoveryEnrollmentandrefreshSessionToken.bec9b80: Add verify-only resource servers for APIs that receive the OpenID Provider's access tokens (RFC 9068).
createResourceServer({ issuer, audience })needs no cookie secret, service secret or auth routes: it finds the provider's keys through discovery (orjwksUri/jwks), checksiss,aud, theat+jwtheader and the token's claims, and refuses a sender-constrained (cnf) token unless aconfirmhook accepts it.Express and Fastify get
requireAuth(),requireScope(),requireRole()andrequireStepUp()guards; Next.js getsprotect(handler, { scopes, roles, stepUp })andauthenticate(request).requireStepUp({ acrValues: ["phr"], maxAge: 300 })answers with the RFC 9470insufficient_user_authenticationchallenge. The verified user carriesclientId,scopes,sid,orgId,acr,amrandauthTime, andrequest.useris widened with those as optional fields.GuardRejectiongains optionalheaders.Every Seamless adapter (these, Go, Python and Rust) answers the same signed vectors in
packages/core/tests/fixtures/verify-onlythe same way.Patch Changes
POST /system-config/oauth-providers/{id}/discoveryfrom the bundled manifest, so an adapter that cannot fetch the live manifest still reaches the auth API route that reads an OAuth provider's discovery document again. Account notice deliveries accept theapplication_noticenotice from@seamless-auth/types0.34, andSendAccountNoticeEmailInputandSendAccountNoticeSmsInputcarry the optionalapplication(clientIdandname) the auth API sends with it, for a handler or override that renders its own template.AccountNoticeApplicationis re-exported.ensureCookiesrefreshed the session butcheckProxyIdentitystill looked for the access cookie on the incoming request and answered 401access session required, so the first request after the access cookie expired failed and only the retry worked. A session refreshed earlier in the request now satisfies theaccessidentity, for passthrough routes and manifest routes in Express, Fastify and Next.js. A refreshed session still never stands in for a pre-auth or registration cookie. TheuserthatensureCookiesreturns carriesrefreshed: trueafter a silent refresh.@seamless-auth/types^0.34.0, the stable release, instead of the 0.34.0 prerelease.