{"version":3,"file":"src.mjs","names":[],"sources":["../src/cookie.ts","../src/url.ts","../src/embed.ts","../src/index.ts"],"sourcesContent":["export function getCookie(name: string): string | null {\n  if (typeof document === \"undefined\") {\n    return null;\n  }\n\n  const cookies = document.cookie.split(\";\");\n  for (const cookie of cookies) {\n    const [key, ...rest] = cookie.split(\"=\");\n    if (key?.trim() === name) {\n      return decodeURIComponent(rest.join(\"=\"));\n    }\n  }\n\n  return null;\n}\n\nexport function setCookie(\n  name: string,\n  value: string,\n  options: {\n    maxAge?: number;\n    path?: string;\n    domain?: string;\n    sameSite?: \"Strict\" | \"Lax\" | \"None\";\n    secure?: boolean;\n  } = {}\n): void {\n  if (typeof document === \"undefined\") {\n    return;\n  }\n\n  const parts = [`${encodeURIComponent(name)}=${encodeURIComponent(value)}`];\n\n  if (options.maxAge !== undefined) {\n    parts.push(`max-age=${options.maxAge}`);\n  }\n  if (options.path) {\n    parts.push(`path=${options.path}`);\n  }\n  if (options.domain) {\n    parts.push(`domain=${options.domain}`);\n  }\n  if (options.sameSite) {\n    parts.push(`SameSite=${options.sameSite}`);\n  }\n  if (options.secure) {\n    parts.push(\"Secure\");\n  }\n\n  // oxlint-disable-next-line unicorn/no-document-cookie\n  document.cookie = parts.join(\"; \");\n}\n\nexport function deleteCookie(\n  name: string,\n  options: { path?: string; domain?: string } = {}\n): void {\n  if (typeof document === \"undefined\") {\n    return;\n  }\n\n  const parts = [`${encodeURIComponent(name)}=`, \"max-age=0\"];\n\n  if (options.path) {\n    parts.push(`path=${options.path}`);\n  }\n  if (options.domain) {\n    parts.push(`domain=${options.domain}`);\n  }\n\n  // oxlint-disable-next-line unicorn/no-document-cookie\n  document.cookie = parts.join(\"; \");\n}\n","export function getUrlParam(name: string): string | null {\n  if (typeof window === \"undefined\") {\n    return null;\n  }\n\n  const params = new URLSearchParams(window.location.search);\n  return params.get(name);\n}\n\nexport function removeUrlParam(name: string): void {\n  if (typeof window === \"undefined\") {\n    return;\n  }\n\n  const url = new URL(window.location.href);\n  url.searchParams.delete(name);\n  window.history.replaceState(window.history.state, \"\", url.toString());\n}\n","import type { RefportEmbedInstance, RefportEmbedOptions } from \"./types\";\n\nconst DEFAULT_BASE_URL = \"https://app.refport.co\";\n\nexport function createEmbed(\n  target: HTMLElement,\n  options: RefportEmbedOptions\n): RefportEmbedInstance {\n  const {\n    token,\n    theme,\n    cssVars,\n    onError,\n    baseUrl = DEFAULT_BASE_URL,\n  } = options;\n\n  const params = new URLSearchParams();\n  params.set(\"token\", token);\n  params.set(\"dynamicHeight\", \"true\");\n  if (theme) {\n    params.set(\"theme\", theme);\n  }\n  if (cssVars) {\n    params.set(\"cssVars\", JSON.stringify(cssVars));\n  }\n\n  const container = document.createElement(\"div\");\n  container.style.width = \"100%\";\n\n  const iframe = document.createElement(\"iframe\");\n  iframe.src = `${baseUrl}/embed/referrals?${params.toString()}`;\n  iframe.style.width = \"100%\";\n  iframe.style.height = \"400px\";\n  iframe.style.border = \"none\";\n  iframe.allow = \"clipboard-write\";\n  iframe.title = \"Refport Referral Portal\";\n\n  container.append(iframe);\n  target.append(container);\n\n  function handleMessage(event: MessageEvent) {\n    if (typeof event.data !== \"object\" || !event.data) {\n      return;\n    }\n\n    const { event: eventType, data } = event.data as {\n      event?: string;\n      data?: { height?: number; code?: string; message?: string };\n    };\n\n    if (eventType === \"PAGE_HEIGHT\" && typeof data?.height === \"number\") {\n      iframe.style.height = `${data.height}px`;\n    }\n\n    if (eventType === \"ERROR\" && data?.code && data.message) {\n      onError?.({ code: data.code, message: data.message });\n    }\n  }\n\n  window.addEventListener(\"message\", handleMessage);\n\n  function destroy() {\n    window.removeEventListener(\"message\", handleMessage);\n    container.remove();\n  }\n\n  return { container, destroy, iframe };\n}\n","import { deleteCookie, getCookie, setCookie } from \"./cookie\";\nimport type { RefportTrackingOptions, RefportTrackingResult } from \"./types\";\nimport { getUrlParam, removeUrlParam } from \"./url\";\n\nconst DEFAULTS = {\n  cleanUrl: true,\n  cookieName: \"refp_id\",\n  // 90 days\n  maxAge: 7_776_000,\n  paramName: \"refp_id\",\n  path: \"/\",\n  sameSite: \"Lax\" as const,\n};\n\nexport function init(\n  options: RefportTrackingOptions = {}\n): RefportTrackingResult {\n  const config = { ...DEFAULTS, ...options };\n  const secure =\n    config.secure ??\n    (typeof location !== \"undefined\" && location.protocol === \"https:\");\n\n  const paramValue = getUrlParam(config.paramName);\n\n  if (paramValue) {\n    setCookie(config.cookieName, paramValue, {\n      domain: config.domain,\n      maxAge: config.maxAge,\n      path: config.path,\n      sameSite: config.sameSite,\n      secure,\n    });\n\n    if (config.cleanUrl) {\n      removeUrlParam(config.paramName);\n    }\n\n    return { clickId: paramValue, source: \"url\", tracked: true };\n  }\n\n  const cookieValue = getCookie(config.cookieName);\n  if (cookieValue) {\n    return { clickId: cookieValue, source: \"cookie\", tracked: false };\n  }\n\n  return { clickId: null, source: null, tracked: false };\n}\n\nexport function getClickId(cookieName?: string): string | null {\n  return getCookie(cookieName ?? DEFAULTS.cookieName);\n}\n\nexport function reset(\n  options: Pick<RefportTrackingOptions, \"cookieName\" | \"path\" | \"domain\"> = {}\n): void {\n  deleteCookie(options.cookieName ?? DEFAULTS.cookieName, {\n    domain: options.domain,\n    path: options.path ?? DEFAULTS.path,\n  });\n}\n\nexport { createEmbed } from \"./embed\";\nexport type {\n  RefportEmbedInstance,\n  RefportEmbedOptions,\n  RefportTrackingOptions,\n  RefportTrackingResult,\n} from \"./types\";\n"],"mappings":"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"}