Skip to content

Commit eadadee

Browse files
committed
fix(chrome-extention): update req/res handlers
1 parent d7ad7ba commit eadadee

4 files changed

Lines changed: 59 additions & 25 deletions

File tree

packages/chrome-extension/src/internal/clerk.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@ export async function createClerkClient({
7676

7777
// Create Clerk instance
7878
clerk = new Clerk(publishableKey);
79-
clerk.__unstable__onAfterResponse(requestHandler(jwt));
80-
clerk.__unstable__onAfterResponse(responseHandler(jwt));
79+
clerk.__unstable__onAfterResponse(responseHandler(jwt, { isProd }));
80+
clerk.__unstable__onBeforeRequest(requestHandler(jwt, { isProd }));
8181

8282
return clerk;
8383
}

packages/chrome-extension/src/internal/constants.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@ export const CLIENT_JWT_KEY = '__client';
22
export const STORAGE_KEY_CLIENT_JWT = '__clerk_client_jwt';
33
export const DEFAULT_LOCAL_HOST_PERMISSION = 'http://localhost';
44
export const AUTH_HEADER = 'Authorization';
5+
export const AUTH_HEADER_DEV = '__clerk_db_jwt';
6+
export const SESSION_ID_HEADER_DEV = '_clerk_session_id';

packages/chrome-extension/src/internal/utils/request-handler.ts

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,39 @@ import { AUTH_HEADER } from '../constants';
44
import type { JWTHandler } from './jwt-handler';
55

66
type Handler = Parameters<Clerk['__unstable__onBeforeRequest']>[0];
7+
type Req = Parameters<Handler>[0];
78

89
/** Save the appropriate JWT from the response to storage */
9-
export function requestHandler(jwtHandler: JWTHandler) {
10+
export function requestHandler(jwtHandler: JWTHandler, { isProd }: { isProd: boolean }) {
1011
const handler: Handler = async requestInit => {
1112
requestInit.credentials = 'omit';
1213

1314
const currentJWT = await jwtHandler.get();
1415

1516
if (!currentJWT) {
16-
requestInit.url?.searchParams.append('_is_native', '1');
17-
return;
17+
unauthenticatedHandler(requestInit);
18+
} else if (isProd) {
19+
prodHandler(requestInit, currentJWT);
20+
console.log('requestHandler (authHeader):', AUTH_HEADER, `Bearer ${currentJWT}`);
21+
} else {
22+
devHandler(requestInit, currentJWT);
1823
}
1924

20-
requestInit.url?.searchParams.append('_is_native', '1');
21-
(requestInit.headers as Headers).set(AUTH_HEADER, `Bearer ${currentJWT}`);
22-
2325
console.log('requestHandler (searchParams):', requestInit.url?.searchParams.toString());
24-
console.log('requestHandler (authHeader):', AUTH_HEADER, `Bearer ${currentJWT}`);
2526
};
2627

2728
return handler;
2829
}
30+
31+
function unauthenticatedHandler(requestInit: Req) {
32+
requestInit.url?.searchParams.append('_is_native', '1');
33+
}
34+
35+
function devHandler(requestInit: Req, jwt: string) {
36+
requestInit.url?.searchParams.append('__clerk_db_jwt', jwt);
37+
}
38+
39+
function prodHandler(requestInit: Req, jwt: string) {
40+
requestInit.url?.searchParams.append('_is_native', '1');
41+
(requestInit.headers as Headers).set(AUTH_HEADER, `Bearer ${jwt}`);
42+
}
Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,47 @@
11
import type { Clerk } from '@clerk/clerk-js';
22

3-
import { AUTH_HEADER } from '../constants';
3+
import { AUTH_HEADER, AUTH_HEADER_DEV } from '../constants';
44
import type { JWTHandler } from './jwt-handler';
55

66
type Handler = Parameters<Clerk['__unstable__onAfterResponse']>[0];
7+
type Res = Parameters<Handler>[1];
78

89
/** Append appropriate query params to all Clerk requests */
9-
export function responseHandler(jwtHandler: JWTHandler) {
10+
export function responseHandler(jwtHandler: JWTHandler, { isProd }: { isProd: boolean }) {
1011
const handler: Handler = async (_, response) => {
11-
const authHeader = response?.headers.get(AUTH_HEADER);
12+
if (isProd) {
13+
await prodHandler(response, jwtHandler);
14+
} else {
15+
await devHandler(response, jwtHandler);
16+
}
17+
};
18+
return handler;
19+
}
20+
21+
async function devHandler(response: Res, jwtHandler: JWTHandler) {
22+
const header = response?.headers.get(AUTH_HEADER_DEV);
23+
console.log(`responseHandler (${AUTH_HEADER_DEV}):`, header);
1224

13-
console.log('responseHandler (authHeader):', authHeader);
25+
if (header) {
26+
await jwtHandler.set(header);
27+
} else {
28+
await jwtHandler.remove();
29+
}
30+
}
1431

15-
if (authHeader?.startsWith('Bearer')) {
16-
const newJWT = authHeader.split(' ')[1] || undefined;
32+
async function prodHandler(response: Res, jwtHandler: JWTHandler) {
33+
const header = response?.headers.get(AUTH_HEADER);
34+
console.log(`responseHandler (${AUTH_HEADER}):`, header);
1735

18-
if (newJWT) {
19-
await jwtHandler.set(newJWT);
20-
} else {
21-
await jwtHandler.remove();
22-
}
23-
} else if (authHeader) {
24-
await jwtHandler.set(authHeader);
25-
}
26-
};
36+
if (header?.startsWith('Bearer')) {
37+
const jwt = header.split(' ')[1] || undefined;
2738

28-
return handler;
39+
if (jwt) {
40+
await jwtHandler.set(jwt);
41+
} else {
42+
await jwtHandler.remove();
43+
}
44+
} else if (header) {
45+
await jwtHandler.set(header);
46+
}
2947
}

0 commit comments

Comments
 (0)