Skip to content

Commit 83cd730

Browse files
authored
feat(clerk-js): __session cookie Partitioned attribute (#5514)
1 parent 0007106 commit 83cd730

File tree

6 files changed

+42
-9
lines changed

6 files changed

+42
-9
lines changed

.changeset/plain-crabs-move.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@clerk/clerk-js': minor
3+
---
4+
5+
Setting the Partitioned attribute on \_\_session cookie

packages/clerk-js/jest.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const config = {
77
globals: {
88
__PKG_NAME__: '@clerk/clerk-js',
99
__PKG_VERSION__: 'test',
10+
__BUILD_VARIANT_CHIPS__: false,
1011
},
1112

1213
testEnvironment: '<rootDir>/jest.jsdom-with-timezone.ts',

packages/clerk-js/rspack.config.js

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ const variants = {
1616
clerkHeadless: 'clerk.headless',
1717
clerkHeadlessBrowser: 'clerk.headless.browser',
1818
clerkLegacyBrowser: 'clerk.legacy.browser',
19+
clerkCHIPS: 'clerk.chips.browser',
1920
};
2021

2122
const variantToSourceFile = {
@@ -25,6 +26,7 @@ const variantToSourceFile = {
2526
[variants.clerkHeadless]: './src/index.headless.ts',
2627
[variants.clerkHeadlessBrowser]: './src/index.headless.browser.ts',
2728
[variants.clerkLegacyBrowser]: './src/index.legacy.browser.ts',
29+
[variants.clerkCHIPS]: './src/index.chips.ts',
2830
};
2931

3032
/**
@@ -53,6 +55,7 @@ const common = ({ mode, variant, disableRHC = false }) => {
5355
*/
5456
__BUILD_FLAG_KEYLESS_UI__: isDevelopment(mode),
5557
__BUILD_DISABLE_RHC__: JSON.stringify(disableRHC),
58+
__BUILD_VARIANT_CHIPS__: variant === variants.clerkCHIPS,
5659
}),
5760
new rspack.EnvironmentPlugin({
5861
CLERK_ENV: mode,
@@ -100,22 +103,24 @@ const common = ({ mode, variant, disableRHC = false }) => {
100103
signUp: {
101104
minChunks: 1,
102105
name: 'signup',
103-
test: module => module.resource && module.resource.includes('/ui/components/SignUp'),
106+
test: module => !!(module.resource && module.resource.includes('/ui/components/SignUp')),
104107
},
105108
paymentSources: {
106109
minChunks: 1,
107110
name: 'paymentSources',
108111
test: module =>
109-
module.resource &&
110-
(module.resource.includes('/ui/components/PaymentSources') ||
111-
// Include `@stripe/react-stripe-js` and `@stripe/stripe-js` in the checkout chunk
112-
module.resource.includes('/node_modules/@stripe')),
112+
!!(
113+
module.resource &&
114+
(module.resource.includes('/ui/components/PaymentSources') ||
115+
// Include `@stripe/react-stripe-js` and `@stripe/stripe-js` in the checkout chunk
116+
module.resource.includes('/node_modules/@stripe'))
117+
),
113118
},
114119
common: {
115120
minChunks: 1,
116121
name: 'ui-common',
117122
priority: -20,
118-
test: module => module.resource && !module.resource.includes('/ui/components'),
123+
test: module => !!(module.resource && !module.resource.includes('/ui/components')),
119124
},
120125
defaultVendors: {
121126
minChunks: 1,
@@ -406,6 +411,13 @@ const prodConfig = ({ mode, env, analysis }) => {
406411
// externalsForHeadless(),
407412
);
408413

414+
const clerkCHIPS = merge(
415+
entryForVariant(variants.clerkCHIPS),
416+
common({ mode, variant: variants.clerkCHIPS }),
417+
commonForProd(),
418+
commonForProdChunked(),
419+
);
420+
409421
const clerkEsm = merge(
410422
entryForVariant(variants.clerk),
411423
common({ mode, variant: variants.clerk }),
@@ -513,6 +525,7 @@ const prodConfig = ({ mode, env, analysis }) => {
513525
clerkLegacyBrowser,
514526
clerkHeadless,
515527
clerkHeadlessBrowser,
528+
clerkCHIPS,
516529
clerkEsm,
517530
clerkEsmNoRHC,
518531
clerkCjs,
@@ -614,6 +627,11 @@ const devConfig = ({ mode, env }) => {
614627
commonForDev(),
615628
// externalsForHeadless(),
616629
),
630+
[variants.clerkCHIPS]: merge(
631+
entryForVariant(variants.clerkCHIPS),
632+
common({ mode, variant: variants.clerkCHIPS }),
633+
commonForDev(),
634+
),
617635
};
618636

619637
if (!entryToConfigMap[variant]) {

packages/clerk-js/src/core/auth/cookies/session.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,24 @@ export const createSessionCookie = (cookieSuffix: string): SessionCookieHandler
2323
const suffixedSessionCookie = createCookieHandler(getSuffixedCookieName(SESSION_COOKIE_NAME, cookieSuffix));
2424

2525
const remove = () => {
26-
suffixedSessionCookie.remove();
2726
sessionCookie.remove();
27+
suffixedSessionCookie.remove();
2828
};
2929

3030
const set = (token: string) => {
3131
const expires = addYears(Date.now(), 1);
3232
const sameSite = inCrossOriginIframe() ? 'None' : 'Lax';
3333
const secure = getSecureAttribute(sameSite);
34+
const partitioned = __BUILD_VARIANT_CHIPS__ && secure && sameSite === 'None';
35+
36+
// If setting Partitioned to true, remove the existing session cookies.
37+
// This is to avoid conflicts with the same cookie name without Partitioned attribute.
38+
if (partitioned) {
39+
remove();
40+
}
3441

35-
suffixedSessionCookie.set(token, { expires, sameSite, secure });
36-
sessionCookie.set(token, { expires, sameSite, secure });
42+
sessionCookie.set(token, { expires, sameSite, secure, partitioned });
43+
suffixedSessionCookie.set(token, { expires, sameSite, secure, partitioned });
3744
};
3845

3946
const get = () => suffixedSessionCookie.get() || sessionCookie.get();

packages/clerk-js/src/global.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ declare const __DEV__: boolean;
1111
* Build time feature flags.
1212
*/
1313
declare const __BUILD_DISABLE_RHC__: string;
14+
declare const __BUILD_VARIANT_CHIPS__: boolean;
1415

1516
interface Window {
1617
__unstable__onBeforeSetActive: (intent?: 'sign-out') => Promise<void> | void;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './index';

0 commit comments

Comments
 (0)