Skip to content

feat(repo): Add E2E test suite for handshake #2331

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 24 commits into from
Dec 13, 2023

Conversation

brkalow
Copy link
Member

@brkalow brkalow commented Dec 13, 2023

Description

Introduces a test suite for our handshake functionality in our E2E test suite. Previously, we were using a one-off test suite that was run manually. Migrating the tests into our E2E test suite will ensure they run in CI and will allow us to run them against other frameworks as we roll out the handshake functionality.

I also fixed some logic in @clerk/nextjs to ensure we always follow location headers returned from authenticateRequest().

Checklist

  • npm test runs as expected.
  • npm run build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

Packages affected

  • @clerk/backend
  • @clerk/chrome-extension
  • @clerk/clerk-js
  • @clerk/clerk-expo
  • @clerk/fastify
  • gatsby-plugin-clerk
  • @clerk/localizations
  • @clerk/nextjs
  • @clerk/clerk-react
  • @clerk/remix
  • @clerk/clerk-sdk-node
  • @clerk/shared
  • @clerk/themes
  • @clerk/types
  • build/tooling/chore

SokratisVidros and others added 18 commits December 12, 2023 16:27
* Test suite start

* feat(backend,nextjs,utils): Fix jest

* first test

* Fix bug in jwks cache for multiple runtime keys

* Add all the tests, including many failing

* Add all the tests, including many failing

* fix(shared): Correctly construct proxy URL

---------

Co-authored-by: Nikos Douvlis <[email protected]>
Co-authored-by: Bryce Kalow <[email protected]>
* feat(backend): Remove interstitial endpoints

* feat(backend,types): Remove local interstitial script

* feat(types): Clean retheme types

* feat(backend): Remove interstitial and interstitial rules

* feat(clerk-js): Remove interstitial from clerk-js

* feat(nextjs): Remove interstitial from authMiddleware

* feat(fastify): Remove interstitial

* feat(gatsby-plugin-clerk): Remove interstitial

* feat(remix): Remove interstitial

* feat(clerk-sdk-node): Remove interstitial

* fix(nextjs): Always respect redirect header if found

As it's possible that we trigger a redirect from authenticateRequest that isn't a handshake status (dev multi-domain sync, for example)

* chore(repo): Fix sdk tests

* fix(clerk-js): Fix tests related to db-jwt

* fix(clerk-js): Keep hasJustSynced check
Copy link

changeset-bot bot commented Dec 13, 2023

🦋 Changeset detected

Latest commit: 8f88da2

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 0 packages

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Comment on lines +128 to +133
if (
err instanceof TokenVerificationError &&
instanceType === 'development' &&
(err.reason === TokenVerificationErrorReason.TokenExpired ||
err.reason === TokenVerificationErrorReason.TokenNotActiveYet)
) {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Previously, we weren't re-throwing the error for production, which is incorrect. In the scenario where verification fails on the token from the handshake, production should treat this as a fatal error.

Comment on lines +197 to +198
const locationHeader = requestState.headers.get('location');
if (locationHeader) {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are a few scenarios where we pass a location header when the status is not a handshake. Notably, in development we strip the handshake query parameters.

@SokratisVidros SokratisVidros force-pushed the client_handshake_Refactor branch from 577b981 to 91404bc Compare December 13, 2023 08:53
Base automatically changed from client_handshake_Refactor to main December 13, 2023 09:27
@nikosdouvlis nikosdouvlis force-pushed the brk.feat/handshake-e2e-tests branch from 05f9bdf to ffd1cac Compare December 13, 2023 10:11
@nikosdouvlis nikosdouvlis merged commit 118a58b into main Dec 13, 2023
@nikosdouvlis nikosdouvlis deleted the brk.feat/handshake-e2e-tests branch December 13, 2023 10:40
octoper pushed a commit that referenced this pull request Dec 13, 2023
…#2331)

* feat(backend): Try the new Client Handshake mechanism

* feat(backend): Update authenticateRequest handler to support multi-domain handshake

* feat(repo): Introduce tests for client handshake (#2265)

* Test suite start

* feat(backend,nextjs,utils): Fix jest

* first test

* Fix bug in jwks cache for multiple runtime keys

* Add all the tests, including many failing

* Add all the tests, including many failing

* fix(shared): Correctly construct proxy URL

---------

Co-authored-by: Nikos Douvlis <[email protected]>
Co-authored-by: Bryce Kalow <[email protected]>

* chore(backend): Refactor authenticateRequest to clarify logic

* fix(backend): Fix options passing to authenticateRequest

* feat(backend): Add sec-fetch-dest check for satellite sync, adjust tests to support additional URLs

* feat(backend): Account for clock skew in dev, but still log error

* feat(backend): Refactor backend tests to account for recent refactoring to authenticateRequest

* feat(backend): Treat handshake payload as a signed jwt

* fix(backend): Add tests and adjust logic to ensure existing tests pass

* chore(backend): Refactor tests to conform to new method signature

* chore(repo): Add changeset

* feat(*): Drop interstitial (#2304)

* feat(backend): Remove interstitial endpoints

* feat(backend,types): Remove local interstitial script

* feat(types): Clean retheme types

* feat(backend): Remove interstitial and interstitial rules

* feat(clerk-js): Remove interstitial from clerk-js

* feat(nextjs): Remove interstitial from authMiddleware

* feat(fastify): Remove interstitial

* feat(gatsby-plugin-clerk): Remove interstitial

* feat(remix): Remove interstitial

* feat(clerk-sdk-node): Remove interstitial

* fix(nextjs): Always respect redirect header if found

As it's possible that we trigger a redirect from authenticateRequest that isn't a handshake status (dev multi-domain sync, for example)

* chore(repo): Fix sdk tests

* fix(clerk-js): Fix tests related to db-jwt

* fix(clerk-js): Keep hasJustSynced check

* chore(*): Fix linter

* chore(backend): Remove unused AuthErrorReason properties, destructure from authenticateContext

* chore(clerk-js): Remove unused @ts-expect-error directive

* feat(repo): Migrate handshake tests to e2e test suite

* fix(nextjs): Ensure we respect location header from authenticateRequest() regardless of auth status

* Create bright-ways-provide.md

* chore(clerk-sdk-node): Properly export createClerkClient

* chore(clerk-sdk-node): Properly export createClerkClient

* fix(nextjs): Fix undefined headers in tests

---------

Co-authored-by: Sokratis Vidros <[email protected]>
Co-authored-by: Colin Sidoti <[email protected]>
Co-authored-by: Nikos Douvlis <[email protected]>
Co-authored-by: Colin Sidoti <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants