{"version":3,"file":"devBrowser.mjs","names":[],"sources":["../src/devBrowser.ts"],"sourcesContent":["export const DEV_BROWSER_KEY = '__clerk_db_jwt';\nexport const DEV_BROWSER_HEADER = 'Clerk-Db-Jwt';\n\nexport function setDevBrowserInURL(url: URL, devBrowser: string): URL {\n  const resultURL = new URL(url);\n\n  // extract & strip existing dev browser from search\n  const existing = resultURL.searchParams.get(DEV_BROWSER_KEY);\n  resultURL.searchParams.delete(DEV_BROWSER_KEY);\n\n  // Existing value takes precedence\n  const value = existing || devBrowser;\n\n  if (value) {\n    resultURL.searchParams.set(DEV_BROWSER_KEY, value);\n  }\n\n  return resultURL;\n}\n\n/**\n * Gets the __clerk_db_jwt dev browser from either the hash or the search\n * Side effect:\n * Removes __clerk_db_jwt from the URL (hash and searchParams) and updates the browser history\n */\nexport function extractDevBrowserFromURL(url: URL): string {\n  const devBrowser = readDevBrowserFromSearchParams(url);\n  const cleanUrl = removeDevBrowserFromURL(url);\n  if (cleanUrl.href !== url.href && typeof globalThis.history !== 'undefined') {\n    globalThis.history.replaceState(null, '', cleanUrl);\n  }\n  return devBrowser;\n}\n\nconst readDevBrowserFromSearchParams = (url: URL) => {\n  return url.searchParams.get(DEV_BROWSER_KEY) || '';\n};\n\nconst removeDevBrowserFromURL = (url: URL) => {\n  return removeDevBrowserFromURLSearchParams(removeLegacyDevBrowser(url));\n};\n\nconst removeDevBrowserFromURLSearchParams = (_url: URL) => {\n  const url = new URL(_url);\n  url.searchParams.delete(DEV_BROWSER_KEY);\n  return url;\n};\n\n/**\n * Removes the __clerk_db_jwt dev browser from the URL hash, as well as\n * the legacy __dev_session from the URL searchParams\n * We no longer need to use this value, however, we should remove it from the URL\n * Existing v4 apps will write the dev browser to the hash and the search params in order to ensure\n * backwards compatibility with older v4 apps.\n * The only use case where this is needed now is when a user upgrades to clerk@5 locally\n * without changing the component's version on their dashboard.\n * In this scenario, the AP@4 -> localhost@5 redirect will still have the value in the hash,\n * in which case we need to remove it.\n */\nconst removeLegacyDevBrowser = (_url: URL) => {\n  const DEV_BROWSER_MARKER_REGEXP = /__clerk_db_jwt\\[(.*)\\]/;\n  const DEV_BROWSER_LEGACY_KEY = '__dev_session';\n  const url = new URL(_url);\n  url.searchParams.delete(DEV_BROWSER_LEGACY_KEY);\n  url.hash = decodeURI(url.hash).replace(DEV_BROWSER_MARKER_REGEXP, '');\n  if (url.href.endsWith('#')) {\n    url.hash = '';\n  }\n  return url;\n};\n"],"mappings":";AAAA,MAAa,kBAAkB;AAC/B,MAAa,qBAAqB;AAElC,SAAgB,mBAAmB,KAAU,YAAyB;CACpE,MAAM,YAAY,IAAI,IAAI,GAAG;CAG7B,MAAM,WAAW,UAAU,aAAa,IAAI,eAAe;CAC3D,UAAU,aAAa,OAAO,eAAe;CAG7C,MAAM,QAAQ,YAAY;CAE1B,IAAI,OACF,UAAU,aAAa,IAAI,iBAAiB,KAAK;CAGnD,OAAO;AACT;;;;;;AAOA,SAAgB,yBAAyB,KAAkB;CACzD,MAAM,aAAa,+BAA+B,GAAG;CACrD,MAAM,WAAW,wBAAwB,GAAG;CAC5C,IAAI,SAAS,SAAS,IAAI,QAAQ,OAAO,WAAW,YAAY,aAC9D,WAAW,QAAQ,aAAa,MAAM,IAAI,QAAQ;CAEpD,OAAO;AACT;AAEA,MAAM,kCAAkC,QAAa;CACnD,OAAO,IAAI,aAAa,oBAAmB,KAAK;AAClD;AAEA,MAAM,2BAA2B,QAAa;CAC5C,OAAO,oCAAoC,uBAAuB,GAAG,CAAC;AACxE;AAEA,MAAM,uCAAuC,SAAc;CACzD,MAAM,MAAM,IAAI,IAAI,IAAI;CACxB,IAAI,aAAa,OAAO,eAAe;CACvC,OAAO;AACT;;;;;;;;;;;;AAaA,MAAM,0BAA0B,SAAc;CAC5C,MAAM,4BAA4B;CAClC,MAAM,yBAAyB;CAC/B,MAAM,MAAM,IAAI,IAAI,IAAI;CACxB,IAAI,aAAa,OAAO,sBAAsB;CAC9C,IAAI,OAAO,UAAU,IAAI,IAAI,CAAC,CAAC,QAAQ,2BAA2B,EAAE;CACpE,IAAI,IAAI,KAAK,SAAS,GAAG,GACvB,IAAI,OAAO;CAEb,OAAO;AACT"}