Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
5f36e29
feat(clerk-js): __session cookie Partitioned attribute
jacekradko Apr 2, 2025
d30b121
changeset
jacekradko Apr 2, 2025
09548bb
wip
jacekradko Apr 7, 2025
3a8913c
Merge branch 'main' into feat/session-cookie-partitioned
jacekradko Apr 8, 2025
005cfde
partition cookie in secure context
jacekradko Apr 8, 2025
65c7f90
Unset existing session cookies before setting them with Partitioned a…
jacekradko Apr 8, 2025
3a0fffc
keeping order consistent
jacekradko Apr 8, 2025
23e505c
Merge branch 'main' into feat/session-cookie-partitioned
jacekradko Apr 8, 2025
11eb8fa
wip
jacekradko Apr 8, 2025
e60b313
clean up
jacekradko Apr 9, 2025
afaf699
Merge branch 'main' into feat/session-cookie-partitioned
jacekradko Apr 9, 2025
f296990
Merge branch 'main' into feat/session-cookie-partitioned
jacekradko Apr 10, 2025
ce5bd65
bundle
jacekradko Apr 10, 2025
58234a9
Merge branch 'main' into feat/session-cookie-partitioned
jacekradko Apr 16, 2025
a7a8d16
Merge branch 'main' into feat/session-cookie-partitioned
jacekradko Apr 21, 2025
a1a98de
Merge branch 'main' into feat/session-cookie-partitioned
jacekradko Apr 21, 2025
735662d
make sure SameSite=none when setting partitioned cookies
jacekradko Apr 21, 2025
53e6785
setup chips variant
jacekradko Apr 24, 2025
76f33cb
entry point
jacekradko Apr 24, 2025
0989010
add CHIPS env
jacekradko Apr 24, 2025
ea5478c
switch based on CHIPS
jacekradko Apr 24, 2025
2137ae9
wip
jacekradko Apr 25, 2025
d67db33
Merge branch 'main' into feat/session-cookie-partitioned
jacekradko Apr 25, 2025
0c62cd0
rename production artifact
jacekradko Apr 25, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/plain-crabs-move.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@clerk/clerk-js': minor
---

Setting the Partitioned attribute on \_\_session cookie
1 change: 1 addition & 0 deletions packages/clerk-js/jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ const config = {
globals: {
__PKG_NAME__: '@clerk/clerk-js',
__PKG_VERSION__: 'test',
__BUILD_VARIANT_CHIPS__: false,
},

testEnvironment: '<rootDir>/jest.jsdom-with-timezone.ts',
Expand Down
30 changes: 24 additions & 6 deletions packages/clerk-js/rspack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ const variants = {
clerkHeadless: 'clerk.headless',
clerkHeadlessBrowser: 'clerk.headless.browser',
clerkLegacyBrowser: 'clerk.legacy.browser',
clerkCHIPS: 'clerk.chips.browser',
};

const variantToSourceFile = {
Expand All @@ -25,6 +26,7 @@ const variantToSourceFile = {
[variants.clerkHeadless]: './src/index.headless.ts',
[variants.clerkHeadlessBrowser]: './src/index.headless.browser.ts',
[variants.clerkLegacyBrowser]: './src/index.legacy.browser.ts',
[variants.clerkCHIPS]: './src/index.chips.ts',
Copy link
Member

Choose a reason for hiding this comment

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

Are we actually shipping this variant or it is a temporary thing ?

Copy link
Member Author

Choose a reason for hiding this comment

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

We would ship it and pin specific instances to it

};

/**
Expand Down Expand Up @@ -53,6 +55,7 @@ const common = ({ mode, variant, disableRHC = false }) => {
*/
__BUILD_FLAG_KEYLESS_UI__: isDevelopment(mode),
__BUILD_DISABLE_RHC__: JSON.stringify(disableRHC),
__BUILD_VARIANT_CHIPS__: variant === variants.clerkCHIPS,
}),
new rspack.EnvironmentPlugin({
CLERK_ENV: mode,
Expand Down Expand Up @@ -100,22 +103,24 @@ const common = ({ mode, variant, disableRHC = false }) => {
signUp: {
minChunks: 1,
name: 'signup',
test: module => module.resource && module.resource.includes('/ui/components/SignUp'),
test: module => !!(module.resource && module.resource.includes('/ui/components/SignUp')),
},
paymentSources: {
minChunks: 1,
name: 'paymentSources',
test: module =>
module.resource &&
(module.resource.includes('/ui/components/PaymentSources') ||
// Include `@stripe/react-stripe-js` and `@stripe/stripe-js` in the checkout chunk
module.resource.includes('/node_modules/@stripe')),
!!(
module.resource &&
(module.resource.includes('/ui/components/PaymentSources') ||
// Include `@stripe/react-stripe-js` and `@stripe/stripe-js` in the checkout chunk
module.resource.includes('/node_modules/@stripe'))
),
},
common: {
minChunks: 1,
name: 'ui-common',
priority: -20,
test: module => module.resource && !module.resource.includes('/ui/components'),
test: module => !!(module.resource && !module.resource.includes('/ui/components')),
},
defaultVendors: {
minChunks: 1,
Expand Down Expand Up @@ -406,6 +411,13 @@ const prodConfig = ({ mode, env, analysis }) => {
// externalsForHeadless(),
);

const clerkCHIPS = merge(
entryForVariant(variants.clerkCHIPS),
common({ mode, variant: variants.clerkCHIPS }),
commonForProd(),
commonForProdChunked(),
);

const clerkEsm = merge(
entryForVariant(variants.clerk),
common({ mode, variant: variants.clerk }),
Expand Down Expand Up @@ -513,6 +525,7 @@ const prodConfig = ({ mode, env, analysis }) => {
clerkLegacyBrowser,
clerkHeadless,
clerkHeadlessBrowser,
clerkCHIPS,
clerkEsm,
clerkEsmNoRHC,
clerkCjs,
Expand Down Expand Up @@ -614,6 +627,11 @@ const devConfig = ({ mode, env }) => {
commonForDev(),
// externalsForHeadless(),
),
[variants.clerkCHIPS]: merge(
entryForVariant(variants.clerkCHIPS),
common({ mode, variant: variants.clerkCHIPS }),
commonForDev(),
),
};

if (!entryToConfigMap[variant]) {
Expand Down
13 changes: 10 additions & 3 deletions packages/clerk-js/src/core/auth/cookies/session.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,24 @@ export const createSessionCookie = (cookieSuffix: string): SessionCookieHandler
const suffixedSessionCookie = createCookieHandler(getSuffixedCookieName(SESSION_COOKIE_NAME, cookieSuffix));

const remove = () => {
suffixedSessionCookie.remove();
sessionCookie.remove();
suffixedSessionCookie.remove();
};

const set = (token: string) => {
const expires = addYears(Date.now(), 1);
const sameSite = inCrossOriginIframe() ? 'None' : 'Lax';
const secure = getSecureAttribute(sameSite);
const partitioned = __BUILD_VARIANT_CHIPS__ && secure && sameSite === 'None';

// If setting Partitioned to true, remove the existing session cookies.
// This is to avoid conflicts with the same cookie name without Partitioned attribute.
if (partitioned) {
remove();
}

suffixedSessionCookie.set(token, { expires, sameSite, secure });
sessionCookie.set(token, { expires, sameSite, secure });
sessionCookie.set(token, { expires, sameSite, secure, partitioned });
suffixedSessionCookie.set(token, { expires, sameSite, secure, partitioned });
};

const get = () => suffixedSessionCookie.get() || sessionCookie.get();
Expand Down
1 change: 1 addition & 0 deletions packages/clerk-js/src/global.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ declare const __DEV__: boolean;
* Build time feature flags.
*/
declare const __BUILD_DISABLE_RHC__: string;
declare const __BUILD_VARIANT_CHIPS__: boolean;

interface Window {
__unstable__onBeforeSetActive: (intent?: 'sign-out') => Promise<void> | void;
Expand Down
1 change: 1 addition & 0 deletions packages/clerk-js/src/index.chips.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './index';