{"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,IAAI;CAG9B,MAAM,WAAW,UAAU,aAAa,IAAI,gBAAgB;AAC5D,WAAU,aAAa,OAAO,gBAAgB;CAG9C,MAAM,QAAQ,YAAY;AAE1B,KAAI,MACF,WAAU,aAAa,IAAI,iBAAiB,MAAM;AAGpD,QAAO;;;;;;;AAQT,SAAgB,yBAAyB,KAAkB;CACzD,MAAM,aAAa,+BAA+B,IAAI;CACtD,MAAM,WAAW,wBAAwB,IAAI;AAC7C,KAAI,SAAS,SAAS,IAAI,QAAQ,OAAO,WAAW,YAAY,YAC9D,YAAW,QAAQ,aAAa,MAAM,IAAI,SAAS;AAErD,QAAO;;AAGT,MAAM,kCAAkC,QAAa;AACnD,QAAO,IAAI,aAAa,IAAI,gBAAgB,IAAI;;AAGlD,MAAM,2BAA2B,QAAa;AAC5C,QAAO,oCAAoC,uBAAuB,IAAI,CAAC;;AAGzE,MAAM,uCAAuC,SAAc;CACzD,MAAM,MAAM,IAAI,IAAI,KAAK;AACzB,KAAI,aAAa,OAAO,gBAAgB;AACxC,QAAO;;;;;;;;;;;;;AAcT,MAAM,0BAA0B,SAAc;CAC5C,MAAM,4BAA4B;CAClC,MAAM,yBAAyB;CAC/B,MAAM,MAAM,IAAI,IAAI,KAAK;AACzB,KAAI,aAAa,OAAO,uBAAuB;AAC/C,KAAI,OAAO,UAAU,IAAI,KAAK,CAAC,QAAQ,2BAA2B,GAAG;AACrE,KAAI,IAAI,KAAK,SAAS,IAAI,CACxB,KAAI,OAAO;AAEb,QAAO"}