forked from clerk/javascript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdevBrowser.ts
More file actions
56 lines (46 loc) · 1.88 KB
/
Copy pathdevBrowser.ts
File metadata and controls
56 lines (46 loc) · 1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
export const DEV_BROWSER_SSO_JWT_PARAMETER = '__dev_session';
export const DEV_BROWSER_JWT_MARKER = '__clerk_db_jwt';
const DEV_BROWSER_JWT_MARKER_REGEXP = /__clerk_db_jwt\[(.*)\]/;
// Sets the dev_browser JWT in the hash or the search
export function setDevBrowserJWTInURL(url: URL, jwt: string, opts = { hash: true }): URL {
const resultURL = new URL(url);
const jwtFromHash = extractDevBrowserJWTFromURLHash(resultURL);
const jwtFromSearch = extractDevBrowserJWTFromURLSearchParams(resultURL);
// Existing jwt takes precedence
const jwtToSet = jwtFromHash || jwtFromSearch || jwt;
if (jwtToSet) {
resultURL.searchParams.append(DEV_BROWSER_SSO_JWT_PARAMETER, jwtToSet);
resultURL.searchParams.append(DEV_BROWSER_JWT_MARKER, jwtToSet);
if (opts.hash) {
resultURL.hash = resultURL.hash + `${DEV_BROWSER_JWT_MARKER}[${jwtToSet}]`;
}
}
return resultURL;
}
function extractDevBrowserJWTFromHash(hash: string): string {
const matches = hash.match(DEV_BROWSER_JWT_MARKER_REGEXP);
return matches ? matches[1] : '';
}
/**
* Extract & strip existing jwt from hash
* Side effect: Removes dev browser from the url hash
**/
export function extractDevBrowserJWTFromURLHash(url: URL) {
const jwt = extractDevBrowserJWTFromHash(url.hash);
url.hash = url.hash.replace(DEV_BROWSER_JWT_MARKER_REGEXP, '');
if (url.href.endsWith('#')) {
url.hash = '';
}
return jwt;
}
/**
* Extract & strip existing jwt from search params
* Side effect: Removes dev browser from the search params
**/
export function extractDevBrowserJWTFromURLSearchParams(url: URL) {
const jwtFromDevSession = url.searchParams.get(DEV_BROWSER_SSO_JWT_PARAMETER);
url.searchParams.delete(DEV_BROWSER_SSO_JWT_PARAMETER);
const jwtFromClerkDbJwt = url.searchParams.get(DEV_BROWSER_JWT_MARKER);
url.searchParams.delete(DEV_BROWSER_JWT_MARKER);
return jwtFromDevSession || jwtFromClerkDbJwt || '';
}