Skip to content

fix(verify): build the conformance adapter on Express 5 / Node 24#71

Merged
Bccorb merged 1 commit into
mainfrom
fix/conformance-express5-node24
Jul 21, 2026
Merged

fix(verify): build the conformance adapter on Express 5 / Node 24#71
Bccorb merged 1 commit into
mainfrom
fix/conformance-express5-node24

Conversation

@Bccorb

@Bccorb Bccorb commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Root cause

Conformance CI (conformance workflow → seamless verify --local) has been failing on every branch since the ecosystem upgraded to Node 24. The failure is not the Node image version — it's an npm peer-dependency conflict.

The verify harness's adapter app (verify/adapter-app) pinned express@^4.19.2. On the server repo's default branch, @seamless-auth/express@0.8.0 now declares:

peerDependencies: { "express": ">=5.0.0", "@types/express": ">=5.0.0" }
engines:          { "node": ">=24 <25" }

In --local mode the SDK is built from source and packed into a tarball, then installed over the adapter's deps. Installing @seamless-auth/express (peer express@>=5) on top of Express 4 aborts with ERESOLVE, which fails the adapter Docker build, cancels the whole compose build, and makes seamless verify exit 1.

From the failing run:

npm error ERESOLVE unable to resolve dependency tree
npm error Found: express@4.22.2  (express@"^4.19.2" from the root project)
npm error Could not resolve dependency:
npm error peer express@">=5.0.0" from @seamless-auth/express@0.8.0
target adapter: failed to solve: ... exit code: 1

Fix

  • verify/adapter-app/package.json: express@^4.19.2 → ^5.1.0, @seamless-auth/express@^0.6.0 → ^0.8.0.
  • Bump the verify Docker images node:20 → node:24 (adapter Dockerfile + the react service's inline Dockerfile) to match the ecosystem's supported runtime (node >=24 <25).

server.mjs already uses only Express 5-safe APIs (named :email param, no wildcard routes, no removed app.del/req.param), so no code changes were needed there.

Validation

Reproduced the exact adapter install locally against freshly-packed SDK tarballs from the server repo:

  • Old config (express@^4.19.2): reproduces the CI ERESOLVE failure. ✅ confirmed the root cause.
  • New config (express@^5.1.0): SDK tarballs install cleanly (resolves express@5.2.1), the adapter boots (verify adapter listening), and GET / + the GET /__captured/:email route both respond correctly.

Repo test suite: 552 passed. A patch changeset is included (the verify/ dir ships in the package files).

Note: this is independent of and separate from the recently added seamless login --local mode.

The verify adapter app pinned express@^4, but @seamless-auth/express now
declares a peer of express@>=5 (alongside the ecosystem's move to Node 24).
Installing the locally-built SDK tarball in --local mode aborted the adapter
Docker build with an ERESOLVE peer conflict, canceling the whole compose
build and failing every conformance run.

Depend on express@^5.1.0 and @seamless-auth/express@^0.8.0, and bump the
verify Docker images from node:20 to node:24 to match the ecosystem's
supported runtime. server.mjs already uses only Express 5-safe APIs.
@Bccorb
Bccorb merged commit 45b7767 into main Jul 21, 2026
1 check failed
@Bccorb
Bccorb deleted the fix/conformance-express5-node24 branch July 21, 2026 14:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant