From 6abdb46c87a0c676879031cf5de957226978beea Mon Sep 17 00:00:00 2001 From: Brandon Corbett Date: Thu, 30 Jul 2026 23:17:11 -0400 Subject: [PATCH] chore(deps): move templates onto the SDKs that allow skipping a passkey Registration used to end on a screen with one control on it. A user who did not want a passkey, or whose device could not make one, had no way forward. @seamless-auth/react 0.8.0 offers a skip when the instance has a login method other than passkey enabled, and says plainly when it does not. The web and API templates move together because the feature spans them. The skip is gated on reading GET /system-config/public from the auth server, and the adapters serve routes from an explicit list, so a React template on 0.8.0 needs an API template that proxies the new route. Upgrading the web templates alone would leave the read failing and the skip permanently hidden. @seamless-auth/react 0.7.0 -> 0.8.0 (both React templates) @seamless-auth/express 0.11.0 -> 0.12.0 @seamless-auth/fastify 0.2.0 -> 0.3.0 Verified with npm run validate, and with npm install and npm run build in all four templates the way CI does it, plus npm run lint in both API templates. --- .changeset/seamless-sdks-passkey-skip.md | 19 +++++++++++++++++++ templates/api/express/package-lock.json | 16 ++++++++-------- templates/api/express/package.json | 2 +- templates/api/fastify/package-lock.json | 16 ++++++++-------- templates/api/fastify/package.json | 2 +- templates/web/react-oauth/package-lock.json | 16 ++++++++-------- templates/web/react-oauth/package.json | 2 +- templates/web/react-vite/package-lock.json | 16 ++++++++-------- templates/web/react-vite/package.json | 2 +- 9 files changed, 55 insertions(+), 36 deletions(-) create mode 100644 .changeset/seamless-sdks-passkey-skip.md diff --git a/.changeset/seamless-sdks-passkey-skip.md b/.changeset/seamless-sdks-passkey-skip.md new file mode 100644 index 0000000..7659c8b --- /dev/null +++ b/.changeset/seamless-sdks-passkey-skip.md @@ -0,0 +1,19 @@ +--- +'seamless-templates': minor +--- + +Move the templates onto the Seamless SDK releases that let a user finish registration without a +passkey. + +Registration used to end on a screen with one control on it. A user who did not want a passkey, or +whose device could not make one, had no way forward. `@seamless-auth/react` 0.8.0 offers a skip when +the instance has a login method other than `passkey` enabled, and says plainly when it does not. + +The web and API templates have to move together for that to work. The skip is gated on reading +`GET /system-config/public` from the auth server, and the adapters serve routes from an explicit +list, so the React templates on 0.8.0 need an API template that proxies the new route. A web +template upgraded on its own would read nothing, and fall back to showing no skip at all. + +- `@seamless-auth/react` 0.7.0 to 0.8.0 in both React templates +- `@seamless-auth/express` 0.11.0 to 0.12.0 +- `@seamless-auth/fastify` 0.2.0 to 0.3.0 diff --git a/templates/api/express/package-lock.json b/templates/api/express/package-lock.json index ea809ed..6964b82 100644 --- a/templates/api/express/package-lock.json +++ b/templates/api/express/package-lock.json @@ -9,7 +9,7 @@ "version": "0.2.0", "license": "AGPL-3.0-only", "dependencies": { - "@seamless-auth/express": "^0.11.0", + "@seamless-auth/express": "^0.12.0", "cookie-parser": "^1.4.7", "cors": "^2.8.5", "dotenv": "^16.6.1", @@ -789,9 +789,9 @@ } }, "node_modules/@seamless-auth/core": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@seamless-auth/core/-/core-0.11.0.tgz", - "integrity": "sha512-qChaPnT/0KT3tq3CYTHxbcOdQJxpcEtJCAhXgzMQFQj1rEngJpzTYcP3lwi2m7VrYS68So6VstJRCwtPcYfojg==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@seamless-auth/core/-/core-0.12.0.tgz", + "integrity": "sha512-lK2iZLOpS4G446MpztKgH93p4MRisAHnuoZyyWw1DRUT9rPIkVguzzyAjjb1pE2DOY6g/y7xgzMpOfS2e2I77w==", "license": "AGPL-3.0-only", "dependencies": { "@seamless-auth/types": "^0.4.0", @@ -803,12 +803,12 @@ } }, "node_modules/@seamless-auth/express": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@seamless-auth/express/-/express-0.11.0.tgz", - "integrity": "sha512-TlL1fKai/DpAjMAkogcxEw1aGYdB5hKBEw1OXqXpACj4RyympRYrTBhK/8MiiU/YX+zt7hjS9Zoc7pLCQhYcjw==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@seamless-auth/express/-/express-0.12.0.tgz", + "integrity": "sha512-vg7Dr9iU2Mzhl9poSXhmeltDDlN2abSOAlR2B+R2+HEkLrebSk3PQWKToj+AJURXl5YnOHnsjOTsef57sg6Urg==", "license": "AGPL-3.0-only", "dependencies": { - "@seamless-auth/core": "^0.11.0", + "@seamless-auth/core": "^0.12.0", "cookie-parser": "^1.4.6", "jsonwebtoken": "^9.0.3" }, diff --git a/templates/api/express/package.json b/templates/api/express/package.json index e3ff731..724601e 100644 --- a/templates/api/express/package.json +++ b/templates/api/express/package.json @@ -17,7 +17,7 @@ "lint": "npx eslint src" }, "dependencies": { - "@seamless-auth/express": "^0.11.0", + "@seamless-auth/express": "^0.12.0", "cookie-parser": "^1.4.7", "cors": "^2.8.5", "dotenv": "^16.6.1", diff --git a/templates/api/fastify/package-lock.json b/templates/api/fastify/package-lock.json index 9b0ccf8..afdd455 100644 --- a/templates/api/fastify/package-lock.json +++ b/templates/api/fastify/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@fastify/cookie": "^11.1.2", "@fastify/cors": "^11.3.0", - "@seamless-auth/fastify": "^0.2.0", + "@seamless-auth/fastify": "^0.3.0", "dotenv": "^16.6.1", "fastify": "^5.11.0", "pg": "^8.16.3", @@ -957,9 +957,9 @@ } }, "node_modules/@seamless-auth/core": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@seamless-auth/core/-/core-0.11.0.tgz", - "integrity": "sha512-qChaPnT/0KT3tq3CYTHxbcOdQJxpcEtJCAhXgzMQFQj1rEngJpzTYcP3lwi2m7VrYS68So6VstJRCwtPcYfojg==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@seamless-auth/core/-/core-0.12.0.tgz", + "integrity": "sha512-lK2iZLOpS4G446MpztKgH93p4MRisAHnuoZyyWw1DRUT9rPIkVguzzyAjjb1pE2DOY6g/y7xgzMpOfS2e2I77w==", "license": "AGPL-3.0-only", "dependencies": { "@seamless-auth/types": "^0.4.0", @@ -971,13 +971,13 @@ } }, "node_modules/@seamless-auth/fastify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@seamless-auth/fastify/-/fastify-0.2.0.tgz", - "integrity": "sha512-eBWBz4tkb/gXIsEce4q5pEDRZIdd/eH3SizA5wd5x9jilR55VGJmIknoTUvPSS/9+ujmHSRButhqsLVab9sjyQ==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@seamless-auth/fastify/-/fastify-0.3.0.tgz", + "integrity": "sha512-3w24OAbLMCaOxKftM30owXRvh8khi+ptCBL7vLI8j5qek/II+tgH1ID8EKRgZc/A9bRRajEcBDZh3aBE4lh++Q==", "license": "AGPL-3.0-only", "dependencies": { "@fastify/cookie": "^11.0.2", - "@seamless-auth/core": "^0.11.0", + "@seamless-auth/core": "^0.12.0", "fastify-plugin": "^5.0.1" }, "engines": { diff --git a/templates/api/fastify/package.json b/templates/api/fastify/package.json index 4568303..806d2a8 100644 --- a/templates/api/fastify/package.json +++ b/templates/api/fastify/package.json @@ -19,7 +19,7 @@ "dependencies": { "@fastify/cookie": "^11.1.2", "@fastify/cors": "^11.3.0", - "@seamless-auth/fastify": "^0.2.0", + "@seamless-auth/fastify": "^0.3.0", "dotenv": "^16.6.1", "fastify": "^5.11.0", "pg": "^8.16.3", diff --git a/templates/web/react-oauth/package-lock.json b/templates/web/react-oauth/package-lock.json index 9ae3629..ccbb24b 100644 --- a/templates/web/react-oauth/package-lock.json +++ b/templates/web/react-oauth/package-lock.json @@ -9,7 +9,7 @@ "version": "0.2.1", "license": "AGPL-3.0-only", "dependencies": { - "@seamless-auth/react": "^0.7.0", + "@seamless-auth/react": "^0.8.0", "@tailwindcss/vite": "^4.1.17", "lucide-react": "^0.554.0", "react": "^19.1.1", @@ -1369,12 +1369,12 @@ ] }, "node_modules/@seamless-auth/react": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@seamless-auth/react/-/react-0.7.0.tgz", - "integrity": "sha512-LhEKHmAEzl41onAvC3HqAbEvfAbnNTc8+3oGZtxv2YZQYNqWBAWdOk2Mq80JhixCThRUPN10yurvv7PDdsiNUg==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@seamless-auth/react/-/react-0.8.0.tgz", + "integrity": "sha512-8kKo8XMzQf+mlATOrWnAsIfZthxt2XW1ZO2o3kosjxloWZcQG5lZyrdWByhszp3crih04iTzPd45/r5kC9tlwg==", "license": "AGPL-3.0-only", "dependencies": { - "@seamless-auth/types": "^0.4.0", + "@seamless-auth/types": "^0.5.0", "@simplewebauthn/browser": "^13.1.0", "eslint-plugin-license-header": "^0.9.0", "libphonenumber-js": "^1.12.7", @@ -1391,9 +1391,9 @@ } }, "node_modules/@seamless-auth/types": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@seamless-auth/types/-/types-0.4.1.tgz", - "integrity": "sha512-8yHPpu3Gzvc5EJEPRmitnniRHHBN7CcMVwfHb0w6qE+1e5Z062U0secoHEb1jOwMjV67XNanlMo6lks9RZ8UtA==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@seamless-auth/types/-/types-0.5.0.tgz", + "integrity": "sha512-T566YQu8FqUmqgte0A0iJpjTDXUKq/d/7uvLlXGXKtdl52Edo0r3iafL3kx4OM0cRJM63tBGe9s4MTjRUth6yA==", "license": "AGPL-3.0-only", "dependencies": { "zod": "^4.3.6" diff --git a/templates/web/react-oauth/package.json b/templates/web/react-oauth/package.json index ff44040..1d267df 100644 --- a/templates/web/react-oauth/package.json +++ b/templates/web/react-oauth/package.json @@ -17,7 +17,7 @@ }, "author": "Fells Code LLC", "dependencies": { - "@seamless-auth/react": "^0.7.0", + "@seamless-auth/react": "^0.8.0", "@tailwindcss/vite": "^4.1.17", "lucide-react": "^0.554.0", "react": "^19.1.1", diff --git a/templates/web/react-vite/package-lock.json b/templates/web/react-vite/package-lock.json index 7b5855e..e56324c 100644 --- a/templates/web/react-vite/package-lock.json +++ b/templates/web/react-vite/package-lock.json @@ -9,7 +9,7 @@ "version": "0.2.1", "license": "AGPL-3.0-only", "dependencies": { - "@seamless-auth/react": "^0.7.0", + "@seamless-auth/react": "^0.8.0", "@tailwindcss/vite": "^4.1.17", "lucide-react": "^0.554.0", "react": "^19.1.1", @@ -1369,12 +1369,12 @@ ] }, "node_modules/@seamless-auth/react": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@seamless-auth/react/-/react-0.7.0.tgz", - "integrity": "sha512-LhEKHmAEzl41onAvC3HqAbEvfAbnNTc8+3oGZtxv2YZQYNqWBAWdOk2Mq80JhixCThRUPN10yurvv7PDdsiNUg==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@seamless-auth/react/-/react-0.8.0.tgz", + "integrity": "sha512-8kKo8XMzQf+mlATOrWnAsIfZthxt2XW1ZO2o3kosjxloWZcQG5lZyrdWByhszp3crih04iTzPd45/r5kC9tlwg==", "license": "AGPL-3.0-only", "dependencies": { - "@seamless-auth/types": "^0.4.0", + "@seamless-auth/types": "^0.5.0", "@simplewebauthn/browser": "^13.1.0", "eslint-plugin-license-header": "^0.9.0", "libphonenumber-js": "^1.12.7", @@ -1391,9 +1391,9 @@ } }, "node_modules/@seamless-auth/types": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@seamless-auth/types/-/types-0.4.1.tgz", - "integrity": "sha512-8yHPpu3Gzvc5EJEPRmitnniRHHBN7CcMVwfHb0w6qE+1e5Z062U0secoHEb1jOwMjV67XNanlMo6lks9RZ8UtA==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@seamless-auth/types/-/types-0.5.0.tgz", + "integrity": "sha512-T566YQu8FqUmqgte0A0iJpjTDXUKq/d/7uvLlXGXKtdl52Edo0r3iafL3kx4OM0cRJM63tBGe9s4MTjRUth6yA==", "license": "AGPL-3.0-only", "dependencies": { "zod": "^4.3.6" diff --git a/templates/web/react-vite/package.json b/templates/web/react-vite/package.json index f9ae09e..05da8d0 100644 --- a/templates/web/react-vite/package.json +++ b/templates/web/react-vite/package.json @@ -16,7 +16,7 @@ }, "author": "Fells Code LLC", "dependencies": { - "@seamless-auth/react": "^0.7.0", + "@seamless-auth/react": "^0.8.0", "@tailwindcss/vite": "^4.1.17", "lucide-react": "^0.554.0", "react": "^19.1.1",