From 82f3fa415284fb895029856da96b68caad761aaa Mon Sep 17 00:00:00 2001 From: Brandon Corbett Date: Sat, 21 Mar 2026 01:58:19 -0400 Subject: [PATCH 1/6] feat: add magic link to core package --- .../pollMagicLinkConfirmationHandler.ts | 102 ++++++++++++++++++ .../src/handlers/requestMagicLinkHandler.ts | 39 +++++++ .../src/handlers/verifyMagicLinkHandler.ts | 41 +++++++ packages/core/src/index.ts | 3 + 4 files changed, 185 insertions(+) create mode 100644 packages/core/src/handlers/pollMagicLinkConfirmationHandler.ts create mode 100644 packages/core/src/handlers/requestMagicLinkHandler.ts create mode 100644 packages/core/src/handlers/verifyMagicLinkHandler.ts diff --git a/packages/core/src/handlers/pollMagicLinkConfirmationHandler.ts b/packages/core/src/handlers/pollMagicLinkConfirmationHandler.ts new file mode 100644 index 0000000..ee16a5a --- /dev/null +++ b/packages/core/src/handlers/pollMagicLinkConfirmationHandler.ts @@ -0,0 +1,102 @@ +import { authFetch } from "../authFetch.js"; +import type { CookiePayload } from "../ensureCookies.js"; +import { verifySignedAuthResponse } from "../verifySignedAuthResponse.js"; + +export interface PollMagicLinkConfirmationInput { + authorization?: string; +} + +export interface PollMagicLinkConfirmationOptions { + authServerUrl: string; + cookieDomain?: string; + accessCookieName: string; + refreshCookieName: string; +} + +export interface PollMagicLinkConfirmationResult { + status: number; + body?: unknown; + error?: unknown; + setCookies?: { + name: string; + value: CookiePayload; + ttl: number; + domain?: string; + }[]; +} + +export async function pollMagicLinkConfirmationHandler( + input: PollMagicLinkConfirmationInput, + opts: PollMagicLinkConfirmationOptions, +): Promise { + const up = await authFetch(`${opts.authServerUrl}/magic-link/check`, { + method: "GET", + authorization: input.authorization, + }); + + // 👇 Pending state (important for polling UX) + if (up.status === 204) { + return { + status: 204, + body: { message: "Not verified." }, + }; + } + + const data = await up.json(); + + if (!up.ok) { + return { + status: up.status, + error: data, + }; + } + + // 👇 Web mode: auth server already handled cookies + if (!data?.token || !data?.refreshToken || !data?.sub) { + return { + status: up.status, + body: data, + }; + } + + // 🔐 Verify signed response (same as WebAuthn flow) + const verifiedAccessToken = await verifySignedAuthResponse( + data.token, + opts.authServerUrl, + ); + + if (!verifiedAccessToken) { + throw new Error("Invalid signed response from Auth Server"); + } + + if (verifiedAccessToken.sub !== data.sub) { + throw new Error("Signature mismatch with data payload"); + } + + return { + status: 200, + body: data, + setCookies: [ + { + name: opts.accessCookieName, + value: { + sub: data.sub, + roles: data.roles, + email: data.email, + phone: data.phone, + }, + ttl: data.ttl, + domain: opts.cookieDomain, + }, + { + name: opts.refreshCookieName, + value: { + sub: data.sub, + refreshToken: data.refreshToken, + }, + ttl: data.refreshTtl, + domain: opts.cookieDomain, + }, + ], + }; +} diff --git a/packages/core/src/handlers/requestMagicLinkHandler.ts b/packages/core/src/handlers/requestMagicLinkHandler.ts new file mode 100644 index 0000000..1bc8abb --- /dev/null +++ b/packages/core/src/handlers/requestMagicLinkHandler.ts @@ -0,0 +1,39 @@ +import { authFetch } from "../authFetch.js"; + +export interface RequestMagicLinkInput { + authorization?: string; +} + +export interface RequestMagicLinkOptions { + authServerUrl: string; +} + +export interface RequestMagicLinkResult { + status: number; + body?: unknown; + error?: unknown; +} + +export async function requestMagicLinkHandler( + input: RequestMagicLinkInput, + opts: RequestMagicLinkOptions, +): Promise { + const up = await authFetch(`${opts.authServerUrl}/magic-link`, { + method: "GET", + authorization: input.authorization, + }); + + const data = await up.json(); + + if (!up.ok) { + return { + status: up.status, + error: data, + }; + } + + return { + status: up.status, + body: data, + }; +} diff --git a/packages/core/src/handlers/verifyMagicLinkHandler.ts b/packages/core/src/handlers/verifyMagicLinkHandler.ts new file mode 100644 index 0000000..0708df7 --- /dev/null +++ b/packages/core/src/handlers/verifyMagicLinkHandler.ts @@ -0,0 +1,41 @@ +import { authFetch } from "../authFetch.js"; + +export interface VerifyMagicLinkInput { + token: string; +} + +export interface VerifyMagicLinkOptions { + authServerUrl: string; +} + +export interface VerifyMagicLinkResult { + status: number; + body?: unknown; + error?: unknown; +} + +export async function verifyMagicLinkHandler( + input: VerifyMagicLinkInput, + opts: VerifyMagicLinkOptions, +): Promise { + const up = await authFetch( + `${opts.authServerUrl}/magic-link/verify/${input.token}`, + { + method: "GET", + }, + ); + + const data = await up.json(); + + if (!up.ok) { + return { + status: up.status, + error: data, + }; + } + + return { + status: up.status, + body: data, + }; +} diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index c6bf0db..2e64ec2 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -11,3 +11,6 @@ export * from "./handlers/register.js"; export * from "./handlers/finishRegister.js"; export * from "./handlers/logout.js"; export * from "./handlers/me.js"; +export * from "./handlers/verifyMagicLinkHandler.js"; +export * from "./handlers/requestMagicLinkHandler.js"; +export * from "./handlers/pollMagicLinkConfirmationHandler.js"; From 31b06acf9e6de32a8b321686757e0ae74c7d1d94 Mon Sep 17 00:00:00 2001 From: Brandon Corbett Date: Sat, 21 Mar 2026 02:06:57 -0400 Subject: [PATCH 2/6] feat: add magic links to express + remove beta release pipeline --- .github/workflows/beta-release-pipelie.yml | 158 ------------------ packages/express/src/createServer.ts | 14 ++ .../src/handlers/pollMagicLinkConfirmation.ts | 58 +++++++ .../express/src/middleware/requireAuth.ts | 6 +- 4 files changed, 77 insertions(+), 159 deletions(-) delete mode 100644 .github/workflows/beta-release-pipelie.yml create mode 100644 packages/express/src/handlers/pollMagicLinkConfirmation.ts diff --git a/.github/workflows/beta-release-pipelie.yml b/.github/workflows/beta-release-pipelie.yml deleted file mode 100644 index 5c42a60..0000000 --- a/.github/workflows/beta-release-pipelie.yml +++ /dev/null @@ -1,158 +0,0 @@ -name: Beta Release Pipeline - -on: - push: - branches: - - dev - -permissions: - contents: write - id-token: write - -jobs: - test: - name: Run Tests - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 2 - - - uses: actions/setup-node@v4 - with: - node-version: 20 - - - name: Install Core dependencies - working-directory: packages/core - run: npm ci - - - name: Install Express dependencies - working-directory: packages/express - run: npm ci - - - name: Test Core - working-directory: packages/core - run: npm test - - - name: Test Express - working-directory: packages/express - run: npm test - - bump-beta-versions: - name: Bump Beta Versions - runs-on: ubuntu-latest - needs: test - if: "!contains(github.event.head_commit.message, 'chore: bump beta versions')" - - outputs: - core_changed: ${{ steps.changes.outputs.core }} - express_changed: ${{ steps.changes.outputs.express }} - - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 2 - - - name: Detect package changes - id: changes - run: | - CORE=false - EXPRESS=false - - if git diff --name-only HEAD~1 HEAD | grep '^packages/core/'; then - CORE=true - fi - - if git diff --name-only HEAD~1 HEAD | grep '^packages/express/'; then - EXPRESS=true - fi - - echo "core=$CORE" >> $GITHUB_OUTPUT - echo "express=$EXPRESS" >> $GITHUB_OUTPUT - - - uses: actions/setup-node@v4 - if: steps.changes.outputs.core == 'true' || steps.changes.outputs.express == 'true' - with: - node-version: 20 - - - name: Bump core beta version - if: steps.changes.outputs.core == 'true' - working-directory: packages/core - run: npm version prerelease --preid=beta --no-git-tag-version - - - name: Bump express beta version - if: steps.changes.outputs.express == 'true' - working-directory: packages/express - run: npm version prerelease --preid=beta --no-git-tag-version - - - name: Commit version bumps - if: steps.changes.outputs.core == 'true' || steps.changes.outputs.express == 'true' - run: | - git config user.name "github-actions[bot]" - git config user.email "github-actions[bot]@users.noreply.github.com" - git add packages/*/package.json - git commit -m "chore: bump beta versions" - git push origin dev - - publish-core-beta: - name: Publish Core Beta - runs-on: ubuntu-latest - needs: bump-beta-versions - if: needs.bump-beta-versions.outputs.core_changed == 'true' - - steps: - - uses: actions/checkout@v4 - with: - ref: dev - fetch-depth: 0 - - - uses: actions/setup-node@v4 - with: - node-version: 20 - registry-url: https://registry.npmjs.org/ - - - name: Install dependencies - working-directory: packages/core - run: npm ci - - - name: Build - working-directory: packages/core - run: npm run build - - - name: Publish beta - working-directory: packages/core - run: npm publish --tag beta --access public - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - publish-express-beta: - name: Publish Express Beta - runs-on: ubuntu-latest - needs: bump-beta-versions - if: needs.bump-beta-versions.outputs.express_changed == 'true' - - steps: - - uses: actions/checkout@v4 - with: - ref: dev - fetch-depth: 0 - - - uses: actions/setup-node@v4 - with: - node-version: 20 - registry-url: https://registry.npmjs.org/ - - - name: Install dependencies - working-directory: packages/express - run: npm ci - - - name: Build - working-directory: packages/express - run: npm run build - - - name: Publish beta - working-directory: packages/express - run: npm publish --tag beta --access public - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/packages/express/src/createServer.ts b/packages/express/src/createServer.ts index c855384..e9b6cda 100644 --- a/packages/express/src/createServer.ts +++ b/packages/express/src/createServer.ts @@ -9,6 +9,7 @@ import { register } from "./handlers/register"; import { finishRegister } from "./handlers/finishRegister"; import { me } from "./handlers/me"; import { logout } from "./handlers/logout"; +import { pollMagicLinkConfirmation } from "./handlers/pollMagicLinkConfirmation"; import { authFetch, @@ -235,6 +236,19 @@ export function createSeamlessAuthServer( "/users/credentials", proxyWithIdentity("users/credentials", "access"), ); + r.get("/magic-link", proxyWithIdentity("magic-link", "preAuth", "GET")); + r.get("/magic-link/verify/:token", async (req, res) => { + const upstream = await authFetch( + `${resolvedOpts.authServerUrl}/magic-link/verify/${req.params.token}`, + { method: "GET" }, + ); + + const data = await upstream.json(); + res.status(upstream.status).json(data); + }); + r.get("/magic-link/check", (req, res) => + pollMagicLinkConfirmation(req, res, resolvedOpts), + ); return r; } diff --git a/packages/express/src/handlers/pollMagicLinkConfirmation.ts b/packages/express/src/handlers/pollMagicLinkConfirmation.ts new file mode 100644 index 0000000..79bc96c --- /dev/null +++ b/packages/express/src/handlers/pollMagicLinkConfirmation.ts @@ -0,0 +1,58 @@ +import { Request, Response } from "express"; +import { pollMagicLinkConfirmationHandler } from "@seamless-auth/core/handlers/magicLink/pollMagicLinkConfirmation"; +import { setSessionCookie } from "../internal/cookie"; +import { buildServiceAuthorization } from "../internal/buildAuthorization"; +import { SeamlessAuthServerOptions } from "../createServer"; + +export async function pollMagicLinkConfirmation( + req: Request & { cookiePayload?: any }, + res: Response, + opts: SeamlessAuthServerOptions, +) { + const cookieSigner = { + secret: opts.cookieSecret, + secure: process.env.NODE_ENV === "production", + sameSite: + process.env.NODE_ENV === "production" + ? "none" + : ("lax" as "none" | "lax"), + }; + + const authorization = buildServiceAuthorization(req, opts); + + const result = await pollMagicLinkConfirmationHandler( + { authorization }, + { + authServerUrl: opts.authServerUrl, + cookieDomain: opts.cookieDomain, + accessCookieName: opts.accessCookieName!, + refreshCookieName: opts.refreshCookieName!, + }, + ); + + if (!cookieSigner.secret) { + throw new Error("Missing COOKIE_SIGNING_KEY"); + } + + // 🍪 Set cookies if returned + if (result.setCookies) { + for (const c of result.setCookies) { + setSessionCookie( + res, + { + name: c.name, + payload: c.value, + domain: c.domain, + ttlSeconds: c.ttl, + }, + cookieSigner, + ); + } + } + + if (result.error) { + return res.status(result.status).json(result.error); + } + + res.status(result.status).json(result.body).end(); +} diff --git a/packages/express/src/middleware/requireAuth.ts b/packages/express/src/middleware/requireAuth.ts index 3f3cb5e..710670e 100644 --- a/packages/express/src/middleware/requireAuth.ts +++ b/packages/express/src/middleware/requireAuth.ts @@ -81,8 +81,12 @@ export function requireAuth(opts: RequireAuthOptions) { const token = req.cookies?.[cookieName]; if (!token) { + console.error( + "[SEAMLESS-AUTH-EXPRESS] - (requireAuth) - Missing expected cookie. Ensure you are using `cookieParser` in your express server", + cookieName, + ); res.status(401).json({ - error: "Authentication required", + error: "Failed to find authentication token required", }); return; } From 7c1fe91b129347b5a5da1862c6b7a0e94ea13f18 Mon Sep 17 00:00:00 2001 From: Brandon Corbett Date: Sat, 21 Mar 2026 02:07:21 -0400 Subject: [PATCH 3/6] chore: core v0.2.0 --- packages/core/package-lock.json | 4 ++-- packages/core/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/core/package-lock.json b/packages/core/package-lock.json index 7d430b8..e14b820 100644 --- a/packages/core/package-lock.json +++ b/packages/core/package-lock.json @@ -1,12 +1,12 @@ { "name": "@seamless-auth/core", - "version": "0.1.1", + "version": "0.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@seamless-auth/core", - "version": "0.1.1", + "version": "0.2.0", "license": "AGPL-3.0-only", "dependencies": { "jose": "^6.1.3", diff --git a/packages/core/package.json b/packages/core/package.json index 2641582..70d443a 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@seamless-auth/core", - "version": "0.1.2-beta.0", + "version": "0.2.0", "description": "Framework-agnostic core authentication logic for SeamlessAuth", "license": "AGPL-3.0-only", "author": "Fells Code, LLC", From 5b1ec5fa91d06546bb38351a8636b2c1df1670d6 Mon Sep 17 00:00:00 2001 From: Brandon Corbett Date: Sat, 21 Mar 2026 02:14:50 -0400 Subject: [PATCH 4/6] chore: express v0.1.0 --- packages/express/package-lock.json | 263 ++++++++++-------- packages/express/package.json | 4 +- .../src/handlers/pollMagicLinkConfirmation.ts | 2 +- .../tests/ensureCookies.middleware.test.js | 1 - 4 files changed, 154 insertions(+), 116 deletions(-) diff --git a/packages/express/package-lock.json b/packages/express/package-lock.json index b92f98c..f419bd7 100644 --- a/packages/express/package-lock.json +++ b/packages/express/package-lock.json @@ -1,15 +1,15 @@ { "name": "@seamless-auth/express", - "version": "0.0.2", + "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@seamless-auth/express", - "version": "0.0.2", + "version": "0.1.0", "license": "AGPL-3.0-only", "dependencies": { - "@seamless-auth/core": "beta", + "@seamless-auth/core": "^0.2.0", "cookie-parser": "^1.4.6", "jsonwebtoken": "^9.0.3" }, @@ -1386,9 +1386,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz", - "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", "cpu": [ "arm" ], @@ -1400,9 +1400,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz", - "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", "cpu": [ "arm64" ], @@ -1414,9 +1414,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz", - "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", "cpu": [ "arm64" ], @@ -1428,9 +1428,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz", - "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", "cpu": [ "x64" ], @@ -1442,9 +1442,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz", - "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", "cpu": [ "arm64" ], @@ -1456,9 +1456,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz", - "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", "cpu": [ "x64" ], @@ -1470,13 +1470,16 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz", - "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", "cpu": [ "arm" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -1484,13 +1487,16 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz", - "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", "cpu": [ "arm" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -1498,13 +1504,16 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz", - "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", "cpu": [ "arm64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -1512,13 +1521,16 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz", - "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", "cpu": [ "arm64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -1526,13 +1538,16 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz", - "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", "cpu": [ "loong64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -1540,13 +1555,16 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz", - "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", "cpu": [ "loong64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -1554,13 +1572,16 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz", - "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", "cpu": [ "ppc64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -1568,13 +1589,16 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz", - "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", "cpu": [ "ppc64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -1582,13 +1606,16 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz", - "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", "cpu": [ "riscv64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -1596,13 +1623,16 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz", - "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", "cpu": [ "riscv64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -1610,13 +1640,16 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz", - "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", "cpu": [ "s390x" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -1624,13 +1657,16 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz", - "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", "cpu": [ "x64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ @@ -1638,13 +1674,16 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz", - "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", "cpu": [ "x64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ @@ -1652,9 +1691,9 @@ ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz", - "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", "cpu": [ "x64" ], @@ -1666,9 +1705,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz", - "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", "cpu": [ "arm64" ], @@ -1680,9 +1719,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz", - "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", "cpu": [ "arm64" ], @@ -1694,9 +1733,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz", - "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", "cpu": [ "ia32" ], @@ -1708,9 +1747,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz", - "integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", "cpu": [ "x64" ], @@ -1722,9 +1761,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz", - "integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", "cpu": [ "x64" ], @@ -1736,9 +1775,9 @@ ] }, "node_modules/@seamless-auth/core": { - "version": "0.1.1-beta.2", - "resolved": "https://registry.npmjs.org/@seamless-auth/core/-/core-0.1.1-beta.2.tgz", - "integrity": "sha512-l8y30vLeqlLbR3uZa3MlqTo1mgrz1hxqQhoUr/MEaFNRrr/hA023ABzPgBb0DbnBf0cWRi7s5SeaJ4P+NAbZXw==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@seamless-auth/core/-/core-0.2.0.tgz", + "integrity": "sha512-kLNko/BMJXlztpV1v1ombvu+XJK/fQHqBJWol6TxjILkuUW18bOe7/RDq7j7RYYFNkfsJJh1rI68lHrQFU7rng==", "license": "AGPL-3.0-only", "dependencies": { "jose": "^6.1.3", @@ -4891,9 +4930,9 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -5485,9 +5524,9 @@ } }, "node_modules/rollup": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz", - "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", "dev": true, "license": "MIT", "dependencies": { @@ -5501,31 +5540,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.57.1", - "@rollup/rollup-android-arm64": "4.57.1", - "@rollup/rollup-darwin-arm64": "4.57.1", - "@rollup/rollup-darwin-x64": "4.57.1", - "@rollup/rollup-freebsd-arm64": "4.57.1", - "@rollup/rollup-freebsd-x64": "4.57.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", - "@rollup/rollup-linux-arm-musleabihf": "4.57.1", - "@rollup/rollup-linux-arm64-gnu": "4.57.1", - "@rollup/rollup-linux-arm64-musl": "4.57.1", - "@rollup/rollup-linux-loong64-gnu": "4.57.1", - "@rollup/rollup-linux-loong64-musl": "4.57.1", - "@rollup/rollup-linux-ppc64-gnu": "4.57.1", - "@rollup/rollup-linux-ppc64-musl": "4.57.1", - "@rollup/rollup-linux-riscv64-gnu": "4.57.1", - "@rollup/rollup-linux-riscv64-musl": "4.57.1", - "@rollup/rollup-linux-s390x-gnu": "4.57.1", - "@rollup/rollup-linux-x64-gnu": "4.57.1", - "@rollup/rollup-linux-x64-musl": "4.57.1", - "@rollup/rollup-openbsd-x64": "4.57.1", - "@rollup/rollup-openharmony-arm64": "4.57.1", - "@rollup/rollup-win32-arm64-msvc": "4.57.1", - "@rollup/rollup-win32-ia32-msvc": "4.57.1", - "@rollup/rollup-win32-x64-gnu": "4.57.1", - "@rollup/rollup-win32-x64-msvc": "4.57.1", + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", "fsevents": "~2.3.2" } }, diff --git a/packages/express/package.json b/packages/express/package.json index 2321270..5dd1fe7 100644 --- a/packages/express/package.json +++ b/packages/express/package.json @@ -1,6 +1,6 @@ { "name": "@seamless-auth/express", - "version": "0.0.3-beta.2", + "version": "0.1.0", "description": "Express adapter for Seamless Auth passwordless authentication", "license": "AGPL-3.0-only", "type": "module", @@ -37,7 +37,7 @@ "express": ">=4.18.0" }, "dependencies": { - "@seamless-auth/core": "beta", + "@seamless-auth/core": "^0.2.0", "cookie-parser": "^1.4.6", "jsonwebtoken": "^9.0.3" }, diff --git a/packages/express/src/handlers/pollMagicLinkConfirmation.ts b/packages/express/src/handlers/pollMagicLinkConfirmation.ts index 79bc96c..4090b4f 100644 --- a/packages/express/src/handlers/pollMagicLinkConfirmation.ts +++ b/packages/express/src/handlers/pollMagicLinkConfirmation.ts @@ -1,5 +1,5 @@ import { Request, Response } from "express"; -import { pollMagicLinkConfirmationHandler } from "@seamless-auth/core/handlers/magicLink/pollMagicLinkConfirmation"; +import { pollMagicLinkConfirmationHandler } from "@seamless-auth/core/handlers/pollMagicLinkConfirmationHandler"; import { setSessionCookie } from "../internal/cookie"; import { buildServiceAuthorization } from "../internal/buildAuthorization"; import { SeamlessAuthServerOptions } from "../createServer"; diff --git a/packages/express/tests/ensureCookies.middleware.test.js b/packages/express/tests/ensureCookies.middleware.test.js index 5a90ac2..3a18a87 100644 --- a/packages/express/tests/ensureCookies.middleware.test.js +++ b/packages/express/tests/ensureCookies.middleware.test.js @@ -2,7 +2,6 @@ import { jest } from "@jest/globals"; import express from "express"; import request from "supertest"; -// Mock core ensureCookies const ensureCookiesMock = jest.fn(); const { createEnsureCookiesMiddleware } = await import("../dist/index.js"); From a6ebad038f439b124224970de3f911bf581ccec1 Mon Sep 17 00:00:00 2001 From: Brandon Corbett Date: Sat, 21 Mar 2026 10:27:53 -0400 Subject: [PATCH 5/6] feat: add generate otp routes to express package --- packages/express/src/createServer.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/express/src/createServer.ts b/packages/express/src/createServer.ts index e9b6cda..9dc54e3 100644 --- a/packages/express/src/createServer.ts +++ b/packages/express/src/createServer.ts @@ -219,6 +219,15 @@ export function createSeamlessAuthServer( proxyWithIdentity("otp/verify-email-otp", "preAuth"), ); + r.get( + "/otp/generate-phone-otp", + proxyWithIdentity("otp/generate-phone-otp", "preAuth"), + ); + r.get( + "/otp/generate-email-otp", + proxyWithIdentity("otp/generate-email-otp", "preAuth"), + ); + r.post("/login", (req, res) => login(req, res, resolvedOpts)); r.post("/registration/register", (req, res) => register(req, res, resolvedOpts), From 5a36310340f800515f51905115b5cb4e8f27fafe Mon Sep 17 00:00:00 2001 From: Brandon Corbett Date: Sat, 21 Mar 2026 10:43:46 -0400 Subject: [PATCH 6/6] chore: version bump --- packages/express/package-lock.json | 4 ++-- packages/express/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/express/package-lock.json b/packages/express/package-lock.json index f419bd7..fe62ba9 100644 --- a/packages/express/package-lock.json +++ b/packages/express/package-lock.json @@ -1,12 +1,12 @@ { "name": "@seamless-auth/express", - "version": "0.1.0", + "version": "0.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@seamless-auth/express", - "version": "0.1.0", + "version": "0.1.1", "license": "AGPL-3.0-only", "dependencies": { "@seamless-auth/core": "^0.2.0", diff --git a/packages/express/package.json b/packages/express/package.json index 5dd1fe7..b6512ee 100644 --- a/packages/express/package.json +++ b/packages/express/package.json @@ -1,6 +1,6 @@ { "name": "@seamless-auth/express", - "version": "0.1.0", + "version": "0.1.1", "description": "Express adapter for Seamless Auth passwordless authentication", "license": "AGPL-3.0-only", "type": "module",