From f8d79feb19e42733fc4d2972b9f6023051bba57b Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Fri, 1 Mar 2024 21:37:36 +0200 Subject: [PATCH 01/16] feat(express): Introduce @clerk/express [SDK-644] --- .changeset/bright-gorillas-crash.md | 12 + .github/labeler.yml | 3 + .jit/config.yml | 3 + package-lock.json | 989 ++--------- packages/express/.eslintrc.js | 4 + packages/express/.gitignore | 8 + packages/express/.npmignore | 3 + packages/express/CHANGELOG.md | 1554 +++++++++++++++++ packages/express/LICENSE | 21 + packages/express/README.md | 102 ++ packages/express/jest.config.js | 17 + packages/express/jest.setup.js | 1 + packages/express/package.json | 79 + .../__snapshots__/exports.test.ts.snap | 12 + .../express/src/__tests__/exports.test.ts | 7 + packages/express/src/authenticateRequest.ts | 97 + packages/express/src/clerkClient.ts | 29 + packages/express/src/clerkMiddleware.ts | 43 + packages/express/src/errors.ts | 25 + packages/express/src/getAuth.ts | 13 + packages/express/src/globals.d.ts | 6 + packages/express/src/index.ts | 8 + packages/express/src/protect.ts | 35 + packages/express/src/types.ts | 35 + packages/express/src/utils.ts | 36 + packages/express/tsconfig.declarations.json | 12 + packages/express/tsconfig.json | 23 + packages/express/tsconfig.lint.json | 5 + packages/express/tsup.config.ts | 22 + packages/express/turbo.json | 28 + packages/sdk-node/src/index.ts | 2 +- scripts/canary.mjs | 1 + scripts/snapshot.mjs | 1 + 33 files changed, 2376 insertions(+), 860 deletions(-) create mode 100644 .changeset/bright-gorillas-crash.md create mode 100644 packages/express/.eslintrc.js create mode 100644 packages/express/.gitignore create mode 100644 packages/express/.npmignore create mode 100644 packages/express/CHANGELOG.md create mode 100644 packages/express/LICENSE create mode 100644 packages/express/README.md create mode 100644 packages/express/jest.config.js create mode 100644 packages/express/jest.setup.js create mode 100644 packages/express/package.json create mode 100644 packages/express/src/__tests__/__snapshots__/exports.test.ts.snap create mode 100644 packages/express/src/__tests__/exports.test.ts create mode 100644 packages/express/src/authenticateRequest.ts create mode 100644 packages/express/src/clerkClient.ts create mode 100644 packages/express/src/clerkMiddleware.ts create mode 100644 packages/express/src/errors.ts create mode 100644 packages/express/src/getAuth.ts create mode 100644 packages/express/src/globals.d.ts create mode 100644 packages/express/src/index.ts create mode 100644 packages/express/src/protect.ts create mode 100644 packages/express/src/types.ts create mode 100644 packages/express/src/utils.ts create mode 100644 packages/express/tsconfig.declarations.json create mode 100644 packages/express/tsconfig.json create mode 100644 packages/express/tsconfig.lint.json create mode 100644 packages/express/tsup.config.ts create mode 100644 packages/express/turbo.json diff --git a/.changeset/bright-gorillas-crash.md b/.changeset/bright-gorillas-crash.md new file mode 100644 index 00000000000..dc7745df554 --- /dev/null +++ b/.changeset/bright-gorillas-crash.md @@ -0,0 +1,12 @@ +--- +'@clerk/express': patch +--- + +Introduce Express specific Clerk SDK `@clerk/express`. The SDK exposes the following API: + +- clerkClient: default @clerk/backend client initialized from env variables and used to make BAPI requests +- clerkMiddleware: centralized middleware that authenticates all requests without blocking them (also triggers handshake mechanism) +- getAuth: utility to retrieve the auth state from the request (requires clerkMiddleware to executed) +- protect: middleware that returns http 401 response when request is signed-out + +Also all the top level exports from `@clerk/backend` are re-exported from `@clerk/express` top level. \ No newline at end of file diff --git a/.github/labeler.yml b/.github/labeler.yml index a38ef7e4567..836baf3e6ec 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -12,6 +12,9 @@ clerk-js: elements: - packages/elements/** +express: + - packages/express/** + expo: - packages/expo/** diff --git a/.jit/config.yml b/.jit/config.yml index bfb4be53d67..52a89383506 100644 --- a/.jit/config.yml +++ b/.jit/config.yml @@ -32,3 +32,6 @@ folders: - ./**/*.test.ts - path: /packages/themes - path: /packages/types + - path: /packages/express + exclude: + - ./**/*.test.ts diff --git a/package-lock.json b/package-lock.json index 01446d2d770..d7fe540ef4a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2964,6 +2964,10 @@ "resolved": "packages/elements", "link": true }, + "node_modules/@clerk/express": { + "resolved": "packages/express", + "link": true + }, "node_modules/@clerk/fastify": { "resolved": "packages/fastify", "link": true @@ -3845,78 +3849,13 @@ "version": "0.3.1", "license": "MIT" }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", - "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@esbuild/darwin-arm64": { "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", - "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -3925,294 +3864,6 @@ "node": ">=12" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "license": "MIT", @@ -9892,175 +9543,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", - "integrity": "sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz", - "integrity": "sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz", - "integrity": "sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz", - "integrity": "sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz", - "integrity": "sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz", - "integrity": "sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz", - "integrity": "sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz", - "integrity": "sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz", - "integrity": "sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz", - "integrity": "sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz", - "integrity": "sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz", - "integrity": "sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz", - "integrity": "sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/@rushstack/eslint-patch": { "version": "1.5.1", "license": "MIT" @@ -10977,9 +10471,8 @@ }, "node_modules/@types/estree": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/express": { "version": "4.17.14", @@ -17930,54 +17423,6 @@ "esbuild-windows-arm64": "0.15.18" } }, - "node_modules/esbuild-android-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", - "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz", - "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz", - "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/esbuild-darwin-arm64": { "version": "0.15.18", "cpu": [ @@ -17993,198 +17438,6 @@ "node": ">=12" } }, - "node_modules/esbuild-freebsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz", - "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz", - "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz", - "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz", - "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz", - "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz", - "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz", - "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz", - "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz", - "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz", - "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz", - "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz", - "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/esbuild-register": { "version": "3.4.2", "dev": true, @@ -18196,102 +17449,6 @@ "esbuild": ">=0.12 <1" } }, - "node_modules/esbuild-sunos-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz", - "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz", - "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz", - "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz", - "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/android-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", - "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", - "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/escalade": { "version": "3.1.1", "license": "MIT", @@ -32654,9 +31811,8 @@ }, "node_modules/rollup": { "version": "4.13.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.0.tgz", - "integrity": "sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "1.0.5" }, @@ -35625,9 +34781,8 @@ }, "node_modules/tsup": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.0.2.tgz", - "integrity": "sha512-NY8xtQXdH7hDUAZwcQdY/Vzlw9johQsaqf7iwZ6g1DOUlFYQ5/AtVAjTvihhEyeRlGo4dLRVHtrRaL35M1daqQ==", "dev": true, + "license": "MIT", "dependencies": { "bundle-require": "^4.0.0", "cac": "^6.7.12", @@ -35688,10 +34843,9 @@ }, "node_modules/tsup/node_modules/esbuild": { "version": "0.19.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", - "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -39038,8 +38192,7 @@ }, "packages/expo/node_modules/tslib": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + "license": "0BSD" }, "packages/expo/node_modules/uuid": { "version": "3.4.0", @@ -39064,6 +38217,124 @@ "dev": true, "license": "ISC" }, + "packages/express": { + "name": "@clerk/express", + "version": "0.0.1", + "license": "MIT", + "dependencies": { + "@clerk/backend": "1.0.0-beta.25", + "@clerk/shared": "2.0.0-beta.17", + "camelcase-keys": "6.2.2", + "snakecase-keys": "3.2.1" + }, + "devDependencies": { + "@clerk/types": "4.0.0-beta.18", + "@types/express": "4.17.14", + "@types/node": "^18.17.0", + "eslint-config-custom": "*", + "nock": "^13.0.7", + "npm-run-all": "^4.1.5", + "prettier": "^2.5.0", + "tslib": "2.4.1", + "tsup": "*", + "typescript": "*" + }, + "engines": { + "node": ">=18.17.0" + } + }, + "packages/express/node_modules/@clerk/backend": { + "version": "1.0.0-beta.25", + "license": "MIT", + "dependencies": { + "@clerk/shared": "2.0.0-beta.17", + "cookie": "0.5.0", + "snakecase-keys": "5.4.4", + "tslib": "2.4.1" + }, + "engines": { + "node": ">=18.17.0" + } + }, + "packages/express/node_modules/@clerk/backend/node_modules/snakecase-keys": { + "version": "5.4.4", + "license": "MIT", + "dependencies": { + "map-obj": "^4.1.0", + "snake-case": "^3.0.4", + "type-fest": "^2.5.2" + }, + "engines": { + "node": ">=12" + } + }, + "packages/express/node_modules/@clerk/shared": { + "version": "2.0.0-beta.17", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "0.4.1", + "js-cookie": "3.0.1", + "std-env": "^3.7.0", + "swr": "2.2.0" + }, + "engines": { + "node": ">=18.17.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "packages/express/node_modules/@clerk/types": { + "version": "4.0.0-beta.18", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "3.1.1" + }, + "engines": { + "node": ">=18.17.0" + } + }, + "packages/express/node_modules/csstype": { + "version": "3.1.1", + "dev": true, + "license": "MIT" + }, + "packages/express/node_modules/snakecase-keys": { + "version": "3.2.1", + "license": "MIT", + "dependencies": { + "map-obj": "^4.1.0", + "to-snake-case": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/express/node_modules/tslib": { + "version": "2.4.1", + "license": "0BSD" + }, + "packages/express/node_modules/type-fest": { + "version": "2.19.0", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "packages/fastify": { "name": "@clerk/fastify", "version": "1.0.0-beta.39", diff --git a/packages/express/.eslintrc.js b/packages/express/.eslintrc.js new file mode 100644 index 00000000000..41785d00428 --- /dev/null +++ b/packages/express/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: ['custom/node', 'custom/typescript', 'custom/jest'], +}; diff --git a/packages/express/.gitignore b/packages/express/.gitignore new file mode 100644 index 00000000000..6a53db05dea --- /dev/null +++ b/packages/express/.gitignore @@ -0,0 +1,8 @@ +*.log +.DS_Store +.idea +node_modules +dist +coverage +.env +.env.local diff --git a/packages/express/.npmignore b/packages/express/.npmignore new file mode 100644 index 00000000000..7c626297425 --- /dev/null +++ b/packages/express/.npmignore @@ -0,0 +1,3 @@ +* +!/dist/**/* +!/esm/**/* \ No newline at end of file diff --git a/packages/express/CHANGELOG.md b/packages/express/CHANGELOG.md new file mode 100644 index 00000000000..85b325d67f6 --- /dev/null +++ b/packages/express/CHANGELOG.md @@ -0,0 +1,1554 @@ +# Change Log + +## 5.0.0-beta.26 + +### Minor Changes + +- Pass environment into `sdkMetadata` in order to detect if production clerk-js is used by other sdks in dev mode. When it is log dev warning from clerk-js. ([#2802](https://github.com/clerk/javascript/pull/2802)) by [@panteliselef](https://github.com/panteliselef) + +## 5.0.0-beta.25 + +### Patch Changes + +- Updated dependencies [[`1834a3ee4`](https://github.com/clerk/javascript/commit/1834a3ee496ea27b9f7ceeb32ec5361f9de8ee30), [`15af02a83`](https://github.com/clerk/javascript/commit/15af02a837b0e87ea83f3a86dfacc149adca1345)]: + - @clerk/shared@2.0.0-beta.17 + - @clerk/backend@1.0.0-beta.25 + +## 5.0.0-beta.24 + +### Patch Changes + +- Updated dependencies [[`db18787c4`](https://github.com/clerk/javascript/commit/db18787c4d9fa8ee1306db9b65f3b3f5e2fe2dad)]: + - @clerk/shared@2.0.0-beta.16 + - @clerk/backend@1.0.0-beta.24 + +## 5.0.0-beta.23 + +### Patch Changes + +- Updated dependencies [[`6eab66050`](https://github.com/clerk/javascript/commit/6eab66050608a1bc5cb9aca6a234b1fea16106e5)]: + - @clerk/shared@2.0.0-beta.15 + - @clerk/backend@1.0.0-beta.23 + +## 5.0.0-beta.22 + +### Patch Changes + +- Updated dependencies [[`12f3c5c55`](https://github.com/clerk/javascript/commit/12f3c5c55580f93a81df27851fbc92ce1312107e)]: + - @clerk/shared@2.0.0-beta.14 + - @clerk/backend@1.0.0-beta.22 + +## 5.0.0-beta.21 + +### Patch Changes + +- Updated dependencies [[`051833167`](https://github.com/clerk/javascript/commit/0518331675ffb4d6c6830d79a1d61f9e4466773a)]: + - @clerk/backend@1.0.0-beta.21 + +## 5.0.0-beta.20 + +### Patch Changes + +- Rename beta-v5 to beta by [@nikosdouvlis](https://github.com/nikosdouvlis) + +- Updated dependencies [[`2de442b24`](https://github.com/clerk/javascript/commit/2de442b2465cc5d424b8a0b21aa57c557f3aa2e7)]: + - @clerk/backend@1.0.0-beta.20 + - @clerk/shared@2.0.0-beta.13 + +## 5.0.0-beta-v5.19 + +### Patch Changes + +- Updated dependencies [[`966b31205`](https://github.com/clerk/javascript/commit/966b312050b572fbbbc07a6f0581cbec21847375), [`a8901be64`](https://github.com/clerk/javascript/commit/a8901be64fe91125a0d38a3c880ffa73168ccf5c), [`7b200af49`](https://github.com/clerk/javascript/commit/7b200af4908839ea661ddf2a76811057b545cafc), [`244de5ea3`](https://github.com/clerk/javascript/commit/244de5ea3a7641727cd85c544bb79fb04f2c0808), [`034c47ccb`](https://github.com/clerk/javascript/commit/034c47ccbef0129b9be9ff8aef683aa039e52602), [`8daf8451c`](https://github.com/clerk/javascript/commit/8daf8451cb564bc834dd856174ffc2cdfa932e37), [`7f751c4ef`](https://github.com/clerk/javascript/commit/7f751c4ef2d14410058cf65ea984a93b50c0b87e), [`4fced88ac`](https://github.com/clerk/javascript/commit/4fced88acc66a4837779d8bbca359086cddeec56), [`be991365e`](https://github.com/clerk/javascript/commit/be991365e1c78d0f1dfc59bb33dd533b6fad223a), [`c2b982749`](https://github.com/clerk/javascript/commit/c2b98274970bac5af33c9bb2e84c70ad90225180)]: + - @clerk/backend@1.0.0-beta-v5.19 + - @clerk/shared@2.0.0-beta-v5.12 + +## 5.0.0-beta-v5.18 + +### Patch Changes + +- The following paginated APIs now return `{ data, totalCount }` instead of simple arrays, in order to make building paginated UIs easier: ([#2633](https://github.com/clerk/javascript/pull/2633)) by [@dimkl](https://github.com/dimkl) + + - `clerkClient.users.getOrganizationMembershipList(...)` + - `clerkClient.organization.getOrganizationList(...)` + - `clerkClient.organization.getOrganizationInvitationList(...)` + + Revert changing the `{ data, errors }` return value of the following helpers to throw the `errors` or return the `data` (keep v4 format): + + - `import { verifyToken } from '@clerk/backend'` + - `import { signJwt, hasValidSignature, decodeJwt, verifyJwt } from '@clerk/backend/jwt'` + - BAPI `clerkClient` methods eg (`clerkClient.users.getUserList(...)`) + +- Updated dependencies [[`8e5c881c4`](https://github.com/clerk/javascript/commit/8e5c881c40d7306c5dbd2e1f1803fbf75127bd71), [`d4ff346dd`](https://github.com/clerk/javascript/commit/d4ff346dd53bb3e1970e80bdc7b188c2dd344f12), [`a6308c67e`](https://github.com/clerk/javascript/commit/a6308c67e329879e001cee56cccd82e60b804422)]: + - @clerk/backend@1.0.0-beta-v5.18 + - @clerk/shared@2.0.0-beta-v5.11 + +## 5.0.0-alpha-v5.17 + +### Major Changes + +- Changes the `request.auth` type from `LegacyAuthObject` to `AuthObject`. ([#2609](https://github.com/clerk/javascript/pull/2609)) by [@dimkl](https://github.com/dimkl) + + ```typescript + type LegacyAuthObject = { + sessionId: string | null; + actor: ActClaim | undefined | null; + userId: string | null; + getToken: ServerGetToken | null; + debug: AuthObjectDebug | null; + claims: JwtPayload | null; + }; + + type AuthObject = { + sessionClaims: JwtPayload | null; + sessionId: string | null; + actor: ActClaim | undefined | null; + userId: string | null; + orgId: string | undefined | null; + orgRole: OrganizationCustomRoleKey | undefined | null; + orgSlug: string | undefined | null; + orgPermissions: OrganizationCustomPermissionKey[] | undefined | null; + getToken: ServerGetToken | null; + has: CheckAuthorizationWithCustomPermissions | null; + debug: AuthObjectDebug | null; + }; + ``` + +### Patch Changes + +- Updated dependencies [[`3a2f13604`](https://github.com/clerk/javascript/commit/3a2f13604e1b8b351a05de26d2c0672503aa67b3), [`9e99eb727`](https://github.com/clerk/javascript/commit/9e99eb7276249c68ef6f930cce418ce0004653b9), [`6fffd3b54`](https://github.com/clerk/javascript/commit/6fffd3b542f3df0bcb49281b7c4f77209a83f7a1)]: + - @clerk/backend@1.0.0-alpha-v5.17 + +## 5.0.0-alpha-v5.16 + +### Patch Changes + +- Update README for v5 ([#2577](https://github.com/clerk/javascript/pull/2577)) by [@LekoArts](https://github.com/LekoArts) + +- Updated dependencies [[`935b0886e`](https://github.com/clerk/javascript/commit/935b0886e8317445f30c92000a27ed68e1223ff6), [`6a769771c`](https://github.com/clerk/javascript/commit/6a769771c975996d8d52b35b5cfdbae5dcec85d4)]: + - @clerk/backend@1.0.0-alpha-v5.16 + +## 5.0.0-alpha-v5.15 + +### Minor Changes + +- Replace the `Clerk-Backend-SDK` header with `User-Agent` in BAPI requests and update it's value to contain both the package name and the package version of the clerk package ([#2558](https://github.com/clerk/javascript/pull/2558)) by [@dimkl](https://github.com/dimkl) + + executing the request. Eg request from `@clerk/nextjs` to BAPI with append `User-Agent: @clerk/nextjs@5.0.0-alpha-v5.16` using the latest version. + + Miscellaneous changes: The backend test build changed to use tsup. + +### Patch Changes + +- Updated dependencies [[`799abc281`](https://github.com/clerk/javascript/commit/799abc281182efb953dd6637f9db7fc61c71a2cd), [`8cc45d2af`](https://github.com/clerk/javascript/commit/8cc45d2af98320ccced3768fb039b86576e424a5), [`b4e79c1b9`](https://github.com/clerk/javascript/commit/b4e79c1b9ab8e14cbfccaf290f0f596da0416e13)]: + - @clerk/backend@1.0.0-alpha-v5.15 + - @clerk/shared@2.0.0-alpha-v5.10 + +## 5.0.0-alpha-v5.14 + +### Patch Changes + +- Updated dependencies [[`448e02e93`](https://github.com/clerk/javascript/commit/448e02e93cf2392878d5891009640c52103d99a8), [`e6ecbaa2f`](https://github.com/clerk/javascript/commit/e6ecbaa2ff7add95bf888cb4ce43457b9fde7a13), [`e921af259`](https://github.com/clerk/javascript/commit/e921af259e9bdc8810a830bed54d71cf8eced1f8)]: + - @clerk/backend@1.0.0-alpha-v5.14 + +## 5.0.0-alpha-v5.13 + +### Patch Changes + +- Updated dependencies [[`1dc28ab46`](https://github.com/clerk/javascript/commit/1dc28ab46f6930074334be183c637ce7a81bebf7), [`ea4933655`](https://github.com/clerk/javascript/commit/ea4933655863ce315324aa2a3be7d5f263c2b61f), [`38d8b3e8a`](https://github.com/clerk/javascript/commit/38d8b3e8a0387bcf0b9c8d16e3bbfcfe9b643ca2)]: + - @clerk/shared@2.0.0-alpha-v5.9 + - @clerk/backend@1.0.0-alpha-v5.13 + +## 5.0.0-alpha-v5.12 + +### Patch Changes + +- Integrate handshake handling into `ClerkExpressWithAuth()` and `ClerkExpressRequireWith()`. If the `authenticateRequest()` returns a redirect or is in a handshake state, the middlewares will properly handle this and respond accordingly. ([#2447](https://github.com/clerk/javascript/pull/2447)) by [@BRKalow](https://github.com/BRKalow) + +- Updated dependencies [[`7ecd6f6ab`](https://github.com/clerk/javascript/commit/7ecd6f6abb0e5bfb1a57c99cc11860de311c3e82)]: + - @clerk/shared@2.0.0-alpha-v5.8 + - @clerk/backend@1.0.0-alpha-v5.12 + +## 5.0.0-alpha-v5.11 + +### Patch Changes + +- Updated dependencies [[`f4f99f18d`](https://github.com/clerk/javascript/commit/f4f99f18de0be8afaae9f52599deb2814ab235e7), [`bad4de1a2`](https://github.com/clerk/javascript/commit/bad4de1a2fd8a3e2643fe26677801166a8305c29), [`e7e2a1eae`](https://github.com/clerk/javascript/commit/e7e2a1eae2ed726ab49894dd195185c8f4e70acd)]: + - @clerk/backend@1.0.0-alpha-v5.11 + +## 5.0.0-alpha-v5.10 + +### Major Changes + +- Drop all pre-instantiated Backend API resources (`allowlistIdentifiers`, `clients`, `emailAddresses`, `emails`, `invitations`, `organizations`, `phoneNumbers`, `redirectUrls`, `sessions`, `signInTokens`, `users`, `domains`). Use the `clerkClient` import instead. ([#2362](https://github.com/clerk/javascript/pull/2362)) by [@dimkl](https://github.com/dimkl) + + ```typescript + // Before + import { users } from '@clerk/clerk-sdk-node'; + // After + import { clerkClient } from '@clerk/clerk-sdk-node'; + clerkClient.users; + ``` + +- Changes in exports of `@clerk/backend`: ([#2363](https://github.com/clerk/javascript/pull/2363)) by [@dimkl](https://github.com/dimkl) + + - Expose the following helpers and enums from `@clerk/backend/internal`: + ```typescript + import { + AuthStatus, + buildRequestUrl, + constants, + createAuthenticateRequest, + createIsomorphicRequest, + debugRequestState, + makeAuthObjectSerializable, + prunePrivateMetadata, + redirect, + sanitizeAuthObject, + signedInAuthObject, + signedOutAuthObject, + } from '@clerk/backend/internal'; + ``` + - Drop the above exports from the top-level api: + ```typescript + // Before + import { AuthStatus, ... } from '@clerk/backend'; + // After + import { AuthStatus, ... } from '@clerk/backend/internal'; + ``` + Dropping those exports results in also dropping the exports from `gatsby-plugin-clerk`, `@clerk/clerk-sdk-node`, `@clerk/backend`, `@clerk/fastify`, `@clerk/nextjs`, `@clerk/remix` packages. + +- Changes in exports of `@clerk/backend`: ([#2365](https://github.com/clerk/javascript/pull/2365)) by [@dimkl](https://github.com/dimkl) + + - Drop the following internal exports from the top-level api: + ```typescript + // Before + import { + AllowlistIdentifier, + Client, + DeletedObject, + Email, + EmailAddress, + ExternalAccount, + IdentificationLink, + Invitation, + OauthAccessToken, + ObjectType, + Organization, + OrganizationInvitation, + OrganizationMembership, + OrganizationMembershipPublicUserData, + PhoneNumber, + RedirectUrl, + SMSMessage, + Session, + SignInToken, + Token, + User, + Verification, + } from '@clerk/backend'; + // After : no alternative since there is no need to use those classes + ``` + Dropping those exports results in also dropping the exports from `gatsby-plugin-clerk`, `@clerk/clerk-sdk-node`, `@clerk/backend`, `@clerk/fastify`, `@clerk/nextjs`, `@clerk/remix` packages. + - Keep those 3 resource related type exports + ```typescript + import type { Organization, Session, User, WebhookEvent, WebhookEventType } from '@clerk/backend'; + ``` + +- Changes in exports of `@clerk/backend`: ([#2364](https://github.com/clerk/javascript/pull/2364)) by [@dimkl](https://github.com/dimkl) + + - Expose the following helpers and enums from `@clerk/backend/jwt`: + ```typescript + import { decodeJwt, hasValidSignature, signJwt, verifyJwt } from '@clerk/backend/jwt'; + ``` + - Drop the above exports from the top-level api: + ```typescript + // Before + import { decodeJwt, ... } from '@clerk/backend'; + // After + import { decodeJwt, ... } from '@clerk/backend/jwt'; + ``` + Dropping those exports results in also dropping the exports from `gatsby-plugin-clerk`, `@clerk/clerk-sdk-node`, `@clerk/backend`, `@clerk/fastify`, `@clerk/nextjs`, `@clerk/remix` packages. + +- Changes in `@clerk/backend` exports: ([#2362](https://github.com/clerk/javascript/pull/2362)) by [@dimkl](https://github.com/dimkl) + + - Drop Internal `deserialize` helper + - Introduce `/errors` subpath export, eg: + ```typescript + import { + TokenVerificationError, + TokenVerificationErrorAction, + TokenVerificationErrorCode, + TokenVerificationErrorReason, + } from '@clerk/backend/errors'; + ``` + - Drop errors from top-level export + ```typescript + // Before + import { TokenVerificationError, TokenVerificationErrorReason } from '@clerk/backend'; + // After + import { TokenVerificationError, TokenVerificationErrorReason } from '@clerk/backend/errors'; + ``` + +### Minor Changes + +- Fix error thrown for undefined `Clerk` in case of using default clerkClient from `@clerk/clerk-sdk-node` without secretKey caused by replaced import. ([#2368](https://github.com/clerk/javascript/pull/2368)) by [@dimkl](https://github.com/dimkl) + +### Patch Changes + +- Updated dependencies [[`a9fe242be`](https://github.com/clerk/javascript/commit/a9fe242be4dbaaa02c6643fea0688f1fb23f23e7), [`1e98187b4`](https://github.com/clerk/javascript/commit/1e98187b4fba0f872576510d7bccf8b75a2579bd), [`d08ec6d8f`](https://github.com/clerk/javascript/commit/d08ec6d8f52a2bc037c0eb586123a9f7816e4b64), [`5f58a2274`](https://github.com/clerk/javascript/commit/5f58a22746aba94f76bef5dbbc94fa93ea3b0b7e), [`a9fe242be`](https://github.com/clerk/javascript/commit/a9fe242be4dbaaa02c6643fea0688f1fb23f23e7), [`0ec3a146c`](https://github.com/clerk/javascript/commit/0ec3a146cc4cbe4a80d1f990a440431ae4490183), [`1ad910eb9`](https://github.com/clerk/javascript/commit/1ad910eb92dce056731f29df0caaaad74d08bd7f), [`f58a9949b`](https://github.com/clerk/javascript/commit/f58a9949bc78737ca4e096ed5501b4e578a2d493), [`9b02c1aae`](https://github.com/clerk/javascript/commit/9b02c1aae1cae286ea305c5e216ae93cbbbc0f90)]: + - @clerk/backend@1.0.0-alpha-v5.10 + - @clerk/shared@2.0.0-alpha-v5.7 + +## 5.0.0-alpha-v5.9 + +### Patch Changes + +- Updated dependencies [[`e602d6c1f`](https://github.com/clerk/javascript/commit/e602d6c1fde7a7757d292f24dfaddecd14ac1623)]: + - @clerk/backend@1.0.0-alpha-v5.9 + +## 5.0.0-alpha-v5.8 + +### Major Changes + +- (Note: This is only relevant if, in the unlikely case, you are using `Clerk` from `@clerk/clerk-sdk-node` directly. If not, you can safely ignore this change.) ([#2317](https://github.com/clerk/javascript/pull/2317)) by [@tmilewski](https://github.com/tmilewski) + + Remove the named `Clerk` import from `@clerk/clerk-sdk-node` and import `createClerkClient` instead. The latter is a factory method to create a Clerk client instance for you. This update aligns usage across our SDKs and will enable us to ship DX improvements better in the future. + + ```js + import { Clerk } from '@clerk/clerk-sdk-node'; + const clerk = Clerk({ secretKey: '...' }); + ``` + + You need to rename the import from `Clerk` to `createClerkClient` and change its usage: + + ```js + import { createClerkClient } from '@clerk/clerk-sdk-node'; + const clerk = createClerkClient({ secretKey: '...' }); + ``` + +### Patch Changes + +- Updated dependencies [[`896cb6104`](https://github.com/clerk/javascript/commit/896cb610409f84c0ff7a4f502f0b4ccee1afc157), [`02976d494`](https://github.com/clerk/javascript/commit/02976d49473958b8c3fea38d4e389dc1bee7e8c4), [`86d52fb5c`](https://github.com/clerk/javascript/commit/86d52fb5cf68f1dc7adf617605b922134e21268f), [`46040a2f3`](https://github.com/clerk/javascript/commit/46040a2f34d0991072fca490e031c1994b2e2296), [`75ea300bc`](https://github.com/clerk/javascript/commit/75ea300bce16a0ce401a225263bb267ad2a217b8)]: + - @clerk/shared@2.0.0-alpha-v5.6 + - @clerk/backend@1.0.0-alpha-v5.8 + +## 5.0.0-alpha-v5.7 + +### Major Changes + +- Limit TokenVerificationError exports to TokenVerificationError and TokenVerificationErrorReason ([#2189](https://github.com/clerk/javascript/pull/2189)) by [@tmilewski](https://github.com/tmilewski) + +### Minor Changes + +- Add missing `createdAt` param in `User#createUser()` of `@clerk/backend`. ([#2284](https://github.com/clerk/javascript/pull/2284)) by [@dimkl](https://github.com/dimkl) + + Fix `clerkClient.verifyToken()` signature to support a single `token: string` parameter. + +### Patch Changes + +- Updated dependencies [[`de6519daa`](https://github.com/clerk/javascript/commit/de6519daa84732023bcfd74ad816a2654f457952), [`7af0949ae`](https://github.com/clerk/javascript/commit/7af0949ae7b4072f550dee220f4d41854fe504c6), [`e1f7eae87`](https://github.com/clerk/javascript/commit/e1f7eae87531b483564256f5456a31150caa469e)]: + - @clerk/backend@1.0.0-alpha-v5.7 + +## 5.0.0-alpha-v5.6 + +### Patch Changes + +- Drop the introduction of `OrganizationRole` and `OrganizationPermission` resources fro BAPI. ([#2252](https://github.com/clerk/javascript/pull/2252)) by [@panteliselef](https://github.com/panteliselef) + +- Set correct information on required Node.js and React versions in README ([#2264](https://github.com/clerk/javascript/pull/2264)) by [@LekoArts](https://github.com/LekoArts) + +- Updated dependencies [[`93d05c868`](https://github.com/clerk/javascript/commit/93d05c8680ed213e594a16d4630a65f8eb244b32), [`a6b893d28`](https://github.com/clerk/javascript/commit/a6b893d281b23dc7b4bd7f3733b33e4cf655bc1b), [`2e77cd737`](https://github.com/clerk/javascript/commit/2e77cd737a333de022533d29cb12e73a907694c8), [`d30ea1faa`](https://github.com/clerk/javascript/commit/d30ea1faa45074e09c037530e8ba3ca2dbd50654)]: + - @clerk/backend@1.0.0-alpha-v5.6 + - @clerk/shared@2.0.0-alpha-v5.5 + +## 5.0.0-alpha-v5.5 + +### Patch Changes + +- Updated dependencies [[`4b8bedc66`](https://github.com/clerk/javascript/commit/4b8bedc66d47dca5c6192148f4b31ae6d49ff733), [`c776f86fb`](https://github.com/clerk/javascript/commit/c776f86fb2a999dcae46fda9abb5005718c354b2)]: + - @clerk/shared@2.0.0-alpha-v5.4 + - @clerk/backend@1.0.0-alpha-v5.5 + +## 5.0.0-alpha-v5.4 + +### Patch Changes + +- Updated dependencies [[`03079579d`](https://github.com/clerk/javascript/commit/03079579d2b48a9a6969702814449382098d2cfb), [`12962bc58`](https://github.com/clerk/javascript/commit/12962bc58e2c9caad416ba4e6d52061d00bc2feb)]: + - @clerk/backend@1.0.0-alpha-v5.4 + +## 5.0.0-alpha-v5.3 + +### Minor Changes + +- Breaking Changes: ([#2169](https://github.com/clerk/javascript/pull/2169)) by [@dimkl](https://github.com/dimkl) + + - Drop `isLegacyFrontendApiKey` from `@clerk/shared` + - Drop default exports from `@clerk/clerk-js` + - on headless Clerk type + - on ui and ui.retheme `Portal` + - Use `isProductionFromSecretKey` instead of `isProductionFromApiKey` + - Use `isDevelopmentFromSecretKey` instead of `isDevelopmentFromApiKey` + + Changes: + + - Rename `HeadlessBrowserClerkConstrutor` / `HeadlessBrowserClerkConstructor` (typo) + - Use `isomorphicAtob` / `isomorhpicBtoa` to replace `base-64` in `@clerk/expo` + - Refactor merging build-time and runtime props in `@clerk/backend` clerk client + - Drop `node-fetch` dependency from `@clerk/backend` + - Drop duplicate test in `@clerk/backend` + +### Patch Changes + +- Remove createSms functions from @clerk/backend and @clerk/sdk-node. ([#2165](https://github.com/clerk/javascript/pull/2165)) by [@Nikpolik](https://github.com/Nikpolik) + + The equivalent /sms_messages Backend API endpoint will also dropped in the future, since this feature will no longer be available for new instances. + + For a brief period it will still be accessible for instances that have used it in the past 7 + days (13-11-2023 to 20-11-2023). + + New instances will get a 403 forbidden response if they try to access it. + +- Add OrganizationPermissionAPI for CRUD operations regarding instance level organization permissions. ([#2178](https://github.com/clerk/javascript/pull/2178)) by [@panteliselef](https://github.com/panteliselef) + +- Introduces telemetry collection from Clerk's SDKs. Collected telemetry will be used to gain insights into product usage and help drive roadmap priority. For more information, see https://clerk.com/docs/telemetry. ([#2154](https://github.com/clerk/javascript/pull/2154)) by [@BRKalow](https://github.com/BRKalow) + +- Updated dependencies [[`b3a3dcdf4`](https://github.com/clerk/javascript/commit/b3a3dcdf4a8fa75c0dee4c55ab8fedebd49fdfd4), [`4aaf5103d`](https://github.com/clerk/javascript/commit/4aaf5103d3132f4e1ae76b861fa6ce0aae02ecbe), [`52ff8fe6b`](https://github.com/clerk/javascript/commit/52ff8fe6b6ff88ceb5e1246378b54b0565bede9d), [`4bb57057e`](https://github.com/clerk/javascript/commit/4bb57057e9af20fc433626ed178d97d3ca811362), [`4aaf5103d`](https://github.com/clerk/javascript/commit/4aaf5103d3132f4e1ae76b861fa6ce0aae02ecbe), [`0ce0edc28`](https://github.com/clerk/javascript/commit/0ce0edc283849a88b14b4b0df53b6858ed3a4f80), [`40ac4b645`](https://github.com/clerk/javascript/commit/40ac4b645f449b546dae5b4c0d013c9d9ea6d09c)]: + - @clerk/backend@1.0.0-alpha-v5.3 + - @clerk/shared@2.0.0-alpha-v5.3 + +## 5.0.0-alpha-v5.2 + +### Major Changes + +- Change the minimal Node.js version required by Clerk to `18.17.0`. ([#2162](https://github.com/clerk/javascript/pull/2162)) by [@dimkl](https://github.com/dimkl) + +### Patch Changes + +- Updated dependencies [[`c2a090513`](https://github.com/clerk/javascript/commit/c2a0905132684a4a1e8d598b66caddf20062273e)]: + - @clerk/backend@1.0.0-alpha-v5.2 + - @clerk/shared@2.0.0-alpha-v5.2 + +## 5.0.0-alpha-v5.1 + +### Major Changes + +- Drop default exports from all packages. Migration guide: ([#2150](https://github.com/clerk/javascript/pull/2150)) by [@dimkl](https://github.com/dimkl) + + - use `import { Clerk } from '@clerk/backend';` + - use `import { clerkInstance } from '@clerk/clerk-sdk-node';` + - use `import { Clerk } from '@clerk/clerk-sdk-node';` + - use `import { Clerk } from '@clerk/clerk-js';` + - use `import { Clerk } from '@clerk/clerk-js/headless';` + - use `import { IsomorphicClerk } from '@clerk/clerk-react'` + +- Change the response payload of Backend API requests to return `{ data, errors }` instead of return the data and throwing on error response. ([#2126](https://github.com/clerk/javascript/pull/2126)) by [@dimkl](https://github.com/dimkl) + + Code example to keep the same behavior: + + ```typescript + import { users } from '@clerk/backend'; + import { ClerkAPIResponseError } from '@clerk/shared/error'; + + const { data, errors, clerkTraceId, status, statusText } = await users.getUser('user_deadbeef'); + if (errors) { + throw new ClerkAPIResponseError(statusText, { data: errors, status, clerkTraceId }); + } + ``` + +- Drop deprecations. Migration steps: ([#2021](https://github.com/clerk/javascript/pull/2021)) by [@dimkl](https://github.com/dimkl) + + - use `CLERK_SECRET_KEY` instead of `CLERK_API_KEY` env variable + - use `secretKey` instead of `apiKey` + - use `CLERK_PUBLISHABLE_KEY` instead of `CLERK_FRONTEND_API` env variable + - use `publishableKey` instead of `frontendApi` + - drop Redwood hotfix (upgrade to latest version) + - use `createClerkClient` with options to create a new clerkClient instead of using + the following setters: + - `setClerkApiVersion` + - `setClerkHttpOptions` + - `setClerkServerApiUrl` + - `setClerkApiKey` + - use `@clerk/clerk-sdk-node` instead of `@clerk/clerk-sdk-node/{cjs|esm}/instance` + + Extra: + + - bundle only index.ts and instance.ts + +### Patch Changes + +- Updated dependencies [[`64d3763ec`](https://github.com/clerk/javascript/commit/64d3763ec73747ad04c4b47017195cf4114e150c), [`deac67c1c`](https://github.com/clerk/javascript/commit/deac67c1c40d6d3ccc3559746c0c31cc29a93b84), [`83e9d0846`](https://github.com/clerk/javascript/commit/83e9d08469e7c2840f06aa7d86831055e23f67a5), [`7f833da9e`](https://github.com/clerk/javascript/commit/7f833da9ebc1b2ec9c65513628c377d0584e5d72), [`492b8a7b1`](https://github.com/clerk/javascript/commit/492b8a7b12f14658a384566012e5807f0a171710), [`dd5703013`](https://github.com/clerk/javascript/commit/dd57030133fb8ce98681ff0bcad7e53ee826bb0e), [`9615e6cda`](https://github.com/clerk/javascript/commit/9615e6cda8fb1cbc3c2e464e6e891d56e245fac4), [`cace85374`](https://github.com/clerk/javascript/commit/cace85374cb0bb13578cf63fe1f3e6ee59f7f3c2), [`0d1052ac2`](https://github.com/clerk/javascript/commit/0d1052ac284b909786fd0e4744b02fcf4d1a8be6), [`5471c7e8d`](https://github.com/clerk/javascript/commit/5471c7e8dd0155348748fa90e5ae97093f59efe9), [`e0e79b4fe`](https://github.com/clerk/javascript/commit/e0e79b4fe47f64006718d547c898b9f67fe4d424), [`a6451aece`](https://github.com/clerk/javascript/commit/a6451aecef0bac578b295b524f1246dede3a7598)]: + - @clerk/shared@2.0.0-alpha-v5.1 + - @clerk/backend@1.0.0-alpha-v5.1 + +## 5.0.0-alpha-v5.0 + +### Major Changes + +- Internal update default apiUrl domain from clerk.dev to clerk.com ([#1878](https://github.com/clerk/javascript/pull/1878)) by [@dimkl](https://github.com/dimkl) + +- Dropping support for Node 14 and 16 as they both reached EOL status. The minimal Node.js version required by Clerk is `18.18.0` now. ([#1864](https://github.com/clerk/javascript/pull/1864)) by [@dimkl](https://github.com/dimkl) + +### Patch Changes + +- Introduce `isTruthy` helper to better cast environment variables to a boolean. Previously only the string `"true"` was checked, now `true`, `"true"`, `"1"`, and `1` will work. ([#2002](https://github.com/clerk/javascript/pull/2002)) by [@LekoArts](https://github.com/LekoArts) + +- Fix types of ClerkExpressWithAuth/ClerkExpressRequireAuth args ([#1968](https://github.com/clerk/javascript/pull/1968)) by [@dimkl](https://github.com/dimkl) + +- Updated dependencies [[`743c4d204`](https://github.com/clerk/javascript/commit/743c4d20423790b554e66923466081c0d3b0d9ed), [`791c49807`](https://github.com/clerk/javascript/commit/791c49807c3c9e19964cbf621c935d237caeecf3), [`a68eb3083`](https://github.com/clerk/javascript/commit/a68eb3083ff68459cd33098e2df190a5ba26c841), [`ef2325dcc`](https://github.com/clerk/javascript/commit/ef2325dcc18729e9ce9ee5823e9a963efa51dbc1), [`8b6b094b9`](https://github.com/clerk/javascript/commit/8b6b094b9c7d09eeae90f8bdfac44d53513aa63d), [`71663c568`](https://github.com/clerk/javascript/commit/71663c568926b1d60b97aa7ccc5298d05b618af2), [`90aa2ea9c`](https://github.com/clerk/javascript/commit/90aa2ea9c4675662cee581298b49bd76ec8f8850), [`a605335e1`](https://github.com/clerk/javascript/commit/a605335e1e6f37d9b02170282974b0e1406e3f98), [`97407d8aa`](https://github.com/clerk/javascript/commit/97407d8aa481007d3262fe7a0772dea901ce0a8c), [`c22cd5214`](https://github.com/clerk/javascript/commit/c22cd52147492ba25f3c07bdbe6bbc4eb49a5cf0), [`c7e6d00f5`](https://github.com/clerk/javascript/commit/c7e6d00f56e73df4ed87712e74ad9d5bcaca8924), [`97407d8aa`](https://github.com/clerk/javascript/commit/97407d8aa481007d3262fe7a0772dea901ce0a8c), [`7644b7472`](https://github.com/clerk/javascript/commit/7644b74726ba73e615a1256f9ff3fa03b0f8bc30), [`f5d55bb1f`](https://github.com/clerk/javascript/commit/f5d55bb1fc6a87303fb8bf461c3a917ae4da4005), [`6f755addd`](https://github.com/clerk/javascript/commit/6f755addd0886b9ff8b0d5dbe48e37470049acad)]: + - @clerk/shared@2.0.0-alpha-v5.0 + - @clerk/backend@1.0.0-alpha-v5.0 + +## 4.12.16 + +### Patch Changes + +- Publish packages with [npm provenance](https://docs.npmjs.com/generating-provenance-statements) enabled ([#1891](https://github.com/clerk/javascript/pull/1891)) by [@LekoArts](https://github.com/LekoArts) + +- Updated dependencies [[`3bf64107e`](https://github.com/clerk/javascript/commit/3bf64107e1d0f9fce55163276d157da7849a390f), [`52f8553d2`](https://github.com/clerk/javascript/commit/52f8553d22f9454ee1194fd162410db15da7a4be), [`92727eec3`](https://github.com/clerk/javascript/commit/92727eec39566278263ffa118a085493f964eb94), [`b09b66eec`](https://github.com/clerk/javascript/commit/b09b66eec6ed0fbf99d93cd6843826f19c911099), [`51861addf`](https://github.com/clerk/javascript/commit/51861addff911615035fdc74718a1deff3f5cd62), [`aa4cd7615`](https://github.com/clerk/javascript/commit/aa4cd761585b888706a36a6eed7436a8f0476dbf)]: + - @clerk/backend@0.31.3 + - @clerk/shared@1.0.0 + - @clerk/types@3.57.0 + +## 4.12.15 + +### Patch Changes + +- Updated dependencies [[`9ca215702`](https://github.com/clerk/javascript/commit/9ca215702d1b816217d2c06c812f7d653ec2da11)]: + - @clerk/types@3.56.1 + - @clerk/backend@0.31.2 + +## 4.12.14 + +### Patch Changes + +- Updated dependencies [[`35be8709d`](https://github.com/clerk/javascript/commit/35be8709d88f1d1eef043acdba4d49b07578c7b2), [`13e9dfbaa`](https://github.com/clerk/javascript/commit/13e9dfbaa5b7b7e72f63e4b8ecfc1c1918517cd8), [`e38488c92`](https://github.com/clerk/javascript/commit/e38488c929e437583296c34cde23f76218f78caf), [`a11f962bc`](https://github.com/clerk/javascript/commit/a11f962bcbcf225fb927122267de1e8f5faccf53), [`9b644d799`](https://github.com/clerk/javascript/commit/9b644d7991b8cba4b385e9443f87798cde5c9989), [`a9894b445`](https://github.com/clerk/javascript/commit/a9894b445bf1e463176b0442fb73c48f89d9fed8), [`834dadb36`](https://github.com/clerk/javascript/commit/834dadb36c30b2a8f052784de4ad1026b0083b4e), [`70f251007`](https://github.com/clerk/javascript/commit/70f2510074352206bbe7bdadf2c28ccf3c074c12), [`a46d6fe99`](https://github.com/clerk/javascript/commit/a46d6fe99bd9b80671b60347b4c35d558012200f)]: + - @clerk/types@3.56.0 + - @clerk/backend@0.31.1 + - @clerk/shared@0.24.5 + +## 4.12.13 + +### Patch Changes + +- Warn about environment variables deprecations: ([#1859](https://github.com/clerk/javascript/pull/1859)) by [@dimkl](https://github.com/dimkl) + + - `CLERK_API_KEY` + - `CLERK_FRONTEND_API` + - `NEXT_PUBLIC_CLERK_FRONTEND_API` + +- Avoid always showing `__unstable_options` deprecation warning in all applications and SDKs using `@clerk/clerk-sdk-node` ([#1858](https://github.com/clerk/javascript/pull/1858)) by [@dimkl](https://github.com/dimkl) + +- Avoid always showing deprecation warnings for `frontendApi` and `apiKey` in `@clerk/clerk-sdk-node` ([#1856](https://github.com/clerk/javascript/pull/1856)) by [@dimkl](https://github.com/dimkl) + +- Updated dependencies [[`977336f79`](https://github.com/clerk/javascript/commit/977336f793cd4ce5984f98dac3cedf9f5ec363f5), [`997b8e256`](https://github.com/clerk/javascript/commit/997b8e256c8f83d68d0ae4243c7ea5640573d1ae), [`91e9a55f4`](https://github.com/clerk/javascript/commit/91e9a55f4b9f1a8f8d843a788597026015ddeafd), [`c9b17f5a7`](https://github.com/clerk/javascript/commit/c9b17f5a72cb27786cfc7f1fb42be1233fb10d5c), [`91014880d`](https://github.com/clerk/javascript/commit/91014880df71c2618d0b1e513da4dd19ccd809e3), [`3848f8dbe`](https://github.com/clerk/javascript/commit/3848f8dbe094226c6062341405a32a9621042fd6), [`7f4d4b942`](https://github.com/clerk/javascript/commit/7f4d4b942e8834462cdc0976b106d9739c345f6b)]: + - @clerk/shared@0.24.4 + - @clerk/types@3.55.0 + - @clerk/backend@0.31.0 + +## 4.12.12 + +### Patch Changes + +- Updated dependencies [[`1e212c19d`](https://github.com/clerk/javascript/commit/1e212c19d1cbfbcf6bc6718f5aec0a3cb893b96f), [`1136c7c15`](https://github.com/clerk/javascript/commit/1136c7c15043ffe917b4918e9e33f55b496cd679), [`1136c7c15`](https://github.com/clerk/javascript/commit/1136c7c15043ffe917b4918e9e33f55b496cd679)]: + - @clerk/backend@0.30.3 + +## 4.12.11 + +### Patch Changes + +- Pins the internal dependency versions. This ensures that users installing our main framework SDKs will get consistent versions across all @clerk/ packages. ([#1798](https://github.com/clerk/javascript/pull/1798)) by [@BRKalow](https://github.com/BRKalow) + +- Updated dependencies [[`b59b6b75d`](https://github.com/clerk/javascript/commit/b59b6b75dc61bc4d7e61f7cca774f3731a2929b9), [`fed24f1bf`](https://github.com/clerk/javascript/commit/fed24f1bf3e2b8c3f3e3327178f77b57c391c62c), [`164f3aac7`](https://github.com/clerk/javascript/commit/164f3aac7928bc69301846130cc77986569d4e91), [`68259a2bb`](https://github.com/clerk/javascript/commit/68259a2bb8193befdde9101d4ec9bf305881d5e2), [`33e927c59`](https://github.com/clerk/javascript/commit/33e927c59fbf06436ff642ef9f846bd3b467e3e1), [`0636ff779`](https://github.com/clerk/javascript/commit/0636ff7799e126d1438d2738ce0e46c3b277f46a), [`9514618d6`](https://github.com/clerk/javascript/commit/9514618d65cfdde0ff011eabd41a992b61fc8dc1), [`bb2ec9373`](https://github.com/clerk/javascript/commit/bb2ec93738f92c89f008c6a275a986593816c4d3), [`c7c6912f3`](https://github.com/clerk/javascript/commit/c7c6912f34874467bc74104690fe9f95491cc10d), [`71bb1c7b5`](https://github.com/clerk/javascript/commit/71bb1c7b570f7b0bbc377c8104c9abcc1af4cacf)]: + - @clerk/types@3.54.0 + - @clerk/backend@0.30.2 + +## 4.12.10 + +### Patch Changes + +- Updated dependencies [[`cecf74d79`](https://github.com/clerk/javascript/commit/cecf74d79069662d25f73e4745aa01348d398afb)]: + - @clerk/backend@0.30.1 + +## 4.12.9 + +### Patch Changes + +- Updated dependencies [[`5c8754239`](https://github.com/clerk/javascript/commit/5c8754239e9ef13656fb73f30c9c6a6187b9aa81), [`2f6a6ac99`](https://github.com/clerk/javascript/commit/2f6a6ac9991469bf8532019bb22ff50adecdb434), [`94c36c755`](https://github.com/clerk/javascript/commit/94c36c755b598eb68d22f42eb7f738050f390678), [`7406afe7f`](https://github.com/clerk/javascript/commit/7406afe7f550f702bd91cde9616fd26222833a87)]: + - @clerk/types@3.53.0 + - @clerk/backend@0.30.0 + +## 4.12.8 + +### Patch Changes + +- Updated dependencies [[`c61ddf5bf`](https://github.com/clerk/javascript/commit/c61ddf5bf2664e38bbaba6572d421adac8a2eff7), [`0366e0b20`](https://github.com/clerk/javascript/commit/0366e0b208e9086896562af94f24cdbd401c702c)]: + - @clerk/types@3.52.1 + - @clerk/backend@0.29.3 + +## 4.12.7 + +### Patch Changes + +- Updated dependencies [[`40ea407ad`](https://github.com/clerk/javascript/commit/40ea407ad1042fee6871755f30de544200b1f0d8), [`378a903ac`](https://github.com/clerk/javascript/commit/378a903ac4dc12e6ee708de20f0d9a5aa758bd18), [`27b611e47`](https://github.com/clerk/javascript/commit/27b611e47e4f1ad86e8dff42cb02c98bdc6ff6bd), [`4d0d90238`](https://github.com/clerk/javascript/commit/4d0d9023895c13290d5578ece218c24348c540fc)]: + - @clerk/backend@0.29.2 + +## 4.12.6 + +### Patch Changes + +- Change `README` to include updated links to issue templates and update Discord link. ([#1750](https://github.com/clerk/javascript/pull/1750)) by [@LekoArts](https://github.com/LekoArts) + +- Updated dependencies [[`e99df0a0d`](https://github.com/clerk/javascript/commit/e99df0a0de8ab91e9de4d32dfab46ad562f510d3), [`4327b91f9`](https://github.com/clerk/javascript/commit/4327b91f9ed65b440afaa5f76a6231aeacd3541a), [`75be1d6b3`](https://github.com/clerk/javascript/commit/75be1d6b3d9bf7b5d71613b3f169a942b1d25e7e), [`01b024c57`](https://github.com/clerk/javascript/commit/01b024c57c80ae00d83801fe90b2992111dc1a68)]: + - @clerk/types@3.52.0 + - @clerk/backend@0.29.1 + +## 4.12.5 + +### Patch Changes + +- Updated dependencies [[`463ff84f5`](https://github.com/clerk/javascript/commit/463ff84f5bfb7114102ca6cb5a2ea2fce705164c), [`e6a388946`](https://github.com/clerk/javascript/commit/e6a38894640b6999b90ea44ef66acda34debe2c1), [`1426e5eb3`](https://github.com/clerk/javascript/commit/1426e5eb3730bb79e2ec5341fa4347d7fa957739)]: + - @clerk/types@3.51.0 + - @clerk/backend@0.29.0 + +## 4.12.4 + +### Patch Changes + +- Updated dependencies [[`975412ed5`](https://github.com/clerk/javascript/commit/975412ed5307ac81128c87289178bd1e6c2fb1af)]: + - @clerk/backend@0.28.1 + +## 4.12.3 + +### Patch Changes + +- Updated dependencies [[`96cc1921c`](https://github.com/clerk/javascript/commit/96cc1921cac20442f19510137ee0100df5f8a0f4), [`8d1e7d76d`](https://github.com/clerk/javascript/commit/8d1e7d76de40c0ecb367c6745094dd0a75f764b3), [`435d2cff5`](https://github.com/clerk/javascript/commit/435d2cff5dfc86c58690d3f0d843f567ac4f3c04), [`8873841fc`](https://github.com/clerk/javascript/commit/8873841fcbb96f31aaeb8a12a0ce1d90512986d4), [`0a5f632f8`](https://github.com/clerk/javascript/commit/0a5f632f83bb4dae4cc82718dc86b7df3a125a56), [`34da40a50`](https://github.com/clerk/javascript/commit/34da40a5035b37eb365c6cb273e25c4d3bcf7161), [`3158752c7`](https://github.com/clerk/javascript/commit/3158752c73b9266775f954d3adaf43c66ba8b2e8), [`8538cd0c1`](https://github.com/clerk/javascript/commit/8538cd0c1e2ee2e38bd11079735a2ffc6738f71b), [`a412a5014`](https://github.com/clerk/javascript/commit/a412a501426f5d7a32284fda47efe48a04b5d38e), [`4ea30e883`](https://github.com/clerk/javascript/commit/4ea30e883a4f5c19cdde3424bf02afa99e2bc86d), [`86de584dd`](https://github.com/clerk/javascript/commit/86de584ddf1c22ec99852b983a92386e5542613c), [`e02a1aff2`](https://github.com/clerk/javascript/commit/e02a1aff2d4b1478601a2e7b598d600ab3902169), [`09bfb793e`](https://github.com/clerk/javascript/commit/09bfb793ee54d50eb54ef4e3a5eb385ea2f2fb54), [`b2296d630`](https://github.com/clerk/javascript/commit/b2296d6304e1ca31a35450e0c67a12555c0142f9), [`52ce79108`](https://github.com/clerk/javascript/commit/52ce79108fb5cb4fc84bf4f2df3e3dc748ee4eb3), [`4764e40c7`](https://github.com/clerk/javascript/commit/4764e40c7e858803fc6379dec20fcf687dcaed64), [`1e117beec`](https://github.com/clerk/javascript/commit/1e117beeca53f27d8e9f58f2a724fbc8a7d54021), [`30fcdd51a`](https://github.com/clerk/javascript/commit/30fcdd51a98dea60da36f2b5152ea22405d2c4f2), [`89bc5de04`](https://github.com/clerk/javascript/commit/89bc5de04aafa9832d4d1b5f816af2340acd14d4)]: + - @clerk/types@3.50.0 + - @clerk/backend@0.28.0 + +## 4.12.2 + +### Patch Changes + +- Updated dependencies [[`ea95525a4`](https://github.com/clerk/javascript/commit/ea95525a423bcc89bc9e210c2d29c78e5a6c1210), [`24a46ae7e`](https://github.com/clerk/javascript/commit/24a46ae7e038b56197dc56a535c05e698c5bf249), [`d433b83b9`](https://github.com/clerk/javascript/commit/d433b83b92c61752917f62cc410a774813f38fd7), [`5e1a09df4`](https://github.com/clerk/javascript/commit/5e1a09df4e905ddd887d64c7e8cab10fb4beb3ec), [`876777cb1`](https://github.com/clerk/javascript/commit/876777cb14443917d8e0a04b363327d165ad5580), [`0a59e122d`](https://github.com/clerk/javascript/commit/0a59e122d12b672f111a43ef3897061bfd9bdb52)]: + - @clerk/backend@0.27.0 + - @clerk/types@3.49.0 + +## 4.12.1 + +### Patch Changes + +- Fix "invalid URL" issue when creating the isomorphicRequest ([#1516](https://github.com/clerk/javascript/pull/1516)) by [@dimkl](https://github.com/dimkl) + +## 4.12.0 + +### Minor Changes + +- Support hosting NextJs apps on non-Vercel platforms by constructing req.url using host-related headers instead of using on req.url directly. CLERK_TRUST_HOST is now enabled by default. ([#1492](https://github.com/clerk/javascript/pull/1492)) by [@dimkl](https://github.com/dimkl) + +### Patch Changes + +- Updated dependencies [[`6fa4768dc`](https://github.com/clerk/javascript/commit/6fa4768dc6b261026d6e75d84c9ade1f389fe0d3), [`4ff4b716f`](https://github.com/clerk/javascript/commit/4ff4b716fdb12b18182e506737afafc7dbc05604)]: + - @clerk/types@3.48.1 + - @clerk/backend@0.26.0 + +## 4.11.1 + +### Patch Changes + +- Updated dependencies [[`2a9d83280`](https://github.com/clerk/javascript/commit/2a9d8328011cb4c3e1a4c6c675cbd5a4edac4c5c)]: + - @clerk/types@3.48.0 + - @clerk/backend@0.25.1 + +## 4.11.0 + +### Minor Changes + +- Introduce `createIsomorphicRequest` in `@clerk/backend` ([#1393](https://github.com/clerk/javascript/pull/1393)) by [@anagstef](https://github.com/anagstef) + + This utility simplifies the `authenticateRequest` signature, and it makes it easier to integrate with more frameworks. + +### Patch Changes + +- Updated dependencies [[`16c3283ec`](https://github.com/clerk/javascript/commit/16c3283ec192cb7525312da5e718aa7cac8b8445), [`73c9c1d0e`](https://github.com/clerk/javascript/commit/73c9c1d0e3c5f102a515e1ddda01a0a441b40d5b), [`ae9fc247a`](https://github.com/clerk/javascript/commit/ae9fc247aca5bf8211cc8e021706325a010ce9d3), [`1a151e701`](https://github.com/clerk/javascript/commit/1a151e701da80f2d5b1ba1447d6fd5f8612a4bb8), [`e3036848d`](https://github.com/clerk/javascript/commit/e3036848d19a48935129aec2fe50003518a3aa53), [`fd692af79`](https://github.com/clerk/javascript/commit/fd692af791fe206724e38eff647b8562e72c3652), [`090bab66e`](https://github.com/clerk/javascript/commit/090bab66e295bff2358115d2cbd3ed0e603b5ff5), [`bb0d69b45`](https://github.com/clerk/javascript/commit/bb0d69b455fa5fd6ca5b1f45a0f242957521dfbb), [`592911196`](https://github.com/clerk/javascript/commit/5929111966811ac578019a9c1dda03b09eda72a8)]: + - @clerk/backend@0.25.0 + - @clerk/types@3.47.0 + +## 4.10.15 + +### Patch Changes + +- Load `jwtKey` from `CLERK_JWT_KEY` env variable ([#1443](https://github.com/clerk/javascript/pull/1443)) by [@dimkl](https://github.com/dimkl) + +- Updated dependencies [[`2ad7cf390`](https://github.com/clerk/javascript/commit/2ad7cf390ba84b8e767ed6fe136800e38356d79c), [`f0b044c47`](https://github.com/clerk/javascript/commit/f0b044c475546e96a5995ef16198e60e35e8098f)]: + - @clerk/backend@0.24.0 + +## 4.10.14 + +### Patch Changes + +- Make all 4 keys (legacy and new) optional in authenticateRequest params ([#1437](https://github.com/clerk/javascript/pull/1437)) by [@anagstef](https://github.com/anagstef) + +- Updated dependencies [[`3fee736c9`](https://github.com/clerk/javascript/commit/3fee736c993b0a8fd157d716890810d04e632962), [`ac4e47274`](https://github.com/clerk/javascript/commit/ac4e47274afc2ab3a55a78b388a14bed76600402), [`5957a3da6`](https://github.com/clerk/javascript/commit/5957a3da68cde3386c741812e2bc03b5519d00e0)]: + - @clerk/backend@0.23.7 + +## 4.10.13 + +### Patch Changes + +- Updated dependencies [[`30f8ad18a`](https://github.com/clerk/javascript/commit/30f8ad18a4f85ca2e3fda46e5c180b28bc8fb47c)]: + - @clerk/types@3.46.1 + - @clerk/backend@0.23.6 + +## 4.10.12 + +### Patch Changes + +- Updated dependencies [[`bfb3af28`](https://github.com/clerk/javascript/commit/bfb3af28eb69d47e31f2b846d1ecc309fd885704)]: + - @clerk/types@3.46.0 + - @clerk/backend@0.23.5 + +## 4.10.11 + +### Patch Changes + +- Simplify the signature of the low-level `authenticateRequest` helper. ([#1329](https://github.com/clerk/javascript/pull/1329)) by [@anagstef](https://github.com/anagstef) + + - One pair of legacy or new instance keys are required instead of all 4 of them in `authenticateRequest` + - `@clerk/backend` now can handle the `"Bearer "` prefix in Authorization header for better DX + - `host` parameter is now optional in `@clerk/backend` + +- Updated dependencies [[`11954816`](https://github.com/clerk/javascript/commit/119548164a1757b878027019c20a688d312b1cfd), [`de2347f9`](https://github.com/clerk/javascript/commit/de2347f9efaab4903787a905528a06551a9b7883), [`32148490`](https://github.com/clerk/javascript/commit/32148490b813028412af0467e342aa85227cb4d2)]: + - @clerk/types@3.45.0 + - @clerk/backend@0.23.4 + +## 4.10.10 + +### Patch Changes + +- Updated dependencies [[`17cc14ec`](https://github.com/clerk/javascript/commit/17cc14ec64ed292239ee782662171a4a8cbd9e87)]: + - @clerk/types@3.44.0 + - @clerk/backend@0.23.3 + +## 4.10.9 + +### Patch Changes + +- Fix ESM build issues ([#1377](https://github.com/clerk/javascript/pull/1377)) by [@nikosdouvlis](https://github.com/nikosdouvlis) + +## 4.10.8 + +### Patch Changes + +- Updated dependencies [[`9651658c`](https://github.com/clerk/javascript/commit/9651658c2ab00108ffcb9679cd119488c41ec521), [`4e1bb2bd`](https://github.com/clerk/javascript/commit/4e1bb2bd1f3cc933b1e8422849119e0aa16fdaa6)]: + - @clerk/types@3.43.0 + - @clerk/backend@0.23.2 + +## 4.10.7 + +### Patch Changes + +- Correctly display "Missing Clerk keys" error instead of simply throwing during initialization ([#1365](https://github.com/clerk/javascript/pull/1365)) by [@nikosdouvlis](https://github.com/nikosdouvlis) + +- Allow `clerkJSVersion` to be passed when loading interstitial. Support for ([#1354](https://github.com/clerk/javascript/pull/1354)) by [@panteliselef](https://github.com/panteliselef) + + - Nextjs + - Remix + - Node + +- Updated dependencies [[`b945c921`](https://github.com/clerk/javascript/commit/b945c92100454f00ff4b6b9c769201ca2ceaac93)]: + - @clerk/backend@0.23.1 + +## 4.10.6 + +### Patch Changes + +- Load env variables upon first usage of middlewares or clerkClient ([#1230](https://github.com/clerk/javascript/pull/1230)) by [@dimkl](https://github.com/dimkl) + +## 4.10.5 + +### Patch Changes + +- Support `audience` parameter in authentication request ([#1004](https://github.com/clerk/javascript/pull/1004)) by [@dimkl](https://github.com/dimkl) + + The audience parameter is used to verify the the aud claim in + the request matches the value of the parameter or is included + (when the user provides a list). + + Resolves: + + - [#978](https://github.com/clerk/javascript/pull/978) + - [#1004](https://github.com/clerk/javascript/pull/1004) + +- Updated dependencies [[`c42b4ac0`](https://github.com/clerk/javascript/commit/c42b4ac02d7ab7022a06b8f484e057999c6d7963), [`010484f4`](https://github.com/clerk/javascript/commit/010484f4978b9616e8c2ef50986eda742c4967bd)]: + - @clerk/types@3.42.0 + - @clerk/backend@0.23.0 + +## 4.10.4 + +### Patch Changes + +- Updated dependencies [[`b66ea0a5`](https://github.com/clerk/javascript/commit/b66ea0a5aea0d6801e03a1426a0db69921b7b0e3), [`b66ea0a5`](https://github.com/clerk/javascript/commit/b66ea0a5aea0d6801e03a1426a0db69921b7b0e3), [`b66ea0a5`](https://github.com/clerk/javascript/commit/b66ea0a5aea0d6801e03a1426a0db69921b7b0e3), [`b66ea0a5`](https://github.com/clerk/javascript/commit/b66ea0a5aea0d6801e03a1426a0db69921b7b0e3), [`b66ea0a5`](https://github.com/clerk/javascript/commit/b66ea0a5aea0d6801e03a1426a0db69921b7b0e3), [`b66ea0a5`](https://github.com/clerk/javascript/commit/b66ea0a5aea0d6801e03a1426a0db69921b7b0e3), [`b66ea0a5`](https://github.com/clerk/javascript/commit/b66ea0a5aea0d6801e03a1426a0db69921b7b0e3)]: + - @clerk/backend@0.22.0 + - @clerk/types@3.41.1 + +## [4.10.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.10.0-staging.2...@clerk/clerk-sdk-node@4.10.0) (2023-05-23) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.9.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.9.2-staging.1...@clerk/clerk-sdk-node@4.9.2) (2023-05-18) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.9.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.9.1-staging.1...@clerk/clerk-sdk-node@4.9.1) (2023-05-17) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +## [4.9.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.8.8-staging.3...@clerk/clerk-sdk-node@4.9.0) (2023-05-15) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.8.7](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.8.7-staging.4...@clerk/clerk-sdk-node@4.8.7) (2023-05-04) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.8.7-staging.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.8.7-staging.3...@clerk/clerk-sdk-node@4.8.7-staging.4) (2023-05-04) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.8.7-staging.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.8.7-staging.2...@clerk/clerk-sdk-node@4.8.7-staging.3) (2023-05-02) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.8.6](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.8.6-staging.0...@clerk/clerk-sdk-node@4.8.6) (2023-04-19) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.8.5](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.8.4...@clerk/clerk-sdk-node@4.8.5) (2023-04-19) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.8.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.8.4-staging.0...@clerk/clerk-sdk-node@4.8.4) (2023-04-12) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.8.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.8.3-staging.3...@clerk/clerk-sdk-node@4.8.3) (2023-04-11) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.8.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.8.2-staging.0...@clerk/clerk-sdk-node@4.8.2) (2023-04-06) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.8.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.8.1-staging.3...@clerk/clerk-sdk-node@4.8.1) (2023-03-31) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.8.1-staging.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.8.1-staging.0...@clerk/clerk-sdk-node@4.8.1-staging.1) (2023-03-31) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +## [4.8.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.8.0-staging.0...@clerk/clerk-sdk-node@4.8.0) (2023-03-29) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.7.11](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.11-staging.2...@clerk/clerk-sdk-node@4.7.11) (2023-03-10) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.7.10](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.10-staging.1...@clerk/clerk-sdk-node@4.7.10) (2023-03-09) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.7.9](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.9-staging.1...@clerk/clerk-sdk-node@4.7.9) (2023-03-07) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.7.8](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.8-staging.1...@clerk/clerk-sdk-node@4.7.8) (2023-03-03) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.7.7](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.7-staging.0...@clerk/clerk-sdk-node@4.7.7) (2023-03-01) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.7.6](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.6-staging.0...@clerk/clerk-sdk-node@4.7.6) (2023-02-25) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.7.5](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.5-staging.7...@clerk/clerk-sdk-node@4.7.5) (2023-02-24) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.7.5-staging.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.5-staging.3...@clerk/clerk-sdk-node@4.7.5-staging.4) (2023-02-22) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.7.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.4-staging.1...@clerk/clerk-sdk-node@4.7.4) (2023-02-17) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.7.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.3-staging.2...@clerk/clerk-sdk-node@4.7.3) (2023-02-15) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.7.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.2-staging.1...@clerk/clerk-sdk-node@4.7.2) (2023-02-10) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.7.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.1-staging.0...@clerk/clerk-sdk-node@4.7.1) (2023-02-07) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.7.1-staging.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.0-staging.1...@clerk/clerk-sdk-node@4.7.1-staging.0) (2023-02-07) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +## [4.7.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.0-staging.1...@clerk/clerk-sdk-node@4.7.0) (2023-02-07) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.6.5](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.6.5-staging.4...@clerk/clerk-sdk-node@4.6.5) (2023-02-01) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.6.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.6.4-staging.4...@clerk/clerk-sdk-node@4.6.4) (2023-01-27) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.6.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.6.3-staging.1...@clerk/clerk-sdk-node@4.6.3) (2023-01-24) + +### Bug Fixes + +- **backend,clerk-sdk-node,shared:** Drop support for NodeJS 12 ([d9169ab](https://github.com/clerk/javascript/commit/d9169ab4873e1745d7250628f5bf8c8f7da49421)) + +### [4.6.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.6.1...@clerk/clerk-sdk-node@4.6.2) (2023-01-20) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.6.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.6.1-staging.0...@clerk/clerk-sdk-node@4.6.1) (2023-01-18) + +### Bug Fixes + +- **clerk-sdk-node:** Remove unused jsonwebtoken dependency ([6af3d9e](https://github.com/clerk/javascript/commit/6af3d9ea7e2d47f07f65c1133e634986b048bf74)) + +## [4.6.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.6.0-staging.8...@clerk/clerk-sdk-node@4.6.0) (2023-01-17) + +### Bug Fixes + +- **backend,clerk-sdk-node,shared:** Support node12 runtimes ([fdcd6b3](https://github.com/clerk/javascript/commit/fdcd6b3f7c61490297a5fdfa80228cbb7787b49b)) + +### [4.5.14](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.14-staging.1...@clerk/clerk-sdk-node@4.5.14) (2022-12-19) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.5.13](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.13-staging.1...@clerk/clerk-sdk-node@4.5.13) (2022-12-13) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.5.12](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.11...@clerk/clerk-sdk-node@4.5.12) (2022-12-12) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.5.11](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.11-staging.1...@clerk/clerk-sdk-node@4.5.11) (2022-12-09) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.5.10](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.9...@clerk/clerk-sdk-node@4.5.10) (2022-12-08) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.5.9](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.9-staging.0...@clerk/clerk-sdk-node@4.5.9) (2022-12-08) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.5.8](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.8-staging.0...@clerk/clerk-sdk-node@4.5.8) (2022-12-02) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.5.7](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.7-staging.4...@clerk/clerk-sdk-node@4.5.7) (2022-11-30) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.5.7-staging.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.7-staging.3...@clerk/clerk-sdk-node@4.5.7-staging.4) (2022-11-29) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.5.6](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.6-staging.0...@clerk/clerk-sdk-node@4.5.6) (2022-11-25) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.5.5](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.5-staging.0...@clerk/clerk-sdk-node@4.5.5) (2022-11-25) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.5.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.3...@clerk/clerk-sdk-node@4.5.4) (2022-11-23) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.5.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.3-staging.2...@clerk/clerk-sdk-node@4.5.3) (2022-11-22) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.5.3-staging.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.3-staging.1...@clerk/clerk-sdk-node@4.5.3-staging.2) (2022-11-21) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.5.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.2-staging.1...@clerk/clerk-sdk-node@4.5.2) (2022-11-18) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.5.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.1-staging.3...@clerk/clerk-sdk-node@4.5.1) (2022-11-15) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +## [4.5.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.0-staging.1...@clerk/clerk-sdk-node@4.5.0) (2022-11-10) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.4.7](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.7-staging.2...@clerk/clerk-sdk-node@4.4.7) (2022-11-05) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.4.6](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.6-staging.7...@clerk/clerk-sdk-node@4.4.6) (2022-11-03) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.4.6-staging.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.6-staging.3...@clerk/clerk-sdk-node@4.4.6-staging.4) (2022-11-02) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.4.6-staging.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.6-staging.1...@clerk/clerk-sdk-node@4.4.6-staging.3) (2022-11-02) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.4.6-staging.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.6-staging.1...@clerk/clerk-sdk-node@4.4.6-staging.2) (2022-11-02) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.4.6-staging.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.5...@clerk/clerk-sdk-node@4.4.6-staging.1) (2022-11-02) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.4.5](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.5-staging.0...@clerk/clerk-sdk-node@4.4.5) (2022-10-24) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.4.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.3...@clerk/clerk-sdk-node@4.4.4) (2022-10-14) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.4.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.3-staging.2...@clerk/clerk-sdk-node@4.4.3) (2022-10-14) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.4.3-staging.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.2...@clerk/clerk-sdk-node@4.4.3-staging.1) (2022-10-13) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.4.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.2-staging.0...@clerk/clerk-sdk-node@4.4.2) (2022-10-07) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.4.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.1-staging.0...@clerk/clerk-sdk-node@4.4.1) (2022-10-05) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +## [4.4.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.0-staging.5...@clerk/clerk-sdk-node@4.4.0) (2022-10-03) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.3.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.3.3-staging.4...@clerk/clerk-sdk-node@4.3.3) (2022-09-29) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.3.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.3.1...@clerk/clerk-sdk-node@4.3.2) (2022-09-25) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.3.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.3.1-staging.1...@clerk/clerk-sdk-node@4.3.1) (2022-09-24) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +## [4.3.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.3.0-staging.0...@clerk/clerk-sdk-node@4.3.0) (2022-09-22) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.2.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.2.0-staging.4...@clerk/clerk-sdk-node@4.2.1) (2022-09-19) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +## [4.2.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.2.0-staging.4...@clerk/clerk-sdk-node@4.2.0) (2022-09-16) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.1.7](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.1.6...@clerk/clerk-sdk-node@4.1.7) (2022-09-08) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.1.6](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.1.6-staging.0...@clerk/clerk-sdk-node@4.1.6) (2022-09-07) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.1.5](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.1.5-staging.0...@clerk/clerk-sdk-node@4.1.5) (2022-09-07) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.1.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.1.3...@clerk/clerk-sdk-node@4.1.4) (2022-09-05) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.1.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.1.3-staging.0...@clerk/clerk-sdk-node@4.1.3) (2022-08-29) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.1.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.1.2-staging.3...@clerk/clerk-sdk-node@4.1.2) (2022-08-29) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.1.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.1.1-staging.0...@clerk/clerk-sdk-node@4.1.1) (2022-08-24) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +## [4.1.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.0.5...@clerk/clerk-sdk-node@4.1.0) (2022-08-18) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.0.5](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.0.4...@clerk/clerk-sdk-node@4.0.5) (2022-08-18) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.0.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.0.4-staging.0...@clerk/clerk-sdk-node@4.0.4) (2022-08-18) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.0.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.0.2...@clerk/clerk-sdk-node@4.0.3) (2022-08-16) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.0.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.0.2-staging.0...@clerk/clerk-sdk-node@4.0.2) (2022-08-09) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [4.0.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.0.0...@clerk/clerk-sdk-node@4.0.1) (2022-08-07) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +## [4.0.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.0.0-staging.1...@clerk/clerk-sdk-node@4.0.0) (2022-08-05) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.9.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.9.1...@clerk/clerk-sdk-node@3.9.2) (2022-08-05) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.9.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.9.0...@clerk/clerk-sdk-node@3.9.1) (2022-08-04) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +## [3.9.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.9.0-staging.0...@clerk/clerk-sdk-node@3.9.0) (2022-07-26) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.8.6](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.8.5...@clerk/clerk-sdk-node@3.8.6) (2022-07-13) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.8.5](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.8.4...@clerk/clerk-sdk-node@3.8.5) (2022-07-08) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.8.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.8.3...@clerk/clerk-sdk-node@3.8.4) (2022-07-07) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.8.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.8.2...@clerk/clerk-sdk-node@3.8.3) (2022-07-06) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.8.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.8.1...@clerk/clerk-sdk-node@3.8.2) (2022-07-04) + +### Bug Fixes + +- **backend-core,clerk-sdk-node:** Fix parsing issue and defensively check for errors body ([f2f6fe9](https://github.com/clerk/javascript/commit/f2f6fe9b093ff3a34ca31c4ff3179841a44355cf)) + +### [3.8.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.8.0...@clerk/clerk-sdk-node@3.8.1) (2022-07-01) + +### Bug Fixes + +- **clerk-sdk-node:** Temporarily disable exports test on release ([da3c5df](https://github.com/clerk/javascript/commit/da3c5df7e6bfc57133ea811d37f4da5b006cc3e7)) + +## [3.8.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.7.0...@clerk/clerk-sdk-node@3.8.0) (2022-07-01) + +### Features + +- **clerk-sdk-node:** Add module exports testing ([ad01d27](https://github.com/clerk/javascript/commit/ad01d27f6259c1938d4d27df01c9af0a01a34ebf)) + +## [3.7.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.6.2...@clerk/clerk-sdk-node@3.7.0) (2022-06-24) + +### Features + +- **types,backend-core:** Consolidate Clerk issued JWT claims under ClerkJWTClaims ([e6bc9fb](https://github.com/clerk/javascript/commit/e6bc9fb380d38d7f89cc2059e0211b0ad55bd1a5)) + +### Bug Fixes + +- **edge,nextjs,remix,clerk-sdk-node,types:** Correct SSR claims typing ([09c147c](https://github.com/clerk/javascript/commit/09c147c196c08e64794423f9eae791bfe453b858)) + +### [3.6.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.6.2-staging.0...@clerk/clerk-sdk-node@3.6.2) (2022-06-16) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.6.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.6.1-staging.3...@clerk/clerk-sdk-node@3.6.1) (2022-06-06) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.6.1-staging.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.6.1-staging.2...@clerk/clerk-sdk-node@3.6.1-staging.3) (2022-06-03) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.6.1-staging.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.6.1-staging.1...@clerk/clerk-sdk-node@3.6.1-staging.2) (2022-06-02) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.6.1-staging.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.6.1-staging.0...@clerk/clerk-sdk-node@3.6.1-staging.1) (2022-06-01) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +## [3.6.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.6.0-staging.4...@clerk/clerk-sdk-node@3.6.0) (2022-05-20) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +## [3.6.0-staging.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.6.0-staging.3...@clerk/clerk-sdk-node@3.6.0-staging.4) (2022-05-20) + +### Features + +- **backend-core:** New Resource class structure ([fd84550](https://github.com/clerk/javascript/commit/fd845509d70f67ed11bdfae998c9a727ab8c6a8d)) + +## [3.6.0-staging.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.6.0-staging.2...@clerk/clerk-sdk-node@3.6.0-staging.3) (2022-05-19) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +## [3.6.0-staging.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.5.0...@clerk/clerk-sdk-node@3.6.0-staging.2) (2022-05-18) + +### Features + +- **backend-core:** Retrieve instance organizations ([a24c4d3](https://github.com/clerk/javascript/commit/a24c4d3b1459d28cd7f950864d7347a8875d9c9c)) +- **clerk-sdk-node:** Export organization invitation ([07ac214](https://github.com/clerk/javascript/commit/07ac214ce8604859b359e073ae19e0d713650c22)) + +## [3.6.0-staging.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.5.0...@clerk/clerk-sdk-node@3.6.0-staging.1) (2022-05-17) + +### Features + +- **backend-core:** Retrieve instance organizations ([a24c4d3](https://github.com/clerk/javascript/commit/a24c4d3b1459d28cd7f950864d7347a8875d9c9c)) +- **clerk-sdk-node:** Export organization invitation ([07ac214](https://github.com/clerk/javascript/commit/07ac214ce8604859b359e073ae19e0d713650c22)) + +## [3.6.0-staging.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.5.0...@clerk/clerk-sdk-node@3.6.0-staging.0) (2022-05-16) + +### Features + +- **backend-core:** Retrieve instance organizations ([a24c4d3](https://github.com/clerk/javascript/commit/a24c4d3b1459d28cd7f950864d7347a8875d9c9c)) +- **clerk-sdk-node:** Export organization invitation ([07ac214](https://github.com/clerk/javascript/commit/07ac214ce8604859b359e073ae19e0d713650c22)) + +## [3.5.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.4.1...@clerk/clerk-sdk-node@3.5.0) (2022-05-13) + +### Features + +- **clerk-sdk-node:** Organizations operations ([339ecdb](https://github.com/clerk/javascript/commit/339ecdbf472df2930ecdddd440cee1b26b32c9bf)) + +### [3.4.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.4.1...@clerk/clerk-sdk-node@3.4.3) (2022-05-12) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.4.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.4.1...@clerk/clerk-sdk-node@3.4.2) (2022-05-12) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.4.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.4.1-staging.0...@clerk/clerk-sdk-node@3.4.1) (2022-05-11) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +## [3.4.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.11...@clerk/clerk-sdk-node@3.4.0) (2022-05-06) + +### Features + +- **nextjs,clerk-sdk-node,remix:** Add claims attribute to req.auth ([c695529](https://github.com/clerk/javascript/commit/c695529089f55baef72b86e3b73b8cd9f4f58e6d)) + +### [3.3.11](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.11-staging.0...@clerk/clerk-sdk-node@3.3.11) (2022-05-05) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.3.10](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.10-staging.0...@clerk/clerk-sdk-node@3.3.10) (2022-04-28) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.3.9](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.8...@clerk/clerk-sdk-node@3.3.9) (2022-04-27) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.3.8](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.7...@clerk/clerk-sdk-node@3.3.8) (2022-04-27) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.3.7](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.6...@clerk/clerk-sdk-node@3.3.7) (2022-04-22) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.3.6](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.6-staging.1...@clerk/clerk-sdk-node@3.3.6) (2022-04-19) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.3.6-staging.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.6-staging.0...@clerk/clerk-sdk-node@3.3.6-staging.1) (2022-04-19) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.3.5](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.5-alpha.0...@clerk/clerk-sdk-node@3.3.5) (2022-04-18) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.3.5-alpha.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.4...@clerk/clerk-sdk-node@3.3.5-alpha.0) (2022-04-15) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.3.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.3...@clerk/clerk-sdk-node@3.3.4) (2022-04-15) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.3.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.3-staging.0...@clerk/clerk-sdk-node@3.3.3) (2022-04-15) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.3.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.2-staging.0...@clerk/clerk-sdk-node@3.3.2) (2022-04-13) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.3.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.0...@clerk/clerk-sdk-node@3.3.1) (2022-04-07) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +## [3.3.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.0-staging.0...@clerk/clerk-sdk-node@3.3.0) (2022-04-04) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.2.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.2.4-staging.0...@clerk/clerk-sdk-node@3.2.4) (2022-03-29) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.2.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.2.3-staging.0...@clerk/clerk-sdk-node@3.2.3) (2022-03-28) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.2.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.2.2-alpha.0...@clerk/clerk-sdk-node@3.2.2) (2022-03-24) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [3.2.2-staging.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.2.2-staging.0...@clerk/clerk-sdk-node@3.2.2-staging.1) (2022-03-24) + +### Bug Fixes + +- **clerk-sdk-node:** Add ServerGetToken on AuthProp enhancers ([8af677c](https://github.com/clerk/javascript/commit/8af677c615488aa07f807e2cb0706fb210473e6b)) + +### [3.2.1-alpha.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.2.1-staging.0...@clerk/clerk-sdk-node@3.2.1-alpha.0) (2022-03-23) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +## [3.2.0-alpha.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.2.0-alpha.1...@clerk/clerk-sdk-node@3.2.0-alpha.2) (2022-03-23) + +### Features + +- **clerk-sdk-node,backend-core:** Add getCount method and correctly document UserListParams ([1a7a398](https://github.com/clerk/javascript/commit/1a7a398b2e881f8d3676d62725f3b67eec6d78b4)) + +## [3.2.0-alpha.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.1.0-alpha.1...@clerk/clerk-sdk-node@3.2.0-alpha.1) (2022-03-23) + +### Features + +- **backend-core,clerk-sdk-node,nextjs,remix:** Add injected jwtKey option ([53e56e7](https://github.com/clerk/javascript/commit/53e56e76d59984d4d3f5b7e1e2d276adb8b2dc77)) + +## [3.2.0-alpha.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.1.0-alpha.1...@clerk/clerk-sdk-node@3.2.0-alpha.0) (2022-03-22) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +## [3.1.0-alpha.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.1.0-alpha.0...@clerk/clerk-sdk-node@3.1.0-alpha.1) (2022-03-22) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +## [3.1.0-alpha.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.0.1-staging.0...@clerk/clerk-sdk-node@3.1.0-alpha.0) (2022-03-22) + +### Features + +- **clerk-sdk-node:** Add getToken to sdk-node `auth` ([445def1](https://github.com/clerk/javascript/commit/445def148eeaa731dc0b74428d0b9f078e8b9240)) +- **clerk-sdk-node:** Enable CLERK_JWT_KEY usage from clerk-sdk-node ([6151101](https://github.com/clerk/javascript/commit/61511019e123f7e9eaa9b44f35fa04ef643090be)) + +### [3.0.1-alpha.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.0.1-staging.0...@clerk/clerk-sdk-node@3.0.1-alpha.1) (2022-03-20) + +### Features + +- **clerk-sdk-node:** Add getToken to sdk-node `auth` ([445def1](https://github.com/clerk/javascript/commit/445def148eeaa731dc0b74428d0b9f078e8b9240)) + +### [3.0.1-alpha.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.0.1-staging.0...@clerk/clerk-sdk-node@3.0.1-alpha.0) (2022-03-19) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [2.9.10](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.9...@clerk/clerk-sdk-node@2.9.10) (2022-03-14) + +### Bug Fixes + +- **clerk-sdk-node:** Properly stringify metadata params in InvitationsAPI ([5fde7cb](https://github.com/clerk/javascript/commit/5fde7cbfe2f439d7531a937651351f29523b0dd7)) + +### [2.9.9-alpha.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.8...@clerk/clerk-sdk-node@2.9.9-alpha.0) (2022-03-11) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [2.9.9](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.8...@clerk/clerk-sdk-node@2.9.9) (2022-03-11) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [2.9.8](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.7...@clerk/clerk-sdk-node@2.9.8) (2022-03-09) + +### Bug Fixes + +- **clerk-sdk-node:** Correct initialization params override on custom instance ([4feb7eb](https://github.com/clerk/javascript/commit/4feb7eb8be87b2a03c6f5cdd1499982ce7020961)) + +### [2.9.7](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.7-staging.0...@clerk/clerk-sdk-node@2.9.7) (2022-03-09) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [2.9.6](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.5...@clerk/clerk-sdk-node@2.9.6) (2022-03-04) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [2.9.5](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.4...@clerk/clerk-sdk-node@2.9.5) (2022-03-04) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [2.9.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.4-staging.0...@clerk/clerk-sdk-node@2.9.4) (2022-02-24) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [2.9.4-staging.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.3...@clerk/clerk-sdk-node@2.9.4-staging.0) (2022-02-17) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [2.9.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.2...@clerk/clerk-sdk-node@2.9.3) (2022-02-16) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [2.9.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.1...@clerk/clerk-sdk-node@2.9.2) (2022-02-16) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [2.9.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.1-staging.0...@clerk/clerk-sdk-node@2.9.1) (2022-02-14) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [2.9.1-staging.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.0...@clerk/clerk-sdk-node@2.9.1-staging.0) (2022-02-11) + +### Features + +- **clerk-sdk-node:** Deprecate Session named middleware, introduce withAuth, requireAuth ([4e69553](https://github.com/clerk/javascript/commit/4e695535e41fe7c135cbf303a0d021e7b7d30f7d)) + +## [2.9.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.8.1...@clerk/clerk-sdk-node@2.9.0) (2022-02-04) + +### Features + +- **clerk-sdk-node:** Add custom header X-Clerk-SDK in request for SDK version ([84986d8](https://github.com/clerk/javascript/commit/84986d8522c00da3671a19dec7b914f99c3cc133)) + +### [2.8.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.8.0...@clerk/clerk-sdk-node@2.8.1) (2022-02-03) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +## [2.8.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.7.5...@clerk/clerk-sdk-node@2.8.0) (2022-02-02) + +### Features + +- **backend-core,clerk-sdk-node,edge:** Add support to verify azp session token claim ([eab1c8c](https://github.com/clerk/javascript/commit/eab1c8c8a43960fee2da9c10a52c3915cd37f45c)) + +### [2.7.5](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.7.4...@clerk/clerk-sdk-node@2.7.5) (2022-01-28) + +### Bug Fixes + +- **clerk-sdk-node:** Restore the setClerkHttpOptions capability ([ff9f518](https://github.com/clerk/javascript/commit/ff9f51860895033f5fe8a4fc12a18b0b204ad472)) + +### [2.7.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.7.3...@clerk/clerk-sdk-node@2.7.4) (2022-01-26) + +### Reverts + +- Revert "chore(release): Publish" ([df705e0](https://github.com/clerk/javascript/commit/df705e011f025e044c61aad2983e90afd94d5662)) + +### [2.7.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.7.2...@clerk/clerk-sdk-node@2.7.3) (2022-01-25) + +### Bug Fixes + +- **clerk-sdk-node:** Correctly pass responseType on got options for interstitial logic ([6fd58bb](https://github.com/clerk/javascript/commit/6fd58bb31083fd28bba06b7224e1d5f30df68bbb)) + +### Reverts + +- Revert "chore(release): Publish" ([df705e0](https://github.com/clerk/javascript/commit/df705e011f025e044c61aad2983e90afd94d5662)) + +### [2.7.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.7.1...@clerk/clerk-sdk-node@2.7.2) (2022-01-20) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +### [2.7.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.7.0...@clerk/clerk-sdk-node@2.7.1) (2022-01-20) + +### Bug Fixes + +- **clerk-sdk-node:** Restore verifyToken utility ([e22ef8a](https://github.com/clerk/javascript/commit/e22ef8aa3f4db1e14391f88bb924a82f6b17ba6a)) + +## [2.7.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.7.0-alpha.3...@clerk/clerk-sdk-node@2.7.0) (2022-01-20) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + +## [2.7.0-alpha.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.7.0-alpha.2...@clerk/clerk-sdk-node@2.7.0-alpha.3) (2022-01-20) + +### Bug Fixes + +- **backend-core:** Fix build issue ([2b60c40](https://github.com/clerk/javascript/commit/2b60c409fc450c77aa9585e96131de11f5924f50)) + +## [2.7.0-alpha.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.7.0-alpha.1...@clerk/clerk-sdk-node@2.7.0-alpha.2) (2022-01-20) + +### Bug Fixes + +- **backend-core:** Add Readme links ([12509e3](https://github.com/clerk/javascript/commit/12509e32f6da37902cce94949459edffa4a63718)) + +## 2.7.0-alpha.1 (2022-01-20) + +### Features + +- Add injectable loadCryptoKeyFunction ([637b854](https://github.com/clerk/javascript/commit/637b8547447bdfb5f1cac8718d007e665b433f70)) +- Consistent imports rule ([fb81176](https://github.com/clerk/javascript/commit/fb81176b9db0a95a84d19f61e15a9c65a12fc98e)) +- npm workspaces and lerna setup ([cfbfebf](https://github.com/clerk/javascript/commit/cfbfebfd0d5f88a96b4715e4be52bff7f37cc3db)) +- SDK Node resource and APIs from @clerk/backend-core ([6a32317](https://github.com/clerk/javascript/commit/6a323175f9361c32192a4a6be4139b88945a857c)) +- Update READMEs, API reference for @clerk/backend-core, minor fixes ([529c2f6](https://github.com/clerk/javascript/commit/529c2f629ec02895f9f049d29b5775f16ef5c6e9)) + +### Bug Fixes + +- **backend-core:** Fix cross-origin detection algorithm ([fd99eae](https://github.com/clerk/javascript/commit/fd99eae111469c5d0028fd46b8bcbf1c5a8325b0)) +- **clerk-sdk-node:** Correctly apply body deserialization ([fefc084](https://github.com/clerk/javascript/commit/fefc084a3680c071a62dfe573cd5e6e2d5d769f3)) +- **clerk-sdk-node:** Fix string minor typing ([219c1a1](https://github.com/clerk/javascript/commit/219c1a1b9c4cf49cc02c132986db5f08088fafdd)) +- **clerk-sdk-node:** Fix version file ([88b4897](https://github.com/clerk/javascript/commit/88b4897d74a30cb67b0e39c72eac9e263030f3b2)) +- **clerk-sdk-node:** Properly import key from jwk ([e982fd0](https://github.com/clerk/javascript/commit/e982fd07bfd3354c108efc14775d03087e816651)) +- Remove coverage folder ([e009e7d](https://github.com/clerk/javascript/commit/e009e7d794db052cbf74433fb0cf01203cecce4d)) + +## 2.7.0-alpha.0 (2022-01-20) + +### Features + +- Add injectable loadCryptoKeyFunction ([637b854](https://github.com/clerk/clerk-sdk-node/commit/637b8547447bdfb5f1cac8718d007e665b433f70)) +- Consistent imports rule ([fb81176](https://github.com/clerk/clerk-sdk-node/commit/fb81176b9db0a95a84d19f61e15a9c65a12fc98e)) +- npm workspaces and lerna setup ([cfbfebf](https://github.com/clerk/clerk-sdk-node/commit/cfbfebfd0d5f88a96b4715e4be52bff7f37cc3db)) +- SDK Node resource and APIs from @clerk/backend-core ([6a32317](https://github.com/clerk/clerk-sdk-node/commit/6a323175f9361c32192a4a6be4139b88945a857c)) +- Update READMEs, API reference for @clerk/backend-core, minor fixes ([529c2f6](https://github.com/clerk/clerk-sdk-node/commit/529c2f629ec02895f9f049d29b5775f16ef5c6e9)) + +### Bug Fixes + +- **clerk-sdk-node:** Correctly apply body deserialization ([fefc084](https://github.com/clerk/clerk-sdk-node/commit/fefc084a3680c071a62dfe573cd5e6e2d5d769f3)) +- **clerk-sdk-node:** Fix string minor typing ([219c1a1](https://github.com/clerk/clerk-sdk-node/commit/219c1a1b9c4cf49cc02c132986db5f08088fafdd)) +- **clerk-sdk-node:** Fix version file ([88b4897](https://github.com/clerk/clerk-sdk-node/commit/88b4897d74a30cb67b0e39c72eac9e263030f3b2)) +- **clerk-sdk-node:** Properly import key from jwk ([e982fd0](https://github.com/clerk/clerk-sdk-node/commit/e982fd07bfd3354c108efc14775d03087e816651)) +- Remove coverage folder ([e009e7d](https://github.com/clerk/clerk-sdk-node/commit/e009e7d794db052cbf74433fb0cf01203cecce4d)) + +## 2.6.3 (2022-01-20) + +### Features + +- Switch repo from [https://github.com/clerk/clerk-sdk-node/](https://github.com/clerk/clerk-sdk-node/) 🎊 diff --git a/packages/express/LICENSE b/packages/express/LICENSE new file mode 100644 index 00000000000..66914b6af7c --- /dev/null +++ b/packages/express/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Clerk, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/express/README.md b/packages/express/README.md new file mode 100644 index 00000000000..810f369bf72 --- /dev/null +++ b/packages/express/README.md @@ -0,0 +1,102 @@ +

+ + + + + + +
+

+ +# @clerk/express + +
+ +[![Chat on Discord](https://img.shields.io/discord/856971667393609759.svg?logo=discord)](https://clerk.com/discord) +[![Clerk documentation](https://img.shields.io/badge/documentation-clerk-green.svg)](https://clerk.com/docs?utm_source=github&utm_medium=express) +[![Follow on Twitter](https://img.shields.io/twitter/follow/ClerkDev?style=social)](https://twitter.com/intent/follow?screen_name=ClerkDev) + +[Changelog](https://github.com/clerk/javascript/blob/main/packages/sdk-node/CHANGELOG.md) +· +[Report a Bug](https://github.com/clerk/javascript/issues/new?assignees=&labels=needs-triage&projects=&template=BUG_REPORT.yml) +· +[Request a Feature](https://github.com/clerk/javascript/issues/new?assignees=&labels=feature-request&projects=&template=FEATURE_REQUEST.yml) +· +[Ask a Question](https://github.com/clerk/javascript/discussions) + +
+ +--- + +## Overview + + + +[Clerk](https://clerk.com?utm_source=github&utm_medium=express) is the easiest way to add authentication and user management to your Node.js application. To gain a better understanding of the Clerk Backend API and SDK, refer to +the Node SDK and Backend API documentation. + +## Getting started + +### Prerequisites + +- Node.js `>=18.17.0` or later + +## Installation + +```sh +npm install @clerk/express +``` + +To build the package locally with the TypeScript compiler, run: + +```sh +npm run build +``` + +## Usage + +Retrieve your Backend API key from the [API Keys](https://dashboard.clerk.com/last-active?path=api-keys) screen in your Clerk dashboard and set it as an environment variable in a `.env` file: + +```sh +CLERK_PUBLISHABLE_KEY=pk_******* +CLERK_SECRET_KEY=sk_****** +``` + +You will then be able to access all the available methods. + +```js +import 'dotenv/config'; // To read CLERK_SECRET_KEY +import { clerkClient } from '@clerk/express'; + +const { data: userList } = await clerkClient.users.getUserList(); +``` + + + +_For further details and examples, please refer to our [Documentation](https://clerk.com/docs/reference/express/getting-started?utm_source=github&utm_medium=express)._ + +## Support + +You can get in touch with us in any of the following ways: + +- Join our official community [Discord server](https://clerk.com/discord) +- Create a [GitHub Discussion](https://github.com/clerk/javascript/discussions) +- Contact options listed on [our Support page](https://clerk.com/support?utm_source=github&utm_medium=express) + +## Contributing + +We're open to all community contributions! If you'd like to contribute in any way, please read [our contribution guidelines](https://github.com/clerk/javascript/blob/main/docs/CONTRIBUTING.md). + +## Security + +`@clerk/express` follows good practices of security, but 100% security cannot be assured. + +`@clerk/express` is provided **"as is"** without any **warranty**. Use at your own risk. + +_For more information and to report security issues, please refer to our [security documentation](https://github.com/clerk/javascript/blob/main/docs/SECURITY.md)._ + +## License + +This project is licensed under the **MIT license**. + +See [LICENSE](https://github.com/clerk/javascript/blob/main/packages/express/LICENSE) for more information. diff --git a/packages/express/jest.config.js b/packages/express/jest.config.js new file mode 100644 index 00000000000..26b66006337 --- /dev/null +++ b/packages/express/jest.config.js @@ -0,0 +1,17 @@ +const { name } = require('./package.json'); + +module.exports = { + displayName: name.replace('@clerk', ''), + globals: { + PACKAGE_NAME: '@clerk/clerk-sdk-node', + PACKAGE_VERSION: '0.0.0-test', + }, + roots: ['/src'], + testMatch: ['**/?(*.)+(spec|test).+(ts|tsx|js)'], + transform: { + '^.+\\.ts$': 'ts-jest', + }, + setupFiles: ['/jest.setup.js'], + collectCoverage: true, + testPathIgnorePatterns: ['/node_modules/', '/coverage', '/.turbo', '/dist/', '/examples'], +}; diff --git a/packages/express/jest.setup.js b/packages/express/jest.setup.js new file mode 100644 index 00000000000..1a5dcdc343c --- /dev/null +++ b/packages/express/jest.setup.js @@ -0,0 +1 @@ +process.env.CLERK_SECRET_KEY = 'TEST_SECRET_KEY'; diff --git a/packages/express/package.json b/packages/express/package.json new file mode 100644 index 00000000000..03fcdfc850b --- /dev/null +++ b/packages/express/package.json @@ -0,0 +1,79 @@ +{ + "name": "@clerk/express", + "version": "0.0.1", + "description": "Clerk server SDK for usage with Express", + "keywords": [ + "clerk", + "sdk", + "express" + ], + "homepage": "https://clerk.com/", + "bugs": { + "url": "https://github.com/clerk/javascript/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/clerk/javascript.git", + "directory": "packages/express" + }, + "license": "MIT", + "author": { + "name": "Clerk, Inc.", + "email": "support@clerk.com", + "url": "git+https://github.com/clerk/javascript.git" + }, + "exports": { + ".": { + "import": { + "types": "./dist/index.d.mts", + "default": "./dist/index.mjs" + }, + "require": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } + }, + "./package.json": "./package.json" + }, + "main": "./dist/index.js", + "files": [ + "dist" + ], + "scripts": { + "build": "npm run clean && tsup", + "dev": "tsup --watch", + "dev:publish": "npm run dev -- --env.publish", + "publish:local": "npx yalc push --replace --sig", + "clean": "rimraf ./dist", + "lint": "eslint src/", + "lint:publint": "publint", + "lint:attw": "attw --pack .", + "test": "jest", + "test:cache:clear": "jest --clearCache --useStderr", + "test:ci": "jest --maxWorkers=70%" + }, + "dependencies": { + "@clerk/backend": "1.0.0-beta.25", + "@clerk/shared": "2.0.0-beta.17", + "camelcase-keys": "6.2.2", + "snakecase-keys": "3.2.1" + }, + "devDependencies": { + "@clerk/types": "4.0.0-beta.18", + "@types/express": "4.17.14", + "@types/node": "^18.17.0", + "eslint-config-custom": "*", + "nock": "^13.0.7", + "npm-run-all": "^4.1.5", + "prettier": "^2.5.0", + "tslib": "2.4.1", + "tsup": "*", + "typescript": "*" + }, + "engines": { + "node": ">=18.17.0" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/express/src/__tests__/__snapshots__/exports.test.ts.snap b/packages/express/src/__tests__/__snapshots__/exports.test.ts.snap new file mode 100644 index 00000000000..f637583ede6 --- /dev/null +++ b/packages/express/src/__tests__/__snapshots__/exports.test.ts.snap @@ -0,0 +1,12 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`module exports should not change unless explicitly set 1`] = ` +[ + "clerkClient", + "clerkMiddleware", + "createClerkClient", + "getAuth", + "protect", + "verifyToken", +] +`; diff --git a/packages/express/src/__tests__/exports.test.ts b/packages/express/src/__tests__/exports.test.ts new file mode 100644 index 00000000000..632b0e0fcbf --- /dev/null +++ b/packages/express/src/__tests__/exports.test.ts @@ -0,0 +1,7 @@ +import * as publicExports from '..'; + +describe('module exports', () => { + it('should not change unless explicitly set', () => { + expect(Object.keys(publicExports).sort()).toMatchSnapshot(); + }); +}); diff --git a/packages/express/src/authenticateRequest.ts b/packages/express/src/authenticateRequest.ts new file mode 100644 index 00000000000..57849e6630b --- /dev/null +++ b/packages/express/src/authenticateRequest.ts @@ -0,0 +1,97 @@ +import type { RequestState } from '@clerk/backend/internal'; +import { AuthStatus, createClerkRequest } from '@clerk/backend/internal'; +import { handleValueOrFn } from '@clerk/shared/handleValueOrFn'; +import { isDevelopmentFromSecretKey } from '@clerk/shared/keys'; +import { isHttpOrHttps, isProxyUrlRelative, isValidProxyUrl } from '@clerk/shared/proxy'; +import type { Response } from 'express'; +import type { IncomingMessage } from 'http'; + +import { satelliteAndMissingProxyUrlAndDomain, satelliteAndMissingSignInUrl } from './errors'; +import type { AuthenticateRequestParams } from './types'; +import { loadApiEnv, loadClientEnv } from './utils'; + +export const authenticateRequest = (opts: AuthenticateRequestParams) => { + const { clerkClient, request, options } = opts; + const { jwtKey, authorizedParties, audience } = options || {}; + + const clerkRequest = createClerkRequest(incomingMessageToRequest(request)); + const env = { ...loadApiEnv(), ...loadClientEnv() }; + + const secretKey = options?.secretKey || env.secretKey; + const publishableKey = options?.publishableKey || env.publishableKey; + + const isSatellite = handleValueOrFn(options?.isSatellite, clerkRequest.clerkUrl, env.isSatellite); + const domain = handleValueOrFn(options?.domain, clerkRequest.clerkUrl) || env.domain; + const signInUrl = options?.signInUrl || env.signInUrl; + const proxyUrl = absoluteProxyUrl( + handleValueOrFn(options?.proxyUrl, clerkRequest.clerkUrl, env.proxyUrl), + clerkRequest.clerkUrl.toString(), + ); + + if (isSatellite && !proxyUrl && !domain) { + throw new Error(satelliteAndMissingProxyUrlAndDomain); + } + + if (isSatellite && !isHttpOrHttps(signInUrl) && isDevelopmentFromSecretKey(secretKey || '')) { + throw new Error(satelliteAndMissingSignInUrl); + } + + return clerkClient.authenticateRequest(clerkRequest, { + audience, + secretKey, + publishableKey, + jwtKey, + authorizedParties, + proxyUrl, + isSatellite, + domain, + signInUrl, + }); +}; + +const incomingMessageToRequest = (req: IncomingMessage): Request => { + const headers = Object.keys(req.headers).reduce((acc, key) => Object.assign(acc, { [key]: req?.headers[key] }), {}); + // @ts-ignore Optimistic attempt to get the protocol in case + // req extends IncomingMessage in a useful way. No guarantee + // it'll work. + const protocol = req.connection?.encrypted ? 'https' : 'http'; + const dummyOriginReqUrl = new URL(req.url || '', `${protocol}://clerk-dummy`); + return new Request(dummyOriginReqUrl, { + method: req.method, + headers: new Headers(headers), + }); +}; + +export const setResponseHeaders = (requestState: RequestState, res: Response): Error | undefined => { + if (requestState.headers) { + requestState.headers.forEach((value, key) => res.appendHeader(key, value)); + } + return setResponseForHandshake(requestState, res); +}; + +/** + * Depending on the auth state of the request, handles applying redirects and validating that a handshake state was properly handled. + * + * Returns an error if state is handshake without a redirect, otherwise returns undefined. res.writableEnded should be checked after this method is called. + */ +const setResponseForHandshake = (requestState: RequestState, res: Response): Error | undefined => { + const hasLocationHeader = requestState.headers.get('location'); + if (hasLocationHeader) { + // triggering a handshake redirect + res.status(307).end(); + return; + } + + if (requestState.status === AuthStatus.Handshake) { + return new Error('Clerk: unexpected handshake without redirect'); + } + + return; +}; + +const absoluteProxyUrl = (relativeOrAbsoluteUrl: string, baseUrl: string): string => { + if (!relativeOrAbsoluteUrl || !isValidProxyUrl(relativeOrAbsoluteUrl) || !isProxyUrlRelative(relativeOrAbsoluteUrl)) { + return relativeOrAbsoluteUrl; + } + return new URL(relativeOrAbsoluteUrl, baseUrl).toString(); +}; diff --git a/packages/express/src/clerkClient.ts b/packages/express/src/clerkClient.ts new file mode 100644 index 00000000000..6eedffd6d93 --- /dev/null +++ b/packages/express/src/clerkClient.ts @@ -0,0 +1,29 @@ +import { createClerkClient } from '@clerk/backend'; + +import { loadApiEnv, loadClientEnv } from './utils'; + +let clerkClientSingleton = {} as unknown as ReturnType; + +export const clerkClient = new Proxy(clerkClientSingleton, { + get(_target, property: string) { + const hasBeenInitialised = !!clerkClientSingleton.authenticateRequest; + if (hasBeenInitialised) { + // @ts-expect-error - Element implicitly has an 'any' type because expression of type 'string | symbol' can't be used to index type 'ExtendedClerk'. + return clerkClientSingleton[property]; + } + + const env = { ...loadApiEnv(), ...loadClientEnv() }; + if (env.secretKey) { + clerkClientSingleton = createClerkClient({ ...env, userAgent: `${PACKAGE_NAME}@${PACKAGE_VERSION}` }); + // @ts-expect-error - Element implicitly has an 'any' type because expression of type 'string | symbol' can't be used to index type 'ExtendedClerk'. + return clerkClientSingleton[property]; + } + + const c = createClerkClient({ ...env, userAgent: `${PACKAGE_NAME}@${PACKAGE_VERSION}` }); + // @ts-expect-error - Element implicitly has an 'any' type because expression of type 'string | symbol' can't be used to index type 'ExtendedClerk'. + return c[property]; + }, + set() { + return false; + }, +}); diff --git a/packages/express/src/clerkMiddleware.ts b/packages/express/src/clerkMiddleware.ts new file mode 100644 index 00000000000..de2f1015e97 --- /dev/null +++ b/packages/express/src/clerkMiddleware.ts @@ -0,0 +1,43 @@ +import { createClerkClient } from '@clerk/backend'; +import type { RequestHandler } from 'express'; + +import { authenticateRequest, setResponseHeaders } from './authenticateRequest'; +import { clerkClient as defaultClerkClient } from './clerkClient'; +import type { ClerkMiddleware, ClerkMiddlewareOptions } from './types'; +import { defaultHandler } from './utils'; + +const parseHandlerAndOptions = (args: unknown[]) => { + return [ + typeof args[0] === 'function' ? args[0] : undefined, + (args.length === 2 ? args[1] : typeof args[0] === 'function' ? {} : args[0]) || {}, + ] as [RequestHandler | undefined, ClerkMiddlewareOptions]; +}; + +export const clerkMiddleware: ClerkMiddleware = (...args: unknown[]): RequestHandler[] => { + const [handler, options] = parseHandlerAndOptions(args); + + const shouldInitializeClerkClient = Object.keys(options).length > 0; + const clerkClient = shouldInitializeClerkClient ? createClerkClient(options) : defaultClerkClient; + + const middleware: RequestHandler = async (request, response, next) => { + const requestState = await authenticateRequest({ + clerkClient, + request, + options, + }); + + const err = setResponseHeaders(requestState, response); + if (err || response.writableEnded) { + if (err) { + next(err); + } + return; + } + + Object.assign(request, { auth: requestState.toAuth() }); + + return next(); + }; + + return [middleware, handler || defaultHandler]; +}; diff --git a/packages/express/src/errors.ts b/packages/express/src/errors.ts new file mode 100644 index 00000000000..8a1303f4db8 --- /dev/null +++ b/packages/express/src/errors.ts @@ -0,0 +1,25 @@ +// https://github.com/clerk/javascript/blob/main/packages/remix/src/errors.ts#L1-L0 +const createErrorMessage = (msg: string) => { + return `🔒 Clerk: ${msg.trim()} + + For more info, check out the docs: https://clerk.com/docs, + or come say hi in our discord server: https://clerk.com/discord + `; +}; + +export const middlewareRequired = + createErrorMessage(`The "clerkMiddleware" should be registered before using the "getAuth". +Example: + +import express from 'express'; +import { clerkMiddleware } from '@clerk/express'; + +const app = express(); +app.use(clerkMiddleware); +`); + +export const satelliteAndMissingProxyUrlAndDomain = + 'Missing domain and proxyUrl. A satellite application needs to specify a domain or a proxyUrl'; +export const satelliteAndMissingSignInUrl = ` +Invalid signInUrl. A satellite application requires a signInUrl for development instances. +Check if signInUrl is missing from your configuration or if it is not an absolute URL.`; diff --git a/packages/express/src/getAuth.ts b/packages/express/src/getAuth.ts new file mode 100644 index 00000000000..dbe0e02f67b --- /dev/null +++ b/packages/express/src/getAuth.ts @@ -0,0 +1,13 @@ +import type { AuthObject } from '@clerk/backend/internal'; +import type { Request as ExpressRequest } from 'express'; + +import { middlewareRequired } from './errors'; +import { isAuthInRequest } from './utils'; + +export const getAuth = (req: ExpressRequest): AuthObject => { + if (!isAuthInRequest(req)) { + throw new Error(middlewareRequired); + } + + return req.auth; +}; diff --git a/packages/express/src/globals.d.ts b/packages/express/src/globals.d.ts new file mode 100644 index 00000000000..f14f854fd7d --- /dev/null +++ b/packages/express/src/globals.d.ts @@ -0,0 +1,6 @@ +export {}; + +declare global { + const PACKAGE_NAME: string; + const PACKAGE_VERSION: string; +} diff --git a/packages/express/src/index.ts b/packages/express/src/index.ts new file mode 100644 index 00000000000..cf04ed98222 --- /dev/null +++ b/packages/express/src/index.ts @@ -0,0 +1,8 @@ +export * from '@clerk/backend'; + +export { clerkClient } from './clerkClient'; + +export type { ClerkMiddleware, ExpressRequestWithAuth } from './types'; +export { clerkMiddleware } from './clerkMiddleware'; +export { getAuth } from './getAuth'; +export { protect } from './protect'; diff --git a/packages/express/src/protect.ts b/packages/express/src/protect.ts new file mode 100644 index 00000000000..f6f0579f3ec --- /dev/null +++ b/packages/express/src/protect.ts @@ -0,0 +1,35 @@ +import type { RequestHandler } from 'express'; + +import { middlewareRequired } from './errors'; +import { defaultHandler, isAuthInRequest } from './utils'; + +/** + * @example + * router.get('/path', protect(), getHandler) + * + * @example + * hasPermission = (request, response, next) => { + const auth = getAuth(request); + if (!auth.has('perm')) { + reply.status(403).send('Forbidden'); + return; + } + return next(); + } + * router.get('/path', protect(hasPermission), getHandler) + */ +export const protect = (handler?: RequestHandler): RequestHandler[] => { + const protectMiddleware: RequestHandler = (request, response, next) => { + if (!isAuthInRequest(request)) { + throw new Error(middlewareRequired); + } + if (!request.auth.userId) { + response.status(401).send('Unauthorized'); + return; + } + + return next(); + }; + + return [protectMiddleware, handler || defaultHandler]; +}; diff --git a/packages/express/src/types.ts b/packages/express/src/types.ts new file mode 100644 index 00000000000..e0f5adf4dfe --- /dev/null +++ b/packages/express/src/types.ts @@ -0,0 +1,35 @@ +// eslint-disable-next-line @typescript-eslint/consistent-type-imports +import { createClerkClient } from '@clerk/backend'; +import type { AuthenticateRequestOptions, AuthObject } from '@clerk/backend/internal'; +import type { Request as ExpressRequest, RequestHandler } from 'express'; + +export type ExpressRequestWithAuth = ExpressRequest & { auth: AuthObject }; + +export type ClerkMiddlewareOptions = AuthenticateRequestOptions & { debug?: boolean }; + +/** + * Middleware for Express that handles authentication and authorization with Clerk. + * For more details, please refer to the docs: TODO(express): add documentation link here + */ +export interface ClerkMiddleware { + /** + * @example + * app.use(clerkMiddleware((request, response, next) => { ... }, options)); + */ + (handler: RequestHandler, options?: ClerkMiddlewareOptions): RequestHandler[]; + /** + * @example + * app.use(clerkMiddleware(options)); + * + * @example + * app.use(clerkMiddleware()); + */ + (options?: ClerkMiddlewareOptions): RequestHandler[]; +} + +type ClerkClient = ReturnType; +export type AuthenticateRequestParams = { + clerkClient: ClerkClient; + request: ExpressRequest; + options?: ClerkMiddlewareOptions; +}; diff --git a/packages/express/src/utils.ts b/packages/express/src/utils.ts new file mode 100644 index 00000000000..e2b7304402b --- /dev/null +++ b/packages/express/src/utils.ts @@ -0,0 +1,36 @@ +import { isTruthy } from '@clerk/shared/underscore'; +import type { Request as ExpressRequest, RequestHandler } from 'express'; + +import type { ExpressRequestWithAuth } from './types'; + +export const isAuthInRequest = (req: ExpressRequest): req is ExpressRequestWithAuth => { + return 'auth' in req; +}; + +export const loadClientEnv = () => { + return { + publishableKey: process.env.CLERK_PUBLISHABLE_KEY || '', + clerkJSUrl: process.env.CLERK_JS || '', + clerkJSVersion: process.env.CLERK_JS_VERSION || '', + }; +}; + +export const loadApiEnv = () => { + return { + secretKey: process.env.CLERK_SECRET_KEY || '', + apiUrl: process.env.CLERK_API_URL || 'https://api.clerk.com', + apiVersion: process.env.CLERK_API_VERSION || 'v1', + domain: process.env.CLERK_DOMAIN || '', + proxyUrl: process.env.CLERK_PROXY_URL || '', + signInUrl: process.env.CLERK_SIGN_IN_URL || '', + isSatellite: isTruthy(process.env.CLERK_IS_SATELLITE), + jwtKey: process.env.CLERK_JWT_KEY || '', + sdkMetadata: { + name: PACKAGE_NAME, + version: PACKAGE_VERSION, + environment: process.env.NODE_ENV, + }, + }; +}; + +export const defaultHandler: RequestHandler = (_req, _res, next) => next(); diff --git a/packages/express/tsconfig.declarations.json b/packages/express/tsconfig.declarations.json new file mode 100644 index 00000000000..c42a5efd18e --- /dev/null +++ b/packages/express/tsconfig.declarations.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "skipLibCheck": true, + "noEmit": false, + "declaration": true, + "emitDeclarationOnly": true, + "declarationMap": true, + "sourceMap": false, + "declarationDir": "./dist/types" + } +} diff --git a/packages/express/tsconfig.json b/packages/express/tsconfig.json new file mode 100644 index 00000000000..0f6fe206f62 --- /dev/null +++ b/packages/express/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "declaration": true, + "declarationMap": false, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "importHelpers": true, + "isolatedModules": true, + "moduleResolution": "NodeNext", + "module": "NodeNext", + "noImplicitReturns": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "resolveJsonModule": true, + "sourceMap": false, + "strict": true, + "target": "ES2020", + "outDir": "dist", + "types": ["jest"] + }, + "exclude": ["node_modules"], + "include": ["src/index.ts", "src/globals.d.ts"] +} diff --git a/packages/express/tsconfig.lint.json b/packages/express/tsconfig.lint.json new file mode 100644 index 00000000000..9b624091911 --- /dev/null +++ b/packages/express/tsconfig.lint.json @@ -0,0 +1,5 @@ +{ + "extends": "./tsconfig.json", + "include": ["src"], + "exclude": ["node_modules"] +} diff --git a/packages/express/tsup.config.ts b/packages/express/tsup.config.ts new file mode 100644 index 00000000000..f402b39bbd5 --- /dev/null +++ b/packages/express/tsup.config.ts @@ -0,0 +1,22 @@ +import { defineConfig } from 'tsup'; + +import { name, version } from './package.json'; + +export default defineConfig(overrideOptions => { + const isWatch = !!overrideOptions.watch; + + return { + entry: ['./src/index.ts'], + format: ['cjs', 'esm'], + bundle: true, + clean: true, + minify: false, + sourcemap: true, + dts: true, + define: { + PACKAGE_NAME: `"${name}"`, + PACKAGE_VERSION: `"${version}"`, + __DEV__: `${isWatch}`, + }, + }; +}); diff --git a/packages/express/turbo.json b/packages/express/turbo.json new file mode 100644 index 00000000000..ecf7ee4b7f0 --- /dev/null +++ b/packages/express/turbo.json @@ -0,0 +1,28 @@ +{ + "extends": ["//"], + "pipeline": { + "build": { + "inputs": [ + "*.d.ts", + "**/package.json", + "cjs/**", + "esm/**", + "src/**", + "scripts/**", + "tsconfig.json", + "tsconfig.declarations.json", + "tsup.config.ts", + + "!**/**/*.test.*", + "!**/test/**", + "!**/tests/**", + "!**/__tests__/**", + "!**/__mocks__/**", + "!**/__snapshots__/**", + "!coverage/**", + "!examples/**", + "!node_modules/**" + ] + } + } +} diff --git a/packages/sdk-node/src/index.ts b/packages/sdk-node/src/index.ts index 7aa1b40e041..6de071dd83c 100644 --- a/packages/sdk-node/src/index.ts +++ b/packages/sdk-node/src/index.ts @@ -12,7 +12,7 @@ import type { export * from '@clerk/backend'; /** - * The order of these exports is important, as we want Clerk from clerk/sdk-node + * The order of these exports is important, as we want Clerk from clerk/clerk-sdk-node * to shadow the Clerk export from clerk/backend, because it needs to support * 2 additional apis: clerk.expressWithAuth, clerk.expressRequireAuth */ diff --git a/scripts/canary.mjs b/scripts/canary.mjs index 7335ead77ce..3823d94e666 100755 --- a/scripts/canary.mjs +++ b/scripts/canary.mjs @@ -20,6 +20,7 @@ const snapshot = `--- '@clerk/remix': patch '@clerk/types': patch '@clerk/clerk-expo': patch +'@clerk/express': patch --- Canary release diff --git a/scripts/snapshot.mjs b/scripts/snapshot.mjs index 9d5f6e85d3c..a2327b61eee 100755 --- a/scripts/snapshot.mjs +++ b/scripts/snapshot.mjs @@ -19,6 +19,7 @@ const snapshot = `--- '@clerk/remix': patch '@clerk/types': patch '@clerk/clerk-expo': patch +'@clerk/express': patch --- Snapshot release From f228ab1e7aafd0375619f090ae30e19a153e1d5a Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Mon, 11 Mar 2024 19:36:39 +0200 Subject: [PATCH 02/16] chore(express): Apply PR comments --- package-lock.json | 4 +- packages/express/.npmignore | 3 +- packages/express/CHANGELOG.md | 1553 ----------------------- packages/express/README.md | 1 + packages/express/jest.config.js | 2 +- packages/express/package.json | 6 +- packages/express/src/clerkClient.ts | 21 +- packages/express/src/clerkMiddleware.ts | 1 + packages/express/src/errors.ts | 3 +- packages/express/src/getAuth.ts | 7 + packages/express/src/protect.ts | 16 +- packages/express/src/types.ts | 2 +- 12 files changed, 37 insertions(+), 1582 deletions(-) diff --git a/package-lock.json b/package-lock.json index d7fe540ef4a..bb01add69d4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38225,7 +38225,8 @@ "@clerk/backend": "1.0.0-beta.25", "@clerk/shared": "2.0.0-beta.17", "camelcase-keys": "6.2.2", - "snakecase-keys": "3.2.1" + "snakecase-keys": "3.2.1", + "tslib": "2.4.1" }, "devDependencies": { "@clerk/types": "4.0.0-beta.18", @@ -38235,7 +38236,6 @@ "nock": "^13.0.7", "npm-run-all": "^4.1.5", "prettier": "^2.5.0", - "tslib": "2.4.1", "tsup": "*", "typescript": "*" }, diff --git a/packages/express/.npmignore b/packages/express/.npmignore index 7c626297425..8b2767ff3b3 100644 --- a/packages/express/.npmignore +++ b/packages/express/.npmignore @@ -1,3 +1,2 @@ * -!/dist/**/* -!/esm/**/* \ No newline at end of file +!/dist/**/* \ No newline at end of file diff --git a/packages/express/CHANGELOG.md b/packages/express/CHANGELOG.md index 85b325d67f6..420e6f23d0e 100644 --- a/packages/express/CHANGELOG.md +++ b/packages/express/CHANGELOG.md @@ -1,1554 +1 @@ # Change Log - -## 5.0.0-beta.26 - -### Minor Changes - -- Pass environment into `sdkMetadata` in order to detect if production clerk-js is used by other sdks in dev mode. When it is log dev warning from clerk-js. ([#2802](https://github.com/clerk/javascript/pull/2802)) by [@panteliselef](https://github.com/panteliselef) - -## 5.0.0-beta.25 - -### Patch Changes - -- Updated dependencies [[`1834a3ee4`](https://github.com/clerk/javascript/commit/1834a3ee496ea27b9f7ceeb32ec5361f9de8ee30), [`15af02a83`](https://github.com/clerk/javascript/commit/15af02a837b0e87ea83f3a86dfacc149adca1345)]: - - @clerk/shared@2.0.0-beta.17 - - @clerk/backend@1.0.0-beta.25 - -## 5.0.0-beta.24 - -### Patch Changes - -- Updated dependencies [[`db18787c4`](https://github.com/clerk/javascript/commit/db18787c4d9fa8ee1306db9b65f3b3f5e2fe2dad)]: - - @clerk/shared@2.0.0-beta.16 - - @clerk/backend@1.0.0-beta.24 - -## 5.0.0-beta.23 - -### Patch Changes - -- Updated dependencies [[`6eab66050`](https://github.com/clerk/javascript/commit/6eab66050608a1bc5cb9aca6a234b1fea16106e5)]: - - @clerk/shared@2.0.0-beta.15 - - @clerk/backend@1.0.0-beta.23 - -## 5.0.0-beta.22 - -### Patch Changes - -- Updated dependencies [[`12f3c5c55`](https://github.com/clerk/javascript/commit/12f3c5c55580f93a81df27851fbc92ce1312107e)]: - - @clerk/shared@2.0.0-beta.14 - - @clerk/backend@1.0.0-beta.22 - -## 5.0.0-beta.21 - -### Patch Changes - -- Updated dependencies [[`051833167`](https://github.com/clerk/javascript/commit/0518331675ffb4d6c6830d79a1d61f9e4466773a)]: - - @clerk/backend@1.0.0-beta.21 - -## 5.0.0-beta.20 - -### Patch Changes - -- Rename beta-v5 to beta by [@nikosdouvlis](https://github.com/nikosdouvlis) - -- Updated dependencies [[`2de442b24`](https://github.com/clerk/javascript/commit/2de442b2465cc5d424b8a0b21aa57c557f3aa2e7)]: - - @clerk/backend@1.0.0-beta.20 - - @clerk/shared@2.0.0-beta.13 - -## 5.0.0-beta-v5.19 - -### Patch Changes - -- Updated dependencies [[`966b31205`](https://github.com/clerk/javascript/commit/966b312050b572fbbbc07a6f0581cbec21847375), [`a8901be64`](https://github.com/clerk/javascript/commit/a8901be64fe91125a0d38a3c880ffa73168ccf5c), [`7b200af49`](https://github.com/clerk/javascript/commit/7b200af4908839ea661ddf2a76811057b545cafc), [`244de5ea3`](https://github.com/clerk/javascript/commit/244de5ea3a7641727cd85c544bb79fb04f2c0808), [`034c47ccb`](https://github.com/clerk/javascript/commit/034c47ccbef0129b9be9ff8aef683aa039e52602), [`8daf8451c`](https://github.com/clerk/javascript/commit/8daf8451cb564bc834dd856174ffc2cdfa932e37), [`7f751c4ef`](https://github.com/clerk/javascript/commit/7f751c4ef2d14410058cf65ea984a93b50c0b87e), [`4fced88ac`](https://github.com/clerk/javascript/commit/4fced88acc66a4837779d8bbca359086cddeec56), [`be991365e`](https://github.com/clerk/javascript/commit/be991365e1c78d0f1dfc59bb33dd533b6fad223a), [`c2b982749`](https://github.com/clerk/javascript/commit/c2b98274970bac5af33c9bb2e84c70ad90225180)]: - - @clerk/backend@1.0.0-beta-v5.19 - - @clerk/shared@2.0.0-beta-v5.12 - -## 5.0.0-beta-v5.18 - -### Patch Changes - -- The following paginated APIs now return `{ data, totalCount }` instead of simple arrays, in order to make building paginated UIs easier: ([#2633](https://github.com/clerk/javascript/pull/2633)) by [@dimkl](https://github.com/dimkl) - - - `clerkClient.users.getOrganizationMembershipList(...)` - - `clerkClient.organization.getOrganizationList(...)` - - `clerkClient.organization.getOrganizationInvitationList(...)` - - Revert changing the `{ data, errors }` return value of the following helpers to throw the `errors` or return the `data` (keep v4 format): - - - `import { verifyToken } from '@clerk/backend'` - - `import { signJwt, hasValidSignature, decodeJwt, verifyJwt } from '@clerk/backend/jwt'` - - BAPI `clerkClient` methods eg (`clerkClient.users.getUserList(...)`) - -- Updated dependencies [[`8e5c881c4`](https://github.com/clerk/javascript/commit/8e5c881c40d7306c5dbd2e1f1803fbf75127bd71), [`d4ff346dd`](https://github.com/clerk/javascript/commit/d4ff346dd53bb3e1970e80bdc7b188c2dd344f12), [`a6308c67e`](https://github.com/clerk/javascript/commit/a6308c67e329879e001cee56cccd82e60b804422)]: - - @clerk/backend@1.0.0-beta-v5.18 - - @clerk/shared@2.0.0-beta-v5.11 - -## 5.0.0-alpha-v5.17 - -### Major Changes - -- Changes the `request.auth` type from `LegacyAuthObject` to `AuthObject`. ([#2609](https://github.com/clerk/javascript/pull/2609)) by [@dimkl](https://github.com/dimkl) - - ```typescript - type LegacyAuthObject = { - sessionId: string | null; - actor: ActClaim | undefined | null; - userId: string | null; - getToken: ServerGetToken | null; - debug: AuthObjectDebug | null; - claims: JwtPayload | null; - }; - - type AuthObject = { - sessionClaims: JwtPayload | null; - sessionId: string | null; - actor: ActClaim | undefined | null; - userId: string | null; - orgId: string | undefined | null; - orgRole: OrganizationCustomRoleKey | undefined | null; - orgSlug: string | undefined | null; - orgPermissions: OrganizationCustomPermissionKey[] | undefined | null; - getToken: ServerGetToken | null; - has: CheckAuthorizationWithCustomPermissions | null; - debug: AuthObjectDebug | null; - }; - ``` - -### Patch Changes - -- Updated dependencies [[`3a2f13604`](https://github.com/clerk/javascript/commit/3a2f13604e1b8b351a05de26d2c0672503aa67b3), [`9e99eb727`](https://github.com/clerk/javascript/commit/9e99eb7276249c68ef6f930cce418ce0004653b9), [`6fffd3b54`](https://github.com/clerk/javascript/commit/6fffd3b542f3df0bcb49281b7c4f77209a83f7a1)]: - - @clerk/backend@1.0.0-alpha-v5.17 - -## 5.0.0-alpha-v5.16 - -### Patch Changes - -- Update README for v5 ([#2577](https://github.com/clerk/javascript/pull/2577)) by [@LekoArts](https://github.com/LekoArts) - -- Updated dependencies [[`935b0886e`](https://github.com/clerk/javascript/commit/935b0886e8317445f30c92000a27ed68e1223ff6), [`6a769771c`](https://github.com/clerk/javascript/commit/6a769771c975996d8d52b35b5cfdbae5dcec85d4)]: - - @clerk/backend@1.0.0-alpha-v5.16 - -## 5.0.0-alpha-v5.15 - -### Minor Changes - -- Replace the `Clerk-Backend-SDK` header with `User-Agent` in BAPI requests and update it's value to contain both the package name and the package version of the clerk package ([#2558](https://github.com/clerk/javascript/pull/2558)) by [@dimkl](https://github.com/dimkl) - - executing the request. Eg request from `@clerk/nextjs` to BAPI with append `User-Agent: @clerk/nextjs@5.0.0-alpha-v5.16` using the latest version. - - Miscellaneous changes: The backend test build changed to use tsup. - -### Patch Changes - -- Updated dependencies [[`799abc281`](https://github.com/clerk/javascript/commit/799abc281182efb953dd6637f9db7fc61c71a2cd), [`8cc45d2af`](https://github.com/clerk/javascript/commit/8cc45d2af98320ccced3768fb039b86576e424a5), [`b4e79c1b9`](https://github.com/clerk/javascript/commit/b4e79c1b9ab8e14cbfccaf290f0f596da0416e13)]: - - @clerk/backend@1.0.0-alpha-v5.15 - - @clerk/shared@2.0.0-alpha-v5.10 - -## 5.0.0-alpha-v5.14 - -### Patch Changes - -- Updated dependencies [[`448e02e93`](https://github.com/clerk/javascript/commit/448e02e93cf2392878d5891009640c52103d99a8), [`e6ecbaa2f`](https://github.com/clerk/javascript/commit/e6ecbaa2ff7add95bf888cb4ce43457b9fde7a13), [`e921af259`](https://github.com/clerk/javascript/commit/e921af259e9bdc8810a830bed54d71cf8eced1f8)]: - - @clerk/backend@1.0.0-alpha-v5.14 - -## 5.0.0-alpha-v5.13 - -### Patch Changes - -- Updated dependencies [[`1dc28ab46`](https://github.com/clerk/javascript/commit/1dc28ab46f6930074334be183c637ce7a81bebf7), [`ea4933655`](https://github.com/clerk/javascript/commit/ea4933655863ce315324aa2a3be7d5f263c2b61f), [`38d8b3e8a`](https://github.com/clerk/javascript/commit/38d8b3e8a0387bcf0b9c8d16e3bbfcfe9b643ca2)]: - - @clerk/shared@2.0.0-alpha-v5.9 - - @clerk/backend@1.0.0-alpha-v5.13 - -## 5.0.0-alpha-v5.12 - -### Patch Changes - -- Integrate handshake handling into `ClerkExpressWithAuth()` and `ClerkExpressRequireWith()`. If the `authenticateRequest()` returns a redirect or is in a handshake state, the middlewares will properly handle this and respond accordingly. ([#2447](https://github.com/clerk/javascript/pull/2447)) by [@BRKalow](https://github.com/BRKalow) - -- Updated dependencies [[`7ecd6f6ab`](https://github.com/clerk/javascript/commit/7ecd6f6abb0e5bfb1a57c99cc11860de311c3e82)]: - - @clerk/shared@2.0.0-alpha-v5.8 - - @clerk/backend@1.0.0-alpha-v5.12 - -## 5.0.0-alpha-v5.11 - -### Patch Changes - -- Updated dependencies [[`f4f99f18d`](https://github.com/clerk/javascript/commit/f4f99f18de0be8afaae9f52599deb2814ab235e7), [`bad4de1a2`](https://github.com/clerk/javascript/commit/bad4de1a2fd8a3e2643fe26677801166a8305c29), [`e7e2a1eae`](https://github.com/clerk/javascript/commit/e7e2a1eae2ed726ab49894dd195185c8f4e70acd)]: - - @clerk/backend@1.0.0-alpha-v5.11 - -## 5.0.0-alpha-v5.10 - -### Major Changes - -- Drop all pre-instantiated Backend API resources (`allowlistIdentifiers`, `clients`, `emailAddresses`, `emails`, `invitations`, `organizations`, `phoneNumbers`, `redirectUrls`, `sessions`, `signInTokens`, `users`, `domains`). Use the `clerkClient` import instead. ([#2362](https://github.com/clerk/javascript/pull/2362)) by [@dimkl](https://github.com/dimkl) - - ```typescript - // Before - import { users } from '@clerk/clerk-sdk-node'; - // After - import { clerkClient } from '@clerk/clerk-sdk-node'; - clerkClient.users; - ``` - -- Changes in exports of `@clerk/backend`: ([#2363](https://github.com/clerk/javascript/pull/2363)) by [@dimkl](https://github.com/dimkl) - - - Expose the following helpers and enums from `@clerk/backend/internal`: - ```typescript - import { - AuthStatus, - buildRequestUrl, - constants, - createAuthenticateRequest, - createIsomorphicRequest, - debugRequestState, - makeAuthObjectSerializable, - prunePrivateMetadata, - redirect, - sanitizeAuthObject, - signedInAuthObject, - signedOutAuthObject, - } from '@clerk/backend/internal'; - ``` - - Drop the above exports from the top-level api: - ```typescript - // Before - import { AuthStatus, ... } from '@clerk/backend'; - // After - import { AuthStatus, ... } from '@clerk/backend/internal'; - ``` - Dropping those exports results in also dropping the exports from `gatsby-plugin-clerk`, `@clerk/clerk-sdk-node`, `@clerk/backend`, `@clerk/fastify`, `@clerk/nextjs`, `@clerk/remix` packages. - -- Changes in exports of `@clerk/backend`: ([#2365](https://github.com/clerk/javascript/pull/2365)) by [@dimkl](https://github.com/dimkl) - - - Drop the following internal exports from the top-level api: - ```typescript - // Before - import { - AllowlistIdentifier, - Client, - DeletedObject, - Email, - EmailAddress, - ExternalAccount, - IdentificationLink, - Invitation, - OauthAccessToken, - ObjectType, - Organization, - OrganizationInvitation, - OrganizationMembership, - OrganizationMembershipPublicUserData, - PhoneNumber, - RedirectUrl, - SMSMessage, - Session, - SignInToken, - Token, - User, - Verification, - } from '@clerk/backend'; - // After : no alternative since there is no need to use those classes - ``` - Dropping those exports results in also dropping the exports from `gatsby-plugin-clerk`, `@clerk/clerk-sdk-node`, `@clerk/backend`, `@clerk/fastify`, `@clerk/nextjs`, `@clerk/remix` packages. - - Keep those 3 resource related type exports - ```typescript - import type { Organization, Session, User, WebhookEvent, WebhookEventType } from '@clerk/backend'; - ``` - -- Changes in exports of `@clerk/backend`: ([#2364](https://github.com/clerk/javascript/pull/2364)) by [@dimkl](https://github.com/dimkl) - - - Expose the following helpers and enums from `@clerk/backend/jwt`: - ```typescript - import { decodeJwt, hasValidSignature, signJwt, verifyJwt } from '@clerk/backend/jwt'; - ``` - - Drop the above exports from the top-level api: - ```typescript - // Before - import { decodeJwt, ... } from '@clerk/backend'; - // After - import { decodeJwt, ... } from '@clerk/backend/jwt'; - ``` - Dropping those exports results in also dropping the exports from `gatsby-plugin-clerk`, `@clerk/clerk-sdk-node`, `@clerk/backend`, `@clerk/fastify`, `@clerk/nextjs`, `@clerk/remix` packages. - -- Changes in `@clerk/backend` exports: ([#2362](https://github.com/clerk/javascript/pull/2362)) by [@dimkl](https://github.com/dimkl) - - - Drop Internal `deserialize` helper - - Introduce `/errors` subpath export, eg: - ```typescript - import { - TokenVerificationError, - TokenVerificationErrorAction, - TokenVerificationErrorCode, - TokenVerificationErrorReason, - } from '@clerk/backend/errors'; - ``` - - Drop errors from top-level export - ```typescript - // Before - import { TokenVerificationError, TokenVerificationErrorReason } from '@clerk/backend'; - // After - import { TokenVerificationError, TokenVerificationErrorReason } from '@clerk/backend/errors'; - ``` - -### Minor Changes - -- Fix error thrown for undefined `Clerk` in case of using default clerkClient from `@clerk/clerk-sdk-node` without secretKey caused by replaced import. ([#2368](https://github.com/clerk/javascript/pull/2368)) by [@dimkl](https://github.com/dimkl) - -### Patch Changes - -- Updated dependencies [[`a9fe242be`](https://github.com/clerk/javascript/commit/a9fe242be4dbaaa02c6643fea0688f1fb23f23e7), [`1e98187b4`](https://github.com/clerk/javascript/commit/1e98187b4fba0f872576510d7bccf8b75a2579bd), [`d08ec6d8f`](https://github.com/clerk/javascript/commit/d08ec6d8f52a2bc037c0eb586123a9f7816e4b64), [`5f58a2274`](https://github.com/clerk/javascript/commit/5f58a22746aba94f76bef5dbbc94fa93ea3b0b7e), [`a9fe242be`](https://github.com/clerk/javascript/commit/a9fe242be4dbaaa02c6643fea0688f1fb23f23e7), [`0ec3a146c`](https://github.com/clerk/javascript/commit/0ec3a146cc4cbe4a80d1f990a440431ae4490183), [`1ad910eb9`](https://github.com/clerk/javascript/commit/1ad910eb92dce056731f29df0caaaad74d08bd7f), [`f58a9949b`](https://github.com/clerk/javascript/commit/f58a9949bc78737ca4e096ed5501b4e578a2d493), [`9b02c1aae`](https://github.com/clerk/javascript/commit/9b02c1aae1cae286ea305c5e216ae93cbbbc0f90)]: - - @clerk/backend@1.0.0-alpha-v5.10 - - @clerk/shared@2.0.0-alpha-v5.7 - -## 5.0.0-alpha-v5.9 - -### Patch Changes - -- Updated dependencies [[`e602d6c1f`](https://github.com/clerk/javascript/commit/e602d6c1fde7a7757d292f24dfaddecd14ac1623)]: - - @clerk/backend@1.0.0-alpha-v5.9 - -## 5.0.0-alpha-v5.8 - -### Major Changes - -- (Note: This is only relevant if, in the unlikely case, you are using `Clerk` from `@clerk/clerk-sdk-node` directly. If not, you can safely ignore this change.) ([#2317](https://github.com/clerk/javascript/pull/2317)) by [@tmilewski](https://github.com/tmilewski) - - Remove the named `Clerk` import from `@clerk/clerk-sdk-node` and import `createClerkClient` instead. The latter is a factory method to create a Clerk client instance for you. This update aligns usage across our SDKs and will enable us to ship DX improvements better in the future. - - ```js - import { Clerk } from '@clerk/clerk-sdk-node'; - const clerk = Clerk({ secretKey: '...' }); - ``` - - You need to rename the import from `Clerk` to `createClerkClient` and change its usage: - - ```js - import { createClerkClient } from '@clerk/clerk-sdk-node'; - const clerk = createClerkClient({ secretKey: '...' }); - ``` - -### Patch Changes - -- Updated dependencies [[`896cb6104`](https://github.com/clerk/javascript/commit/896cb610409f84c0ff7a4f502f0b4ccee1afc157), [`02976d494`](https://github.com/clerk/javascript/commit/02976d49473958b8c3fea38d4e389dc1bee7e8c4), [`86d52fb5c`](https://github.com/clerk/javascript/commit/86d52fb5cf68f1dc7adf617605b922134e21268f), [`46040a2f3`](https://github.com/clerk/javascript/commit/46040a2f34d0991072fca490e031c1994b2e2296), [`75ea300bc`](https://github.com/clerk/javascript/commit/75ea300bce16a0ce401a225263bb267ad2a217b8)]: - - @clerk/shared@2.0.0-alpha-v5.6 - - @clerk/backend@1.0.0-alpha-v5.8 - -## 5.0.0-alpha-v5.7 - -### Major Changes - -- Limit TokenVerificationError exports to TokenVerificationError and TokenVerificationErrorReason ([#2189](https://github.com/clerk/javascript/pull/2189)) by [@tmilewski](https://github.com/tmilewski) - -### Minor Changes - -- Add missing `createdAt` param in `User#createUser()` of `@clerk/backend`. ([#2284](https://github.com/clerk/javascript/pull/2284)) by [@dimkl](https://github.com/dimkl) - - Fix `clerkClient.verifyToken()` signature to support a single `token: string` parameter. - -### Patch Changes - -- Updated dependencies [[`de6519daa`](https://github.com/clerk/javascript/commit/de6519daa84732023bcfd74ad816a2654f457952), [`7af0949ae`](https://github.com/clerk/javascript/commit/7af0949ae7b4072f550dee220f4d41854fe504c6), [`e1f7eae87`](https://github.com/clerk/javascript/commit/e1f7eae87531b483564256f5456a31150caa469e)]: - - @clerk/backend@1.0.0-alpha-v5.7 - -## 5.0.0-alpha-v5.6 - -### Patch Changes - -- Drop the introduction of `OrganizationRole` and `OrganizationPermission` resources fro BAPI. ([#2252](https://github.com/clerk/javascript/pull/2252)) by [@panteliselef](https://github.com/panteliselef) - -- Set correct information on required Node.js and React versions in README ([#2264](https://github.com/clerk/javascript/pull/2264)) by [@LekoArts](https://github.com/LekoArts) - -- Updated dependencies [[`93d05c868`](https://github.com/clerk/javascript/commit/93d05c8680ed213e594a16d4630a65f8eb244b32), [`a6b893d28`](https://github.com/clerk/javascript/commit/a6b893d281b23dc7b4bd7f3733b33e4cf655bc1b), [`2e77cd737`](https://github.com/clerk/javascript/commit/2e77cd737a333de022533d29cb12e73a907694c8), [`d30ea1faa`](https://github.com/clerk/javascript/commit/d30ea1faa45074e09c037530e8ba3ca2dbd50654)]: - - @clerk/backend@1.0.0-alpha-v5.6 - - @clerk/shared@2.0.0-alpha-v5.5 - -## 5.0.0-alpha-v5.5 - -### Patch Changes - -- Updated dependencies [[`4b8bedc66`](https://github.com/clerk/javascript/commit/4b8bedc66d47dca5c6192148f4b31ae6d49ff733), [`c776f86fb`](https://github.com/clerk/javascript/commit/c776f86fb2a999dcae46fda9abb5005718c354b2)]: - - @clerk/shared@2.0.0-alpha-v5.4 - - @clerk/backend@1.0.0-alpha-v5.5 - -## 5.0.0-alpha-v5.4 - -### Patch Changes - -- Updated dependencies [[`03079579d`](https://github.com/clerk/javascript/commit/03079579d2b48a9a6969702814449382098d2cfb), [`12962bc58`](https://github.com/clerk/javascript/commit/12962bc58e2c9caad416ba4e6d52061d00bc2feb)]: - - @clerk/backend@1.0.0-alpha-v5.4 - -## 5.0.0-alpha-v5.3 - -### Minor Changes - -- Breaking Changes: ([#2169](https://github.com/clerk/javascript/pull/2169)) by [@dimkl](https://github.com/dimkl) - - - Drop `isLegacyFrontendApiKey` from `@clerk/shared` - - Drop default exports from `@clerk/clerk-js` - - on headless Clerk type - - on ui and ui.retheme `Portal` - - Use `isProductionFromSecretKey` instead of `isProductionFromApiKey` - - Use `isDevelopmentFromSecretKey` instead of `isDevelopmentFromApiKey` - - Changes: - - - Rename `HeadlessBrowserClerkConstrutor` / `HeadlessBrowserClerkConstructor` (typo) - - Use `isomorphicAtob` / `isomorhpicBtoa` to replace `base-64` in `@clerk/expo` - - Refactor merging build-time and runtime props in `@clerk/backend` clerk client - - Drop `node-fetch` dependency from `@clerk/backend` - - Drop duplicate test in `@clerk/backend` - -### Patch Changes - -- Remove createSms functions from @clerk/backend and @clerk/sdk-node. ([#2165](https://github.com/clerk/javascript/pull/2165)) by [@Nikpolik](https://github.com/Nikpolik) - - The equivalent /sms_messages Backend API endpoint will also dropped in the future, since this feature will no longer be available for new instances. - - For a brief period it will still be accessible for instances that have used it in the past 7 - days (13-11-2023 to 20-11-2023). - - New instances will get a 403 forbidden response if they try to access it. - -- Add OrganizationPermissionAPI for CRUD operations regarding instance level organization permissions. ([#2178](https://github.com/clerk/javascript/pull/2178)) by [@panteliselef](https://github.com/panteliselef) - -- Introduces telemetry collection from Clerk's SDKs. Collected telemetry will be used to gain insights into product usage and help drive roadmap priority. For more information, see https://clerk.com/docs/telemetry. ([#2154](https://github.com/clerk/javascript/pull/2154)) by [@BRKalow](https://github.com/BRKalow) - -- Updated dependencies [[`b3a3dcdf4`](https://github.com/clerk/javascript/commit/b3a3dcdf4a8fa75c0dee4c55ab8fedebd49fdfd4), [`4aaf5103d`](https://github.com/clerk/javascript/commit/4aaf5103d3132f4e1ae76b861fa6ce0aae02ecbe), [`52ff8fe6b`](https://github.com/clerk/javascript/commit/52ff8fe6b6ff88ceb5e1246378b54b0565bede9d), [`4bb57057e`](https://github.com/clerk/javascript/commit/4bb57057e9af20fc433626ed178d97d3ca811362), [`4aaf5103d`](https://github.com/clerk/javascript/commit/4aaf5103d3132f4e1ae76b861fa6ce0aae02ecbe), [`0ce0edc28`](https://github.com/clerk/javascript/commit/0ce0edc283849a88b14b4b0df53b6858ed3a4f80), [`40ac4b645`](https://github.com/clerk/javascript/commit/40ac4b645f449b546dae5b4c0d013c9d9ea6d09c)]: - - @clerk/backend@1.0.0-alpha-v5.3 - - @clerk/shared@2.0.0-alpha-v5.3 - -## 5.0.0-alpha-v5.2 - -### Major Changes - -- Change the minimal Node.js version required by Clerk to `18.17.0`. ([#2162](https://github.com/clerk/javascript/pull/2162)) by [@dimkl](https://github.com/dimkl) - -### Patch Changes - -- Updated dependencies [[`c2a090513`](https://github.com/clerk/javascript/commit/c2a0905132684a4a1e8d598b66caddf20062273e)]: - - @clerk/backend@1.0.0-alpha-v5.2 - - @clerk/shared@2.0.0-alpha-v5.2 - -## 5.0.0-alpha-v5.1 - -### Major Changes - -- Drop default exports from all packages. Migration guide: ([#2150](https://github.com/clerk/javascript/pull/2150)) by [@dimkl](https://github.com/dimkl) - - - use `import { Clerk } from '@clerk/backend';` - - use `import { clerkInstance } from '@clerk/clerk-sdk-node';` - - use `import { Clerk } from '@clerk/clerk-sdk-node';` - - use `import { Clerk } from '@clerk/clerk-js';` - - use `import { Clerk } from '@clerk/clerk-js/headless';` - - use `import { IsomorphicClerk } from '@clerk/clerk-react'` - -- Change the response payload of Backend API requests to return `{ data, errors }` instead of return the data and throwing on error response. ([#2126](https://github.com/clerk/javascript/pull/2126)) by [@dimkl](https://github.com/dimkl) - - Code example to keep the same behavior: - - ```typescript - import { users } from '@clerk/backend'; - import { ClerkAPIResponseError } from '@clerk/shared/error'; - - const { data, errors, clerkTraceId, status, statusText } = await users.getUser('user_deadbeef'); - if (errors) { - throw new ClerkAPIResponseError(statusText, { data: errors, status, clerkTraceId }); - } - ``` - -- Drop deprecations. Migration steps: ([#2021](https://github.com/clerk/javascript/pull/2021)) by [@dimkl](https://github.com/dimkl) - - - use `CLERK_SECRET_KEY` instead of `CLERK_API_KEY` env variable - - use `secretKey` instead of `apiKey` - - use `CLERK_PUBLISHABLE_KEY` instead of `CLERK_FRONTEND_API` env variable - - use `publishableKey` instead of `frontendApi` - - drop Redwood hotfix (upgrade to latest version) - - use `createClerkClient` with options to create a new clerkClient instead of using - the following setters: - - `setClerkApiVersion` - - `setClerkHttpOptions` - - `setClerkServerApiUrl` - - `setClerkApiKey` - - use `@clerk/clerk-sdk-node` instead of `@clerk/clerk-sdk-node/{cjs|esm}/instance` - - Extra: - - - bundle only index.ts and instance.ts - -### Patch Changes - -- Updated dependencies [[`64d3763ec`](https://github.com/clerk/javascript/commit/64d3763ec73747ad04c4b47017195cf4114e150c), [`deac67c1c`](https://github.com/clerk/javascript/commit/deac67c1c40d6d3ccc3559746c0c31cc29a93b84), [`83e9d0846`](https://github.com/clerk/javascript/commit/83e9d08469e7c2840f06aa7d86831055e23f67a5), [`7f833da9e`](https://github.com/clerk/javascript/commit/7f833da9ebc1b2ec9c65513628c377d0584e5d72), [`492b8a7b1`](https://github.com/clerk/javascript/commit/492b8a7b12f14658a384566012e5807f0a171710), [`dd5703013`](https://github.com/clerk/javascript/commit/dd57030133fb8ce98681ff0bcad7e53ee826bb0e), [`9615e6cda`](https://github.com/clerk/javascript/commit/9615e6cda8fb1cbc3c2e464e6e891d56e245fac4), [`cace85374`](https://github.com/clerk/javascript/commit/cace85374cb0bb13578cf63fe1f3e6ee59f7f3c2), [`0d1052ac2`](https://github.com/clerk/javascript/commit/0d1052ac284b909786fd0e4744b02fcf4d1a8be6), [`5471c7e8d`](https://github.com/clerk/javascript/commit/5471c7e8dd0155348748fa90e5ae97093f59efe9), [`e0e79b4fe`](https://github.com/clerk/javascript/commit/e0e79b4fe47f64006718d547c898b9f67fe4d424), [`a6451aece`](https://github.com/clerk/javascript/commit/a6451aecef0bac578b295b524f1246dede3a7598)]: - - @clerk/shared@2.0.0-alpha-v5.1 - - @clerk/backend@1.0.0-alpha-v5.1 - -## 5.0.0-alpha-v5.0 - -### Major Changes - -- Internal update default apiUrl domain from clerk.dev to clerk.com ([#1878](https://github.com/clerk/javascript/pull/1878)) by [@dimkl](https://github.com/dimkl) - -- Dropping support for Node 14 and 16 as they both reached EOL status. The minimal Node.js version required by Clerk is `18.18.0` now. ([#1864](https://github.com/clerk/javascript/pull/1864)) by [@dimkl](https://github.com/dimkl) - -### Patch Changes - -- Introduce `isTruthy` helper to better cast environment variables to a boolean. Previously only the string `"true"` was checked, now `true`, `"true"`, `"1"`, and `1` will work. ([#2002](https://github.com/clerk/javascript/pull/2002)) by [@LekoArts](https://github.com/LekoArts) - -- Fix types of ClerkExpressWithAuth/ClerkExpressRequireAuth args ([#1968](https://github.com/clerk/javascript/pull/1968)) by [@dimkl](https://github.com/dimkl) - -- Updated dependencies [[`743c4d204`](https://github.com/clerk/javascript/commit/743c4d20423790b554e66923466081c0d3b0d9ed), [`791c49807`](https://github.com/clerk/javascript/commit/791c49807c3c9e19964cbf621c935d237caeecf3), [`a68eb3083`](https://github.com/clerk/javascript/commit/a68eb3083ff68459cd33098e2df190a5ba26c841), [`ef2325dcc`](https://github.com/clerk/javascript/commit/ef2325dcc18729e9ce9ee5823e9a963efa51dbc1), [`8b6b094b9`](https://github.com/clerk/javascript/commit/8b6b094b9c7d09eeae90f8bdfac44d53513aa63d), [`71663c568`](https://github.com/clerk/javascript/commit/71663c568926b1d60b97aa7ccc5298d05b618af2), [`90aa2ea9c`](https://github.com/clerk/javascript/commit/90aa2ea9c4675662cee581298b49bd76ec8f8850), [`a605335e1`](https://github.com/clerk/javascript/commit/a605335e1e6f37d9b02170282974b0e1406e3f98), [`97407d8aa`](https://github.com/clerk/javascript/commit/97407d8aa481007d3262fe7a0772dea901ce0a8c), [`c22cd5214`](https://github.com/clerk/javascript/commit/c22cd52147492ba25f3c07bdbe6bbc4eb49a5cf0), [`c7e6d00f5`](https://github.com/clerk/javascript/commit/c7e6d00f56e73df4ed87712e74ad9d5bcaca8924), [`97407d8aa`](https://github.com/clerk/javascript/commit/97407d8aa481007d3262fe7a0772dea901ce0a8c), [`7644b7472`](https://github.com/clerk/javascript/commit/7644b74726ba73e615a1256f9ff3fa03b0f8bc30), [`f5d55bb1f`](https://github.com/clerk/javascript/commit/f5d55bb1fc6a87303fb8bf461c3a917ae4da4005), [`6f755addd`](https://github.com/clerk/javascript/commit/6f755addd0886b9ff8b0d5dbe48e37470049acad)]: - - @clerk/shared@2.0.0-alpha-v5.0 - - @clerk/backend@1.0.0-alpha-v5.0 - -## 4.12.16 - -### Patch Changes - -- Publish packages with [npm provenance](https://docs.npmjs.com/generating-provenance-statements) enabled ([#1891](https://github.com/clerk/javascript/pull/1891)) by [@LekoArts](https://github.com/LekoArts) - -- Updated dependencies [[`3bf64107e`](https://github.com/clerk/javascript/commit/3bf64107e1d0f9fce55163276d157da7849a390f), [`52f8553d2`](https://github.com/clerk/javascript/commit/52f8553d22f9454ee1194fd162410db15da7a4be), [`92727eec3`](https://github.com/clerk/javascript/commit/92727eec39566278263ffa118a085493f964eb94), [`b09b66eec`](https://github.com/clerk/javascript/commit/b09b66eec6ed0fbf99d93cd6843826f19c911099), [`51861addf`](https://github.com/clerk/javascript/commit/51861addff911615035fdc74718a1deff3f5cd62), [`aa4cd7615`](https://github.com/clerk/javascript/commit/aa4cd761585b888706a36a6eed7436a8f0476dbf)]: - - @clerk/backend@0.31.3 - - @clerk/shared@1.0.0 - - @clerk/types@3.57.0 - -## 4.12.15 - -### Patch Changes - -- Updated dependencies [[`9ca215702`](https://github.com/clerk/javascript/commit/9ca215702d1b816217d2c06c812f7d653ec2da11)]: - - @clerk/types@3.56.1 - - @clerk/backend@0.31.2 - -## 4.12.14 - -### Patch Changes - -- Updated dependencies [[`35be8709d`](https://github.com/clerk/javascript/commit/35be8709d88f1d1eef043acdba4d49b07578c7b2), [`13e9dfbaa`](https://github.com/clerk/javascript/commit/13e9dfbaa5b7b7e72f63e4b8ecfc1c1918517cd8), [`e38488c92`](https://github.com/clerk/javascript/commit/e38488c929e437583296c34cde23f76218f78caf), [`a11f962bc`](https://github.com/clerk/javascript/commit/a11f962bcbcf225fb927122267de1e8f5faccf53), [`9b644d799`](https://github.com/clerk/javascript/commit/9b644d7991b8cba4b385e9443f87798cde5c9989), [`a9894b445`](https://github.com/clerk/javascript/commit/a9894b445bf1e463176b0442fb73c48f89d9fed8), [`834dadb36`](https://github.com/clerk/javascript/commit/834dadb36c30b2a8f052784de4ad1026b0083b4e), [`70f251007`](https://github.com/clerk/javascript/commit/70f2510074352206bbe7bdadf2c28ccf3c074c12), [`a46d6fe99`](https://github.com/clerk/javascript/commit/a46d6fe99bd9b80671b60347b4c35d558012200f)]: - - @clerk/types@3.56.0 - - @clerk/backend@0.31.1 - - @clerk/shared@0.24.5 - -## 4.12.13 - -### Patch Changes - -- Warn about environment variables deprecations: ([#1859](https://github.com/clerk/javascript/pull/1859)) by [@dimkl](https://github.com/dimkl) - - - `CLERK_API_KEY` - - `CLERK_FRONTEND_API` - - `NEXT_PUBLIC_CLERK_FRONTEND_API` - -- Avoid always showing `__unstable_options` deprecation warning in all applications and SDKs using `@clerk/clerk-sdk-node` ([#1858](https://github.com/clerk/javascript/pull/1858)) by [@dimkl](https://github.com/dimkl) - -- Avoid always showing deprecation warnings for `frontendApi` and `apiKey` in `@clerk/clerk-sdk-node` ([#1856](https://github.com/clerk/javascript/pull/1856)) by [@dimkl](https://github.com/dimkl) - -- Updated dependencies [[`977336f79`](https://github.com/clerk/javascript/commit/977336f793cd4ce5984f98dac3cedf9f5ec363f5), [`997b8e256`](https://github.com/clerk/javascript/commit/997b8e256c8f83d68d0ae4243c7ea5640573d1ae), [`91e9a55f4`](https://github.com/clerk/javascript/commit/91e9a55f4b9f1a8f8d843a788597026015ddeafd), [`c9b17f5a7`](https://github.com/clerk/javascript/commit/c9b17f5a72cb27786cfc7f1fb42be1233fb10d5c), [`91014880d`](https://github.com/clerk/javascript/commit/91014880df71c2618d0b1e513da4dd19ccd809e3), [`3848f8dbe`](https://github.com/clerk/javascript/commit/3848f8dbe094226c6062341405a32a9621042fd6), [`7f4d4b942`](https://github.com/clerk/javascript/commit/7f4d4b942e8834462cdc0976b106d9739c345f6b)]: - - @clerk/shared@0.24.4 - - @clerk/types@3.55.0 - - @clerk/backend@0.31.0 - -## 4.12.12 - -### Patch Changes - -- Updated dependencies [[`1e212c19d`](https://github.com/clerk/javascript/commit/1e212c19d1cbfbcf6bc6718f5aec0a3cb893b96f), [`1136c7c15`](https://github.com/clerk/javascript/commit/1136c7c15043ffe917b4918e9e33f55b496cd679), [`1136c7c15`](https://github.com/clerk/javascript/commit/1136c7c15043ffe917b4918e9e33f55b496cd679)]: - - @clerk/backend@0.30.3 - -## 4.12.11 - -### Patch Changes - -- Pins the internal dependency versions. This ensures that users installing our main framework SDKs will get consistent versions across all @clerk/ packages. ([#1798](https://github.com/clerk/javascript/pull/1798)) by [@BRKalow](https://github.com/BRKalow) - -- Updated dependencies [[`b59b6b75d`](https://github.com/clerk/javascript/commit/b59b6b75dc61bc4d7e61f7cca774f3731a2929b9), [`fed24f1bf`](https://github.com/clerk/javascript/commit/fed24f1bf3e2b8c3f3e3327178f77b57c391c62c), [`164f3aac7`](https://github.com/clerk/javascript/commit/164f3aac7928bc69301846130cc77986569d4e91), [`68259a2bb`](https://github.com/clerk/javascript/commit/68259a2bb8193befdde9101d4ec9bf305881d5e2), [`33e927c59`](https://github.com/clerk/javascript/commit/33e927c59fbf06436ff642ef9f846bd3b467e3e1), [`0636ff779`](https://github.com/clerk/javascript/commit/0636ff7799e126d1438d2738ce0e46c3b277f46a), [`9514618d6`](https://github.com/clerk/javascript/commit/9514618d65cfdde0ff011eabd41a992b61fc8dc1), [`bb2ec9373`](https://github.com/clerk/javascript/commit/bb2ec93738f92c89f008c6a275a986593816c4d3), [`c7c6912f3`](https://github.com/clerk/javascript/commit/c7c6912f34874467bc74104690fe9f95491cc10d), [`71bb1c7b5`](https://github.com/clerk/javascript/commit/71bb1c7b570f7b0bbc377c8104c9abcc1af4cacf)]: - - @clerk/types@3.54.0 - - @clerk/backend@0.30.2 - -## 4.12.10 - -### Patch Changes - -- Updated dependencies [[`cecf74d79`](https://github.com/clerk/javascript/commit/cecf74d79069662d25f73e4745aa01348d398afb)]: - - @clerk/backend@0.30.1 - -## 4.12.9 - -### Patch Changes - -- Updated dependencies [[`5c8754239`](https://github.com/clerk/javascript/commit/5c8754239e9ef13656fb73f30c9c6a6187b9aa81), [`2f6a6ac99`](https://github.com/clerk/javascript/commit/2f6a6ac9991469bf8532019bb22ff50adecdb434), [`94c36c755`](https://github.com/clerk/javascript/commit/94c36c755b598eb68d22f42eb7f738050f390678), [`7406afe7f`](https://github.com/clerk/javascript/commit/7406afe7f550f702bd91cde9616fd26222833a87)]: - - @clerk/types@3.53.0 - - @clerk/backend@0.30.0 - -## 4.12.8 - -### Patch Changes - -- Updated dependencies [[`c61ddf5bf`](https://github.com/clerk/javascript/commit/c61ddf5bf2664e38bbaba6572d421adac8a2eff7), [`0366e0b20`](https://github.com/clerk/javascript/commit/0366e0b208e9086896562af94f24cdbd401c702c)]: - - @clerk/types@3.52.1 - - @clerk/backend@0.29.3 - -## 4.12.7 - -### Patch Changes - -- Updated dependencies [[`40ea407ad`](https://github.com/clerk/javascript/commit/40ea407ad1042fee6871755f30de544200b1f0d8), [`378a903ac`](https://github.com/clerk/javascript/commit/378a903ac4dc12e6ee708de20f0d9a5aa758bd18), [`27b611e47`](https://github.com/clerk/javascript/commit/27b611e47e4f1ad86e8dff42cb02c98bdc6ff6bd), [`4d0d90238`](https://github.com/clerk/javascript/commit/4d0d9023895c13290d5578ece218c24348c540fc)]: - - @clerk/backend@0.29.2 - -## 4.12.6 - -### Patch Changes - -- Change `README` to include updated links to issue templates and update Discord link. ([#1750](https://github.com/clerk/javascript/pull/1750)) by [@LekoArts](https://github.com/LekoArts) - -- Updated dependencies [[`e99df0a0d`](https://github.com/clerk/javascript/commit/e99df0a0de8ab91e9de4d32dfab46ad562f510d3), [`4327b91f9`](https://github.com/clerk/javascript/commit/4327b91f9ed65b440afaa5f76a6231aeacd3541a), [`75be1d6b3`](https://github.com/clerk/javascript/commit/75be1d6b3d9bf7b5d71613b3f169a942b1d25e7e), [`01b024c57`](https://github.com/clerk/javascript/commit/01b024c57c80ae00d83801fe90b2992111dc1a68)]: - - @clerk/types@3.52.0 - - @clerk/backend@0.29.1 - -## 4.12.5 - -### Patch Changes - -- Updated dependencies [[`463ff84f5`](https://github.com/clerk/javascript/commit/463ff84f5bfb7114102ca6cb5a2ea2fce705164c), [`e6a388946`](https://github.com/clerk/javascript/commit/e6a38894640b6999b90ea44ef66acda34debe2c1), [`1426e5eb3`](https://github.com/clerk/javascript/commit/1426e5eb3730bb79e2ec5341fa4347d7fa957739)]: - - @clerk/types@3.51.0 - - @clerk/backend@0.29.0 - -## 4.12.4 - -### Patch Changes - -- Updated dependencies [[`975412ed5`](https://github.com/clerk/javascript/commit/975412ed5307ac81128c87289178bd1e6c2fb1af)]: - - @clerk/backend@0.28.1 - -## 4.12.3 - -### Patch Changes - -- Updated dependencies [[`96cc1921c`](https://github.com/clerk/javascript/commit/96cc1921cac20442f19510137ee0100df5f8a0f4), [`8d1e7d76d`](https://github.com/clerk/javascript/commit/8d1e7d76de40c0ecb367c6745094dd0a75f764b3), [`435d2cff5`](https://github.com/clerk/javascript/commit/435d2cff5dfc86c58690d3f0d843f567ac4f3c04), [`8873841fc`](https://github.com/clerk/javascript/commit/8873841fcbb96f31aaeb8a12a0ce1d90512986d4), [`0a5f632f8`](https://github.com/clerk/javascript/commit/0a5f632f83bb4dae4cc82718dc86b7df3a125a56), [`34da40a50`](https://github.com/clerk/javascript/commit/34da40a5035b37eb365c6cb273e25c4d3bcf7161), [`3158752c7`](https://github.com/clerk/javascript/commit/3158752c73b9266775f954d3adaf43c66ba8b2e8), [`8538cd0c1`](https://github.com/clerk/javascript/commit/8538cd0c1e2ee2e38bd11079735a2ffc6738f71b), [`a412a5014`](https://github.com/clerk/javascript/commit/a412a501426f5d7a32284fda47efe48a04b5d38e), [`4ea30e883`](https://github.com/clerk/javascript/commit/4ea30e883a4f5c19cdde3424bf02afa99e2bc86d), [`86de584dd`](https://github.com/clerk/javascript/commit/86de584ddf1c22ec99852b983a92386e5542613c), [`e02a1aff2`](https://github.com/clerk/javascript/commit/e02a1aff2d4b1478601a2e7b598d600ab3902169), [`09bfb793e`](https://github.com/clerk/javascript/commit/09bfb793ee54d50eb54ef4e3a5eb385ea2f2fb54), [`b2296d630`](https://github.com/clerk/javascript/commit/b2296d6304e1ca31a35450e0c67a12555c0142f9), [`52ce79108`](https://github.com/clerk/javascript/commit/52ce79108fb5cb4fc84bf4f2df3e3dc748ee4eb3), [`4764e40c7`](https://github.com/clerk/javascript/commit/4764e40c7e858803fc6379dec20fcf687dcaed64), [`1e117beec`](https://github.com/clerk/javascript/commit/1e117beeca53f27d8e9f58f2a724fbc8a7d54021), [`30fcdd51a`](https://github.com/clerk/javascript/commit/30fcdd51a98dea60da36f2b5152ea22405d2c4f2), [`89bc5de04`](https://github.com/clerk/javascript/commit/89bc5de04aafa9832d4d1b5f816af2340acd14d4)]: - - @clerk/types@3.50.0 - - @clerk/backend@0.28.0 - -## 4.12.2 - -### Patch Changes - -- Updated dependencies [[`ea95525a4`](https://github.com/clerk/javascript/commit/ea95525a423bcc89bc9e210c2d29c78e5a6c1210), [`24a46ae7e`](https://github.com/clerk/javascript/commit/24a46ae7e038b56197dc56a535c05e698c5bf249), [`d433b83b9`](https://github.com/clerk/javascript/commit/d433b83b92c61752917f62cc410a774813f38fd7), [`5e1a09df4`](https://github.com/clerk/javascript/commit/5e1a09df4e905ddd887d64c7e8cab10fb4beb3ec), [`876777cb1`](https://github.com/clerk/javascript/commit/876777cb14443917d8e0a04b363327d165ad5580), [`0a59e122d`](https://github.com/clerk/javascript/commit/0a59e122d12b672f111a43ef3897061bfd9bdb52)]: - - @clerk/backend@0.27.0 - - @clerk/types@3.49.0 - -## 4.12.1 - -### Patch Changes - -- Fix "invalid URL" issue when creating the isomorphicRequest ([#1516](https://github.com/clerk/javascript/pull/1516)) by [@dimkl](https://github.com/dimkl) - -## 4.12.0 - -### Minor Changes - -- Support hosting NextJs apps on non-Vercel platforms by constructing req.url using host-related headers instead of using on req.url directly. CLERK_TRUST_HOST is now enabled by default. ([#1492](https://github.com/clerk/javascript/pull/1492)) by [@dimkl](https://github.com/dimkl) - -### Patch Changes - -- Updated dependencies [[`6fa4768dc`](https://github.com/clerk/javascript/commit/6fa4768dc6b261026d6e75d84c9ade1f389fe0d3), [`4ff4b716f`](https://github.com/clerk/javascript/commit/4ff4b716fdb12b18182e506737afafc7dbc05604)]: - - @clerk/types@3.48.1 - - @clerk/backend@0.26.0 - -## 4.11.1 - -### Patch Changes - -- Updated dependencies [[`2a9d83280`](https://github.com/clerk/javascript/commit/2a9d8328011cb4c3e1a4c6c675cbd5a4edac4c5c)]: - - @clerk/types@3.48.0 - - @clerk/backend@0.25.1 - -## 4.11.0 - -### Minor Changes - -- Introduce `createIsomorphicRequest` in `@clerk/backend` ([#1393](https://github.com/clerk/javascript/pull/1393)) by [@anagstef](https://github.com/anagstef) - - This utility simplifies the `authenticateRequest` signature, and it makes it easier to integrate with more frameworks. - -### Patch Changes - -- Updated dependencies [[`16c3283ec`](https://github.com/clerk/javascript/commit/16c3283ec192cb7525312da5e718aa7cac8b8445), [`73c9c1d0e`](https://github.com/clerk/javascript/commit/73c9c1d0e3c5f102a515e1ddda01a0a441b40d5b), [`ae9fc247a`](https://github.com/clerk/javascript/commit/ae9fc247aca5bf8211cc8e021706325a010ce9d3), [`1a151e701`](https://github.com/clerk/javascript/commit/1a151e701da80f2d5b1ba1447d6fd5f8612a4bb8), [`e3036848d`](https://github.com/clerk/javascript/commit/e3036848d19a48935129aec2fe50003518a3aa53), [`fd692af79`](https://github.com/clerk/javascript/commit/fd692af791fe206724e38eff647b8562e72c3652), [`090bab66e`](https://github.com/clerk/javascript/commit/090bab66e295bff2358115d2cbd3ed0e603b5ff5), [`bb0d69b45`](https://github.com/clerk/javascript/commit/bb0d69b455fa5fd6ca5b1f45a0f242957521dfbb), [`592911196`](https://github.com/clerk/javascript/commit/5929111966811ac578019a9c1dda03b09eda72a8)]: - - @clerk/backend@0.25.0 - - @clerk/types@3.47.0 - -## 4.10.15 - -### Patch Changes - -- Load `jwtKey` from `CLERK_JWT_KEY` env variable ([#1443](https://github.com/clerk/javascript/pull/1443)) by [@dimkl](https://github.com/dimkl) - -- Updated dependencies [[`2ad7cf390`](https://github.com/clerk/javascript/commit/2ad7cf390ba84b8e767ed6fe136800e38356d79c), [`f0b044c47`](https://github.com/clerk/javascript/commit/f0b044c475546e96a5995ef16198e60e35e8098f)]: - - @clerk/backend@0.24.0 - -## 4.10.14 - -### Patch Changes - -- Make all 4 keys (legacy and new) optional in authenticateRequest params ([#1437](https://github.com/clerk/javascript/pull/1437)) by [@anagstef](https://github.com/anagstef) - -- Updated dependencies [[`3fee736c9`](https://github.com/clerk/javascript/commit/3fee736c993b0a8fd157d716890810d04e632962), [`ac4e47274`](https://github.com/clerk/javascript/commit/ac4e47274afc2ab3a55a78b388a14bed76600402), [`5957a3da6`](https://github.com/clerk/javascript/commit/5957a3da68cde3386c741812e2bc03b5519d00e0)]: - - @clerk/backend@0.23.7 - -## 4.10.13 - -### Patch Changes - -- Updated dependencies [[`30f8ad18a`](https://github.com/clerk/javascript/commit/30f8ad18a4f85ca2e3fda46e5c180b28bc8fb47c)]: - - @clerk/types@3.46.1 - - @clerk/backend@0.23.6 - -## 4.10.12 - -### Patch Changes - -- Updated dependencies [[`bfb3af28`](https://github.com/clerk/javascript/commit/bfb3af28eb69d47e31f2b846d1ecc309fd885704)]: - - @clerk/types@3.46.0 - - @clerk/backend@0.23.5 - -## 4.10.11 - -### Patch Changes - -- Simplify the signature of the low-level `authenticateRequest` helper. ([#1329](https://github.com/clerk/javascript/pull/1329)) by [@anagstef](https://github.com/anagstef) - - - One pair of legacy or new instance keys are required instead of all 4 of them in `authenticateRequest` - - `@clerk/backend` now can handle the `"Bearer "` prefix in Authorization header for better DX - - `host` parameter is now optional in `@clerk/backend` - -- Updated dependencies [[`11954816`](https://github.com/clerk/javascript/commit/119548164a1757b878027019c20a688d312b1cfd), [`de2347f9`](https://github.com/clerk/javascript/commit/de2347f9efaab4903787a905528a06551a9b7883), [`32148490`](https://github.com/clerk/javascript/commit/32148490b813028412af0467e342aa85227cb4d2)]: - - @clerk/types@3.45.0 - - @clerk/backend@0.23.4 - -## 4.10.10 - -### Patch Changes - -- Updated dependencies [[`17cc14ec`](https://github.com/clerk/javascript/commit/17cc14ec64ed292239ee782662171a4a8cbd9e87)]: - - @clerk/types@3.44.0 - - @clerk/backend@0.23.3 - -## 4.10.9 - -### Patch Changes - -- Fix ESM build issues ([#1377](https://github.com/clerk/javascript/pull/1377)) by [@nikosdouvlis](https://github.com/nikosdouvlis) - -## 4.10.8 - -### Patch Changes - -- Updated dependencies [[`9651658c`](https://github.com/clerk/javascript/commit/9651658c2ab00108ffcb9679cd119488c41ec521), [`4e1bb2bd`](https://github.com/clerk/javascript/commit/4e1bb2bd1f3cc933b1e8422849119e0aa16fdaa6)]: - - @clerk/types@3.43.0 - - @clerk/backend@0.23.2 - -## 4.10.7 - -### Patch Changes - -- Correctly display "Missing Clerk keys" error instead of simply throwing during initialization ([#1365](https://github.com/clerk/javascript/pull/1365)) by [@nikosdouvlis](https://github.com/nikosdouvlis) - -- Allow `clerkJSVersion` to be passed when loading interstitial. Support for ([#1354](https://github.com/clerk/javascript/pull/1354)) by [@panteliselef](https://github.com/panteliselef) - - - Nextjs - - Remix - - Node - -- Updated dependencies [[`b945c921`](https://github.com/clerk/javascript/commit/b945c92100454f00ff4b6b9c769201ca2ceaac93)]: - - @clerk/backend@0.23.1 - -## 4.10.6 - -### Patch Changes - -- Load env variables upon first usage of middlewares or clerkClient ([#1230](https://github.com/clerk/javascript/pull/1230)) by [@dimkl](https://github.com/dimkl) - -## 4.10.5 - -### Patch Changes - -- Support `audience` parameter in authentication request ([#1004](https://github.com/clerk/javascript/pull/1004)) by [@dimkl](https://github.com/dimkl) - - The audience parameter is used to verify the the aud claim in - the request matches the value of the parameter or is included - (when the user provides a list). - - Resolves: - - - [#978](https://github.com/clerk/javascript/pull/978) - - [#1004](https://github.com/clerk/javascript/pull/1004) - -- Updated dependencies [[`c42b4ac0`](https://github.com/clerk/javascript/commit/c42b4ac02d7ab7022a06b8f484e057999c6d7963), [`010484f4`](https://github.com/clerk/javascript/commit/010484f4978b9616e8c2ef50986eda742c4967bd)]: - - @clerk/types@3.42.0 - - @clerk/backend@0.23.0 - -## 4.10.4 - -### Patch Changes - -- Updated dependencies [[`b66ea0a5`](https://github.com/clerk/javascript/commit/b66ea0a5aea0d6801e03a1426a0db69921b7b0e3), [`b66ea0a5`](https://github.com/clerk/javascript/commit/b66ea0a5aea0d6801e03a1426a0db69921b7b0e3), [`b66ea0a5`](https://github.com/clerk/javascript/commit/b66ea0a5aea0d6801e03a1426a0db69921b7b0e3), [`b66ea0a5`](https://github.com/clerk/javascript/commit/b66ea0a5aea0d6801e03a1426a0db69921b7b0e3), [`b66ea0a5`](https://github.com/clerk/javascript/commit/b66ea0a5aea0d6801e03a1426a0db69921b7b0e3), [`b66ea0a5`](https://github.com/clerk/javascript/commit/b66ea0a5aea0d6801e03a1426a0db69921b7b0e3), [`b66ea0a5`](https://github.com/clerk/javascript/commit/b66ea0a5aea0d6801e03a1426a0db69921b7b0e3)]: - - @clerk/backend@0.22.0 - - @clerk/types@3.41.1 - -## [4.10.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.10.0-staging.2...@clerk/clerk-sdk-node@4.10.0) (2023-05-23) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.9.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.9.2-staging.1...@clerk/clerk-sdk-node@4.9.2) (2023-05-18) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.9.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.9.1-staging.1...@clerk/clerk-sdk-node@4.9.1) (2023-05-17) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -## [4.9.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.8.8-staging.3...@clerk/clerk-sdk-node@4.9.0) (2023-05-15) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.8.7](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.8.7-staging.4...@clerk/clerk-sdk-node@4.8.7) (2023-05-04) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.8.7-staging.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.8.7-staging.3...@clerk/clerk-sdk-node@4.8.7-staging.4) (2023-05-04) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.8.7-staging.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.8.7-staging.2...@clerk/clerk-sdk-node@4.8.7-staging.3) (2023-05-02) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.8.6](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.8.6-staging.0...@clerk/clerk-sdk-node@4.8.6) (2023-04-19) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.8.5](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.8.4...@clerk/clerk-sdk-node@4.8.5) (2023-04-19) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.8.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.8.4-staging.0...@clerk/clerk-sdk-node@4.8.4) (2023-04-12) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.8.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.8.3-staging.3...@clerk/clerk-sdk-node@4.8.3) (2023-04-11) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.8.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.8.2-staging.0...@clerk/clerk-sdk-node@4.8.2) (2023-04-06) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.8.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.8.1-staging.3...@clerk/clerk-sdk-node@4.8.1) (2023-03-31) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.8.1-staging.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.8.1-staging.0...@clerk/clerk-sdk-node@4.8.1-staging.1) (2023-03-31) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -## [4.8.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.8.0-staging.0...@clerk/clerk-sdk-node@4.8.0) (2023-03-29) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.7.11](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.11-staging.2...@clerk/clerk-sdk-node@4.7.11) (2023-03-10) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.7.10](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.10-staging.1...@clerk/clerk-sdk-node@4.7.10) (2023-03-09) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.7.9](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.9-staging.1...@clerk/clerk-sdk-node@4.7.9) (2023-03-07) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.7.8](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.8-staging.1...@clerk/clerk-sdk-node@4.7.8) (2023-03-03) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.7.7](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.7-staging.0...@clerk/clerk-sdk-node@4.7.7) (2023-03-01) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.7.6](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.6-staging.0...@clerk/clerk-sdk-node@4.7.6) (2023-02-25) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.7.5](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.5-staging.7...@clerk/clerk-sdk-node@4.7.5) (2023-02-24) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.7.5-staging.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.5-staging.3...@clerk/clerk-sdk-node@4.7.5-staging.4) (2023-02-22) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.7.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.4-staging.1...@clerk/clerk-sdk-node@4.7.4) (2023-02-17) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.7.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.3-staging.2...@clerk/clerk-sdk-node@4.7.3) (2023-02-15) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.7.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.2-staging.1...@clerk/clerk-sdk-node@4.7.2) (2023-02-10) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.7.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.1-staging.0...@clerk/clerk-sdk-node@4.7.1) (2023-02-07) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.7.1-staging.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.0-staging.1...@clerk/clerk-sdk-node@4.7.1-staging.0) (2023-02-07) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -## [4.7.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.7.0-staging.1...@clerk/clerk-sdk-node@4.7.0) (2023-02-07) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.6.5](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.6.5-staging.4...@clerk/clerk-sdk-node@4.6.5) (2023-02-01) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.6.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.6.4-staging.4...@clerk/clerk-sdk-node@4.6.4) (2023-01-27) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.6.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.6.3-staging.1...@clerk/clerk-sdk-node@4.6.3) (2023-01-24) - -### Bug Fixes - -- **backend,clerk-sdk-node,shared:** Drop support for NodeJS 12 ([d9169ab](https://github.com/clerk/javascript/commit/d9169ab4873e1745d7250628f5bf8c8f7da49421)) - -### [4.6.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.6.1...@clerk/clerk-sdk-node@4.6.2) (2023-01-20) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.6.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.6.1-staging.0...@clerk/clerk-sdk-node@4.6.1) (2023-01-18) - -### Bug Fixes - -- **clerk-sdk-node:** Remove unused jsonwebtoken dependency ([6af3d9e](https://github.com/clerk/javascript/commit/6af3d9ea7e2d47f07f65c1133e634986b048bf74)) - -## [4.6.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.6.0-staging.8...@clerk/clerk-sdk-node@4.6.0) (2023-01-17) - -### Bug Fixes - -- **backend,clerk-sdk-node,shared:** Support node12 runtimes ([fdcd6b3](https://github.com/clerk/javascript/commit/fdcd6b3f7c61490297a5fdfa80228cbb7787b49b)) - -### [4.5.14](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.14-staging.1...@clerk/clerk-sdk-node@4.5.14) (2022-12-19) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.5.13](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.13-staging.1...@clerk/clerk-sdk-node@4.5.13) (2022-12-13) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.5.12](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.11...@clerk/clerk-sdk-node@4.5.12) (2022-12-12) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.5.11](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.11-staging.1...@clerk/clerk-sdk-node@4.5.11) (2022-12-09) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.5.10](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.9...@clerk/clerk-sdk-node@4.5.10) (2022-12-08) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.5.9](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.9-staging.0...@clerk/clerk-sdk-node@4.5.9) (2022-12-08) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.5.8](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.8-staging.0...@clerk/clerk-sdk-node@4.5.8) (2022-12-02) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.5.7](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.7-staging.4...@clerk/clerk-sdk-node@4.5.7) (2022-11-30) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.5.7-staging.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.7-staging.3...@clerk/clerk-sdk-node@4.5.7-staging.4) (2022-11-29) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.5.6](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.6-staging.0...@clerk/clerk-sdk-node@4.5.6) (2022-11-25) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.5.5](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.5-staging.0...@clerk/clerk-sdk-node@4.5.5) (2022-11-25) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.5.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.3...@clerk/clerk-sdk-node@4.5.4) (2022-11-23) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.5.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.3-staging.2...@clerk/clerk-sdk-node@4.5.3) (2022-11-22) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.5.3-staging.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.3-staging.1...@clerk/clerk-sdk-node@4.5.3-staging.2) (2022-11-21) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.5.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.2-staging.1...@clerk/clerk-sdk-node@4.5.2) (2022-11-18) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.5.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.1-staging.3...@clerk/clerk-sdk-node@4.5.1) (2022-11-15) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -## [4.5.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.5.0-staging.1...@clerk/clerk-sdk-node@4.5.0) (2022-11-10) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.4.7](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.7-staging.2...@clerk/clerk-sdk-node@4.4.7) (2022-11-05) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.4.6](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.6-staging.7...@clerk/clerk-sdk-node@4.4.6) (2022-11-03) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.4.6-staging.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.6-staging.3...@clerk/clerk-sdk-node@4.4.6-staging.4) (2022-11-02) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.4.6-staging.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.6-staging.1...@clerk/clerk-sdk-node@4.4.6-staging.3) (2022-11-02) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.4.6-staging.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.6-staging.1...@clerk/clerk-sdk-node@4.4.6-staging.2) (2022-11-02) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.4.6-staging.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.5...@clerk/clerk-sdk-node@4.4.6-staging.1) (2022-11-02) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.4.5](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.5-staging.0...@clerk/clerk-sdk-node@4.4.5) (2022-10-24) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.4.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.3...@clerk/clerk-sdk-node@4.4.4) (2022-10-14) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.4.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.3-staging.2...@clerk/clerk-sdk-node@4.4.3) (2022-10-14) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.4.3-staging.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.2...@clerk/clerk-sdk-node@4.4.3-staging.1) (2022-10-13) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.4.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.2-staging.0...@clerk/clerk-sdk-node@4.4.2) (2022-10-07) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.4.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.1-staging.0...@clerk/clerk-sdk-node@4.4.1) (2022-10-05) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -## [4.4.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.4.0-staging.5...@clerk/clerk-sdk-node@4.4.0) (2022-10-03) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.3.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.3.3-staging.4...@clerk/clerk-sdk-node@4.3.3) (2022-09-29) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.3.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.3.1...@clerk/clerk-sdk-node@4.3.2) (2022-09-25) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.3.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.3.1-staging.1...@clerk/clerk-sdk-node@4.3.1) (2022-09-24) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -## [4.3.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.3.0-staging.0...@clerk/clerk-sdk-node@4.3.0) (2022-09-22) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.2.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.2.0-staging.4...@clerk/clerk-sdk-node@4.2.1) (2022-09-19) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -## [4.2.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.2.0-staging.4...@clerk/clerk-sdk-node@4.2.0) (2022-09-16) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.1.7](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.1.6...@clerk/clerk-sdk-node@4.1.7) (2022-09-08) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.1.6](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.1.6-staging.0...@clerk/clerk-sdk-node@4.1.6) (2022-09-07) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.1.5](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.1.5-staging.0...@clerk/clerk-sdk-node@4.1.5) (2022-09-07) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.1.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.1.3...@clerk/clerk-sdk-node@4.1.4) (2022-09-05) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.1.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.1.3-staging.0...@clerk/clerk-sdk-node@4.1.3) (2022-08-29) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.1.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.1.2-staging.3...@clerk/clerk-sdk-node@4.1.2) (2022-08-29) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.1.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.1.1-staging.0...@clerk/clerk-sdk-node@4.1.1) (2022-08-24) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -## [4.1.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.0.5...@clerk/clerk-sdk-node@4.1.0) (2022-08-18) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.0.5](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.0.4...@clerk/clerk-sdk-node@4.0.5) (2022-08-18) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.0.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.0.4-staging.0...@clerk/clerk-sdk-node@4.0.4) (2022-08-18) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.0.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.0.2...@clerk/clerk-sdk-node@4.0.3) (2022-08-16) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.0.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.0.2-staging.0...@clerk/clerk-sdk-node@4.0.2) (2022-08-09) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [4.0.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.0.0...@clerk/clerk-sdk-node@4.0.1) (2022-08-07) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -## [4.0.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@4.0.0-staging.1...@clerk/clerk-sdk-node@4.0.0) (2022-08-05) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.9.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.9.1...@clerk/clerk-sdk-node@3.9.2) (2022-08-05) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.9.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.9.0...@clerk/clerk-sdk-node@3.9.1) (2022-08-04) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -## [3.9.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.9.0-staging.0...@clerk/clerk-sdk-node@3.9.0) (2022-07-26) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.8.6](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.8.5...@clerk/clerk-sdk-node@3.8.6) (2022-07-13) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.8.5](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.8.4...@clerk/clerk-sdk-node@3.8.5) (2022-07-08) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.8.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.8.3...@clerk/clerk-sdk-node@3.8.4) (2022-07-07) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.8.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.8.2...@clerk/clerk-sdk-node@3.8.3) (2022-07-06) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.8.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.8.1...@clerk/clerk-sdk-node@3.8.2) (2022-07-04) - -### Bug Fixes - -- **backend-core,clerk-sdk-node:** Fix parsing issue and defensively check for errors body ([f2f6fe9](https://github.com/clerk/javascript/commit/f2f6fe9b093ff3a34ca31c4ff3179841a44355cf)) - -### [3.8.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.8.0...@clerk/clerk-sdk-node@3.8.1) (2022-07-01) - -### Bug Fixes - -- **clerk-sdk-node:** Temporarily disable exports test on release ([da3c5df](https://github.com/clerk/javascript/commit/da3c5df7e6bfc57133ea811d37f4da5b006cc3e7)) - -## [3.8.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.7.0...@clerk/clerk-sdk-node@3.8.0) (2022-07-01) - -### Features - -- **clerk-sdk-node:** Add module exports testing ([ad01d27](https://github.com/clerk/javascript/commit/ad01d27f6259c1938d4d27df01c9af0a01a34ebf)) - -## [3.7.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.6.2...@clerk/clerk-sdk-node@3.7.0) (2022-06-24) - -### Features - -- **types,backend-core:** Consolidate Clerk issued JWT claims under ClerkJWTClaims ([e6bc9fb](https://github.com/clerk/javascript/commit/e6bc9fb380d38d7f89cc2059e0211b0ad55bd1a5)) - -### Bug Fixes - -- **edge,nextjs,remix,clerk-sdk-node,types:** Correct SSR claims typing ([09c147c](https://github.com/clerk/javascript/commit/09c147c196c08e64794423f9eae791bfe453b858)) - -### [3.6.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.6.2-staging.0...@clerk/clerk-sdk-node@3.6.2) (2022-06-16) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.6.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.6.1-staging.3...@clerk/clerk-sdk-node@3.6.1) (2022-06-06) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.6.1-staging.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.6.1-staging.2...@clerk/clerk-sdk-node@3.6.1-staging.3) (2022-06-03) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.6.1-staging.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.6.1-staging.1...@clerk/clerk-sdk-node@3.6.1-staging.2) (2022-06-02) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.6.1-staging.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.6.1-staging.0...@clerk/clerk-sdk-node@3.6.1-staging.1) (2022-06-01) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -## [3.6.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.6.0-staging.4...@clerk/clerk-sdk-node@3.6.0) (2022-05-20) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -## [3.6.0-staging.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.6.0-staging.3...@clerk/clerk-sdk-node@3.6.0-staging.4) (2022-05-20) - -### Features - -- **backend-core:** New Resource class structure ([fd84550](https://github.com/clerk/javascript/commit/fd845509d70f67ed11bdfae998c9a727ab8c6a8d)) - -## [3.6.0-staging.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.6.0-staging.2...@clerk/clerk-sdk-node@3.6.0-staging.3) (2022-05-19) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -## [3.6.0-staging.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.5.0...@clerk/clerk-sdk-node@3.6.0-staging.2) (2022-05-18) - -### Features - -- **backend-core:** Retrieve instance organizations ([a24c4d3](https://github.com/clerk/javascript/commit/a24c4d3b1459d28cd7f950864d7347a8875d9c9c)) -- **clerk-sdk-node:** Export organization invitation ([07ac214](https://github.com/clerk/javascript/commit/07ac214ce8604859b359e073ae19e0d713650c22)) - -## [3.6.0-staging.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.5.0...@clerk/clerk-sdk-node@3.6.0-staging.1) (2022-05-17) - -### Features - -- **backend-core:** Retrieve instance organizations ([a24c4d3](https://github.com/clerk/javascript/commit/a24c4d3b1459d28cd7f950864d7347a8875d9c9c)) -- **clerk-sdk-node:** Export organization invitation ([07ac214](https://github.com/clerk/javascript/commit/07ac214ce8604859b359e073ae19e0d713650c22)) - -## [3.6.0-staging.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.5.0...@clerk/clerk-sdk-node@3.6.0-staging.0) (2022-05-16) - -### Features - -- **backend-core:** Retrieve instance organizations ([a24c4d3](https://github.com/clerk/javascript/commit/a24c4d3b1459d28cd7f950864d7347a8875d9c9c)) -- **clerk-sdk-node:** Export organization invitation ([07ac214](https://github.com/clerk/javascript/commit/07ac214ce8604859b359e073ae19e0d713650c22)) - -## [3.5.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.4.1...@clerk/clerk-sdk-node@3.5.0) (2022-05-13) - -### Features - -- **clerk-sdk-node:** Organizations operations ([339ecdb](https://github.com/clerk/javascript/commit/339ecdbf472df2930ecdddd440cee1b26b32c9bf)) - -### [3.4.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.4.1...@clerk/clerk-sdk-node@3.4.3) (2022-05-12) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.4.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.4.1...@clerk/clerk-sdk-node@3.4.2) (2022-05-12) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.4.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.4.1-staging.0...@clerk/clerk-sdk-node@3.4.1) (2022-05-11) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -## [3.4.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.11...@clerk/clerk-sdk-node@3.4.0) (2022-05-06) - -### Features - -- **nextjs,clerk-sdk-node,remix:** Add claims attribute to req.auth ([c695529](https://github.com/clerk/javascript/commit/c695529089f55baef72b86e3b73b8cd9f4f58e6d)) - -### [3.3.11](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.11-staging.0...@clerk/clerk-sdk-node@3.3.11) (2022-05-05) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.3.10](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.10-staging.0...@clerk/clerk-sdk-node@3.3.10) (2022-04-28) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.3.9](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.8...@clerk/clerk-sdk-node@3.3.9) (2022-04-27) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.3.8](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.7...@clerk/clerk-sdk-node@3.3.8) (2022-04-27) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.3.7](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.6...@clerk/clerk-sdk-node@3.3.7) (2022-04-22) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.3.6](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.6-staging.1...@clerk/clerk-sdk-node@3.3.6) (2022-04-19) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.3.6-staging.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.6-staging.0...@clerk/clerk-sdk-node@3.3.6-staging.1) (2022-04-19) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.3.5](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.5-alpha.0...@clerk/clerk-sdk-node@3.3.5) (2022-04-18) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.3.5-alpha.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.4...@clerk/clerk-sdk-node@3.3.5-alpha.0) (2022-04-15) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.3.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.3...@clerk/clerk-sdk-node@3.3.4) (2022-04-15) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.3.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.3-staging.0...@clerk/clerk-sdk-node@3.3.3) (2022-04-15) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.3.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.2-staging.0...@clerk/clerk-sdk-node@3.3.2) (2022-04-13) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.3.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.0...@clerk/clerk-sdk-node@3.3.1) (2022-04-07) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -## [3.3.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.3.0-staging.0...@clerk/clerk-sdk-node@3.3.0) (2022-04-04) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.2.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.2.4-staging.0...@clerk/clerk-sdk-node@3.2.4) (2022-03-29) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.2.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.2.3-staging.0...@clerk/clerk-sdk-node@3.2.3) (2022-03-28) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.2.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.2.2-alpha.0...@clerk/clerk-sdk-node@3.2.2) (2022-03-24) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [3.2.2-staging.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.2.2-staging.0...@clerk/clerk-sdk-node@3.2.2-staging.1) (2022-03-24) - -### Bug Fixes - -- **clerk-sdk-node:** Add ServerGetToken on AuthProp enhancers ([8af677c](https://github.com/clerk/javascript/commit/8af677c615488aa07f807e2cb0706fb210473e6b)) - -### [3.2.1-alpha.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.2.1-staging.0...@clerk/clerk-sdk-node@3.2.1-alpha.0) (2022-03-23) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -## [3.2.0-alpha.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.2.0-alpha.1...@clerk/clerk-sdk-node@3.2.0-alpha.2) (2022-03-23) - -### Features - -- **clerk-sdk-node,backend-core:** Add getCount method and correctly document UserListParams ([1a7a398](https://github.com/clerk/javascript/commit/1a7a398b2e881f8d3676d62725f3b67eec6d78b4)) - -## [3.2.0-alpha.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.1.0-alpha.1...@clerk/clerk-sdk-node@3.2.0-alpha.1) (2022-03-23) - -### Features - -- **backend-core,clerk-sdk-node,nextjs,remix:** Add injected jwtKey option ([53e56e7](https://github.com/clerk/javascript/commit/53e56e76d59984d4d3f5b7e1e2d276adb8b2dc77)) - -## [3.2.0-alpha.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.1.0-alpha.1...@clerk/clerk-sdk-node@3.2.0-alpha.0) (2022-03-22) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -## [3.1.0-alpha.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.1.0-alpha.0...@clerk/clerk-sdk-node@3.1.0-alpha.1) (2022-03-22) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -## [3.1.0-alpha.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.0.1-staging.0...@clerk/clerk-sdk-node@3.1.0-alpha.0) (2022-03-22) - -### Features - -- **clerk-sdk-node:** Add getToken to sdk-node `auth` ([445def1](https://github.com/clerk/javascript/commit/445def148eeaa731dc0b74428d0b9f078e8b9240)) -- **clerk-sdk-node:** Enable CLERK_JWT_KEY usage from clerk-sdk-node ([6151101](https://github.com/clerk/javascript/commit/61511019e123f7e9eaa9b44f35fa04ef643090be)) - -### [3.0.1-alpha.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.0.1-staging.0...@clerk/clerk-sdk-node@3.0.1-alpha.1) (2022-03-20) - -### Features - -- **clerk-sdk-node:** Add getToken to sdk-node `auth` ([445def1](https://github.com/clerk/javascript/commit/445def148eeaa731dc0b74428d0b9f078e8b9240)) - -### [3.0.1-alpha.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@3.0.1-staging.0...@clerk/clerk-sdk-node@3.0.1-alpha.0) (2022-03-19) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [2.9.10](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.9...@clerk/clerk-sdk-node@2.9.10) (2022-03-14) - -### Bug Fixes - -- **clerk-sdk-node:** Properly stringify metadata params in InvitationsAPI ([5fde7cb](https://github.com/clerk/javascript/commit/5fde7cbfe2f439d7531a937651351f29523b0dd7)) - -### [2.9.9-alpha.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.8...@clerk/clerk-sdk-node@2.9.9-alpha.0) (2022-03-11) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [2.9.9](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.8...@clerk/clerk-sdk-node@2.9.9) (2022-03-11) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [2.9.8](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.7...@clerk/clerk-sdk-node@2.9.8) (2022-03-09) - -### Bug Fixes - -- **clerk-sdk-node:** Correct initialization params override on custom instance ([4feb7eb](https://github.com/clerk/javascript/commit/4feb7eb8be87b2a03c6f5cdd1499982ce7020961)) - -### [2.9.7](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.7-staging.0...@clerk/clerk-sdk-node@2.9.7) (2022-03-09) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [2.9.6](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.5...@clerk/clerk-sdk-node@2.9.6) (2022-03-04) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [2.9.5](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.4...@clerk/clerk-sdk-node@2.9.5) (2022-03-04) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [2.9.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.4-staging.0...@clerk/clerk-sdk-node@2.9.4) (2022-02-24) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [2.9.4-staging.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.3...@clerk/clerk-sdk-node@2.9.4-staging.0) (2022-02-17) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [2.9.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.2...@clerk/clerk-sdk-node@2.9.3) (2022-02-16) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [2.9.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.1...@clerk/clerk-sdk-node@2.9.2) (2022-02-16) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [2.9.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.1-staging.0...@clerk/clerk-sdk-node@2.9.1) (2022-02-14) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [2.9.1-staging.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.9.0...@clerk/clerk-sdk-node@2.9.1-staging.0) (2022-02-11) - -### Features - -- **clerk-sdk-node:** Deprecate Session named middleware, introduce withAuth, requireAuth ([4e69553](https://github.com/clerk/javascript/commit/4e695535e41fe7c135cbf303a0d021e7b7d30f7d)) - -## [2.9.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.8.1...@clerk/clerk-sdk-node@2.9.0) (2022-02-04) - -### Features - -- **clerk-sdk-node:** Add custom header X-Clerk-SDK in request for SDK version ([84986d8](https://github.com/clerk/javascript/commit/84986d8522c00da3671a19dec7b914f99c3cc133)) - -### [2.8.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.8.0...@clerk/clerk-sdk-node@2.8.1) (2022-02-03) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -## [2.8.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.7.5...@clerk/clerk-sdk-node@2.8.0) (2022-02-02) - -### Features - -- **backend-core,clerk-sdk-node,edge:** Add support to verify azp session token claim ([eab1c8c](https://github.com/clerk/javascript/commit/eab1c8c8a43960fee2da9c10a52c3915cd37f45c)) - -### [2.7.5](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.7.4...@clerk/clerk-sdk-node@2.7.5) (2022-01-28) - -### Bug Fixes - -- **clerk-sdk-node:** Restore the setClerkHttpOptions capability ([ff9f518](https://github.com/clerk/javascript/commit/ff9f51860895033f5fe8a4fc12a18b0b204ad472)) - -### [2.7.4](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.7.3...@clerk/clerk-sdk-node@2.7.4) (2022-01-26) - -### Reverts - -- Revert "chore(release): Publish" ([df705e0](https://github.com/clerk/javascript/commit/df705e011f025e044c61aad2983e90afd94d5662)) - -### [2.7.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.7.2...@clerk/clerk-sdk-node@2.7.3) (2022-01-25) - -### Bug Fixes - -- **clerk-sdk-node:** Correctly pass responseType on got options for interstitial logic ([6fd58bb](https://github.com/clerk/javascript/commit/6fd58bb31083fd28bba06b7224e1d5f30df68bbb)) - -### Reverts - -- Revert "chore(release): Publish" ([df705e0](https://github.com/clerk/javascript/commit/df705e011f025e044c61aad2983e90afd94d5662)) - -### [2.7.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.7.1...@clerk/clerk-sdk-node@2.7.2) (2022-01-20) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -### [2.7.1](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.7.0...@clerk/clerk-sdk-node@2.7.1) (2022-01-20) - -### Bug Fixes - -- **clerk-sdk-node:** Restore verifyToken utility ([e22ef8a](https://github.com/clerk/javascript/commit/e22ef8aa3f4db1e14391f88bb924a82f6b17ba6a)) - -## [2.7.0](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.7.0-alpha.3...@clerk/clerk-sdk-node@2.7.0) (2022-01-20) - -**Note:** Version bump only for package @clerk/clerk-sdk-node - -## [2.7.0-alpha.3](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.7.0-alpha.2...@clerk/clerk-sdk-node@2.7.0-alpha.3) (2022-01-20) - -### Bug Fixes - -- **backend-core:** Fix build issue ([2b60c40](https://github.com/clerk/javascript/commit/2b60c409fc450c77aa9585e96131de11f5924f50)) - -## [2.7.0-alpha.2](https://github.com/clerk/javascript/compare/@clerk/clerk-sdk-node@2.7.0-alpha.1...@clerk/clerk-sdk-node@2.7.0-alpha.2) (2022-01-20) - -### Bug Fixes - -- **backend-core:** Add Readme links ([12509e3](https://github.com/clerk/javascript/commit/12509e32f6da37902cce94949459edffa4a63718)) - -## 2.7.0-alpha.1 (2022-01-20) - -### Features - -- Add injectable loadCryptoKeyFunction ([637b854](https://github.com/clerk/javascript/commit/637b8547447bdfb5f1cac8718d007e665b433f70)) -- Consistent imports rule ([fb81176](https://github.com/clerk/javascript/commit/fb81176b9db0a95a84d19f61e15a9c65a12fc98e)) -- npm workspaces and lerna setup ([cfbfebf](https://github.com/clerk/javascript/commit/cfbfebfd0d5f88a96b4715e4be52bff7f37cc3db)) -- SDK Node resource and APIs from @clerk/backend-core ([6a32317](https://github.com/clerk/javascript/commit/6a323175f9361c32192a4a6be4139b88945a857c)) -- Update READMEs, API reference for @clerk/backend-core, minor fixes ([529c2f6](https://github.com/clerk/javascript/commit/529c2f629ec02895f9f049d29b5775f16ef5c6e9)) - -### Bug Fixes - -- **backend-core:** Fix cross-origin detection algorithm ([fd99eae](https://github.com/clerk/javascript/commit/fd99eae111469c5d0028fd46b8bcbf1c5a8325b0)) -- **clerk-sdk-node:** Correctly apply body deserialization ([fefc084](https://github.com/clerk/javascript/commit/fefc084a3680c071a62dfe573cd5e6e2d5d769f3)) -- **clerk-sdk-node:** Fix string minor typing ([219c1a1](https://github.com/clerk/javascript/commit/219c1a1b9c4cf49cc02c132986db5f08088fafdd)) -- **clerk-sdk-node:** Fix version file ([88b4897](https://github.com/clerk/javascript/commit/88b4897d74a30cb67b0e39c72eac9e263030f3b2)) -- **clerk-sdk-node:** Properly import key from jwk ([e982fd0](https://github.com/clerk/javascript/commit/e982fd07bfd3354c108efc14775d03087e816651)) -- Remove coverage folder ([e009e7d](https://github.com/clerk/javascript/commit/e009e7d794db052cbf74433fb0cf01203cecce4d)) - -## 2.7.0-alpha.0 (2022-01-20) - -### Features - -- Add injectable loadCryptoKeyFunction ([637b854](https://github.com/clerk/clerk-sdk-node/commit/637b8547447bdfb5f1cac8718d007e665b433f70)) -- Consistent imports rule ([fb81176](https://github.com/clerk/clerk-sdk-node/commit/fb81176b9db0a95a84d19f61e15a9c65a12fc98e)) -- npm workspaces and lerna setup ([cfbfebf](https://github.com/clerk/clerk-sdk-node/commit/cfbfebfd0d5f88a96b4715e4be52bff7f37cc3db)) -- SDK Node resource and APIs from @clerk/backend-core ([6a32317](https://github.com/clerk/clerk-sdk-node/commit/6a323175f9361c32192a4a6be4139b88945a857c)) -- Update READMEs, API reference for @clerk/backend-core, minor fixes ([529c2f6](https://github.com/clerk/clerk-sdk-node/commit/529c2f629ec02895f9f049d29b5775f16ef5c6e9)) - -### Bug Fixes - -- **clerk-sdk-node:** Correctly apply body deserialization ([fefc084](https://github.com/clerk/clerk-sdk-node/commit/fefc084a3680c071a62dfe573cd5e6e2d5d769f3)) -- **clerk-sdk-node:** Fix string minor typing ([219c1a1](https://github.com/clerk/clerk-sdk-node/commit/219c1a1b9c4cf49cc02c132986db5f08088fafdd)) -- **clerk-sdk-node:** Fix version file ([88b4897](https://github.com/clerk/clerk-sdk-node/commit/88b4897d74a30cb67b0e39c72eac9e263030f3b2)) -- **clerk-sdk-node:** Properly import key from jwk ([e982fd0](https://github.com/clerk/clerk-sdk-node/commit/e982fd07bfd3354c108efc14775d03087e816651)) -- Remove coverage folder ([e009e7d](https://github.com/clerk/clerk-sdk-node/commit/e009e7d794db052cbf74433fb0cf01203cecce4d)) - -## 2.6.3 (2022-01-20) - -### Features - -- Switch repo from [https://github.com/clerk/clerk-sdk-node/](https://github.com/clerk/clerk-sdk-node/) 🎊 diff --git a/packages/express/README.md b/packages/express/README.md index 810f369bf72..fb6b56a26e7 100644 --- a/packages/express/README.md +++ b/packages/express/README.md @@ -40,6 +40,7 @@ the ; +let clerkClientSingleton = {} as unknown as ClerkClient; export const clerkClient = new Proxy(clerkClientSingleton, { - get(_target, property: string) { - const hasBeenInitialised = !!clerkClientSingleton.authenticateRequest; - if (hasBeenInitialised) { - // @ts-expect-error - Element implicitly has an 'any' type because expression of type 'string | symbol' can't be used to index type 'ExtendedClerk'. + get(_target, property: keyof ClerkClient) { + if (property in clerkClientSingleton) { return clerkClientSingleton[property]; } const env = { ...loadApiEnv(), ...loadClientEnv() }; + const client = createClerkClient({ ...env, userAgent: `${PACKAGE_NAME}@${PACKAGE_VERSION}` }); + + // if the client is initialized properly, cache it to a singleton instance variable + // in the next invocation the guard at the top will be triggered instead of creating another instance if (env.secretKey) { - clerkClientSingleton = createClerkClient({ ...env, userAgent: `${PACKAGE_NAME}@${PACKAGE_VERSION}` }); - // @ts-expect-error - Element implicitly has an 'any' type because expression of type 'string | symbol' can't be used to index type 'ExtendedClerk'. - return clerkClientSingleton[property]; + clerkClientSingleton = client; } - const c = createClerkClient({ ...env, userAgent: `${PACKAGE_NAME}@${PACKAGE_VERSION}` }); - // @ts-expect-error - Element implicitly has an 'any' type because expression of type 'string | symbol' can't be used to index type 'ExtendedClerk'. - return c[property]; + return client[property]; }, set() { return false; diff --git a/packages/express/src/clerkMiddleware.ts b/packages/express/src/clerkMiddleware.ts index de2f1015e97..b6a978d6062 100644 --- a/packages/express/src/clerkMiddleware.ts +++ b/packages/express/src/clerkMiddleware.ts @@ -19,6 +19,7 @@ export const clerkMiddleware: ClerkMiddleware = (...args: unknown[]): RequestHan const shouldInitializeClerkClient = Object.keys(options).length > 0; const clerkClient = shouldInitializeClerkClient ? createClerkClient(options) : defaultClerkClient; + // eslint-disable-next-line @typescript-eslint/no-misused-promises const middleware: RequestHandler = async (request, response, next) => { const requestState = await authenticateRequest({ clerkClient, diff --git a/packages/express/src/errors.ts b/packages/express/src/errors.ts index 8a1303f4db8..661351d39c7 100644 --- a/packages/express/src/errors.ts +++ b/packages/express/src/errors.ts @@ -7,8 +7,7 @@ const createErrorMessage = (msg: string) => { `; }; -export const middlewareRequired = - createErrorMessage(`The "clerkMiddleware" should be registered before using the "getAuth". +export const middlewareRequired = createErrorMessage(`The "clerkMiddleware" should be registered before using "getAuth". Example: import express from 'express'; diff --git a/packages/express/src/getAuth.ts b/packages/express/src/getAuth.ts index dbe0e02f67b..1c880c1b678 100644 --- a/packages/express/src/getAuth.ts +++ b/packages/express/src/getAuth.ts @@ -4,6 +4,13 @@ import type { Request as ExpressRequest } from 'express'; import { middlewareRequired } from './errors'; import { isAuthInRequest } from './utils'; +/** + * Retrieves the Clerk AuthObject using the current request object. + * + * @param {ExpressRequest} req - The current request object. + * @returns {AuthObject} Object with information about the request state and claims. + * @throws {Error} `clerkMiddleware` is required to be set in the middleware chain before this util is used. + */ export const getAuth = (req: ExpressRequest): AuthObject => { if (!isAuthInRequest(req)) { throw new Error(middlewareRequired); diff --git a/packages/express/src/protect.ts b/packages/express/src/protect.ts index f6f0579f3ec..f9838ba1039 100644 --- a/packages/express/src/protect.ts +++ b/packages/express/src/protect.ts @@ -1,12 +1,15 @@ import type { RequestHandler } from 'express'; -import { middlewareRequired } from './errors'; -import { defaultHandler, isAuthInRequest } from './utils'; +import { getAuth } from './getAuth'; +import { defaultHandler } from './utils'; /** + * Middleware to protect requests for user authenticated or authorized requests. + * An HTTP 401 status code is returned for unauthenticated requests and it can receive + * a RequestHandler argument to support authorization checks (as shown in the 2nd example). + * * @example * router.get('/path', protect(), getHandler) - * * @example * hasPermission = (request, response, next) => { const auth = getAuth(request); @@ -17,13 +20,12 @@ import { defaultHandler, isAuthInRequest } from './utils'; return next(); } * router.get('/path', protect(hasPermission), getHandler) + * + * @throws {Error} `clerkMiddleware` is required to be set in the middleware chain before this util is used. */ export const protect = (handler?: RequestHandler): RequestHandler[] => { const protectMiddleware: RequestHandler = (request, response, next) => { - if (!isAuthInRequest(request)) { - throw new Error(middlewareRequired); - } - if (!request.auth.userId) { + if (!getAuth(request).userId) { response.status(401).send('Unauthorized'); return; } diff --git a/packages/express/src/types.ts b/packages/express/src/types.ts index e0f5adf4dfe..477f8db8aec 100644 --- a/packages/express/src/types.ts +++ b/packages/express/src/types.ts @@ -9,7 +9,7 @@ export type ClerkMiddlewareOptions = AuthenticateRequestOptions & { debug?: bool /** * Middleware for Express that handles authentication and authorization with Clerk. - * For more details, please refer to the docs: TODO(express): add documentation link here + * For more details, please refer to the docs: https://beta.clerk.com/docs/backend-requests/handling/express */ export interface ClerkMiddleware { /** From ad12fbd1612ecace00c65ee2ca7d0acf0f74be8a Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Thu, 14 Mar 2024 05:04:46 +0200 Subject: [PATCH 03/16] chore(express,clerk-sdk-node): Cleanup unused deps and files --- package-lock.json | 52 ++------------------- packages/express/README.md | 2 +- packages/express/jest.config.js | 4 +- packages/express/package.json | 11 ++--- packages/express/tsconfig.declarations.json | 12 ----- packages/express/tsconfig.lint.json | 5 -- packages/express/turbo.json | 9 ---- packages/sdk-node/package.json | 2 - 8 files changed, 10 insertions(+), 87 deletions(-) delete mode 100644 packages/express/tsconfig.declarations.json delete mode 100644 packages/express/tsconfig.lint.json diff --git a/package-lock.json b/package-lock.json index bb01add69d4..9e3107b33ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13915,6 +13915,7 @@ }, "node_modules/camelcase-keys": { "version": "6.2.2", + "dev": true, "license": "MIT", "dependencies": { "camelcase": "^5.3.1", @@ -13930,6 +13931,7 @@ }, "node_modules/camelcase-keys/node_modules/camelcase": { "version": "5.3.1", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -30647,6 +30649,7 @@ }, "node_modules/quick-lru": { "version": "4.0.1", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -34409,10 +34412,6 @@ "node": ">=4" } }, - "node_modules/to-no-case": { - "version": "1.0.2", - "license": "MIT" - }, "node_modules/to-regex-range": { "version": "5.0.1", "license": "MIT", @@ -34423,20 +34422,6 @@ "node": ">=8.0" } }, - "node_modules/to-snake-case": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "to-space-case": "^1.0.0" - } - }, - "node_modules/to-space-case": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "to-no-case": "^1.0.0" - } - }, "node_modules/toggle-selection": { "version": "1.0.6", "license": "MIT" @@ -38219,13 +38204,11 @@ }, "packages/express": { "name": "@clerk/express", - "version": "0.0.1", + "version": "1.0.0", "license": "MIT", "dependencies": { "@clerk/backend": "1.0.0-beta.25", "@clerk/shared": "2.0.0-beta.17", - "camelcase-keys": "6.2.2", - "snakecase-keys": "3.2.1", "tslib": "2.4.1" }, "devDependencies": { @@ -38233,9 +38216,6 @@ "@types/express": "4.17.14", "@types/node": "^18.17.0", "eslint-config-custom": "*", - "nock": "^13.0.7", - "npm-run-all": "^4.1.5", - "prettier": "^2.5.0", "tsup": "*", "typescript": "*" }, @@ -38310,17 +38290,6 @@ "dev": true, "license": "MIT" }, - "packages/express/node_modules/snakecase-keys": { - "version": "3.2.1", - "license": "MIT", - "dependencies": { - "map-obj": "^4.1.0", - "to-snake-case": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, "packages/express/node_modules/tslib": { "version": "2.4.1", "license": "0BSD" @@ -38587,8 +38556,6 @@ "dependencies": { "@clerk/backend": "1.0.0-beta.32", "@clerk/shared": "2.0.0-beta.21", - "camelcase-keys": "6.2.2", - "snakecase-keys": "3.2.1", "tslib": "2.4.1" }, "devDependencies": { @@ -38606,17 +38573,6 @@ "node": ">=18.17.0" } }, - "packages/sdk-node/node_modules/snakecase-keys": { - "version": "3.2.1", - "license": "MIT", - "dependencies": { - "map-obj": "^4.1.0", - "to-snake-case": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, "packages/sdk-node/node_modules/tslib": { "version": "2.4.1", "license": "0BSD" diff --git a/packages/express/README.md b/packages/express/README.md index fb6b56a26e7..197fc3cd370 100644 --- a/packages/express/README.md +++ b/packages/express/README.md @@ -16,7 +16,7 @@ [![Clerk documentation](https://img.shields.io/badge/documentation-clerk-green.svg)](https://clerk.com/docs?utm_source=github&utm_medium=express) [![Follow on Twitter](https://img.shields.io/twitter/follow/ClerkDev?style=social)](https://twitter.com/intent/follow?screen_name=ClerkDev) -[Changelog](https://github.com/clerk/javascript/blob/main/packages/sdk-node/CHANGELOG.md) +[Changelog](https://github.com/clerk/javascript/blob/main/packages/express/CHANGELOG.md) · [Report a Bug](https://github.com/clerk/javascript/issues/new?assignees=&labels=needs-triage&projects=&template=BUG_REPORT.yml) · diff --git a/packages/express/jest.config.js b/packages/express/jest.config.js index 71f3e092d0a..3e6ddd05b0c 100644 --- a/packages/express/jest.config.js +++ b/packages/express/jest.config.js @@ -7,11 +7,11 @@ module.exports = { PACKAGE_VERSION: '0.0.0-test', }, roots: ['/src'], - testMatch: ['**/?(*.)+(spec|test).+(ts|tsx|js)'], + testMatch: ['**/?(*.)+(test).+(ts)'], transform: { '^.+\\.ts$': 'ts-jest', }, setupFiles: ['/jest.setup.js'], collectCoverage: true, - testPathIgnorePatterns: ['/node_modules/', '/coverage', '/.turbo', '/dist/', '/examples'], + testPathIgnorePatterns: ['/node_modules/', '/coverage', '/dist/'], }; diff --git a/packages/express/package.json b/packages/express/package.json index b2737744478..63bf88a4925 100644 --- a/packages/express/package.json +++ b/packages/express/package.json @@ -41,13 +41,13 @@ ], "scripts": { "build": "npm run clean && tsup", + "clean": "rimraf ./dist", "dev": "tsup --watch", "dev:publish": "npm run dev -- --env.publish", - "publish:local": "npx yalc push --replace --sig", - "clean": "rimraf ./dist", "lint": "eslint src/", - "lint:publint": "publint", "lint:attw": "attw --pack .", + "lint:publint": "publint", + "publish:local": "npx yalc push --replace --sig", "test": "jest", "test:cache:clear": "jest --clearCache --useStderr", "test:ci": "jest --maxWorkers=70%" @@ -55,8 +55,6 @@ "dependencies": { "@clerk/backend": "1.0.0-beta.25", "@clerk/shared": "2.0.0-beta.17", - "camelcase-keys": "6.2.2", - "snakecase-keys": "3.2.1", "tslib": "2.4.1" }, "devDependencies": { @@ -64,9 +62,6 @@ "@types/express": "4.17.14", "@types/node": "^18.17.0", "eslint-config-custom": "*", - "nock": "^13.0.7", - "npm-run-all": "^4.1.5", - "prettier": "^2.5.0", "tsup": "*", "typescript": "*" }, diff --git a/packages/express/tsconfig.declarations.json b/packages/express/tsconfig.declarations.json deleted file mode 100644 index c42a5efd18e..00000000000 --- a/packages/express/tsconfig.declarations.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "skipLibCheck": true, - "noEmit": false, - "declaration": true, - "emitDeclarationOnly": true, - "declarationMap": true, - "sourceMap": false, - "declarationDir": "./dist/types" - } -} diff --git a/packages/express/tsconfig.lint.json b/packages/express/tsconfig.lint.json deleted file mode 100644 index 9b624091911..00000000000 --- a/packages/express/tsconfig.lint.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src"], - "exclude": ["node_modules"] -} diff --git a/packages/express/turbo.json b/packages/express/turbo.json index ecf7ee4b7f0..258eb4d8b2f 100644 --- a/packages/express/turbo.json +++ b/packages/express/turbo.json @@ -5,22 +5,13 @@ "inputs": [ "*.d.ts", "**/package.json", - "cjs/**", - "esm/**", "src/**", - "scripts/**", "tsconfig.json", - "tsconfig.declarations.json", "tsup.config.ts", - "!**/**/*.test.*", - "!**/test/**", - "!**/tests/**", "!**/__tests__/**", - "!**/__mocks__/**", "!**/__snapshots__/**", "!coverage/**", - "!examples/**", "!node_modules/**" ] } diff --git a/packages/sdk-node/package.json b/packages/sdk-node/package.json index ce726c1f54a..05b207ac3a7 100644 --- a/packages/sdk-node/package.json +++ b/packages/sdk-node/package.json @@ -55,8 +55,6 @@ "dependencies": { "@clerk/backend": "1.0.0-beta.32", "@clerk/shared": "2.0.0-beta.21", - "camelcase-keys": "6.2.2", - "snakecase-keys": "3.2.1", "tslib": "2.4.1" }, "devDependencies": { From 7f16b14b847dc757d9bc2b2df76d0a2e77b56b8d Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Mon, 11 Mar 2024 19:34:53 +0200 Subject: [PATCH 04/16] Update packages/express/README.md Co-authored-by: Lennart --- packages/express/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/express/README.md b/packages/express/README.md index 197fc3cd370..858dab2be7f 100644 --- a/packages/express/README.md +++ b/packages/express/README.md @@ -32,8 +32,8 @@ -[Clerk](https://clerk.com?utm_source=github&utm_medium=express) is the easiest way to add authentication and user management to your Node.js application. To gain a better understanding of the Clerk Backend API and SDK, refer to -the Node SDK and Backend API documentation. +[Clerk](https://clerk.com?utm_source=github&utm_medium=express) is the easiest way to add authentication and user management to your Node.js application. To gain a better understanding of the Express SDK and Clerk Backend API, refer to +the Express SDK and Backend API documentation. ## Getting started From 04a980f143188a845865728aa26608ea6b58dafe Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Mon, 11 Mar 2024 19:34:38 +0200 Subject: [PATCH 05/16] Update packages/express/LICENSE Co-authored-by: Lennart --- packages/express/LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/express/LICENSE b/packages/express/LICENSE index 66914b6af7c..5713d0938b3 100644 --- a/packages/express/LICENSE +++ b/packages/express/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2022 Clerk, Inc. +Copyright (c) 2024 Clerk, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 37f48b49e8d28be56af3fd2ec7551c1f6332bfac Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Mon, 11 Mar 2024 19:33:32 +0200 Subject: [PATCH 06/16] Update .changeset/bright-gorillas-crash.md Co-authored-by: Lennart --- .changeset/bright-gorillas-crash.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.changeset/bright-gorillas-crash.md b/.changeset/bright-gorillas-crash.md index dc7745df554..225d7d829ff 100644 --- a/.changeset/bright-gorillas-crash.md +++ b/.changeset/bright-gorillas-crash.md @@ -2,11 +2,11 @@ '@clerk/express': patch --- -Introduce Express specific Clerk SDK `@clerk/express`. The SDK exposes the following API: +Introduce [Express](https://expressjs.com/) specific Clerk SDK called `@clerk/express`. The SDK exposes the following APIs: -- clerkClient: default @clerk/backend client initialized from env variables and used to make BAPI requests -- clerkMiddleware: centralized middleware that authenticates all requests without blocking them (also triggers handshake mechanism) -- getAuth: utility to retrieve the auth state from the request (requires clerkMiddleware to executed) -- protect: middleware that returns http 401 response when request is signed-out +- `clerkClient`: Default [`@clerk/backend`](https://clerk.com/docs/references/backend/overview) client initialized from environment variables and used to make backend API requests +- `clerkMiddleware`: Centralized middleware that authenticates all requests without blocking them (also triggers handshake mechanism) +- `getAuth`: Utility to retrieve the auth state from a request (requires `clerkMiddleware` to be executed) +- `protect`: Middleware that returns HTTP 401 response when request is signed-out -Also all the top level exports from `@clerk/backend` are re-exported from `@clerk/express` top level. \ No newline at end of file +Also all the top level exports from `@clerk/backend` are re-exported from `@clerk/express`. \ No newline at end of file From 89e4bd03d23250190f5b5dc45a86a04aedae1aa7 Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Fri, 15 Mar 2024 13:47:33 +0200 Subject: [PATCH 07/16] chore(express): Update dependencies to latest --- package-lock.json | 944 +++++++++++++++++++++++++++++++--- packages/express/package.json | 4 +- 2 files changed, 870 insertions(+), 78 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9e3107b33ed..960fb8bd8b1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3849,13 +3849,78 @@ "version": "0.3.1", "license": "MIT" }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/darwin-arm64": { "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -3864,6 +3929,294 @@ "node": ">=12" } }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "license": "MIT", @@ -9543,18 +9896,175 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", + "integrity": "sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz", + "integrity": "sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz", + "integrity": "sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" ] }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz", + "integrity": "sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz", + "integrity": "sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz", + "integrity": "sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz", + "integrity": "sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz", + "integrity": "sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz", + "integrity": "sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz", + "integrity": "sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz", + "integrity": "sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz", + "integrity": "sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz", + "integrity": "sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@rushstack/eslint-patch": { "version": "1.5.1", "license": "MIT" @@ -10471,8 +10981,9 @@ }, "node_modules/@types/estree": { "version": "1.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true }, "node_modules/@types/express": { "version": "4.17.14", @@ -17425,6 +17936,54 @@ "esbuild-windows-arm64": "0.15.18" } }, + "node_modules/esbuild-android-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", + "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz", + "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz", + "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/esbuild-darwin-arm64": { "version": "0.15.18", "cpu": [ @@ -17440,6 +17999,198 @@ "node": ">=12" } }, + "node_modules/esbuild-freebsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz", + "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz", + "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz", + "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz", + "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz", + "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz", + "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz", + "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz", + "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz", + "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz", + "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz", + "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz", + "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/esbuild-register": { "version": "3.4.2", "dev": true, @@ -17451,6 +18202,102 @@ "esbuild": ">=0.12 <1" } }, + "node_modules/esbuild-sunos-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz", + "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz", + "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz", + "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz", + "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/android-arm": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", + "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", + "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/escalade": { "version": "3.1.1", "license": "MIT", @@ -31814,8 +32661,9 @@ }, "node_modules/rollup": { "version": "4.13.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.0.tgz", + "integrity": "sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "1.0.5" }, @@ -34766,8 +35614,9 @@ }, "node_modules/tsup": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.0.2.tgz", + "integrity": "sha512-NY8xtQXdH7hDUAZwcQdY/Vzlw9johQsaqf7iwZ6g1DOUlFYQ5/AtVAjTvihhEyeRlGo4dLRVHtrRaL35M1daqQ==", "dev": true, - "license": "MIT", "dependencies": { "bundle-require": "^4.0.0", "cac": "^6.7.12", @@ -34828,9 +35677,10 @@ }, "node_modules/tsup/node_modules/esbuild": { "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", "dev": true, "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -38177,7 +39027,8 @@ }, "packages/expo/node_modules/tslib": { "version": "2.4.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, "packages/expo/node_modules/uuid": { "version": "3.4.0", @@ -38203,12 +39054,11 @@ "license": "ISC" }, "packages/express": { - "name": "@clerk/express", "version": "1.0.0", "license": "MIT", "dependencies": { - "@clerk/backend": "1.0.0-beta.25", - "@clerk/shared": "2.0.0-beta.17", + "@clerk/backend": "^1.0.0-beta.28", + "@clerk/shared": "^2.0.0-beta.19", "tslib": "2.4.1" }, "devDependencies": { @@ -38223,61 +39073,11 @@ "node": ">=18.17.0" } }, - "packages/express/node_modules/@clerk/backend": { - "version": "1.0.0-beta.25", - "license": "MIT", - "dependencies": { - "@clerk/shared": "2.0.0-beta.17", - "cookie": "0.5.0", - "snakecase-keys": "5.4.4", - "tslib": "2.4.1" - }, - "engines": { - "node": ">=18.17.0" - } - }, - "packages/express/node_modules/@clerk/backend/node_modules/snakecase-keys": { - "version": "5.4.4", - "license": "MIT", - "dependencies": { - "map-obj": "^4.1.0", - "snake-case": "^3.0.4", - "type-fest": "^2.5.2" - }, - "engines": { - "node": ">=12" - } - }, - "packages/express/node_modules/@clerk/shared": { - "version": "2.0.0-beta.17", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "glob-to-regexp": "0.4.1", - "js-cookie": "3.0.1", - "std-env": "^3.7.0", - "swr": "2.2.0" - }, - "engines": { - "node": ">=18.17.0" - }, - "peerDependencies": { - "react": ">=18", - "react-dom": ">=18" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, "packages/express/node_modules/@clerk/types": { "version": "4.0.0-beta.18", + "resolved": "https://registry.npmjs.org/@clerk/types/-/types-4.0.0-beta.18.tgz", + "integrity": "sha512-GgpTYv6kTnf4nCtdP/nmEzJlxzGiy6IEfzELBl6Xk1UQTGh3tN6cOGYPAPsn0VN5osMsq8UGwujcbDkoFclBiQ==", "dev": true, - "license": "MIT", "dependencies": { "csstype": "3.1.1" }, @@ -38287,22 +39087,14 @@ }, "packages/express/node_modules/csstype": { "version": "3.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", + "dev": true }, "packages/express/node_modules/tslib": { "version": "2.4.1", - "license": "0BSD" - }, - "packages/express/node_modules/type-fest": { - "version": "2.19.0", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, "packages/fastify": { "name": "@clerk/fastify", diff --git a/packages/express/package.json b/packages/express/package.json index 63bf88a4925..c87b64315bb 100644 --- a/packages/express/package.json +++ b/packages/express/package.json @@ -53,8 +53,8 @@ "test:ci": "jest --maxWorkers=70%" }, "dependencies": { - "@clerk/backend": "1.0.0-beta.25", - "@clerk/shared": "2.0.0-beta.17", + "@clerk/backend": "^1.0.0-beta.28", + "@clerk/shared": "^2.0.0-beta.19", "tslib": "2.4.1" }, "devDependencies": { From 7e3c7092b6ae593125832539ab20042e1d95f89d Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Fri, 15 Mar 2024 15:42:12 +0200 Subject: [PATCH 08/16] chore(express): Replace `protect` with `requireAuth` and add some error handling --- .changeset/bright-gorillas-crash.md | 2 +- package-lock.json | 3 +- packages/express/package.json | 2 +- .../__snapshots__/exports.test.ts.snap | 2 +- packages/express/src/clerkMiddleware.ts | 13 ++++++- packages/express/src/errors.ts | 9 ++++- packages/express/src/getAuth.ts | 2 +- packages/express/src/index.ts | 2 +- packages/express/src/protect.ts | 37 ------------------ packages/express/src/requireAuth.ts | 39 +++++++++++++++++++ 10 files changed, 65 insertions(+), 46 deletions(-) delete mode 100644 packages/express/src/protect.ts create mode 100644 packages/express/src/requireAuth.ts diff --git a/.changeset/bright-gorillas-crash.md b/.changeset/bright-gorillas-crash.md index 225d7d829ff..c3cc6bf6721 100644 --- a/.changeset/bright-gorillas-crash.md +++ b/.changeset/bright-gorillas-crash.md @@ -7,6 +7,6 @@ Introduce [Express](https://expressjs.com/) specific Clerk SDK called `@clerk/ex - `clerkClient`: Default [`@clerk/backend`](https://clerk.com/docs/references/backend/overview) client initialized from environment variables and used to make backend API requests - `clerkMiddleware`: Centralized middleware that authenticates all requests without blocking them (also triggers handshake mechanism) - `getAuth`: Utility to retrieve the auth state from a request (requires `clerkMiddleware` to be executed) -- `protect`: Middleware that returns HTTP 401 response when request is signed-out +- `requireAuth`: Middleware that returns HTTP 401 response when request is signed-out Also all the top level exports from `@clerk/backend` are re-exported from `@clerk/express`. \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 960fb8bd8b1..700413ce9c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39054,6 +39054,7 @@ "license": "ISC" }, "packages/express": { + "name": "@clerk/express", "version": "1.0.0", "license": "MIT", "dependencies": { @@ -39063,7 +39064,7 @@ }, "devDependencies": { "@clerk/types": "4.0.0-beta.18", - "@types/express": "4.17.14", + "@types/express": "^4.17", "@types/node": "^18.17.0", "eslint-config-custom": "*", "tsup": "*", diff --git a/packages/express/package.json b/packages/express/package.json index c87b64315bb..6876974c91a 100644 --- a/packages/express/package.json +++ b/packages/express/package.json @@ -59,7 +59,7 @@ }, "devDependencies": { "@clerk/types": "4.0.0-beta.18", - "@types/express": "4.17.14", + "@types/express": "^4.17", "@types/node": "^18.17.0", "eslint-config-custom": "*", "tsup": "*", diff --git a/packages/express/src/__tests__/__snapshots__/exports.test.ts.snap b/packages/express/src/__tests__/__snapshots__/exports.test.ts.snap index f637583ede6..406f539783d 100644 --- a/packages/express/src/__tests__/__snapshots__/exports.test.ts.snap +++ b/packages/express/src/__tests__/__snapshots__/exports.test.ts.snap @@ -6,7 +6,7 @@ exports[`module exports should not change unless explicitly set 1`] = ` "clerkMiddleware", "createClerkClient", "getAuth", - "protect", + "requireAuth", "verifyToken", ] `; diff --git a/packages/express/src/clerkMiddleware.ts b/packages/express/src/clerkMiddleware.ts index b6a978d6062..0bde5cdb224 100644 --- a/packages/express/src/clerkMiddleware.ts +++ b/packages/express/src/clerkMiddleware.ts @@ -3,9 +3,16 @@ import type { RequestHandler } from 'express'; import { authenticateRequest, setResponseHeaders } from './authenticateRequest'; import { clerkClient as defaultClerkClient } from './clerkClient'; +import { middlewareNotInvoked } from './errors'; import type { ClerkMiddleware, ClerkMiddlewareOptions } from './types'; import { defaultHandler } from './utils'; +const usedWithoutInvocation = (args: unknown[]) => { + return ( + args.length === 3 && typeof args[0] === 'object' && typeof args[1] === 'object' && typeof args[2] === 'function' + ); +}; + const parseHandlerAndOptions = (args: unknown[]) => { return [ typeof args[0] === 'function' ? args[0] : undefined, @@ -13,7 +20,7 @@ const parseHandlerAndOptions = (args: unknown[]) => { ] as [RequestHandler | undefined, ClerkMiddlewareOptions]; }; -export const clerkMiddleware: ClerkMiddleware = (...args: unknown[]): RequestHandler[] => { +export const clerkMiddleware: ClerkMiddleware = (...args: unknown[]) => { const [handler, options] = parseHandlerAndOptions(args); const shouldInitializeClerkClient = Object.keys(options).length > 0; @@ -40,5 +47,9 @@ export const clerkMiddleware: ClerkMiddleware = (...args: unknown[]): RequestHan return next(); }; + if (usedWithoutInvocation(args)) { + throw new Error(middlewareNotInvoked); + } + return [middleware, handler || defaultHandler]; }; diff --git a/packages/express/src/errors.ts b/packages/express/src/errors.ts index 661351d39c7..671fa884d7c 100644 --- a/packages/express/src/errors.ts +++ b/packages/express/src/errors.ts @@ -7,16 +7,21 @@ const createErrorMessage = (msg: string) => { `; }; -export const middlewareRequired = createErrorMessage(`The "clerkMiddleware" should be registered before using "getAuth". +export const middlewareRequired = (fnName: string) => + createErrorMessage(`The "clerkMiddleware" should be registered before using "${fnName}". Example: import express from 'express'; import { clerkMiddleware } from '@clerk/express'; const app = express(); -app.use(clerkMiddleware); +app.use(clerkMiddleware()); `); +export const middlewareNotInvoked = createErrorMessage( + `The "clerkMiddleware" should be invoked. Use "clerkMiddleware()"`, +); + export const satelliteAndMissingProxyUrlAndDomain = 'Missing domain and proxyUrl. A satellite application needs to specify a domain or a proxyUrl'; export const satelliteAndMissingSignInUrl = ` diff --git a/packages/express/src/getAuth.ts b/packages/express/src/getAuth.ts index 1c880c1b678..4d6c8e95ebc 100644 --- a/packages/express/src/getAuth.ts +++ b/packages/express/src/getAuth.ts @@ -13,7 +13,7 @@ import { isAuthInRequest } from './utils'; */ export const getAuth = (req: ExpressRequest): AuthObject => { if (!isAuthInRequest(req)) { - throw new Error(middlewareRequired); + throw new Error(middlewareRequired('getAuth')); } return req.auth; diff --git a/packages/express/src/index.ts b/packages/express/src/index.ts index cf04ed98222..99e44657280 100644 --- a/packages/express/src/index.ts +++ b/packages/express/src/index.ts @@ -5,4 +5,4 @@ export { clerkClient } from './clerkClient'; export type { ClerkMiddleware, ExpressRequestWithAuth } from './types'; export { clerkMiddleware } from './clerkMiddleware'; export { getAuth } from './getAuth'; -export { protect } from './protect'; +export { requireAuth } from './requireAuth'; diff --git a/packages/express/src/protect.ts b/packages/express/src/protect.ts deleted file mode 100644 index f9838ba1039..00000000000 --- a/packages/express/src/protect.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type { RequestHandler } from 'express'; - -import { getAuth } from './getAuth'; -import { defaultHandler } from './utils'; - -/** - * Middleware to protect requests for user authenticated or authorized requests. - * An HTTP 401 status code is returned for unauthenticated requests and it can receive - * a RequestHandler argument to support authorization checks (as shown in the 2nd example). - * - * @example - * router.get('/path', protect(), getHandler) - * @example - * hasPermission = (request, response, next) => { - const auth = getAuth(request); - if (!auth.has('perm')) { - reply.status(403).send('Forbidden'); - return; - } - return next(); - } - * router.get('/path', protect(hasPermission), getHandler) - * - * @throws {Error} `clerkMiddleware` is required to be set in the middleware chain before this util is used. - */ -export const protect = (handler?: RequestHandler): RequestHandler[] => { - const protectMiddleware: RequestHandler = (request, response, next) => { - if (!getAuth(request).userId) { - response.status(401).send('Unauthorized'); - return; - } - - return next(); - }; - - return [protectMiddleware, handler || defaultHandler]; -}; diff --git a/packages/express/src/requireAuth.ts b/packages/express/src/requireAuth.ts new file mode 100644 index 00000000000..551388f259f --- /dev/null +++ b/packages/express/src/requireAuth.ts @@ -0,0 +1,39 @@ +import type { RequestHandler } from 'express'; + +import { middlewareRequired } from './errors'; +import { getAuth } from './getAuth'; +import { isAuthInRequest } from './utils'; + +/** + * Middleware to requireAuth requests for user authenticated or authorized requests. + * An HTTP 401 status code is returned for unauthenticated requests. + * + * @example + * router.get('/path', requireAuth, getHandler) + * //or + * router.use(requireAuth) + * @example + * hasPermission = (request, response, next) => { + * const auth = getAuth(request); + * if (!auth.has({ permission: 'permission' })) { + * response.status(403).send('Forbidden'); + * return; + * } + * return next(); + * } + * router.get('/path', requireAuth, hasPermission, getHandler) + * + * @throws {Error} `clerkMiddleware` is required to be set in the middleware chain before this util is used. + */ +export const requireAuth: RequestHandler = (request, response, next) => { + if (!isAuthInRequest(request)) { + throw new Error(middlewareRequired('requireAuth')); + } + + if (!getAuth(request).userId) { + response.status(401).send('Unauthorized'); + return; + } + + return next(); +}; From 0b0ed37f8f9a417b7d5645b7e273256df4091423 Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Fri, 15 Mar 2024 15:45:43 +0200 Subject: [PATCH 09/16] chore(*): Upgrade express playground to use `@clerk/express` --- playground/express/package.json | 6 +++--- playground/express/src/routes/private.ts | 15 ++++++++------- playground/express/src/routes/public.ts | 9 ++++++--- playground/express/src/server.ts | 10 +++------- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/playground/express/package.json b/playground/express/package.json index cfe498c0dcc..4fd175d0623 100644 --- a/playground/express/package.json +++ b/playground/express/package.json @@ -4,14 +4,14 @@ "private": true, "scripts": { "start": "ts-node ./src/server.ts", - "yalc:add": "yalc add -- @clerk/types @clerk/backend @clerk/clerk-sdk-node", + "yalc:add": "yalc add -- @clerk/express @clerk/types @clerk/backend @clerk/shared", "dev:fromlocal": " nodemon --watch .yalc --watch src --exec \"npm run yalc:add && npm run start\"" }, "author": "", "license": "ISC", "dependencies": { "@clerk/backend": "file:.yalc/@clerk/backend", - "@clerk/clerk-sdk-node": "file:.yalc/@clerk/clerk-sdk-node", + "@clerk/express": "file:.yalc/@clerk/express", "@clerk/shared": "file:.yalc/@clerk/shared", "@clerk/types": "file:.yalc/@clerk/types", "dotenv": "^16.0.3", @@ -26,4 +26,4 @@ "tslib": "^2.5.0", "typescript": "4.8.4" } -} \ No newline at end of file +} diff --git a/playground/express/src/routes/private.ts b/playground/express/src/routes/private.ts index 9dcbdff9f47..a76c7d91193 100644 --- a/playground/express/src/routes/private.ts +++ b/playground/express/src/routes/private.ts @@ -1,22 +1,23 @@ import type { Response } from 'express'; -import { clerkClient } from '@clerk/clerk-sdk-node'; -import { Router } from 'express'; +import { getAuth, requireAuth } from '@clerk/express'; +import { Router, Request as ExpressRequest } from 'express'; const router = Router(); -router.use((...args)=>clerkClient.expressRequireAuth()(...args)); +router.use(requireAuth); -router.get('/me', async (req, reply: Response) => { - return reply.json({ auth: req.auth }); +router.get('/me', async (req: ExpressRequest, reply: Response) => { + return reply.json({ auth: getAuth(req) }); }); router.get('/private', async (req, reply: Response) => { - if (!req.auth.userId) { + const auth = getAuth(req); + if (!auth.userId) { return reply.status(403).end(); } - return reply.json({ hello: 'world', auth: req.auth }); + return reply.json({ hello: 'world', auth }); }); export const privateRoutes = router; diff --git a/playground/express/src/routes/public.ts b/playground/express/src/routes/public.ts index 47797d9a747..fe4c62486ac 100644 --- a/playground/express/src/routes/public.ts +++ b/playground/express/src/routes/public.ts @@ -1,4 +1,4 @@ -import { Router } from 'express'; +import { Router, RequestHandler} from 'express'; const router = Router(); @@ -6,13 +6,16 @@ router.get('/public', async (_req, reply) => { return reply.json({ hello: 'world' }); }); -router.get('/home', function (_req, res) { +const homeHandler: RequestHandler = function (_req, res) { return res.render('home.ejs', { publishableKey: process.env.CLERK_PUBLISHABLE_KEY, domain: process.env.CLERK_DOMAIN, isSatellite: process.env.CLERK_IS_SATELLITE, signInUrl: process.env.CLERK_SIGN_IN_URL, }); -}); +}; + +router.get('/home', homeHandler); +router.get('/', homeHandler); export const publicRoutes = router; diff --git a/playground/express/src/server.ts b/playground/express/src/server.ts index 2b3f27af550..c9efee78acc 100644 --- a/playground/express/src/server.ts +++ b/playground/express/src/server.ts @@ -1,6 +1,6 @@ -import type { StrictAuthProp } from '@clerk/clerk-sdk-node'; import type { Application, Request, Response, NextFunction } from 'express'; +import { clerkMiddleware } from '@clerk/express'; import * as express from 'express'; import { privateRoutes, publicRoutes } from './routes'; @@ -9,15 +9,11 @@ import './loadEnv'; const port = process.env.PORT || 3000; const app: Application = express(); -declare global { - namespace Express { - interface Request extends StrictAuthProp {} - } -} - app.set('view engine', 'ejs'); app.set('views', 'src/views'); +app.use(clerkMiddleware()); + app.use(publicRoutes); app.use(privateRoutes); From a9e1a1b4fa075f0b26a58a0f8ea84481808fe880 Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Fri, 15 Mar 2024 17:45:55 +0200 Subject: [PATCH 10/16] fix(express): Add tsconfig.lint.json to lint all files --- packages/express/tsconfig.lint.json | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/express/tsconfig.lint.json diff --git a/packages/express/tsconfig.lint.json b/packages/express/tsconfig.lint.json new file mode 100644 index 00000000000..9b624091911 --- /dev/null +++ b/packages/express/tsconfig.lint.json @@ -0,0 +1,5 @@ +{ + "extends": "./tsconfig.json", + "include": ["src"], + "exclude": ["node_modules"] +} From 294dd48ed33a0b3f76f8b80d2b403b95bf3fad16 Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Fri, 29 Mar 2024 13:30:40 +0200 Subject: [PATCH 11/16] chore(express): Update docs links --- packages/express/README.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/packages/express/README.md b/packages/express/README.md index 858dab2be7f..fbef71bf2f4 100644 --- a/packages/express/README.md +++ b/packages/express/README.md @@ -13,7 +13,7 @@
[![Chat on Discord](https://img.shields.io/discord/856971667393609759.svg?logo=discord)](https://clerk.com/discord) -[![Clerk documentation](https://img.shields.io/badge/documentation-clerk-green.svg)](https://clerk.com/docs?utm_source=github&utm_medium=express) +[![Clerk documentation](https://img.shields.io/badge/documentation-clerk-green.svg)](https://beta.clerk.com/docs?utm_source=github&utm_medium=express) [![Follow on Twitter](https://img.shields.io/twitter/follow/ClerkDev?style=social)](https://twitter.com/intent/follow?screen_name=ClerkDev) [Changelog](https://github.com/clerk/javascript/blob/main/packages/express/CHANGELOG.md) @@ -30,10 +30,8 @@ ## Overview - - [Clerk](https://clerk.com?utm_source=github&utm_medium=express) is the easiest way to add authentication and user management to your Node.js application. To gain a better understanding of the Express SDK and Clerk Backend API, refer to -the Express SDK and Backend API documentation. +the Express SDK and Backend API documentation. ## Getting started @@ -72,9 +70,7 @@ import { clerkClient } from '@clerk/express'; const { data: userList } = await clerkClient.users.getUserList(); ``` - - -_For further details and examples, please refer to our [Documentation](https://clerk.com/docs/reference/express/getting-started?utm_source=github&utm_medium=express)._ +_For further details and examples, please refer to our [Documentation](https://beta.clerk.com/docs/references/express/overview?utm_source=github&utm_medium=express)._ ## Support From 710989f1fab1ec957f93e6cf1a859f2565fc21a3 Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Fri, 29 Mar 2024 18:24:08 +0200 Subject: [PATCH 12/16] feat(express): Add tests --- package-lock.json | 286 +++++++++++++++++- packages/express/jest.config.js | 1 + packages/express/jest.setup.js | 3 +- packages/express/package.json | 3 + .../src/__tests__/clerkMiddleware.test.ts | 138 +++++++++ .../express/src/__tests__/getAuth.test.ts | 17 ++ packages/express/src/__tests__/helpers.ts | 57 ++++ .../express/src/__tests__/requireAuth.test.ts | 31 ++ packages/express/src/clerkMiddleware.ts | 32 +- packages/express/src/types.ts | 7 +- 10 files changed, 558 insertions(+), 17 deletions(-) create mode 100644 packages/express/src/__tests__/clerkMiddleware.test.ts create mode 100644 packages/express/src/__tests__/getAuth.test.ts create mode 100644 packages/express/src/__tests__/helpers.ts create mode 100644 packages/express/src/__tests__/requireAuth.test.ts diff --git a/package-lock.json b/package-lock.json index 700413ce9c5..889fd64a38d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10940,6 +10940,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/cookiejar": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", + "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", + "dev": true + }, "node_modules/@types/cors": { "version": "2.8.14", "dev": true, @@ -11185,6 +11191,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/methods": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", + "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", + "dev": true + }, "node_modules/@types/mime": { "version": "1.3.2", "dev": true, @@ -11385,6 +11397,27 @@ "devOptional": true, "license": "MIT" }, + "node_modules/@types/superagent": { + "version": "8.1.6", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.6.tgz", + "integrity": "sha512-yzBOv+6meEHSzV2NThYYOA6RtqvPr3Hbob9ZLp3i07SH27CrYVfm8CrF7ydTmidtelsFiKx2I4gZAiAOamGgvQ==", + "dev": true, + "dependencies": { + "@types/cookiejar": "^2.1.5", + "@types/methods": "^1.1.4", + "@types/node": "*" + } + }, + "node_modules/@types/supertest": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz", + "integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==", + "dev": true, + "dependencies": { + "@types/methods": "^1.1.4", + "@types/superagent": "^8.1.0" + } + }, "node_modules/@types/testing-library__jest-dom": { "version": "5.14.6", "dev": true, @@ -15279,6 +15312,15 @@ "node": ">=0.10.0" } }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/component-type": { "version": "1.2.2", "dev": true, @@ -15513,8 +15555,9 @@ }, "node_modules/connect": { "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "debug": "2.6.9", @@ -15741,6 +15784,12 @@ "dev": true, "license": "MIT" }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true + }, "node_modules/cookies": { "version": "0.8.0", "license": "MIT", @@ -17260,6 +17309,16 @@ "dev": true, "license": "0BSD" }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "node_modules/diff": { "version": "5.1.0", "dev": true, @@ -20704,6 +20763,21 @@ "node": ">=12.20.0" } }, + "node_modules/formidable": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", + "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", + "dev": true, + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, "node_modules/forwarded": { "version": "0.2.0", "license": "MIT", @@ -22968,6 +23042,15 @@ "tslib": "^2.0.3" } }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/hoist-non-react-statics": { "version": "3.3.2", "license": "BSD-3-Clause", @@ -34545,6 +34628,66 @@ "dev": true, "license": "MIT" }, + "node_modules/superagent": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", + "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", + "dev": true, + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.1.2", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=6.4.0 <13 || >=14" + } + }, + "node_modules/superagent/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/supertest": { + "version": "6.3.4", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz", + "integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==", + "dev": true, + "dependencies": { + "methods": "^1.1.2", + "superagent": "^8.1.2" + }, + "engines": { + "node": ">=6.4.0" + } + }, "node_modules/supports-color": { "version": "5.5.0", "license": "MIT", @@ -39066,7 +39209,10 @@ "@clerk/types": "4.0.0-beta.18", "@types/express": "^4.17", "@types/node": "^18.17.0", + "@types/supertest": "^6.0.2", "eslint-config-custom": "*", + "express": "^4.19.2", + "supertest": "^6.3.4", "tsup": "*", "typescript": "*" }, @@ -39086,12 +39232,150 @@ "node": ">=18.17.0" } }, + "packages/express/node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "packages/express/node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "packages/express/node_modules/csstype": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", "dev": true }, + "packages/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "packages/express/node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "packages/express/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "packages/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "packages/express/node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "packages/express/node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "packages/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "packages/express/node_modules/tslib": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", diff --git a/packages/express/jest.config.js b/packages/express/jest.config.js index 3e6ddd05b0c..71b21269826 100644 --- a/packages/express/jest.config.js +++ b/packages/express/jest.config.js @@ -13,5 +13,6 @@ module.exports = { }, setupFiles: ['/jest.setup.js'], collectCoverage: true, + coveragePathIgnorePatterns: ['__tests__'], testPathIgnorePatterns: ['/node_modules/', '/coverage', '/dist/'], }; diff --git a/packages/express/jest.setup.js b/packages/express/jest.setup.js index 1a5dcdc343c..cf6bc7526d0 100644 --- a/packages/express/jest.setup.js +++ b/packages/express/jest.setup.js @@ -1 +1,2 @@ -process.env.CLERK_SECRET_KEY = 'TEST_SECRET_KEY'; +process.env.CLERK_SECRET_KEY = 'sk_test_....'; +process.env.CLERK_PUBLISHABLE_KEY = 'pk_test_Y2xlcmsuaW5jbHVkZWQua2F0eWRpZC05Mi5sY2wuZGV2JA'; diff --git a/packages/express/package.json b/packages/express/package.json index 6876974c91a..4d41f76d2eb 100644 --- a/packages/express/package.json +++ b/packages/express/package.json @@ -61,7 +61,10 @@ "@clerk/types": "4.0.0-beta.18", "@types/express": "^4.17", "@types/node": "^18.17.0", + "@types/supertest": "^6.0.2", "eslint-config-custom": "*", + "express": "^4.19.2", + "supertest": "^6.3.4", "tsup": "*", "typescript": "*" }, diff --git a/packages/express/src/__tests__/clerkMiddleware.test.ts b/packages/express/src/__tests__/clerkMiddleware.test.ts new file mode 100644 index 00000000000..39f39f56ca8 --- /dev/null +++ b/packages/express/src/__tests__/clerkMiddleware.test.ts @@ -0,0 +1,138 @@ +import type { RequestHandler } from 'express'; + +import { clerkMiddleware } from '../clerkMiddleware'; +import { getAuth } from '../getAuth'; +import { requireAuth } from '../requireAuth'; +import { assertNoDebugHeaders, assertSignedOutDebugHeaders, runMiddleware } from './helpers'; + +describe('clerkMiddleware', () => { + // TODO(dimkl): Fix issue that makes test order matter, until then keep this test suite first + describe('without secretKey env', () => { + const sk = process.env.CLERK_SECRET_KEY; + + beforeEach(() => { + delete process.env.CLERK_SECRET_KEY; + }); + + afterEach(() => { + process.env.CLERK_SECRET_KEY = sk; + }); + + it('throws error if secretKey is not passed as parameter', async () => { + const response = await runMiddleware(clerkMiddleware()).expect(500); + + assertNoDebugHeaders(response); + }); + + it('works if secretKey is passed as parameter', async () => { + const options = { secretKey: 'sk_test_....' }; + + const response = await runMiddleware(clerkMiddleware(options)).expect(200, 'Hello world!'); + + assertSignedOutDebugHeaders(response); + }); + }); + + // TODO(dimkl): Fix issue that makes test order matter, until then keep this test suite second + describe('without publishableKey env', () => { + const pk = process.env.CLERK_PUBLISHABLE_KEY; + + beforeEach(() => { + delete process.env.CLERK_PUBLISHABLE_KEY; + }); + + afterEach(() => { + process.env.CLERK_PUBLISHABLE_KEY = pk; + }); + + it('throws error if publishableKey is not passed as parameter', async () => { + const response = await runMiddleware(clerkMiddleware()).expect(500); + + assertNoDebugHeaders(response); + }); + + it('works if publishableKey is passed as parameter', async () => { + const options = { publishableKey: 'pk_test_Y2xlcmsuZXhhbXBsZS5jb20k' }; + + const response = await runMiddleware(clerkMiddleware(options)).expect(200, 'Hello world!'); + + assertSignedOutDebugHeaders(response); + }); + }); + + it.todo('supports usage without invocation: app.use(clerkMiddleware)'); + + it('supports usage without parameters: app.use(clerkMiddleware())', async () => { + const response = await runMiddleware(clerkMiddleware()).expect(200, 'Hello world!'); + + assertSignedOutDebugHeaders(response); + }); + + it('supports usage with parameters: app.use(clerkMiddleware(options))', async () => { + const options = { publishableKey: 'pk_test_Y2xlcmsuZXhhbXBsZS5jb20k' }; + + const response = await runMiddleware(clerkMiddleware(options)).expect(200, 'Hello world!'); + + assertSignedOutDebugHeaders(response); + }); + + it('supports usage with request handler: app.use(clerkMiddleware(requestHandler))', async () => { + const handler: RequestHandler = (_req, res, next) => { + res.setHeader('x-clerk-auth-custom', 'custom-value'); + return next(); + }; + + const response = await runMiddleware(clerkMiddleware(handler)).expect(200, 'Hello world!'); + + expect(response.header).toHaveProperty('x-clerk-auth-custom', 'custom-value'); + assertSignedOutDebugHeaders(response); + }); + + it('supports usage with parameters and request handler: app.use(clerkMiddleware(requestHandler, options))', async () => { + const handler: RequestHandler = (_req, res, next) => { + res.setHeader('x-clerk-auth-custom', 'custom-value'); + return next(); + }; + const options = { publishableKey: 'pk_test_Y2xlcmsuZXhhbXBsZS5jb20k' }; + + const response = await runMiddleware(clerkMiddleware(handler, options)).expect(200, 'Hello world!'); + + expect(response.header).toHaveProperty('x-clerk-auth-custom', 'custom-value'); + assertSignedOutDebugHeaders(response); + }); + + it('throws error if clerkMiddleware is not executed before requireAuth', async () => { + const customMiddleware: RequestHandler = (_request, response, next) => { + response.setHeader('x-custom-middleware', 'custom'); + return next(); + }; + + const response = await runMiddleware([requireAuth, customMiddleware]).expect(500); + + assertNoDebugHeaders(response); + expect(response.header).not.toHaveProperty('x-clerk-auth-custom', 'custom-value'); + }); + + it('throws error if clerkMiddleware is not executed before getAuth', async () => { + const customMiddleware: RequestHandler = (request, response, next) => { + const auth = getAuth(request); + response.setHeader('x-custom-middleware', auth.userId || ''); + return next(); + }; + + const response = await runMiddleware([customMiddleware]).expect(500); + + assertNoDebugHeaders(response); + expect(response.header).not.toHaveProperty('x-clerk-auth-custom', 'custom-value'); + }); + + it('supports handshake flow', async () => { + const response = await runMiddleware(clerkMiddleware(), { + Cookie: '__client_uat=1711618859;', + 'Sec-Fetch-Dest': 'document', + }).expect(307); + + expect(response.header).toHaveProperty('x-clerk-auth-status', 'handshake'); + expect(response.header).toHaveProperty('location', expect.stringContaining('/v1/client/handshake?redirect_url=')); + }); +}); diff --git a/packages/express/src/__tests__/getAuth.test.ts b/packages/express/src/__tests__/getAuth.test.ts new file mode 100644 index 00000000000..eaa3e6337ba --- /dev/null +++ b/packages/express/src/__tests__/getAuth.test.ts @@ -0,0 +1,17 @@ +import { getAuth } from '../getAuth'; +import { mockRequest, mockRequestWithAuth } from './helpers'; + +describe('getAuth', () => { + it('throws error if clerkMiddleware is not executed before getAuth', async () => { + expect(() => getAuth(mockRequest())).toThrow(/The "clerkMiddleware" should be registered before using "getAuth"/); + }); + + it('returns auth from request for signed-out request', async () => { + expect(getAuth(mockRequestWithAuth())).toHaveProperty('userId', null); + }); + + it('returns auth from request', async () => { + const req = mockRequestWithAuth({ userId: 'user_12345' }); + expect(getAuth(req)).toHaveProperty('userId', 'user_12345'); + }); +}); diff --git a/packages/express/src/__tests__/helpers.ts b/packages/express/src/__tests__/helpers.ts new file mode 100644 index 00000000000..45a6480b95f --- /dev/null +++ b/packages/express/src/__tests__/helpers.ts @@ -0,0 +1,57 @@ +import type { AuthObject } from '@clerk/backend/internal'; +import type { Application, Request as ExpressRequest, RequestHandler, Response as ExpressResponse } from 'express'; +import express from 'express'; +import supertest from 'supertest'; + +import type { ExpressRequestWithAuth } from '../types'; + +// Inspired by https://github.com/helmetjs/helmet/blob/main/test/helpers.ts +export function runMiddleware(middleware: RequestHandler | RequestHandler[], headers: Record = {}) { + const app: Application = express(); + app.use(middleware); + app.use((_req, res, _next) => res.end('Hello world!')); + + return supertest(app).get('/').set(headers); +} + +export function mockResponse(): ExpressResponse { + return { + status: jest.fn().mockReturnThis(), + send: jest.fn().mockReturnThis(), + } as unknown as ExpressResponse; +} + +export function mockRequest(): ExpressRequest { + return {} as ExpressRequest; +} + +export function mockRequestWithAuth(auth: Partial = {}): ExpressRequestWithAuth { + return { + auth: { + sessionClaims: null, + sessionId: null, + actor: null, + userId: null, + orgId: null, + orgRole: null, + orgSlug: null, + orgPermissions: null, + getToken: async () => '', + has: () => false, + debug: () => ({}), + ...auth, + }, + } as unknown as ExpressRequestWithAuth; +} + +export function assertSignedOutDebugHeaders(response: any) { + expect(response.header).toHaveProperty('x-clerk-auth-status', 'signed-out'); + expect(response.header).toHaveProperty('x-clerk-auth-reason', 'session-token-and-uat-missing'); + expect(response.header).not.toHaveProperty('x-clerk-auth-message'); +} + +export function assertNoDebugHeaders(response: any) { + expect(response.header).not.toHaveProperty('x-clerk-auth-status'); + expect(response.header).not.toHaveProperty('x-clerk-auth-reason'); + expect(response.header).not.toHaveProperty('x-clerk-auth-message'); +} diff --git a/packages/express/src/__tests__/requireAuth.test.ts b/packages/express/src/__tests__/requireAuth.test.ts new file mode 100644 index 00000000000..afc554c5d25 --- /dev/null +++ b/packages/express/src/__tests__/requireAuth.test.ts @@ -0,0 +1,31 @@ +import { requireAuth } from '../requireAuth'; +import { mockRequest, mockRequestWithAuth, mockResponse } from './helpers'; + +describe('requireAuth', () => { + it('throws error if clerkMiddleware is not executed before this middleware', async () => { + expect(() => requireAuth(mockRequest(), mockResponse(), () => undefined)).toThrow( + /The "clerkMiddleware" should be registered before using "requireAuth"/, + ); + }); + + it('make application require auth - returns 401 Unauthorized for signed-out', async () => { + const response = mockResponse(); + const nextFn = jest.fn(); + + requireAuth(mockRequestWithAuth(), response, nextFn); + + expect(response.status).toBeCalledWith(401); + expect(nextFn).not.toBeCalled(); + }); + + it('make application require auth - proceed with next middlewares for signed-in', async () => { + const response = mockResponse(); + const nextFn = jest.fn(); + const request = mockRequestWithAuth({ userId: 'user_1234' }); + + requireAuth(request, response, nextFn); + + expect(response.status).not.toBeCalled(); + expect(nextFn).toBeCalled(); + }); +}); diff --git a/packages/express/src/clerkMiddleware.ts b/packages/express/src/clerkMiddleware.ts index 0bde5cdb224..3821e3d2f29 100644 --- a/packages/express/src/clerkMiddleware.ts +++ b/packages/express/src/clerkMiddleware.ts @@ -28,23 +28,27 @@ export const clerkMiddleware: ClerkMiddleware = (...args: unknown[]) => { // eslint-disable-next-line @typescript-eslint/no-misused-promises const middleware: RequestHandler = async (request, response, next) => { - const requestState = await authenticateRequest({ - clerkClient, - request, - options, - }); - - const err = setResponseHeaders(requestState, response); - if (err || response.writableEnded) { - if (err) { - next(err); + try { + const requestState = await authenticateRequest({ + clerkClient, + request, + options, + }); + + const err = setResponseHeaders(requestState, response); + if (err || response.writableEnded) { + if (err) { + next(err); + } + return; } - return; - } - Object.assign(request, { auth: requestState.toAuth() }); + Object.assign(request, { auth: requestState.toAuth() }); - return next(); + return next(); + } catch (err) { + next(err); + } }; if (usedWithoutInvocation(args)) { diff --git a/packages/express/src/types.ts b/packages/express/src/types.ts index 477f8db8aec..24e87bcd96c 100644 --- a/packages/express/src/types.ts +++ b/packages/express/src/types.ts @@ -14,7 +14,12 @@ export type ClerkMiddlewareOptions = AuthenticateRequestOptions & { debug?: bool export interface ClerkMiddleware { /** * @example - * app.use(clerkMiddleware((request, response, next) => { ... }, options)); + * const handler = (request, response, next) => { + * ...; + * // if next is not called the request will be terminated or hung. + * return next(); + * } + * app.use(clerkMiddleware(handler, options)); */ (handler: RequestHandler, options?: ClerkMiddlewareOptions): RequestHandler[]; /** From 8460594e593ad5f7906a03db8fe58599dc6cc3a6 Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Tue, 2 Apr 2024 23:47:40 +0300 Subject: [PATCH 13/16] fix(repo): Add core-2 default keys to integrations keys sample json --- integration/.keys.json.sample | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/integration/.keys.json.sample b/integration/.keys.json.sample index 5f29828daf6..a3bf1201b67 100644 --- a/integration/.keys.json.sample +++ b/integration/.keys.json.sample @@ -10,5 +10,9 @@ "with-custom-roles": { "pk": "", "sk": "" + }, + "core-2-all-enabled": { + "pk": "", + "sk": "" } } From cf0ea7ad816b6bfba16b453f8e49a7c6c47f793e Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Wed, 3 Apr 2024 17:16:23 +0300 Subject: [PATCH 14/16] chore(express): Address PR comments about docs & links --- packages/express/README.md | 2 +- packages/express/src/errors.ts | 1 - packages/express/src/requireAuth.ts | 2 +- packages/express/src/types.ts | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/express/README.md b/packages/express/README.md index fbef71bf2f4..46ba4f6ac5b 100644 --- a/packages/express/README.md +++ b/packages/express/README.md @@ -20,7 +20,7 @@ · [Report a Bug](https://github.com/clerk/javascript/issues/new?assignees=&labels=needs-triage&projects=&template=BUG_REPORT.yml) · -[Request a Feature](https://github.com/clerk/javascript/issues/new?assignees=&labels=feature-request&projects=&template=FEATURE_REQUEST.yml) +[Request a Feature](https://feedback.clerk.com/roadmap) · [Ask a Question](https://github.com/clerk/javascript/discussions) diff --git a/packages/express/src/errors.ts b/packages/express/src/errors.ts index 671fa884d7c..0bbb461990e 100644 --- a/packages/express/src/errors.ts +++ b/packages/express/src/errors.ts @@ -1,4 +1,3 @@ -// https://github.com/clerk/javascript/blob/main/packages/remix/src/errors.ts#L1-L0 const createErrorMessage = (msg: string) => { return `🔒 Clerk: ${msg.trim()} diff --git a/packages/express/src/requireAuth.ts b/packages/express/src/requireAuth.ts index 551388f259f..9b86e49d198 100644 --- a/packages/express/src/requireAuth.ts +++ b/packages/express/src/requireAuth.ts @@ -5,7 +5,7 @@ import { getAuth } from './getAuth'; import { isAuthInRequest } from './utils'; /** - * Middleware to requireAuth requests for user authenticated or authorized requests. + * Middleware to require auth requests for user authenticated or authorized requests. * An HTTP 401 status code is returned for unauthenticated requests. * * @example diff --git a/packages/express/src/types.ts b/packages/express/src/types.ts index 24e87bcd96c..9892cd5a01b 100644 --- a/packages/express/src/types.ts +++ b/packages/express/src/types.ts @@ -9,7 +9,7 @@ export type ClerkMiddlewareOptions = AuthenticateRequestOptions & { debug?: bool /** * Middleware for Express that handles authentication and authorization with Clerk. - * For more details, please refer to the docs: https://beta.clerk.com/docs/backend-requests/handling/express + * For more details, please refer to the docs: https://beta.clerk.com/docs/references/express/overview?utm_source=github&utm_medium=expres */ export interface ClerkMiddleware { /** From 6d6c1e31a66442c26e11d8ab18d1aaefa7548a51 Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Thu, 4 Apr 2024 21:27:27 +0300 Subject: [PATCH 15/16] chore(express): Rename isAuthInRequest helper to requestHasAuthObject for readability --- packages/express/src/getAuth.ts | 4 ++-- packages/express/src/requireAuth.ts | 4 ++-- packages/express/src/utils.ts | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/express/src/getAuth.ts b/packages/express/src/getAuth.ts index 4d6c8e95ebc..41a9b0e0c7d 100644 --- a/packages/express/src/getAuth.ts +++ b/packages/express/src/getAuth.ts @@ -2,7 +2,7 @@ import type { AuthObject } from '@clerk/backend/internal'; import type { Request as ExpressRequest } from 'express'; import { middlewareRequired } from './errors'; -import { isAuthInRequest } from './utils'; +import { requestHasAuthObject } from './utils'; /** * Retrieves the Clerk AuthObject using the current request object. @@ -12,7 +12,7 @@ import { isAuthInRequest } from './utils'; * @throws {Error} `clerkMiddleware` is required to be set in the middleware chain before this util is used. */ export const getAuth = (req: ExpressRequest): AuthObject => { - if (!isAuthInRequest(req)) { + if (!requestHasAuthObject(req)) { throw new Error(middlewareRequired('getAuth')); } diff --git a/packages/express/src/requireAuth.ts b/packages/express/src/requireAuth.ts index 9b86e49d198..3aacb20aeb6 100644 --- a/packages/express/src/requireAuth.ts +++ b/packages/express/src/requireAuth.ts @@ -2,7 +2,7 @@ import type { RequestHandler } from 'express'; import { middlewareRequired } from './errors'; import { getAuth } from './getAuth'; -import { isAuthInRequest } from './utils'; +import { requestHasAuthObject } from './utils'; /** * Middleware to require auth requests for user authenticated or authorized requests. @@ -26,7 +26,7 @@ import { isAuthInRequest } from './utils'; * @throws {Error} `clerkMiddleware` is required to be set in the middleware chain before this util is used. */ export const requireAuth: RequestHandler = (request, response, next) => { - if (!isAuthInRequest(request)) { + if (!requestHasAuthObject(request)) { throw new Error(middlewareRequired('requireAuth')); } diff --git a/packages/express/src/utils.ts b/packages/express/src/utils.ts index e2b7304402b..bc045f952f4 100644 --- a/packages/express/src/utils.ts +++ b/packages/express/src/utils.ts @@ -3,7 +3,7 @@ import type { Request as ExpressRequest, RequestHandler } from 'express'; import type { ExpressRequestWithAuth } from './types'; -export const isAuthInRequest = (req: ExpressRequest): req is ExpressRequestWithAuth => { +export const requestHasAuthObject = (req: ExpressRequest): req is ExpressRequestWithAuth => { return 'auth' in req; }; From 55d9b64d3dda2563ba4de99e07c1a7707389492f Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Fri, 5 Apr 2024 13:23:09 +0300 Subject: [PATCH 16/16] chore(express): Refactor clerkMiddleware to support clerkClient param instead of implicit creation --- packages/express/src/clerkMiddleware.ts | 4 +--- packages/express/src/types.ts | 9 ++++++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/express/src/clerkMiddleware.ts b/packages/express/src/clerkMiddleware.ts index 3821e3d2f29..de622a3f7ac 100644 --- a/packages/express/src/clerkMiddleware.ts +++ b/packages/express/src/clerkMiddleware.ts @@ -1,4 +1,3 @@ -import { createClerkClient } from '@clerk/backend'; import type { RequestHandler } from 'express'; import { authenticateRequest, setResponseHeaders } from './authenticateRequest'; @@ -23,8 +22,7 @@ const parseHandlerAndOptions = (args: unknown[]) => { export const clerkMiddleware: ClerkMiddleware = (...args: unknown[]) => { const [handler, options] = parseHandlerAndOptions(args); - const shouldInitializeClerkClient = Object.keys(options).length > 0; - const clerkClient = shouldInitializeClerkClient ? createClerkClient(options) : defaultClerkClient; + const clerkClient = options.clerkClient || defaultClerkClient; // eslint-disable-next-line @typescript-eslint/no-misused-promises const middleware: RequestHandler = async (request, response, next) => { diff --git a/packages/express/src/types.ts b/packages/express/src/types.ts index 9892cd5a01b..afe420298ed 100644 --- a/packages/express/src/types.ts +++ b/packages/express/src/types.ts @@ -5,7 +5,10 @@ import type { Request as ExpressRequest, RequestHandler } from 'express'; export type ExpressRequestWithAuth = ExpressRequest & { auth: AuthObject }; -export type ClerkMiddlewareOptions = AuthenticateRequestOptions & { debug?: boolean }; +export type ClerkMiddlewareOptions = AuthenticateRequestOptions & { + debug?: boolean; + clerkClient?: ClerkClient; +}; /** * Middleware for Express that handles authentication and authorization with Clerk. @@ -27,6 +30,10 @@ export interface ClerkMiddleware { * app.use(clerkMiddleware(options)); * * @example + * const clerkClient = createClerkClient({ ... }); + * app.use(clerkMiddleware({ clerkClient })); + * + * @example * app.use(clerkMiddleware()); */ (options?: ClerkMiddlewareOptions): RequestHandler[];