@clerk/shared
Version:
Internal package utils used by the Clerk SDKs
1 lines • 3.25 kB
Source Map (JSON)
{"version":3,"file":"queryParams.mjs","names":[],"sources":["../../../src/internal/clerk-js/queryParams.ts"],"sourcesContent":["import type { EmailLinkErrorCodeStatus } from '../../error';\nimport { CLERK_NETLIFY_CACHE_BUST_PARAM } from '../../netlifyCacheHandler';\nimport { CLERK_SATELLITE_URL, CLERK_SUFFIXED_COOKIES, CLERK_SYNCED } from './constants';\n\nconst _ClerkQueryParams = [\n '__clerk_status',\n '__clerk_created_session',\n '__clerk_invitation_token',\n '__clerk_ticket',\n '__clerk_modal_state',\n '__clerk_handshake',\n '__clerk_handshake_nonce',\n '__clerk_help',\n CLERK_NETLIFY_CACHE_BUST_PARAM,\n CLERK_SYNCED,\n CLERK_SATELLITE_URL,\n CLERK_SUFFIXED_COOKIES,\n] as const;\n\ntype ClerkQueryParam = (typeof _ClerkQueryParams)[number];\n\n/**\n * Used for email link verification\n */\nexport type VerifyTokenStatus = 'verified' | (typeof EmailLinkErrorCodeStatus)[keyof typeof EmailLinkErrorCodeStatus];\n\n/**\n * Used for instance invitations and organization invitations\n */\ntype TicketStatus = 'sign_in' | 'sign_up' | 'complete';\n\ntype ClerkQueryParamsToValuesMap = {\n __clerk_status: TicketStatus | VerifyTokenStatus;\n} & Record<(typeof _ClerkQueryParams)[number], string>;\n\n/**\n *\n */\nexport function getClerkQueryParam<T extends ClerkQueryParam>(param: T): ClerkQueryParamsToValuesMap[T] | null {\n const val = new URL(window.location.href).searchParams.get(param);\n return val ? (val as ClerkQueryParamsToValuesMap[T]) : null;\n}\n\n/**\n *\n */\nexport function removeClerkQueryParam<T extends ClerkQueryParam>(param: T) {\n const url = new URL(window.location.href);\n if (url.searchParams.has(param)) {\n url.searchParams.delete(param);\n window.history.replaceState(window.history.state, '', url);\n }\n return;\n}\n\n/**\n * Extracts and forwards Clerk query parameters from the current URL to a new URLSearchParams object.\n * This is useful when navigating between pages while preserving Clerk-specific query parameters.\n *\n * @param params - Optional URLSearchParams object to add the parameters to. If not provided, a new one will be created.\n * @returns A URLSearchParams object containing the forwarded Clerk parameters\n */\nexport function forwardClerkQueryParams(params?: URLSearchParams): URLSearchParams {\n const currentSearchParams = new URLSearchParams(window.location.search);\n const newParams = params || new URLSearchParams();\n\n for (const param of _ClerkQueryParams) {\n const value = currentSearchParams.get(param);\n if (value) {\n newParams.set(param, value);\n }\n }\n\n return newParams;\n}\n"],"mappings":";;;;AAIA,MAAM,oBAAoB;CACxB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;;;;AAqBA,SAAgB,mBAA8C,OAAiD;CAC7G,MAAM,MAAM,IAAI,IAAI,OAAO,SAAS,IAAI,CAAC,CAAC,aAAa,IAAI,KAAK;CAChE,OAAO,MAAO,MAAyC;AACzD;;;;AAKA,SAAgB,sBAAiD,OAAU;CACzE,MAAM,MAAM,IAAI,IAAI,OAAO,SAAS,IAAI;CACxC,IAAI,IAAI,aAAa,IAAI,KAAK,GAAG;EAC/B,IAAI,aAAa,OAAO,KAAK;EAC7B,OAAO,QAAQ,aAAa,OAAO,QAAQ,OAAO,IAAI,GAAG;CAC3D;AAEF;;;;;;;;AASA,SAAgB,wBAAwB,QAA2C;CACjF,MAAM,sBAAsB,IAAI,gBAAgB,OAAO,SAAS,MAAM;CACtE,MAAM,YAAY,UAAU,IAAI,gBAAgB;CAEhD,KAAK,MAAM,SAAS,mBAAmB;EACrC,MAAM,QAAQ,oBAAoB,IAAI,KAAK;EAC3C,IAAI,OACF,UAAU,IAAI,OAAO,KAAK;CAE9B;CAEA,OAAO;AACT"}